From 8eca43269bafcc0e1f41dc38dab2bbe52f81dc98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Wed, 29 May 2024 17:46:09 +0200 Subject: [PATCH 001/162] replace metadata validation service --- .../molecules/GovernanceActionCard.tsx | 12 ++++++---- .../molecules/GovernanceActionCardHeader.tsx | 2 +- .../molecules/GovernanceVotedOnCard.tsx | 17 ++++++++----- .../DashboardGovernanceActionDetails.tsx | 18 +++++++++++--- .../organisms/GovernanceActionsToVote.tsx | 6 +++-- .../queries/useGetProposalsInfiniteQuery.ts | 19 ++------------- .../src/hooks/queries/useGetProposalsQuery.ts | 20 +++------------- govtool/frontend/src/models/api.ts | 11 ++++----- .../src/pages/GovernanceActionDetails.tsx | 14 +++++++++-- .../src/services/requests/getDRepVotes.ts | 24 ++----------------- .../src/services/requests/getProposal.ts | 12 +--------- govtool/frontend/src/types/global.d.ts | 9 +++---- 12 files changed, 68 insertions(+), 96 deletions(-) diff --git a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx index e49b58837..5746245b1 100644 --- a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx +++ b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx @@ -18,7 +18,7 @@ import { } from "@utils"; type ActionTypeProps = Omit< - ActionTypeToDsiplay, + ActionType, | "yesVotes" | "noVotes" | "abstainVotes" @@ -44,7 +44,7 @@ export const GovernanceActionCard: FC = ({ ...props }) => { createdEpochNo, txHash, index, - isDataMissing, + metadataStatus, title, about, } = props; @@ -64,10 +64,10 @@ export const GovernanceActionCard: FC = ({ ...props }) => { justifyContent: "space-between", boxShadow: "0px 4px 15px 0px #DDE3F5", borderRadius: "20px", - backgroundColor: isDataMissing + backgroundColor: !metadataStatus.raw.valid ? "rgba(251, 235, 235, 0.50)" : "rgba(255, 255, 255, 0.3)", - ...(isDataMissing && { + ...(!metadataStatus.raw.valid && { border: "1px solid #F6D5D5", }), ...(inProgress && { @@ -84,7 +84,9 @@ export const GovernanceActionCard: FC = ({ ...props }) => { > { expiryDate, expiryEpochNo, index, + metadataStatus, title, txHash, type, - isDataMissing, } = proposal; const { isMobile, screenWidth } = useScreenDimension(); @@ -54,13 +54,13 @@ export const GovernanceVotedOnCard = ({ votedProposal, inProgress }: Props) => { justifyContent: "space-between", boxShadow: "0px 4px 15px 0px #DDE3F5", borderRadius: "20px", - backgroundColor: isDataMissing + backgroundColor: !metadataStatus.raw.valid ? "rgba(251, 235, 235, 0.50)" : "rgba(255, 255, 255, 0.3)", // TODO: To decide if voted on cards can be actually in progress border: inProgress ? "1px solid #FFCBAD" - : isDataMissing + : !metadataStatus.raw.valid ? "1px solid #F6D5D5" : "1px solid #C0E4BA", }} @@ -76,7 +76,9 @@ export const GovernanceVotedOnCard = ({ votedProposal, inProgress }: Props) => { > { voteUrl: vote.url, voteDate: vote.date, voteEpochNo: vote.epochNo, + isDataMissing: metadataStatus.raw.valid + ? false + : metadataStatus.raw.status, }, }, ) diff --git a/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx b/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx index ee9729745..08af83d48 100644 --- a/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx +++ b/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx @@ -53,7 +53,13 @@ export const DashboardGovernanceActionDetails = () => { elementOne={t("govActions.title")} elementOnePath={PATHS.dashboardGovernanceActions} elementTwo={title} - isDataMissing={state ? state.isDataMissing : data?.isDataMissing} + isDataMissing={ + state + ? state.isDataMissing + : data?.proposal.metadataStatus.raw.valid + ? false + : data?.proposal.metadataStatus.raw.status + } /> { createdEpochNo={ state ? state.createdEpochNo : data.proposal.createdEpochNo } - isDataMissing={state ? state.isDataMissing : data?.isDataMissing} + isDataMissing={ + state + ? state.isDataMissing + : data?.proposal.metadataStatus.raw.valid + ? false + : data?.proposal.metadataStatus.raw.status + } expiryDate={ state ? formatDisplayDate(state.expiryDate) - : formatDisplayDate(data.proposal.expiryDate) + : formatDisplayDate(data?.proposal.expiryDate) } expiryEpochNo={ state ? state.expiryEpochNo : data.proposal.expiryEpochNo diff --git a/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx b/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx index 5efe5ca99..841aa7928 100644 --- a/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx +++ b/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx @@ -12,7 +12,7 @@ import { Slider } from "@organisms"; type GovernanceActionsToVoteProps = { filters: string[]; sorting: string; - proposals: { title: string; actions: ActionTypeToDsiplay[] }[]; + proposals: { title: string; actions: ActionType[] }[]; onDashboard?: boolean; searchPhrase?: string; }; @@ -87,7 +87,9 @@ export const GovernanceActionsToVote = ({ { state: { ...action, - isDataMissing: action.isDataMissing, + isDataMissing: action.metadataStatus.raw.valid + ? false + : action.metadataStatus.raw.status, }, }, ); diff --git a/govtool/frontend/src/hooks/queries/useGetProposalsInfiniteQuery.ts b/govtool/frontend/src/hooks/queries/useGetProposalsInfiniteQuery.ts index 3bae61e10..ca1a179aa 100644 --- a/govtool/frontend/src/hooks/queries/useGetProposalsInfiniteQuery.ts +++ b/govtool/frontend/src/hooks/queries/useGetProposalsInfiniteQuery.ts @@ -3,7 +3,6 @@ import { useInfiniteQuery } from "react-query"; import { QUERY_KEYS } from "@consts"; import { useCardano } from "@context"; import { getProposals, GetProposalsArguments } from "@services"; -import { checkIsMissingGAMetadata } from "@utils"; export const useGetProposalsInfiniteQuery = ({ filters = [], @@ -22,22 +21,8 @@ export const useGetProposalsInfiniteQuery = ({ searchPhrase, sorting, }); - const mappedElements = await Promise.all( - data.elements.map(async (proposal: ActionType) => { - const { metadata, status } = await checkIsMissingGAMetadata({ - hash: proposal?.metadataHash ?? "", - url: proposal?.url ?? "", - }); - // workaround for the missing data in db-sync - return { - ...proposal, - ...metadata, - isDataMissing: status || false, - }; - }), - ); - return { ...data, elements: mappedElements }; + return data; }; const { @@ -71,7 +56,7 @@ export const useGetProposalsInfiniteQuery = ({ const proposals = data?.pages.flatMap( (page) => page.elements, - ) as ActionTypeToDsiplay[]; + ) as ActionType[]; return { proposalsfetchNextPage: fetchNextPage, diff --git a/govtool/frontend/src/hooks/queries/useGetProposalsQuery.ts b/govtool/frontend/src/hooks/queries/useGetProposalsQuery.ts index e6b0d6a38..af8db9d7c 100644 --- a/govtool/frontend/src/hooks/queries/useGetProposalsQuery.ts +++ b/govtool/frontend/src/hooks/queries/useGetProposalsQuery.ts @@ -3,7 +3,6 @@ import { useQuery } from "react-query"; import { QUERY_KEYS } from "@consts"; import { useCardano } from "@context"; import { getProposals, GetProposalsArguments } from "@services"; -import { checkIsMissingGAMetadata } from "@utils"; import { useGetVoterInfo } from "."; export const useGetProposalsQuery = ({ @@ -14,7 +13,7 @@ export const useGetProposalsQuery = ({ const { dRepID, pendingTransaction } = useCardano(); const { voter } = useGetVoterInfo(); - const fetchProposals = async (): Promise => { + const fetchProposals = async (): Promise => { const allProposals = await Promise.all( filters.map((filter) => getProposals({ @@ -29,20 +28,7 @@ export const useGetProposalsQuery = ({ ), ); - const mappedData = await Promise.all( - allProposals - .flatMap((proposal) => proposal.elements) - .map(async (proposal) => { - const { metadata, status } = await checkIsMissingGAMetadata({ - hash: proposal?.metadataHash ?? "", - url: proposal?.url ?? "", - }); - // workaround for the missing data in db-sync - return { ...proposal, ...metadata, isDataMissing: status || false }; - }), - ); - - return mappedData; + return allProposals.flatMap((proposal) => proposal.elements); }; const { data, isLoading } = useQuery( @@ -65,7 +51,7 @@ export const useGetProposalsQuery = ({ }; }; -const groupByType = (data?: ActionTypeToDsiplay[]) => +const groupByType = (data?: ActionType[]) => data?.reduce>>((groups, item) => { const itemType = item.type; diff --git a/govtool/frontend/src/models/api.ts b/govtool/frontend/src/models/api.ts index cb2d700ad..4a06e9903 100644 --- a/govtool/frontend/src/models/api.ts +++ b/govtool/frontend/src/models/api.ts @@ -72,6 +72,11 @@ type ProposalData = { createdEpochNo: number; url: string; metadataHash: string; + metadataStatus: { + raw: { valid: boolean; status?: MetadataValidationStatus }; + status: MetadataValidationStatus; + valid: false; + }; yesVotes: number; noVotes: number; abstainVotes: number; @@ -86,12 +91,6 @@ export interface VotedProposal { vote: ProposalVote; proposal: ProposalData; } -export type VotedProposalToDisplay = { - vote: ProposalVote; - proposal: ProposalData & { - isDataMissing: boolean | MetadataValidationStatus; - }; -}; export type CurrentDelegation = { dRepHash: string | null; diff --git a/govtool/frontend/src/pages/GovernanceActionDetails.tsx b/govtool/frontend/src/pages/GovernanceActionDetails.tsx index 0dcf03949..f2870df5a 100644 --- a/govtool/frontend/src/pages/GovernanceActionDetails.tsx +++ b/govtool/frontend/src/pages/GovernanceActionDetails.tsx @@ -85,7 +85,13 @@ export const GovernanceActionDetails = () => { elementOne={t("govActions.title")} elementOnePath={PATHS.governanceActions} elementTwo={title} - isDataMissing={state ? state.isDataMissing : data?.isDataMissing} + isDataMissing={ + state + ? state.isDataMissing + : data?.proposal.metadataStatus.raw.valid + ? false + : data?.proposal.metadataStatus.raw.status + } /> { state ? state.createdEpochNo : data.proposal.createdEpochNo } isDataMissing={ - state ? state.isDataMissing : data?.isDataMissing + state + ? state.isDataMissing + : data?.proposal.metadataStatus.raw.valid + ? false + : data?.proposal.metadataStatus.raw.status } expiryDate={ state diff --git a/govtool/frontend/src/services/requests/getDRepVotes.ts b/govtool/frontend/src/services/requests/getDRepVotes.ts index 2b7efd682..4d5c6fdaa 100644 --- a/govtool/frontend/src/services/requests/getDRepVotes.ts +++ b/govtool/frontend/src/services/requests/getDRepVotes.ts @@ -1,5 +1,4 @@ -import { VotedProposal, VotedProposalToDisplay } from "@models"; -import { checkIsMissingGAMetadata } from "@utils"; +import { VotedProposal } from "@models"; import { API } from "../API"; type GetDRepVotesParams = { @@ -19,24 +18,5 @@ export const getDRepVotes = async ({ const { data } = await API.get(urlBase, { params }); - const mappedData = (await Promise.all( - data.map(async (proposal) => { - const { metadata, status } = await checkIsMissingGAMetadata({ - hash: proposal?.proposal?.metadataHash, - url: proposal?.proposal?.url, - }); - - return { - vote: proposal.vote, - proposal: { - ...proposal.proposal, - // workaround for the missing data in db-sync - ...metadata, - isDataMissing: status || false, - }, - }; - }), - )) as VotedProposalToDisplay[]; - - return mappedData; + return data; }; diff --git a/govtool/frontend/src/services/requests/getProposal.ts b/govtool/frontend/src/services/requests/getProposal.ts index d366476bb..67044403d 100644 --- a/govtool/frontend/src/services/requests/getProposal.ts +++ b/govtool/frontend/src/services/requests/getProposal.ts @@ -1,4 +1,3 @@ -import { checkIsMissingGAMetadata } from "@utils"; import { API } from "../API"; export const getProposal = async (proposalId: string, drepId?: string) => { @@ -8,14 +7,5 @@ export const getProposal = async (proposalId: string, drepId?: string) => { `/proposal/get/${encodedHash}?drepId=${drepId}`, ); - const { metadata, status } = await checkIsMissingGAMetadata({ - hash: data?.proposal.metadataHash, - url: data?.proposal.url, - }); - // workaround for the missing data in db-sync - return { - ...data, - proposal: { ...data.proposal, ...metadata }, - isDataMissing: status || false, - }; + return data; }; diff --git a/govtool/frontend/src/types/global.d.ts b/govtool/frontend/src/types/global.d.ts index 2cd73ebcc..2e840a5c7 100644 --- a/govtool/frontend/src/types/global.d.ts +++ b/govtool/frontend/src/types/global.d.ts @@ -28,6 +28,11 @@ declare global { createdEpochNo: number; url?: string; metadataHash?: string; + metadataStatus: { + raw: { valid: boolean; status?: MetadataValidationStatus }; + status: MetadataValidationStatus; + valid: false; + }; yesVotes: number; noVotes: number; abstainVotes: number; @@ -39,10 +44,6 @@ declare global { rationale?: string; }; - type ActionTypeToDsiplay = ActionType & { - isDataMissing: boolean | MetadataValidationStatus; - }; - interface ActionVotedOnType extends ActionTypeToDsiplay { vote: VoteType; } From b88aa2f548015bff88c00d4209faddd41d92cd15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Wed, 29 May 2024 17:48:14 +0200 Subject: [PATCH 002/162] delete unnecessary util --- govtool/frontend/src/utils/index.ts | 1 - .../utils/tests/validateMetadataHash.test.ts | 75 ------------------- .../src/utils/validateMetadataHash.ts | 31 -------- 3 files changed, 107 deletions(-) delete mode 100644 govtool/frontend/src/utils/tests/validateMetadataHash.test.ts delete mode 100644 govtool/frontend/src/utils/validateMetadataHash.ts diff --git a/govtool/frontend/src/utils/index.ts b/govtool/frontend/src/utils/index.ts index c708bd587..2bdde2997 100644 --- a/govtool/frontend/src/utils/index.ts +++ b/govtool/frontend/src/utils/index.ts @@ -24,5 +24,4 @@ export * from "./numberValidation"; export * from "./openInNewTab"; export * from "./removeDuplicatedProposals"; export * from "./testIdFromLabel"; -export * from "./validateMetadataHash"; export * from "./wait"; diff --git a/govtool/frontend/src/utils/tests/validateMetadataHash.test.ts b/govtool/frontend/src/utils/tests/validateMetadataHash.test.ts deleted file mode 100644 index c1b29a37f..000000000 --- a/govtool/frontend/src/utils/tests/validateMetadataHash.test.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { vi } from "vitest"; -import { postValidate } from "@services"; -import { checkIsMissingGAMetadata } from ".."; -import { MetadataValidationStatus } from "@/models"; - -const url = "https://example.com"; -const hash = "abcdefg"; - -vi.mock("@services"); - -const mockPostValidate = postValidate as jest.MockedFunction< - typeof postValidate ->; - -describe("checkIsMissingGAMetadata", () => { - it("returns metadata when there are no issues with the validation", async () => { - mockPostValidate.mockResolvedValueOnce({ - valid: true, - metadata: { some: "metadata" }, - }); - - const result = await checkIsMissingGAMetadata({ url, hash }); - - expect(result).toStrictEqual({ - valid: true, - metadata: { some: "metadata" }, - }); - expect(mockPostValidate).toHaveBeenCalledWith({ - url, - hash, - }); - }); - - it("returns MetadataValidationStatus.INVALID_HASH when postValidate resolves with INVALID_HASH", async () => { - mockPostValidate.mockResolvedValueOnce({ - valid: false, - status: MetadataValidationStatus.INVALID_HASH, - }); - - const result = await checkIsMissingGAMetadata({ url, hash }); - - expect(result.status).toBe(MetadataValidationStatus.INVALID_HASH); - expect(mockPostValidate).toHaveBeenCalledWith({ - url, - hash, - }); - }); - - it("returns MetadataValidationStatus.INVALID_JSONLD when postValidate resolves with INVALID_JSONLD", async () => { - mockPostValidate.mockResolvedValueOnce({ - valid: false, - status: MetadataValidationStatus.INVALID_JSONLD, - }); - - const result = await checkIsMissingGAMetadata({ url, hash }); - - expect(result.status).toBe(MetadataValidationStatus.INVALID_JSONLD); - expect(mockPostValidate).toHaveBeenCalledWith({ - url, - hash, - }); - }); - - it("returns MetadataValidationStatus.URL_NOT_FOUND when postValidate throws an error", async () => { - mockPostValidate.mockRejectedValueOnce(new Error("404 Not Found")); - - const result = await checkIsMissingGAMetadata({ url, hash }); - - expect(result.status).toBe(MetadataValidationStatus.URL_NOT_FOUND); - expect(mockPostValidate).toHaveBeenCalledWith({ - url, - hash, - }); - }); -}); diff --git a/govtool/frontend/src/utils/validateMetadataHash.ts b/govtool/frontend/src/utils/validateMetadataHash.ts deleted file mode 100644 index 76ac3ecfa..000000000 --- a/govtool/frontend/src/utils/validateMetadataHash.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { postValidate } from "@services"; - -import { MetadataValidationStatus } from "@/models"; - -type CheckIsMissingGAMetadataResponse = { - status?: MetadataValidationStatus; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - metadata?: any; - valid: boolean; -}; - -export const checkIsMissingGAMetadata = async ({ - url, - hash, -}: { - url: string; - hash: string; -}): Promise => { - try { - const { status, metadata, valid } = await postValidate({ - url, - hash, - }); - if (status) { - return { status, valid }; - } - return { metadata, valid }; - } catch (error) { - return { status: MetadataValidationStatus.URL_NOT_FOUND, valid: false }; - } -}; From 5bca6414dd2d9fee1fc7232f2e978212260efa73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Fri, 31 May 2024 10:43:40 +0200 Subject: [PATCH 003/162] fix GA story --- .../src/stories/GovernanceAction.stories.ts | 24 +++++++++++++++---- govtool/frontend/src/types/global.d.ts | 4 ++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/govtool/frontend/src/stories/GovernanceAction.stories.ts b/govtool/frontend/src/stories/GovernanceAction.stories.ts index 76f2408f9..238a696c6 100644 --- a/govtool/frontend/src/stories/GovernanceAction.stories.ts +++ b/govtool/frontend/src/stories/GovernanceAction.stories.ts @@ -26,7 +26,11 @@ const commonArgs = { expiryEpochNo: 420, index: 2, inProgress: false, - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, onClick: jest.fn(), title: "Example title", txHash: "sad78afdsf7jasd98d", @@ -75,20 +79,32 @@ export const GovernanceActionCardIsLoading: Story = { export const GovernanceActionCardDataMissing: Story = { args: { ...commonArgs, - isDataMissing: MetadataValidationStatus.URL_NOT_FOUND, + metadataStatus: { + raw: { status: MetadataValidationStatus.URL_NOT_FOUND, valid: false }, + status: MetadataValidationStatus.URL_NOT_FOUND, + valid: false, + }, }, }; export const GovernanceActionCardIncorectFormat: Story = { args: { ...commonArgs, - isDataMissing: MetadataValidationStatus.INVALID_JSONLD, + metadataStatus: { + raw: { status: MetadataValidationStatus.INVALID_JSONLD, valid: false }, + status: MetadataValidationStatus.INVALID_JSONLD, + valid: false, + }, }, }; export const GovernanceActionCardNotVerifiable: Story = { args: { ...commonArgs, - isDataMissing: MetadataValidationStatus.INVALID_HASH, + metadataStatus: { + raw: { status: MetadataValidationStatus.INVALID_HASH, valid: false }, + status: MetadataValidationStatus.INVALID_HASH, + valid: false, + }, }, }; diff --git a/govtool/frontend/src/types/global.d.ts b/govtool/frontend/src/types/global.d.ts index 2e840a5c7..0717d4a6c 100644 --- a/govtool/frontend/src/types/global.d.ts +++ b/govtool/frontend/src/types/global.d.ts @@ -30,8 +30,8 @@ declare global { metadataHash?: string; metadataStatus: { raw: { valid: boolean; status?: MetadataValidationStatus }; - status: MetadataValidationStatus; - valid: false; + status?: MetadataValidationStatus; + valid: boolean; }; yesVotes: number; noVotes: number; From 13db99ef7bbb2f3f4f9678a127642b3c6f5cafd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Fri, 31 May 2024 10:45:45 +0200 Subject: [PATCH 004/162] fix type --- govtool/frontend/src/models/api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/govtool/frontend/src/models/api.ts b/govtool/frontend/src/models/api.ts index 4a06e9903..5c4f003b9 100644 --- a/govtool/frontend/src/models/api.ts +++ b/govtool/frontend/src/models/api.ts @@ -75,7 +75,7 @@ type ProposalData = { metadataStatus: { raw: { valid: boolean; status?: MetadataValidationStatus }; status: MetadataValidationStatus; - valid: false; + valid: boolean; }; yesVotes: number; noVotes: number; From 103f0407e7e53bd9951051288a19faea91d8af5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Fri, 31 May 2024 11:00:17 +0200 Subject: [PATCH 005/162] fix Voted GAs --- .../src/hooks/queries/useGetDRepVotesQuery.ts | 4 +-- govtool/frontend/src/mock/index.ts | 1 - govtool/frontend/src/mock/voteOn.ts | 36 ------------------- govtool/frontend/src/models/api.ts | 2 +- .../stories/GovernanceActionVoted.stories.ts | 24 ++++++++++--- .../src/utils/removeDuplicatedProposals.ts | 2 +- .../tests/removeDuplicatedProposals.test.ts | 20 ++++++++--- 7 files changed, 40 insertions(+), 49 deletions(-) delete mode 100644 govtool/frontend/src/mock/voteOn.ts diff --git a/govtool/frontend/src/hooks/queries/useGetDRepVotesQuery.ts b/govtool/frontend/src/hooks/queries/useGetDRepVotesQuery.ts index 3578ba955..313823722 100644 --- a/govtool/frontend/src/hooks/queries/useGetDRepVotesQuery.ts +++ b/govtool/frontend/src/hooks/queries/useGetDRepVotesQuery.ts @@ -3,7 +3,7 @@ import { useQuery } from "react-query"; import { QUERY_KEYS } from "@consts"; import { useCardano } from "@context"; import { getDRepVotes } from "@services"; -import { VotedProposalToDisplay } from "@/models/api"; +import { VotedProposal } from "@/models"; export const useGetDRepVotesQuery = ( type?: string[], @@ -56,7 +56,7 @@ export const useGetDRepVotesQuery = ( return { data: Object.values(groupedByType ?? []) as { title: string; - actions: VotedProposalToDisplay[]; + actions: VotedProposal[]; }[], areDRepVotesLoading: isLoading, refetch, diff --git a/govtool/frontend/src/mock/index.ts b/govtool/frontend/src/mock/index.ts index fb09a97de..e69de29bb 100644 --- a/govtool/frontend/src/mock/index.ts +++ b/govtool/frontend/src/mock/index.ts @@ -1 +0,0 @@ -export * from "./voteOn"; diff --git a/govtool/frontend/src/mock/voteOn.ts b/govtool/frontend/src/mock/voteOn.ts deleted file mode 100644 index 20f49a257..000000000 --- a/govtool/frontend/src/mock/voteOn.ts +++ /dev/null @@ -1,36 +0,0 @@ -export const VOTE_ON_DATA = [ - { - title: "No Confidence", - actions: [ - { - id: "123456", - type: "for example", - vote: "yes", - expiryDate: "1970-01-01", - }, - { - id: "65432", - type: "gov action", - vote: "no", - expiryDate: "1970-01-01", - }, - ], - }, - { - title: "New constitutional committee or quorum size", - actions: [ - { - id: "abc123", - type: "action gov", - vote: "abstain", - expiryDate: "1970-01-01", - }, - { - id: "123cba", - type: "voting action", - vote: "yes", - expiryDate: "1970-01-01", - }, - ], - }, -] as VotedOnDataType; diff --git a/govtool/frontend/src/models/api.ts b/govtool/frontend/src/models/api.ts index 5c4f003b9..acfd5da4d 100644 --- a/govtool/frontend/src/models/api.ts +++ b/govtool/frontend/src/models/api.ts @@ -74,7 +74,7 @@ type ProposalData = { metadataHash: string; metadataStatus: { raw: { valid: boolean; status?: MetadataValidationStatus }; - status: MetadataValidationStatus; + status?: MetadataValidationStatus; valid: boolean; }; yesVotes: number; diff --git a/govtool/frontend/src/stories/GovernanceActionVoted.stories.ts b/govtool/frontend/src/stories/GovernanceActionVoted.stories.ts index 8a270cf6b..a3b687d0e 100644 --- a/govtool/frontend/src/stories/GovernanceActionVoted.stories.ts +++ b/govtool/frontend/src/stories/GovernanceActionVoted.stories.ts @@ -64,7 +64,11 @@ export const GovernanceVotedOnCardComponent: Story = { proposal: { createdEpochNo: 232, expiryEpochNo: 323, - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, createdDate: "1970-01-01T00:00:00Z", expiryDate: "1970-02-01T00:00:00Z", id: "exampleId", @@ -101,7 +105,11 @@ export const GovernanceVotedOnCardAbstain: Story = { proposal: { createdEpochNo: 232, expiryEpochNo: 323, - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, createdDate: "1970-01-01T00:00:00Z", expiryDate: "1970-02-01T00:00:00Z", id: "exampleId", @@ -139,7 +147,11 @@ export const GovernanceVotedOnCardYes: Story = { proposal: { createdEpochNo: 232, expiryEpochNo: 323, - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, createdDate: "1970-01-01T00:00:00Z", expiryDate: "1970-02-01T00:00:00Z", id: "exampleId", @@ -177,7 +189,11 @@ export const GovernanceVotedOnCardNo: Story = { proposal: { createdEpochNo: 232, expiryEpochNo: 323, - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, createdDate: "1970-01-01T00:00:00Z", expiryDate: "1970-02-01T00:00:00Z", id: "exampleId", diff --git a/govtool/frontend/src/utils/removeDuplicatedProposals.ts b/govtool/frontend/src/utils/removeDuplicatedProposals.ts index 14c8305a0..a0d068377 100644 --- a/govtool/frontend/src/utils/removeDuplicatedProposals.ts +++ b/govtool/frontend/src/utils/removeDuplicatedProposals.ts @@ -1,4 +1,4 @@ -export const removeDuplicatedProposals = (proposals: ActionTypeToDsiplay[]) => { +export const removeDuplicatedProposals = (proposals: ActionType[]) => { if (!proposals) return []; const uniqueGovActionIds = new Set(); return proposals.filter((item) => { diff --git a/govtool/frontend/src/utils/tests/removeDuplicatedProposals.test.ts b/govtool/frontend/src/utils/tests/removeDuplicatedProposals.test.ts index 121c358c1..13692a44e 100644 --- a/govtool/frontend/src/utils/tests/removeDuplicatedProposals.test.ts +++ b/govtool/frontend/src/utils/tests/removeDuplicatedProposals.test.ts @@ -22,7 +22,11 @@ const uniqueProposals = [ abstainVotes: 81528377728, title: "Proposal 1322 Title", about: "This is about Proposal 1322", - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, motivation: "Motivation behind Proposal 1322", rationale: "Rationale for Proposal 1322", }, @@ -47,7 +51,11 @@ const uniqueProposals = [ abstainVotes: 81528377728, title: "Proposal 1338 Title", about: "This is about Proposal 1338", - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, motivation: "Motivation behind Proposal 1338", rationale: "Rationale for Proposal 1338", }, @@ -72,7 +80,11 @@ const uniqueProposals = [ abstainVotes: 81528377728, title: "Proposal 1335 Title", about: "This is about Proposal 1335", - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, motivation: "Motivation behind Proposal 1335", rationale: "Rationale for Proposal 1335", }, @@ -102,7 +114,7 @@ describe("remove duplicated proposals", () => { }); it("returns empty array if input is empty", () => { - const proposals: ActionTypeToDsiplay[] = []; + const proposals: ActionType[] = []; expect(removeDuplicatedProposals(proposals).length).toBe(0); }); }); From bb14ce8d84dbffac8ea824339fb4798e737f66fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Fri, 31 May 2024 14:01:35 +0200 Subject: [PATCH 006/162] take GA metadata from metadataStatus --- .../molecules/GovernanceActionCard.tsx | 6 ++-- .../molecules/GovernanceVotedOnCard.tsx | 6 ++-- .../src/components/organisms/BgCard.tsx | 2 +- .../DashboardGovernanceActionDetails.tsx | 30 +++++++++++++++---- govtool/frontend/src/models/api.ts | 12 +++++++- .../DashboardGovernanceActionsCategory.tsx | 3 ++ .../src/pages/GovernanceActionDetails.tsx | 28 +++++++++++++---- .../src/pages/GovernanceActionsCategory.tsx | 3 ++ govtool/frontend/src/types/global.d.ts | 12 +++++++- 9 files changed, 80 insertions(+), 22 deletions(-) diff --git a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx index 5746245b1..7d607d7c9 100644 --- a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx +++ b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx @@ -45,8 +45,6 @@ export const GovernanceActionCard: FC = ({ ...props }) => { txHash, index, metadataStatus, - title, - about, } = props; const { isMobile, screenWidth } = useScreenDimension(); const { t } = useTranslation(); @@ -83,14 +81,14 @@ export const GovernanceActionCard: FC = ({ ...props }) => { }} > { const navigate = useNavigate(); const { proposal, vote } = votedProposal; const { - about, createdDate, createdEpochNo, expiryDate, expiryEpochNo, index, metadataStatus, - title, txHash, type, } = proposal; @@ -75,14 +73,14 @@ export const GovernanceVotedOnCard = ({ votedProposal, inProgress }: Props) => { }} > ( diff --git a/govtool/frontend/src/pages/DRepDirectoryContent.tsx b/govtool/frontend/src/pages/DRepDirectoryContent.tsx index f1e6616bc..3365f8418 100644 --- a/govtool/frontend/src/pages/DRepDirectoryContent.tsx +++ b/govtool/frontend/src/pages/DRepDirectoryContent.tsx @@ -212,6 +212,7 @@ export const DRepDirectoryContent: FC = ({ delegate(dRep.drepId)} /> From f71d900d3d0c0f783d6019797a2fa52f06558c6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Tue, 4 Jun 2024 16:37:02 +0200 Subject: [PATCH 013/162] change way to handle is delegation process for automated voting options --- .../components/organisms/AutomatedVotingOptions.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/govtool/frontend/src/components/organisms/AutomatedVotingOptions.tsx b/govtool/frontend/src/components/organisms/AutomatedVotingOptions.tsx index 7a174d59b..b6d28139a 100644 --- a/govtool/frontend/src/components/organisms/AutomatedVotingOptions.tsx +++ b/govtool/frontend/src/components/organisms/AutomatedVotingOptions.tsx @@ -23,7 +23,7 @@ type AutomatedVotingOptionsProps = { votingPower: string; delegationInProgress?: string; isConnected?: boolean; - isDelegationLoading?: boolean; + isDelegationLoading?: string | null; pendingTransaction?: PendingTransaction; txHash?: string | null; }; @@ -110,7 +110,9 @@ export const AutomatedVotingOptions = ({ } inProgress={isDelegationToAbstainInProgress} isConnected={isConnected} - isDelegateLoading={isDelegationLoading} + isDelegateLoading={ + isDelegationLoading === AutomatedVotingOptionDelegationId.abstain + } isSelected={isDelegatedToAbstain} onClickDelegate={() => delegate(AutomatedVotingOptionDelegationId.abstain) @@ -146,7 +148,10 @@ export const AutomatedVotingOptions = ({ } inProgress={isDelegationToNoConfidenceInProgress} isConnected={isConnected} - isDelegateLoading={isDelegationLoading} + isDelegateLoading={ + isDelegationLoading === + AutomatedVotingOptionDelegationId.no_confidence + } isSelected={isDelegatedToNoConfidence} onClickDelegate={() => delegate(AutomatedVotingOptionDelegationId.no_confidence) From 414dc45b7caaa149f6b56a2d8c36b7c3a11484a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Tue, 4 Jun 2024 16:41:54 +0200 Subject: [PATCH 014/162] change props hierarchy in Button component --- govtool/frontend/src/components/atoms/Button.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/govtool/frontend/src/components/atoms/Button.tsx b/govtool/frontend/src/components/atoms/Button.tsx index 3bfb290fd..2f7368ffd 100644 --- a/govtool/frontend/src/components/atoms/Button.tsx +++ b/govtool/frontend/src/components/atoms/Button.tsx @@ -24,7 +24,6 @@ export const Button = ({ return ( {isLoading && ( From 9aff4271265ff16f52254d645934192320bb388c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Tue, 4 Jun 2024 16:45:28 +0200 Subject: [PATCH 015/162] add change for drep details --- govtool/frontend/src/pages/DRepDetails.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/govtool/frontend/src/pages/DRepDetails.tsx b/govtool/frontend/src/pages/DRepDetails.tsx index 616d0de56..98b96b292 100644 --- a/govtool/frontend/src/pages/DRepDetails.tsx +++ b/govtool/frontend/src/pages/DRepDetails.tsx @@ -275,7 +275,7 @@ export const DRepDetails = ({ isConnected }: DRepDetailsProps) => { + )} {isMobile && ( { + const walletAPI = useCardano(); + const isWalletConnected = walletAPI.isEnabled; + + return ( + + {!isWalletConnected && } + + + ); +}; diff --git a/govtool/frontend/src/consts/navItems.ts b/govtool/frontend/src/consts/navItems.tsx similarity index 73% rename from govtool/frontend/src/consts/navItems.ts rename to govtool/frontend/src/consts/navItems.tsx index 4c6922b32..d184cf49b 100644 --- a/govtool/frontend/src/consts/navItems.ts +++ b/govtool/frontend/src/consts/navItems.tsx @@ -1,6 +1,8 @@ +import { IconAcademicCap } from "@intersect.mbo/intersectmbo.org-icons-set"; import i18n from "@/i18n"; import { ICONS } from "./icons"; -import { PATHS } from "./paths"; +import { PATHS, PDF_PATHS } from "./paths"; +import { theme } from "@/theme"; export const NAV_ITEMS = [ { @@ -58,6 +60,30 @@ export const CONNECTED_NAV_ITEMS = [ icon: ICONS.governanceActionsIcon, newTabLink: null, }, + { + dataTestId: "proposal-discussion-link", + label: i18n.t("proposalDiscussion.title"), + navTo: `${PATHS.connectedProposalPillar.replace("/*", "")}${ + PDF_PATHS.proposalDiscussion + }`, + activeIcon: ( + + ), + icon: ( + + ), + newTabLink: null, + }, { dataTestId: "guides-link", label: i18n.t("menu.guides"), diff --git a/govtool/frontend/src/consts/paths.ts b/govtool/frontend/src/consts/paths.ts index 4cbf4f7bf..cade2bcb3 100644 --- a/govtool/frontend/src/consts/paths.ts +++ b/govtool/frontend/src/consts/paths.ts @@ -24,4 +24,12 @@ export const PATHS = { retireAsDrep: "/retire_drep", retireAsDirectVoter: "/retire_direct_voter", stakeKeys: "/stake_keys", + proposalPillar: "/proposal_pillar/*", + connectedProposalPillar: "/connected/proposal_pillar/*", +}; + +export const PDF_PATHS = { + proposalDiscussion: "/proposal_discussion", + proposalDiscussionProposal: "/proposal_discussion/:id", + proposalDiscussionCreateGovernanceAction: "/create-governance-action", }; diff --git a/govtool/frontend/src/context/wallet.tsx b/govtool/frontend/src/context/wallet.tsx index 8e33395d8..70989957d 100644 --- a/govtool/frontend/src/context/wallet.tsx +++ b/govtool/frontend/src/context/wallet.tsx @@ -109,6 +109,8 @@ type BuildSignSubmitConwayCertTxArgs = { interface CardanoContextType { address?: string; disconnectWallet: () => Promise; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + getChangeAddress: (enabledApi: CardanoApiWallet) => Promise; enable: (walletName: string) => Promise; isEnableLoading: string | null; error?: string; @@ -202,6 +204,9 @@ const CardanoProvider = (props: Props) => { Buffer.from(raw, "hex"), ).to_bech32(); setWalletState((prev) => ({ ...prev, changeAddress })); + + // return changeAddress for the usage of the pillars; + return changeAddress; } catch (err) { Sentry.captureException(err); console.error(err); @@ -849,6 +854,7 @@ const CardanoProvider = (props: Props) => { buildVote, buildVoteDelegationCert, disconnectWallet, + getChangeAddress, dRepID, dRepIDBech32, enable, @@ -875,6 +881,7 @@ const CardanoProvider = (props: Props) => { buildVote, buildVoteDelegationCert, disconnectWallet, + getChangeAddress, dRepID, dRepIDBech32, enable, diff --git a/govtool/frontend/src/i18n/locales/en.ts b/govtool/frontend/src/i18n/locales/en.ts index 9c00bd3f0..6f42b9c03 100644 --- a/govtool/frontend/src/i18n/locales/en.ts +++ b/govtool/frontend/src/i18n/locales/en.ts @@ -369,6 +369,10 @@ export const en = { emailPlaceholder: "john.smith@email.com", }, }, + proposalDiscussion: { + title: "Proposal Discussion", + proposeAGovernanceAction: "Propose a Governance Action", + }, govActions: { about: "About", abstract: "Abstract:", diff --git a/govtool/frontend/src/types/@intersect.mbo.d.ts b/govtool/frontend/src/types/@intersect.mbo.d.ts new file mode 100644 index 000000000..3c9ca7e21 --- /dev/null +++ b/govtool/frontend/src/types/@intersect.mbo.d.ts @@ -0,0 +1,10 @@ +type PDFProps = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + walletAPI: any; + pathname: string; + locale?: string; +}; + +declare module "@intersect.mbo/pdf-ui/cjs" { + export default function PDF(props: PDFProps): JSX.Element; +} diff --git a/govtool/frontend/tsconfig.json b/govtool/frontend/tsconfig.json index 89bd35942..0341a1d7e 100644 --- a/govtool/frontend/tsconfig.json +++ b/govtool/frontend/tsconfig.json @@ -12,6 +12,7 @@ "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, + "allowJs": true, "jsx": "react-jsx", /* Linting */ @@ -37,6 +38,7 @@ } }, "include": [ + "node_modules/@intersect.mbo/**/*.(js|ts)", "src", "vitest.config.ts", "src/**/*.test.ts", diff --git a/govtool/frontend/vite.config.ts b/govtool/frontend/vite.config.ts index 0442b81a1..5ad7053a3 100644 --- a/govtool/frontend/vite.config.ts +++ b/govtool/frontend/vite.config.ts @@ -1,12 +1,43 @@ -import { defineConfig as defineViteConfig, mergeConfig } from "vite"; +import path from "path"; +import { + defineConfig as defineViteConfig, + mergeConfig, + transformWithEsbuild, +} from "vite"; import { defineConfig as defineVitestConfig } from "vitest/config"; import react from "@vitejs/plugin-react"; -import path from "path"; // https://vitejs.dev/config/ const viteConfig = defineViteConfig({ - plugins: [react()], + plugins: [ + { + name: "jsx-in-js-transformer", + async transform(code, id) { + if (!id.match(/.*\.js$/)) return null; + + // Use the exposed transform from vite, instead of directly + // transforming with esbuild + return transformWithEsbuild(code, id, { + loader: "jsx", + jsx: "automatic", + }); + }, + }, + react(), + ], cacheDir: ".vite", + optimizeDeps: { + force: true, + include: ["@intersect.mbo/**/*"], + esbuildOptions: { + loader: { + ".js": "jsx", + }, + }, + }, + define: { + "process.env": {}, + }, resolve: { alias: [ { find: "@", replacement: path.resolve(__dirname, "./src") }, @@ -51,10 +82,10 @@ const vitestConfig = defineVitestConfig({ setupFiles: "./src/setupTests.ts", globals: true, environment: "jsdom", - reporters: ["default","junit"], + reporters: ["default", "junit"], outputFile: { - junit: './junit-report.xml', - json: './json-report.json', + junit: "./junit-report.xml", + json: "./json-report.json", }, coverage: { include: [ @@ -66,7 +97,7 @@ const vitestConfig = defineVitestConfig({ "src/utils/**/*", ], provider: "v8", - reporter: ["json-summary","lcov"], + reporter: ["json-summary", "lcov"], reportOnFailure: true, enabled: true, }, diff --git a/govtool/frontend/yarn.lock b/govtool/frontend/yarn.lock deleted file mode 100644 index d32bcde1a..000000000 --- a/govtool/frontend/yarn.lock +++ /dev/null @@ -1,11562 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@adobe/css-tools@^4.3.2": - version "4.3.3" - resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz" - integrity sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ== - -"@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": - version "2.3.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@asamuzakjp/dom-selector@^2.0.1": - version "2.0.2" - resolved "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-2.0.2.tgz" - integrity sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ== - dependencies: - bidi-js "^1.0.3" - css-tree "^2.3.1" - is-potential-custom-element-name "^1.0.1" - -"@aw-web-design/x-default-browser@1.4.126": - version "1.4.126" - resolved "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz" - integrity sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug== - dependencies: - default-browser-id "3.0.0" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": - version "7.24.2" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz" - integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== - dependencies: - "@babel/highlight" "^7.24.2" - picocolors "^1.0.0" - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5", "@babel/compat-data@^7.24.4": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz" - integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== - -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.9", "@babel/core@^7.20.12", "@babel/core@^7.22.5", "@babel/core@^7.23.0", "@babel/core@^7.23.2", "@babel/core@^7.23.5", "@babel/core@^7.23.9", "@babel/core@^7.7.5": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz" - integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.4" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.4" - "@babel/parser" "^7.24.4" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.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" - -"@babel/generator@^7.22.5", "@babel/generator@^7.23.0", "@babel/generator@^7.24.1", "@babel/generator@^7.24.4", "@babel/generator@^7.7.2": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz" - integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== - dependencies: - "@babel/types" "^7.24.0" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz" - integrity sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.6.1": - version "0.6.1" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz" - integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== - dependencies: - "@babel/types" "^7.23.0" - -"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1": - version "7.24.3" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz" - integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== - dependencies: - "@babel/types" "^7.24.0" - -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - 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" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.0" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz" - integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== - -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" - -"@babel/helper-replace-supers@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz" - integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz" - integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.24.4": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz" - integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== - dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" - -"@babel/highlight@^7.24.2": - version "7.24.2" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz" - integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz" - integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.4": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz" - integrity sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz" - integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz" - integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.24.1" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz" - integrity sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-flow@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz" - integrity sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-import-assertions@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz" - integrity sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-import-attributes@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz" - integrity sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.24.1", "@babel/plugin-syntax-jsx@^7.7.2": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz" - integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.24.1", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz" - integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz" - integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-async-generator-functions@^7.24.3": - version "7.24.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz" - integrity sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz" - integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== - dependencies: - "@babel/helper-module-imports" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" - -"@babel/plugin-transform-block-scoped-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz" - integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-block-scoping@^7.24.4": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz" - integrity sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-class-properties@^7.22.5", "@babel/plugin-transform-class-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz" - integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-class-static-block@^7.24.4": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz" - integrity sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.4" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz" - integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz" - integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/template" "^7.24.0" - -"@babel/plugin-transform-destructuring@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz" - integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-dotall-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz" - integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-duplicate-keys@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz" - integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-dynamic-import@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz" - integrity sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz" - integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-export-namespace-from@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz" - integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-flow-strip-types@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.1.tgz" - integrity sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-flow" "^7.24.1" - -"@babel/plugin-transform-for-of@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz" - integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz" - integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== - dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-json-strings@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz" - integrity sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz" - integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-logical-assignment-operators@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz" - integrity sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz" - integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-modules-amd@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz" - integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-modules-commonjs@^7.23.0", "@babel/plugin-transform-modules-commonjs@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz" - integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz" - integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/plugin-transform-modules-umd@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz" - integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz" - integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11", "@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz" - integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz" - integrity sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz" - integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA== - dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.1" - -"@babel/plugin-transform-object-super@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz" - integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" - -"@babel/plugin-transform-optional-catch-binding@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz" - integrity sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.23.0", "@babel/plugin-transform-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz" - integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz" - integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-private-methods@^7.22.5", "@babel/plugin-transform-private-methods@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz" - integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-private-property-in-object@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz" - integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz" - integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-react-jsx-self@^7.18.6", "@babel/plugin-transform-react-jsx-self@^7.23.3": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz" - integrity sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-react-jsx-source@^7.19.6", "@babel/plugin-transform-react-jsx-source@^7.23.3": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz" - integrity sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-regenerator@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz" - integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz" - integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-shorthand-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz" - integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz" - integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz" - integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-template-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz" - integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-typeof-symbol@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz" - integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-typescript@^7.24.1": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz" - integrity sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.4" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-typescript" "^7.24.1" - -"@babel/plugin-transform-unicode-escapes@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz" - integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-unicode-property-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz" - integrity sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-unicode-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz" - integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-unicode-sets-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz" - integrity sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/preset-env@^7.23.2": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz" - integrity sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A== - dependencies: - "@babel/compat-data" "^7.24.4" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.4" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.1" - "@babel/plugin-syntax-import-attributes" "^7.24.1" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@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-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.1" - "@babel/plugin-transform-async-generator-functions" "^7.24.3" - "@babel/plugin-transform-async-to-generator" "^7.24.1" - "@babel/plugin-transform-block-scoped-functions" "^7.24.1" - "@babel/plugin-transform-block-scoping" "^7.24.4" - "@babel/plugin-transform-class-properties" "^7.24.1" - "@babel/plugin-transform-class-static-block" "^7.24.4" - "@babel/plugin-transform-classes" "^7.24.1" - "@babel/plugin-transform-computed-properties" "^7.24.1" - "@babel/plugin-transform-destructuring" "^7.24.1" - "@babel/plugin-transform-dotall-regex" "^7.24.1" - "@babel/plugin-transform-duplicate-keys" "^7.24.1" - "@babel/plugin-transform-dynamic-import" "^7.24.1" - "@babel/plugin-transform-exponentiation-operator" "^7.24.1" - "@babel/plugin-transform-export-namespace-from" "^7.24.1" - "@babel/plugin-transform-for-of" "^7.24.1" - "@babel/plugin-transform-function-name" "^7.24.1" - "@babel/plugin-transform-json-strings" "^7.24.1" - "@babel/plugin-transform-literals" "^7.24.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.1" - "@babel/plugin-transform-member-expression-literals" "^7.24.1" - "@babel/plugin-transform-modules-amd" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-modules-systemjs" "^7.24.1" - "@babel/plugin-transform-modules-umd" "^7.24.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.24.1" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1" - "@babel/plugin-transform-numeric-separator" "^7.24.1" - "@babel/plugin-transform-object-rest-spread" "^7.24.1" - "@babel/plugin-transform-object-super" "^7.24.1" - "@babel/plugin-transform-optional-catch-binding" "^7.24.1" - "@babel/plugin-transform-optional-chaining" "^7.24.1" - "@babel/plugin-transform-parameters" "^7.24.1" - "@babel/plugin-transform-private-methods" "^7.24.1" - "@babel/plugin-transform-private-property-in-object" "^7.24.1" - "@babel/plugin-transform-property-literals" "^7.24.1" - "@babel/plugin-transform-regenerator" "^7.24.1" - "@babel/plugin-transform-reserved-words" "^7.24.1" - "@babel/plugin-transform-shorthand-properties" "^7.24.1" - "@babel/plugin-transform-spread" "^7.24.1" - "@babel/plugin-transform-sticky-regex" "^7.24.1" - "@babel/plugin-transform-template-literals" "^7.24.1" - "@babel/plugin-transform-typeof-symbol" "^7.24.1" - "@babel/plugin-transform-unicode-escapes" "^7.24.1" - "@babel/plugin-transform-unicode-property-regex" "^7.24.1" - "@babel/plugin-transform-unicode-regex" "^7.24.1" - "@babel/plugin-transform-unicode-sets-regex" "^7.24.1" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.4" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-flow@^7.22.15": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.1.tgz" - integrity sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-transform-flow-strip-types" "^7.24.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-typescript@^7.23.0": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz" - integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-syntax-jsx" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-typescript" "^7.24.1" - -"@babel/register@^7.22.15": - version "7.23.7" - resolved "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz" - integrity sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ== - dependencies: - clone-deep "^4.0.1" - find-cache-dir "^2.0.0" - make-dir "^2.1.0" - pirates "^4.0.6" - source-map-support "^0.5.16" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.16.7", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.8", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz" - integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.24.0", "@babel/template@^7.3.3": - version "7.24.0" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" - -"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.2", "@babel/traverse@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz" - integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== - dependencies: - "@babel/code-frame" "^7.24.1" - "@babel/generator" "^7.24.1" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.1" - "@babel/types" "^7.24.0" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.18.9", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.24.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@base2/pretty-print-object@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz" - integrity sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA== - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@digitalbazaar/http-client@^3.4.1": - version "3.4.1" - resolved "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz" - integrity sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g== - dependencies: - ky "^0.33.3" - ky-universal "^0.11.0" - undici "^5.21.2" - -"@discoveryjs/json-ext@^0.5.3": - version "0.5.7" - resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@emotion/babel-plugin@^11.11.0": - version "11.11.0" - resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz" - integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/serialize" "^1.1.2" - babel-plugin-macros "^3.1.0" - convert-source-map "^1.5.0" - escape-string-regexp "^4.0.0" - find-root "^1.1.0" - source-map "^0.5.7" - stylis "4.2.0" - -"@emotion/cache@^11.11.0": - version "11.11.0" - resolved "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz" - integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== - dependencies: - "@emotion/memoize" "^0.8.1" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - stylis "4.2.0" - -"@emotion/hash@^0.9.1": - version "0.9.1" - resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz" - integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== - -"@emotion/is-prop-valid@^1.2.2": - version "1.2.2" - resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz" - integrity sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw== - dependencies: - "@emotion/memoize" "^0.8.1" - -"@emotion/memoize@^0.8.1": - version "0.8.1" - resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz" - integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== - -"@emotion/react@^11.11.1": - version "11.11.4" - resolved "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz" - integrity sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.3" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - hoist-non-react-statics "^3.3.1" - -"@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3", "@emotion/serialize@^1.1.4": - version "1.1.4" - resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz" - integrity sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ== - dependencies: - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/unitless" "^0.8.1" - "@emotion/utils" "^1.2.1" - csstype "^3.0.2" - -"@emotion/sheet@^1.2.2": - version "1.2.2" - resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz" - integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== - -"@emotion/styled@^11.11.0": - version "11.11.5" - resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.5.tgz" - integrity sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/is-prop-valid" "^1.2.2" - "@emotion/serialize" "^1.1.4" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - -"@emotion/unitless@^0.8.1": - version "0.8.1" - resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz" - integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.0", "@emotion/use-insertion-effect-with-fallbacks@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz" - integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== - -"@emotion/utils@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz" - integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== - -"@emotion/weak-memoize@^0.3.1": - version "0.3.1" - resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz" - integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== - -"@emurgo/cardano-serialization-lib-asmjs@12.0.0-alpha.29": - version "12.0.0-alpha.29" - resolved "https://registry.npmjs.org/@emurgo/cardano-serialization-lib-asmjs/-/cardano-serialization-lib-asmjs-12.0.0-alpha.29.tgz" - integrity sha512-E9+jGLo8QciXbkb7dDYEbZL6YlEJfNRwzYkyR4kkuvzAsy0uKe93dtAY1tdj6ECp+NyeH5xqyKU6aUT8rxwm7A== - -"@esbuild/aix-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" - integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== - -"@esbuild/aix-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" - integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== - -"@esbuild/android-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" - integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== - -"@esbuild/android-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" - integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== - -"@esbuild/android-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" - integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== - -"@esbuild/android-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" - integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== - -"@esbuild/android-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" - integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== - -"@esbuild/android-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" - integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== - -"@esbuild/android-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" - integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== - -"@esbuild/android-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" - integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== - -"@esbuild/android-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" - integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== - -"@esbuild/darwin-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz" - integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== - -"@esbuild/darwin-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz" - integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== - -"@esbuild/darwin-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz" - integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== - -"@esbuild/darwin-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" - integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== - -"@esbuild/darwin-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" - integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== - -"@esbuild/darwin-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" - integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== - -"@esbuild/freebsd-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" - integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== - -"@esbuild/freebsd-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" - integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== - -"@esbuild/freebsd-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" - integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== - -"@esbuild/freebsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" - integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== - -"@esbuild/freebsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" - integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== - -"@esbuild/freebsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" - integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== - -"@esbuild/linux-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" - integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== - -"@esbuild/linux-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" - integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== - -"@esbuild/linux-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" - integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== - -"@esbuild/linux-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" - integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== - -"@esbuild/linux-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" - integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== - -"@esbuild/linux-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" - integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== - -"@esbuild/linux-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" - integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== - -"@esbuild/linux-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" - integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== - -"@esbuild/linux-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" - integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== - -"@esbuild/linux-loong64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" - integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== - -"@esbuild/linux-loong64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" - integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== - -"@esbuild/linux-loong64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" - integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== - -"@esbuild/linux-mips64el@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" - integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== - -"@esbuild/linux-mips64el@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" - integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== - -"@esbuild/linux-mips64el@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" - integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== - -"@esbuild/linux-ppc64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" - integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== - -"@esbuild/linux-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" - integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== - -"@esbuild/linux-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" - integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== - -"@esbuild/linux-riscv64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" - integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== - -"@esbuild/linux-riscv64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" - integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== - -"@esbuild/linux-riscv64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" - integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== - -"@esbuild/linux-s390x@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" - integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== - -"@esbuild/linux-s390x@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" - integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== - -"@esbuild/linux-s390x@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" - integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== - -"@esbuild/linux-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" - integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== - -"@esbuild/linux-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" - integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== - -"@esbuild/linux-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" - integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== - -"@esbuild/netbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" - integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== - -"@esbuild/netbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" - integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== - -"@esbuild/netbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" - integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== - -"@esbuild/openbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" - integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== - -"@esbuild/openbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" - integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== - -"@esbuild/openbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" - integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== - -"@esbuild/sunos-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" - integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== - -"@esbuild/sunos-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" - integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== - -"@esbuild/sunos-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" - integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== - -"@esbuild/win32-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" - integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== - -"@esbuild/win32-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" - integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== - -"@esbuild/win32-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" - integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== - -"@esbuild/win32-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" - integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== - -"@esbuild/win32-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" - integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== - -"@esbuild/win32-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" - integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== - -"@esbuild/win32-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" - integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== - -"@esbuild/win32-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" - integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== - -"@esbuild/win32-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" - integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== - -"@fal-works/esbuild-plugin-global-externals@^2.1.2": - version "2.1.2" - resolved "https://registry.npmjs.org/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz" - integrity sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ== - -"@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== - -"@floating-ui/core@^1.0.0": - version "1.6.0" - resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz" - integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g== - dependencies: - "@floating-ui/utils" "^0.2.1" - -"@floating-ui/dom@^1.6.1": - version "1.6.3" - resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz" - integrity sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw== - dependencies: - "@floating-ui/core" "^1.0.0" - "@floating-ui/utils" "^0.2.0" - -"@floating-ui/react-dom@^2.0.0", "@floating-ui/react-dom@^2.0.8": - version "2.0.8" - resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz" - integrity sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw== - dependencies: - "@floating-ui/dom" "^1.6.1" - -"@floating-ui/utils@^0.2.0", "@floating-ui/utils@^0.2.1": - version "0.2.1" - resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz" - integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== - -"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": - version "9.3.0" - resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== - -"@hapi/topo@^5.1.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@hookform/resolvers@^3.3.1": - version "3.3.4" - resolved "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.3.4.tgz" - integrity sha512-o5cgpGOuJYrd+iMKvkttOclgwRW86EsWJZZRC23prf0uU2i48Htq4PuT73AVb9ionFyZrwYEITuOFGF+BydEtQ== - -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== - dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.3" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@istanbuljs/load-nyc-config@^1.0.0", "@istanbuljs/load-nyc-config@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - 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" - -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": - version "0.1.3" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - 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" - -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - 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" - -"@jest/create-cache-key-function@^29.7.0": - version "29.7.0" - resolved "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz" - integrity sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA== - dependencies: - "@jest/types" "^29.6.3" - -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - 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" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" - -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - 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" - -"@jest/schemas@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" - integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== - dependencies: - "@sinclair/typebox" "^0.24.1" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@^29.3.1", "@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - 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" - -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - 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" - -"@joshwooding/vite-plugin-react-docgen-typescript@0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.3.0.tgz" - integrity sha512-2D6y7fNvFmsLmRt6UCOFJPvFoPMJGT0Uh1Wg0RaigUp7kdQPs6yYn8Dmx6GZkOH/NW0yMTwRz/p0SRMMRo50vA== - dependencies: - glob "^7.2.0" - glob-promise "^4.2.0" - magic-string "^0.27.0" - react-docgen-typescript "^2.2.2" - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jsdevtools/coverage-istanbul-loader@^3.0.5": - version "3.0.5" - resolved "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz" - integrity sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA== - dependencies: - convert-source-map "^1.7.0" - istanbul-lib-instrument "^4.0.3" - loader-utils "^2.0.0" - merge-source-map "^1.1.0" - schema-utils "^2.7.0" - -"@juggle/resize-observer@^3.3.1": - version "3.4.0" - resolved "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz" - integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== - -"@mdx-js/react@^2.1.5": - version "2.3.0" - resolved "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz" - integrity sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g== - dependencies: - "@types/mdx" "^2.0.0" - "@types/react" ">=16" - -"@mui/base@5.0.0-beta.40": - version "5.0.0-beta.40" - resolved "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz" - integrity sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ== - dependencies: - "@babel/runtime" "^7.23.9" - "@floating-ui/react-dom" "^2.0.8" - "@mui/types" "^7.2.14" - "@mui/utils" "^5.15.14" - "@popperjs/core" "^2.11.8" - clsx "^2.1.0" - prop-types "^15.8.1" - -"@mui/core-downloads-tracker@^5.15.15": - version "5.15.15" - resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.15.tgz" - integrity sha512-aXnw29OWQ6I5A47iuWEI6qSSUfH6G/aCsW9KmW3LiFqr7uXZBK4Ks+z8G+qeIub8k0T5CMqlT2q0L+ZJTMrqpg== - -"@mui/icons-material@^5.14.3": - version "5.15.15" - resolved "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.15.tgz" - integrity sha512-kkeU/pe+hABcYDH6Uqy8RmIsr2S/y5bP2rp+Gat4CcRjCcVne6KudS1NrZQhUCRysrTDCAhcbcf9gt+/+pGO2g== - dependencies: - "@babel/runtime" "^7.23.9" - -"@mui/material@^5.14.4": - version "5.15.15" - resolved "https://registry.npmjs.org/@mui/material/-/material-5.15.15.tgz" - integrity sha512-3zvWayJ+E1kzoIsvwyEvkTUKVKt1AjchFFns+JtluHCuvxgKcLSRJTADw37k0doaRtVAsyh8bz9Afqzv+KYrIA== - dependencies: - "@babel/runtime" "^7.23.9" - "@mui/base" "5.0.0-beta.40" - "@mui/core-downloads-tracker" "^5.15.15" - "@mui/system" "^5.15.15" - "@mui/types" "^7.2.14" - "@mui/utils" "^5.15.14" - "@types/react-transition-group" "^4.4.10" - clsx "^2.1.0" - csstype "^3.1.3" - prop-types "^15.8.1" - react-is "^18.2.0" - react-transition-group "^4.4.5" - -"@mui/private-theming@^5.15.14": - version "5.15.14" - resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.14.tgz" - integrity sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw== - dependencies: - "@babel/runtime" "^7.23.9" - "@mui/utils" "^5.15.14" - prop-types "^15.8.1" - -"@mui/styled-engine@^5.15.14": - version "5.15.14" - resolved "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz" - integrity sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw== - dependencies: - "@babel/runtime" "^7.23.9" - "@emotion/cache" "^11.11.0" - csstype "^3.1.3" - prop-types "^15.8.1" - -"@mui/system@^5.15.15": - version "5.15.15" - resolved "https://registry.npmjs.org/@mui/system/-/system-5.15.15.tgz" - integrity sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ== - dependencies: - "@babel/runtime" "^7.23.9" - "@mui/private-theming" "^5.15.14" - "@mui/styled-engine" "^5.15.14" - "@mui/types" "^7.2.14" - "@mui/utils" "^5.15.14" - clsx "^2.1.0" - csstype "^3.1.3" - prop-types "^15.8.1" - -"@mui/types@^7.2.14": - version "7.2.14" - resolved "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz" - integrity sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ== - -"@mui/utils@^5.15.14": - version "5.15.14" - resolved "https://registry.npmjs.org/@mui/utils/-/utils-5.15.14.tgz" - integrity sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA== - dependencies: - "@babel/runtime" "^7.23.9" - "@types/prop-types" "^15.7.11" - prop-types "^15.8.1" - react-is "^18.2.0" - -"@ndelangen/get-tarball@^3.0.7": - version "3.0.9" - resolved "https://registry.npmjs.org/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz" - integrity sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA== - dependencies: - gunzip-maybe "^1.4.2" - pump "^3.0.0" - tar-fs "^2.1.1" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@polka/url@^1.0.0-next.24": - version "1.0.0-next.25" - resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz" - integrity sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ== - -"@popperjs/core@^2.11.8": - version "2.11.8" - resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz" - integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== - -"@radix-ui/number@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz" - integrity sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/primitive@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz" - integrity sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-arrow@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz" - integrity sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" - -"@radix-ui/react-collection@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz" - integrity sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-slot" "1.0.2" - -"@radix-ui/react-compose-refs@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz" - integrity sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-context@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz" - integrity sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-direction@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz" - integrity sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-dismissable-layer@1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz" - integrity sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-escape-keydown" "1.0.3" - -"@radix-ui/react-focus-guards@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz" - integrity sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-focus-scope@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz" - integrity sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - -"@radix-ui/react-id@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz" - integrity sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-layout-effect" "1.0.1" - -"@radix-ui/react-popper@1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz" - integrity sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg== - dependencies: - "@babel/runtime" "^7.13.10" - "@floating-ui/react-dom" "^2.0.0" - "@radix-ui/react-arrow" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" - "@radix-ui/react-use-rect" "1.0.1" - "@radix-ui/react-use-size" "1.0.1" - "@radix-ui/rect" "1.0.1" - -"@radix-ui/react-portal@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz" - integrity sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" - -"@radix-ui/react-primitive@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz" - integrity sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-slot" "1.0.2" - -"@radix-ui/react-roving-focus@1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz" - integrity sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-collection" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-controllable-state" "1.0.1" - -"@radix-ui/react-select@^1.2.2": - version "1.2.2" - resolved "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.2.tgz" - integrity sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/number" "1.0.1" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-collection" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-dismissable-layer" "1.0.4" - "@radix-ui/react-focus-guards" "1.0.1" - "@radix-ui/react-focus-scope" "1.0.3" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-popper" "1.1.2" - "@radix-ui/react-portal" "1.0.3" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-slot" "1.0.2" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-controllable-state" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" - "@radix-ui/react-use-previous" "1.0.1" - "@radix-ui/react-visually-hidden" "1.0.3" - aria-hidden "^1.1.1" - react-remove-scroll "2.5.5" - -"@radix-ui/react-separator@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.0.3.tgz" - integrity sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" - -"@radix-ui/react-slot@1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz" - integrity sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.1" - -"@radix-ui/react-toggle-group@1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.0.4.tgz" - integrity sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-roving-focus" "1.0.4" - "@radix-ui/react-toggle" "1.0.3" - "@radix-ui/react-use-controllable-state" "1.0.1" - -"@radix-ui/react-toggle@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.0.3.tgz" - integrity sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-controllable-state" "1.0.1" - -"@radix-ui/react-toolbar@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.0.4.tgz" - integrity sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-roving-focus" "1.0.4" - "@radix-ui/react-separator" "1.0.3" - "@radix-ui/react-toggle-group" "1.0.4" - -"@radix-ui/react-use-callback-ref@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz" - integrity sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-controllable-state@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz" - integrity sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "1.0.1" - -"@radix-ui/react-use-escape-keydown@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz" - integrity sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "1.0.1" - -"@radix-ui/react-use-layout-effect@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz" - integrity sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-previous@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz" - integrity sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-rect@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz" - integrity sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/rect" "1.0.1" - -"@radix-ui/react-use-size@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz" - integrity sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-layout-effect" "1.0.1" - -"@radix-ui/react-visually-hidden@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz" - integrity sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" - -"@radix-ui/rect@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz" - integrity sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ== - dependencies: - "@babel/runtime" "^7.13.10" - -"@remix-run/router@1.15.3": - version "1.15.3" - resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz" - integrity sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w== - -"@rollup/pluginutils@^5.0.2": - version "5.1.0" - resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz" - integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^2.3.1" - -"@rollup/rollup-android-arm-eabi@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.3.tgz#bddf05c3387d02fac04b6b86b3a779337edfed75" - integrity sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g== - -"@rollup/rollup-android-arm64@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.3.tgz#b26bd09de58704c0a45e3375b76796f6eda825e4" - integrity sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ== - -"@rollup/rollup-darwin-arm64@4.14.3": - version "4.14.3" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.3.tgz" - integrity sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA== - -"@rollup/rollup-darwin-x64@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.3.tgz#8e4673734d7dc9d68f6d48e81246055cda0e840f" - integrity sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw== - -"@rollup/rollup-linux-arm-gnueabihf@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.3.tgz#53ed38eb13b58ababdb55a7f66f0538a7f85dcba" - integrity sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw== - -"@rollup/rollup-linux-arm-musleabihf@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.14.3.tgz#0706ee38330e267a5c9326956820f009cfb21fcd" - integrity sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw== - -"@rollup/rollup-linux-arm64-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.3.tgz#426fce7b8b242ac5abd48a10a5020f5a468c6cb4" - integrity sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA== - -"@rollup/rollup-linux-arm64-musl@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz#3882a4e3a564af9e55804beeb67076857b035ab7" - integrity sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ== - -"@rollup/rollup-linux-arm64-musl@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.3.tgz#65bf944530d759b50d7ffd00dfbdf4125a43406f" - integrity sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw== - -"@rollup/rollup-linux-powerpc64le-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.3.tgz#494ba3b31095e9a45df9c3f646d21400fb631a95" - integrity sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw== - -"@rollup/rollup-linux-riscv64-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.3.tgz#8b88ed0a40724cce04aa15374ebe5ba4092d679f" - integrity sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ== - -"@rollup/rollup-linux-s390x-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.3.tgz#09c9e5ec57a0f6ec3551272c860bb9a04b96d70f" - integrity sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg== - -"@rollup/rollup-linux-x64-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.3.tgz#197f27fd481ad9c861021d5cbbf21793922a631c" - integrity sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA== - -"@rollup/rollup-linux-x64-musl@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.3.tgz#5cc0522f4942f2df625e9bfb6fb02c6580ffbce6" - integrity sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg== - -"@rollup/rollup-win32-arm64-msvc@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.3.tgz#a648122389d23a7543b261fba082e65fefefe4f6" - integrity sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg== - -"@rollup/rollup-win32-ia32-msvc@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.3.tgz#34727b5c7953c35fc6e1ae4f770ad3a2025f8e03" - integrity sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw== - -"@rollup/rollup-win32-x64-msvc@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.3.tgz#5b2fb4d8cd44c05deef8a7b0e6deb9ccb8939d18" - integrity sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA== - -"@sentry-internal/feedback@7.110.1": - version "7.110.1" - resolved "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.110.1.tgz" - integrity sha512-0aR3wuEW+SZKOVNamuy0pTQyPmqDjWPPLrB2GAXGT3ZjrVxjEzzVPqk6DVBYxSV2MuJaD507SZnvfoSPNgoBmw== - dependencies: - "@sentry/core" "7.110.1" - "@sentry/types" "7.110.1" - "@sentry/utils" "7.110.1" - -"@sentry-internal/replay-canvas@7.110.1": - version "7.110.1" - resolved "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.110.1.tgz" - integrity sha512-zdcCmWFXM4DHOau/BCZVb6jf9zozdbAiJ1MzQ6azuZEuysOl00YfktoWZBbZjjjpWT6025s+wrmFz54t0O+enw== - dependencies: - "@sentry/core" "7.110.1" - "@sentry/replay" "7.110.1" - "@sentry/types" "7.110.1" - "@sentry/utils" "7.110.1" - -"@sentry-internal/tracing@7.110.1": - version "7.110.1" - resolved "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.110.1.tgz" - integrity sha512-4kTd6EM0OP1SVWl2yLn3KIwlCpld1lyhNDeR8G1aKLm1PN+kVsR6YB/jy9KPPp4Q3lN3W9EkTSES3qhP4jVffQ== - dependencies: - "@sentry/core" "7.110.1" - "@sentry/types" "7.110.1" - "@sentry/utils" "7.110.1" - -"@sentry/browser@7.110.1": - version "7.110.1" - resolved "https://registry.npmjs.org/@sentry/browser/-/browser-7.110.1.tgz" - integrity sha512-H3TZlbdsgxuoVxhotMtBDemvAofx3UPNcS+UjQ40Bd+hKX01IIbEN3i+9RQ0jmcbU6xjf+yhjwp+Ejpm4FmYMw== - dependencies: - "@sentry-internal/feedback" "7.110.1" - "@sentry-internal/replay-canvas" "7.110.1" - "@sentry-internal/tracing" "7.110.1" - "@sentry/core" "7.110.1" - "@sentry/replay" "7.110.1" - "@sentry/types" "7.110.1" - "@sentry/utils" "7.110.1" - -"@sentry/core@7.110.1": - version "7.110.1" - resolved "https://registry.npmjs.org/@sentry/core/-/core-7.110.1.tgz" - integrity sha512-yC1yeUFQlmHj9u/KxKmwOMVanBmgfX+4MZnZU31QPqN95adyZTwpaYFZl4fH5kDVnz7wXJI0qRP8SxuMePtqhw== - dependencies: - "@sentry/types" "7.110.1" - "@sentry/utils" "7.110.1" - -"@sentry/react@^7.77.0": - version "7.110.1" - resolved "https://registry.npmjs.org/@sentry/react/-/react-7.110.1.tgz" - integrity sha512-kXdMrDexPyBf0KP/IfgCk5NS1Yfz6tFK/+UKWTxEM5PVRZkHzV7CBdd50IFGL3xMGbJmtE5Bly6WzezqUgWZ5w== - dependencies: - "@sentry/browser" "7.110.1" - "@sentry/core" "7.110.1" - "@sentry/types" "7.110.1" - "@sentry/utils" "7.110.1" - hoist-non-react-statics "^3.3.2" - -"@sentry/replay@7.110.1": - version "7.110.1" - resolved "https://registry.npmjs.org/@sentry/replay/-/replay-7.110.1.tgz" - integrity sha512-R49fGOuKYsJ97EujPTzMjs3ZSuSkLTFFQmVBbsu/o6beRp4kK9l8H7r2BfLEcWJOXdWO5EU4KpRWgIxHaDK2aw== - dependencies: - "@sentry-internal/tracing" "7.110.1" - "@sentry/core" "7.110.1" - "@sentry/types" "7.110.1" - "@sentry/utils" "7.110.1" - -"@sentry/types@7.110.1": - version "7.110.1" - resolved "https://registry.npmjs.org/@sentry/types/-/types-7.110.1.tgz" - integrity sha512-sZxOpM5gfyxvJeWVvNpHnxERTnlqcozjqNcIv29SZ6wonlkekmxDyJ3uCuPv85VO54WLyA4uzskPKnNFHacI8A== - -"@sentry/utils@7.110.1": - version "7.110.1" - resolved "https://registry.npmjs.org/@sentry/utils/-/utils-7.110.1.tgz" - integrity sha512-eibLo2m1a7sHkOHxYYmRujr3D7ek2l9sv26F1SLoQBVDF7Afw5AKyzPmtA1D+4M9P/ux1okj7cGj3SaBrVpxXA== - dependencies: - "@sentry/types" "7.110.1" - -"@sideway/address@^4.1.5": - version "4.1.5" - resolved "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz" - integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - -"@sinclair/typebox@^0.24.1": - version "0.24.51" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" - integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sinonjs/commons@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz" - integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - -"@storybook/addon-actions@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.17.tgz" - integrity sha512-TBphs4v6LRfyTpFo/WINF0TkMaE3rrNog7wW5mbz6n0j8o53kDN4o9ZEcygSL5zQX43CAaghQTeDCss7ueG7ZQ== - dependencies: - "@storybook/core-events" "7.6.17" - "@storybook/global" "^5.0.0" - "@types/uuid" "^9.0.1" - dequal "^2.0.2" - polished "^4.2.2" - uuid "^9.0.0" - -"@storybook/addon-backgrounds@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.17.tgz" - integrity sha512-7dize7x8+37PH77kmt69b0xSaeDqOcZ4fpzW6+hk53hIaCVU26eGs4+j+743Xva31eOgZWNLupUhOpUDc6SqZw== - dependencies: - "@storybook/global" "^5.0.0" - memoizerific "^1.11.3" - ts-dedent "^2.0.0" - -"@storybook/addon-controls@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.17.tgz" - integrity sha512-zR0aLaUF7FtV/nMRyfniFbCls/e0DAAoXACuOAUAwNAv0lbIS8AyZZiHSmKucCvziUQ6WceeCC7+du3C+9y0rQ== - dependencies: - "@storybook/blocks" "7.6.17" - lodash "^4.17.21" - ts-dedent "^2.0.0" - -"@storybook/addon-coverage@^1.0.0": - version "1.0.1" - resolved "https://registry.npmjs.org/@storybook/addon-coverage/-/addon-coverage-1.0.1.tgz" - integrity sha512-jGDYPBbh3+LXMDw0Nmw+fUEDH3kuHvHSOjE1fqi4ac00CnwHnyD5PD6RFSpVxR4Fw/tCDPmKEubbOzQCSZGyJg== - dependencies: - "@istanbuljs/load-nyc-config" "^1.1.0" - "@jsdevtools/coverage-istanbul-loader" "^3.0.5" - "@types/istanbul-lib-coverage" "^2.0.4" - convert-source-map "^2.0.0" - espree "^9.6.1" - istanbul-lib-instrument "^6.0.1" - source-map "^0.7.4" - test-exclude "^6.0.0" - vite-plugin-istanbul "^3.0.1" - -"@storybook/addon-docs@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.17.tgz" - integrity sha512-FKa4Mdy7nhgvEVZJHpMkHriDzpVHbohn87zv9NCL+Ctjs1iAmzGwxEm0culszyDS1HN2ToVoY0h8CSi2RSSZqA== - dependencies: - "@jest/transform" "^29.3.1" - "@mdx-js/react" "^2.1.5" - "@storybook/blocks" "7.6.17" - "@storybook/client-logger" "7.6.17" - "@storybook/components" "7.6.17" - "@storybook/csf-plugin" "7.6.17" - "@storybook/csf-tools" "7.6.17" - "@storybook/global" "^5.0.0" - "@storybook/mdx2-csf" "^1.0.0" - "@storybook/node-logger" "7.6.17" - "@storybook/postinstall" "7.6.17" - "@storybook/preview-api" "7.6.17" - "@storybook/react-dom-shim" "7.6.17" - "@storybook/theming" "7.6.17" - "@storybook/types" "7.6.17" - fs-extra "^11.1.0" - remark-external-links "^8.0.0" - remark-slug "^6.0.0" - ts-dedent "^2.0.0" - -"@storybook/addon-essentials@^7.4.5": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.17.tgz" - integrity sha512-qlSpamxuYfT2taF953nC9QijGF2pSbg1ewMNpdwLTj16PTZvR/d8NCDMTJujI1bDwM2m18u8Yc43ibh5LEmxCw== - dependencies: - "@storybook/addon-actions" "7.6.17" - "@storybook/addon-backgrounds" "7.6.17" - "@storybook/addon-controls" "7.6.17" - "@storybook/addon-docs" "7.6.17" - "@storybook/addon-highlight" "7.6.17" - "@storybook/addon-measure" "7.6.17" - "@storybook/addon-outline" "7.6.17" - "@storybook/addon-toolbars" "7.6.17" - "@storybook/addon-viewport" "7.6.17" - "@storybook/core-common" "7.6.17" - "@storybook/manager-api" "7.6.17" - "@storybook/node-logger" "7.6.17" - "@storybook/preview-api" "7.6.17" - ts-dedent "^2.0.0" - -"@storybook/addon-highlight@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.17.tgz" - integrity sha512-R1yBPUUqGn+60aJakn8q+5Zt34E/gU3n3VmgPdryP0LJUdZ5q1/RZShoVDV+yYQ40htMH6oaCv3OyyPzFAGJ6A== - dependencies: - "@storybook/global" "^5.0.0" - -"@storybook/addon-interactions@^7.6.1": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.6.17.tgz" - integrity sha512-6zlX+RDQ1PlA6fp7C+hun8t7h2RXfCGs5dGrhEenp2lqnR/rYuUJRC0tmKpkZBb8kZVcbSChzkB/JYkBjBCzpQ== - dependencies: - "@storybook/global" "^5.0.0" - "@storybook/types" "7.6.17" - jest-mock "^27.0.6" - polished "^4.2.2" - ts-dedent "^2.2.0" - -"@storybook/addon-links@^7.4.5": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.17.tgz" - integrity sha512-iFUwKObRn0EKI0zMETsil2p9a/81rCuSMEWECsi+khkCAs1FUnD2cT6Ag5ydcNcBXsdtdfDJdtXQrkw+TSoStQ== - dependencies: - "@storybook/csf" "^0.1.2" - "@storybook/global" "^5.0.0" - ts-dedent "^2.0.0" - -"@storybook/addon-measure@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.17.tgz" - integrity sha512-O5vnHZNkduvZ95jf1UssbOl6ivIxzl5tv+4EpScPYId7w700bxWsJH+QX7ip6KlrCf2o3iUhmPe8bm05ghG2KA== - dependencies: - "@storybook/global" "^5.0.0" - tiny-invariant "^1.3.1" - -"@storybook/addon-onboarding@^1.0.8": - version "1.0.11" - resolved "https://registry.npmjs.org/@storybook/addon-onboarding/-/addon-onboarding-1.0.11.tgz" - integrity sha512-0Sa7PJDsM6AANOWZX7vq3kgCbS9AZFjr3tfr3bLGfXviwIBKjoZDDdIErJkS3D4mNcDa78lYQvp3PTCKwLIJ9A== - dependencies: - "@storybook/telemetry" "^7.1.0" - react-confetti "^6.1.0" - -"@storybook/addon-outline@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.17.tgz" - integrity sha512-9o9JXDsYjNaDgz/cY5+jv694+aik/1aiRGGvsCv68e1p/ob0glkGKav4lnJe2VJqD+gCmaARoD8GOJlhoQl8JQ== - dependencies: - "@storybook/global" "^5.0.0" - ts-dedent "^2.0.0" - -"@storybook/addon-toolbars@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.17.tgz" - integrity sha512-UMrchbUHiyWrh6WuGnpy34Jqzkx/63B+MSgb3CW7YsQaXz64kE0Rol0TNSznnB+mYXplcqH+ndI4r4kFsmgwDg== - -"@storybook/addon-viewport@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.17.tgz" - integrity sha512-sA0QCcf4QAMixWvn8uvRYPfkKCSl6JajJaAspoPqXSxHEpK7uwOlpg3kqFU5XJJPXD0X957M+ONgNvBzYqSpEw== - dependencies: - memoizerific "^1.11.3" - -"@storybook/blocks@7.6.17", "@storybook/blocks@^7.4.5": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.17.tgz" - integrity sha512-PsNVoe0bX1mMn4Kk3nbKZ0ItDZZ0YJnYAFJ6toAbsyBAbgzg1sce88sQinzvbn58/RT9MPKeWMPB45ZS7ggiNg== - dependencies: - "@storybook/channels" "7.6.17" - "@storybook/client-logger" "7.6.17" - "@storybook/components" "7.6.17" - "@storybook/core-events" "7.6.17" - "@storybook/csf" "^0.1.2" - "@storybook/docs-tools" "7.6.17" - "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.6.17" - "@storybook/preview-api" "7.6.17" - "@storybook/theming" "7.6.17" - "@storybook/types" "7.6.17" - "@types/lodash" "^4.14.167" - color-convert "^2.0.1" - dequal "^2.0.2" - lodash "^4.17.21" - markdown-to-jsx "^7.1.8" - memoizerific "^1.11.3" - polished "^4.2.2" - react-colorful "^5.1.2" - telejson "^7.2.0" - tocbot "^4.20.1" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - -"@storybook/builder-manager@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.17.tgz" - integrity sha512-Sj8hcDYiPCCMfeLzus37czl0zdrAxAz4IyYam2jBjVymrIrcDAFyL1OCZvnq33ft179QYQWhUs9qwzVmlR/ZWg== - dependencies: - "@fal-works/esbuild-plugin-global-externals" "^2.1.2" - "@storybook/core-common" "7.6.17" - "@storybook/manager" "7.6.17" - "@storybook/node-logger" "7.6.17" - "@types/ejs" "^3.1.1" - "@types/find-cache-dir" "^3.2.1" - "@yarnpkg/esbuild-plugin-pnp" "^3.0.0-rc.10" - browser-assert "^1.2.1" - ejs "^3.1.8" - esbuild "^0.18.0" - esbuild-plugin-alias "^0.2.1" - express "^4.17.3" - find-cache-dir "^3.0.0" - fs-extra "^11.1.0" - process "^0.11.10" - util "^0.12.4" - -"@storybook/builder-vite@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.6.17.tgz" - integrity sha512-2Q32qalI401EsKKr9Hkk8TAOcHEerqwsjCpQgTNJnCu6GgCVKoVUcb99oRbR9Vyg0xh+jb19XiWqqQujFtLYlQ== - dependencies: - "@storybook/channels" "7.6.17" - "@storybook/client-logger" "7.6.17" - "@storybook/core-common" "7.6.17" - "@storybook/csf-plugin" "7.6.17" - "@storybook/node-logger" "7.6.17" - "@storybook/preview" "7.6.17" - "@storybook/preview-api" "7.6.17" - "@storybook/types" "7.6.17" - "@types/find-cache-dir" "^3.2.1" - browser-assert "^1.2.1" - es-module-lexer "^0.9.3" - express "^4.17.3" - find-cache-dir "^3.0.0" - fs-extra "^11.1.0" - magic-string "^0.30.0" - rollup "^2.25.0 || ^3.3.0" - -"@storybook/channels@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz" - integrity sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA== - dependencies: - "@storybook/client-logger" "7.6.17" - "@storybook/core-events" "7.6.17" - "@storybook/global" "^5.0.0" - qs "^6.10.0" - telejson "^7.2.0" - tiny-invariant "^1.3.1" - -"@storybook/cli@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.17.tgz" - integrity sha512-1sCo+nCqyR+nKfTcEidVu8XzNoECC7Y1l+uW38/r7s2f/TdDorXaIGAVrpjbSaXSoQpx5DxYJVaKCcQuOgqwcA== - dependencies: - "@babel/core" "^7.23.2" - "@babel/preset-env" "^7.23.2" - "@babel/types" "^7.23.0" - "@ndelangen/get-tarball" "^3.0.7" - "@storybook/codemod" "7.6.17" - "@storybook/core-common" "7.6.17" - "@storybook/core-events" "7.6.17" - "@storybook/core-server" "7.6.17" - "@storybook/csf-tools" "7.6.17" - "@storybook/node-logger" "7.6.17" - "@storybook/telemetry" "7.6.17" - "@storybook/types" "7.6.17" - "@types/semver" "^7.3.4" - "@yarnpkg/fslib" "2.10.3" - "@yarnpkg/libzip" "2.3.0" - chalk "^4.1.0" - commander "^6.2.1" - cross-spawn "^7.0.3" - detect-indent "^6.1.0" - envinfo "^7.7.3" - execa "^5.0.0" - express "^4.17.3" - find-up "^5.0.0" - fs-extra "^11.1.0" - get-npm-tarball-url "^2.0.3" - get-port "^5.1.1" - giget "^1.0.0" - globby "^11.0.2" - jscodeshift "^0.15.1" - leven "^3.1.0" - ora "^5.4.1" - prettier "^2.8.0" - prompts "^2.4.0" - puppeteer-core "^2.1.1" - read-pkg-up "^7.0.1" - semver "^7.3.7" - strip-json-comments "^3.0.1" - tempy "^1.0.1" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - -"@storybook/client-logger@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz" - integrity sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ== - dependencies: - "@storybook/global" "^5.0.0" - -"@storybook/codemod@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.17.tgz" - integrity sha512-JuTmf2u3C4fCnjO7o3dqRgrq3ozNYfWlrRP8xuIdvT7niMap7a396hJtSKqS10FxCgKFcMAOsRgrCalH1dWxUg== - dependencies: - "@babel/core" "^7.23.2" - "@babel/preset-env" "^7.23.2" - "@babel/types" "^7.23.0" - "@storybook/csf" "^0.1.2" - "@storybook/csf-tools" "7.6.17" - "@storybook/node-logger" "7.6.17" - "@storybook/types" "7.6.17" - "@types/cross-spawn" "^6.0.2" - cross-spawn "^7.0.3" - globby "^11.0.2" - jscodeshift "^0.15.1" - lodash "^4.17.21" - prettier "^2.8.0" - recast "^0.23.1" - -"@storybook/components@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/components/-/components-7.6.17.tgz" - integrity sha512-lbh7GynMidA+CZcJnstVku6Nhs+YkqjYaZ+mKPugvlVhGVWv0DaaeQFVuZ8cJtUGJ/5FFU4Y+n+gylYUHkGBMA== - dependencies: - "@radix-ui/react-select" "^1.2.2" - "@radix-ui/react-toolbar" "^1.0.4" - "@storybook/client-logger" "7.6.17" - "@storybook/csf" "^0.1.2" - "@storybook/global" "^5.0.0" - "@storybook/theming" "7.6.17" - "@storybook/types" "7.6.17" - memoizerific "^1.11.3" - use-resize-observer "^9.1.0" - util-deprecate "^1.0.2" - -"@storybook/core-client@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.17.tgz" - integrity sha512-LuDbADK+DPNAOOCXOlvY09hdGVueXlDetsdOJ/DgYnSa9QSWv9Uv+F8QcEgR3QckZJbPlztKJIVLgP2n/Xkijw== - dependencies: - "@storybook/client-logger" "7.6.17" - "@storybook/preview-api" "7.6.17" - -"@storybook/core-common@7.6.17", "@storybook/core-common@^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.17.tgz" - integrity sha512-me2TP3Q9/qzqCLoDHUSsUF+VS1MHxfHbTVF6vAz0D/COTxzsxLpu9TxTbzJoBCxse6XRb6wWI1RgF1mIcjic7g== - dependencies: - "@storybook/core-events" "7.6.17" - "@storybook/node-logger" "7.6.17" - "@storybook/types" "7.6.17" - "@types/find-cache-dir" "^3.2.1" - "@types/node" "^18.0.0" - "@types/node-fetch" "^2.6.4" - "@types/pretty-hrtime" "^1.0.0" - chalk "^4.1.0" - esbuild "^0.18.0" - esbuild-register "^3.5.0" - file-system-cache "2.3.0" - find-cache-dir "^3.0.0" - find-up "^5.0.0" - fs-extra "^11.1.0" - glob "^10.0.0" - handlebars "^4.7.7" - lazy-universal-dotenv "^4.0.0" - node-fetch "^2.0.0" - picomatch "^2.3.0" - pkg-dir "^5.0.0" - pretty-hrtime "^1.0.3" - resolve-from "^5.0.0" - ts-dedent "^2.0.0" - -"@storybook/core-events@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz" - integrity sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA== - dependencies: - ts-dedent "^2.0.0" - -"@storybook/core-server@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.17.tgz" - integrity sha512-KWGhTTaL1Q14FolcoKKZgytlPJUbH6sbJ1Ptj/84EYWFewcnEgVs0Zlnh1VStRZg+Rd1WC1V4yVd/bbDzxrvQA== - dependencies: - "@aw-web-design/x-default-browser" "1.4.126" - "@discoveryjs/json-ext" "^0.5.3" - "@storybook/builder-manager" "7.6.17" - "@storybook/channels" "7.6.17" - "@storybook/core-common" "7.6.17" - "@storybook/core-events" "7.6.17" - "@storybook/csf" "^0.1.2" - "@storybook/csf-tools" "7.6.17" - "@storybook/docs-mdx" "^0.1.0" - "@storybook/global" "^5.0.0" - "@storybook/manager" "7.6.17" - "@storybook/node-logger" "7.6.17" - "@storybook/preview-api" "7.6.17" - "@storybook/telemetry" "7.6.17" - "@storybook/types" "7.6.17" - "@types/detect-port" "^1.3.0" - "@types/node" "^18.0.0" - "@types/pretty-hrtime" "^1.0.0" - "@types/semver" "^7.3.4" - better-opn "^3.0.2" - chalk "^4.1.0" - cli-table3 "^0.6.1" - compression "^1.7.4" - detect-port "^1.3.0" - express "^4.17.3" - fs-extra "^11.1.0" - globby "^11.0.2" - ip "^2.0.1" - lodash "^4.17.21" - open "^8.4.0" - pretty-hrtime "^1.0.3" - prompts "^2.4.0" - read-pkg-up "^7.0.1" - semver "^7.3.7" - telejson "^7.2.0" - tiny-invariant "^1.3.1" - ts-dedent "^2.0.0" - util "^0.12.4" - util-deprecate "^1.0.2" - watchpack "^2.2.0" - ws "^8.2.3" - -"@storybook/csf-plugin@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.17.tgz" - integrity sha512-xTHv9BUh3bkDVCvcbmdfVF0/e96BdrEgqPJ3G3RmKbSzWLOkQ2U9yiPfHzT0KJWPhVwj12fjfZp0zunu+pcS6Q== - dependencies: - "@storybook/csf-tools" "7.6.17" - unplugin "^1.3.1" - -"@storybook/csf-tools@7.6.17", "@storybook/csf-tools@^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.17.tgz" - integrity sha512-dAQtam0EBPeTJYcQPLxXgz4L9JFqD+HWbLFG9CmNIhMMjticrB0mpk1EFIS6vPXk/VsVWpBgMLD7dZlD6YMKcQ== - dependencies: - "@babel/generator" "^7.23.0" - "@babel/parser" "^7.23.0" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" - "@storybook/csf" "^0.1.2" - "@storybook/types" "7.6.17" - fs-extra "^11.1.0" - recast "^0.23.1" - ts-dedent "^2.0.0" - -"@storybook/csf@^0.0.1": - version "0.0.1" - resolved "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz" - integrity sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw== - dependencies: - lodash "^4.17.15" - -"@storybook/csf@^0.1.1", "@storybook/csf@^0.1.2": - version "0.1.4" - resolved "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.4.tgz" - integrity sha512-B9UI/lsQMjF+oEfZCI6YXNoeuBcGZoOP5x8yKbe2tIEmsMjSztFKkpPzi5nLCnBk/MBtl6QJeI3ksJnbsWPkOw== - dependencies: - type-fest "^2.19.0" - -"@storybook/docs-mdx@^0.1.0": - version "0.1.0" - resolved "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz" - integrity sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg== - -"@storybook/docs-tools@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.17.tgz" - integrity sha512-bYrLoj06adqklyLkEwD32C0Ww6t+9ZVvrJHiVT42bIhTRpFiFPAetl1a9KPHtFLnfduh4n2IxIr1jv32ThPDTA== - dependencies: - "@storybook/core-common" "7.6.17" - "@storybook/preview-api" "7.6.17" - "@storybook/types" "7.6.17" - "@types/doctrine" "^0.0.3" - assert "^2.1.0" - doctrine "^3.0.0" - lodash "^4.17.21" - -"@storybook/expect@storybook-jest": - version "28.1.3-5" - resolved "https://registry.npmjs.org/@storybook/expect/-/expect-28.1.3-5.tgz" - integrity sha512-lS1oJnY1qTAxnH87C765NdfvGhksA6hBcbUVI5CHiSbNsEtr456wtg/z+dT9XlPriq1D5t2SgfNL9dBAoIGyIA== - dependencies: - "@types/jest" "28.1.3" - -"@storybook/global@^5.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz" - integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== - -"@storybook/jest@^0.2.3": - version "0.2.3" - resolved "https://registry.npmjs.org/@storybook/jest/-/jest-0.2.3.tgz" - integrity sha512-ov5izrmbAFObzKeh9AOC5MlmFxAcf0o5i6YFGae9sDx6DGh6alXsRM+chIbucVkUwVHVlSzdfbLDEFGY/ShaYw== - dependencies: - "@storybook/expect" storybook-jest - "@testing-library/jest-dom" "^6.1.2" - "@types/jest" "28.1.3" - jest-mock "^27.3.0" - -"@storybook/manager-api@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.17.tgz" - integrity sha512-IJIV1Yc6yw1dhCY4tReHCfBnUKDqEBnMyHp3mbXpsaHxnxJZrXO45WjRAZIKlQKhl/Ge1CrnznmHRCmYgqmrWg== - dependencies: - "@storybook/channels" "7.6.17" - "@storybook/client-logger" "7.6.17" - "@storybook/core-events" "7.6.17" - "@storybook/csf" "^0.1.2" - "@storybook/global" "^5.0.0" - "@storybook/router" "7.6.17" - "@storybook/theming" "7.6.17" - "@storybook/types" "7.6.17" - dequal "^2.0.2" - lodash "^4.17.21" - memoizerific "^1.11.3" - store2 "^2.14.2" - telejson "^7.2.0" - ts-dedent "^2.0.0" - -"@storybook/manager@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.17.tgz" - integrity sha512-A1LDDIqMpwRzq/dqkbbiza0QI04o4ZHCl2a3UMDZUV/+QLc2nsr2DAaLk4CVL4/cIc5zGqmIcaOTvprx2YKVBw== - -"@storybook/mdx2-csf@^1.0.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz" - integrity sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw== - -"@storybook/node-logger@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.17.tgz" - integrity sha512-w59MQuXhhUNrUVmVkXhMwIg2nvFWjdDczLTwYLorhfsE36CWeUOY5QCZWQy0Qf/h+jz8Uo7Evy64qn18v9C4wA== - -"@storybook/postinstall@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.17.tgz" - integrity sha512-WaWqB8o9vUc9aaVls+povQSVirf1Xd1LZcVhUKfAocAF3mzYUsnJsVqvnbjRj/F96UFVihOyDt9Zjl/9OvrCvQ== - -"@storybook/preview-api@7.6.17", "@storybook/preview-api@^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz" - integrity sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw== - dependencies: - "@storybook/channels" "7.6.17" - "@storybook/client-logger" "7.6.17" - "@storybook/core-events" "7.6.17" - "@storybook/csf" "^0.1.2" - "@storybook/global" "^5.0.0" - "@storybook/types" "7.6.17" - "@types/qs" "^6.9.5" - dequal "^2.0.2" - lodash "^4.17.21" - memoizerific "^1.11.3" - qs "^6.10.0" - synchronous-promise "^2.0.15" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - -"@storybook/preview@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.17.tgz" - integrity sha512-LvkMYK/y6alGjwRVNDIKL1lFlbyZ0H0c8iAbcQkiMoaFiujMQyVswMDKlWcj42Upfr/B1igydiruomc+eUt0mw== - -"@storybook/react-dom-shim@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.17.tgz" - integrity sha512-32Sa/G+WnvaPiQ1Wvjjw5UM9rr2c4GDohwCcWVv3/LJuiFPqNS6zglAtmnsrlIBnUwRBMLMh/ekCTdqMiUmfDw== - -"@storybook/react-vite@^7.4.5": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-7.6.17.tgz" - integrity sha512-4dIm3CuRl44X1TLzN3WoZh/bChzJF7Ud28li9atj9C8db0bb/y0zl8cahrsRFoR7/LyfqdOVLqaztrnA5SsWfg== - dependencies: - "@joshwooding/vite-plugin-react-docgen-typescript" "0.3.0" - "@rollup/pluginutils" "^5.0.2" - "@storybook/builder-vite" "7.6.17" - "@storybook/react" "7.6.17" - "@vitejs/plugin-react" "^3.0.1" - magic-string "^0.30.0" - react-docgen "^7.0.0" - -"@storybook/react@7.6.17", "@storybook/react@^7.4.5": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/react/-/react-7.6.17.tgz" - integrity sha512-lVqzQSU03rRJWYW+gK2gq6mSo3/qtnVICY8B8oP7gc36jVu4ksDIu45bTfukM618ODkUZy0vZe6T4engK3azjA== - dependencies: - "@storybook/client-logger" "7.6.17" - "@storybook/core-client" "7.6.17" - "@storybook/docs-tools" "7.6.17" - "@storybook/global" "^5.0.0" - "@storybook/preview-api" "7.6.17" - "@storybook/react-dom-shim" "7.6.17" - "@storybook/types" "7.6.17" - "@types/escodegen" "^0.0.6" - "@types/estree" "^0.0.51" - "@types/node" "^18.0.0" - acorn "^7.4.1" - acorn-jsx "^5.3.1" - acorn-walk "^7.2.0" - escodegen "^2.1.0" - html-tags "^3.1.0" - lodash "^4.17.21" - prop-types "^15.7.2" - react-element-to-jsx-string "^15.0.0" - ts-dedent "^2.0.0" - type-fest "~2.19" - util-deprecate "^1.0.2" - -"@storybook/router@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/router/-/router-7.6.17.tgz" - integrity sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A== - dependencies: - "@storybook/client-logger" "7.6.17" - memoizerific "^1.11.3" - qs "^6.10.0" - -"@storybook/telemetry@7.6.17", "@storybook/telemetry@^7.1.0": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.17.tgz" - integrity sha512-WOcOAmmengYnGInH98Px44F47DSpLyk20BM+Z/IIQDzfttGOLlxNqBBG1XTEhNRn+AYuk4aZ2JEed2lCjVIxcA== - dependencies: - "@storybook/client-logger" "7.6.17" - "@storybook/core-common" "7.6.17" - "@storybook/csf-tools" "7.6.17" - chalk "^4.1.0" - detect-package-manager "^2.0.1" - fetch-retry "^5.0.2" - fs-extra "^11.1.0" - read-pkg-up "^7.0.1" - -"@storybook/test-runner@^0.16.0": - version "0.16.0" - resolved "https://registry.npmjs.org/@storybook/test-runner/-/test-runner-0.16.0.tgz" - integrity sha512-LDmNbKFoEDW/VS9o6KR8e1r5MnbCc5ZojUfi5yqLdq80gFD7BvilgKgV0lUh/xWHryzoy+Ids5LYgrPJZmU2dQ== - dependencies: - "@babel/core" "^7.22.5" - "@babel/generator" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" - "@jest/types" "^29.6.3" - "@storybook/core-common" "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0" - "@storybook/csf" "^0.1.1" - "@storybook/csf-tools" "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0" - "@storybook/preview-api" "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0" - "@swc/core" "^1.3.18" - "@swc/jest" "^0.2.23" - can-bind-to-host "^1.1.1" - commander "^9.0.0" - expect-playwright "^0.8.0" - glob "^10.2.2" - jest "^29.6.4" - jest-circus "^29.6.4" - jest-environment-node "^29.6.4" - jest-junit "^16.0.0" - jest-playwright-preset "^4.0.0" - jest-runner "^29.6.4" - jest-serializer-html "^7.1.0" - jest-watch-typeahead "^2.0.0" - node-fetch "^2" - playwright "^1.14.0" - read-pkg-up "^7.0.1" - tempy "^1.0.1" - ts-dedent "^2.0.0" - -"@storybook/testing-library@^0.2.2": - version "0.2.2" - resolved "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.2.2.tgz" - integrity sha512-L8sXFJUHmrlyU2BsWWZGuAjv39Jl1uAqUHdxmN42JY15M4+XCMjGlArdCCjDe1wpTSW6USYISA9axjZojgtvnw== - dependencies: - "@testing-library/dom" "^9.0.0" - "@testing-library/user-event" "^14.4.0" - ts-dedent "^2.2.0" - -"@storybook/theming@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.17.tgz" - integrity sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA== - dependencies: - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@storybook/client-logger" "7.6.17" - "@storybook/global" "^5.0.0" - memoizerific "^1.11.3" - -"@storybook/types@7.6.17": - version "7.6.17" - resolved "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz" - integrity sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q== - dependencies: - "@storybook/channels" "7.6.17" - "@types/babel__core" "^7.0.0" - "@types/express" "^4.7.0" - file-system-cache "2.3.0" - -"@swc/core-darwin-arm64@1.4.14": - version "1.4.14" - resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.14.tgz" - integrity sha512-8iPfLhYNspBl836YYsfv6ErXwDUqJ7IMieddV3Ey/t/97JAEAdNDUdtTKDtbyP0j/Ebyqyn+fKcqwSq7rAof0g== - -"@swc/core-darwin-x64@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.14.tgz#4eefbe129e416f4c400656742ab7f30e01aff02e" - integrity sha512-9CqSj8uRZ92cnlgAlVaWMaJJBdxtNvCzJxaGj5KuIseeG6Q0l1g+qk8JcU7h9dAsH9saHTNwNFBVGKQo0W0ujg== - -"@swc/core-linux-arm-gnueabihf@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.14.tgz#bea4b94c32bb25de2816126dac299655529ba7f3" - integrity sha512-mfd5JArPITTzMjcezH4DwMw+BdjBV1y25Khp8itEIpdih9ei+fvxOOrDYTN08b466NuE2dF2XuhKtRLA7fXArQ== - -"@swc/core-linux-arm64-gnu@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.14.tgz#52063214f4a14d6a0c3c6059ed9e7ba1062f6b46" - integrity sha512-3Lqlhlmy8MVRS9xTShMaPAp0oyUt0KFhDs4ixJsjdxKecE0NJSV/MInuDmrkij1C8/RQ2wySRlV9np5jK86oWw== - -"@swc/core-linux-arm64-musl@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.14.tgz#7e7deea7b1b3d0c9944cc8e9ba948fcc785158ea" - integrity sha512-n0YoCa64TUcJrbcXIHIHDWQjdUPdaXeMHNEu7yyBtOpm01oMGTKP3frsUXIABLBmAVWtKvqit4/W1KVKn5gJzg== - -"@swc/core-linux-x64-gnu@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.14.tgz#301133ea3ee347568886f2489837e991e96d44db" - integrity sha512-CGmlwLWbfG1dB4jZBJnp2IWlK5xBMNLjN7AR5kKA3sEpionoccEnChOEvfux1UdVJQjLRKuHNV9yGyqGBTpxfQ== - -"@swc/core-linux-x64-musl@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.14.tgz#86b8e987a814209cd0dd0f21cbc1134305dfffd5" - integrity sha512-xq4npk8YKYmNwmr8fbvF2KP3kUVdZYfXZMQnW425gP3/sn+yFQO8Nd0bGH40vOVQn41kEesSe0Z5O/JDor2TgQ== - -"@swc/core-win32-arm64-msvc@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.14.tgz#eb56b8977e3542665929c3963bd7dc18fe5b2556" - integrity sha512-imq0X+gU9uUe6FqzOQot5gpKoaC00aCUiN58NOzwp0QXEupn8CDuZpdBN93HiZswfLruu5jA1tsc15x6v9p0Yg== - -"@swc/core-win32-ia32-msvc@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.14.tgz#72e119038b9d8743b13bb933b8e192acd9f501f9" - integrity sha512-cH6QpXMw5D3t+lpx6SkErHrxN0yFzmQ0lgNAJxoDRiaAdDbqA6Col8UqUJwUS++Ul6aCWgNhCdiEYehPaoyDPA== - -"@swc/core-win32-x64-msvc@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.14.tgz#f5a3b1a241708b0628a07458e5bedbf67a1b9595" - integrity sha512-FmZ4Tby4wW65K/36BKzmuu7mlq7cW5XOxzvufaSNVvQ5PN4OodAlqPjToe029oma4Av+ykJiif64scMttyNAzg== - -"@swc/core@^1.3.18": - version "1.4.14" - resolved "https://registry.npmjs.org/@swc/core/-/core-1.4.14.tgz" - integrity sha512-tHXg6OxboUsqa/L7DpsCcFnxhLkqN/ht5pCwav1HnvfthbiNIJypr86rNx4cUnQDJepETviSqBTIjxa7pSpGDQ== - dependencies: - "@swc/counter" "^0.1.2" - "@swc/types" "^0.1.5" - optionalDependencies: - "@swc/core-darwin-arm64" "1.4.14" - "@swc/core-darwin-x64" "1.4.14" - "@swc/core-linux-arm-gnueabihf" "1.4.14" - "@swc/core-linux-arm64-gnu" "1.4.14" - "@swc/core-linux-arm64-musl" "1.4.14" - "@swc/core-linux-x64-gnu" "1.4.14" - "@swc/core-linux-x64-musl" "1.4.14" - "@swc/core-win32-arm64-msvc" "1.4.14" - "@swc/core-win32-ia32-msvc" "1.4.14" - "@swc/core-win32-x64-msvc" "1.4.14" - -"@swc/counter@^0.1.2", "@swc/counter@^0.1.3": - version "0.1.3" - resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz" - integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== - -"@swc/jest@^0.2.23": - version "0.2.36" - resolved "https://registry.npmjs.org/@swc/jest/-/jest-0.2.36.tgz" - integrity sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw== - dependencies: - "@jest/create-cache-key-function" "^29.7.0" - "@swc/counter" "^0.1.3" - jsonc-parser "^3.2.0" - -"@swc/types@^0.1.5": - version "0.1.6" - resolved "https://registry.npmjs.org/@swc/types/-/types-0.1.6.tgz" - integrity sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg== - dependencies: - "@swc/counter" "^0.1.3" - -"@testing-library/dom@^9.0.0": - version "9.3.4" - resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz" - integrity sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^5.0.1" - aria-query "5.1.3" - chalk "^4.1.0" - dom-accessibility-api "^0.5.9" - lz-string "^1.5.0" - pretty-format "^27.0.2" - -"@testing-library/jest-dom@^6.1.2", "@testing-library/jest-dom@^6.1.6": - version "6.4.2" - resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.2.tgz" - integrity sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw== - dependencies: - "@adobe/css-tools" "^4.3.2" - "@babel/runtime" "^7.9.2" - aria-query "^5.0.0" - chalk "^3.0.0" - css.escape "^1.5.1" - dom-accessibility-api "^0.6.3" - lodash "^4.17.15" - redent "^3.0.0" - -"@testing-library/react@^14.1.2": - version "14.3.1" - resolved "https://registry.npmjs.org/@testing-library/react/-/react-14.3.1.tgz" - integrity sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ== - dependencies: - "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^9.0.0" - "@types/react-dom" "^18.0.0" - -"@testing-library/user-event@^14.4.0", "@testing-library/user-event@^14.5.2": - version "14.5.2" - resolved "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz" - integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== - -"@types/aria-query@^5.0.1": - version "5.0.4" - resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz" - integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.18.0", "@types/babel__core@^7.20.5": - version "7.20.5" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" - integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6", "@types/babel__traverse@^7.18.0": - version "7.20.5" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz" - integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== - dependencies: - "@babel/types" "^7.20.7" - -"@types/base16@^1.0.2": - version "1.0.5" - resolved "https://registry.npmjs.org/@types/base16/-/base16-1.0.5.tgz" - integrity sha512-OzOWrTluG9cwqidEzC/Q6FAmIPcnZfm8BFRlIx0+UIUqnuAmi5OS88O0RpT3Yz6qdmqObvUhasrbNsCofE4W9A== - -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/cross-spawn@^6.0.2": - version "6.0.6" - resolved "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz" - integrity sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA== - dependencies: - "@types/node" "*" - -"@types/detect-port@^1.3.0": - version "1.3.5" - resolved "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.5.tgz" - integrity sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA== - -"@types/doctrine@^0.0.3": - version "0.0.3" - resolved "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz" - integrity sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA== - -"@types/doctrine@^0.0.9": - version "0.0.9" - resolved "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.9.tgz" - integrity sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA== - -"@types/ejs@^3.1.1": - version "3.1.5" - resolved "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz" - integrity sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg== - -"@types/emscripten@^1.39.6": - version "1.39.10" - resolved "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.10.tgz" - integrity sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw== - -"@types/escodegen@^0.0.6": - version "0.0.6" - resolved "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz" - integrity sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig== - -"@types/estree@1.0.5", "@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/express-serve-static-core@^4.17.33": - version "4.19.0" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz" - integrity sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@^4.7.0": - version "4.17.21" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/find-cache-dir@^3.2.1": - version "3.2.1" - resolved "https://registry.npmjs.org/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz" - integrity sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw== - -"@types/glob@^7.1.3": - version "7.2.0" - resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1", "@types/istanbul-lib-coverage@^2.0.4": - version "2.0.6" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@types/jest/-/jest-28.1.3.tgz" - integrity sha512-Tsbjk8Y2hkBaY/gJsataeb4q9Mubw9EOz7+4RjPkzD5KjTvHHs7cpws22InaoXxAVAhF5HfFbzJjo6oKWqSZLw== - dependencies: - jest-matcher-utils "^28.0.0" - pretty-format "^28.0.0" - -"@types/json-schema@^7.0.15", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/jsonld@^1.5.13": - version "1.5.13" - resolved "https://registry.npmjs.org/@types/jsonld/-/jsonld-1.5.13.tgz" - integrity sha512-n7fUU6W4kSYK8VQlf/LsE9kddBHPKhODoVOjsZswmve+2qLwBy6naWxs/EiuSZN9NU0N06Ra01FR+j87C62T0A== - -"@types/lodash@^4.14.167", "@types/lodash@^4.14.178", "@types/lodash@^4.14.191": - version "4.17.0" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz" - integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA== - -"@types/mdx@^2.0.0": - version "2.0.13" - resolved "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz" - integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== - -"@types/mime-types@^2.1.0": - version "2.1.4" - resolved "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz" - integrity sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w== - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/node-fetch@^2.6.4": - version "2.6.11" - resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz" - integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== - dependencies: - "@types/node" "*" - form-data "^4.0.0" - -"@types/node@*", "@types/node@^20.4.8": - version "20.12.7" - resolved "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz" - integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== - dependencies: - undici-types "~5.26.4" - -"@types/node@^18.0.0": - version "18.19.31" - resolved "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz" - integrity sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA== - dependencies: - undici-types "~5.26.4" - -"@types/normalize-package-data@^2.4.0": - version "2.4.4" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz" - integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== - -"@types/parse-json@^4.0.0": - version "4.0.2" - resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz" - integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== - -"@types/pretty-hrtime@^1.0.0": - version "1.0.3" - resolved "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" - integrity sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA== - -"@types/prop-types@*", "@types/prop-types@^15.7.11": - version "15.7.12" - resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz" - integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== - -"@types/qs@*", "@types/qs@^6.9.5": - version "6.9.15" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz" - integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/react-dom@^18.0.0", "@types/react-dom@^18.0.11": - version "18.2.25" - resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.25.tgz" - integrity sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA== - dependencies: - "@types/react" "*" - -"@types/react-gtm-module@^2.0.2": - version "2.0.3" - resolved "https://registry.npmjs.org/@types/react-gtm-module/-/react-gtm-module-2.0.3.tgz" - integrity sha512-fL2zKdDFN5LckSsVBXEhhm9M4tFTM9oHJfGcfZJzktQkzpOTGtDM8oXIP9d9UBDxO4xLNZhS22dlgRVv6wgK9w== - -"@types/react-transition-group@^4.4.10": - version "4.4.10" - resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz" - integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q== - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@>=16", "@types/react@^18.2.12": - version "18.2.79" - resolved "https://registry.npmjs.org/@types/react/-/react-18.2.79.tgz" - integrity sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w== - dependencies: - "@types/prop-types" "*" - csstype "^3.0.2" - -"@types/resolve@^1.20.2": - version "1.20.6" - resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.6.tgz" - integrity sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ== - -"@types/semver@^7.3.12", "@types/semver@^7.3.4", "@types/semver@^7.5.8": - version "7.5.8" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@types/send@*": - version "0.17.4" - resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.7" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz" - integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== - dependencies: - "@types/http-errors" "*" - "@types/node" "*" - "@types/send" "*" - -"@types/stack-utils@^2.0.0": - version "2.0.3" - resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz" - integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== - -"@types/unist@^2.0.0": - version "2.0.10" - resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz" - integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== - -"@types/uuid@^9.0.1": - version "9.0.8" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz" - integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== - -"@types/wait-on@^5.2.0": - version "5.3.4" - resolved "https://registry.npmjs.org/@types/wait-on/-/wait-on-5.3.4.tgz" - integrity sha512-EBsPjFMrFlMbbUFf9D1Fp+PAB2TwmUn7a3YtHyD9RLuTIk1jDd8SxXVAoez2Ciy+8Jsceo2MYEYZzJ/DvorOKw== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^16.0.0": - version "16.0.9" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz" - integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^7.3.1": - version "7.7.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz" - integrity sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ== - dependencies: - "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.7.0" - "@typescript-eslint/type-utils" "7.7.0" - "@typescript-eslint/utils" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.3.1" - natural-compare "^1.4.0" - semver "^7.6.0" - ts-api-utils "^1.3.0" - -"@typescript-eslint/parser@^7.3.1": - version "7.7.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.0.tgz" - integrity sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg== - dependencies: - "@typescript-eslint/scope-manager" "7.7.0" - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/typescript-estree" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/scope-manager@7.7.0": - version "7.7.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz" - integrity sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw== - dependencies: - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" - -"@typescript-eslint/type-utils@7.7.0": - version "7.7.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.0.tgz" - integrity sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg== - dependencies: - "@typescript-eslint/typescript-estree" "7.7.0" - "@typescript-eslint/utils" "7.7.0" - debug "^4.3.4" - ts-api-utils "^1.3.0" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/types@7.7.0": - version "7.7.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz" - integrity sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/typescript-estree@7.7.0": - version "7.7.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz" - integrity sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ== - dependencies: - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "^9.0.4" - semver "^7.6.0" - ts-api-utils "^1.3.0" - -"@typescript-eslint/utils@7.7.0": - version "7.7.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz" - integrity sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.15" - "@types/semver" "^7.5.8" - "@typescript-eslint/scope-manager" "7.7.0" - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/typescript-estree" "7.7.0" - semver "^7.6.0" - -"@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.45.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@typescript-eslint/visitor-keys@7.7.0": - version "7.7.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz" - integrity sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA== - dependencies: - "@typescript-eslint/types" "7.7.0" - eslint-visitor-keys "^3.4.3" - -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -"@usersnap/browser@^0.0.5": - version "0.0.5" - resolved "https://registry.npmjs.org/@usersnap/browser/-/browser-0.0.5.tgz" - integrity sha512-EG6SOy63lKqqwgS03Olj7iQkptuCIYd2T/o9dM5KYa518F+jycWxlNFVY0Yd5uvzyIRoEAs9TN0goaBHXPBJ3w== - -"@vitejs/plugin-react@^3.0.1": - version "3.1.0" - resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz" - integrity sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g== - dependencies: - "@babel/core" "^7.20.12" - "@babel/plugin-transform-react-jsx-self" "^7.18.6" - "@babel/plugin-transform-react-jsx-source" "^7.19.6" - magic-string "^0.27.0" - react-refresh "^0.14.0" - -"@vitejs/plugin-react@^4.0.0": - version "4.2.1" - resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz" - integrity sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ== - dependencies: - "@babel/core" "^7.23.5" - "@babel/plugin-transform-react-jsx-self" "^7.23.3" - "@babel/plugin-transform-react-jsx-source" "^7.23.3" - "@types/babel__core" "^7.20.5" - react-refresh "^0.14.0" - -"@vitest/coverage-v8@^1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.5.0.tgz" - integrity sha512-1igVwlcqw1QUMdfcMlzzY4coikSIBN944pkueGi0pawrX5I5Z+9hxdTR+w3Sg6Q3eZhvdMAs8ZaF9JuTG1uYOQ== - dependencies: - "@ampproject/remapping" "^2.2.1" - "@bcoe/v8-coverage" "^0.2.3" - debug "^4.3.4" - istanbul-lib-coverage "^3.2.2" - istanbul-lib-report "^3.0.1" - istanbul-lib-source-maps "^5.0.4" - istanbul-reports "^3.1.6" - magic-string "^0.30.5" - magicast "^0.3.3" - picocolors "^1.0.0" - std-env "^3.5.0" - strip-literal "^2.0.0" - test-exclude "^6.0.0" - -"@vitest/expect@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@vitest/expect/-/expect-1.5.0.tgz" - integrity sha512-0pzuCI6KYi2SIC3LQezmxujU9RK/vwC1U9R0rLuGlNGcOuDWxqWKu6nUdFsX9tH1WU0SXtAxToOsEjeUn1s3hA== - dependencies: - "@vitest/spy" "1.5.0" - "@vitest/utils" "1.5.0" - chai "^4.3.10" - -"@vitest/runner@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@vitest/runner/-/runner-1.5.0.tgz" - integrity sha512-7HWwdxXP5yDoe7DTpbif9l6ZmDwCzcSIK38kTSIt6CFEpMjX4EpCgT6wUmS0xTXqMI6E/ONmfgRKmaujpabjZQ== - dependencies: - "@vitest/utils" "1.5.0" - p-limit "^5.0.0" - pathe "^1.1.1" - -"@vitest/snapshot@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.5.0.tgz" - integrity sha512-qpv3fSEuNrhAO3FpH6YYRdaECnnRjg9VxbhdtPwPRnzSfHVXnNzzrpX4cJxqiwgRMo7uRMWDFBlsBq4Cr+rO3A== - dependencies: - magic-string "^0.30.5" - pathe "^1.1.1" - pretty-format "^29.7.0" - -"@vitest/spy@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@vitest/spy/-/spy-1.5.0.tgz" - integrity sha512-vu6vi6ew5N5MMHJjD5PoakMRKYdmIrNJmyfkhRpQt5d9Ewhw9nZ5Aqynbi3N61bvk9UvZ5UysMT6ayIrZ8GA9w== - dependencies: - tinyspy "^2.2.0" - -"@vitest/ui@^1.1.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@vitest/ui/-/ui-1.5.0.tgz" - integrity sha512-ETcToK2TzICf/Oartvt19IH7yR4oCs8GrQk5hRhZ5oZFaSdDHTh6o3EdzyxOaY24NZ20cXYYNGjj1se/5vHfFg== - dependencies: - "@vitest/utils" "1.5.0" - fast-glob "^3.3.2" - fflate "^0.8.1" - flatted "^3.2.9" - pathe "^1.1.1" - picocolors "^1.0.0" - sirv "^2.0.4" - -"@vitest/utils@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@vitest/utils/-/utils-1.5.0.tgz" - integrity sha512-BDU0GNL8MWkRkSRdNFvCUCAVOeHaUlVJ9Tx0TYBZyXaaOTmGtUFObzchCivIBrIwKzvZA7A9sCejVhXM2aY98A== - dependencies: - diff-sequences "^29.6.3" - estree-walker "^3.0.3" - loupe "^2.3.7" - pretty-format "^29.7.0" - -"@yarnpkg/esbuild-plugin-pnp@^3.0.0-rc.10": - version "3.0.0-rc.15" - resolved "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz" - integrity sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA== - dependencies: - tslib "^2.4.0" - -"@yarnpkg/fslib@2.10.3": - version "2.10.3" - resolved "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz" - integrity sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A== - dependencies: - "@yarnpkg/libzip" "^2.3.0" - tslib "^1.13.0" - -"@yarnpkg/libzip@2.3.0", "@yarnpkg/libzip@^2.3.0": - version "2.3.0" - resolved "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz" - integrity sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg== - dependencies: - "@types/emscripten" "^1.39.6" - tslib "^1.13.0" - -"@yarnpkg/lockfile@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn-walk@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^7.4.1: - version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.11.3, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -address@^1.0.1: - version "1.2.2" - resolved "https://registry.npmjs.org/address/-/address-1.2.2.tgz" - integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== - -agent-base@5: - version "5.1.1" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz" - integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== - -agent-base@^7.0.2, agent-base@^7.1.0: - version "7.1.1" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz" - integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== - dependencies: - debug "^4.3.4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-escapes@^6.0.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz" - integrity sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -app-root-dir@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz" - integrity sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g== - -append-transform@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz" - integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== - dependencies: - default-require-extensions "^3.0.0" - -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -aria-hidden@^1.1.1: - version "1.2.4" - resolved "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz" - integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== - dependencies: - tslib "^2.0.0" - -aria-query@5.1.3: - version "5.1.3" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== - dependencies: - deep-equal "^2.0.5" - -aria-query@^5.0.0, aria-query@^5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" - -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== - dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-includes@^3.1.6, array-includes@^3.1.7: - version "3.1.8" - resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.findlast@^1.2.4: - version "1.2.5" - resolved "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz" - integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -array.prototype.findlastindex@^1.2.3: - version "1.2.5" - resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.toreversed@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz" - integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz" - integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.1.0" - es-shim-unscopables "^1.0.2" - -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" - is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" - -assert@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz" - integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== - dependencies: - call-bind "^1.0.2" - is-nan "^1.3.2" - object-is "^1.1.5" - object.assign "^4.1.4" - util "^0.12.5" - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -ast-types-flow@^0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz" - integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== - -ast-types@^0.16.1: - version "0.16.1" - resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz" - integrity sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg== - dependencies: - tslib "^2.0.1" - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^3.2.3: - version "3.2.5" - resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz" - integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -axe-core@=4.7.0: - version "4.7.0" - resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz" - integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== - -axios@^1.4.0, axios@^1.6.1: - version "1.6.8" - resolved "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -axobject-query@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== - dependencies: - dequal "^2.0.3" - -babel-core@^7.0.0-bridge.0: - version "7.0.0-bridge.0" - resolved "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz" - integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== - -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - 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" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - 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" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-macros@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz" - integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== - dependencies: - "@babel/runtime" "^7.12.5" - cosmiconfig "^7.0.0" - resolve "^1.19.0" - -babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.10" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz" - integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.1" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.10.4: - version "0.10.4" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz" - integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" - core-js-compat "^3.36.1" - -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz" - integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - 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" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base16@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz" - integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bech32@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz" - integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== - -better-opn@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz" - integrity sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ== - dependencies: - open "^8.0.4" - -bidi-js@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz" - integrity sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw== - dependencies: - require-from-string "^2.0.2" - -big-integer@^1.6.16, big-integer@^1.6.44: - version "1.6.52" - resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz" - integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -blakejs@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -body-parser@1.20.2: - version "1.20.2" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -bplist-parser@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz" - integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== - dependencies: - big-integer "^1.6.44" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -broadcast-channel@^3.4.1: - version "3.7.0" - resolved "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz" - integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg== - dependencies: - "@babel/runtime" "^7.7.2" - detect-node "^2.1.0" - js-sha3 "0.8.0" - microseconds "0.2.0" - nano-time "1.0.0" - oblivious-set "1.0.0" - rimraf "3.0.2" - unload "2.2.0" - -browser-assert@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz" - integrity sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ== - -browserify-zlib@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz" - integrity sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ== - dependencies: - pako "~0.2.0" - -browserslist@^4.22.2, browserslist@^4.23.0: - version "4.23.0" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== - dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cac@^6.7.14: - version "6.7.14" - resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - -caching-transform@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz" - integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== - dependencies: - hasha "^5.0.0" - make-dir "^3.0.0" - package-hash "^4.0.0" - write-file-atomic "^3.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -can-bind-to-host@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/can-bind-to-host/-/can-bind-to-host-1.1.2.tgz" - integrity sha512-CqsgmaqiyFRNtP17Ihqa/uHbZxRirntNVNl/kJz31DLKuNRfzvzionkLoUSkElQ6Cz+cpXKA3mhHq4tjbieujA== - -caniuse-lite@^1.0.30001587: - version "1.0.30001610" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz" - integrity sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA== - -canonicalize@^1.0.1: - version "1.0.8" - resolved "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz" - integrity sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A== - -chai@^4.3.10: - version "4.4.1" - resolved "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz" - integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== - 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" - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -char-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz" - integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== - -check-error@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz" - integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== - dependencies: - get-func-name "^2.0.2" - -chokidar@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chromatic@^11.3.0: - version "11.3.0" - resolved "https://registry.npmjs.org/chromatic/-/chromatic-11.3.0.tgz" - integrity sha512-q1ZtJDJrjLGnz60ivpC16gmd7KFzcaA4eTb7gcytCqbaKqlHhCFr1xQmcUDsm14CK7JsqdkFU6S+JQdOd2ZNJg== - -ci-info@^3.2.0, ci-info@^3.7.0: - version "3.9.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -citty@^0.1.6: - version "0.1.6" - resolved "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz" - integrity sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ== - dependencies: - consola "^3.2.3" - -cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.9.2" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-table3@^0.6.1: - version "0.6.4" - resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.4.tgz" - integrity sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -clsx@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz" - integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -color-convert@^1.9.0, color-convert@^1.9.3: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.6.0: - version "1.9.1" - resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - -commander@^6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - -commander@^9.0.0: - version "9.5.0" - resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -confusing-browser-globals@^1.0.10: - version "1.0.11" - resolved "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz" - integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== - -consola@^3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz" - integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^1.5.0, convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== - -core-js-compat@^3.31.0, core-js-compat@^3.36.1: - version "3.36.1" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz" - integrity sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA== - dependencies: - browserslist "^4.23.0" - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - 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" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -css-tree@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -css.escape@^1.5.1: - version "1.5.1" - resolved "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz" - integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== - -cssstyle@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz" - integrity sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ== - dependencies: - rrweb-cssom "^0.6.0" - -csstype@^3.0.10, csstype@^3.0.2, csstype@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -cwd@^0.10.0: - version "0.10.0" - resolved "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz" - integrity sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA== - dependencies: - find-pkg "^0.1.2" - fs-exists-sync "^0.1.0" - -damerau-levenshtein@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - -data-urls@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz" - integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== - dependencies: - whatwg-mimetype "^4.0.0" - whatwg-url "^14.0.0" - -data-view-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz" - integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz" - integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz" - integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -date-fns@^2.30.0: - version "2.30.0" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz" - integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== - dependencies: - "@babel/runtime" "^7.21.0" - -debug@2.6.9, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decimal.js@^10.4.3: - version "10.4.3" - resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - -dedent@^1.0.0: - version "1.5.3" - resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== - -deep-eql@^4.1.3: - version "4.1.3" - resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - dependencies: - type-detect "^4.0.0" - -deep-equal@^2.0.5: - version "2.2.3" - resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz" - integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.5" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.2" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.13" - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -default-browser-id@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz" - integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== - dependencies: - bplist-parser "^0.2.0" - untildify "^4.0.0" - -default-require-extensions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz" - integrity sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw== - dependencies: - strip-bom "^4.0.0" - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -defu@^6.1.4: - version "6.1.4" - resolved "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz" - integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== - -del@^6.0.0: - version "6.1.1" - resolved "https://registry.npmjs.org/del/-/del-6.1.1.tgz" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -dequal@^2.0.2, dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-indent@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -detect-node-es@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz" - integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== - -detect-node@^2.0.4, detect-node@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -detect-package-manager@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz" - integrity sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A== - dependencies: - execa "^5.1.1" - -detect-port@^1.3.0: - version "1.5.1" - resolved "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz" - integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== - dependencies: - address "^1.0.1" - debug "4" - -diff-sequences@^28.1.1: - version "28.1.1" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" - integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== - -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -diffable-html@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/diffable-html/-/diffable-html-4.1.0.tgz" - integrity sha512-++kyNek+YBLH8cLXS+iTj/Hiy2s5qkRJEJ8kgu/WHbFrVY2vz9xPFUT+fii2zGF0m1CaojDlQJjkfrCt7YWM1g== - dependencies: - htmlparser2 "^3.9.2" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-accessibility-api@^0.5.9: - version "0.5.16" - resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz" - integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== - -dom-accessibility-api@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz" - integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== - -dom-helpers@^5.0.1: - version "5.2.1" - resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz" - integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== - dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -domelementtype@1, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.3.0" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dotenv-expand@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz" - integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== - -dotenv@^16.0.0: - version "16.4.5" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz" - integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== - -duplexify@^3.5.0, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -ejs@^3.1.8: - version "3.1.10" - resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz" - integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.4.668: - version "1.4.737" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.737.tgz" - integrity sha512-QvLTxaLHKdy5YxvixAw/FfHq2eWLUL9KvsPjp0aHK1gI5d3EDuDgITkvj0nFO2c6zUY3ZqVAJQiBYyQP9tQpfw== - -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^4.4.0: - version "4.5.0" - resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -envinfo@^7.7.3: - version "7.12.0" - resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz" - integrity sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: - version "1.23.3" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== - dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" - es-define-property "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - hasown "^2.0.2" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" - is-callable "^1.2.7" - is-data-view "^1.0.1" - is-negative-zero "^2.0.3" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.2" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.9" - string.prototype.trimend "^1.0.8" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.6" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.15" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.17: - version "1.0.18" - resolved "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz" - integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.0" - es-errors "^1.3.0" - es-set-tostringtag "^2.0.3" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - globalthis "^1.0.3" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - internal-slot "^1.0.7" - iterator.prototype "^1.1.2" - safe-array-concat "^1.1.2" - -es-module-lexer@^0.9.3: - version "0.9.3" - resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== - -es-object-atoms@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz" - integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== - dependencies: - get-intrinsic "^1.2.4" - has-tostringtag "^1.0.2" - hasown "^2.0.1" - -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-error@^4.0.1: - version "4.1.1" - resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -esbuild-plugin-alias@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz" - integrity sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ== - -esbuild-register@^3.5.0: - version "3.5.0" - resolved "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz" - integrity sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A== - dependencies: - debug "^4.3.4" - -esbuild@^0.18.0, esbuild@^0.18.10: - version "0.18.20" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz" - integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== - optionalDependencies: - "@esbuild/android-arm" "0.18.20" - "@esbuild/android-arm64" "0.18.20" - "@esbuild/android-x64" "0.18.20" - "@esbuild/darwin-arm64" "0.18.20" - "@esbuild/darwin-x64" "0.18.20" - "@esbuild/freebsd-arm64" "0.18.20" - "@esbuild/freebsd-x64" "0.18.20" - "@esbuild/linux-arm" "0.18.20" - "@esbuild/linux-arm64" "0.18.20" - "@esbuild/linux-ia32" "0.18.20" - "@esbuild/linux-loong64" "0.18.20" - "@esbuild/linux-mips64el" "0.18.20" - "@esbuild/linux-ppc64" "0.18.20" - "@esbuild/linux-riscv64" "0.18.20" - "@esbuild/linux-s390x" "0.18.20" - "@esbuild/linux-x64" "0.18.20" - "@esbuild/netbsd-x64" "0.18.20" - "@esbuild/openbsd-x64" "0.18.20" - "@esbuild/sunos-x64" "0.18.20" - "@esbuild/win32-arm64" "0.18.20" - "@esbuild/win32-ia32" "0.18.20" - "@esbuild/win32-x64" "0.18.20" - -esbuild@^0.19.8: - version "0.19.12" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz" - integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== - optionalDependencies: - "@esbuild/aix-ppc64" "0.19.12" - "@esbuild/android-arm" "0.19.12" - "@esbuild/android-arm64" "0.19.12" - "@esbuild/android-x64" "0.19.12" - "@esbuild/darwin-arm64" "0.19.12" - "@esbuild/darwin-x64" "0.19.12" - "@esbuild/freebsd-arm64" "0.19.12" - "@esbuild/freebsd-x64" "0.19.12" - "@esbuild/linux-arm" "0.19.12" - "@esbuild/linux-arm64" "0.19.12" - "@esbuild/linux-ia32" "0.19.12" - "@esbuild/linux-loong64" "0.19.12" - "@esbuild/linux-mips64el" "0.19.12" - "@esbuild/linux-ppc64" "0.19.12" - "@esbuild/linux-riscv64" "0.19.12" - "@esbuild/linux-s390x" "0.19.12" - "@esbuild/linux-x64" "0.19.12" - "@esbuild/netbsd-x64" "0.19.12" - "@esbuild/openbsd-x64" "0.19.12" - "@esbuild/sunos-x64" "0.19.12" - "@esbuild/win32-arm64" "0.19.12" - "@esbuild/win32-ia32" "0.19.12" - "@esbuild/win32-x64" "0.19.12" - -esbuild@^0.20.1: - version "0.20.2" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz" - integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== - optionalDependencies: - "@esbuild/aix-ppc64" "0.20.2" - "@esbuild/android-arm" "0.20.2" - "@esbuild/android-arm64" "0.20.2" - "@esbuild/android-x64" "0.20.2" - "@esbuild/darwin-arm64" "0.20.2" - "@esbuild/darwin-x64" "0.20.2" - "@esbuild/freebsd-arm64" "0.20.2" - "@esbuild/freebsd-x64" "0.20.2" - "@esbuild/linux-arm" "0.20.2" - "@esbuild/linux-arm64" "0.20.2" - "@esbuild/linux-ia32" "0.20.2" - "@esbuild/linux-loong64" "0.20.2" - "@esbuild/linux-mips64el" "0.20.2" - "@esbuild/linux-ppc64" "0.20.2" - "@esbuild/linux-riscv64" "0.20.2" - "@esbuild/linux-s390x" "0.20.2" - "@esbuild/linux-x64" "0.20.2" - "@esbuild/netbsd-x64" "0.20.2" - "@esbuild/openbsd-x64" "0.20.2" - "@esbuild/sunos-x64" "0.20.2" - "@esbuild/win32-arm64" "0.20.2" - "@esbuild/win32-ia32" "0.20.2" - "@esbuild/win32-x64" "0.20.2" - -escalade@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-airbnb-base@^15.0.0: - version "15.0.0" - resolved "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz" - integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== - dependencies: - confusing-browser-globals "^1.0.10" - object.assign "^4.1.2" - object.entries "^1.1.5" - semver "^6.3.0" - -eslint-config-airbnb@^19.0.4: - version "19.0.4" - resolved "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz" - integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== - dependencies: - eslint-config-airbnb-base "^15.0.0" - object.assign "^4.1.2" - object.entries "^1.1.5" - -eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-module-utils@^2.8.0: - version "2.8.1" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz" - integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@^2.29.1: - version "2.29.1" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== - dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" - semver "^6.3.1" - tsconfig-paths "^3.15.0" - -eslint-plugin-jest@^27.9.0: - version "27.9.0" - resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz" - integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== - dependencies: - "@typescript-eslint/utils" "^5.10.0" - -eslint-plugin-jsx-a11y@^6.8.0: - version "6.8.0" - resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz" - integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== - dependencies: - "@babel/runtime" "^7.23.2" - aria-query "^5.3.0" - array-includes "^3.1.7" - array.prototype.flatmap "^1.3.2" - ast-types-flow "^0.0.8" - axe-core "=4.7.0" - axobject-query "^3.2.1" - damerau-levenshtein "^1.0.8" - emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.15" - hasown "^2.0.0" - jsx-ast-utils "^3.3.5" - language-tags "^1.0.9" - minimatch "^3.1.2" - object.entries "^1.1.7" - object.fromentries "^2.0.7" - -eslint-plugin-react-hooks@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== - -eslint-plugin-react-refresh@^0.3.4: - version "0.3.5" - resolved "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz" - integrity sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA== - -eslint-plugin-react@^7.34.1: - version "7.34.1" - resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz" - integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== - dependencies: - array-includes "^3.1.7" - array.prototype.findlast "^1.2.4" - array.prototype.flatmap "^1.3.2" - array.prototype.toreversed "^1.1.2" - array.prototype.tosorted "^1.1.3" - doctrine "^2.1.0" - es-iterator-helpers "^1.0.17" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.7" - object.fromentries "^2.0.7" - object.hasown "^1.1.3" - object.values "^1.1.7" - prop-types "^15.8.1" - resolve "^2.0.0-next.5" - semver "^6.3.1" - string.prototype.matchall "^4.0.10" - -eslint-plugin-storybook@^0.6.14: - version "0.6.15" - resolved "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.15.tgz" - integrity sha512-lAGqVAJGob47Griu29KXYowI4G7KwMoJDOkEip8ujikuDLxU+oWJ1l0WL6F2oDO4QiyUFXvtDkEkISMOPzo+7w== - dependencies: - "@storybook/csf" "^0.0.1" - "@typescript-eslint/utils" "^5.45.0" - requireindex "^1.1.0" - ts-dedent "^2.2.0" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.38.0: - version "8.57.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -estree-walker@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -execa@^5.0.0, execa@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -execa@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz" - integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^8.0.1" - human-signals "^5.0.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^4.1.0" - strip-final-newline "^3.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expand-tilde@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz" - integrity sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q== - dependencies: - os-homedir "^1.0.1" - -expect-playwright@^0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/expect-playwright/-/expect-playwright-0.8.0.tgz" - integrity sha512-+kn8561vHAY+dt+0gMqqj1oY+g5xWrsuGMk4QGxotT2WS545nVqqjs37z6hrYfIuucwqthzwJfCJUEYqixyljg== - -expect@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - 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" - -express@^4.17.3: - version "4.19.2" - resolved "https://registry.npmjs.org/express/-/express-4.19.2.tgz" - integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.2" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.6.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extract-zip@^1.6.6: - version "1.7.0" - resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz" - integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== - dependencies: - concat-stream "^1.6.2" - debug "^2.6.9" - mkdirp "^0.5.4" - yauzl "^2.10.0" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.9, fast-glob@^3.3.2: - version "3.3.2" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - -fetch-retry@^5.0.2: - version "5.0.6" - resolved "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz" - integrity sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ== - -fflate@^0.8.1: - version "0.8.2" - resolved "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz" - integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-system-cache@2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz" - integrity sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ== - dependencies: - fs-extra "11.1.1" - ramda "0.29.0" - -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-cache-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-cache-dir@^3.0.0, find-cache-dir@^3.2.0: - version "3.3.2" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-file-up@^0.1.2: - version "0.1.3" - resolved "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz" - integrity sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A== - dependencies: - fs-exists-sync "^0.1.0" - resolve-dir "^0.1.0" - -find-pkg@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz" - integrity sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw== - dependencies: - find-file-up "^0.1.2" - -find-process@^1.4.4: - version "1.4.7" - resolved "https://registry.npmjs.org/find-process/-/find-process-1.4.7.tgz" - integrity sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg== - dependencies: - chalk "^4.0.0" - commander "^5.1.0" - debug "^4.1.1" - -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-yarn-workspace-root@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz" - integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== - dependencies: - micromatch "^4.0.2" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== - -flow-parser@0.*: - version "0.233.0" - resolved "https://registry.npmjs.org/flow-parser/-/flow-parser-0.233.0.tgz" - integrity sha512-E/mv51GYJfLuRX6fZnw4M52gBxYa8pkHUOgNEZOcQK2RTXS8YXeU5rlalkTcY99UpwbeNVCSUFKaavpOksi/pQ== - -follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -foreground-child@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz" - integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^3.0.2" - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fromentries@^1.2.0: - version "1.3.2" - resolved "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz" - integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-exists-sync@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz" - integrity sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg== - -fs-extra@11.1.1: - version "11.1.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.1.0: - version "11.2.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.1, get-func-name@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz" - integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-nonce@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz" - integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== - -get-npm-tarball-url@^2.0.3: - version "2.1.0" - resolved "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.1.0.tgz" - integrity sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA== - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-port@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-stream@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz" - integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== - -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== - dependencies: - call-bind "^1.0.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - -giget@^1.0.0: - version "1.2.3" - resolved "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz" - integrity sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA== - dependencies: - citty "^0.1.6" - consola "^3.2.3" - defu "^6.1.4" - node-fetch-native "^1.6.3" - nypm "^0.3.8" - ohash "^1.1.3" - pathe "^1.1.2" - tar "^6.2.0" - -github-slugger@^1.0.0: - version "1.5.0" - resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz" - integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-promise@^4.2.0: - version "4.2.2" - resolved "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz" - integrity sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw== - dependencies: - "@types/glob" "^7.1.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^10.0.0, glob@^10.2.2: - version "10.3.12" - resolved "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz" - integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.6" - minimatch "^9.0.1" - minipass "^7.0.4" - path-scurry "^1.10.2" - -glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -global-modules@^0.2.3: - version "0.2.3" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz" - integrity sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA== - dependencies: - global-prefix "^0.1.4" - is-windows "^0.2.0" - -global-prefix@^0.1.4: - version "0.1.5" - resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz" - integrity sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw== - dependencies: - homedir-polyfill "^1.0.0" - ini "^1.3.4" - is-windows "^0.2.0" - which "^1.2.12" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^11.0.1, globby@^11.0.2, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -gunzip-maybe@^1.4.2: - version "1.4.2" - resolved "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz" - integrity sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw== - dependencies: - browserify-zlib "^0.1.4" - is-deflate "^1.0.0" - is-gzip "^1.0.0" - peek-stream "^1.1.0" - pumpify "^1.3.3" - through2 "^2.0.3" - -handlebars@^4.7.7: - version "4.7.8" - resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.2" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1, has-proto@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hasha@^5.0.0: - version "5.2.2" - resolved "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz" - integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== - dependencies: - is-stream "^2.0.0" - type-fest "^0.8.0" - -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -homedir-polyfill@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -html-encoding-sniffer@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz" - integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== - dependencies: - whatwg-encoding "^3.1.1" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-parse-stringify@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz" - integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== - dependencies: - void-elements "3.1.0" - -html-tags@^3.1.0: - version "3.3.1" - resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz" - integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== - -htmlparser2@^3.9.2: - version "3.10.1" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-proxy-agent@^7.0.0: - version "7.0.2" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz" - integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - -https-proxy-agent@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz" - integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== - dependencies: - agent-base "5" - debug "4" - -https-proxy-agent@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz" - integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== - dependencies: - agent-base "^7.0.2" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -human-signals@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz" - integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== - -i18next@^23.7.19: - version "23.11.2" - resolved "https://registry.npmjs.org/i18next/-/i18next-23.11.2.tgz" - integrity sha512-qMBm7+qT8jdpmmDw/kQD16VpmkL9BdL+XNAK5MNbNFaf1iQQq35ZbPrSlqmnNPOSUY4m342+c0t0evinF5l7sA== - dependencies: - "@babel/runtime" "^7.23.2" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0, ignore@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.4: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -internal-slot@^1.0.4, internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" - -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -ip@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz" - integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-absolute-url@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-arguments@^1.0.4, is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== - dependencies: - has-tostringtag "^1.0.0" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.13.0, is-core-module@^2.13.1: - version "2.13.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-data-view@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz" - integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== - dependencies: - is-typed-array "^1.1.13" - -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-deflate@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz" - integrity sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ== - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== - dependencies: - call-bind "^1.0.2" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-generator-function@^1.0.10, is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-gzip@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz" - integrity sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ== - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-map@^2.0.2, is-map@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz" - integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== - -is-nan@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2, is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-object@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-set@^2.0.2, is-set@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz" - integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== - -is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== - dependencies: - call-bind "^1.0.7" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.13, is-typed-array@^1.1.3: - version "1.1.13" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-weakmap@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz" - integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz" - integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - -is-windows@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz" - integrity sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q== - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.1.1, is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0, istanbul-lib-coverage@^3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-hook@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz" - integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== - dependencies: - append-transform "^2.0.0" - -istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.2.1" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - 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" - -istanbul-lib-instrument@^6.0.0, istanbul-lib-instrument@^6.0.1: - version "6.0.2" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz" - integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== - dependencies: - "@babel/core" "^7.23.9" - "@babel/parser" "^7.23.9" - "@istanbuljs/schema" "^0.1.3" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" - -istanbul-lib-processinfo@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz" - integrity sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg== - dependencies: - archy "^1.0.0" - cross-spawn "^7.0.3" - istanbul-lib-coverage "^3.2.0" - p-map "^3.0.0" - rimraf "^3.0.0" - uuid "^8.3.2" - -istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-lib-source-maps@^5.0.4: - version "5.0.4" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.4.tgz" - integrity sha512-wHOoEsNJTVltaJp8eVkm8w+GVkVNHT2YDYo53YdzQEL2gWm1hBX5cGFR9hQJtuGLebidVX7et3+dmDZrmclduw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.23" - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - -istanbul-reports@^3.0.2, istanbul-reports@^3.1.3, istanbul-reports@^3.1.6: - version "3.1.7" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== - dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" - -jackspeak@^2.3.6: - version "2.3.6" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jake@^10.8.5: - version "10.8.7" - resolved "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - -jest-circus@^29.6.4, jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - 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" - -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - 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" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - 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" - -jest-diff@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" - integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== - dependencies: - chalk "^4.0.0" - diff-sequences "^28.1.1" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" - -jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - 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" - -jest-environment-node@^29.6.4, jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - 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" - -jest-get-type@^28.0.2: - version "28.0.2" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" - integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - 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" - optionalDependencies: - fsevents "^2.3.2" - -jest-junit@^16.0.0: - version "16.0.0" - resolved "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz" - integrity sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ== - dependencies: - mkdirp "^1.0.4" - strip-ansi "^6.0.1" - uuid "^8.3.2" - xml "^1.0.1" - -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-matcher-utils@^28.0.0: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" - integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== - dependencies: - chalk "^4.0.0" - jest-diff "^28.1.3" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - 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" - -jest-mock@^27.0.6, jest-mock@^27.3.0: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-playwright-preset@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/jest-playwright-preset/-/jest-playwright-preset-4.0.0.tgz" - integrity sha512-+dGZ1X2KqtwXaabVjTGxy0a3VzYfvYsWaRcuO8vMhyclHSOpGSI1+5cmlqzzCwQ3+fv0EjkTc7I5aV9lo08dYw== - dependencies: - expect-playwright "^0.8.0" - jest-process-manager "^0.4.0" - nyc "^15.1.0" - playwright-core ">=1.2.0" - rimraf "^3.0.2" - uuid "^8.3.2" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-process-manager@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/jest-process-manager/-/jest-process-manager-0.4.0.tgz" - integrity sha512-80Y6snDyb0p8GG83pDxGI/kQzwVTkCxc7ep5FPe/F6JYdvRDhwr6RzRmPSP7SEwuLhxo80lBS/NqOdUIbHIfhw== - dependencies: - "@types/wait-on" "^5.2.0" - chalk "^4.1.0" - cwd "^0.10.0" - exit "^0.1.2" - find-process "^1.4.4" - prompts "^2.4.1" - signal-exit "^3.0.3" - spawnd "^5.0.0" - tree-kill "^1.2.2" - wait-on "^7.0.0" - -jest-regex-util@^29.0.0, jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - 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" - -jest-runner@^29.6.4, jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - 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" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - 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" - -jest-serializer-html@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/jest-serializer-html/-/jest-serializer-html-7.1.0.tgz" - integrity sha512-xYL2qC7kmoYHJo8MYqJkzrl/Fdlx+fat4U1AqYg+kafqwcKPiMkOcjWHPKhueuNEgr+uemhGc+jqXYiwCyRyLA== - dependencies: - diffable-html "^4.1.0" - -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - 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" - -jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - 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" - -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - 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" - -jest-watch-typeahead@^2.0.0: - version "2.2.2" - resolved "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-2.2.2.tgz" - integrity sha512-+QgOFW4o5Xlgd6jGS5X37i08tuuXNW8X0CV9WNFi+3n8ExCIP+E1melYhvYLjv5fE6D0yyzk74vsSO8I6GqtvQ== - dependencies: - ansi-escapes "^6.0.0" - chalk "^5.2.0" - jest-regex-util "^29.0.0" - jest-watcher "^29.0.0" - slash "^5.0.0" - string-length "^5.0.1" - strip-ansi "^7.0.1" - -jest-watcher@^29.0.0, jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - 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" - -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^29.6.4: - version "29.7.0" - resolved "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - -joi@^17.11.0: - version "17.12.3" - resolved "https://registry.npmjs.org/joi/-/joi-17.12.3.tgz" - integrity sha512-2RRziagf555owrm9IRVtdKynOBeITiDpuZqIpgwqXShPncPKNiRQoiGsl/T8SQdq+8ugRzH2LqY67irr2y/d+g== - dependencies: - "@hapi/hoek" "^9.3.0" - "@hapi/topo" "^5.1.0" - "@sideway/address" "^4.1.5" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - -js-sha3@0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-tokens@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz" - integrity sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jscodeshift@^0.15.1: - version "0.15.2" - resolved "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.2.tgz" - integrity sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA== - dependencies: - "@babel/core" "^7.23.0" - "@babel/parser" "^7.23.0" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.23.0" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.23.0" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/preset-flow" "^7.22.15" - "@babel/preset-typescript" "^7.23.0" - "@babel/register" "^7.22.15" - babel-core "^7.0.0-bridge.0" - chalk "^4.1.2" - flow-parser "0.*" - graceful-fs "^4.2.4" - micromatch "^4.0.4" - neo-async "^2.5.0" - node-dir "^0.1.17" - recast "^0.23.3" - temp "^0.8.4" - write-file-atomic "^2.3.0" - -jsdom@^23.0.1: - version "23.2.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-23.2.0.tgz" - integrity sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA== - dependencies: - "@asamuzakjp/dom-selector" "^2.0.1" - cssstyle "^4.0.1" - data-urls "^5.0.0" - decimal.js "^10.4.3" - form-data "^4.0.0" - html-encoding-sniffer "^4.0.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.2" - is-potential-custom-element-name "^1.0.1" - parse5 "^7.1.2" - rrweb-cssom "^0.6.0" - saxes "^6.0.0" - symbol-tree "^3.2.4" - tough-cookie "^4.1.3" - w3c-xmlserializer "^5.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^3.1.1" - whatwg-mimetype "^4.0.0" - whatwg-url "^14.0.0" - ws "^8.16.0" - xml-name-validator "^5.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stable-stringify@^1.0.2: - version "1.1.1" - resolved "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz" - integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== - dependencies: - call-bind "^1.0.5" - isarray "^2.0.5" - jsonify "^0.0.1" - object-keys "^1.1.1" - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonc-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz" - integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@^0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz" - integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== - -jsonld@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/jsonld/-/jsonld-8.3.2.tgz" - integrity sha512-MwBbq95szLwt8eVQ1Bcfwmgju/Y5P2GdtlHE2ncyfuYjIdEhluUVyj1eudacf1mOkWIoS9GpDBTECqhmq7EOaA== - dependencies: - "@digitalbazaar/http-client" "^3.4.1" - canonicalize "^1.0.1" - lru-cache "^6.0.0" - rdf-canonize "^3.4.0" - -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: - version "3.3.5" - resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" - -keen-slider@^6.8.5: - version "6.8.6" - resolved "https://registry.npmjs.org/keen-slider/-/keen-slider-6.8.6.tgz" - integrity sha512-dcEQ7GDBpCjUQA8XZeWh3oBBLLmyn8aoeIQFGL/NTVkoEOsmlnXqA4QykUm/SncolAZYGsEk/PfUhLZ7mwMM2w== - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -klaw-sync@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz" - integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== - dependencies: - graceful-fs "^4.1.11" - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -ky-universal@^0.11.0: - version "0.11.0" - resolved "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz" - integrity sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw== - dependencies: - abort-controller "^3.0.0" - node-fetch "^3.2.10" - -ky@^0.33.3: - version "0.33.3" - resolved "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz" - integrity sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw== - -language-subtag-registry@^0.3.20: - version "0.3.22" - resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== - -language-tags@^1.0.9: - version "1.0.9" - resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz" - integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== - dependencies: - language-subtag-registry "^0.3.20" - -lazy-universal-dotenv@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz" - integrity sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg== - dependencies: - app-root-dir "^1.0.2" - dotenv "^16.0.0" - dotenv-expand "^10.0.0" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-utils@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -local-pkg@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz" - integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== - dependencies: - mlly "^1.4.2" - pkg-types "^1.0.3" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.curry@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz" - integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz" - integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@^4.17.15, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loupe@^2.3.6, loupe@^2.3.7: - version "2.3.7" - resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz" - integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== - dependencies: - get-func-name "^2.0.1" - -lru-cache@^10.2.0: - version "10.2.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lz-string@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz" - integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== - -magic-string@^0.27.0: - version "0.27.0" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz" - integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" - -magic-string@^0.30.0, magic-string@^0.30.5: - version "0.30.9" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.9.tgz" - integrity sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - -magicast@^0.3.3: - version "0.3.4" - resolved "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz" - integrity sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q== - dependencies: - "@babel/parser" "^7.24.4" - "@babel/types" "^7.24.0" - source-map-js "^1.2.0" - -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0, make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -map-or-similar@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz" - integrity sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg== - -markdown-to-jsx@^7.1.8: - version "7.4.7" - resolved "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz" - integrity sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg== - -match-sorter@^6.0.2: - version "6.3.4" - resolved "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.4.tgz" - integrity sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg== - dependencies: - "@babel/runtime" "^7.23.8" - remove-accents "0.5.0" - -mdast-util-definitions@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz" - integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== - dependencies: - unist-util-visit "^2.0.0" - -mdast-util-to-string@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz" - integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memoizerific@^1.11.3: - version "1.11.3" - resolved "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz" - integrity sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog== - dependencies: - map-or-similar "^1.5.0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-source-map@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz" - integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== - dependencies: - source-map "^0.6.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -microseconds@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz" - integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.25, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.0.3: - version "2.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -min-indent@^1.0.0, min-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.1, minimatch@^9.0.3, minimatch@^9.0.4: - version "9.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: - version "7.0.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp-classic@^0.5.2: - version "0.5.3" - resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^0.5.4: - version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mlly@^1.2.0, mlly@^1.4.2: - version "1.6.1" - resolved "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz" - integrity sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA== - dependencies: - acorn "^8.11.3" - pathe "^1.1.2" - pkg-types "^1.0.3" - ufo "^1.3.2" - -mrmime@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz" - integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nano-time@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz" - integrity sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA== - dependencies: - big-integer "^1.6.16" - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.5.0, neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -node-dir@^0.1.17: - version "0.1.17" - resolved "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz" - integrity sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg== - dependencies: - minimatch "^3.0.2" - -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch-native@^1.6.3: - version "1.6.4" - resolved "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz" - integrity sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ== - -node-fetch@^2, node-fetch@^2.0.0: - version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^3.2.10: - version "3.3.2" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-preload@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz" - integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== - dependencies: - process-on-spawn "^1.0.0" - -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-run-path@^5.1.0: - version "5.3.0" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz" - integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== - dependencies: - path-key "^4.0.0" - -nyc@^15.1.0: - version "15.1.0" - resolved "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz" - integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== - dependencies: - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - caching-transform "^4.0.0" - convert-source-map "^1.7.0" - decamelize "^1.2.0" - find-cache-dir "^3.2.0" - find-up "^4.1.0" - foreground-child "^2.0.0" - get-package-type "^0.1.0" - glob "^7.1.6" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-hook "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-processinfo "^2.0.2" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - make-dir "^3.0.0" - node-preload "^0.2.1" - p-map "^3.0.0" - process-on-spawn "^1.0.0" - resolve-from "^5.0.0" - rimraf "^3.0.0" - signal-exit "^3.0.2" - spawn-wrap "^2.0.0" - test-exclude "^6.0.0" - yargs "^15.0.2" - -nypm@^0.3.8: - version "0.3.8" - resolved "https://registry.npmjs.org/nypm/-/nypm-0.3.8.tgz" - integrity sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og== - dependencies: - citty "^0.1.6" - consola "^3.2.3" - execa "^8.0.1" - pathe "^1.1.2" - ufo "^1.4.0" - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-is@^1.1.5: - version "1.1.6" - resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz" - integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.5, object.entries@^1.1.7: - version "1.1.8" - resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz" - integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -object.fromentries@^2.0.7: - version "2.0.8" - resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.groupby@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - -object.hasown@^1.1.3: - version "1.1.4" - resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz" - integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== - dependencies: - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.values@^1.1.6, object.values@^1.1.7: - version "1.2.0" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz" - integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -oblivious-set@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz" - integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw== - -ohash@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz" - integrity sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -open@^7.4.2: - version "7.4.2" - resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - -open@^8.0.4, open@^8.4.0: - version "8.4.2" - resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" - integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz" - integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-hash@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz" - integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== - dependencies: - graceful-fs "^4.1.15" - hasha "^5.0.0" - lodash.flattendeep "^4.4.0" - release-zalgo "^1.0.0" - -pako@~0.2.0: - version "0.2.9" - resolved "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz" - integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0, parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" - integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== - -parse5@^7.1.2: - version "7.1.2" - resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== - dependencies: - entities "^4.4.0" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -patch-package@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz" - integrity sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA== - dependencies: - "@yarnpkg/lockfile" "^1.1.0" - chalk "^4.1.2" - ci-info "^3.7.0" - cross-spawn "^7.0.3" - find-yarn-workspace-root "^2.0.0" - fs-extra "^9.0.0" - json-stable-stringify "^1.0.2" - klaw-sync "^6.0.0" - minimist "^1.2.6" - open "^7.4.2" - rimraf "^2.6.3" - semver "^7.5.3" - slash "^2.0.0" - tmp "^0.0.33" - yaml "^2.2.2" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.10.2: - version "1.10.2" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz" - integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz" - integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -peek-stream@^1.1.0: - version "1.1.3" - resolved "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz" - integrity sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA== - dependencies: - buffer-from "^1.0.0" - duplexify "^3.5.0" - through2 "^2.0.3" - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.0, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pirates@^4.0.4, pirates@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-dir@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz" - integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== - dependencies: - find-up "^5.0.0" - -pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== - dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" - -playwright-core@1.43.1, playwright-core@>=1.2.0: - version "1.43.1" - resolved "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.1.tgz" - integrity sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg== - -playwright@^1.14.0: - version "1.43.1" - resolved "https://registry.npmjs.org/playwright/-/playwright-1.43.1.tgz" - integrity sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA== - dependencies: - playwright-core "1.43.1" - optionalDependencies: - fsevents "2.3.2" - -polished@^4.2.2: - version "4.3.1" - resolved "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz" - integrity sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA== - dependencies: - "@babel/runtime" "^7.17.8" - -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - -postcss@^8.4.27, postcss@^8.4.38: - version "8.4.38" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.2.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@^2.8.0: - version "2.8.8" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-format@^27.0.2: - version "27.5.1" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -pretty-format@^28.0.0, pretty-format@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" - integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== - dependencies: - "@jest/schemas" "^28.1.3" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -pretty-hrtime@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" - integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process-on-spawn@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz" - integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== - dependencies: - fromentries "^1.2.0" - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -progress@^2.0.1: - version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -prompts@^2.0.1, prompts@^2.4.0, prompts@^2.4.1: - version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -property-expr@^2.0.5: - version "2.0.6" - resolved "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz" - integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-from-env@^1.0.0, proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -puppeteer-core@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-2.1.1.tgz" - integrity sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w== - dependencies: - "@types/mime-types" "^2.1.0" - debug "^4.1.0" - extract-zip "^1.6.6" - https-proxy-agent "^4.0.0" - mime "^2.0.3" - mime-types "^2.1.25" - progress "^2.0.1" - proxy-from-env "^1.0.0" - rimraf "^2.6.1" - ws "^6.1.0" - -pure-rand@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz" - integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@^6.10.0: - version "6.12.1" - resolved "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz" - integrity sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ== - dependencies: - side-channel "^1.0.6" - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -ramda@0.29.0: - version "0.29.0" - resolved "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz" - integrity sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rdf-canonize@^3.4.0: - version "3.4.0" - resolved "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz" - integrity sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA== - dependencies: - setimmediate "^1.0.5" - -react-base16-styling@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.9.1.tgz" - integrity sha512-1s0CY1zRBOQ5M3T61wetEpvQmsYSNtWEcdYzyZNxKa8t7oDvaOn9d21xrGezGAHFWLM7SHcktPuPTrvoqxSfKw== - dependencies: - "@babel/runtime" "^7.16.7" - "@types/base16" "^1.0.2" - "@types/lodash" "^4.14.178" - base16 "^1.0.0" - color "^3.2.1" - csstype "^3.0.10" - lodash.curry "^4.1.1" - -react-colorful@^5.1.2: - version "5.6.1" - resolved "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz" - integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw== - -react-confetti@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/react-confetti/-/react-confetti-6.1.0.tgz" - integrity sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw== - dependencies: - tween-functions "^1.2.0" - -react-docgen-typescript@^2.2.2: - version "2.2.2" - resolved "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz" - integrity sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg== - -react-docgen@^7.0.0: - version "7.0.3" - resolved "https://registry.npmjs.org/react-docgen/-/react-docgen-7.0.3.tgz" - integrity sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ== - dependencies: - "@babel/core" "^7.18.9" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" - "@types/babel__core" "^7.18.0" - "@types/babel__traverse" "^7.18.0" - "@types/doctrine" "^0.0.9" - "@types/resolve" "^1.20.2" - doctrine "^3.0.0" - resolve "^1.22.1" - strip-indent "^4.0.0" - -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-element-to-jsx-string@^15.0.0: - version "15.0.0" - resolved "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz" - integrity sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ== - dependencies: - "@base2/pretty-print-object" "1.0.1" - is-plain-object "5.0.0" - react-is "18.1.0" - -react-gtm-module@^2.0.11: - version "2.0.11" - resolved "https://registry.npmjs.org/react-gtm-module/-/react-gtm-module-2.0.11.tgz" - integrity sha512-8gyj4TTxeP7eEyc2QKawEuQoAZdjKvMY4pgWfycGmqGByhs17fR+zEBs0JUDq4US/l+vbTl+6zvUIx27iDo/Vw== - -react-hook-form@^7.47.0: - version "7.51.3" - resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.51.3.tgz" - integrity sha512-cvJ/wbHdhYx8aviSWh28w9ImjmVsb5Y05n1+FW786vEZQJV5STNM0pW6ujS+oiBecb0ARBxJFyAnXj9+GHXACQ== - -react-i18next@^14.0.1: - version "14.1.0" - resolved "https://registry.npmjs.org/react-i18next/-/react-i18next-14.1.0.tgz" - integrity sha512-3KwX6LHpbvGQ+sBEntjV4sYW3Zovjjl3fpoHbUwSgFHf0uRBcbeCBLR5al6ikncI5+W0EFb71QXZmfop+J6NrQ== - dependencies: - "@babel/runtime" "^7.23.9" - html-parse-stringify "^3.0.1" - -react-is@18.1.0: - version "18.1.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz" - integrity sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg== - -react-is@^16.13.1, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -react-is@^18.0.0, react-is@^18.2.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -react-json-tree@^0.18.0: - version "0.18.0" - resolved "https://registry.npmjs.org/react-json-tree/-/react-json-tree-0.18.0.tgz" - integrity sha512-Qe6HKSXrr++n9Y31nkRJ3XvQMATISpqigH1vEKhLwB56+nk5thTP0ITThpjxY6ZG/ubpVq/aEHIcyLP/OPHxeA== - dependencies: - "@babel/runtime" "^7.20.6" - "@types/lodash" "^4.14.191" - react-base16-styling "^0.9.1" - -react-query@^3.39.3: - version "3.39.3" - resolved "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz" - integrity sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g== - dependencies: - "@babel/runtime" "^7.5.5" - broadcast-channel "^3.4.1" - match-sorter "^6.0.2" - -react-refresh@^0.14.0: - version "0.14.0" - resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz" - integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== - -react-remove-scroll-bar@^2.3.3: - version "2.3.6" - resolved "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz" - integrity sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g== - dependencies: - react-style-singleton "^2.2.1" - tslib "^2.0.0" - -react-remove-scroll@2.5.5: - version "2.5.5" - resolved "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz" - integrity sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw== - dependencies: - react-remove-scroll-bar "^2.3.3" - react-style-singleton "^2.2.1" - tslib "^2.1.0" - use-callback-ref "^1.3.0" - use-sidecar "^1.1.2" - -react-router-dom@^6.13.0: - version "6.22.3" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz" - integrity sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw== - dependencies: - "@remix-run/router" "1.15.3" - react-router "6.22.3" - -react-router@6.22.3: - version "6.22.3" - resolved "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz" - integrity sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ== - dependencies: - "@remix-run/router" "1.15.3" - -react-style-singleton@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz" - integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== - dependencies: - get-nonce "^1.0.0" - invariant "^2.2.4" - tslib "^2.0.0" - -react-transition-group@^4.4.5: - version "4.4.5" - resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz" - integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - -react@^18.2.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -readable-stream@^2.0.0, readable-stream@^2.2.2, readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -recast@^0.23.1, recast@^0.23.3: - version "0.23.6" - resolved "https://registry.npmjs.org/recast/-/recast-0.23.6.tgz" - integrity sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ== - dependencies: - ast-types "^0.16.1" - esprima "~4.0.0" - source-map "~0.6.1" - tiny-invariant "^1.3.3" - tslib "^2.0.1" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -reflect.getprototypeof@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz" - integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.1" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== - dependencies: - call-bind "^1.0.6" - define-properties "^1.2.1" - es-errors "^1.3.0" - set-function-name "^2.0.1" - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -release-zalgo@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz" - integrity sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA== - dependencies: - es6-error "^4.0.1" - -remark-external-links@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz" - integrity sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA== - dependencies: - extend "^3.0.0" - is-absolute-url "^3.0.0" - mdast-util-definitions "^4.0.0" - space-separated-tokens "^1.0.0" - unist-util-visit "^2.0.0" - -remark-slug@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz" - integrity sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ== - dependencies: - github-slugger "^1.0.0" - mdast-util-to-string "^1.0.0" - unist-util-visit "^2.0.0" - -remove-accents@0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz" - integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -requireindex@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz" - integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-dir@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz" - integrity sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA== - dependencies: - expand-tilde "^1.2.2" - global-modules "^0.2.3" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - -resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.5: - version "2.0.0-next.5" - resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz" - integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@^2.6.1, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -"rollup@^2.25.0 || ^3.3.0", rollup@^3.27.1: - version "3.29.4" - resolved "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz" - integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== - optionalDependencies: - fsevents "~2.3.2" - -rollup@^4.13.0: - version "4.14.3" - resolved "https://registry.npmjs.org/rollup/-/rollup-4.14.3.tgz" - integrity sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw== - dependencies: - "@types/estree" "1.0.5" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.14.3" - "@rollup/rollup-android-arm64" "4.14.3" - "@rollup/rollup-darwin-arm64" "4.14.3" - "@rollup/rollup-darwin-x64" "4.14.3" - "@rollup/rollup-linux-arm-gnueabihf" "4.14.3" - "@rollup/rollup-linux-arm-musleabihf" "4.14.3" - "@rollup/rollup-linux-arm64-gnu" "4.14.3" - "@rollup/rollup-linux-arm64-musl" "4.14.3" - "@rollup/rollup-linux-powerpc64le-gnu" "4.14.3" - "@rollup/rollup-linux-riscv64-gnu" "4.14.3" - "@rollup/rollup-linux-s390x-gnu" "4.14.3" - "@rollup/rollup-linux-x64-gnu" "4.14.3" - "@rollup/rollup-linux-x64-musl" "4.14.3" - "@rollup/rollup-win32-arm64-msvc" "4.14.3" - "@rollup/rollup-win32-ia32-msvc" "4.14.3" - "@rollup/rollup-win32-x64-msvc" "4.14.3" - fsevents "~2.3.2" - -rrweb-cssom@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz" - integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-array-concat@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz" - integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-regex "^1.1.4" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -saxes@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz" - integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== - dependencies: - xmlchars "^2.2.0" - -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -schema-utils@^2.7.0: - version "2.7.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -"semver@2 || 3 || 4 || 5", semver@^5.6.0: - version "5.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: - version "7.6.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-function-name@^2.0.1, set-function-name@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4, side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -siginfo@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz" - integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== - -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1, signal-exit@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -sirv@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz" - integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== - dependencies: - "@polka/url" "^1.0.0-next.24" - mrmime "^2.0.0" - totalist "^3.0.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz" - integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== - -source-map-js@^1.0.1, source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.5.16: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.4: - version "0.7.4" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -space-separated-tokens@^1.0.0: - version "1.1.5" - resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz" - integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== - -spawn-wrap@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz" - integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== - dependencies: - foreground-child "^2.0.0" - is-windows "^1.0.2" - make-dir "^3.0.0" - rimraf "^3.0.0" - signal-exit "^3.0.2" - which "^2.0.1" - -spawnd@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/spawnd/-/spawnd-5.0.0.tgz" - integrity sha512-28+AJr82moMVWolQvlAIv3JcYDkjkFTEmfDc503wxrF5l2rQ3dFz6DpbXp3kD4zmgGGldfM4xM4v1sFj/ZaIOA== - dependencies: - exit "^0.1.2" - signal-exit "^3.0.3" - tree-kill "^1.2.2" - wait-port "^0.2.9" - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.5.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.17" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz" - integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -stackback@0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz" - integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -std-env@^3.5.0: - version "3.7.0" - resolved "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz" - integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== - -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - -store2@^2.14.2: - version "2.14.3" - resolved "https://registry.npmjs.org/store2/-/store2-2.14.3.tgz" - integrity sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg== - -storybook-addon-manual-mocks@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/storybook-addon-manual-mocks/-/storybook-addon-manual-mocks-1.0.4.tgz" - integrity sha512-qOsmyJhTKW8ZpUjR91nYopXG+/1CkpA5HP3nDIoMUaYwedaeBgeLq+G7xr18AV+K9hDGwb5oho/gq1y7q0dIfA== - -storybook-addon-module-mock@^1.1.2: - version "1.1.6" - resolved "https://registry.npmjs.org/storybook-addon-module-mock/-/storybook-addon-module-mock-1.1.6.tgz" - integrity sha512-ZNCF1LVNuY3XmDGWYnTiufNe4kwW7srve9moI823I6r3ck7yoAWG4fG+QczjZOYKgxlk6FKEMiKMjHfkcpBHQA== - dependencies: - jest-mock "^27.3.0" - minimatch "^9.0.3" - react-json-tree "^0.18.0" - -storybook@^7.4.5: - version "7.6.17" - resolved "https://registry.npmjs.org/storybook/-/storybook-7.6.17.tgz" - integrity sha512-8+EIo91bwmeFWPg1eysrxXlhIYv3OsXrznTr4+4Eq0NikqAoq6oBhtlN5K2RGS2lBVF537eN+9jTCNbR+WrzDA== - dependencies: - "@storybook/cli" "7.6.17" - -stream-shift@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz" - integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-length@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz" - integrity sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow== - dependencies: - char-regex "^2.0.0" - strip-ansi "^7.0.1" - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.matchall@^4.0.10: - version "4.0.11" - resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz" - integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.7" - regexp.prototype.flags "^1.5.2" - set-function-name "^2.0.2" - side-channel "^1.0.6" - -string.prototype.trim@^1.2.9: - version "1.2.9" - resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz" - integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.0" - es-object-atoms "^1.0.0" - -string.prototype.trimend@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz" - integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz" - integrity sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA== - dependencies: - min-indent "^1.0.1" - -strip-json-comments@^3.0.1, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-literal@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz" - integrity sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw== - dependencies: - js-tokens "^9.0.0" - -stylis@4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz" - integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -synchronous-promise@^2.0.15: - version "2.0.17" - resolved "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz" - integrity sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g== - -tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^6.2.0: - version "6.2.1" - resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -telejson@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz" - integrity sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ== - dependencies: - memoizerific "^1.11.3" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -temp@^0.8.4: - version "0.8.4" - resolved "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz" - integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg== - dependencies: - rimraf "~2.6.2" - -tempy@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz" - integrity sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== - dependencies: - del "^6.0.0" - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -through2@^2.0.3: - version "2.0.5" - resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -tiny-case@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz" - integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== - -tiny-invariant@^1.3.1, tiny-invariant@^1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz" - integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== - -tinybench@^2.5.1: - version "2.7.0" - resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.7.0.tgz" - integrity sha512-Qgayeb106x2o4hNzNjsZEfFziw8IbKqtbXBjVh7VIZfBxfD5M4gWtpyx5+YTae2gJ6Y6Dz/KLepiv16RFeQWNA== - -tinypool@^0.8.3: - version "0.8.4" - resolved "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz" - integrity sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ== - -tinyspy@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz" - integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tocbot@^4.20.1: - version "4.25.0" - resolved "https://registry.npmjs.org/tocbot/-/tocbot-4.25.0.tgz" - integrity sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA== - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -toposort@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz" - integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== - -totalist@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz" - integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== - -tough-cookie@^4.1.3: - version "4.1.3" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz" - integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g== - dependencies: - punycode "^2.3.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -ts-api-utils@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== - -ts-dedent@^2.0.0, ts-dedent@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz" - integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.13.0, tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0: - version "2.6.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tween-functions@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/tween-functions/-/tween-functions-1.2.0.tgz" - integrity sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.0, type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-fest@^2.19.0, type-fest@~2.19: - version "2.19.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-typed-array "^1.1.13" - -typed-array-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-byte-offset@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-length@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz" - integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typescript@^5.0.2: - version "5.4.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== - -ufo@^1.3.2, ufo@^1.4.0: - version "1.5.3" - resolved "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz" - integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== - -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -undici@^5.21.2: - version "5.28.4" - resolved "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz" - integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== - dependencies: - "@fastify/busboy" "^2.0.0" - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -unist-util-is@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz" - integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== - -unist-util-visit-parents@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz" - integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - -unist-util-visit@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz" - integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - unist-util-visit-parents "^3.0.0" - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unload@2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz" - integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA== - dependencies: - "@babel/runtime" "^7.6.2" - detect-node "^2.0.4" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -unplugin@^1.3.1: - version "1.10.1" - resolved "https://registry.npmjs.org/unplugin/-/unplugin-1.10.1.tgz" - integrity sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg== - dependencies: - acorn "^8.11.3" - chokidar "^3.6.0" - webpack-sources "^3.2.3" - webpack-virtual-modules "^0.6.1" - -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -use-callback-ref@^1.3.0: - version "1.3.2" - resolved "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz" - integrity sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA== - dependencies: - tslib "^2.0.0" - -use-resize-observer@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz" - integrity sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow== - dependencies: - "@juggle/resize-observer" "^3.3.1" - -use-sidecar@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz" - integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== - dependencies: - detect-node-es "^1.1.0" - tslib "^2.0.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@^0.12.4, util@^0.12.5: - version "0.12.5" - resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^9.0.0: - version "9.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -v8-to-istanbul@^9.0.1: - version "9.2.0" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz" - integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vite-node@1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/vite-node/-/vite-node-1.5.0.tgz" - integrity sha512-tV8h6gMj6vPzVCa7l+VGq9lwoJjW8Y79vst8QZZGiuRAfijU+EEWuc0kFpmndQrWhMMhet1jdSF+40KSZUqIIw== - dependencies: - cac "^6.7.14" - debug "^4.3.4" - pathe "^1.1.1" - picocolors "^1.0.0" - vite "^5.0.0" - -vite-plugin-istanbul@^3.0.1: - version "3.0.4" - resolved "https://registry.npmjs.org/vite-plugin-istanbul/-/vite-plugin-istanbul-3.0.4.tgz" - integrity sha512-DJy3cq6yOFbsM3gLQf/3zeuaJNJsfBv5dLFdZdv8sUV30xLtZI+66QeYfHUyP/5vBUYyLA+xNUCSG5uHY6w+5g== - dependencies: - "@istanbuljs/load-nyc-config" "^1.1.0" - istanbul-lib-instrument "^5.1.0" - picocolors "^1.0.0" - test-exclude "^6.0.0" - -vite@^4.3.9: - version "4.5.3" - resolved "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz" - integrity sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg== - dependencies: - esbuild "^0.18.10" - postcss "^8.4.27" - rollup "^3.27.1" - optionalDependencies: - fsevents "~2.3.2" - -vite@^5.0.0: - version "5.2.9" - resolved "https://registry.npmjs.org/vite/-/vite-5.2.9.tgz" - integrity sha512-uOQWfuZBlc6Y3W/DTuQ1Sr+oIXWvqljLvS881SVmAj00d5RdgShLcuXWxseWPd4HXwiYBFW/vXHfKFeqj9uQnw== - dependencies: - esbuild "^0.20.1" - postcss "^8.4.38" - rollup "^4.13.0" - optionalDependencies: - fsevents "~2.3.3" - -vitest@^1.1.0: - version "1.5.0" - resolved "https://registry.npmjs.org/vitest/-/vitest-1.5.0.tgz" - integrity sha512-d8UKgR0m2kjdxDWX6911uwxout6GHS0XaGH1cksSIVVG8kRlE7G7aBw7myKQCvDI5dT4j7ZMa+l706BIORMDLw== - dependencies: - "@vitest/expect" "1.5.0" - "@vitest/runner" "1.5.0" - "@vitest/snapshot" "1.5.0" - "@vitest/spy" "1.5.0" - "@vitest/utils" "1.5.0" - acorn-walk "^8.3.2" - chai "^4.3.10" - debug "^4.3.4" - execa "^8.0.1" - local-pkg "^0.5.0" - magic-string "^0.30.5" - pathe "^1.1.1" - picocolors "^1.0.0" - std-env "^3.5.0" - strip-literal "^2.0.0" - tinybench "^2.5.1" - tinypool "^0.8.3" - vite "^5.0.0" - vite-node "1.5.0" - why-is-node-running "^2.2.2" - -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -w3c-xmlserializer@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz" - integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== - dependencies: - xml-name-validator "^5.0.0" - -wait-on@^7.0.0: - version "7.2.0" - resolved "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz" - integrity sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ== - dependencies: - axios "^1.6.1" - joi "^17.11.0" - lodash "^4.17.21" - minimist "^1.2.8" - rxjs "^7.8.1" - -wait-port@^0.2.9: - version "0.2.14" - resolved "https://registry.npmjs.org/wait-port/-/wait-port-0.2.14.tgz" - integrity sha512-kIzjWcr6ykl7WFbZd0TMae8xovwqcqbx6FM9l+7agOgUByhzdjfzZBPK2CPufldTOMxbUivss//Sh9MFawmPRQ== - dependencies: - chalk "^2.4.2" - commander "^3.0.2" - debug "^4.1.1" - -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -watchpack@^2.2.0: - version "2.4.1" - resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz" - integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -web-streams-polyfill@^3.0.3: - version "3.3.3" - resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz" - integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack-virtual-modules@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz" - integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== - -whatwg-encoding@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz" - integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== - dependencies: - iconv-lite "0.6.3" - -whatwg-mimetype@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz" - integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== - -whatwg-url@^14.0.0: - version "14.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz" - integrity sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw== - dependencies: - tr46 "^5.0.0" - webidl-conversions "^7.0.0" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== - dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" - is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" - is-generator-function "^1.0.10" - is-regex "^1.1.4" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -which-collection@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz" - integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== - dependencies: - is-map "^2.0.3" - is-set "^2.0.3" - is-weakmap "^2.0.2" - is-weakset "^2.0.3" - -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2, which-typed-array@^1.1.9: - version "1.1.15" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.2" - -which@^1.2.12: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -why-is-node-running@^2.2.2: - version "2.2.2" - resolved "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz" - integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== - dependencies: - siginfo "^2.0.0" - stackback "0.0.2" - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^2.3.0: - version "2.4.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -ws@^6.1.0: - version "6.2.2" - resolved "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" - -ws@^8.16.0, ws@^8.2.3: - version "8.16.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz" - integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== - -xml-name-validator@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz" - integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== - -xml@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz" - integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yaml@^2.2.2: - version "2.4.1" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz" - integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^15.0.2: - version "15.4.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^17.3.1: - version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - 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" - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== - -yup@^1.3.2: - version "1.4.0" - resolved "https://registry.npmjs.org/yup/-/yup-1.4.0.tgz" - integrity sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg== - dependencies: - property-expr "^2.0.5" - tiny-case "^1.0.3" - toposort "^2.0.2" - type-fest "^2.19.0" diff --git a/scripts/govtool/frontend.mk b/scripts/govtool/frontend.mk index fb74d798b..97911190d 100644 --- a/scripts/govtool/frontend.mk +++ b/scripts/govtool/frontend.mk @@ -20,6 +20,7 @@ build-frontend: docker-login --build-arg VITE_NETWORK_FLAG="$$NETWORK_FLAG" \ --build-arg VITE_SENTRY_DSN="$${SENTRY_DSN}" \ --build-arg VITE_USERSNAP_SPACE_API_KEY="$${USERSNAP_SPACE_API_KEY}" \ + --build-arg NPMRC_TOKEN="$${NPMRC_TOKEN}" \ $(root_dir)/govtool/frontend .PHONY: push-frontend From 949739c7c4a04e81e476cd3a477736a997587cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sza=C5=82owski?= Date: Wed, 5 Jun 2024 09:27:45 +0200 Subject: [PATCH 035/162] chore: change working directory chore: setup node auth token for the code check actions chore: change path for the executing the github action chore: update csp directive to allow pdf backend requests --- .github/workflows/code_check_frontend.yml | 64 ++++++++----------- .../config/templates/docker-compose.yml.tpl | 2 +- 2 files changed, 27 insertions(+), 39 deletions(-) diff --git a/.github/workflows/code_check_frontend.yml b/.github/workflows/code_check_frontend.yml index d9ac0bc1b..b0f3ba0fa 100644 --- a/.github/workflows/code_check_frontend.yml +++ b/.github/workflows/code_check_frontend.yml @@ -4,15 +4,14 @@ on: push: paths: - govtool/frontend/** - - .github/workflows/test_frontend.yml - -defaults: - run: - working-directory: govtool/frontend + - .github/workflows/code_check_frontend.yml jobs: - test: + setup_nodejs: runs-on: ubuntu-latest + defaults: + run: + working-directory: ./govtool/frontend steps: - name: Checkout code uses: actions/checkout@v4 @@ -26,55 +25,44 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version-file: "govtool/frontend/.nvmrc" + registry-url: "https://registry.npmjs.org/" + node-version-file: "./govtool/frontend/.nvmrc" + scope: "@intersect.mbo" + - run: npm ci + env: + NODE_AUTH_TOKEN: ${{ secrets.NPMRC_TOKEN }} + test: + needs: setup_nodejs + runs-on: ubuntu-latest + defaults: + run: + working-directory: frontend + steps: - name: 🧪 Test env: NODE_OPTIONS: "--max_old_space_size=4096" run: | - npm install npm run test lint: + needs: setup_nodejs runs-on: ubuntu-latest + defaults: + run: + working-directory: frontend steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Cache dependencies - uses: actions/cache@v2 - with: - path: govtool/frontend/node_modules - key: ${{ runner.os }}-node-${{ hashFiles('govtool/frontend/package-lock.json') }} - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version-file: "govtool/frontend/.nvmrc" - - name: 👕 Lint run: | - npm install npm run lint type_check: + needs: setup_nodejs runs-on: ubuntu-latest + defaults: + run: + working-directory: frontend steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Cache dependencies - uses: actions/cache@v2 - with: - path: govtool/frontend/node_modules - key: ${{ runner.os }}-node-${{ hashFiles('govtool/frontend/package-lock.json') }} - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version-file: "govtool/frontend/.nvmrc" - - name: 🔍 Type Check run: | - npm install npm run tsc diff --git a/scripts/govtool/config/templates/docker-compose.yml.tpl b/scripts/govtool/config/templates/docker-compose.yml.tpl index 975895d30..0a8a6bb78 100644 --- a/scripts/govtool/config/templates/docker-compose.yml.tpl +++ b/scripts/govtool/config/templates/docker-compose.yml.tpl @@ -273,7 +273,7 @@ services: logging: *logging labels: - "traefik.enable=true" - - "traefik.http.middlewares.frontend-csp.headers.contentSecurityPolicy=default-src 'self'; img-src *.usersnap.com https://www.googletagmanager.com 'self' data:; script-src *.usersnap.com 'self' 'unsafe-inline' https://www.googletagmanager.com https://browser.sentry-cdn.com; style-src *.usersnap.com *.googleapis.com 'self' 'unsafe-inline' https://fonts.googleapis.com; connect-src *.usersnap.com https://s3.eu-central-1.amazonaws.com/upload.usersnap.com 'self' o4506155985141760.ingest.sentry.io *.google-analytics.com; font-src *.usersnap.com *.gstatic.com 'self' 'unsafe-inline' https://fonts.gstatic.com; worker-src blob:" + - "traefik.http.middlewares.frontend-csp.headers.contentSecurityPolicy=default-src 'self'; img-src *.usersnap.com https://www.googletagmanager.com 'self' data:; script-src *.usersnap.com 'self' 'unsafe-inline' https://www.googletagmanager.com https://browser.sentry-cdn.com; style-src *.usersnap.com *.googleapis.com 'self' 'unsafe-inline' https://fonts.googleapis.com; connect-src *.usersnap.com https://s3.eu-central-1.amazonaws.com/upload.usersnap.com 'self' o4506155985141760.ingest.sentry.io *.google-analytics.com *.api.pdf.gov.tools; font-src *.usersnap.com *.gstatic.com 'self' 'unsafe-inline' https://fonts.gstatic.com; worker-src blob:" - "traefik.http.routers.to-frontend.rule=Host(``)" - "traefik.http.routers.to-frontend.entrypoints=websecure" - "traefik.http.routers.to-frontend.tls.certresolver=myresolver" From 88ae8983ad1402cd5c1b0361886df49e26e1d72c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sza=C5=82owski?= Date: Wed, 5 Jun 2024 09:52:49 +0200 Subject: [PATCH 036/162] chore: add working directory as artifact --- .github/workflows/code_check_frontend.yml | 33 ++++++++++++++++------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/.github/workflows/code_check_frontend.yml b/.github/workflows/code_check_frontend.yml index b0f3ba0fa..e6f33046d 100644 --- a/.github/workflows/code_check_frontend.yml +++ b/.github/workflows/code_check_frontend.yml @@ -32,13 +32,22 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.NPMRC_TOKEN }} + - name: Upload working directory as artifact + uses: actions/upload-artifact@v4 + with: + name: frontend + path: . + test: needs: setup_nodejs runs-on: ubuntu-latest - defaults: - run: - working-directory: frontend steps: + - name: Download working directory artifact + uses: actions/download-artifact@v4 + with: + name: frontend + path: . + - name: 🧪 Test env: NODE_OPTIONS: "--max_old_space_size=4096" @@ -48,10 +57,13 @@ jobs: lint: needs: setup_nodejs runs-on: ubuntu-latest - defaults: - run: - working-directory: frontend steps: + - name: Download working directory artifact + uses: actions/download-artifact@v4 + with: + name: frontend + path: . + - name: 👕 Lint run: | npm run lint @@ -59,10 +71,13 @@ jobs: type_check: needs: setup_nodejs runs-on: ubuntu-latest - defaults: - run: - working-directory: frontend steps: + - name: Download working directory artifact + uses: actions/download-artifact@v4 + with: + name: frontend + path: . + - name: 🔍 Type Check run: | npm run tsc From 6c1e85b5678fbd08a7d35f3399accc33a78518a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sza=C5=82owski?= Date: Wed, 5 Jun 2024 10:31:33 +0200 Subject: [PATCH 037/162] chore: add npmrc to every job --- .github/workflows/code_check_frontend.yml | 69 +++++++++++++---------- 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/.github/workflows/code_check_frontend.yml b/.github/workflows/code_check_frontend.yml index e6f33046d..27da36810 100644 --- a/.github/workflows/code_check_frontend.yml +++ b/.github/workflows/code_check_frontend.yml @@ -6,12 +6,13 @@ on: - govtool/frontend/** - .github/workflows/code_check_frontend.yml +defaults: + run: + working-directory: govtool/frontend + jobs: - setup_nodejs: + test: runs-on: ubuntu-latest - defaults: - run: - working-directory: ./govtool/frontend steps: - name: Checkout code uses: actions/checkout@v4 @@ -32,22 +33,6 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.NPMRC_TOKEN }} - - name: Upload working directory as artifact - uses: actions/upload-artifact@v4 - with: - name: frontend - path: . - - test: - needs: setup_nodejs - runs-on: ubuntu-latest - steps: - - name: Download working directory artifact - uses: actions/download-artifact@v4 - with: - name: frontend - path: . - - name: 🧪 Test env: NODE_OPTIONS: "--max_old_space_size=4096" @@ -55,28 +40,52 @@ jobs: npm run test lint: - needs: setup_nodejs runs-on: ubuntu-latest steps: - - name: Download working directory artifact - uses: actions/download-artifact@v4 + - name: Checkout code + uses: actions/checkout@v4 + + - name: Cache dependencies + uses: actions/cache@v2 with: - name: frontend - path: . + path: govtool/frontend/node_modules + key: ${{ runner.os }}-node-${{ hashFiles('govtool/frontend/package-lock.json') }} + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + registry-url: "https://registry.npmjs.org/" + node-version-file: "./govtool/frontend/.nvmrc" + scope: "@intersect.mbo" + - run: npm ci + env: + NODE_AUTH_TOKEN: ${{ secrets.NPMRC_TOKEN }} - name: 👕 Lint run: | npm run lint type_check: - needs: setup_nodejs runs-on: ubuntu-latest steps: - - name: Download working directory artifact - uses: actions/download-artifact@v4 + - name: Checkout code + uses: actions/checkout@v4 + + - name: Cache dependencies + uses: actions/cache@v2 with: - name: frontend - path: . + path: govtool/frontend/node_modules + key: ${{ runner.os }}-node-${{ hashFiles('govtool/frontend/package-lock.json') }} + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + registry-url: "https://registry.npmjs.org/" + node-version-file: "./govtool/frontend/.nvmrc" + scope: "@intersect.mbo" + - run: npm ci + env: + NODE_AUTH_TOKEN: ${{ secrets.NPMRC_TOKEN }} - name: 🔍 Type Check run: | From 1a9c455248b87b77225b3f870b6a85488cd9715d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Wed, 5 Jun 2024 10:42:50 +0200 Subject: [PATCH 038/162] fix references body data --- govtool/frontend/src/utils/generateMetadataBody.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/govtool/frontend/src/utils/generateMetadataBody.ts b/govtool/frontend/src/utils/generateMetadataBody.ts index 264034065..d99f661ee 100644 --- a/govtool/frontend/src/utils/generateMetadataBody.ts +++ b/govtool/frontend/src/utils/generateMetadataBody.ts @@ -29,8 +29,8 @@ export const generateMetadataBody = ({ .filter((link) => link.link) .map((link) => ({ "@type": "Other", - [`${standardReference}reference-label`]: "Label", - [`${standardReference}reference-uri`]: link.link, + [`${CIP_100}reference-label`]: "Label", + [`${CIP_100}reference-uri`]: link.link, })) : undefined; From 24d8594533b9f50d9d2ee9f6626b16197cd0b78e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sza=C5=82owski?= Date: Wed, 5 Jun 2024 10:46:57 +0200 Subject: [PATCH 039/162] chore: increase max old space size for test job --- .github/workflows/code_check_frontend.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code_check_frontend.yml b/.github/workflows/code_check_frontend.yml index 27da36810..30f26b9e4 100644 --- a/.github/workflows/code_check_frontend.yml +++ b/.github/workflows/code_check_frontend.yml @@ -35,7 +35,7 @@ jobs: - name: 🧪 Test env: - NODE_OPTIONS: "--max_old_space_size=4096" + NODE_OPTIONS: "--max_old_space_size=8192" run: | npm run test From 5c2040372bd710867f23bbca05ad297afecaf5cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Wed, 5 Jun 2024 10:55:30 +0200 Subject: [PATCH 040/162] change test for generate metadata --- .../src/utils/tests/generateMetadataBody.test.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/govtool/frontend/src/utils/tests/generateMetadataBody.test.ts b/govtool/frontend/src/utils/tests/generateMetadataBody.test.ts index a8cb40131..10627c5cb 100644 --- a/govtool/frontend/src/utils/tests/generateMetadataBody.test.ts +++ b/govtool/frontend/src/utils/tests/generateMetadataBody.test.ts @@ -44,6 +44,8 @@ describe("generateMetadataBody", () => { standardReference, }); + console.log(result); + expect(result).toEqual({ "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0108/README.md#name": "John Doe", @@ -52,16 +54,16 @@ describe("generateMetadataBody", () => { [ { "@type": "Other", - "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0108/README.md#reference-label": + "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0100/README.md#reference-label": "Label", - "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0108/README.md#reference-uri": + "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0100/README.md#reference-uri": "https://example.com/link1", }, { "@type": "Other", - "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0108/README.md#reference-label": + "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0100/README.md#reference-label": "Label", - "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0108/README.md#reference-uri": + "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0100/README.md#reference-uri": "https://example.com/link2", }, ], From d0bbb84293651409aeb15741cd1532b39a86c494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Wed, 5 Jun 2024 11:10:19 +0200 Subject: [PATCH 041/162] delete console log --- govtool/frontend/src/utils/tests/generateMetadataBody.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/govtool/frontend/src/utils/tests/generateMetadataBody.test.ts b/govtool/frontend/src/utils/tests/generateMetadataBody.test.ts index 10627c5cb..da1fdade9 100644 --- a/govtool/frontend/src/utils/tests/generateMetadataBody.test.ts +++ b/govtool/frontend/src/utils/tests/generateMetadataBody.test.ts @@ -44,8 +44,6 @@ describe("generateMetadataBody", () => { standardReference, }); - console.log(result); - expect(result).toEqual({ "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0108/README.md#name": "John Doe", From ff54750ac9eb6060fa16d3f51c7a83fb33df91d7 Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Wed, 22 May 2024 21:13:13 +0545 Subject: [PATCH 042/162] test: Delegated ADA display to DRep --- ...delegationFunctionality.delegation.spec.ts | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts b/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts index 1a3afdbbd..11c059a2f 100644 --- a/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts +++ b/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts @@ -292,3 +292,35 @@ test.describe("No confidence delegation", () => { ).toBeVisible(); }); }); + +test.describe("Delegated ADA visibility", () => { + test.use({ + storageState: ".auth/adaHolder05.json", + wallet: adaHolder05Wallet, + }); + + test("2W. Should show my delegated ADA to the DRep", async ({ + page, + }, testInfo) => { + test.setTimeout(testInfo.timeout + environments.txTimeOut); + + const dRepDirectoryPage = new DRepDirectoryPage(page); + await dRepDirectoryPage.goto(); + + await dRepDirectoryPage.delegateToDRep(dRep01Wallet.dRepId); + + const adaHolderVotingPower = await kuberService.getBalance( + adaHolder05Wallet.address + ); + await expect( + page.getByText(`You have delegated ₳ ${adaHolderVotingPower}`) + ).toBeVisible(); + + await page.goto("/"); + await expect( + page.getByText( + `Your Voting Power of ₳${adaHolderVotingPower} is Delegated to` + ) + ).toBeVisible(); + }); +}); From e9b71e63494d19dc2a082b6db2b90b7ece3b9e42 Mon Sep 17 00:00:00 2001 From: niraj Date: Wed, 5 Jun 2024 13:37:52 +0545 Subject: [PATCH 043/162] test: Add test 4L and 4M Add governance action proposals search and view all by categorized test --- .../lib/_mock/infoTypeProposal.json | 372 ++++++++++++++++++ .../lib/pages/governanceActionsPage.ts | 3 +- .../proposalVisibility.loggedin.spec.ts | 40 ++ 3 files changed, 414 insertions(+), 1 deletion(-) create mode 100644 tests/govtool-frontend/playwright/lib/_mock/infoTypeProposal.json diff --git a/tests/govtool-frontend/playwright/lib/_mock/infoTypeProposal.json b/tests/govtool-frontend/playwright/lib/_mock/infoTypeProposal.json new file mode 100644 index 000000000..305369093 --- /dev/null +++ b/tests/govtool-frontend/playwright/lib/_mock/infoTypeProposal.json @@ -0,0 +1,372 @@ +{ + "page": 0, + "pageSize": 7, + "total": 20, + "elements": [ + { + "id": "81", + "txHash": "7a11d960c26700c8e480ab14bacb739180bb59c7be65c080e73c1597cec3ccdd", + "index": 0, + "type": "InfoAction", + "details": {}, + "expiryDate": "2024-06-06T06:59:21.477528Z", + "expiryEpochNo": 357, + "createdDate": "2024-05-31T14:22:33Z", + "createdEpochNo": 351, + "url": "https://bafkreiezyn2v5v5lhnvl6bckelvo7j5naowysq7jiiurqloqzasrjpio7q.ipfs.w3s.link", + "metadataHash": "6805152f22c80a395a19a2dd8e5f4e9b84287e6a621c184ccccb43c53c61f293", + "title": "hi", + "about": "hi", + "motivation": "hi", + "rationale": "hi", + "metadata": { + "@context": { + "@language": "en-us", + "CIP100": "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0100/README.md#", + "CIP108": "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0108/README.md#", + "authors": { + "@container": "@set", + "@context": { + "name": "http://xmlns.com/foaf/0.1/name", + "witness": { + "@context": { + "publicKey": "CIP100:publicKey", + "signature": "CIP100:signature", + "witnessAlgorithm": "CIP100:witnessAlgorithm" + }, + "@id": "CIP100:witness" + } + }, + "@id": "CIP100:authors" + }, + "body": { + "@context": { + "abstract": "CIP108:abstract", + "motivation": "CIP108:motivation", + "rationale": "CIP108:rationale", + "references": { + "@container": "@set", + "@context": { + "GovernanceMetadata": "CIP100:GovernanceMetadataReference", + "Other": "CIP100:OtherReference", + "label": "CIP100:reference-label", + "referenceHash": { + "@context": { + "hashAlgorithm": "CIP100:hashAlgorithm", + "hashDigest": "CIP108:hashDigest" + }, + "@id": "CIP108:referenceHash" + }, + "uri": "CIP100:reference-uri" + }, + "@id": "CIP108:references" + }, + "title": "CIP108:title" + }, + "@id": "CIP108:body" + }, + "hashAlgorithm": "CIP100:hashAlgorithm" + }, + "authors": [], + "body": { + "abstract": { + "@value": "hi" + }, + "motivation": { + "@value": "hi" + }, + "rationale": { + "@value": "hi" + }, + "references": [], + "title": { + "@value": "hi" + } + }, + "hashAlgorithm": { + "@value": "blake2b-256" + } + }, + "references": [], + "yesVotes": 0, + "noVotes": 50523999411, + "abstainVotes": 3434294559599, + "metadataStatus": { + "status": null, + "valid": false, + "raw": { + "valid": true + } + } + }, + { + "id": "73", + "txHash": "e79395f1b5e23e657486c6b3ce2fc528ffc090eb21ef6c6ab740c80a9226e6c8", + "index": 0, + "type": "InfoAction", + "details": {}, + "expiryDate": "2024-06-06T06:59:21.477528Z", + "expiryEpochNo": 357, + "createdDate": "2024-05-31T05:21:20Z", + "createdEpochNo": 351, + "url": "https://bit.ly/3zCH2HL", + "metadataHash": "1111111111111111111111111111111111111111111111111111111111111111", + "title": null, + "about": null, + "motivation": null, + "rationale": null, + "metadata": null, + "references": null, + "yesVotes": 0, + "noVotes": 50523999411, + "abstainVotes": 3434294559599, + "metadataStatus": { + "status": null, + "valid": false, + "raw": { + "valid": true + } + } + }, + { + "id": "84", + "txHash": "3c9d9224bf22014605a7f680708d2f44b549ca3416cb83cefc2e16e4696d8643", + "index": 0, + "type": "InfoAction", + "details": {}, + "expiryDate": "2024-06-09T06:50:31.910112Z", + "expiryEpochNo": 360, + "createdDate": "2024-06-03T22:39:50Z", + "createdEpochNo": 354, + "url": "https://raw.githubusercontent.com/mpawel79/testrepo/master/Info.jsonld", + "metadataHash": "eebfff0e2213ff0c5331e6d9d99d47a5a825dce7053671b6ed4daae4b4e0df5e", + "title": null, + "about": null, + "motivation": null, + "rationale": null, + "metadata": null, + "references": null, + "yesVotes": 0, + "noVotes": 50523999411, + "abstainVotes": 3434294559599, + "metadataStatus": { + "status": null, + "valid": false, + "raw": { + "metadata": { + "abstract": "test", + "motivation": "test", + "rationale": "test", + "references": ["https://test.com"], + "title": "test" + }, + "valid": true + } + } + }, + { + "id": "82", + "txHash": "8c92cfc2bd4e43b4c323f0ae1899b17787143eeb2b4f410b695fabfd9f5589fd", + "index": 0, + "type": "InfoAction", + "details": {}, + "expiryDate": "2024-06-06T06:59:21.477528Z", + "expiryEpochNo": 357, + "createdDate": "2024-05-31T14:24:23Z", + "createdEpochNo": 351, + "url": "https://raw.githubusercontent.com/mpawel79/testrepo/master/Info.jsonld", + "metadataHash": "eebfff0e2213ff0c5331e6d9d99d47a5a825dce7053671b6ed4daae4b4e0df5e", + "title": null, + "about": null, + "motivation": null, + "rationale": null, + "metadata": null, + "references": null, + "yesVotes": 0, + "noVotes": 50523999411, + "abstainVotes": 3434294559599, + "metadataStatus": { + "status": null, + "valid": false, + "raw": { + "metadata": { + "abstract": "test", + "motivation": "test", + "rationale": "test", + "references": ["https://test.com"], + "title": "test" + }, + "valid": true + } + } + }, + { + "id": "86", + "txHash": "79f95f77a980458a5532e70f1c74556557a2d8a4bd6172b316f19e9c4ec9b04f", + "index": 0, + "type": "InfoAction", + "details": {}, + "expiryDate": "2024-06-10T06:47:35.38764Z", + "expiryEpochNo": 361, + "createdDate": "2024-06-04T10:25:18Z", + "createdEpochNo": 355, + "url": "https://metadata.cardanoapi.io/data/Info", + "metadataHash": "44c9719997b1bb5d15ef0e3e3f235d2b088dcbed531780fee9aa4ab79d6767e9", + "title": " ", + "about": " ", + "motivation": " ", + "rationale": " ", + "metadata": { + "@context": { + "@language": "en-us", + "CIP100": "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0100/README.md#", + "CIP108": "https://github.com/cardano-foundation/CIPs/blob/master/CIP-0108/README.md#", + "authors": { + "@container": "@set", + "@context": { + "name": "http://xmlns.com/foaf/0.1/name", + "witness": { + "@context": { + "publicKey": "CIP100:publicKey", + "signature": "CIP100:signature", + "witnessAlgorithm": "CIP100:witnessAlgorithm" + }, + "@id": "CIP100:witness" + } + }, + "@id": "CIP100:authors" + }, + "body": { + "@context": { + "abstract": "CIP108:abstract", + "motivation": "CIP108:motivation", + "rationale": "CIP108:rationale", + "references": { + "@container": "@set", + "@context": { + "GovernanceMetadata": "CIP100:GovernanceMetadataReference", + "Other": "CIP100:OtherReference", + "label": "CIP100:reference-label", + "referenceHash": { + "@context": { + "hashAlgorithm": "CIP100:hashAlgorithm", + "hashDigest": "CIP108:hashDigest" + }, + "@id": "CIP108:referenceHash" + }, + "uri": "CIP100:reference-uri" + }, + "@id": "CIP108:references" + }, + "title": "CIP108:title" + }, + "@id": "CIP108:body" + }, + "hashAlgorithm": "CIP100:hashAlgorithm" + }, + "authors": [], + "body": { + "abstract": { + "@value": " " + }, + "motivation": { + "@value": " " + }, + "rationale": { + "@value": " " + }, + "references": [], + "title": { + "@value": " " + } + }, + "hashAlgorithm": { + "@value": "blake2b-256" + } + }, + "references": [], + "yesVotes": 0, + "noVotes": 50523999411, + "abstainVotes": 3434294559599, + "metadataStatus": { + "status": null, + "valid": false, + "raw": { + "metadata": { + "abstract": " ", + "motivation": " ", + "rationale": " ", + "references": [], + "title": " " + }, + "valid": true + } + } + }, + { + "id": "83", + "txHash": "9d28e20a0b406d81b2b50afc87c4cec0a46cd0acb6d820a8e79ff61673a3f4ff", + "index": 0, + "type": "InfoAction", + "details": {}, + "expiryDate": "2024-06-09T06:50:31.910112Z", + "expiryEpochNo": 360, + "createdDate": "2024-06-03T14:03:59Z", + "createdEpochNo": 354, + "url": "https://raw.githubusercontent.com/mpawel79/testrepo/master/InfoJune03.jsonld", + "metadataHash": "eebfff0e2213ff0c5331e6d9d99d47a5a825dce7053671b6ed4daae4b4e0df5e", + "title": null, + "about": null, + "motivation": null, + "rationale": null, + "metadata": null, + "references": null, + "yesVotes": 0, + "noVotes": 50523999411, + "abstainVotes": 3434294559599, + "metadataStatus": { + "status": null, + "valid": false, + "raw": { + "metadata": { + "abstract": "test", + "motivation": "test", + "rationale": "test", + "references": ["https://test.com"], + "title": "test" + }, + "valid": true + } + } + }, + { + "id": "77", + "txHash": "b61762d4c4f923a08a9c180f5783760bb98e36da6c314f97632ed64bda9545c2", + "index": 0, + "type": "InfoAction", + "details": {}, + "expiryDate": "2024-06-06T06:59:21.477528Z", + "expiryEpochNo": 357, + "createdDate": "2024-05-31T06:40:11Z", + "createdEpochNo": 351, + "url": "https://bit.ly/3zCH2HL", + "metadataHash": "1111111111111111111111111111111111111111111111111111111111111111", + "title": null, + "about": null, + "motivation": null, + "rationale": null, + "metadata": null, + "references": null, + "yesVotes": 0, + "noVotes": 50523999411, + "abstainVotes": 3434294559599, + "metadataStatus": { + "status": null, + "valid": false, + "raw": { + "valid": true + } + } + } + ] +} diff --git a/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts b/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts index 98680483f..a815e4b80 100644 --- a/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts +++ b/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts @@ -65,7 +65,8 @@ export default class GovernanceActionsPage { } async getAllProposals() { - return this.page.locator('[data-test-id$="-card"]').all(); + await this.page.waitForTimeout(2_000); + return this.page.locator('[data-testid$="-card"]').all(); } async validateFilters(filters: string[]) { diff --git a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts index 3ab84ee79..ae213bf33 100644 --- a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts @@ -7,6 +7,8 @@ import removeAllSpaces from "@helpers/removeAllSpaces"; import GovernanceActionsPage from "@pages/governanceActionsPage"; import { expect } from "@playwright/test"; +const infoTypeProposal = require("../../lib/_mock/infoTypeProposal.json"); + const filterOptionNames = [ "Protocol Parameter Change", "New Committee", @@ -126,6 +128,44 @@ test("4C.3: Should filter and sort Governance Action Type on governance actions await govActionsPage.validateFilters([filterOptionNames[0]]); }); +test("4L: Should search governance actions", async ({ page }) => { + const governanceActionTitle = "TreasuryTitle"; + const governanceActionPage = new GovernanceActionsPage(page); + + await governanceActionPage.goto(); + + await governanceActionPage.searchInput.fill(governanceActionTitle); + + const proposalCards = await governanceActionPage.getAllProposals(); + + for (const proposalCard of proposalCards) { + expect( + (await proposalCard.textContent()).includes(`${governanceActionTitle}`) + ).toBeTruthy(); + } +}); + +test("4M: Should show view-all categorized governance actions", async ({ + page, +}) => { + await page.route("**/proposal/list?**", async (route) => + route.fulfill({ + body: JSON.stringify(infoTypeProposal), + }) + ); + + const governanceActionPage = new GovernanceActionsPage(page); + await governanceActionPage.goto(); + + await page.getByRole("button", { name: "Show All" }).click(); + + const proposalCards = await governanceActionPage.getAllProposals(); + + for (const proposalCard of proposalCards) { + await expect(proposalCard.getByTestId("InfoAction-type")).toBeVisible(); + } +}); + test("4H. Should verify none of the displayed governance actions have expired", async ({ page, }) => { From 0639c5f227cbea83fb6c641f57868930213c7310 Mon Sep 17 00:00:00 2001 From: niraj Date: Mon, 3 Jun 2024 16:50:12 +0545 Subject: [PATCH 044/162] test: Add provide context validation test 5D --- .../proposalFunctionality.dRep.spec.ts | 55 +++++++++++-------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/tests/govtool-frontend/playwright/tests/5-proposal-functionality/proposalFunctionality.dRep.spec.ts b/tests/govtool-frontend/playwright/tests/5-proposal-functionality/proposalFunctionality.dRep.spec.ts index 48628268f..411a5e8a4 100644 --- a/tests/govtool-frontend/playwright/tests/5-proposal-functionality/proposalFunctionality.dRep.spec.ts +++ b/tests/govtool-frontend/playwright/tests/5-proposal-functionality/proposalFunctionality.dRep.spec.ts @@ -1,6 +1,7 @@ import environments from "@constants/environments"; import { dRep01Wallet } from "@constants/staticWallets"; import { createTempDRepAuth } from "@datafactory/createAuth"; +import { faker } from "@faker-js/faker"; import { test } from "@fixtures/walletExtension"; import { setAllureEpic } from "@helpers/allure"; import { createNewPageWithWallet } from "@helpers/page"; @@ -58,30 +59,36 @@ test.describe("Proposal checks", () => { await expect(govActionDetailsPage.voteBtn).toBeEnabled(); }); - // Skipped: No url/hash input to validate - test("5D. Should validate proposal voting", async () => { - test.skip(); - // const invalidURLs = ["testdotcom", "https://testdotcom", "https://test.c"]; - // invalidURLs.forEach(async (url) => { - // govActionDetailsPage.urlInput.fill(url); - // await expect(govActionDetailsPage.urlInputError).toBeVisible(); - // }); - // const validURLs = ["https://test.com"]; - // validURLs.forEach(async (url) => { - // govActionDetailsPage.urlInput.fill(url); - // await expect(govActionDetailsPage.urlInputError).not.toBeVisible(); - // }); - // const invalidHashes = [ - // randomBytes(20).toString("hex"), - // randomBytes(32).toString(), - // ]; - // invalidHashes.forEach(async (hash) => { - // govActionDetailsPage.hashInput.fill(hash); - // await expect(govActionDetailsPage.hashInputError).toBeVisible(); - // }); - // const validHash = randomBytes(32).toString("hex"); - // govActionDetailsPage.hashInput.fill(validHash); - // await expect(govActionDetailsPage.hashInputError).not.toBeVisible(); + test.describe("Validate provide context about vote", () => { + test("5D_1. Should accept valid data in provide context", async () => { + await govActionDetailsPage.contextBtn.click(); + + await expect(govActionDetailsPage.contextInput).toBeVisible(); + + for (let i = 0; i < 100; i++) { + const randomContext = faker.lorem.paragraph(2); + await govActionDetailsPage.contextInput.fill(randomContext); + expect(await govActionDetailsPage.contextInput.textContent()).toEqual( + randomContext + ); + + await expect(govActionDetailsPage.confirmModalBtn).toBeVisible(); + } + }); + + test("5D_2. Should reject invalid data in provide context", async () => { + await govActionDetailsPage.contextBtn.click(); + + await expect(govActionDetailsPage.contextInput).toBeVisible(); + + for (let i = 0; i < 100; i++) { + const randomContext = faker.lorem.paragraph(40); + await govActionDetailsPage.contextInput.fill(randomContext); + expect( + await govActionDetailsPage.contextInput.textContent() + ).not.toEqual(randomContext); + } + }); }); }); From 584318128c542cc9959580613a7b056cefdf87ce Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Wed, 5 Jun 2024 13:58:28 +0545 Subject: [PATCH 045/162] test: Validate metadata anchor --- .../lib/pages/dRepRegistrationPage.ts | 8 ++- .../dRepRegistration.loggedin.spec.ts | 50 ++++++++++++++++++- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/tests/govtool-frontend/playwright/lib/pages/dRepRegistrationPage.ts b/tests/govtool-frontend/playwright/lib/pages/dRepRegistrationPage.ts index f4c7671f0..4a3c768f1 100644 --- a/tests/govtool-frontend/playwright/lib/pages/dRepRegistrationPage.ts +++ b/tests/govtool-frontend/playwright/lib/pages/dRepRegistrationPage.ts @@ -24,12 +24,16 @@ export default class DRepRegistrationPage { ); readonly continueBtn = this.page.getByTestId("continue-button"); readonly addLinkBtn = this.page.getByTestId("add-link-button"); + readonly metadataDownloadBtn = this.page.getByTestId( + "metadata-download-button" + ); // input fields readonly nameInput = this.page.getByTestId("name-input"); readonly emailInput = this.page.getByTestId("email-input"); readonly bioInput = this.page.getByTestId("bio-input"); readonly linkInput = this.page.getByTestId("link-1-input"); + readonly metadataUrlInput = this.page.getByTestId("metadata-url-input"); constructor(private readonly page: Page) {} @@ -64,14 +68,14 @@ export default class DRepRegistrationPage { await this.page.getByRole("checkbox").click(); await this.continueBtn.click(); - this.page.getByRole("button", { name: `${dRepInfo.name}.jsonld` }).click(); + this.metadataDownloadBtn.click(); const dRepMetadata = await this.downloadVoteMetadata(); const url = await metadataBucketService.uploadMetadata( dRepMetadata.name, dRepMetadata.data ); - await this.page.getByPlaceholder("URL").fill(url); + await this.metadataUrlInput.fill(url); await this.page.getByTestId("register-button").click(); } diff --git a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts index 94ab385ac..53e68b9c5 100644 --- a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts @@ -35,7 +35,7 @@ test("3D. Verify DRep registration form", async ({ page }) => { }); test.describe("Validation of dRep Registration Form", () => { - test("3E.1 Should accept valid data in DRep form", async ({ page }) => { + test("3E_1 Should accept valid data in DRep form", async ({ page }) => { test.slow(); const dRepRegistrationPage = new DRepRegistrationPage(page); @@ -58,7 +58,7 @@ test.describe("Validation of dRep Registration Form", () => { await expect(dRepRegistrationPage.addLinkBtn).toBeHidden(); }); - test("3E.2. Should reject invalid data in DRep form", async ({ page }) => { + test("3E_2. Should reject invalid data in DRep form", async ({ page }) => { test.slow(); const dRepRegistrationPage = new DRepRegistrationPage(page); @@ -73,6 +73,52 @@ test.describe("Validation of dRep Registration Form", () => { ); } }); + + test("3L_1. Should accept valid metadata anchor", async ({ page }) => { + const dRepRegistrationPage = new DRepRegistrationPage(page); + await dRepRegistrationPage.goto(); + + const dRepName = "Test_DRep"; + await dRepRegistrationPage.nameInput.fill(dRepName); + + await dRepRegistrationPage.continueBtn.click(); + await page.getByRole("checkbox").click(); + await dRepRegistrationPage.continueBtn.click(); + + for (let i = 0; i < 100; i++) { + await dRepRegistrationPage.metadataUrlInput.fill(faker.internet.url()); + await expect(page.getByTestId("invalid-url-error")).toBeHidden(); + } + }); + + test("3L_2. Should reject ivalid metadata anchor", async ({ page }) => { + const dRepRegistrationPage = new DRepRegistrationPage(page); + await dRepRegistrationPage.goto(); + + const dRepName = "Test_DRep"; + await dRepRegistrationPage.nameInput.fill(dRepName); + + await dRepRegistrationPage.continueBtn.click(); + await page.getByRole("checkbox").click(); + await dRepRegistrationPage.continueBtn.click(); + + for (let i = 0; i < 100; i++) { + await dRepRegistrationPage.metadataUrlInput.fill(mockInvalid.url()); + await expect(page.getByTestId("invalid-url-error")).toBeVisible(); + } + + const sentenceWithoutSpace = faker.lorem + .sentence(128) + .replace(/[\s.]/g, ""); + + const metadataAnchorGreaterThan128Bytes = + faker.internet.url({ appendSlash: true }) + sentenceWithoutSpace; + await dRepRegistrationPage.metadataUrlInput.fill( + metadataAnchorGreaterThan128Bytes + ); + + await expect(page.getByTestId("invalid-url-error")).toBeVisible(); + }); }); test("3F. Should create proper DRep registration request, when registered with data", async ({ From 4840021df39dff0915bc01531f1aedaedaee8bff Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Wed, 5 Jun 2024 14:00:03 +0545 Subject: [PATCH 046/162] test: Validate dRep metadata anchor --- .../delegationFunctionality.delegation.spec.ts | 2 +- .../dRepRegistration.loggedin.spec.ts | 6 +++--- .../proposalVisibility.loggedin.spec.ts | 10 +++++----- .../proposalSubmission.loggedin.spec.ts | 7 +++---- .../proposalSubmissionFunctionality.tx.spec.ts | 2 +- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts b/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts index 11c059a2f..9bc64fe70 100644 --- a/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts +++ b/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts @@ -313,7 +313,7 @@ test.describe("Delegated ADA visibility", () => { adaHolder05Wallet.address ); await expect( - page.getByText(`You have delegated ₳ ${adaHolderVotingPower}`) + page.getByText(`You have delegated ₳${adaHolderVotingPower}`) ).toBeVisible(); await page.goto("/"); diff --git a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts index 53e68b9c5..11a0868dc 100644 --- a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts @@ -74,7 +74,7 @@ test.describe("Validation of dRep Registration Form", () => { } }); - test("3L_1. Should accept valid metadata anchor", async ({ page }) => { + test("3L_1. Should accept valid dRep metadata anchor", async ({ page }) => { const dRepRegistrationPage = new DRepRegistrationPage(page); await dRepRegistrationPage.goto(); @@ -91,7 +91,7 @@ test.describe("Validation of dRep Registration Form", () => { } }); - test("3L_2. Should reject ivalid metadata anchor", async ({ page }) => { + test("3L_2. Should reject invalid dRep metadata anchor", async ({ page }) => { const dRepRegistrationPage = new DRepRegistrationPage(page); await dRepRegistrationPage.goto(); @@ -110,9 +110,9 @@ test.describe("Validation of dRep Registration Form", () => { const sentenceWithoutSpace = faker.lorem .sentence(128) .replace(/[\s.]/g, ""); - const metadataAnchorGreaterThan128Bytes = faker.internet.url({ appendSlash: true }) + sentenceWithoutSpace; + await dRepRegistrationPage.metadataUrlInput.fill( metadataAnchorGreaterThan128Bytes ); diff --git a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts index ae213bf33..4053ad471 100644 --- a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts @@ -31,7 +31,7 @@ test.beforeEach(async () => { await setAllureEpic("4. Proposal visibility"); }); -test("4A.1: Should access Governance Actions page with connecting wallet", async ({ +test("4A_1: Should access Governance Actions page with connecting wallet", async ({ page, }) => { await page.goto("/"); @@ -43,7 +43,7 @@ test("4A.1: Should access Governance Actions page with connecting wallet", async await expect(page.getByText(/Governance Actions/i)).toHaveCount(2); }); -test("4B.1: Should restrict voting for users who are not registered as DReps (with wallet connected)", async ({ +test("4B_1: Should restrict voting for users who are not registered as DReps (with wallet connected)", async ({ page, }) => { const govActionsPage = new GovernanceActionsPage(page); @@ -53,7 +53,7 @@ test("4B.1: Should restrict voting for users who are not registered as DReps (wi await expect(govActionDetailsPage.voteBtn).not.toBeVisible(); }); -test("4C.1: Should filter Governance Action Type on governance actions page", async ({ +test("4C_1: Should filter Governance Action Type on governance actions page", async ({ page, }) => { test.slow(); @@ -80,7 +80,7 @@ test("4C.1: Should filter Governance Action Type on governance actions page", as } }); -test("4C.2: Should sort Governance Action Type on governance actions page", async ({ +test("4C_2: Should sort Governance Action Type on governance actions page", async ({ page, }) => { test.slow(); @@ -106,7 +106,7 @@ test("4C.2: Should sort Governance Action Type on governance actions page", asyn ); }); -test("4C.3: Should filter and sort Governance Action Type on governance actions page", async ({ +test("4C_3: Should filter and sort Governance Action Type on governance actions page", async ({ page, }) => { test.slow(); diff --git a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts index 58b3f5fb0..28692308e 100644 --- a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts @@ -1,4 +1,3 @@ -import environments from "@constants/environments"; import { user01Wallet } from "@constants/staticWallets"; import { test } from "@fixtures/walletExtension"; import { setAllureEpic } from "@helpers/allure"; @@ -15,7 +14,7 @@ test.beforeEach(async () => { test.describe("Accept valid data", () => { Object.values(ProposalType).map((type: ProposalType, index) => { - test(`7E.${index + 1} Should accept valid data in ${type.toLowerCase()} proposal form`, async ({ + test(`7E_${index + 1} Should accept valid data in ${type.toLowerCase()} proposal form`, async ({ page, }) => { test.slow(); // Brute-force testing with 100 random datas @@ -50,7 +49,7 @@ test.describe("Accept valid data", () => { test.describe("Reject invalid data", () => { Object.values(ProposalType).map((type: ProposalType, index) => { - test(`7F.${index + 1} Should reject invalid data in ${type.toLowerCase()} Proposal form`, async ({ + test(`7F_${index + 1} Should reject invalid data in ${type.toLowerCase()} Proposal form`, async ({ page, }) => { test.slow(); // Brute-force testing with 100 random datas @@ -73,7 +72,7 @@ test.describe("Reject invalid data", () => { test.describe("Review fillup form", () => { Object.values(ProposalType).map((type: ProposalType, index) => { - test(`7I.${index + 1} Should valid review submission in ${type.toLowerCase()} Proposal form`, async ({ + test(`7I_${index + 1} Should valid review submission in ${type.toLowerCase()} Proposal form`, async ({ page, }) => { const proposalSubmissionPage = new ProposalSubmissionPage(page); diff --git a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionFunctionality.tx.spec.ts b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionFunctionality.tx.spec.ts index 542a790b8..054f7d4b6 100644 --- a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionFunctionality.tx.spec.ts +++ b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionFunctionality.tx.spec.ts @@ -28,7 +28,7 @@ test.describe("Proposal submission check", () => { }); Object.values(ProposalType).map((type: ProposalType, index) => { - test(`7G.${index + 1}: Should open wallet connection popup, when registered with proper ${type.toLowerCase()} data`, async ({ + test(`7G_${index + 1}: Should open wallet connection popup, when registered with proper ${type.toLowerCase()} data`, async ({ page, browser, }, testInfo) => { From e8eb67c5b45cc69ac5fe135261373adc3c45d274 Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Wed, 5 Jun 2024 14:39:26 +0545 Subject: [PATCH 047/162] test: Edit dRep form validations --- .../playwright/lib/forms/dRepForm.ts | 127 +++++++++++++++++ .../lib/pages/dRepRegistrationPage.ts | 133 +----------------- .../playwright/lib/pages/editDRepPage.ts | 19 +++ .../dRepRegistration.loggedin.spec.ts | 8 +- .../3-drep-registration/editDRep.dRep.spec.ts | 99 +++++++++++++ .../proposalSubmission.loggedin.spec.ts | 4 +- .../playwright/tests/auth.setup.ts | 13 ++ 7 files changed, 273 insertions(+), 130 deletions(-) create mode 100644 tests/govtool-frontend/playwright/lib/forms/dRepForm.ts create mode 100644 tests/govtool-frontend/playwright/lib/pages/editDRepPage.ts create mode 100644 tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts diff --git a/tests/govtool-frontend/playwright/lib/forms/dRepForm.ts b/tests/govtool-frontend/playwright/lib/forms/dRepForm.ts new file mode 100644 index 000000000..0fbbdcaaa --- /dev/null +++ b/tests/govtool-frontend/playwright/lib/forms/dRepForm.ts @@ -0,0 +1,127 @@ +import { downloadMetadata } from "@helpers/metadata"; +import { Download, Page, expect } from "@playwright/test"; +import metadataBucketService from "@services/metadataBucketService"; +import { IDRepInfo } from "@types"; +import { withTxConfirmation } from "lib/transaction.decorator"; + +const formErrors = { + dRepName: [ + "max-80-characters-error", + "this-field-is-required-error", + "nickname-can-not-contain-whitespaces-error", + ], + email: "invalid-email-address-error", + link: "invalid-url-error", +}; + +export default class DRepForm { + readonly continueBtn = this.form.getByTestId("continue-button"); + readonly addLinkBtn = this.form.getByTestId("add-link-button"); + readonly metadataDownloadBtn = this.form.getByTestId( + "metadata-download-button" + ); + + // input fields + readonly nameInput = this.form.getByTestId("name-input"); + readonly emailInput = this.form.getByTestId("email-input"); + readonly bioInput = this.form.getByTestId("bio-input"); + readonly linkInput = this.form.getByTestId("link-1-input"); + readonly metadataUrlInput = this.form.getByTestId("metadata-url-input"); + + constructor(private readonly form: Page) {} + + @withTxConfirmation + async register(dRepInfo: IDRepInfo) { + await this.registerWithoutTxConfirmation(dRepInfo); + } + + async registerWithoutTxConfirmation(dRepInfo: IDRepInfo) { + await this.nameInput.fill(dRepInfo.name); + + if (dRepInfo.email != null) { + await this.emailInput.fill(dRepInfo.email); + } + if (dRepInfo.bio != null) { + await this.bioInput.fill(dRepInfo.bio); + } + if (dRepInfo.extraContentLinks != null) { + for (let i = 0; i < dRepInfo.extraContentLinks.length; i++) { + if (i > 0) { + await this.addLinkBtn.click(); + } + await this.linkInput.nth(i).fill(dRepInfo.extraContentLinks[i]); + } + } + await this.continueBtn.click(); + await this.form.getByRole("checkbox").click(); + await this.continueBtn.click(); + + this.metadataDownloadBtn.click(); + const dRepMetadata = await this.downloadVoteMetadata(); + const url = await metadataBucketService.uploadMetadata( + dRepMetadata.name, + dRepMetadata.data + ); + + await this.metadataUrlInput.fill(url); + await this.form.getByTestId("register-button").click(); + } + + async downloadVoteMetadata() { + const download: Download = await this.form.waitForEvent("download"); + return downloadMetadata(download); + } + + async validateForm(name: string, email: string, bio: string, link: string) { + await this.nameInput.fill(name); + await this.emailInput.fill(email); + await this.bioInput.fill(bio); + await this.linkInput.fill(link); + + for (const err of formErrors.dRepName) { + await expect(this.form.getByTestId(err)).toBeHidden(); + } + + await expect(this.form.getByTestId(formErrors.email)).toBeHidden(); + + expect(await this.bioInput.textContent()).toEqual(bio); + + await expect(this.form.getByTestId(formErrors.link)).toBeHidden(); + + await expect(this.continueBtn).toBeEnabled(); + } + + async inValidateForm(name: string, email: string, bio: string, link: string) { + await this.nameInput.fill(name); + await this.emailInput.fill(email); + await this.bioInput.fill(bio); + await this.linkInput.fill(link); + + function convertTestIdToText(testId: string) { + let text = testId.replace("-error", ""); + text = text.replace(/-/g, " "); + return text[0].toUpperCase() + text.substring(1); + } + + const regexPattern = new RegExp( + formErrors.dRepName.map(convertTestIdToText).join("|") + ); + + const nameErrors = await this.form + .locator('[data-testid$="-error"]') + .filter({ + hasText: regexPattern, + }) + .all(); + + expect(nameErrors.length).toEqual(1); + + await expect(this.form.getByTestId(formErrors.email)).toBeVisible(); + + expect(await this.bioInput.textContent()).not.toEqual(bio); + + await expect(this.form.getByTestId(formErrors.link)).toBeVisible(); + + await expect(this.continueBtn).toBeDisabled(); + } +} diff --git a/tests/govtool-frontend/playwright/lib/pages/dRepRegistrationPage.ts b/tests/govtool-frontend/playwright/lib/pages/dRepRegistrationPage.ts index 4a3c768f1..128a80e1a 100644 --- a/tests/govtool-frontend/playwright/lib/pages/dRepRegistrationPage.ts +++ b/tests/govtool-frontend/playwright/lib/pages/dRepRegistrationPage.ts @@ -1,139 +1,20 @@ -import { downloadMetadata } from "@helpers/metadata"; -import { Download, Page, expect } from "@playwright/test"; -import metadataBucketService from "@services/metadataBucketService"; -import { IDRepInfo } from "@types"; -import environments from "lib/constants/environments"; -import { withTxConfirmation } from "lib/transaction.decorator"; +import environments from "@constants/environments"; +import { Page } from "@playwright/test"; +import DRepForm from "../forms/dRepForm"; -const formErrors = { - dRepName: [ - "max-80-characters-error", - "this-field-is-required-error", - "nickname-can-not-contain-whitespaces-error", - ], - email: "invalid-email-address-error", - link: "invalid-url-error", -}; - -export default class DRepRegistrationPage { +export default class DRepRegistrationPage extends DRepForm { readonly registerBtn = this.page.getByTestId("register-button"); - readonly skipBtn = this.page.getByTestId("skip-button"); readonly confirmBtn = this.page.getByTestId("confirm-modal-button"); readonly registrationSuccessModal = this.page.getByTestId( "governance-action-submitted-modal" ); - readonly continueBtn = this.page.getByTestId("continue-button"); - readonly addLinkBtn = this.page.getByTestId("add-link-button"); - readonly metadataDownloadBtn = this.page.getByTestId( - "metadata-download-button" - ); - // input fields - readonly nameInput = this.page.getByTestId("name-input"); - readonly emailInput = this.page.getByTestId("email-input"); - readonly bioInput = this.page.getByTestId("bio-input"); - readonly linkInput = this.page.getByTestId("link-1-input"); - readonly metadataUrlInput = this.page.getByTestId("metadata-url-input"); - - constructor(private readonly page: Page) {} + constructor(private readonly page: Page) { + super(page); + } async goto() { await this.page.goto(`${environments.frontendUrl}/register_drep`); await this.continueBtn.click(); // BUG: testId -> continue-register-button } - - @withTxConfirmation - async register(dRepInfo: IDRepInfo) { - await this.registerWithoutTxConfirmation(dRepInfo); - } - - async registerWithoutTxConfirmation(dRepInfo: IDRepInfo) { - await this.nameInput.fill(dRepInfo.name); - - if (dRepInfo.email != null) { - await this.emailInput.fill(dRepInfo.email); - } - if (dRepInfo.bio != null) { - await this.bioInput.fill(dRepInfo.bio); - } - if (dRepInfo.extraContentLinks != null) { - for (let i = 0; i < dRepInfo.extraContentLinks.length; i++) { - if (i > 0) { - await this.addLinkBtn.click(); - } - await this.linkInput.nth(i).fill(dRepInfo.extraContentLinks[i]); - } - } - await this.continueBtn.click(); - await this.page.getByRole("checkbox").click(); - await this.continueBtn.click(); - - this.metadataDownloadBtn.click(); - const dRepMetadata = await this.downloadVoteMetadata(); - const url = await metadataBucketService.uploadMetadata( - dRepMetadata.name, - dRepMetadata.data - ); - - await this.metadataUrlInput.fill(url); - await this.page.getByTestId("register-button").click(); - } - - async downloadVoteMetadata() { - const download: Download = await this.page.waitForEvent("download"); - return downloadMetadata(download); - } - - async validateForm(name: string, email: string, bio: string, link: string) { - await this.nameInput.fill(name); - await this.emailInput.fill(email); - await this.bioInput.fill(bio); - await this.linkInput.fill(link); - - for (const err of formErrors.dRepName) { - await expect(this.page.getByTestId(err)).toBeHidden(); - } - - await expect(this.page.getByTestId(formErrors.email)).toBeHidden(); - - expect(await this.bioInput.textContent()).toEqual(bio); - - await expect(this.page.getByTestId(formErrors.link)).toBeHidden(); - - await expect(this.continueBtn).toBeEnabled(); - } - - async inValidateForm(name: string, email: string, bio: string, link: string) { - await this.nameInput.fill(name); - await this.emailInput.fill(email); - await this.bioInput.fill(bio); - await this.linkInput.fill(link); - - function convertTestIdToText(testId: string) { - let text = testId.replace("-error", ""); - text = text.replace(/-/g, " "); - return text[0].toUpperCase() + text.substring(1); - } - - const regexPattern = new RegExp( - formErrors.dRepName.map(convertTestIdToText).join("|") - ); - - const nameErrors = await this.page - .locator('[data-testid$="-error"]') - .filter({ - hasText: regexPattern, - }) - .all(); - - expect(nameErrors.length).toEqual(1); - - await expect(this.page.getByTestId(formErrors.email)).toBeVisible(); - - expect(await this.bioInput.textContent()).not.toEqual(bio); - - await expect(this.page.getByTestId(formErrors.link)).toBeVisible(); - - await expect(this.continueBtn).toBeDisabled(); - } } diff --git a/tests/govtool-frontend/playwright/lib/pages/editDRepPage.ts b/tests/govtool-frontend/playwright/lib/pages/editDRepPage.ts new file mode 100644 index 000000000..ffbfe840e --- /dev/null +++ b/tests/govtool-frontend/playwright/lib/pages/editDRepPage.ts @@ -0,0 +1,19 @@ +import environments from "@constants/environments"; +import { Page } from "@playwright/test"; +import DRepForm from "../forms/dRepForm"; + +export default class EditDRepPage extends DRepForm { + readonly registerBtn = this.page.getByTestId("register-button"); + readonly confirmBtn = this.page.getByTestId("confirm-modal-button"); + readonly registrationSuccessModal = this.page.getByTestId( + "governance-action-submitted-modal" + ); + + constructor(private readonly page: Page) { + super(page); + } + + async goto() { + await this.page.goto(`${environments.frontendUrl}/edit_dRep`); + } +} diff --git a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts index 11a0868dc..6081ed808 100644 --- a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts @@ -74,7 +74,9 @@ test.describe("Validation of dRep Registration Form", () => { } }); - test("3L_1. Should accept valid dRep metadata anchor", async ({ page }) => { + test("3L_1. Should accept valid metadata anchor on create dRep", async ({ + page, + }) => { const dRepRegistrationPage = new DRepRegistrationPage(page); await dRepRegistrationPage.goto(); @@ -91,7 +93,9 @@ test.describe("Validation of dRep Registration Form", () => { } }); - test("3L_2. Should reject invalid dRep metadata anchor", async ({ page }) => { + test("3L_2. Should reject invalid dRep metadata anchor on create dRep", async ({ + page, + }) => { const dRepRegistrationPage = new DRepRegistrationPage(page); await dRepRegistrationPage.goto(); diff --git a/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts b/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts new file mode 100644 index 000000000..b90b05017 --- /dev/null +++ b/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts @@ -0,0 +1,99 @@ +import { dRep02Wallet } from "@constants/staticWallets"; +import { faker } from "@faker-js/faker"; +import { test } from "@fixtures/walletExtension"; +import { invalid as mockInvalid } from "@mock/index"; +import EditDRepPage from "@pages/editDRepPage"; +import { expect } from "@playwright/test"; + +test.use({ wallet: dRep02Wallet, storageState: ".auth/dRep02.json" }); + +test.describe("Validation of edit dRep Form", () => { + test("3M_1 Should accept valid data in edit dRep form", async ({ page }) => { + test.slow(); + + const editDRepPage = new EditDRepPage(page); + await editDRepPage.goto(); + + for (let i = 0; i < 100; i++) { + await editDRepPage.validateForm( + faker.internet.displayName(), + faker.internet.email(), + faker.lorem.paragraph(), + faker.internet.url() + ); + } + + for (let i = 0; i < 6; i++) { + await expect(editDRepPage.addLinkBtn).toBeVisible(); + await editDRepPage.addLinkBtn.click(); + } + + await expect(editDRepPage.addLinkBtn).toBeHidden(); + }); + + test("3M_2. Should reject invalid data in edit dRep form", async ({ + page, + }) => { + test.slow(); + + const editDRepPage = new EditDRepPage(page); + await editDRepPage.goto(); + + for (let i = 0; i < 100; i++) { + await editDRepPage.inValidateForm( + mockInvalid.name(), + mockInvalid.email(), + faker.lorem.paragraph(40), + mockInvalid.url() + ); + } + }); + + test("3N_1. Should accept valid metadata anchor on edit dRep", async ({ + page, + }) => { + const editDRepPage = new EditDRepPage(page); + await editDRepPage.goto(); + + const dRepName = "Test_DRep"; + await editDRepPage.nameInput.fill(dRepName); + + await editDRepPage.continueBtn.click(); + await page.getByRole("checkbox").click(); + await editDRepPage.continueBtn.click(); + + for (let i = 0; i < 100; i++) { + await editDRepPage.metadataUrlInput.fill(faker.internet.url()); + await expect(page.getByTestId("invalid-url-error")).toBeHidden(); + } + }); + + test("3N_2. Should reject invalid dRep metadata anchor on edit dRep", async ({ + page, + }) => { + const editDRepPage = new EditDRepPage(page); + await editDRepPage.goto(); + + const dRepName = "Test_DRep"; + await editDRepPage.nameInput.fill(dRepName); + + await editDRepPage.continueBtn.click(); + await page.getByRole("checkbox").click(); + await editDRepPage.continueBtn.click(); + + for (let i = 0; i < 100; i++) { + await editDRepPage.metadataUrlInput.fill(mockInvalid.url()); + await expect(page.getByTestId("invalid-url-error")).toBeVisible(); + } + + const sentenceWithoutSpace = faker.lorem + .sentence(128) + .replace(/[\s.]/g, ""); + const metadataAnchorGreaterThan128Bytes = + faker.internet.url({ appendSlash: true }) + sentenceWithoutSpace; + + await editDRepPage.metadataUrlInput.fill(metadataAnchorGreaterThan128Bytes); + + await expect(page.getByTestId("invalid-url-error")).toBeVisible(); + }); +}); diff --git a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts index 28692308e..de20587f1 100644 --- a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts @@ -17,7 +17,7 @@ test.describe("Accept valid data", () => { test(`7E_${index + 1} Should accept valid data in ${type.toLowerCase()} proposal form`, async ({ page, }) => { - test.slow(); // Brute-force testing with 100 random datas + test.slow(); // Brute-force testing with 100 random data const proposalSubmissionPage = new ProposalSubmissionPage(page); @@ -52,7 +52,7 @@ test.describe("Reject invalid data", () => { test(`7F_${index + 1} Should reject invalid data in ${type.toLowerCase()} Proposal form`, async ({ page, }) => { - test.slow(); // Brute-force testing with 100 random datas + test.slow(); // Brute-force testing with 100 random data const proposalSubmissionPage = new ProposalSubmissionPage(page); diff --git a/tests/govtool-frontend/playwright/tests/auth.setup.ts b/tests/govtool-frontend/playwright/tests/auth.setup.ts index e62d7fa92..b5db57ab4 100644 --- a/tests/govtool-frontend/playwright/tests/auth.setup.ts +++ b/tests/govtool-frontend/playwright/tests/auth.setup.ts @@ -7,6 +7,7 @@ import { adaHolder04Wallet, adaHolder05Wallet, dRep01Wallet, + dRep02Wallet, user01Wallet, } from "@constants/staticWallets"; import { importWallet } from "@fixtures/importWallet"; @@ -15,6 +16,8 @@ import { setAllureEpic, setAllureStory } from "@helpers/allure"; import LoginPage from "@pages/loginPage"; const dRep01AuthFile = ".auth/dRep01.json"; +const dRep02AuthFile = ".auth/dRep02.json"; + const adaHolder01AuthFile = ".auth/adaHolder01.json"; const adaHolder02AuthFile = ".auth/adaHolder02.json"; const adaHolder03AuthFile = ".auth/adaHolder03.json"; @@ -38,6 +41,16 @@ setup("Create DRep 01 auth", async ({ page, context }) => { await context.storageState({ path: dRep01AuthFile }); }); +setup("Create DRep 02 auth", async ({ page, context }) => { + await importWallet(page, dRep02Wallet); + + const loginPage = new LoginPage(page); + await loginPage.login(); + await loginPage.isLoggedIn(); + + await context.storageState({ path: dRep02AuthFile }); +}); + setup("Create User 01 auth", async ({ page, context }) => { await importWallet(page, user01Wallet); From 0c1948476986a2f88a35505dd9b635a58a377778 Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Wed, 5 Jun 2024 14:59:40 +0545 Subject: [PATCH 048/162] test: DRep registration metadata validation --- .../dRepRegistration.loggedin.spec.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts index 6081ed808..04b8b59f4 100644 --- a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts @@ -136,3 +136,25 @@ test("3F. Should create proper DRep registration request, when registered with d page.getByTestId("registration-transaction-error-modal") ).toBeVisible(); }); + +test("3O. Should reject invalid dRep registration metadata", async ({ + page, +}) => { + const dRepRegistrationPage = new DRepRegistrationPage(page); + await dRepRegistrationPage.goto(); + + const dRepName = "Test_DRep"; + await dRepRegistrationPage.nameInput.fill(dRepName); + + await dRepRegistrationPage.continueBtn.click(); + await page.getByRole("checkbox").click(); + await dRepRegistrationPage.continueBtn.click(); + + const invalidMetadataAnchor = "https://www.google.com"; + await dRepRegistrationPage.metadataUrlInput.fill(invalidMetadataAnchor); + await dRepRegistrationPage.registerBtn.click(); + + await expect( + page.getByTestId("registration-transaction-error-modal") + ).toBeVisible(); +}); From 397d41283e7818e753d0e2b1b857e58f7361e5df Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Wed, 5 Jun 2024 15:01:02 +0545 Subject: [PATCH 049/162] test: Edit dRep metadata validation --- .../3-drep-registration/editDRep.dRep.spec.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts b/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts index b90b05017..e7a680c69 100644 --- a/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts +++ b/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts @@ -97,3 +97,23 @@ test.describe("Validation of edit dRep Form", () => { await expect(page.getByTestId("invalid-url-error")).toBeVisible(); }); }); + +test("3P. Should reject invalid edit dRep metadata", async ({ page }) => { + const editDRepPage = new EditDRepPage(page); + await editDRepPage.goto(); + + const dRepName = "Test_DRep"; + await editDRepPage.nameInput.fill(dRepName); + + await editDRepPage.continueBtn.click(); + await page.getByRole("checkbox").click(); + await editDRepPage.continueBtn.click(); + + const invalidMetadataAnchor = "https://www.google.com"; + await editDRepPage.metadataUrlInput.fill(invalidMetadataAnchor); + await editDRepPage.continueBtn.click(); + + await expect( + page.getByTestId("registration-transaction-error-modal") + ).toBeVisible(); +}); From cd1c7f96bf38c499b1b40cc07ba0bad39eb9da61 Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Wed, 5 Jun 2024 15:22:36 +0545 Subject: [PATCH 050/162] fix: Validate dRep metadata anchor --- .../tests/3-drep-registration/dRepRegistration.loggedin.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts index 04b8b59f4..2ee585c5e 100644 --- a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts @@ -156,5 +156,5 @@ test("3O. Should reject invalid dRep registration metadata", async ({ await expect( page.getByTestId("registration-transaction-error-modal") - ).toBeVisible(); + ).not.toHaveText(/utxo balance insufficient/i); }); From 08be1e17f0e20b854331012aa4c43b1acbec7257 Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Wed, 5 Jun 2024 15:46:01 +0545 Subject: [PATCH 051/162] fix: 2W. Visibility delegated ADA to DRep --- .../2-delegation/delegationFunctionality.delegation.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts b/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts index 9bc64fe70..11c059a2f 100644 --- a/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts +++ b/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts @@ -313,7 +313,7 @@ test.describe("Delegated ADA visibility", () => { adaHolder05Wallet.address ); await expect( - page.getByText(`You have delegated ₳${adaHolderVotingPower}`) + page.getByText(`You have delegated ₳ ${adaHolderVotingPower}`) ).toBeVisible(); await page.goto("/"); From 96c3a008a463275a041477a729c778e56f353c1e Mon Sep 17 00:00:00 2001 From: niraj Date: Wed, 5 Jun 2024 15:44:45 +0545 Subject: [PATCH 052/162] test: verify info and voting power of abstain and signal-no-confidence --- .../playwright/lib/pages/dRepDirectoryPage.ts | 7 +++++ .../2-delegation/delegation.loggedin.spec.ts | 30 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/tests/govtool-frontend/playwright/lib/pages/dRepDirectoryPage.ts b/tests/govtool-frontend/playwright/lib/pages/dRepDirectoryPage.ts index 395cb9128..9b07aa783 100644 --- a/tests/govtool-frontend/playwright/lib/pages/dRepDirectoryPage.ts +++ b/tests/govtool-frontend/playwright/lib/pages/dRepDirectoryPage.ts @@ -11,6 +11,13 @@ export default class DRepDirectoryPage { readonly filterBtn = this.page.getByTestId("filters-button"); readonly sortBtn = this.page.getByTestId("sort-button"); readonly showMoreBtn = this.page.getByTestId("show-more-button"); + readonly abstainInfoButton = this.page.getByTestId( + "abstain-from-every-vote-info-button" + ); + + readonly signalNoConfidenceInfoButton = this.page.getByTestId( + "signal-no-confidence-on-every-vote-info-button" + ); readonly automaticDelegationOptionsDropdown = this.page.getByRole("button", { name: "Automated Voting Options arrow", diff --git a/tests/govtool-frontend/playwright/tests/2-delegation/delegation.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/2-delegation/delegation.loggedin.spec.ts index 04c34f1e5..41c83d599 100644 --- a/tests/govtool-frontend/playwright/tests/2-delegation/delegation.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/2-delegation/delegation.loggedin.spec.ts @@ -39,3 +39,33 @@ test("2D. Should show delegation options in connected state", async ({ 2 ); }); + +test("2X_1. Should include info button and voting power on the Abstain card", async ({ + page, +}) => { + const dRepDirectoryPage = new DRepDirectoryPage(page); + await dRepDirectoryPage.goto(); + + await dRepDirectoryPage.automaticDelegationOptionsDropdown.click(); + + await expect( + dRepDirectoryPage.abstainDelegationCard.getByText("₳") + ).toBeVisible(); + + await expect(dRepDirectoryPage.abstainInfoButton).toBeVisible(); +}); + +test("2X_2. Should include info button and voting power on the Signal-No-Confidence card", async ({ + page, +}) => { + const dRepDirectoryPage = new DRepDirectoryPage(page); + await dRepDirectoryPage.goto(); + + await dRepDirectoryPage.automaticDelegationOptionsDropdown.click(); + + await expect( + dRepDirectoryPage.signalNoConfidenceCard.getByText("₳") + ).toBeVisible(); + + await expect(dRepDirectoryPage.signalNoConfidenceInfoButton).toBeVisible(); +}); From 1e4d3819365a287e45221422247eef1a177a0040 Mon Sep 17 00:00:00 2001 From: niraj Date: Wed, 5 Jun 2024 15:50:20 +0545 Subject: [PATCH 053/162] test: Proposal submission form and Metadata validation --- .../lib/pages/proposalSubmissionPage.ts | 6 +- .../proposalSubmission.loggedin.spec.ts | 139 +++++++++++++++++- ...proposalSubmissionFunctionality.tx.spec.ts | 4 +- ...posalSubmissionVisibility.loggedin.spec.ts | 2 +- 4 files changed, 144 insertions(+), 7 deletions(-) diff --git a/tests/govtool-frontend/playwright/lib/pages/proposalSubmissionPage.ts b/tests/govtool-frontend/playwright/lib/pages/proposalSubmissionPage.ts index 60133f545..3ba8c0331 100644 --- a/tests/govtool-frontend/playwright/lib/pages/proposalSubmissionPage.ts +++ b/tests/govtool-frontend/playwright/lib/pages/proposalSubmissionPage.ts @@ -35,10 +35,14 @@ export default class ProposalSubmissionPage { readonly addLinkBtn = this.page.getByRole("button", { name: "+ Add link" }); // BUG testid= add-link-button readonly infoRadioButton = this.page.getByTestId("Info-radio"); readonly treasuryRadioButton = this.page.getByTestId("Treasury-radio"); + readonly editSubmissionButton = this.page.getByTestId( + "edit-submission-button" + ); // input fields readonly titleInput = this.page.getByPlaceholder("A name for this Action"); // BUG testid = title-input readonly abstractInput = this.page.getByPlaceholder("Summary"); // BUG testid = abstract-input + readonly metadataUrlInput = this.page.getByTestId("metadata-url-input"); readonly motivationInput = this.page.getByPlaceholder( "Problem this GA will solve" ); // BUG testid = motivation-input @@ -77,7 +81,7 @@ export default class ProposalSubmissionPage { dRepMetadata.name, dRepMetadata.data ); - await this.page.getByPlaceholder("URL").fill(url); + await this.metadataUrlInput.fill(url); await this.continueBtn.click(); } diff --git a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts index de20587f1..6a04169e3 100644 --- a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts @@ -1,6 +1,8 @@ import { user01Wallet } from "@constants/staticWallets"; +import { faker } from "@faker-js/faker"; import { test } from "@fixtures/walletExtension"; import { setAllureEpic } from "@helpers/allure"; +import { invalid } from "@mock/index"; import ProposalSubmissionPage from "@pages/proposalSubmissionPage"; import { expect } from "@playwright/test"; import { IProposalForm, ProposalType } from "@types"; @@ -14,7 +16,7 @@ test.beforeEach(async () => { test.describe("Accept valid data", () => { Object.values(ProposalType).map((type: ProposalType, index) => { - test(`7E_${index + 1} Should accept valid data in ${type.toLowerCase()} proposal form`, async ({ + test(`7E_${index + 1}. Should accept valid data in ${type.toLowerCase()} proposal form`, async ({ page, }) => { test.slow(); // Brute-force testing with 100 random data @@ -49,7 +51,7 @@ test.describe("Accept valid data", () => { test.describe("Reject invalid data", () => { Object.values(ProposalType).map((type: ProposalType, index) => { - test(`7F_${index + 1} Should reject invalid data in ${type.toLowerCase()} Proposal form`, async ({ + test(`7F_${index + 1}. Should reject invalid data in ${type.toLowerCase()} Proposal form`, async ({ page, }) => { test.slow(); // Brute-force testing with 100 random data @@ -72,7 +74,7 @@ test.describe("Reject invalid data", () => { test.describe("Review fillup form", () => { Object.values(ProposalType).map((type: ProposalType, index) => { - test(`7I_${index + 1} Should valid review submission in ${type.toLowerCase()} Proposal form`, async ({ + test(`7I_${index + 1}. Should valid review submission in ${type.toLowerCase()} Proposal form`, async ({ page, }) => { const proposalSubmissionPage = new ProposalSubmissionPage(page); @@ -108,3 +110,134 @@ test.describe("Review fillup form", () => { }); }); }); + +test("7I. Should reject invalid proposal metadata", async ({ page }) => { + const invalidMetadataAnchor = "https://www.google.com"; + + const proposalSubmissionPage = new ProposalSubmissionPage(page); + await proposalSubmissionPage.goto(); + ``; + await page.getByTestId(`${ProposalType.info}-radio`).click(); + await proposalSubmissionPage.continueBtn.click(); + + const proposal: IProposalForm = + proposalSubmissionPage.generateValidProposalFormFields(ProposalType.info); + + await proposalSubmissionPage.fillupForm(proposal); + await proposalSubmissionPage.continueBtn.click(); + await proposalSubmissionPage.continueBtn.click(); + await page.getByRole("checkbox").click(); + await proposalSubmissionPage.continueBtn.click(); + + await proposalSubmissionPage.metadataUrlInput.fill(invalidMetadataAnchor); + await proposalSubmissionPage.continueBtn.click(); + + await expect(proposalSubmissionPage.registrationErrorModal).not.toHaveText( + /utxo balance insufficient/i + ); +}); + +test.describe("Edit proposal form", () => { + Object.values(ProposalType).map((type: ProposalType, index) => { + test(`7J_${index + 1}. Should edit review submission in ${type.toLowerCase()} Proposal form`, async ({ + page, + }) => { + const proposalSubmissionPage = new ProposalSubmissionPage(page); + + await proposalSubmissionPage.goto(); + + await page.getByTestId(`${type}-radio`).click(); + await proposalSubmissionPage.continueBtn.click(); + + const randomBytes = new Uint8Array(10); + const bech32Address = bech32.encode("addr_test", randomBytes); + + const formFields: IProposalForm = + proposalSubmissionPage.generateValidProposalFormFields( + type, + bech32Address + ); + await proposalSubmissionPage.validateForm(formFields); + proposalSubmissionPage.continueBtn.click(); + + await proposalSubmissionPage.editSubmissionButton.click(); + + const newTitle = faker.person.firstName(); + + await proposalSubmissionPage.titleInput.fill(newTitle); + + await proposalSubmissionPage.continueBtn.click(); + + await expect(page.getByText(newTitle)).toBeVisible(); + await expect(page.getByText(formFields.abstract)).toBeVisible(); + await expect(page.getByText(formFields.motivation)).toBeVisible(); + await expect(page.getByText(formFields.rationale)).toBeVisible(); + await expect( + page.getByText(formFields.extraContentLinks[0]) + ).toBeVisible(); + + if (type === ProposalType.treasury) { + await expect(page.getByText(formFields.receivingAddress)).toBeVisible(); + await expect(page.getByText(formFields.amount)).toBeVisible(); + } + }); + }); +}); + +test("7K_1. Should accept valid anchor proposal metadata", async ({ page }) => { + const invalidMetadataAnchor = "https://www.google.com"; + + const proposalSubmissionPage = new ProposalSubmissionPage(page); + await proposalSubmissionPage.goto(); + ``; + await page.getByTestId(`${ProposalType.info}-radio`).click(); + await proposalSubmissionPage.continueBtn.click(); + + const proposal: IProposalForm = + proposalSubmissionPage.generateValidProposalFormFields(ProposalType.info); + + await proposalSubmissionPage.fillupForm(proposal); + await proposalSubmissionPage.continueBtn.click(); + await proposalSubmissionPage.continueBtn.click(); + await page.getByRole("checkbox").click(); + await proposalSubmissionPage.continueBtn.click(); + + for (let i = 0; i < 100; i++) { + await proposalSubmissionPage.metadataUrlInput.fill(faker.internet.url()); + await expect(page.getByTestId("invalid-url-error")).toBeHidden(); + } +}); + +test("7K_2. Should reject valid anchor proposal metadata", async ({ page }) => { + const invalidMetadataAnchor = "https://www.google.com"; + + const proposalSubmissionPage = new ProposalSubmissionPage(page); + await proposalSubmissionPage.goto(); + ``; + await page.getByTestId(`${ProposalType.info}-radio`).click(); + await proposalSubmissionPage.continueBtn.click(); + + const proposal: IProposalForm = + proposalSubmissionPage.generateValidProposalFormFields(ProposalType.info); + + await proposalSubmissionPage.fillupForm(proposal); + await proposalSubmissionPage.continueBtn.click(); + await proposalSubmissionPage.continueBtn.click(); + await page.getByRole("checkbox").click(); + await proposalSubmissionPage.continueBtn.click(); + + for (let i = 0; i < 100; i++) { + await proposalSubmissionPage.metadataUrlInput.fill(invalid.url()); + await expect(page.getByTestId("invalid-url-error")).toBeVisible(); + } + + const sentenceWithoutSpace = faker.lorem.sentence(128).replace(/[\s.]/g, ""); + const metadataAnchorGreaterThan128Bytes = + faker.internet.url({ appendSlash: true }) + sentenceWithoutSpace; + + await proposalSubmissionPage.metadataUrlInput.fill( + metadataAnchorGreaterThan128Bytes + ); + + await expect(page.getByTestId("invalid-url-error")).toBeVisible(); +}); diff --git a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionFunctionality.tx.spec.ts b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionFunctionality.tx.spec.ts index 054f7d4b6..c9a8ce633 100644 --- a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionFunctionality.tx.spec.ts +++ b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionFunctionality.tx.spec.ts @@ -28,7 +28,7 @@ test.describe("Proposal submission check", () => { }); Object.values(ProposalType).map((type: ProposalType, index) => { - test(`7G_${index + 1}: Should open wallet connection popup, when registered with proper ${type.toLowerCase()} data`, async ({ + test(`7G_${index + 1}. Should open wallet connection popup, when registered with proper ${type.toLowerCase()} data`, async ({ page, browser, }, testInfo) => { @@ -57,7 +57,7 @@ test.describe("Proposal submission check", () => { }); }); -test("7H should submit a proposal", async ({ page, browser }, testInfo) => { +test("7H. should submit a proposal", async ({ page, browser }, testInfo) => { test.setTimeout(testInfo.timeout + environments.txTimeOut); const wallet = await walletManager.popWallet("proposalSubmission"); diff --git a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionVisibility.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionVisibility.loggedin.spec.ts index f3bd8f210..b5e850130 100644 --- a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionVisibility.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionVisibility.loggedin.spec.ts @@ -30,7 +30,7 @@ test("7C. Should list governance action types", async ({ page }) => { test.describe("Verify Proposal form", () => { Object.values(ProposalType).map((type: ProposalType, index) => { - test(`7D.${index + 1}: Verify ${type.toLocaleLowerCase()} proposal form`, async ({ + test(`7D_${index + 1}. Verify ${type.toLocaleLowerCase()} proposal form`, async ({ page, }) => { const proposalSubmissionPage = new ProposalSubmissionPage(page); From a5c608ca01e4e987918c0ff4a727468af411ac4c Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Wed, 5 Jun 2024 16:23:56 +0545 Subject: [PATCH 054/162] fix: 2W. Wallet overlapping --- .../playwright/lib/constants/staticWallets.ts | 1 + .../delegationFunctionality.delegation.spec.ts | 5 +++-- .../govtool-frontend/playwright/tests/auth.setup.ts | 12 ++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/tests/govtool-frontend/playwright/lib/constants/staticWallets.ts b/tests/govtool-frontend/playwright/lib/constants/staticWallets.ts index cc929db8e..db324bccf 100644 --- a/tests/govtool-frontend/playwright/lib/constants/staticWallets.ts +++ b/tests/govtool-frontend/playwright/lib/constants/staticWallets.ts @@ -11,6 +11,7 @@ export const adaHolder02Wallet = staticWallets[4]; export const adaHolder03Wallet = staticWallets[6]; export const adaHolder04Wallet = staticWallets[7]; export const adaHolder05Wallet = staticWallets[8]; +export const adaHolder06Wallet = staticWallets[9]; // Does not takes part in transaction export const user01Wallet: StaticWallet = staticWallets[5]; diff --git a/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts b/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts index 11c059a2f..c2b1f8e90 100644 --- a/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts +++ b/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts @@ -5,6 +5,7 @@ import { adaHolder03Wallet, adaHolder04Wallet, adaHolder05Wallet, + adaHolder06Wallet, dRep01Wallet, dRep02Wallet, } from "@constants/staticWallets"; @@ -295,8 +296,8 @@ test.describe("No confidence delegation", () => { test.describe("Delegated ADA visibility", () => { test.use({ - storageState: ".auth/adaHolder05.json", - wallet: adaHolder05Wallet, + storageState: ".auth/adaHolder06.json", + wallet: adaHolder06Wallet, }); test("2W. Should show my delegated ADA to the DRep", async ({ diff --git a/tests/govtool-frontend/playwright/tests/auth.setup.ts b/tests/govtool-frontend/playwright/tests/auth.setup.ts index b5db57ab4..0edd09915 100644 --- a/tests/govtool-frontend/playwright/tests/auth.setup.ts +++ b/tests/govtool-frontend/playwright/tests/auth.setup.ts @@ -6,6 +6,7 @@ import { adaHolder03Wallet, adaHolder04Wallet, adaHolder05Wallet, + adaHolder06Wallet, dRep01Wallet, dRep02Wallet, user01Wallet, @@ -23,6 +24,7 @@ const adaHolder02AuthFile = ".auth/adaHolder02.json"; const adaHolder03AuthFile = ".auth/adaHolder03.json"; const adaHolder04AuthFile = ".auth/adaHolder04.json"; const adaHolder05AuthFile = ".auth/adaHolder05.json"; +const adaHolder06AuthFile = ".auth/adaHolder06.json"; const user01AuthFile = ".auth/user01.json"; @@ -110,3 +112,13 @@ setup("Create AdaHolder 05 auth", async ({ page, context }) => { await context.storageState({ path: adaHolder05AuthFile }); }); + +setup("Create AdaHolder 06 auth", async ({ page, context }) => { + await importWallet(page, adaHolder06Wallet); + + const loginPage = new LoginPage(page); + await loginPage.login(); + await loginPage.isLoggedIn(); + + await context.storageState({ path: adaHolder06AuthFile }); +}); From beab82740e18990924ed2e498bfdadd56474dd84 Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Wed, 5 Jun 2024 16:26:13 +0545 Subject: [PATCH 055/162] chore: Allure report visibility for edit_dRep and proposalSubmission functionality --- tests/govtool-frontend/playwright/package.json | 2 +- .../tests/3-drep-registration/editDRep.dRep.spec.ts | 5 +++++ .../proposalSubmissionFunctionality.tx.spec.ts | 6 ++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/tests/govtool-frontend/playwright/package.json b/tests/govtool-frontend/playwright/package.json index 56d315c53..a6799bc66 100644 --- a/tests/govtool-frontend/playwright/package.json +++ b/tests/govtool-frontend/playwright/package.json @@ -25,7 +25,7 @@ "allure:serve": "npx allure serve", "test": "npx playwright test", "format": "prettier . --write", - "generate-wallets": "ts-node ./generate_wallets.ts 9" + "generate-wallets": "ts-node ./generate_wallets.ts 10" }, "dependencies": { "@cardanoapi/cardano-test-wallet": "^1.1.2", diff --git a/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts b/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts index e7a680c69..f543862e0 100644 --- a/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts +++ b/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts @@ -1,10 +1,15 @@ import { dRep02Wallet } from "@constants/staticWallets"; import { faker } from "@faker-js/faker"; import { test } from "@fixtures/walletExtension"; +import { setAllureEpic } from "@helpers/allure"; import { invalid as mockInvalid } from "@mock/index"; import EditDRepPage from "@pages/editDRepPage"; import { expect } from "@playwright/test"; +test.beforeEach(async () => { + await setAllureEpic("3. DRep registration"); +}); + test.use({ wallet: dRep02Wallet, storageState: ".auth/dRep02.json" }); test.describe("Validation of edit dRep Form", () => { diff --git a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionFunctionality.tx.spec.ts b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionFunctionality.tx.spec.ts index c9a8ce633..c2ed11e8d 100644 --- a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionFunctionality.tx.spec.ts +++ b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmissionFunctionality.tx.spec.ts @@ -10,13 +10,15 @@ import { Page, expect } from "@playwright/test"; import { IProposalForm, ProposalType, StaticWallet } from "@types"; import walletManager from "lib/walletManager"; +test.beforeEach(async () => { + await setAllureEpic("7. Proposal submission"); +}); + test.describe("Proposal submission check", () => { let userPage: Page; let wallet: StaticWallet; test.beforeEach(async ({ browser, page }, testInfo) => { - await setAllureEpic("7. Proposal submission"); - wallet = await walletManager.popWallet("adaHolder"); const tempUserAuth = await createTempUserAuth(page, wallet); From f27ce68ffb470860cc509a8333e9671fa3ca9b9a Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Wed, 5 Jun 2024 16:34:04 +0545 Subject: [PATCH 056/162] fix: Resolve Wallet Popup Timeout Issue --- .../tests/3-drep-registration/dRepRegistration.dRep.spec.ts | 6 +++++- .../4-proposal-visibility/proposalVisibility.dRep.spec.ts | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.dRep.spec.ts b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.dRep.spec.ts index 0b2d1f12d..10f0601cb 100644 --- a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.dRep.spec.ts +++ b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.dRep.spec.ts @@ -75,7 +75,9 @@ test.describe("Temporary DReps", () => { test("3G. Should show confirmation message with link to view transaction, when DRep registration txn is submitted", async ({ page, browser, - }) => { + }, testInfo) => { + test.setTimeout(testInfo.timeout + environments.txTimeOut); + const wallet = await walletManager.popWallet("registerDRep"); const tempDRepAuth = await createTempDRepAuth(page, wallet); @@ -96,6 +98,8 @@ test.describe("Temporary DReps", () => { }); test("3J. Should verify retire as DRep", async ({ page, browser }) => { + test.slow(); // Due to queue in pop wallets + const wallet = await walletManager.popWallet("registeredDRep"); const tempDRepAuth = await createTempDRepAuth(page, wallet); diff --git a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.dRep.spec.ts b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.dRep.spec.ts index 8850fa85e..87917d374 100644 --- a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.dRep.spec.ts +++ b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.dRep.spec.ts @@ -122,6 +122,8 @@ test("4F. Should Disable DRep functionality upon wallet disconnection on governa page, browser, }) => { + test.slow(); // Due to queue in pop wallets + const wallet = await walletManager.popWallet("registeredDRep"); const tempDRepAuth = await createTempDRepAuth(page, wallet); From b32a05c78de9493bb4c6166cb69065d8c3f817c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Placzy=C5=84ski?= Date: Wed, 8 May 2024 09:38:19 +0200 Subject: [PATCH 057/162] [#262] Add missing documentation about deployment of additional services Provide detailed steps on building and pushing images for new services such as the metadata validation service and the analytics dashboard. Updates include the inclusion of new service descriptions in the README file for easier reference. --- scripts/govtool/README.md | 47 +++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/scripts/govtool/README.md b/scripts/govtool/README.md index 22f5ab666..914633805 100644 --- a/scripts/govtool/README.md +++ b/scripts/govtool/README.md @@ -28,8 +28,8 @@ specific stages of the development and deployment lifecycle: Docker Compose is utilized to manage per-environment services setups effectively. This includes configurations for: -- Services such as Cardano Node, Cardano DB Sync, GovTool backend, and GovTool - frontend. +- Services such as Cardano Node, Cardano DB Sync, GovTool backend, GovTool + frontend, the metadata validation service and an analytics dashboard. - Network configuration with Traefik to handle requests efficiently. - Monitoring solutions with Prometheus and Grafana to ensure optimal performance and availability. @@ -116,7 +116,7 @@ Displays deployment parameters for review and verification. Sends a notification to stakeholders about the deployment status via Slack. -### Building backend images steps in [backend `Makefile`](../../govtool/backend/Makefile) +### Building backend images steps in [`backend.mk`](./backend.mk) This file is responsible for generating images for backend and for pushing them to the ECR repository. @@ -130,7 +130,7 @@ are detected in the Cabal file. Pushes the backend and backend-base images to the Docker repository. -### Building frontend images steps in [frontend `Makefile`](../../govtool/frontend/Makefile) +### Building frontend images steps in [`frontend.mk`](./frontend.mk) This file is responsible for generating images for frontend and for pushing them to the ECR repository. @@ -142,3 +142,42 @@ Handles the construction of the frontend image. #### `push-frontend` Pushes the frontend image to the Docker repository. + +### Building status service images steps in [`status-service.mk`](./status-service.mk) + +This file is responsible for generating images for status service and for +pushing them to the ECR repository. + +#### `build-status-service` + +Handles the construction of the status service image. + +#### `push-status-service` + +Pushes the status service image to the Docker repository. + +### Building metadata validation service images steps in [`metadata-validation.mk`](./metadata-validation.mk) + +This file is responsible for generating images for metadata validation service +and for pushing them to the ECR repository. + +#### `build-metadata-validation` + +Handles the construction of the metadata validation service image. + +#### `push-metadata-validation` + +Pushes the metadata validation service image to the Docker repository. + +### Building analytics dashboard service images steps in [`analytics-dashboard.mk`](./analytics-dashboard.mk) + +This file is responsible for generating images for analytics dashboard service +and for pushing them to the ECR repository. + +#### `build-analytics-dashboard` + +Handles the construction of the analytics dashboard service image. + +#### `push-analytics-dashboard` + +Pushes the analytics dashboard service image to the Docker repository. From 52e61eff27ac1b59aeca0f6d0311b5e93d482152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Placzy=C5=84ski?= Date: Wed, 8 May 2024 09:55:02 +0200 Subject: [PATCH 058/162] [#262] Add an overview of the infrastructure in the documentation The commit adds a new file `infra/terraform/README.md` providing an overview of the Terraform infrastructure for the GovTool project. The documentation includes details on the architecture, components like IAM Groups, DNS management, ECR repositories, and EC2 instances, as well as configurations, managed resources, prerequisites for managing the infrastructure, and instructions for initialization and modification of components. It also outlines the CI/CD support, outputs, and guidelines for contributions. --- README.md | 3 +- infra/terraform/README.md | 99 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 infra/terraform/README.md diff --git a/README.md b/README.md index 90e9993a1..71c40ecb1 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,8 @@ Learn more; [docs.sanchogov.tools](https://docs.sanchogov.tools/). - [GovTool Backend](./govtool/backend/README.md) - [GovTool Frontend](./govtool/frontend/README.md) -- [GovTool Infrastructure](./infra/) +- [GovTool Infrastructure](./infra/terraform/README.md) +- [GovTool deployment process](./scripts/govtool/README.md) - [Documentation](./docs/) - [Tests](./tests/) diff --git a/infra/terraform/README.md b/infra/terraform/README.md new file mode 100644 index 000000000..0cfd562c8 --- /dev/null +++ b/infra/terraform/README.md @@ -0,0 +1,99 @@ +# Terraform Infrastructure for GovTool + +This repository contains Terraform configurations for managing cloud resources +for the GovTool project, focusing on AWS. + +## Architecture Overview + +The infrastructure is designed to support multiple environments and components +across the development lifecycle. + +### Components + +- **IAM Groups and Policies**: Manage access and permissions for CI/CD + processes. +- **DNS Management**: Route 53 is used to handle DNS configurations for various + services. +- **ECR Repositories**: Host Docker images for backend, frontend, and services. +- **EC2 Instances**: Support development, testing, staging, and beta + environments. + +## Managed Resources + +This project configures and manages several AWS resources essential for the +operation and deployment of the GovTool application across various environments. + +### IAM Configuration + +- **IAM Group (`CICD`)**: Manages CI/CD permissions. +- **IAM Policy (`CICD_ECR`)**: Attached to the `CICD` group to manage ECR + access. + +### DNS Management + +- **Route 53 Zone (`govtool.byron.network`)**: Handles DNS configurations and + routing for the application. + +### Container Registry + +- **ECR Repositories**: + - `backend`: Stores backend service images. + - `backend-base`: Stores base images for backend development. + - `frontend`: Stores frontend service images. + - `status-service`: Stores images for the status monitoring service. + - `metadata-validation`: Stores images for metadata validation service. + - `analytics-dashboard`: Stores images for analytics dashboard. + +### Compute Resources + +- **EC2 Instances**: + - `dev`: Instance for development. + - `test`: Instance for testing. + - `staging`: Instance for staging. + - `beta`: Instance for beta testing. + +## Configuration Files + +- `main.tf`: Defines the provider, resources, and modules for infrastructure + management. +- `versions.tf`: Specifies the required versions for Terraform and providers, + ensuring compatibility. + +## Managing Infrastructure + +### Prerequisites + +- AWS CLI +- Configured AWS credentials +- Terraform CLI (version specified in `versions.tf`) + +### Initialization + +Initialize the Terraform environment to begin managing the infrastructure: + +```bash +terraform init +terraform plan +terraform apply +``` + +### Adding or Modifying Components + +When adding new resources or modifying existing configurations, ensure to follow +the modular structure and update the respective environment settings as +required. + +## Continuous Integration and Deployment + +IAM configurations and ECR policies are tailored to support CI/CD pipelines, +allowing automated build and deployment processes. + +## Outputs + +Terraform outputs are configured to provide URLs and domain names for the +deployed services, facilitating easy access and management. + +## Contributions + +Contributions are welcome. Please ensure to maintain the modular architecture +and follow best practices for cloud resource management. From 3798dca46e5a0281e60d70a39f5530ee37184676 Mon Sep 17 00:00:00 2001 From: jankun4 Date: Thu, 6 Jun 2024 04:05:00 +0200 Subject: [PATCH 059/162] [#1142] fetch metadata from metadata-validation-service --- CHANGELOG.md | 3 + govtool/backend/app/Main.hs | 11 +- govtool/backend/example-config.json | 3 +- govtool/backend/src/VVA/API.hs | 125 +++++++++++++----- govtool/backend/src/VVA/API/Types.hs | 33 +++-- govtool/backend/src/VVA/Config.hs | 10 +- govtool/backend/src/VVA/Metadata.hs | 82 +++++++++++- govtool/backend/src/VVA/Types.hs | 42 +++++- govtool/backend/vva-be.cabal | 2 + .../metadata-validation/src/app.service.ts | 7 +- .../config/templates/backend-config.json.tpl | 3 +- 11 files changed, 258 insertions(+), 63 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c78020868..5ee590862 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,8 @@ changes. ### Added +- added `bio` `dRepName` `email` `references` `metadataValid` and `metadataStatus` fields to `drep/list` +- added `metadatavalidationmaxconcurrentrequests` field to the backend config - added `metadata/validate` endpoint [Issue 876](https://github.com/IntersectMBO/govtool/issues/876) - added pagination to `drep/list` [Issue 756](https://github.com/IntersectMBO/govtool/issues/756) - added search query param to the `drep/getVotes` [Issue 640](https://github.com/IntersectMBO/govtool/issues/640) @@ -92,6 +94,7 @@ changes. ### Changed +- `proposal.about` changed to `proposal.abstract` - `drep/info` now returns 4 different tx hashes instead of one latest tx hash [Issue 688](https://github.com/IntersectMBO/govtool/issues/688) - `proposal/list` allows user to search by tx hash [Issue 603](https://github.com/IntersectMBO/govtool/issues/603) - `proposal/list` returns additional data such ass `expiryEpochNo`, `createdEpochNo`, `title`, `about`, `motivation`, diff --git a/govtool/backend/app/Main.hs b/govtool/backend/app/Main.hs index 5ca505210..1385ae1f1 100644 --- a/govtool/backend/app/Main.hs +++ b/govtool/backend/app/Main.hs @@ -8,6 +8,7 @@ module Main where +import Control.Concurrent.QSem (newQSem) import Control.Exception (Exception, SomeException, fromException, throw) @@ -115,7 +116,8 @@ startApp vvaConfig = do dRepVotingPowerCache <- newCache dRepListCache <- newCache networkMetricsCache <- newCache - metadataValidationCache <- newCache + proposalMetadataValidationCache <- newCache + dRepMetadataValidationCache <- newCache return $ CacheEnv { proposalListCache , getProposalCache @@ -127,12 +129,13 @@ startApp vvaConfig = do , dRepVotingPowerCache , dRepListCache , networkMetricsCache - , metadataValidationCache + , proposalMetadataValidationCache + , dRepMetadataValidationCache } connectionPool <- createPool (connectPostgreSQL (encodeUtf8 (dbSyncConnectionString $ getter vvaConfig))) close 1 1 60 vvaTlsManager <- newManager tlsManagerSettings - - let appEnv = AppEnv {vvaConfig=vvaConfig, vvaCache=cacheEnv, vvaConnectionPool=connectionPool, vvaTlsManager} + qsem <- newQSem (metadataValidationMaxConcurrentRequests vvaConfig) + let appEnv = AppEnv {vvaConfig=vvaConfig, vvaCache=cacheEnv, vvaConnectionPool=connectionPool, vvaTlsManager, vvaMetadataQSem=qsem} server' <- mkVVAServer appEnv runSettings settings server' diff --git a/govtool/backend/example-config.json b/govtool/backend/example-config.json index 756e75282..417afb3c9 100644 --- a/govtool/backend/example-config.json +++ b/govtool/backend/example-config.json @@ -11,5 +11,6 @@ "cachedurationseconds": 20, "sentrydsn": "https://username:password@senty.host/id", "metadatavalidationhost": "localhost", - "metadatavalidationport": 3001 + "metadatavalidationport": 3001, + "metadatavalidationmaxconcurrentrequests": 10 } diff --git a/govtool/backend/src/VVA/API.hs b/govtool/backend/src/VVA/API.hs index 6067000cc..f5e29cc63 100644 --- a/govtool/backend/src/VVA/API.hs +++ b/govtool/backend/src/VVA/API.hs @@ -8,8 +8,10 @@ module VVA.API where -import Control.Exception (throw) -import Control.Monad.Except (throwError) +import Control.Concurrent.QSem (waitQSem, signalQSem) +import Control.Concurrent.Async (mapConcurrently) +import Control.Exception (throw, throwIO) +import Control.Monad.Except (throwError, runExceptT) import Control.Monad.Reader import Data.Aeson (Result(Error, Success), fromJSON) import Data.Bool (Bool) @@ -74,8 +76,8 @@ type VVAApi = :<|> "transaction" :> "status" :> Capture "transactionId" HexText :> Get '[JSON] GetTransactionStatusResponse :<|> "throw500" :> Get '[JSON] () :<|> "network" :> "metrics" :> Get '[JSON] GetNetworkMetricsResponse - :<|> "metadata" :> "validate" :> ReqBody '[JSON] MetadataValidationParams :> Post '[JSON] MetadataValidationResponse - + :<|> "proposal" :> "metadata" :> "validate" :> ReqBody '[JSON] MetadataValidationParams :> Post '[JSON] MetadataValidationResponse + :<|> "drep" :> "metadata" :> "validate" :> ReqBody '[JSON] MetadataValidationParams :> Post '[JSON] MetadataValidationResponse server :: App m => ServerT VVAApi m server = drepList :<|> getVotingPower @@ -89,7 +91,8 @@ server = drepList :<|> getTransactionStatus :<|> throw500 :<|> getNetworkMetrics - :<|> validateMetadata + :<|> getProposalMetadataValidationResponse + :<|> getDRepMetadataValidationResponse mapDRepType :: Types.DRepType -> DRepType @@ -101,9 +104,10 @@ mapDRepStatus Types.Retired = Retired mapDRepStatus Types.Active = Active mapDRepStatus Types.Inactive = Inactive -drepRegistrationToDrep :: Types.DRepRegistration -> DRep -drepRegistrationToDrep Types.DRepRegistration {..} = - DRep +drepRegistrationToDrep :: Types.DRepRegistration -> Types.MetadataValidationResult Types.DRepMetadata -> DRep +drepRegistrationToDrep Types.DRepRegistration {..} Types.MetadataValidationResult{..} = + let metadata = metadataValidationResultMetadata + in DRep { dRepDrepId = DRepHash dRepRegistrationDRepHash, dRepView = dRepRegistrationView, dRepUrl = dRepRegistrationUrl, @@ -113,7 +117,13 @@ drepRegistrationToDrep Types.DRepRegistration {..} = dRepStatus = mapDRepStatus dRepRegistrationStatus, dRepType = mapDRepType dRepRegistrationType, dRepLatestTxHash = HexText <$> dRepRegistrationLatestTxHash, - dRepLatestRegistrationDate = dRepRegistrationLatestRegistrationDate + dRepLatestRegistrationDate = dRepRegistrationLatestRegistrationDate, + dRepBio = Types.dRepMetadataBio <$> metadata, + dRepDRepName = Types.dRepMetadataDRepName <$> metadata, + dRepEmail = Types.dRepMetadataEmail <$> metadata, + dRepReferences = maybe [] Types.dRepMetadataReferences metadata, + dRepMetadataStatus = metadataValidationResultStatus, + dRepMetadataValid = metadataValidationResultValid } delegationToResponse :: Types.Delegation -> DelegationResponse @@ -152,8 +162,22 @@ drepList mSearchQuery statuses mSortMode mPage mPageSize = do Just Status -> sortOn $ \Types.DRepRegistration {..} -> dRepRegistrationStatus + appEnv <- ask + qsem <- asks vvaMetadataQSem - let allValidDReps = map drepRegistrationToDrep $ sortDReps $ filterDRepsByQuery $ filterDRepsByStatus dreps + allValidDReps <- liftIO $ mapConcurrently + (\d@Types.DRepRegistration{..} -> + drepRegistrationToDrep d + <$> do + waitQSem qsem + r <- (either throwIO return =<< (runExceptT + $ flip runReaderT appEnv (validateDRepMetadata + (MetadataValidationParams + (fromMaybe "" dRepRegistrationUrl) + $ HexText (fromMaybe "" dRepRegistrationDataHash))))) + signalQSem qsem + return r) + $ sortDReps $ filterDRepsByQuery $ filterDRepsByStatus dreps let page = (fromIntegral $ fromMaybe 0 mPage) :: Int @@ -177,8 +201,10 @@ getVotingPower (unHexText -> dRepId) = do cacheRequest dRepVotingPowerCache dRepId $ DRep.getVotingPower dRepId -proposalToResponse :: Types.Proposal -> MetadataValidationResponse -> ProposalResponse -proposalToResponse Types.Proposal {..} metadataValidationResponse = +proposalToResponse :: Types.Proposal -> Types.MetadataValidationResult Types.ProposalMetadata -> ProposalResponse +proposalToResponse Types.Proposal {..} Types.MetadataValidationResult{..} = + let metadata = metadataValidationResultMetadata + in ProposalResponse { proposalResponseId = pack $ show proposalId, proposalResponseTxHash = HexText proposalTxHash, @@ -191,16 +217,17 @@ proposalToResponse Types.Proposal {..} metadataValidationResponse = proposalResponseCreatedEpochNo = proposalCreatedEpochNo, proposalResponseUrl = proposalUrl, proposalResponseMetadataHash = HexText proposalDocHash, - proposalResponseTitle = proposalTitle, - proposalResponseAbout = proposalAbout, - proposalResponseMotivation = proposalMotivaiton, - proposalResponseRationale = proposalRationale, + proposalResponseTitle = Types.proposalMetadataTitle <$> metadata, + proposalResponseAbstract = Types.proposalMetadataAbstract <$> metadata, + proposalResponseMotivation = Types.proposalMetadataMotivation <$> metadata, + proposalResponseRationale = Types.proposalMetadataRationale <$> metadata, proposalResponseMetadata = GovernanceActionMetadata <$> proposalMetadata, - proposalResponseReferences = GovernanceActionReferences <$> proposalReferences, + proposalResponseReferences = maybe [] Types.proposalMetadataReferences metadata, proposalResponseYesVotes = proposalYesVotes, proposalResponseNoVotes = proposalNoVotes, proposalResponseAbstainVotes = proposalAbstainVotes, - proposalResponseMetadataStatus = Just metadataValidationResponse + proposalResponseMetadataStatus = metadataValidationResultStatus, + proposalResponseMetadataValid = metadataValidationResultValid } voteToResponse :: Types.Vote -> VoteParams @@ -224,9 +251,19 @@ mapSortAndFilterProposals -> [Types.Proposal] -> m [ProposalResponse] mapSortAndFilterProposals selectedTypes sortMode proposals = do + + appEnv <- ask + qsem <- asks vvaMetadataQSem + mappedProposals <- - mapM - (\proposal@Types.Proposal {proposalUrl, proposalDocHash} -> proposalToResponse proposal <$> validateMetadata (MetadataValidationParams proposalUrl $ HexText proposalDocHash)) + liftIO $ mapConcurrently + (\proposal@Types.Proposal {proposalUrl, proposalDocHash} -> + do + waitQSem qsem + r <- either throwIO return =<< (runExceptT + $ flip runReaderT appEnv (proposalToResponse proposal <$> validateProposalMetadata (MetadataValidationParams proposalUrl $ HexText proposalDocHash))) + signalQSem qsem + return r) proposals let filteredProposals = if null selectedTypes @@ -297,7 +334,7 @@ isProposalSearchedFor (Just searchQuery) (ProposalResponse{..}) = fromMaybe Fals let valuesToCheck = catMaybes [ Just govActionId , proposalResponseTitle - , proposalResponseAbout + , proposalResponseAbstract , proposalResponseMotivation , proposalResponseRationale ] @@ -351,8 +388,8 @@ getProposal g@(GovActionId govActionTxHash govActionIndex) mDrepId' = do let mDrepId = unHexText <$> mDrepId' CacheEnv {getProposalCache} <- asks vvaCache proposal@Types.Proposal {proposalUrl, proposalDocHash} <- cacheRequest getProposalCache (unHexText govActionTxHash, govActionIndex) (Proposal.getProposal (unHexText govActionTxHash) govActionIndex) - metadataStatus <- validateMetadata $ MetadataValidationParams proposalUrl $ HexText proposalDocHash - let proposalResponse = proposalToResponse proposal metadataStatus + proposalMetadataValidationResult <- validateProposalMetadata $ MetadataValidationParams proposalUrl $ HexText proposalDocHash + let proposalResponse = proposalToResponse proposal proposalMetadataValidationResult voteResponse <- case mDrepId of Nothing -> return Nothing Just drepId -> do @@ -400,14 +437,34 @@ getNetworkMetrics = do , getNetworkMetricsResponseAlwaysNoConfidenceVotingPower = networkMetricsAlwaysNoConfidenceVotingPower } -validateMetadata :: App m => MetadataValidationParams -> m MetadataValidationResponse -validateMetadata MetadataValidationParams {..} = do - CacheEnv {metadataValidationCache} <- asks vvaCache - result <- cacheRequest metadataValidationCache (metadataValidationParamsUrl, unHexText metadataValidationParamsHash) - $ Metadata.validateMetadata metadataValidationParamsUrl (unHexText metadataValidationParamsHash) - - case fromJSON result of - Error e -> return $ MetadataValidationResponse Nothing False (AnyValue $ Just result) - Success (InternalMetadataValidationResponse {..}) -> return $ MetadataValidationResponse {metadataValidationResponseStatus=internalMetadataValidationResponseStatus, metadataValidationResponseValid=internalMmetadataValidationResponseValid, metadataValidationResponseRaw=AnyValue $ Just result} - - +validateProposalMetadata :: App m => MetadataValidationParams -> m (Types.MetadataValidationResult Types.ProposalMetadata) +validateProposalMetadata MetadataValidationParams {..} = do + CacheEnv {proposalMetadataValidationCache} <- asks vvaCache + cacheRequest proposalMetadataValidationCache (metadataValidationParamsUrl, unHexText metadataValidationParamsHash) + $ Metadata.getProposalMetadataValidationResult metadataValidationParamsUrl (unHexText metadataValidationParamsHash) + +getProposalMetadataValidationResponse :: App m => MetadataValidationParams -> m MetadataValidationResponse +getProposalMetadataValidationResponse params = do + result <- validateProposalMetadata params + case result of + Types.MetadataValidationResult {..} -> do + return $ MetadataValidationResponse + { metadataValidationResponseValid = metadataValidationResultValid + , metadataValidationResponseStatus = metadataValidationResultStatus + } + +validateDRepMetadata :: App m => MetadataValidationParams -> m (Types.MetadataValidationResult Types.DRepMetadata) +validateDRepMetadata MetadataValidationParams {..} = do + CacheEnv {dRepMetadataValidationCache} <- asks vvaCache + cacheRequest dRepMetadataValidationCache (metadataValidationParamsUrl, unHexText metadataValidationParamsHash) + $ Metadata.getDRepMetadataValidationResult metadataValidationParamsUrl (unHexText metadataValidationParamsHash) + +getDRepMetadataValidationResponse :: App m => MetadataValidationParams -> m MetadataValidationResponse +getDRepMetadataValidationResponse params = do + result <- validateDRepMetadata params + case result of + Types.MetadataValidationResult {..} -> do + return $ MetadataValidationResponse + { metadataValidationResponseValid = metadataValidationResultValid + , metadataValidationResponseStatus = metadataValidationResultStatus + } \ No newline at end of file diff --git a/govtool/backend/src/VVA/API/Types.hs b/govtool/backend/src/VVA/API/Types.hs index 760b24857..ccb11e750 100644 --- a/govtool/backend/src/VVA/API/Types.hs +++ b/govtool/backend/src/VVA/API/Types.hs @@ -167,9 +167,8 @@ instance ToSchema InternalMetadataValidationResponse where data MetadataValidationResponse = MetadataValidationResponse - { metadataValidationResponseStatus :: Maybe MetadataValidationStatus + { metadataValidationResponseStatus :: Maybe Text , metadataValidationResponseValid :: Bool - , metadataValidationResponseRaw :: AnyValue } deriving (Generic, Show) @@ -463,15 +462,16 @@ data ProposalResponse , proposalResponseUrl :: Text , proposalResponseMetadataHash :: HexText , proposalResponseTitle :: Maybe Text - , proposalResponseAbout :: Maybe Text + , proposalResponseAbstract :: Maybe Text , proposalResponseMotivation :: Maybe Text , proposalResponseRationale :: Maybe Text , proposalResponseMetadata :: Maybe GovernanceActionMetadata - , proposalResponseReferences :: Maybe GovernanceActionReferences + , proposalResponseReferences :: [Text] , proposalResponseYesVotes :: Integer , proposalResponseNoVotes :: Integer , proposalResponseAbstainVotes :: Integer - , proposalResponseMetadataStatus :: Maybe MetadataValidationResponse + , proposalResponseMetadataStatus :: Maybe Text + , proposalResponseMetadataValid :: Bool } deriving (Generic, Show) @@ -490,15 +490,16 @@ exampleProposalResponse = "{ \"id\": \"proposalId123\"," <> "\"url\": \"https://proposal.metadata.xyz\"," <> "\"metadataHash\": \"9af10e89979e51b8cdc827c963124a1ef4920d1253eef34a1d5cfe76438e3f11\"," <> "\"title\": \"Proposal Title\"," - <> "\"about\": \"Proposal About\"," + <> "\"abstract\": \"Proposal About\"," <> "\"motivation\": \"Proposal Motivation\"," <> "\"rationale\": \"Proposal Rationale\"," <> "\"metadata\": {\"key\": \"value\"}," - <> "\"references\": [{\"uri\": \"google.com\", \"@type\": \"Other\", \"label\": \"example label\"}]," + <> "\"references\": [\"google.com\"]," <> "\"yesVotes\": 0," <> "\"noVotes\": 0," - <> "\"abstainVotes\": 0" - <> "\"metadataStatus\": {\"status\": null, \"valid\": true}}" + <> "\"abstainVotes\": 0," + <> "\"metadataStatus\": \"URL_NOT_FOUND\"," + <> "\"metadataValid\": true}" instance ToSchema ProposalResponse where declareNamedSchema proxy = do @@ -841,6 +842,12 @@ data DRep , dRepType :: DRepType , dRepLatestTxHash :: Maybe HexText , dRepLatestRegistrationDate :: UTCTime + , dRepBio :: Maybe Text + , dRepDRepName :: Maybe Text + , dRepEmail :: Maybe Text + , dRepReferences :: [Text] + , dRepMetadataStatus :: Maybe Text + , dRepMetadataValid :: Bool } deriving (Generic, Show) @@ -858,7 +865,13 @@ exampleDrep = <> "\"status\": \"Active\"," <> "\"type\": \"DRep\"," <> "\"latestTxHash\": \"47c14a128cd024f1b990c839d67720825921ad87ed875def42641ddd2169b39c\"," - <> "\"latestRegistrationDate\": \"1970-01-01T00:00:00Z\"}" + <> "\"latestRegistrationDate\": \"1970-01-01T00:00:00Z\"," + <> "\"bio\": \"DRep Bio\"," + <> "\"dRepName\": \"DRep Name\"," + <> "\"email\": \"google@gmail.com\"," + <> "\"references\": [\"google.com\"]," + <> "\"metadataStatus\": \"URL_NOT_FOUND\"," + <> "\"metadataValid\": true}" -- ToSchema instance for DRep instance ToSchema DRep where diff --git a/govtool/backend/src/VVA/Config.hs b/govtool/backend/src/VVA/Config.hs index c4781681f..bb2ba48d1 100644 --- a/govtool/backend/src/VVA/Config.hs +++ b/govtool/backend/src/VVA/Config.hs @@ -84,6 +84,8 @@ data VVAConfigInternal , vVAConfigInternalMetadataValidationHost :: Text -- | Metadata validation service port , vVAConfigInternalMetadataValidationPort :: Int + -- | Maximum number of concurrent metadata requests + , vVAConfigInternalMetadataValidationMaxConcurrentRequests :: Int } deriving (FromConfig, Generic, Show) @@ -96,7 +98,8 @@ instance DefaultConfig VVAConfigInternal where vVaConfigInternalCacheDurationSeconds = 20, vVAConfigInternalSentrydsn = "https://username:password@senty.host/id", vVAConfigInternalMetadataValidationHost = "localhost", - vVAConfigInternalMetadataValidationPort = 3001 + vVAConfigInternalMetadataValidationPort = 3001, + vVAConfigInternalMetadataValidationMaxConcurrentRequests = 10 } -- | DEX configuration. @@ -116,6 +119,8 @@ data VVAConfig , metadataValidationHost :: Text -- | Metadata validation service port , metadataValidationPort :: Int + -- | Maximum number of concurrent metadata requests + , metadataValidationMaxConcurrentRequests :: Int } deriving (Generic, Show, ToJSON) @@ -157,7 +162,8 @@ convertConfig VVAConfigInternal {..} = cacheDurationSeconds = vVaConfigInternalCacheDurationSeconds, sentryDSN = vVAConfigInternalSentrydsn, metadataValidationHost = vVAConfigInternalMetadataValidationHost, - metadataValidationPort = vVAConfigInternalMetadataValidationPort + metadataValidationPort = vVAConfigInternalMetadataValidationPort, + metadataValidationMaxConcurrentRequests = vVAConfigInternalMetadataValidationMaxConcurrentRequests } -- | Load configuration from a file specified on the command line. Load from diff --git a/govtool/backend/src/VVA/Metadata.hs b/govtool/backend/src/VVA/Metadata.hs index d6033633f..f3cf05e74 100644 --- a/govtool/backend/src/VVA/Metadata.hs +++ b/govtool/backend/src/VVA/Metadata.hs @@ -1,18 +1,24 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE ScopedTypeVariables #-} module VVA.Metadata where +import Prelude hiding (lookup) import Control.Monad.Except (MonadError, throwError) import Control.Monad.Reader +import Control.Exception (try, Exception) -import Data.Aeson (Value, decode, encode, object, (.=)) +import Data.Typeable (Typeable) +import Data.Vector (toList) +import Data.Aeson.KeyMap (lookup) +import Data.Aeson (Value(..), decode, encode, object, (.=)) import Data.Maybe (fromJust) import Data.ByteString (ByteString) import Data.FileEmbed (embedFile) import Data.Has (Has, getter) import Data.String (fromString) -import Data.Text (Text, unpack) +import Data.Text (Text, unpack, pack) import qualified Data.Text.Encoding as Text import Data.Time.Clock @@ -29,17 +35,79 @@ validateMetadata :: (Has VVAConfig r, Has Manager r, MonadReader r m, MonadIO m, MonadError AppError m) => Text -> Text - -> m Value -validateMetadata url hash = do + -> Maybe Text + -> m (Either Text Value) +validateMetadata url hash standard = do metadataHost <- getMetadataValidationHost metadataPort <- getMetadataValidationPort manager <- asks getter - let requestBody = encode $ object ["url" .= unpack url, "hash" .= unpack hash] + let requestBody = encode $ object (["url" .= unpack url, "hash" .= unpack hash] ++ maybe [] (\x -> ["standard" .= unpack x]) standard) initialRequest <- liftIO $ parseRequest (unpack metadataHost <> ":" <> show metadataPort <> "/validate") let request = initialRequest { method = "POST" , requestBody = RequestBodyLBS requestBody , requestHeaders = [("Content-Type", "application/json")] } - response <- liftIO $ httpLbs request manager - return $ fromJust $ decode $ responseBody response + response <- liftIO $ try $ httpLbs request manager + case response of + Left (e :: HttpException) -> return $ Left (pack $ show e) + Right r -> case decode $ responseBody r of + Nothing -> throwError $ InternalError "Failed to validate metadata" + Just x -> return $ Right x + +getProposalMetadataValidationResult :: + (Has ConnectionPool r, Has Manager r, Has VVAConfig r, MonadReader r m, MonadIO m, MonadFail m, MonadError AppError m) => + Text -> + Text -> + m (MetadataValidationResult ProposalMetadata) +getProposalMetadataValidationResult url hash = do + result <- validateMetadata url hash (Just "CIP108") + case result of + Left e -> return $ MetadataValidationResult False (Just e) Nothing + Right (Object r) -> case go r of + Nothing -> throwError $ InternalError "Failed to validate metadata" + Just x -> return x + where + go result = do + (Bool valid) <- lookup "valid" result + let status = case lookup "status" result of + Just (String s) -> Just s + _ -> Nothing + let proposalMetadata = do + (Object m) <- lookup "metadata" result + let abstract = (\(String s) -> s) <$> lookup "abstract" m + let motivation = (\(String s) -> s) <$> lookup "motivation" m + let rationale = (\(String s) -> s) <$> lookup "rationale" m + let title = (\(String s) -> s) <$> lookup "title" m + let references = (\(Array references') -> map (\(String x) -> x) $ toList references') <$> lookup "references" m + ProposalMetadata <$> abstract <*> motivation <*> rationale <*> title <*> references + return $ MetadataValidationResult valid status proposalMetadata + + + +getDRepMetadataValidationResult :: + (Has ConnectionPool r, Has Manager r, Has VVAConfig r, MonadReader r m, MonadIO m, MonadFail m, MonadError AppError m) => + Text -> + Text -> + m (MetadataValidationResult DRepMetadata) +getDRepMetadataValidationResult url hash = do + result <- validateMetadata url hash (Just "CIPQQQ") + case result of + Left e -> return $ MetadataValidationResult False (Just e) Nothing + Right (Object r) -> case go r of + Nothing -> throwError $ InternalError "Failed to validate metadata" + Just x -> return x + where + go result = do + (Bool valid) <- lookup "valid" result + let status = case lookup "status" result of + Just (String s) -> Just s + _ -> Nothing + let proposalMetadata = do + (Object m) <- lookup "metadata" result + let bio = (\(String s) -> s) <$> lookup "bio" m + let dRepName = (\(String s) -> s) <$> lookup "dRepName" m + let email = (\(String s) -> s) <$> lookup "email" m + let references = (\(Array references') -> map (\(String x) -> x) $ toList references') <$> lookup "references" m + DRepMetadata <$> bio <*> dRepName <*> email <*> references + return $ MetadataValidationResult valid status proposalMetadata \ No newline at end of file diff --git a/govtool/backend/src/VVA/Types.hs b/govtool/backend/src/VVA/Types.hs index fba1e2321..701bdda87 100644 --- a/govtool/backend/src/VVA/Types.hs +++ b/govtool/backend/src/VVA/Types.hs @@ -24,6 +24,7 @@ import Database.PostgreSQL.Simple (Connection) import VVA.Cache import VVA.Config import Network.HTTP.Client (Manager) +import Control.Concurrent.QSem type App m = (MonadReader AppEnv m, MonadIO m, MonadFail m, MonadError AppError m) @@ -33,6 +34,7 @@ data AppEnv , vvaCache :: CacheEnv , vvaConnectionPool :: Pool Connection , vvaTlsManager :: Manager + , vvaMetadataQSem :: QSem } instance Has VVAConfig AppEnv where @@ -51,6 +53,11 @@ instance Has Manager AppEnv where getter AppEnv {vvaTlsManager} = vvaTlsManager modifier f a@AppEnv {vvaTlsManager} = a {vvaTlsManager = f vvaTlsManager} +instance Has QSem AppEnv where + getter AppEnv {vvaMetadataQSem} = vvaMetadataQSem + modifier f a@AppEnv {vvaMetadataQSem} = a {vvaMetadataQSem = f vvaMetadataQSem} + + data AppError = ValidationError Text | NotFoundError Text @@ -133,6 +140,34 @@ data Proposal data TransactionStatus = TransactionConfirmed | TransactionUnconfirmed + +data ProposalMetadata = + ProposalMetadata + { proposalMetadataAbstract :: Text + , proposalMetadataMotivation :: Text + , proposalMetadataRationale :: Text + , proposalMetadataTitle :: Text + , proposalMetadataReferences :: [Text] + } deriving (Show) + +data DRepMetadata = + DRepMetadata + { dRepMetadataBio :: Text + , dRepMetadataDRepName :: Text + , dRepMetadataEmail :: Text + , dRepMetadataReferences :: [Text] + } deriving (Show) + +data MetadataValidationResult a = + MetadataValidationResult + { metadataValidationResultValid :: Bool + , metadataValidationResultStatus :: Maybe Text + , metadataValidationResultMetadata :: Maybe a + } deriving (Show) + + + + data CacheEnv = CacheEnv { proposalListCache :: Cache.Cache () [Proposal] @@ -145,7 +180,8 @@ data CacheEnv , dRepVotingPowerCache :: Cache.Cache Text Integer , dRepListCache :: Cache.Cache () [DRepRegistration] , networkMetricsCache :: Cache.Cache () NetworkMetrics - , metadataValidationCache :: Cache.Cache (Text, Text) Value + , proposalMetadataValidationCache :: Cache.Cache (Text, Text) (MetadataValidationResult ProposalMetadata) + , dRepMetadataValidationCache :: Cache.Cache (Text, Text) (MetadataValidationResult DRepMetadata) } data NetworkMetrics @@ -174,4 +210,6 @@ data MetadataValidationStatus = IncorrectFormat | IncorrectJSONLD | IncorrectHash - | UrlNotFound \ No newline at end of file + | UrlNotFound + + diff --git a/govtool/backend/vva-be.cabal b/govtool/backend/vva-be.cabal index be278ec8f..1cea27716 100644 --- a/govtool/backend/vva-be.cabal +++ b/govtool/backend/vva-be.cabal @@ -100,6 +100,8 @@ library , swagger2 , http-client , http-client-tls + , vector + , async exposed-modules: VVA.Config , VVA.CommandLine diff --git a/govtool/metadata-validation/src/app.service.ts b/govtool/metadata-validation/src/app.service.ts index fb31dd4fd..6aa4b2542 100644 --- a/govtool/metadata-validation/src/app.service.ts +++ b/govtool/metadata-validation/src/app.service.ts @@ -6,7 +6,8 @@ import * as blake from 'blakejs'; import { ValidateMetadataDTO } from '@dto'; import { MetadataValidationStatus } from '@enums'; import { canonizeJSON, validateMetadataStandard, parseMetadata } from '@utils'; -import { ValidateMetadataResult } from '@types'; +import { MetadataStandard, ValidateMetadataResult } from '@types'; + @Injectable() export class AppService { @@ -15,14 +16,16 @@ export class AppService { async validateMetadata({ hash, url, - standard, + standard = MetadataStandard.CIP108, }: ValidateMetadataDTO): Promise { let status: MetadataValidationStatus; let metadata: any; try { + console.log(standard); const { data } = await firstValueFrom( this.httpService.get(url).pipe( catchError(() => { + console.log('url',url); throw MetadataValidationStatus.URL_NOT_FOUND; }), ), diff --git a/scripts/govtool/config/templates/backend-config.json.tpl b/scripts/govtool/config/templates/backend-config.json.tpl index 9ff9f2f11..cab68ebc0 100644 --- a/scripts/govtool/config/templates/backend-config.json.tpl +++ b/scripts/govtool/config/templates/backend-config.json.tpl @@ -11,5 +11,6 @@ "cachedurationseconds": 20, "sentrydsn": "", "metadatavalidationhost": "http://metadata-validation", - "metadatavalidationport": "3000" + "metadatavalidationport": "3000", + "metadatavalidationmaxconcurrentrequests": 10 } From 8b157a83d15cb8ad857bb8e4e016886905de3980 Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Thu, 6 Jun 2024 10:41:09 +0545 Subject: [PATCH 060/162] fix: proposal sorting logic in test --- .../lib/pages/governanceActionsPage.ts | 28 ++++++++++++++----- .../proposalVisibility.loggedin.spec.ts | 4 +-- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts b/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts index a815e4b80..8c2e56988 100644 --- a/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts +++ b/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts @@ -4,12 +4,16 @@ import { FilterOption, IProposal } from "@types"; import environments from "lib/constants/environments"; import GovernanceActionDetailsPage from "./governanceActionDetailsPage"; +const MAX_SLIDES_DISPLAY_PER_TYPE = 6; + export default class GovernanceActionsPage { readonly filterBtn = this.page.getByTestId("filters-button"); readonly sortBtn = this.page.getByTestId("sort-button"); readonly votedTab = this.page.getByTestId("voted-tab"); readonly searchInput = this.page.getByTestId("search-input"); + readonly actionsLoading = this.page.getByRole("progressbar").getByRole("img"); + constructor(private readonly page: Page) {} async goto() { @@ -65,7 +69,7 @@ export default class GovernanceActionsPage { } async getAllProposals() { - await this.page.waitForTimeout(2_000); + await this.page.waitForLoadState("networkidle"); return this.page.locator('[data-testid$="-card"]').all(); } @@ -112,25 +116,35 @@ export default class GovernanceActionsPage { return elements.length ? elements : null; }) ); - proposalData = proposalData.filter(Boolean); + const proposalsByType = proposalData.filter(Boolean); // API validation - proposalData.forEach(async (proposal) => { - if (proposal.length <= 1) return; + proposalsByType.forEach(async (proposalList) => { + if (proposalList.length <= 1) return; - const proposals = proposal; + const proposals = proposalList; for (let i = 0; i <= proposals.length - 2; i++) { const isValid = validationFn(proposals[i], proposals[i + 1]); expect(isValid).toBe(true); } }); + await this.page.waitForTimeout(2_000); // wait for proposals to render + // Frontend validation - for (let dIdx = 0; dIdx <= proposalData.length - 1; dIdx++) { - const proposals = proposalData[dIdx] as IProposal[]; + for (let dIdx = 0; dIdx <= proposalsByType.length - 1; dIdx++) { + const proposals = proposalsByType[0] as IProposal[]; const slides = await this.page .locator(`[data-testid="govaction-${proposals[0].type}-card"]`) .all(); + + const actualSlidesInDisplay = + proposals.length > MAX_SLIDES_DISPLAY_PER_TYPE + ? MAX_SLIDES_DISPLAY_PER_TYPE + : proposals.length; + + expect(slides).toHaveLength(actualSlidesInDisplay); + for (let i = 0; i <= slides.length - 1; i++) { await expect(slides[i]).toContainText(`${proposals[i].txHash}`); } diff --git a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts index 4053ad471..6a264cad6 100644 --- a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts @@ -123,9 +123,9 @@ test("4C_3: Should filter and sort Governance Action Type on governance actions await govActionsPage.sortAndValidate( SortOption.SoonToExpire, (p1, p2) => p1.expiryDate <= p2.expiryDate, - [removeAllSpaces(filterOptionNames[0])] + [removeAllSpaces(filterOptionNames[choice])] ); - await govActionsPage.validateFilters([filterOptionNames[0]]); + await govActionsPage.validateFilters([filterOptionNames[choice]]); }); test("4L: Should search governance actions", async ({ page }) => { From 430ff15a372134bf296889aa925da9e4278d74b1 Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Thu, 6 Jun 2024 11:57:27 +0545 Subject: [PATCH 061/162] fix: proposal filtering validation in test --- .../lib/pages/governanceActionsPage.ts | 19 ++++++++++--------- .../proposalVisibility.loggedin.spec.ts | 2 ++ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts b/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts index 8c2e56988..5b427ffe0 100644 --- a/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts +++ b/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts @@ -18,6 +18,8 @@ export default class GovernanceActionsPage { async goto() { await this.page.goto(`${environments.frontendUrl}/governance_actions`); + await expect(this.page.getByTestId("alert-success")).not.toBeVisible(); + // await this.page.waitForTimeout(2_000); // Wallet popup affects filter in test } async viewProposal( @@ -69,7 +71,7 @@ export default class GovernanceActionsPage { } async getAllProposals() { - await this.page.waitForLoadState("networkidle"); + await this.page.waitForTimeout(4_000); // waits for proposals to render return this.page.locator('[data-testid$="-card"]').all(); } @@ -129,7 +131,7 @@ export default class GovernanceActionsPage { } }); - await this.page.waitForTimeout(2_000); // wait for proposals to render + await this.page.waitForTimeout(4_000); // wait for proposals to render // Frontend validation for (let dIdx = 0; dIdx <= proposalsByType.length - 1; dIdx++) { @@ -155,12 +157,11 @@ export default class GovernanceActionsPage { proposalCard: Locator, filters: string[] ): Promise { - for (const filter of filters) { - try { - await expect(proposalCard.getByText(filter)).toBeVisible(); - return true; - } catch (e) {} - return false; - } + const govActionTypeTextContent = await proposalCard + .locator('[data-testid$="-type"]') + .textContent(); + const govActionType = govActionTypeTextContent.split(":")[1]; + + return filters.includes(govActionType); } } diff --git a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts index 6a264cad6..a6deace55 100644 --- a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts @@ -114,6 +114,8 @@ test("4C_3: Should filter and sort Governance Action Type on governance actions const govActionsPage = new GovernanceActionsPage(page); await govActionsPage.goto(); + await page.waitForTimeout(2_000); // Waits to ensure the alert-success popup does not interfere with the filter operation + await govActionsPage.filterBtn.click(); const choice = Math.floor(Math.random() * filterOptionNames.length); From 9871eaab1eeec077864723fe024a045ae17c687a Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Thu, 6 Jun 2024 12:44:10 +0545 Subject: [PATCH 062/162] chore: Address interference from wallet connected toast notification in proposals test --- .../playwright/lib/pages/governanceActionsPage.ts | 3 +-- .../4-proposal-visibility/proposalVisibility.loggedin.spec.ts | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts b/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts index 5b427ffe0..12d5bbbd3 100644 --- a/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts +++ b/tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts @@ -18,8 +18,7 @@ export default class GovernanceActionsPage { async goto() { await this.page.goto(`${environments.frontendUrl}/governance_actions`); - await expect(this.page.getByTestId("alert-success")).not.toBeVisible(); - // await this.page.waitForTimeout(2_000); // Wallet popup affects filter in test + await this.page.waitForTimeout(2_000); // Waits to ensure the alert-success popup does not interfere } async viewProposal( diff --git a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts index a6deace55..6a264cad6 100644 --- a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.loggedin.spec.ts @@ -114,8 +114,6 @@ test("4C_3: Should filter and sort Governance Action Type on governance actions const govActionsPage = new GovernanceActionsPage(page); await govActionsPage.goto(); - await page.waitForTimeout(2_000); // Waits to ensure the alert-success popup does not interfere with the filter operation - await govActionsPage.filterBtn.click(); const choice = Math.floor(Math.random() * filterOptionNames.length); From 9e5ebcb0fd48bee6ba90ec4c50f12a66036dfe43 Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Thu, 6 Jun 2024 12:07:24 +0545 Subject: [PATCH 063/162] chore: Remove retries for 2E, and 2S --- .../delegationFunctionality.delegation.spec.ts | 11 +++-------- tests/govtool-frontend/playwright/tests/dRep.setup.ts | 4 ++-- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts b/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts index c2b1f8e90..5836c567b 100644 --- a/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts +++ b/tests/govtool-frontend/playwright/tests/2-delegation/delegationFunctionality.delegation.spec.ts @@ -117,8 +117,6 @@ test.describe("Register DRep state", () => { let dRepPage: Page; let wallet: StaticWallet; - test.describe.configure({ retries: 3 }); - test.beforeEach(async ({ page, browser }) => { wallet = await walletManager.popWallet("registerDRep"); @@ -128,16 +126,16 @@ test.describe("Register DRep state", () => { wallet, enableStakeSigning: true, }); + + await dRepPage.goto("/"); + await dRepPage.waitForTimeout(2_000); // Waits to ensure the wallet-connection modal not interfere with interactions }); test("2E. Should register as Direct voter", async ({}, testInfo) => { test.setTimeout(testInfo.timeout + environments.txTimeOut); const dRepId = wallet.dRepId; - await dRepPage.goto("/"); await dRepPage.getByTestId("register-as-sole-voter-button").click(); - - await expect(dRepPage.getByTestId("continue-button")).toBeVisible(); await dRepPage.getByTestId("continue-button").click(); await expect( dRepPage.getByTestId("registration-transaction-submitted-modal") @@ -162,10 +160,7 @@ test.describe("Register DRep state", () => { test("2S. Should retire as a Direct Voter on delegating to another DRep", async ({}, testInfo) => { test.setTimeout(testInfo.timeout + environments.txTimeOut); - await dRepPage.goto("/"); await dRepPage.getByTestId("register-as-sole-voter-button").click(); - - await expect(dRepPage.getByTestId("continue-button")).toBeVisible(); await dRepPage.getByTestId("continue-button").click(); await expect( dRepPage.getByTestId("registration-transaction-submitted-modal") diff --git a/tests/govtool-frontend/playwright/tests/dRep.setup.ts b/tests/govtool-frontend/playwright/tests/dRep.setup.ts index 0fa9a07c2..9563c69b6 100644 --- a/tests/govtool-frontend/playwright/tests/dRep.setup.ts +++ b/tests/govtool-frontend/playwright/tests/dRep.setup.ts @@ -7,8 +7,8 @@ import { expect, test as setup } from "@playwright/test"; import kuberService from "@services/kuberService"; import walletManager from "lib/walletManager"; -const REGISTER_DREP_WALLETS_COUNT = 9; -const DREP_WALLETS_COUNT = 9; +const REGISTER_DREP_WALLETS_COUNT = 8; +const DREP_WALLETS_COUNT = 7; setup.beforeEach(async () => { await setAllureEpic("Setup"); From 5184431b08a90e467d129761b8f3e2852a3daf8f Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Thu, 6 Jun 2024 12:42:09 +0545 Subject: [PATCH 064/162] fix: Resolve balance issue in test case 2W --- tests/govtool-frontend/playwright/lib/constants/staticWallets.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/govtool-frontend/playwright/lib/constants/staticWallets.ts b/tests/govtool-frontend/playwright/lib/constants/staticWallets.ts index db324bccf..f30c090d3 100644 --- a/tests/govtool-frontend/playwright/lib/constants/staticWallets.ts +++ b/tests/govtool-frontend/playwright/lib/constants/staticWallets.ts @@ -22,6 +22,7 @@ export const adaHolderWallets = [ adaHolder03Wallet, adaHolder04Wallet, adaHolder05Wallet, + adaHolder06Wallet, ]; export const userWallets = [user01Wallet]; From aa1ec044b563ae8c0eb7520eb68c390539555741 Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Thu, 6 Jun 2024 13:15:29 +0545 Subject: [PATCH 065/162] chore: Update temporary wallets count --- tests/govtool-frontend/playwright/tests/dRep.setup.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/govtool-frontend/playwright/tests/dRep.setup.ts b/tests/govtool-frontend/playwright/tests/dRep.setup.ts index 9563c69b6..a254f59c9 100644 --- a/tests/govtool-frontend/playwright/tests/dRep.setup.ts +++ b/tests/govtool-frontend/playwright/tests/dRep.setup.ts @@ -7,8 +7,8 @@ import { expect, test as setup } from "@playwright/test"; import kuberService from "@services/kuberService"; import walletManager from "lib/walletManager"; -const REGISTER_DREP_WALLETS_COUNT = 8; -const DREP_WALLETS_COUNT = 7; +const REGISTER_DREP_WALLETS_COUNT = 5; +const DREP_WALLETS_COUNT = 9; setup.beforeEach(async () => { await setAllureEpic("Setup"); From f8741fe95d70533ba42322af7355e56539889ea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sza=C5=82owski?= Date: Mon, 6 May 2024 09:29:38 +0200 Subject: [PATCH 066/162] docs: create outline of the architecture documentation --- docs/architecture/Architecture diagram.png | Bin 0 -> 190598 bytes docs/architecture/README.md | 110 +++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 docs/architecture/Architecture diagram.png create mode 100644 docs/architecture/README.md diff --git a/docs/architecture/Architecture diagram.png b/docs/architecture/Architecture diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..740fcd5b3f44c2c6132e7be721e8fe3fe7c3c305 GIT binary patch literal 190598 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 z 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 z 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 From cb173e321216f0bccea57d1810aa08feeb753d33 Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Thu, 6 Jun 2024 14:03:51 +0545 Subject: [PATCH 067/162] fix: Resolve wallet popup timeout issue in voting --- .../5-proposal-functionality/proposalFunctionality.dRep.spec.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/govtool-frontend/playwright/tests/5-proposal-functionality/proposalFunctionality.dRep.spec.ts b/tests/govtool-frontend/playwright/tests/5-proposal-functionality/proposalFunctionality.dRep.spec.ts index 411a5e8a4..55d401efa 100644 --- a/tests/govtool-frontend/playwright/tests/5-proposal-functionality/proposalFunctionality.dRep.spec.ts +++ b/tests/govtool-frontend/playwright/tests/5-proposal-functionality/proposalFunctionality.dRep.spec.ts @@ -138,6 +138,8 @@ test.describe("Perform voting", () => { let dRepPage: Page; test.beforeEach(async ({ page, browser }) => { + test.slow(); // Due to queue in pop wallets + const wallet = await walletManager.popWallet("registeredDRep"); const tempDRepAuth = await createTempDRepAuth(page, wallet); From c1e311860689514be2c2e939962436688492f4ac Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Thu, 6 Jun 2024 15:51:20 +0545 Subject: [PATCH 068/162] chore: Replace hardcoded dRep registration amount with protocol params --- .../playwright/lib/services/kuberService.ts | 10 ++++++++-- tests/govtool-frontend/playwright/lib/types.ts | 5 +++++ tests/govtool-frontend/playwright/tests/dRep.setup.ts | 9 ++++++++- .../govtool-frontend/playwright/tests/faucet.setup.ts | 2 +- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/tests/govtool-frontend/playwright/lib/services/kuberService.ts b/tests/govtool-frontend/playwright/lib/services/kuberService.ts index 51b9cf740..ac6ff8942 100644 --- a/tests/govtool-frontend/playwright/lib/services/kuberService.ts +++ b/tests/govtool-frontend/playwright/lib/services/kuberService.ts @@ -1,5 +1,5 @@ import { faucetWallet } from "@constants/staticWallets"; -import { KuberValue, StaticWallet } from "@types"; +import { KuberValue, QueryProtocolParams, StaticWallet } from "@types"; import * as blake from "blakejs"; import environments from "lib/constants/environments"; import { LockInterceptor, LockInterceptorInfo } from "lib/lockInterceptor"; @@ -168,7 +168,9 @@ const kuberService = { return kuber.signAndSubmitTx(req); }, - multipleTransferADA: (outputs: { address: string; value: string }[]) => { + multipleTransferADA: ( + outputs: { address: string; value: string | number }[] + ) => { const kuber = new Kuber(faucetWallet.address, faucetWallet.payment.private); const req = { outputs, @@ -326,6 +328,10 @@ const kuberService = { >; }, + queryProtocolParams() { + return callKuber("/api/v3/protocol-params") as Promise; + }, + voteOnProposal( addr: string, signingKey: string, diff --git a/tests/govtool-frontend/playwright/lib/types.ts b/tests/govtool-frontend/playwright/lib/types.ts index db1b932d0..2b6d24545 100644 --- a/tests/govtool-frontend/playwright/lib/types.ts +++ b/tests/govtool-frontend/playwright/lib/types.ts @@ -92,3 +92,8 @@ export type IDRep = { latestTxHash: string; latestRegistrationDate: string; }; + +export type QueryProtocolParams = { + dRepDeposit: number; + govActionDeposit: number; +}; diff --git a/tests/govtool-frontend/playwright/tests/dRep.setup.ts b/tests/govtool-frontend/playwright/tests/dRep.setup.ts index 0fa9a07c2..773591151 100644 --- a/tests/govtool-frontend/playwright/tests/dRep.setup.ts +++ b/tests/govtool-frontend/playwright/tests/dRep.setup.ts @@ -10,6 +10,13 @@ import walletManager from "lib/walletManager"; const REGISTER_DREP_WALLETS_COUNT = 9; const DREP_WALLETS_COUNT = 9; +let dRepDeposit: number; + +setup.beforeAll(async () => { + const res = await kuberService.queryProtocolParams(); + dRepDeposit = res.dRepDeposit; +}); + setup.beforeEach(async () => { await setAllureEpic("Setup"); await setAllureStory("Register DRep"); @@ -64,7 +71,7 @@ setup("Setup temporary DRep wallets", async () => { // transfer 600 ADA for dRep registration const amountOutputs = registerDRepWallets.map((wallet) => { - return { address: wallet.address, value: `${600}A` }; + return { address: wallet.address, value: dRepDeposit }; }); const transferRes = await kuberService.multipleTransferADA(amountOutputs); await pollTransaction(transferRes.txId, transferRes.lockInfo); diff --git a/tests/govtool-frontend/playwright/tests/faucet.setup.ts b/tests/govtool-frontend/playwright/tests/faucet.setup.ts index bd20cba9a..2b872e8af 100644 --- a/tests/govtool-frontend/playwright/tests/faucet.setup.ts +++ b/tests/govtool-frontend/playwright/tests/faucet.setup.ts @@ -15,7 +15,7 @@ setup.beforeEach(async () => { setup("Faucet setup", async () => { const balance = await kuberService.getBalance(faucetWallet.address); - if (balance > 1_00_000) return; + if (balance > 100_000) return; const res = await loadAmountFromFaucet(faucetWallet.address); await pollTransaction(res.txid); From 274f40af2f576b5263f924ab24d06642dcafbf2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Thu, 6 Jun 2024 12:25:57 +0200 Subject: [PATCH 069/162] change types --- govtool/frontend/src/models/api.ts | 44 ++++++++++---------------- govtool/frontend/src/types/global.d.ts | 38 ---------------------- 2 files changed, 16 insertions(+), 66 deletions(-) diff --git a/govtool/frontend/src/models/api.ts b/govtool/frontend/src/models/api.ts index 8e03bdd14..ec17acab9 100644 --- a/govtool/frontend/src/models/api.ts +++ b/govtool/frontend/src/models/api.ts @@ -62,40 +62,28 @@ type ProposalVote = { vote: Vote; }; -type ProposalData = { - id: string; - type: string; - details?: ActionDetailsType; - expiryDate: string; - expiryEpochNo: number; +export type ProposalData = { + abstainVotes: number; createdDate: string; createdEpochNo: number; - url: string; - metadataHash: string; - metadataStatus: { - raw: { - valid: boolean; - status?: MetadataValidationStatus; - metadata?: { - abstract?: string; - motivation?: string; - rationale?: string; - references?: string[]; - title?: string; - }; - }; - status?: MetadataValidationStatus; - valid: boolean; - }; - yesVotes: number; + expiryDate: string; + expiryEpochNo: number; + id: string; + index: number; + metadataValid: boolean; noVotes: number; - abstainVotes: number; txHash: string; - index: number; - title?: string; - about?: string; + type: string; + yesVotes: number; + abstract?: string; + details?: ActionDetailsType; + metadataHash?: string; + metadataStatus?: MetadataValidationStatus; motivation?: string; rationale?: string; + references?: string[]; + title?: string; + url?: string; }; export interface VotedProposal { vote: ProposalVote; diff --git a/govtool/frontend/src/types/global.d.ts b/govtool/frontend/src/types/global.d.ts index d4cef96b3..0e91e6dcd 100644 --- a/govtool/frontend/src/types/global.d.ts +++ b/govtool/frontend/src/types/global.d.ts @@ -1,5 +1,3 @@ -import { MetadataValidationStatus } from "@models"; - export {}; declare global { @@ -18,42 +16,6 @@ declare global { [key: string]: string | number; }; - type ActionType = { - id: string; - type: string; - details?: ActionDetailsType; - expiryDate: string; - expiryEpochNo: number; - createdDate: string; - createdEpochNo: number; - url?: string; - metadataHash?: string; - metadataStatus: { - raw: { - valid: boolean; - status?: MetadataValidationStatus; - metadata?: { - abstract?: string; - motivation?: string; - rationale?: string; - references?: string[]; - title?: string; - }; - }; - status?: MetadataValidationStatus; - valid: boolean; - }; - yesVotes: number; - noVotes: number; - abstainVotes: number; - index: number; - txHash: string; - title?: string; - about?: string; - motivation?: string; - rationale?: string; - }; - interface ActionVotedOnType extends ActionTypeToDsiplay { vote: VoteType; } From 40e05a93a4983cb0b772b042601260ef6a38202f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Thu, 6 Jun 2024 12:26:15 +0200 Subject: [PATCH 070/162] fix util and test --- .../src/utils/removeDuplicatedProposals.ts | 4 +++- .../tests/removeDuplicatedProposals.test.ts | 24 +++++++------------ 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/govtool/frontend/src/utils/removeDuplicatedProposals.ts b/govtool/frontend/src/utils/removeDuplicatedProposals.ts index a0d068377..1a36ac2d3 100644 --- a/govtool/frontend/src/utils/removeDuplicatedProposals.ts +++ b/govtool/frontend/src/utils/removeDuplicatedProposals.ts @@ -1,4 +1,6 @@ -export const removeDuplicatedProposals = (proposals: ActionType[]) => { +import { ProposalData } from "@models"; + +export const removeDuplicatedProposals = (proposals: ProposalData[]) => { if (!proposals) return []; const uniqueGovActionIds = new Set(); return proposals.filter((item) => { diff --git a/govtool/frontend/src/utils/tests/removeDuplicatedProposals.test.ts b/govtool/frontend/src/utils/tests/removeDuplicatedProposals.test.ts index 13692a44e..da127beeb 100644 --- a/govtool/frontend/src/utils/tests/removeDuplicatedProposals.test.ts +++ b/govtool/frontend/src/utils/tests/removeDuplicatedProposals.test.ts @@ -1,3 +1,4 @@ +import { ProposalData } from "@models"; import { removeDuplicatedProposals } from ".."; const uniqueProposals = [ @@ -22,11 +23,8 @@ const uniqueProposals = [ abstainVotes: 81528377728, title: "Proposal 1322 Title", about: "This is about Proposal 1322", - metadataStatus: { - raw: { status: undefined, valid: true }, - status: undefined, - valid: false, - }, + metadataStatus: undefined, + metadataValid: false, motivation: "Motivation behind Proposal 1322", rationale: "Rationale for Proposal 1322", }, @@ -51,11 +49,8 @@ const uniqueProposals = [ abstainVotes: 81528377728, title: "Proposal 1338 Title", about: "This is about Proposal 1338", - metadataStatus: { - raw: { status: undefined, valid: true }, - status: undefined, - valid: false, - }, + metadataStatus: undefined, + metadataValid: false, motivation: "Motivation behind Proposal 1338", rationale: "Rationale for Proposal 1338", }, @@ -80,11 +75,8 @@ const uniqueProposals = [ abstainVotes: 81528377728, title: "Proposal 1335 Title", about: "This is about Proposal 1335", - metadataStatus: { - raw: { status: undefined, valid: true }, - status: undefined, - valid: false, - }, + metadataStatus: undefined, + metadataValid: false, motivation: "Motivation behind Proposal 1335", rationale: "Rationale for Proposal 1335", }, @@ -114,7 +106,7 @@ describe("remove duplicated proposals", () => { }); it("returns empty array if input is empty", () => { - const proposals: ActionType[] = []; + const proposals: ProposalData[] = []; expect(removeDuplicatedProposals(proposals).length).toBe(0); }); }); From 81d8e8def17cf46dee39c5985ad5221da08e347b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Thu, 6 Jun 2024 12:26:30 +0200 Subject: [PATCH 071/162] change types in hooks --- .../src/hooks/queries/useGetProposalsInfiniteQuery.ts | 3 ++- govtool/frontend/src/hooks/queries/useGetProposalsQuery.ts | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/govtool/frontend/src/hooks/queries/useGetProposalsInfiniteQuery.ts b/govtool/frontend/src/hooks/queries/useGetProposalsInfiniteQuery.ts index ca1a179aa..cb45a8188 100644 --- a/govtool/frontend/src/hooks/queries/useGetProposalsInfiniteQuery.ts +++ b/govtool/frontend/src/hooks/queries/useGetProposalsInfiniteQuery.ts @@ -2,6 +2,7 @@ import { useInfiniteQuery } from "react-query"; import { QUERY_KEYS } from "@consts"; import { useCardano } from "@context"; +import { ProposalData } from "@models"; import { getProposals, GetProposalsArguments } from "@services"; export const useGetProposalsInfiniteQuery = ({ @@ -56,7 +57,7 @@ export const useGetProposalsInfiniteQuery = ({ const proposals = data?.pages.flatMap( (page) => page.elements, - ) as ActionType[]; + ) as ProposalData[]; return { proposalsfetchNextPage: fetchNextPage, diff --git a/govtool/frontend/src/hooks/queries/useGetProposalsQuery.ts b/govtool/frontend/src/hooks/queries/useGetProposalsQuery.ts index af8db9d7c..f8f0ce857 100644 --- a/govtool/frontend/src/hooks/queries/useGetProposalsQuery.ts +++ b/govtool/frontend/src/hooks/queries/useGetProposalsQuery.ts @@ -2,6 +2,7 @@ import { useQuery } from "react-query"; import { QUERY_KEYS } from "@consts"; import { useCardano } from "@context"; +import { ProposalData } from "@models"; import { getProposals, GetProposalsArguments } from "@services"; import { useGetVoterInfo } from "."; @@ -13,7 +14,7 @@ export const useGetProposalsQuery = ({ const { dRepID, pendingTransaction } = useCardano(); const { voter } = useGetVoterInfo(); - const fetchProposals = async (): Promise => { + const fetchProposals = async (): Promise => { const allProposals = await Promise.all( filters.map((filter) => getProposals({ @@ -51,7 +52,7 @@ export const useGetProposalsQuery = ({ }; }; -const groupByType = (data?: ActionType[]) => +const groupByType = (data?: ProposalData[]) => data?.reduce>>((groups, item) => { const itemType = item.type; From 0d23677471c131f6e606f110ce9cea35797c4d27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Thu, 6 Jun 2024 12:26:56 +0200 Subject: [PATCH 072/162] adjust screens and components --- .../molecules/GovernanceActionCard.tsx | 18 +++++----- .../GovernanceActionDetailsCardLinks.tsx | 8 ++--- .../molecules/GovernanceVotedOnCard.tsx | 19 +++++----- .../DashboardGovernanceActionDetails.tsx | 36 +++++-------------- .../organisms/GovernanceActionsToVote.tsx | 7 ++-- .../DashboardGovernanceActionsCategory.tsx | 4 +-- .../src/pages/GovernanceActionDetails.tsx | 32 +++++------------ .../src/pages/GovernanceActionsCategory.tsx | 4 +-- 8 files changed, 49 insertions(+), 79 deletions(-) diff --git a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx index 7d607d7c9..47709ff47 100644 --- a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx +++ b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx @@ -16,9 +16,10 @@ import { getProposalTypeLabel, getProposalTypeNoEmptySpaces, } from "@utils"; +import { ProposalData } from "@models"; type ActionTypeProps = Omit< - ActionType, + ProposalData, | "yesVotes" | "noVotes" | "abstainVotes" @@ -35,6 +36,7 @@ type ActionTypeProps = Omit< export const GovernanceActionCard: FC = ({ ...props }) => { const { + abstract, type, inProgress = false, expiryDate, @@ -45,6 +47,8 @@ export const GovernanceActionCard: FC = ({ ...props }) => { txHash, index, metadataStatus, + metadataValid, + title, } = props; const { isMobile, screenWidth } = useScreenDimension(); const { t } = useTranslation(); @@ -62,10 +66,10 @@ export const GovernanceActionCard: FC = ({ ...props }) => { justifyContent: "space-between", boxShadow: "0px 4px 15px 0px #DDE3F5", borderRadius: "20px", - backgroundColor: !metadataStatus.raw.valid + backgroundColor: !metadataValid ? "rgba(251, 235, 235, 0.50)" : "rgba(255, 255, 255, 0.3)", - ...(!metadataStatus.raw.valid && { + ...(!metadataValid && { border: "1px solid #F6D5D5", }), ...(inProgress && { @@ -81,14 +85,12 @@ export const GovernanceActionCard: FC = ({ ...props }) => { }} > { const { isMobile } = useScreenDimension(); const { t } = useTranslation(); @@ -43,13 +43,13 @@ export const GovernanceActionDetailsCardLinks = ({ > {links.map((link) => ( { openModal({ type: "externalLink", state: { - externalLink: link.uri, + externalLink: link, }, }); }} diff --git a/govtool/frontend/src/components/molecules/GovernanceVotedOnCard.tsx b/govtool/frontend/src/components/molecules/GovernanceVotedOnCard.tsx index 149ba69a8..09934e565 100644 --- a/govtool/frontend/src/components/molecules/GovernanceVotedOnCard.tsx +++ b/govtool/frontend/src/components/molecules/GovernanceVotedOnCard.tsx @@ -28,14 +28,17 @@ export const GovernanceVotedOnCard = ({ votedProposal, inProgress }: Props) => { const navigate = useNavigate(); const { proposal, vote } = votedProposal; const { + abstract, createdDate, createdEpochNo, expiryDate, expiryEpochNo, index, metadataStatus, + metadataValid, txHash, type, + title, } = proposal; const { isMobile, screenWidth } = useScreenDimension(); @@ -52,13 +55,13 @@ export const GovernanceVotedOnCard = ({ votedProposal, inProgress }: Props) => { justifyContent: "space-between", boxShadow: "0px 4px 15px 0px #DDE3F5", borderRadius: "20px", - backgroundColor: !metadataStatus.raw.valid + backgroundColor: !metadataValid ? "rgba(251, 235, 235, 0.50)" : "rgba(255, 255, 255, 0.3)", // TODO: To decide if voted on cards can be actually in progress border: inProgress ? "1px solid #FFCBAD" - : !metadataStatus.raw.valid + : !metadataValid ? "1px solid #F6D5D5" : "1px solid #C0E4BA", }} @@ -73,14 +76,12 @@ export const GovernanceVotedOnCard = ({ votedProposal, inProgress }: Props) => { }} > { voteUrl: vote.url, voteDate: vote.date, voteEpochNo: vote.epochNo, - isDataMissing: metadataStatus.raw.valid - ? false - : metadataStatus.raw.status, + isDataMissing: metadataValid ? false : metadataStatus, }, }, ) diff --git a/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx b/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx index 893d1f2d6..6235452c5 100644 --- a/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx +++ b/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx @@ -38,9 +38,7 @@ export const DashboardGovernanceActionDetails = () => { state ? state.txHash : data?.proposal.txHash ?? "", state ? state.index : data?.proposal.index ?? "", ); - const title = state - ? state.metadataStatus.raw?.metadata?.title - : data?.proposal.metadataStatus.raw?.metadata?.title; + const title = state ? state?.title : data?.proposal?.title; return ( { isDataMissing={ state ? state.isDataMissing - : data?.proposal.metadataStatus.raw.valid + : data?.proposal.metadataValid ? false - : data?.proposal.metadataStatus.raw.status + : data?.proposal.metadataStatus } /> { isDataMissing={ state ? state.isDataMissing - : data?.proposal.metadataStatus.raw.valid + : data?.proposal.metadataValid ? false - : data?.proposal.metadataStatus.raw.status + : data?.proposal.metadataStatus } expiryDate={ state @@ -146,26 +144,10 @@ export const DashboardGovernanceActionDetails = () => { details={state ? state.details : data.proposal.details} url={state ? state.url : data.proposal.url} title={title} - links={ - state - ? state.metadataStatus.raw?.metadata?.references - : data.proposal.metadataStatus.raw?.metadata?.references - } - about={ - state - ? state.metadataStatus.raw?.metadata?.abstract - : data.proposal.metadataStatus.raw?.metadata?.abstract - } - motivation={ - state - ? state.metadataStatus.raw?.metadata?.motivation - : data.proposal.metadataStatus.raw?.metadata?.motivation - } - rationale={ - state - ? state.metadataStatus.raw?.metadata?.rationale - : data.proposal.metadataStatus.raw?.metadata?.rationale - } + links={state ? state?.references : data.proposal?.references} + about={state ? state?.abstract : data.proposal?.abstract} + motivation={state ? state?.motivation : data.proposal?.motivation} + rationale={state ? state?.rationale : data.proposal?.rationale} yesVotes={state ? state.yesVotes : data.proposal.yesVotes} voteFromEP={data?.vote?.vote} voteUrlFromEP={data?.vote?.url} diff --git a/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx b/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx index 841aa7928..8e88c7a9d 100644 --- a/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx +++ b/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx @@ -5,6 +5,7 @@ import { Typography } from "@atoms"; import { PATHS } from "@consts"; import { useCardano } from "@context"; import { useScreenDimension, useTranslation } from "@hooks"; +import { ProposalData } from "@models"; import { GovernanceActionCard } from "@molecules"; import { getProposalTypeTitle, getFullGovActionId, openInNewTab } from "@utils"; import { Slider } from "@organisms"; @@ -12,7 +13,7 @@ import { Slider } from "@organisms"; type GovernanceActionsToVoteProps = { filters: string[]; sorting: string; - proposals: { title: string; actions: ActionType[] }[]; + proposals: { title: string; actions: ProposalData[] }[]; onDashboard?: boolean; searchPhrase?: string; }; @@ -87,9 +88,9 @@ export const GovernanceActionsToVote = ({ { state: { ...action, - isDataMissing: action.metadataStatus.raw.valid + isDataMissing: action.metadataValid ? false - : action.metadataStatus.raw.status, + : action.metadataStatus, }, }, ); diff --git a/govtool/frontend/src/pages/DashboardGovernanceActionsCategory.tsx b/govtool/frontend/src/pages/DashboardGovernanceActionsCategory.tsx index b643f69db..2817955bb 100644 --- a/govtool/frontend/src/pages/DashboardGovernanceActionsCategory.tsx +++ b/govtool/frontend/src/pages/DashboardGovernanceActionsCategory.tsx @@ -162,9 +162,9 @@ export const DashboardGovernanceActionsCategory = () => { state: { ...item, openedFromCategoryPage: true, - isDataMissing: item.metadataStatus.raw.valid + isDataMissing: item.metadataValid ? false - : item.metadataStatus.raw.status, + : item.metadataStatus, }, }, ); diff --git a/govtool/frontend/src/pages/GovernanceActionDetails.tsx b/govtool/frontend/src/pages/GovernanceActionDetails.tsx index 1557ebd2e..54a0f6c0c 100644 --- a/govtool/frontend/src/pages/GovernanceActionDetails.tsx +++ b/govtool/frontend/src/pages/GovernanceActionDetails.tsx @@ -41,9 +41,7 @@ export const GovernanceActionDetails = () => { state ? state.index : data?.proposal.index ?? "", ); - const title = state - ? state.metadataStatus.raw?.metadata?.title - : data?.proposal.metadataStatus.raw?.metadata?.title; + const title = state ? state?.title : data?.proposal?.title; useEffect(() => { if (isEnabled && getItemFromLocalStorage(`${WALLET_LS_KEY}_stake_key`)) { @@ -91,9 +89,9 @@ export const GovernanceActionDetails = () => { isDataMissing={ state ? state.isDataMissing - : data?.proposal.metadataStatus.raw.valid + : data?.proposal.metadataValid ? false - : data?.proposal.metadataStatus.raw.status + : data?.proposal.metadataStatus } /> { isDataMissing={ state ? state.isDataMissing - : data?.proposal.metadataStatus.raw.valid + : data?.proposal.metadataValid ? false - : data?.proposal.metadataStatus.raw.status + : data?.proposal.metadataStatus } expiryDate={ state @@ -168,26 +166,14 @@ export const GovernanceActionDetails = () => { details={state ? state.details : data.proposal.details} url={state ? state.url : data.proposal.url} title={title} - about={ - state - ? state.metadataStatus.raw?.metadata?.abstract - : data.proposal.metadataStatus.raw?.metadata?.abstract - } + about={state ? state?.abstract : data.proposal?.abstract} motivation={ - state - ? state.metadataStatus.raw?.metadata?.motivation - : data.proposal.metadataStatus.raw?.metadata?.motivation + state ? state?.motivation : data.proposal?.motivation } rationale={ - state - ? state.metadataStatus.raw?.metadata?.rationale - : data.proposal.metadataStatus.raw?.metadata?.rationale - } - links={ - state - ? state.metadataStatus.raw?.metadata?.references - : data.proposal.metadataStatus.raw?.metadata?.references + state ? state?.rationale : data.proposal?.rationale } + links={state ? state?.references : data.proposal?.references} yesVotes={state ? state.yesVotes : data.proposal.yesVotes} govActionId={fullProposalId} /> diff --git a/govtool/frontend/src/pages/GovernanceActionsCategory.tsx b/govtool/frontend/src/pages/GovernanceActionsCategory.tsx index 4e9c47d68..c0a68d9c2 100644 --- a/govtool/frontend/src/pages/GovernanceActionsCategory.tsx +++ b/govtool/frontend/src/pages/GovernanceActionsCategory.tsx @@ -153,9 +153,9 @@ export const GovernanceActionsCategory = () => { state: { ...item, openedFromCategoryPage: true, - isDataMissing: item.metadataStatus.raw.valid + isDataMissing: item.metadataValid ? false - : item.metadataStatus.raw.status, + : item.metadataStatus, }, }, ); From 5e9b603f924ebf8de08dbe92c317b2e6926d6a07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sza=C5=82owski?= Date: Thu, 6 Jun 2024 13:39:53 +0200 Subject: [PATCH 073/162] feat: update maintenance page title&description --- govtool/frontend/maintenance-page/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/govtool/frontend/maintenance-page/index.html b/govtool/frontend/maintenance-page/index.html index 47643b5ce..2f6092d4c 100644 --- a/govtool/frontend/maintenance-page/index.html +++ b/govtool/frontend/maintenance-page/index.html @@ -3,7 +3,7 @@ - Error Page + Maintenance Page Error Page Image Date: Thu, 6 Jun 2024 13:51:27 +0200 Subject: [PATCH 074/162] chore: set usersnap api key on dockerfile --- govtool/frontend/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/govtool/frontend/Dockerfile b/govtool/frontend/Dockerfile index bce95e8fb..88eff036a 100644 --- a/govtool/frontend/Dockerfile +++ b/govtool/frontend/Dockerfile @@ -4,6 +4,7 @@ ARG VITE_GTM_ID ARG VITE_NETWORK_FLAG=0 ARG VITE_SENTRY_DSN ARG NPMRC_TOKEN +ARG VITE_USERSNAP_SPACE_API_KEY ENV NODE_OPTIONS=--max_old_space_size=4096 WORKDIR /src From 8130f4ae613ea669c54236c77f5881dc8ae51fe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Thu, 6 Jun 2024 13:56:29 +0200 Subject: [PATCH 075/162] improvement --- .../src/components/molecules/Breadcrumbs.tsx | 4 +-- .../molecules/DataMissingInfoBox.tsx | 2 +- .../molecules/GovernanceActionCard.tsx | 2 +- .../molecules/GovernanceActionCardHeader.tsx | 4 +-- .../GovernanceActionDetailsCardHeader.tsx | 4 +-- .../molecules/GovernanceVotedOnCard.tsx | 3 +- .../DashboardGovernanceActionDetails.tsx | 12 ++------ .../organisms/GovernanceActionDetailsCard.tsx | 4 +-- .../GovernanceActionDetailsCardData.tsx | 4 +-- .../organisms/GovernanceActionsToVote.tsx | 3 -- .../DashboardGovernanceActionsCategory.tsx | 3 -- .../src/pages/GovernanceActionDetails.tsx | 12 ++------ .../src/pages/GovernanceActionsCategory.tsx | 3 -- .../src/stories/GovernanceAction.stories.ts | 28 ++++++------------- .../GovernanceActionDetailsCard.stories.ts | 2 +- 15 files changed, 26 insertions(+), 64 deletions(-) diff --git a/govtool/frontend/src/components/molecules/Breadcrumbs.tsx b/govtool/frontend/src/components/molecules/Breadcrumbs.tsx index 83f191034..1bc5cbbb0 100644 --- a/govtool/frontend/src/components/molecules/Breadcrumbs.tsx +++ b/govtool/frontend/src/components/molecules/Breadcrumbs.tsx @@ -11,7 +11,7 @@ type BreadcrumbsProps = { elementOne: string; elementOnePath: To; elementTwo: string; - isDataMissing: MetadataValidationStatus | boolean; + isDataMissing: MetadataValidationStatus | null; }; export const Breadcrumbs = ({ @@ -55,7 +55,7 @@ export const Breadcrumbs = ({ textOverflow: "ellipsis", }} > - {(isDataMissing !== false && + {(isDataMissing && getMetadataDataMissingStatusTranslation( isDataMissing as MetadataValidationStatus, )) || diff --git a/govtool/frontend/src/components/molecules/DataMissingInfoBox.tsx b/govtool/frontend/src/components/molecules/DataMissingInfoBox.tsx index 0b0427483..7354186c3 100644 --- a/govtool/frontend/src/components/molecules/DataMissingInfoBox.tsx +++ b/govtool/frontend/src/components/molecules/DataMissingInfoBox.tsx @@ -10,7 +10,7 @@ export const DataMissingInfoBox = ({ isInProgress, isSubmitted, }: { - isDataMissing: boolean | MetadataValidationStatus; + isDataMissing: MetadataValidationStatus | null; isInProgress?: boolean; isSubmitted?: boolean; }) => { diff --git a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx index 47709ff47..9bdd8be21 100644 --- a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx +++ b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx @@ -86,7 +86,7 @@ export const GovernanceActionCard: FC = ({ ...props }) => { > - {(isDataMissing !== false && + {(isDataMissing && getMetadataDataMissingStatusTranslation( isDataMissing as MetadataValidationStatus, )) || diff --git a/govtool/frontend/src/components/molecules/GovernanceActionDetailsCardHeader.tsx b/govtool/frontend/src/components/molecules/GovernanceActionDetailsCardHeader.tsx index 6ea3c2d29..8a1ceac1f 100644 --- a/govtool/frontend/src/components/molecules/GovernanceActionDetailsCardHeader.tsx +++ b/govtool/frontend/src/components/molecules/GovernanceActionDetailsCardHeader.tsx @@ -8,7 +8,7 @@ import { getMetadataDataMissingStatusTranslation } from "@/utils"; type GovernanceActionDetailsCardHeaderProps = { title?: string; - isDataMissing: boolean | MetadataValidationStatus; + isDataMissing: MetadataValidationStatus | null; }; export const GovernanceActionDetailsCardHeader = ({ @@ -48,7 +48,7 @@ export const GovernanceActionDetailsCardHeader = ({ }} variant="title2" > - {(isDataMissing !== false && + {(isDataMissing && getMetadataDataMissingStatusTranslation( isDataMissing as MetadataValidationStatus, )) || diff --git a/govtool/frontend/src/components/molecules/GovernanceVotedOnCard.tsx b/govtool/frontend/src/components/molecules/GovernanceVotedOnCard.tsx index 09934e565..b10d51564 100644 --- a/govtool/frontend/src/components/molecules/GovernanceVotedOnCard.tsx +++ b/govtool/frontend/src/components/molecules/GovernanceVotedOnCard.tsx @@ -77,7 +77,7 @@ export const GovernanceVotedOnCard = ({ votedProposal, inProgress }: Props) => { > { voteUrl: vote.url, voteDate: vote.date, voteEpochNo: vote.epochNo, - isDataMissing: metadataValid ? false : metadataStatus, }, }, ) diff --git a/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx b/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx index 6235452c5..6b4332f9a 100644 --- a/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx +++ b/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx @@ -54,11 +54,7 @@ export const DashboardGovernanceActionDetails = () => { elementOnePath={PATHS.dashboardGovernanceActions} elementTwo={title} isDataMissing={ - state - ? state.isDataMissing - : data?.proposal.metadataValid - ? false - : data?.proposal.metadataStatus + state ? state.metadataStatus : data?.proposal.metadataStatus } /> { state ? state.createdEpochNo : data.proposal.createdEpochNo } isDataMissing={ - state - ? state.isDataMissing - : data?.proposal.metadataValid - ? false - : data?.proposal.metadataStatus + state ? state.metadataStatus : data?.proposal.metadataStatus } expiryDate={ state diff --git a/govtool/frontend/src/components/organisms/GovernanceActionDetailsCard.tsx b/govtool/frontend/src/components/organisms/GovernanceActionDetailsCard.tsx index 9eed968ea..ba6311519 100644 --- a/govtool/frontend/src/components/organisms/GovernanceActionDetailsCard.tsx +++ b/govtool/frontend/src/components/organisms/GovernanceActionDetailsCard.tsx @@ -24,9 +24,9 @@ type GovernanceActionDetailsCardProps = { motivation?: string; rationale?: string; yesVotes: number; - links?: GovernanceActionLink[]; + links?: string[]; govActionId: string; - isDataMissing: boolean | MetadataValidationStatus; + isDataMissing: null | MetadataValidationStatus; isDashboard?: boolean; isVoter?: boolean; voteFromEP?: string; diff --git a/govtool/frontend/src/components/organisms/GovernanceActionDetailsCardData.tsx b/govtool/frontend/src/components/organisms/GovernanceActionDetailsCardData.tsx index 61d37d1fa..1923ccc2c 100644 --- a/govtool/frontend/src/components/organisms/GovernanceActionDetailsCardData.tsx +++ b/govtool/frontend/src/components/organisms/GovernanceActionDetailsCardData.tsx @@ -21,11 +21,11 @@ type GovernanceActionDetailsCardDataProps = { expiryEpochNo: number; govActionId: string; isDashboard?: boolean; - isDataMissing: boolean | MetadataValidationStatus; + isDataMissing: MetadataValidationStatus | null; isInProgress?: boolean; isOneColumn: boolean; isSubmitted?: boolean; - links?: GovernanceActionLink[]; + links?: string[]; motivation?: string; rationale?: string; title?: string; diff --git a/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx b/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx index 8e88c7a9d..8a4643a17 100644 --- a/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx +++ b/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx @@ -88,9 +88,6 @@ export const GovernanceActionsToVote = ({ { state: { ...action, - isDataMissing: action.metadataValid - ? false - : action.metadataStatus, }, }, ); diff --git a/govtool/frontend/src/pages/DashboardGovernanceActionsCategory.tsx b/govtool/frontend/src/pages/DashboardGovernanceActionsCategory.tsx index 2817955bb..c1982d563 100644 --- a/govtool/frontend/src/pages/DashboardGovernanceActionsCategory.tsx +++ b/govtool/frontend/src/pages/DashboardGovernanceActionsCategory.tsx @@ -162,9 +162,6 @@ export const DashboardGovernanceActionsCategory = () => { state: { ...item, openedFromCategoryPage: true, - isDataMissing: item.metadataValid - ? false - : item.metadataStatus, }, }, ); diff --git a/govtool/frontend/src/pages/GovernanceActionDetails.tsx b/govtool/frontend/src/pages/GovernanceActionDetails.tsx index 54a0f6c0c..1abc674b9 100644 --- a/govtool/frontend/src/pages/GovernanceActionDetails.tsx +++ b/govtool/frontend/src/pages/GovernanceActionDetails.tsx @@ -87,11 +87,7 @@ export const GovernanceActionDetails = () => { elementOnePath={PATHS.governanceActions} elementTwo={title} isDataMissing={ - state - ? state.isDataMissing - : data?.proposal.metadataValid - ? false - : data?.proposal.metadataStatus + state ? state.metadataStatus : data?.proposal.metadataStatus } /> { state ? state.createdEpochNo : data.proposal.createdEpochNo } isDataMissing={ - state - ? state.isDataMissing - : data?.proposal.metadataValid - ? false - : data?.proposal.metadataStatus + state ? state.metadataStatus : data?.proposal.metadataStatus } expiryDate={ state diff --git a/govtool/frontend/src/pages/GovernanceActionsCategory.tsx b/govtool/frontend/src/pages/GovernanceActionsCategory.tsx index c0a68d9c2..b78b013cd 100644 --- a/govtool/frontend/src/pages/GovernanceActionsCategory.tsx +++ b/govtool/frontend/src/pages/GovernanceActionsCategory.tsx @@ -153,9 +153,6 @@ export const GovernanceActionsCategory = () => { state: { ...item, openedFromCategoryPage: true, - isDataMissing: item.metadataValid - ? false - : item.metadataStatus, }, }, ); diff --git a/govtool/frontend/src/stories/GovernanceAction.stories.ts b/govtool/frontend/src/stories/GovernanceAction.stories.ts index 238a696c6..211c5ace5 100644 --- a/govtool/frontend/src/stories/GovernanceAction.stories.ts +++ b/govtool/frontend/src/stories/GovernanceAction.stories.ts @@ -26,15 +26,12 @@ const commonArgs = { expiryEpochNo: 420, index: 2, inProgress: false, - metadataStatus: { - raw: { status: undefined, valid: true }, - status: undefined, - valid: false, - }, onClick: jest.fn(), title: "Example title", txHash: "sad78afdsf7jasd98d", type: "exampleType", + metadataValid: true, + metadataStatus: null, }; export const GovernanceActionCardComponent: Story = { @@ -79,32 +76,23 @@ export const GovernanceActionCardIsLoading: Story = { export const GovernanceActionCardDataMissing: Story = { args: { ...commonArgs, - metadataStatus: { - raw: { status: MetadataValidationStatus.URL_NOT_FOUND, valid: false }, - status: MetadataValidationStatus.URL_NOT_FOUND, - valid: false, - }, + metadataStatus: MetadataValidationStatus.URL_NOT_FOUND, + metadataValid: false, }, }; export const GovernanceActionCardIncorectFormat: Story = { args: { ...commonArgs, - metadataStatus: { - raw: { status: MetadataValidationStatus.INVALID_JSONLD, valid: false }, - status: MetadataValidationStatus.INVALID_JSONLD, - valid: false, - }, + metadataStatus: MetadataValidationStatus.INVALID_JSONLD, + metadataValid: false, }, }; export const GovernanceActionCardNotVerifiable: Story = { args: { ...commonArgs, - metadataStatus: { - raw: { status: MetadataValidationStatus.INVALID_HASH, valid: false }, - status: MetadataValidationStatus.INVALID_HASH, - valid: false, - }, + metadataStatus: MetadataValidationStatus.INVALID_HASH, + metadataValid: false, }, }; diff --git a/govtool/frontend/src/stories/GovernanceActionDetailsCard.stories.ts b/govtool/frontend/src/stories/GovernanceActionDetailsCard.stories.ts index bd9a67c4f..d5f5d8687 100644 --- a/govtool/frontend/src/stories/GovernanceActionDetailsCard.stories.ts +++ b/govtool/frontend/src/stories/GovernanceActionDetailsCard.stories.ts @@ -28,7 +28,7 @@ const commonArgs = { createdEpochNo: 302, expiryEpochNo: 350, govActionId: "exampleId1232312312312", - isDataMissing: false, + isDataMissing: null, title: "Example title", }; From 4beb4087d8bf996f38a34dd2e29693d1e007f02e Mon Sep 17 00:00:00 2001 From: jankun4 Date: Thu, 6 Jun 2024 04:05:00 +0200 Subject: [PATCH 076/162] [#1142] fetch metadata from metadata-validation-service --- CHANGELOG.md | 3 + govtool/backend/app/Main.hs | 11 +- govtool/backend/example-config.json | 3 +- govtool/backend/src/VVA/API.hs | 125 +++++++++++++----- govtool/backend/src/VVA/API/Types.hs | 33 +++-- govtool/backend/src/VVA/Config.hs | 10 +- govtool/backend/src/VVA/Metadata.hs | 82 +++++++++++- govtool/backend/src/VVA/Types.hs | 42 +++++- govtool/backend/vva-be.cabal | 2 + .../metadata-validation/src/app.service.ts | 7 +- .../config/templates/backend-config.json.tpl | 3 +- 11 files changed, 258 insertions(+), 63 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52efd4175..13ab2300e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,8 @@ changes. ### Added +- added `bio` `dRepName` `email` `references` `metadataValid` and `metadataStatus` fields to `drep/list` +- added `metadatavalidationmaxconcurrentrequests` field to the backend config - added `metadata/validate` endpoint [Issue 876](https://github.com/IntersectMBO/govtool/issues/876) - added pagination to `drep/list` [Issue 756](https://github.com/IntersectMBO/govtool/issues/756) - added search query param to the `drep/getVotes` [Issue 640](https://github.com/IntersectMBO/govtool/issues/640) @@ -93,6 +95,7 @@ changes. ### Changed +- `proposal.about` changed to `proposal.abstract` - `drep/info` now returns 4 different tx hashes instead of one latest tx hash [Issue 688](https://github.com/IntersectMBO/govtool/issues/688) - `proposal/list` allows user to search by tx hash [Issue 603](https://github.com/IntersectMBO/govtool/issues/603) - `proposal/list` returns additional data such ass `expiryEpochNo`, `createdEpochNo`, `title`, `about`, `motivation`, diff --git a/govtool/backend/app/Main.hs b/govtool/backend/app/Main.hs index 5ca505210..1385ae1f1 100644 --- a/govtool/backend/app/Main.hs +++ b/govtool/backend/app/Main.hs @@ -8,6 +8,7 @@ module Main where +import Control.Concurrent.QSem (newQSem) import Control.Exception (Exception, SomeException, fromException, throw) @@ -115,7 +116,8 @@ startApp vvaConfig = do dRepVotingPowerCache <- newCache dRepListCache <- newCache networkMetricsCache <- newCache - metadataValidationCache <- newCache + proposalMetadataValidationCache <- newCache + dRepMetadataValidationCache <- newCache return $ CacheEnv { proposalListCache , getProposalCache @@ -127,12 +129,13 @@ startApp vvaConfig = do , dRepVotingPowerCache , dRepListCache , networkMetricsCache - , metadataValidationCache + , proposalMetadataValidationCache + , dRepMetadataValidationCache } connectionPool <- createPool (connectPostgreSQL (encodeUtf8 (dbSyncConnectionString $ getter vvaConfig))) close 1 1 60 vvaTlsManager <- newManager tlsManagerSettings - - let appEnv = AppEnv {vvaConfig=vvaConfig, vvaCache=cacheEnv, vvaConnectionPool=connectionPool, vvaTlsManager} + qsem <- newQSem (metadataValidationMaxConcurrentRequests vvaConfig) + let appEnv = AppEnv {vvaConfig=vvaConfig, vvaCache=cacheEnv, vvaConnectionPool=connectionPool, vvaTlsManager, vvaMetadataQSem=qsem} server' <- mkVVAServer appEnv runSettings settings server' diff --git a/govtool/backend/example-config.json b/govtool/backend/example-config.json index 756e75282..417afb3c9 100644 --- a/govtool/backend/example-config.json +++ b/govtool/backend/example-config.json @@ -11,5 +11,6 @@ "cachedurationseconds": 20, "sentrydsn": "https://username:password@senty.host/id", "metadatavalidationhost": "localhost", - "metadatavalidationport": 3001 + "metadatavalidationport": 3001, + "metadatavalidationmaxconcurrentrequests": 10 } diff --git a/govtool/backend/src/VVA/API.hs b/govtool/backend/src/VVA/API.hs index 6067000cc..f5e29cc63 100644 --- a/govtool/backend/src/VVA/API.hs +++ b/govtool/backend/src/VVA/API.hs @@ -8,8 +8,10 @@ module VVA.API where -import Control.Exception (throw) -import Control.Monad.Except (throwError) +import Control.Concurrent.QSem (waitQSem, signalQSem) +import Control.Concurrent.Async (mapConcurrently) +import Control.Exception (throw, throwIO) +import Control.Monad.Except (throwError, runExceptT) import Control.Monad.Reader import Data.Aeson (Result(Error, Success), fromJSON) import Data.Bool (Bool) @@ -74,8 +76,8 @@ type VVAApi = :<|> "transaction" :> "status" :> Capture "transactionId" HexText :> Get '[JSON] GetTransactionStatusResponse :<|> "throw500" :> Get '[JSON] () :<|> "network" :> "metrics" :> Get '[JSON] GetNetworkMetricsResponse - :<|> "metadata" :> "validate" :> ReqBody '[JSON] MetadataValidationParams :> Post '[JSON] MetadataValidationResponse - + :<|> "proposal" :> "metadata" :> "validate" :> ReqBody '[JSON] MetadataValidationParams :> Post '[JSON] MetadataValidationResponse + :<|> "drep" :> "metadata" :> "validate" :> ReqBody '[JSON] MetadataValidationParams :> Post '[JSON] MetadataValidationResponse server :: App m => ServerT VVAApi m server = drepList :<|> getVotingPower @@ -89,7 +91,8 @@ server = drepList :<|> getTransactionStatus :<|> throw500 :<|> getNetworkMetrics - :<|> validateMetadata + :<|> getProposalMetadataValidationResponse + :<|> getDRepMetadataValidationResponse mapDRepType :: Types.DRepType -> DRepType @@ -101,9 +104,10 @@ mapDRepStatus Types.Retired = Retired mapDRepStatus Types.Active = Active mapDRepStatus Types.Inactive = Inactive -drepRegistrationToDrep :: Types.DRepRegistration -> DRep -drepRegistrationToDrep Types.DRepRegistration {..} = - DRep +drepRegistrationToDrep :: Types.DRepRegistration -> Types.MetadataValidationResult Types.DRepMetadata -> DRep +drepRegistrationToDrep Types.DRepRegistration {..} Types.MetadataValidationResult{..} = + let metadata = metadataValidationResultMetadata + in DRep { dRepDrepId = DRepHash dRepRegistrationDRepHash, dRepView = dRepRegistrationView, dRepUrl = dRepRegistrationUrl, @@ -113,7 +117,13 @@ drepRegistrationToDrep Types.DRepRegistration {..} = dRepStatus = mapDRepStatus dRepRegistrationStatus, dRepType = mapDRepType dRepRegistrationType, dRepLatestTxHash = HexText <$> dRepRegistrationLatestTxHash, - dRepLatestRegistrationDate = dRepRegistrationLatestRegistrationDate + dRepLatestRegistrationDate = dRepRegistrationLatestRegistrationDate, + dRepBio = Types.dRepMetadataBio <$> metadata, + dRepDRepName = Types.dRepMetadataDRepName <$> metadata, + dRepEmail = Types.dRepMetadataEmail <$> metadata, + dRepReferences = maybe [] Types.dRepMetadataReferences metadata, + dRepMetadataStatus = metadataValidationResultStatus, + dRepMetadataValid = metadataValidationResultValid } delegationToResponse :: Types.Delegation -> DelegationResponse @@ -152,8 +162,22 @@ drepList mSearchQuery statuses mSortMode mPage mPageSize = do Just Status -> sortOn $ \Types.DRepRegistration {..} -> dRepRegistrationStatus + appEnv <- ask + qsem <- asks vvaMetadataQSem - let allValidDReps = map drepRegistrationToDrep $ sortDReps $ filterDRepsByQuery $ filterDRepsByStatus dreps + allValidDReps <- liftIO $ mapConcurrently + (\d@Types.DRepRegistration{..} -> + drepRegistrationToDrep d + <$> do + waitQSem qsem + r <- (either throwIO return =<< (runExceptT + $ flip runReaderT appEnv (validateDRepMetadata + (MetadataValidationParams + (fromMaybe "" dRepRegistrationUrl) + $ HexText (fromMaybe "" dRepRegistrationDataHash))))) + signalQSem qsem + return r) + $ sortDReps $ filterDRepsByQuery $ filterDRepsByStatus dreps let page = (fromIntegral $ fromMaybe 0 mPage) :: Int @@ -177,8 +201,10 @@ getVotingPower (unHexText -> dRepId) = do cacheRequest dRepVotingPowerCache dRepId $ DRep.getVotingPower dRepId -proposalToResponse :: Types.Proposal -> MetadataValidationResponse -> ProposalResponse -proposalToResponse Types.Proposal {..} metadataValidationResponse = +proposalToResponse :: Types.Proposal -> Types.MetadataValidationResult Types.ProposalMetadata -> ProposalResponse +proposalToResponse Types.Proposal {..} Types.MetadataValidationResult{..} = + let metadata = metadataValidationResultMetadata + in ProposalResponse { proposalResponseId = pack $ show proposalId, proposalResponseTxHash = HexText proposalTxHash, @@ -191,16 +217,17 @@ proposalToResponse Types.Proposal {..} metadataValidationResponse = proposalResponseCreatedEpochNo = proposalCreatedEpochNo, proposalResponseUrl = proposalUrl, proposalResponseMetadataHash = HexText proposalDocHash, - proposalResponseTitle = proposalTitle, - proposalResponseAbout = proposalAbout, - proposalResponseMotivation = proposalMotivaiton, - proposalResponseRationale = proposalRationale, + proposalResponseTitle = Types.proposalMetadataTitle <$> metadata, + proposalResponseAbstract = Types.proposalMetadataAbstract <$> metadata, + proposalResponseMotivation = Types.proposalMetadataMotivation <$> metadata, + proposalResponseRationale = Types.proposalMetadataRationale <$> metadata, proposalResponseMetadata = GovernanceActionMetadata <$> proposalMetadata, - proposalResponseReferences = GovernanceActionReferences <$> proposalReferences, + proposalResponseReferences = maybe [] Types.proposalMetadataReferences metadata, proposalResponseYesVotes = proposalYesVotes, proposalResponseNoVotes = proposalNoVotes, proposalResponseAbstainVotes = proposalAbstainVotes, - proposalResponseMetadataStatus = Just metadataValidationResponse + proposalResponseMetadataStatus = metadataValidationResultStatus, + proposalResponseMetadataValid = metadataValidationResultValid } voteToResponse :: Types.Vote -> VoteParams @@ -224,9 +251,19 @@ mapSortAndFilterProposals -> [Types.Proposal] -> m [ProposalResponse] mapSortAndFilterProposals selectedTypes sortMode proposals = do + + appEnv <- ask + qsem <- asks vvaMetadataQSem + mappedProposals <- - mapM - (\proposal@Types.Proposal {proposalUrl, proposalDocHash} -> proposalToResponse proposal <$> validateMetadata (MetadataValidationParams proposalUrl $ HexText proposalDocHash)) + liftIO $ mapConcurrently + (\proposal@Types.Proposal {proposalUrl, proposalDocHash} -> + do + waitQSem qsem + r <- either throwIO return =<< (runExceptT + $ flip runReaderT appEnv (proposalToResponse proposal <$> validateProposalMetadata (MetadataValidationParams proposalUrl $ HexText proposalDocHash))) + signalQSem qsem + return r) proposals let filteredProposals = if null selectedTypes @@ -297,7 +334,7 @@ isProposalSearchedFor (Just searchQuery) (ProposalResponse{..}) = fromMaybe Fals let valuesToCheck = catMaybes [ Just govActionId , proposalResponseTitle - , proposalResponseAbout + , proposalResponseAbstract , proposalResponseMotivation , proposalResponseRationale ] @@ -351,8 +388,8 @@ getProposal g@(GovActionId govActionTxHash govActionIndex) mDrepId' = do let mDrepId = unHexText <$> mDrepId' CacheEnv {getProposalCache} <- asks vvaCache proposal@Types.Proposal {proposalUrl, proposalDocHash} <- cacheRequest getProposalCache (unHexText govActionTxHash, govActionIndex) (Proposal.getProposal (unHexText govActionTxHash) govActionIndex) - metadataStatus <- validateMetadata $ MetadataValidationParams proposalUrl $ HexText proposalDocHash - let proposalResponse = proposalToResponse proposal metadataStatus + proposalMetadataValidationResult <- validateProposalMetadata $ MetadataValidationParams proposalUrl $ HexText proposalDocHash + let proposalResponse = proposalToResponse proposal proposalMetadataValidationResult voteResponse <- case mDrepId of Nothing -> return Nothing Just drepId -> do @@ -400,14 +437,34 @@ getNetworkMetrics = do , getNetworkMetricsResponseAlwaysNoConfidenceVotingPower = networkMetricsAlwaysNoConfidenceVotingPower } -validateMetadata :: App m => MetadataValidationParams -> m MetadataValidationResponse -validateMetadata MetadataValidationParams {..} = do - CacheEnv {metadataValidationCache} <- asks vvaCache - result <- cacheRequest metadataValidationCache (metadataValidationParamsUrl, unHexText metadataValidationParamsHash) - $ Metadata.validateMetadata metadataValidationParamsUrl (unHexText metadataValidationParamsHash) - - case fromJSON result of - Error e -> return $ MetadataValidationResponse Nothing False (AnyValue $ Just result) - Success (InternalMetadataValidationResponse {..}) -> return $ MetadataValidationResponse {metadataValidationResponseStatus=internalMetadataValidationResponseStatus, metadataValidationResponseValid=internalMmetadataValidationResponseValid, metadataValidationResponseRaw=AnyValue $ Just result} - - +validateProposalMetadata :: App m => MetadataValidationParams -> m (Types.MetadataValidationResult Types.ProposalMetadata) +validateProposalMetadata MetadataValidationParams {..} = do + CacheEnv {proposalMetadataValidationCache} <- asks vvaCache + cacheRequest proposalMetadataValidationCache (metadataValidationParamsUrl, unHexText metadataValidationParamsHash) + $ Metadata.getProposalMetadataValidationResult metadataValidationParamsUrl (unHexText metadataValidationParamsHash) + +getProposalMetadataValidationResponse :: App m => MetadataValidationParams -> m MetadataValidationResponse +getProposalMetadataValidationResponse params = do + result <- validateProposalMetadata params + case result of + Types.MetadataValidationResult {..} -> do + return $ MetadataValidationResponse + { metadataValidationResponseValid = metadataValidationResultValid + , metadataValidationResponseStatus = metadataValidationResultStatus + } + +validateDRepMetadata :: App m => MetadataValidationParams -> m (Types.MetadataValidationResult Types.DRepMetadata) +validateDRepMetadata MetadataValidationParams {..} = do + CacheEnv {dRepMetadataValidationCache} <- asks vvaCache + cacheRequest dRepMetadataValidationCache (metadataValidationParamsUrl, unHexText metadataValidationParamsHash) + $ Metadata.getDRepMetadataValidationResult metadataValidationParamsUrl (unHexText metadataValidationParamsHash) + +getDRepMetadataValidationResponse :: App m => MetadataValidationParams -> m MetadataValidationResponse +getDRepMetadataValidationResponse params = do + result <- validateDRepMetadata params + case result of + Types.MetadataValidationResult {..} -> do + return $ MetadataValidationResponse + { metadataValidationResponseValid = metadataValidationResultValid + , metadataValidationResponseStatus = metadataValidationResultStatus + } \ No newline at end of file diff --git a/govtool/backend/src/VVA/API/Types.hs b/govtool/backend/src/VVA/API/Types.hs index 760b24857..ccb11e750 100644 --- a/govtool/backend/src/VVA/API/Types.hs +++ b/govtool/backend/src/VVA/API/Types.hs @@ -167,9 +167,8 @@ instance ToSchema InternalMetadataValidationResponse where data MetadataValidationResponse = MetadataValidationResponse - { metadataValidationResponseStatus :: Maybe MetadataValidationStatus + { metadataValidationResponseStatus :: Maybe Text , metadataValidationResponseValid :: Bool - , metadataValidationResponseRaw :: AnyValue } deriving (Generic, Show) @@ -463,15 +462,16 @@ data ProposalResponse , proposalResponseUrl :: Text , proposalResponseMetadataHash :: HexText , proposalResponseTitle :: Maybe Text - , proposalResponseAbout :: Maybe Text + , proposalResponseAbstract :: Maybe Text , proposalResponseMotivation :: Maybe Text , proposalResponseRationale :: Maybe Text , proposalResponseMetadata :: Maybe GovernanceActionMetadata - , proposalResponseReferences :: Maybe GovernanceActionReferences + , proposalResponseReferences :: [Text] , proposalResponseYesVotes :: Integer , proposalResponseNoVotes :: Integer , proposalResponseAbstainVotes :: Integer - , proposalResponseMetadataStatus :: Maybe MetadataValidationResponse + , proposalResponseMetadataStatus :: Maybe Text + , proposalResponseMetadataValid :: Bool } deriving (Generic, Show) @@ -490,15 +490,16 @@ exampleProposalResponse = "{ \"id\": \"proposalId123\"," <> "\"url\": \"https://proposal.metadata.xyz\"," <> "\"metadataHash\": \"9af10e89979e51b8cdc827c963124a1ef4920d1253eef34a1d5cfe76438e3f11\"," <> "\"title\": \"Proposal Title\"," - <> "\"about\": \"Proposal About\"," + <> "\"abstract\": \"Proposal About\"," <> "\"motivation\": \"Proposal Motivation\"," <> "\"rationale\": \"Proposal Rationale\"," <> "\"metadata\": {\"key\": \"value\"}," - <> "\"references\": [{\"uri\": \"google.com\", \"@type\": \"Other\", \"label\": \"example label\"}]," + <> "\"references\": [\"google.com\"]," <> "\"yesVotes\": 0," <> "\"noVotes\": 0," - <> "\"abstainVotes\": 0" - <> "\"metadataStatus\": {\"status\": null, \"valid\": true}}" + <> "\"abstainVotes\": 0," + <> "\"metadataStatus\": \"URL_NOT_FOUND\"," + <> "\"metadataValid\": true}" instance ToSchema ProposalResponse where declareNamedSchema proxy = do @@ -841,6 +842,12 @@ data DRep , dRepType :: DRepType , dRepLatestTxHash :: Maybe HexText , dRepLatestRegistrationDate :: UTCTime + , dRepBio :: Maybe Text + , dRepDRepName :: Maybe Text + , dRepEmail :: Maybe Text + , dRepReferences :: [Text] + , dRepMetadataStatus :: Maybe Text + , dRepMetadataValid :: Bool } deriving (Generic, Show) @@ -858,7 +865,13 @@ exampleDrep = <> "\"status\": \"Active\"," <> "\"type\": \"DRep\"," <> "\"latestTxHash\": \"47c14a128cd024f1b990c839d67720825921ad87ed875def42641ddd2169b39c\"," - <> "\"latestRegistrationDate\": \"1970-01-01T00:00:00Z\"}" + <> "\"latestRegistrationDate\": \"1970-01-01T00:00:00Z\"," + <> "\"bio\": \"DRep Bio\"," + <> "\"dRepName\": \"DRep Name\"," + <> "\"email\": \"google@gmail.com\"," + <> "\"references\": [\"google.com\"]," + <> "\"metadataStatus\": \"URL_NOT_FOUND\"," + <> "\"metadataValid\": true}" -- ToSchema instance for DRep instance ToSchema DRep where diff --git a/govtool/backend/src/VVA/Config.hs b/govtool/backend/src/VVA/Config.hs index c4781681f..bb2ba48d1 100644 --- a/govtool/backend/src/VVA/Config.hs +++ b/govtool/backend/src/VVA/Config.hs @@ -84,6 +84,8 @@ data VVAConfigInternal , vVAConfigInternalMetadataValidationHost :: Text -- | Metadata validation service port , vVAConfigInternalMetadataValidationPort :: Int + -- | Maximum number of concurrent metadata requests + , vVAConfigInternalMetadataValidationMaxConcurrentRequests :: Int } deriving (FromConfig, Generic, Show) @@ -96,7 +98,8 @@ instance DefaultConfig VVAConfigInternal where vVaConfigInternalCacheDurationSeconds = 20, vVAConfigInternalSentrydsn = "https://username:password@senty.host/id", vVAConfigInternalMetadataValidationHost = "localhost", - vVAConfigInternalMetadataValidationPort = 3001 + vVAConfigInternalMetadataValidationPort = 3001, + vVAConfigInternalMetadataValidationMaxConcurrentRequests = 10 } -- | DEX configuration. @@ -116,6 +119,8 @@ data VVAConfig , metadataValidationHost :: Text -- | Metadata validation service port , metadataValidationPort :: Int + -- | Maximum number of concurrent metadata requests + , metadataValidationMaxConcurrentRequests :: Int } deriving (Generic, Show, ToJSON) @@ -157,7 +162,8 @@ convertConfig VVAConfigInternal {..} = cacheDurationSeconds = vVaConfigInternalCacheDurationSeconds, sentryDSN = vVAConfigInternalSentrydsn, metadataValidationHost = vVAConfigInternalMetadataValidationHost, - metadataValidationPort = vVAConfigInternalMetadataValidationPort + metadataValidationPort = vVAConfigInternalMetadataValidationPort, + metadataValidationMaxConcurrentRequests = vVAConfigInternalMetadataValidationMaxConcurrentRequests } -- | Load configuration from a file specified on the command line. Load from diff --git a/govtool/backend/src/VVA/Metadata.hs b/govtool/backend/src/VVA/Metadata.hs index d6033633f..f3cf05e74 100644 --- a/govtool/backend/src/VVA/Metadata.hs +++ b/govtool/backend/src/VVA/Metadata.hs @@ -1,18 +1,24 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE ScopedTypeVariables #-} module VVA.Metadata where +import Prelude hiding (lookup) import Control.Monad.Except (MonadError, throwError) import Control.Monad.Reader +import Control.Exception (try, Exception) -import Data.Aeson (Value, decode, encode, object, (.=)) +import Data.Typeable (Typeable) +import Data.Vector (toList) +import Data.Aeson.KeyMap (lookup) +import Data.Aeson (Value(..), decode, encode, object, (.=)) import Data.Maybe (fromJust) import Data.ByteString (ByteString) import Data.FileEmbed (embedFile) import Data.Has (Has, getter) import Data.String (fromString) -import Data.Text (Text, unpack) +import Data.Text (Text, unpack, pack) import qualified Data.Text.Encoding as Text import Data.Time.Clock @@ -29,17 +35,79 @@ validateMetadata :: (Has VVAConfig r, Has Manager r, MonadReader r m, MonadIO m, MonadError AppError m) => Text -> Text - -> m Value -validateMetadata url hash = do + -> Maybe Text + -> m (Either Text Value) +validateMetadata url hash standard = do metadataHost <- getMetadataValidationHost metadataPort <- getMetadataValidationPort manager <- asks getter - let requestBody = encode $ object ["url" .= unpack url, "hash" .= unpack hash] + let requestBody = encode $ object (["url" .= unpack url, "hash" .= unpack hash] ++ maybe [] (\x -> ["standard" .= unpack x]) standard) initialRequest <- liftIO $ parseRequest (unpack metadataHost <> ":" <> show metadataPort <> "/validate") let request = initialRequest { method = "POST" , requestBody = RequestBodyLBS requestBody , requestHeaders = [("Content-Type", "application/json")] } - response <- liftIO $ httpLbs request manager - return $ fromJust $ decode $ responseBody response + response <- liftIO $ try $ httpLbs request manager + case response of + Left (e :: HttpException) -> return $ Left (pack $ show e) + Right r -> case decode $ responseBody r of + Nothing -> throwError $ InternalError "Failed to validate metadata" + Just x -> return $ Right x + +getProposalMetadataValidationResult :: + (Has ConnectionPool r, Has Manager r, Has VVAConfig r, MonadReader r m, MonadIO m, MonadFail m, MonadError AppError m) => + Text -> + Text -> + m (MetadataValidationResult ProposalMetadata) +getProposalMetadataValidationResult url hash = do + result <- validateMetadata url hash (Just "CIP108") + case result of + Left e -> return $ MetadataValidationResult False (Just e) Nothing + Right (Object r) -> case go r of + Nothing -> throwError $ InternalError "Failed to validate metadata" + Just x -> return x + where + go result = do + (Bool valid) <- lookup "valid" result + let status = case lookup "status" result of + Just (String s) -> Just s + _ -> Nothing + let proposalMetadata = do + (Object m) <- lookup "metadata" result + let abstract = (\(String s) -> s) <$> lookup "abstract" m + let motivation = (\(String s) -> s) <$> lookup "motivation" m + let rationale = (\(String s) -> s) <$> lookup "rationale" m + let title = (\(String s) -> s) <$> lookup "title" m + let references = (\(Array references') -> map (\(String x) -> x) $ toList references') <$> lookup "references" m + ProposalMetadata <$> abstract <*> motivation <*> rationale <*> title <*> references + return $ MetadataValidationResult valid status proposalMetadata + + + +getDRepMetadataValidationResult :: + (Has ConnectionPool r, Has Manager r, Has VVAConfig r, MonadReader r m, MonadIO m, MonadFail m, MonadError AppError m) => + Text -> + Text -> + m (MetadataValidationResult DRepMetadata) +getDRepMetadataValidationResult url hash = do + result <- validateMetadata url hash (Just "CIPQQQ") + case result of + Left e -> return $ MetadataValidationResult False (Just e) Nothing + Right (Object r) -> case go r of + Nothing -> throwError $ InternalError "Failed to validate metadata" + Just x -> return x + where + go result = do + (Bool valid) <- lookup "valid" result + let status = case lookup "status" result of + Just (String s) -> Just s + _ -> Nothing + let proposalMetadata = do + (Object m) <- lookup "metadata" result + let bio = (\(String s) -> s) <$> lookup "bio" m + let dRepName = (\(String s) -> s) <$> lookup "dRepName" m + let email = (\(String s) -> s) <$> lookup "email" m + let references = (\(Array references') -> map (\(String x) -> x) $ toList references') <$> lookup "references" m + DRepMetadata <$> bio <*> dRepName <*> email <*> references + return $ MetadataValidationResult valid status proposalMetadata \ No newline at end of file diff --git a/govtool/backend/src/VVA/Types.hs b/govtool/backend/src/VVA/Types.hs index fba1e2321..701bdda87 100644 --- a/govtool/backend/src/VVA/Types.hs +++ b/govtool/backend/src/VVA/Types.hs @@ -24,6 +24,7 @@ import Database.PostgreSQL.Simple (Connection) import VVA.Cache import VVA.Config import Network.HTTP.Client (Manager) +import Control.Concurrent.QSem type App m = (MonadReader AppEnv m, MonadIO m, MonadFail m, MonadError AppError m) @@ -33,6 +34,7 @@ data AppEnv , vvaCache :: CacheEnv , vvaConnectionPool :: Pool Connection , vvaTlsManager :: Manager + , vvaMetadataQSem :: QSem } instance Has VVAConfig AppEnv where @@ -51,6 +53,11 @@ instance Has Manager AppEnv where getter AppEnv {vvaTlsManager} = vvaTlsManager modifier f a@AppEnv {vvaTlsManager} = a {vvaTlsManager = f vvaTlsManager} +instance Has QSem AppEnv where + getter AppEnv {vvaMetadataQSem} = vvaMetadataQSem + modifier f a@AppEnv {vvaMetadataQSem} = a {vvaMetadataQSem = f vvaMetadataQSem} + + data AppError = ValidationError Text | NotFoundError Text @@ -133,6 +140,34 @@ data Proposal data TransactionStatus = TransactionConfirmed | TransactionUnconfirmed + +data ProposalMetadata = + ProposalMetadata + { proposalMetadataAbstract :: Text + , proposalMetadataMotivation :: Text + , proposalMetadataRationale :: Text + , proposalMetadataTitle :: Text + , proposalMetadataReferences :: [Text] + } deriving (Show) + +data DRepMetadata = + DRepMetadata + { dRepMetadataBio :: Text + , dRepMetadataDRepName :: Text + , dRepMetadataEmail :: Text + , dRepMetadataReferences :: [Text] + } deriving (Show) + +data MetadataValidationResult a = + MetadataValidationResult + { metadataValidationResultValid :: Bool + , metadataValidationResultStatus :: Maybe Text + , metadataValidationResultMetadata :: Maybe a + } deriving (Show) + + + + data CacheEnv = CacheEnv { proposalListCache :: Cache.Cache () [Proposal] @@ -145,7 +180,8 @@ data CacheEnv , dRepVotingPowerCache :: Cache.Cache Text Integer , dRepListCache :: Cache.Cache () [DRepRegistration] , networkMetricsCache :: Cache.Cache () NetworkMetrics - , metadataValidationCache :: Cache.Cache (Text, Text) Value + , proposalMetadataValidationCache :: Cache.Cache (Text, Text) (MetadataValidationResult ProposalMetadata) + , dRepMetadataValidationCache :: Cache.Cache (Text, Text) (MetadataValidationResult DRepMetadata) } data NetworkMetrics @@ -174,4 +210,6 @@ data MetadataValidationStatus = IncorrectFormat | IncorrectJSONLD | IncorrectHash - | UrlNotFound \ No newline at end of file + | UrlNotFound + + diff --git a/govtool/backend/vva-be.cabal b/govtool/backend/vva-be.cabal index be278ec8f..1cea27716 100644 --- a/govtool/backend/vva-be.cabal +++ b/govtool/backend/vva-be.cabal @@ -100,6 +100,8 @@ library , swagger2 , http-client , http-client-tls + , vector + , async exposed-modules: VVA.Config , VVA.CommandLine diff --git a/govtool/metadata-validation/src/app.service.ts b/govtool/metadata-validation/src/app.service.ts index fb31dd4fd..6aa4b2542 100644 --- a/govtool/metadata-validation/src/app.service.ts +++ b/govtool/metadata-validation/src/app.service.ts @@ -6,7 +6,8 @@ import * as blake from 'blakejs'; import { ValidateMetadataDTO } from '@dto'; import { MetadataValidationStatus } from '@enums'; import { canonizeJSON, validateMetadataStandard, parseMetadata } from '@utils'; -import { ValidateMetadataResult } from '@types'; +import { MetadataStandard, ValidateMetadataResult } from '@types'; + @Injectable() export class AppService { @@ -15,14 +16,16 @@ export class AppService { async validateMetadata({ hash, url, - standard, + standard = MetadataStandard.CIP108, }: ValidateMetadataDTO): Promise { let status: MetadataValidationStatus; let metadata: any; try { + console.log(standard); const { data } = await firstValueFrom( this.httpService.get(url).pipe( catchError(() => { + console.log('url',url); throw MetadataValidationStatus.URL_NOT_FOUND; }), ), diff --git a/scripts/govtool/config/templates/backend-config.json.tpl b/scripts/govtool/config/templates/backend-config.json.tpl index 9ff9f2f11..cab68ebc0 100644 --- a/scripts/govtool/config/templates/backend-config.json.tpl +++ b/scripts/govtool/config/templates/backend-config.json.tpl @@ -11,5 +11,6 @@ "cachedurationseconds": 20, "sentrydsn": "", "metadatavalidationhost": "http://metadata-validation", - "metadatavalidationport": "3000" + "metadatavalidationport": "3000", + "metadatavalidationmaxconcurrentrequests": 10 } From 3bca8765fb0ce8ed7371a1ca039f2d11d6bb30b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Wed, 29 May 2024 17:46:09 +0200 Subject: [PATCH 077/162] replace metadata validation service --- .../molecules/GovernanceActionCard.tsx | 12 ++++++---- .../molecules/GovernanceActionCardHeader.tsx | 2 +- .../molecules/GovernanceVotedOnCard.tsx | 17 ++++++++----- .../DashboardGovernanceActionDetails.tsx | 18 +++++++++++--- .../organisms/GovernanceActionsToVote.tsx | 6 +++-- .../queries/useGetProposalsInfiniteQuery.ts | 19 ++------------- .../src/hooks/queries/useGetProposalsQuery.ts | 20 +++------------- govtool/frontend/src/models/api.ts | 11 ++++----- .../src/pages/GovernanceActionDetails.tsx | 14 +++++++++-- .../src/services/requests/getDRepVotes.ts | 24 ++----------------- .../src/services/requests/getProposal.ts | 12 +--------- govtool/frontend/src/types/global.d.ts | 9 +++---- 12 files changed, 68 insertions(+), 96 deletions(-) diff --git a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx index e49b58837..5746245b1 100644 --- a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx +++ b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx @@ -18,7 +18,7 @@ import { } from "@utils"; type ActionTypeProps = Omit< - ActionTypeToDsiplay, + ActionType, | "yesVotes" | "noVotes" | "abstainVotes" @@ -44,7 +44,7 @@ export const GovernanceActionCard: FC = ({ ...props }) => { createdEpochNo, txHash, index, - isDataMissing, + metadataStatus, title, about, } = props; @@ -64,10 +64,10 @@ export const GovernanceActionCard: FC = ({ ...props }) => { justifyContent: "space-between", boxShadow: "0px 4px 15px 0px #DDE3F5", borderRadius: "20px", - backgroundColor: isDataMissing + backgroundColor: !metadataStatus.raw.valid ? "rgba(251, 235, 235, 0.50)" : "rgba(255, 255, 255, 0.3)", - ...(isDataMissing && { + ...(!metadataStatus.raw.valid && { border: "1px solid #F6D5D5", }), ...(inProgress && { @@ -84,7 +84,9 @@ export const GovernanceActionCard: FC = ({ ...props }) => { > { expiryDate, expiryEpochNo, index, + metadataStatus, title, txHash, type, - isDataMissing, } = proposal; const { isMobile, screenWidth } = useScreenDimension(); @@ -54,13 +54,13 @@ export const GovernanceVotedOnCard = ({ votedProposal, inProgress }: Props) => { justifyContent: "space-between", boxShadow: "0px 4px 15px 0px #DDE3F5", borderRadius: "20px", - backgroundColor: isDataMissing + backgroundColor: !metadataStatus.raw.valid ? "rgba(251, 235, 235, 0.50)" : "rgba(255, 255, 255, 0.3)", // TODO: To decide if voted on cards can be actually in progress border: inProgress ? "1px solid #FFCBAD" - : isDataMissing + : !metadataStatus.raw.valid ? "1px solid #F6D5D5" : "1px solid #C0E4BA", }} @@ -76,7 +76,9 @@ export const GovernanceVotedOnCard = ({ votedProposal, inProgress }: Props) => { > { voteUrl: vote.url, voteDate: vote.date, voteEpochNo: vote.epochNo, + isDataMissing: metadataStatus.raw.valid + ? false + : metadataStatus.raw.status, }, }, ) diff --git a/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx b/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx index ee9729745..08af83d48 100644 --- a/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx +++ b/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx @@ -53,7 +53,13 @@ export const DashboardGovernanceActionDetails = () => { elementOne={t("govActions.title")} elementOnePath={PATHS.dashboardGovernanceActions} elementTwo={title} - isDataMissing={state ? state.isDataMissing : data?.isDataMissing} + isDataMissing={ + state + ? state.isDataMissing + : data?.proposal.metadataStatus.raw.valid + ? false + : data?.proposal.metadataStatus.raw.status + } /> { createdEpochNo={ state ? state.createdEpochNo : data.proposal.createdEpochNo } - isDataMissing={state ? state.isDataMissing : data?.isDataMissing} + isDataMissing={ + state + ? state.isDataMissing + : data?.proposal.metadataStatus.raw.valid + ? false + : data?.proposal.metadataStatus.raw.status + } expiryDate={ state ? formatDisplayDate(state.expiryDate) - : formatDisplayDate(data.proposal.expiryDate) + : formatDisplayDate(data?.proposal.expiryDate) } expiryEpochNo={ state ? state.expiryEpochNo : data.proposal.expiryEpochNo diff --git a/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx b/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx index 5efe5ca99..841aa7928 100644 --- a/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx +++ b/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx @@ -12,7 +12,7 @@ import { Slider } from "@organisms"; type GovernanceActionsToVoteProps = { filters: string[]; sorting: string; - proposals: { title: string; actions: ActionTypeToDsiplay[] }[]; + proposals: { title: string; actions: ActionType[] }[]; onDashboard?: boolean; searchPhrase?: string; }; @@ -87,7 +87,9 @@ export const GovernanceActionsToVote = ({ { state: { ...action, - isDataMissing: action.isDataMissing, + isDataMissing: action.metadataStatus.raw.valid + ? false + : action.metadataStatus.raw.status, }, }, ); diff --git a/govtool/frontend/src/hooks/queries/useGetProposalsInfiniteQuery.ts b/govtool/frontend/src/hooks/queries/useGetProposalsInfiniteQuery.ts index 3bae61e10..ca1a179aa 100644 --- a/govtool/frontend/src/hooks/queries/useGetProposalsInfiniteQuery.ts +++ b/govtool/frontend/src/hooks/queries/useGetProposalsInfiniteQuery.ts @@ -3,7 +3,6 @@ import { useInfiniteQuery } from "react-query"; import { QUERY_KEYS } from "@consts"; import { useCardano } from "@context"; import { getProposals, GetProposalsArguments } from "@services"; -import { checkIsMissingGAMetadata } from "@utils"; export const useGetProposalsInfiniteQuery = ({ filters = [], @@ -22,22 +21,8 @@ export const useGetProposalsInfiniteQuery = ({ searchPhrase, sorting, }); - const mappedElements = await Promise.all( - data.elements.map(async (proposal: ActionType) => { - const { metadata, status } = await checkIsMissingGAMetadata({ - hash: proposal?.metadataHash ?? "", - url: proposal?.url ?? "", - }); - // workaround for the missing data in db-sync - return { - ...proposal, - ...metadata, - isDataMissing: status || false, - }; - }), - ); - return { ...data, elements: mappedElements }; + return data; }; const { @@ -71,7 +56,7 @@ export const useGetProposalsInfiniteQuery = ({ const proposals = data?.pages.flatMap( (page) => page.elements, - ) as ActionTypeToDsiplay[]; + ) as ActionType[]; return { proposalsfetchNextPage: fetchNextPage, diff --git a/govtool/frontend/src/hooks/queries/useGetProposalsQuery.ts b/govtool/frontend/src/hooks/queries/useGetProposalsQuery.ts index e6b0d6a38..af8db9d7c 100644 --- a/govtool/frontend/src/hooks/queries/useGetProposalsQuery.ts +++ b/govtool/frontend/src/hooks/queries/useGetProposalsQuery.ts @@ -3,7 +3,6 @@ import { useQuery } from "react-query"; import { QUERY_KEYS } from "@consts"; import { useCardano } from "@context"; import { getProposals, GetProposalsArguments } from "@services"; -import { checkIsMissingGAMetadata } from "@utils"; import { useGetVoterInfo } from "."; export const useGetProposalsQuery = ({ @@ -14,7 +13,7 @@ export const useGetProposalsQuery = ({ const { dRepID, pendingTransaction } = useCardano(); const { voter } = useGetVoterInfo(); - const fetchProposals = async (): Promise => { + const fetchProposals = async (): Promise => { const allProposals = await Promise.all( filters.map((filter) => getProposals({ @@ -29,20 +28,7 @@ export const useGetProposalsQuery = ({ ), ); - const mappedData = await Promise.all( - allProposals - .flatMap((proposal) => proposal.elements) - .map(async (proposal) => { - const { metadata, status } = await checkIsMissingGAMetadata({ - hash: proposal?.metadataHash ?? "", - url: proposal?.url ?? "", - }); - // workaround for the missing data in db-sync - return { ...proposal, ...metadata, isDataMissing: status || false }; - }), - ); - - return mappedData; + return allProposals.flatMap((proposal) => proposal.elements); }; const { data, isLoading } = useQuery( @@ -65,7 +51,7 @@ export const useGetProposalsQuery = ({ }; }; -const groupByType = (data?: ActionTypeToDsiplay[]) => +const groupByType = (data?: ActionType[]) => data?.reduce>>((groups, item) => { const itemType = item.type; diff --git a/govtool/frontend/src/models/api.ts b/govtool/frontend/src/models/api.ts index cb2d700ad..4a06e9903 100644 --- a/govtool/frontend/src/models/api.ts +++ b/govtool/frontend/src/models/api.ts @@ -72,6 +72,11 @@ type ProposalData = { createdEpochNo: number; url: string; metadataHash: string; + metadataStatus: { + raw: { valid: boolean; status?: MetadataValidationStatus }; + status: MetadataValidationStatus; + valid: false; + }; yesVotes: number; noVotes: number; abstainVotes: number; @@ -86,12 +91,6 @@ export interface VotedProposal { vote: ProposalVote; proposal: ProposalData; } -export type VotedProposalToDisplay = { - vote: ProposalVote; - proposal: ProposalData & { - isDataMissing: boolean | MetadataValidationStatus; - }; -}; export type CurrentDelegation = { dRepHash: string | null; diff --git a/govtool/frontend/src/pages/GovernanceActionDetails.tsx b/govtool/frontend/src/pages/GovernanceActionDetails.tsx index 0dcf03949..f2870df5a 100644 --- a/govtool/frontend/src/pages/GovernanceActionDetails.tsx +++ b/govtool/frontend/src/pages/GovernanceActionDetails.tsx @@ -85,7 +85,13 @@ export const GovernanceActionDetails = () => { elementOne={t("govActions.title")} elementOnePath={PATHS.governanceActions} elementTwo={title} - isDataMissing={state ? state.isDataMissing : data?.isDataMissing} + isDataMissing={ + state + ? state.isDataMissing + : data?.proposal.metadataStatus.raw.valid + ? false + : data?.proposal.metadataStatus.raw.status + } /> { state ? state.createdEpochNo : data.proposal.createdEpochNo } isDataMissing={ - state ? state.isDataMissing : data?.isDataMissing + state + ? state.isDataMissing + : data?.proposal.metadataStatus.raw.valid + ? false + : data?.proposal.metadataStatus.raw.status } expiryDate={ state diff --git a/govtool/frontend/src/services/requests/getDRepVotes.ts b/govtool/frontend/src/services/requests/getDRepVotes.ts index 2b7efd682..4d5c6fdaa 100644 --- a/govtool/frontend/src/services/requests/getDRepVotes.ts +++ b/govtool/frontend/src/services/requests/getDRepVotes.ts @@ -1,5 +1,4 @@ -import { VotedProposal, VotedProposalToDisplay } from "@models"; -import { checkIsMissingGAMetadata } from "@utils"; +import { VotedProposal } from "@models"; import { API } from "../API"; type GetDRepVotesParams = { @@ -19,24 +18,5 @@ export const getDRepVotes = async ({ const { data } = await API.get(urlBase, { params }); - const mappedData = (await Promise.all( - data.map(async (proposal) => { - const { metadata, status } = await checkIsMissingGAMetadata({ - hash: proposal?.proposal?.metadataHash, - url: proposal?.proposal?.url, - }); - - return { - vote: proposal.vote, - proposal: { - ...proposal.proposal, - // workaround for the missing data in db-sync - ...metadata, - isDataMissing: status || false, - }, - }; - }), - )) as VotedProposalToDisplay[]; - - return mappedData; + return data; }; diff --git a/govtool/frontend/src/services/requests/getProposal.ts b/govtool/frontend/src/services/requests/getProposal.ts index d366476bb..67044403d 100644 --- a/govtool/frontend/src/services/requests/getProposal.ts +++ b/govtool/frontend/src/services/requests/getProposal.ts @@ -1,4 +1,3 @@ -import { checkIsMissingGAMetadata } from "@utils"; import { API } from "../API"; export const getProposal = async (proposalId: string, drepId?: string) => { @@ -8,14 +7,5 @@ export const getProposal = async (proposalId: string, drepId?: string) => { `/proposal/get/${encodedHash}?drepId=${drepId}`, ); - const { metadata, status } = await checkIsMissingGAMetadata({ - hash: data?.proposal.metadataHash, - url: data?.proposal.url, - }); - // workaround for the missing data in db-sync - return { - ...data, - proposal: { ...data.proposal, ...metadata }, - isDataMissing: status || false, - }; + return data; }; diff --git a/govtool/frontend/src/types/global.d.ts b/govtool/frontend/src/types/global.d.ts index 2cd73ebcc..2e840a5c7 100644 --- a/govtool/frontend/src/types/global.d.ts +++ b/govtool/frontend/src/types/global.d.ts @@ -28,6 +28,11 @@ declare global { createdEpochNo: number; url?: string; metadataHash?: string; + metadataStatus: { + raw: { valid: boolean; status?: MetadataValidationStatus }; + status: MetadataValidationStatus; + valid: false; + }; yesVotes: number; noVotes: number; abstainVotes: number; @@ -39,10 +44,6 @@ declare global { rationale?: string; }; - type ActionTypeToDsiplay = ActionType & { - isDataMissing: boolean | MetadataValidationStatus; - }; - interface ActionVotedOnType extends ActionTypeToDsiplay { vote: VoteType; } From 7d5c34b42b341b8c6de4953122a52eef0face23c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Wed, 29 May 2024 17:48:14 +0200 Subject: [PATCH 078/162] delete unnecessary util --- govtool/frontend/src/utils/index.ts | 1 - .../utils/tests/validateMetadataHash.test.ts | 75 ------------------- .../src/utils/validateMetadataHash.ts | 31 -------- 3 files changed, 107 deletions(-) delete mode 100644 govtool/frontend/src/utils/tests/validateMetadataHash.test.ts delete mode 100644 govtool/frontend/src/utils/validateMetadataHash.ts diff --git a/govtool/frontend/src/utils/index.ts b/govtool/frontend/src/utils/index.ts index c708bd587..2bdde2997 100644 --- a/govtool/frontend/src/utils/index.ts +++ b/govtool/frontend/src/utils/index.ts @@ -24,5 +24,4 @@ export * from "./numberValidation"; export * from "./openInNewTab"; export * from "./removeDuplicatedProposals"; export * from "./testIdFromLabel"; -export * from "./validateMetadataHash"; export * from "./wait"; diff --git a/govtool/frontend/src/utils/tests/validateMetadataHash.test.ts b/govtool/frontend/src/utils/tests/validateMetadataHash.test.ts deleted file mode 100644 index c1b29a37f..000000000 --- a/govtool/frontend/src/utils/tests/validateMetadataHash.test.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { vi } from "vitest"; -import { postValidate } from "@services"; -import { checkIsMissingGAMetadata } from ".."; -import { MetadataValidationStatus } from "@/models"; - -const url = "https://example.com"; -const hash = "abcdefg"; - -vi.mock("@services"); - -const mockPostValidate = postValidate as jest.MockedFunction< - typeof postValidate ->; - -describe("checkIsMissingGAMetadata", () => { - it("returns metadata when there are no issues with the validation", async () => { - mockPostValidate.mockResolvedValueOnce({ - valid: true, - metadata: { some: "metadata" }, - }); - - const result = await checkIsMissingGAMetadata({ url, hash }); - - expect(result).toStrictEqual({ - valid: true, - metadata: { some: "metadata" }, - }); - expect(mockPostValidate).toHaveBeenCalledWith({ - url, - hash, - }); - }); - - it("returns MetadataValidationStatus.INVALID_HASH when postValidate resolves with INVALID_HASH", async () => { - mockPostValidate.mockResolvedValueOnce({ - valid: false, - status: MetadataValidationStatus.INVALID_HASH, - }); - - const result = await checkIsMissingGAMetadata({ url, hash }); - - expect(result.status).toBe(MetadataValidationStatus.INVALID_HASH); - expect(mockPostValidate).toHaveBeenCalledWith({ - url, - hash, - }); - }); - - it("returns MetadataValidationStatus.INVALID_JSONLD when postValidate resolves with INVALID_JSONLD", async () => { - mockPostValidate.mockResolvedValueOnce({ - valid: false, - status: MetadataValidationStatus.INVALID_JSONLD, - }); - - const result = await checkIsMissingGAMetadata({ url, hash }); - - expect(result.status).toBe(MetadataValidationStatus.INVALID_JSONLD); - expect(mockPostValidate).toHaveBeenCalledWith({ - url, - hash, - }); - }); - - it("returns MetadataValidationStatus.URL_NOT_FOUND when postValidate throws an error", async () => { - mockPostValidate.mockRejectedValueOnce(new Error("404 Not Found")); - - const result = await checkIsMissingGAMetadata({ url, hash }); - - expect(result.status).toBe(MetadataValidationStatus.URL_NOT_FOUND); - expect(mockPostValidate).toHaveBeenCalledWith({ - url, - hash, - }); - }); -}); diff --git a/govtool/frontend/src/utils/validateMetadataHash.ts b/govtool/frontend/src/utils/validateMetadataHash.ts deleted file mode 100644 index 76ac3ecfa..000000000 --- a/govtool/frontend/src/utils/validateMetadataHash.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { postValidate } from "@services"; - -import { MetadataValidationStatus } from "@/models"; - -type CheckIsMissingGAMetadataResponse = { - status?: MetadataValidationStatus; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - metadata?: any; - valid: boolean; -}; - -export const checkIsMissingGAMetadata = async ({ - url, - hash, -}: { - url: string; - hash: string; -}): Promise => { - try { - const { status, metadata, valid } = await postValidate({ - url, - hash, - }); - if (status) { - return { status, valid }; - } - return { metadata, valid }; - } catch (error) { - return { status: MetadataValidationStatus.URL_NOT_FOUND, valid: false }; - } -}; From aa909de5008e5f97e5be01f43b7620041ea2b31b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Fri, 31 May 2024 10:43:40 +0200 Subject: [PATCH 079/162] fix GA story --- .../src/stories/GovernanceAction.stories.ts | 24 +++++++++++++++---- govtool/frontend/src/types/global.d.ts | 4 ++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/govtool/frontend/src/stories/GovernanceAction.stories.ts b/govtool/frontend/src/stories/GovernanceAction.stories.ts index 76f2408f9..238a696c6 100644 --- a/govtool/frontend/src/stories/GovernanceAction.stories.ts +++ b/govtool/frontend/src/stories/GovernanceAction.stories.ts @@ -26,7 +26,11 @@ const commonArgs = { expiryEpochNo: 420, index: 2, inProgress: false, - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, onClick: jest.fn(), title: "Example title", txHash: "sad78afdsf7jasd98d", @@ -75,20 +79,32 @@ export const GovernanceActionCardIsLoading: Story = { export const GovernanceActionCardDataMissing: Story = { args: { ...commonArgs, - isDataMissing: MetadataValidationStatus.URL_NOT_FOUND, + metadataStatus: { + raw: { status: MetadataValidationStatus.URL_NOT_FOUND, valid: false }, + status: MetadataValidationStatus.URL_NOT_FOUND, + valid: false, + }, }, }; export const GovernanceActionCardIncorectFormat: Story = { args: { ...commonArgs, - isDataMissing: MetadataValidationStatus.INVALID_JSONLD, + metadataStatus: { + raw: { status: MetadataValidationStatus.INVALID_JSONLD, valid: false }, + status: MetadataValidationStatus.INVALID_JSONLD, + valid: false, + }, }, }; export const GovernanceActionCardNotVerifiable: Story = { args: { ...commonArgs, - isDataMissing: MetadataValidationStatus.INVALID_HASH, + metadataStatus: { + raw: { status: MetadataValidationStatus.INVALID_HASH, valid: false }, + status: MetadataValidationStatus.INVALID_HASH, + valid: false, + }, }, }; diff --git a/govtool/frontend/src/types/global.d.ts b/govtool/frontend/src/types/global.d.ts index 2e840a5c7..0717d4a6c 100644 --- a/govtool/frontend/src/types/global.d.ts +++ b/govtool/frontend/src/types/global.d.ts @@ -30,8 +30,8 @@ declare global { metadataHash?: string; metadataStatus: { raw: { valid: boolean; status?: MetadataValidationStatus }; - status: MetadataValidationStatus; - valid: false; + status?: MetadataValidationStatus; + valid: boolean; }; yesVotes: number; noVotes: number; From 33fe68295d79d6f8398b6dfa4720eb9dd7750fc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Fri, 31 May 2024 10:45:45 +0200 Subject: [PATCH 080/162] fix type --- govtool/frontend/src/models/api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/govtool/frontend/src/models/api.ts b/govtool/frontend/src/models/api.ts index 4a06e9903..5c4f003b9 100644 --- a/govtool/frontend/src/models/api.ts +++ b/govtool/frontend/src/models/api.ts @@ -75,7 +75,7 @@ type ProposalData = { metadataStatus: { raw: { valid: boolean; status?: MetadataValidationStatus }; status: MetadataValidationStatus; - valid: false; + valid: boolean; }; yesVotes: number; noVotes: number; From 27dfc743baec2e2aa5112bfa683c35b03f8b309d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Fri, 31 May 2024 11:00:17 +0200 Subject: [PATCH 081/162] fix Voted GAs --- .../src/hooks/queries/useGetDRepVotesQuery.ts | 4 +-- govtool/frontend/src/mock/index.ts | 1 - govtool/frontend/src/mock/voteOn.ts | 36 ------------------- govtool/frontend/src/models/api.ts | 2 +- .../stories/GovernanceActionVoted.stories.ts | 24 ++++++++++--- .../src/utils/removeDuplicatedProposals.ts | 2 +- .../tests/removeDuplicatedProposals.test.ts | 20 ++++++++--- 7 files changed, 40 insertions(+), 49 deletions(-) delete mode 100644 govtool/frontend/src/mock/voteOn.ts diff --git a/govtool/frontend/src/hooks/queries/useGetDRepVotesQuery.ts b/govtool/frontend/src/hooks/queries/useGetDRepVotesQuery.ts index 3578ba955..313823722 100644 --- a/govtool/frontend/src/hooks/queries/useGetDRepVotesQuery.ts +++ b/govtool/frontend/src/hooks/queries/useGetDRepVotesQuery.ts @@ -3,7 +3,7 @@ import { useQuery } from "react-query"; import { QUERY_KEYS } from "@consts"; import { useCardano } from "@context"; import { getDRepVotes } from "@services"; -import { VotedProposalToDisplay } from "@/models/api"; +import { VotedProposal } from "@/models"; export const useGetDRepVotesQuery = ( type?: string[], @@ -56,7 +56,7 @@ export const useGetDRepVotesQuery = ( return { data: Object.values(groupedByType ?? []) as { title: string; - actions: VotedProposalToDisplay[]; + actions: VotedProposal[]; }[], areDRepVotesLoading: isLoading, refetch, diff --git a/govtool/frontend/src/mock/index.ts b/govtool/frontend/src/mock/index.ts index fb09a97de..e69de29bb 100644 --- a/govtool/frontend/src/mock/index.ts +++ b/govtool/frontend/src/mock/index.ts @@ -1 +0,0 @@ -export * from "./voteOn"; diff --git a/govtool/frontend/src/mock/voteOn.ts b/govtool/frontend/src/mock/voteOn.ts deleted file mode 100644 index 20f49a257..000000000 --- a/govtool/frontend/src/mock/voteOn.ts +++ /dev/null @@ -1,36 +0,0 @@ -export const VOTE_ON_DATA = [ - { - title: "No Confidence", - actions: [ - { - id: "123456", - type: "for example", - vote: "yes", - expiryDate: "1970-01-01", - }, - { - id: "65432", - type: "gov action", - vote: "no", - expiryDate: "1970-01-01", - }, - ], - }, - { - title: "New constitutional committee or quorum size", - actions: [ - { - id: "abc123", - type: "action gov", - vote: "abstain", - expiryDate: "1970-01-01", - }, - { - id: "123cba", - type: "voting action", - vote: "yes", - expiryDate: "1970-01-01", - }, - ], - }, -] as VotedOnDataType; diff --git a/govtool/frontend/src/models/api.ts b/govtool/frontend/src/models/api.ts index 5c4f003b9..acfd5da4d 100644 --- a/govtool/frontend/src/models/api.ts +++ b/govtool/frontend/src/models/api.ts @@ -74,7 +74,7 @@ type ProposalData = { metadataHash: string; metadataStatus: { raw: { valid: boolean; status?: MetadataValidationStatus }; - status: MetadataValidationStatus; + status?: MetadataValidationStatus; valid: boolean; }; yesVotes: number; diff --git a/govtool/frontend/src/stories/GovernanceActionVoted.stories.ts b/govtool/frontend/src/stories/GovernanceActionVoted.stories.ts index 8a270cf6b..a3b687d0e 100644 --- a/govtool/frontend/src/stories/GovernanceActionVoted.stories.ts +++ b/govtool/frontend/src/stories/GovernanceActionVoted.stories.ts @@ -64,7 +64,11 @@ export const GovernanceVotedOnCardComponent: Story = { proposal: { createdEpochNo: 232, expiryEpochNo: 323, - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, createdDate: "1970-01-01T00:00:00Z", expiryDate: "1970-02-01T00:00:00Z", id: "exampleId", @@ -101,7 +105,11 @@ export const GovernanceVotedOnCardAbstain: Story = { proposal: { createdEpochNo: 232, expiryEpochNo: 323, - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, createdDate: "1970-01-01T00:00:00Z", expiryDate: "1970-02-01T00:00:00Z", id: "exampleId", @@ -139,7 +147,11 @@ export const GovernanceVotedOnCardYes: Story = { proposal: { createdEpochNo: 232, expiryEpochNo: 323, - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, createdDate: "1970-01-01T00:00:00Z", expiryDate: "1970-02-01T00:00:00Z", id: "exampleId", @@ -177,7 +189,11 @@ export const GovernanceVotedOnCardNo: Story = { proposal: { createdEpochNo: 232, expiryEpochNo: 323, - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, createdDate: "1970-01-01T00:00:00Z", expiryDate: "1970-02-01T00:00:00Z", id: "exampleId", diff --git a/govtool/frontend/src/utils/removeDuplicatedProposals.ts b/govtool/frontend/src/utils/removeDuplicatedProposals.ts index 14c8305a0..a0d068377 100644 --- a/govtool/frontend/src/utils/removeDuplicatedProposals.ts +++ b/govtool/frontend/src/utils/removeDuplicatedProposals.ts @@ -1,4 +1,4 @@ -export const removeDuplicatedProposals = (proposals: ActionTypeToDsiplay[]) => { +export const removeDuplicatedProposals = (proposals: ActionType[]) => { if (!proposals) return []; const uniqueGovActionIds = new Set(); return proposals.filter((item) => { diff --git a/govtool/frontend/src/utils/tests/removeDuplicatedProposals.test.ts b/govtool/frontend/src/utils/tests/removeDuplicatedProposals.test.ts index 121c358c1..13692a44e 100644 --- a/govtool/frontend/src/utils/tests/removeDuplicatedProposals.test.ts +++ b/govtool/frontend/src/utils/tests/removeDuplicatedProposals.test.ts @@ -22,7 +22,11 @@ const uniqueProposals = [ abstainVotes: 81528377728, title: "Proposal 1322 Title", about: "This is about Proposal 1322", - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, motivation: "Motivation behind Proposal 1322", rationale: "Rationale for Proposal 1322", }, @@ -47,7 +51,11 @@ const uniqueProposals = [ abstainVotes: 81528377728, title: "Proposal 1338 Title", about: "This is about Proposal 1338", - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, motivation: "Motivation behind Proposal 1338", rationale: "Rationale for Proposal 1338", }, @@ -72,7 +80,11 @@ const uniqueProposals = [ abstainVotes: 81528377728, title: "Proposal 1335 Title", about: "This is about Proposal 1335", - isDataMissing: false, + metadataStatus: { + raw: { status: undefined, valid: true }, + status: undefined, + valid: false, + }, motivation: "Motivation behind Proposal 1335", rationale: "Rationale for Proposal 1335", }, @@ -102,7 +114,7 @@ describe("remove duplicated proposals", () => { }); it("returns empty array if input is empty", () => { - const proposals: ActionTypeToDsiplay[] = []; + const proposals: ActionType[] = []; expect(removeDuplicatedProposals(proposals).length).toBe(0); }); }); From 315c323d7a952c699be7905b50b5afe9a2653a32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Fri, 31 May 2024 14:01:35 +0200 Subject: [PATCH 082/162] take GA metadata from metadataStatus --- .../molecules/GovernanceActionCard.tsx | 6 ++-- .../molecules/GovernanceVotedOnCard.tsx | 6 ++-- .../src/components/organisms/BgCard.tsx | 2 +- .../DashboardGovernanceActionDetails.tsx | 30 +++++++++++++++---- govtool/frontend/src/models/api.ts | 12 +++++++- .../DashboardGovernanceActionsCategory.tsx | 3 ++ .../src/pages/GovernanceActionDetails.tsx | 28 +++++++++++++---- .../src/pages/GovernanceActionsCategory.tsx | 3 ++ govtool/frontend/src/types/global.d.ts | 12 +++++++- 9 files changed, 80 insertions(+), 22 deletions(-) diff --git a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx index 5746245b1..7d607d7c9 100644 --- a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx +++ b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx @@ -45,8 +45,6 @@ export const GovernanceActionCard: FC = ({ ...props }) => { txHash, index, metadataStatus, - title, - about, } = props; const { isMobile, screenWidth } = useScreenDimension(); const { t } = useTranslation(); @@ -83,14 +81,14 @@ export const GovernanceActionCard: FC = ({ ...props }) => { }} > { const navigate = useNavigate(); const { proposal, vote } = votedProposal; const { - about, createdDate, createdEpochNo, expiryDate, expiryEpochNo, index, metadataStatus, - title, txHash, type, } = proposal; @@ -75,14 +73,14 @@ export const GovernanceVotedOnCard = ({ votedProposal, inProgress }: Props) => { }} > ( )} - - - {t("about")} - - - {/* TODO replace with actual data */}I am the Cardano crusader carving - his path in the blockchain battleground. With a mind sharper than a - Ledger Nano X, this fearless crypto connoisseur fearlessly navigates - the volatile seas of Cardano, turning code into currency. Armed with a - keyboard and a heart pumping with blockchain beats, Mister Big Bad - fearlessly champions decentralization, smart contracts, and the - Cardano community. His Twitter feed is a mix of market analysis that - rivals CNBC and memes that could break the internet. - + {bio && !metadataStatus && ( + <> + + {t("about")} + + + {bio} + + + )} ); @@ -352,6 +358,11 @@ const DRepDetailsInfoItem = ({ children, label }: DrepDetailsInfoItemProps) => ( const DRepId = ({ children }: PropsWithChildren) => ( { + if (!children) return; + navigator.clipboard.writeText(children?.toString()); + e.stopPropagation(); + }} data-testid="copy-drep-id-button" sx={{ gap: 1, From 8efc99ae3987a34b4540bb3650819a149fd7a6bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Fri, 7 Jun 2024 01:20:29 +0200 Subject: [PATCH 097/162] adjust drep test --- govtool/frontend/src/utils/tests/dRep.test.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/govtool/frontend/src/utils/tests/dRep.test.ts b/govtool/frontend/src/utils/tests/dRep.test.ts index 26558791d..d6e026154 100644 --- a/govtool/frontend/src/utils/tests/dRep.test.ts +++ b/govtool/frontend/src/utils/tests/dRep.test.ts @@ -13,6 +13,12 @@ const EXAMPLE_DREP = { votingPower: 10000, status: DRepStatus.Active, type: "DRep" as TDRepType, + bio: null, + dRepName: null, + email: null, + references: [], + metadataStatus: null, + metadataValid: true, }; describe("isSameDRep function", () => { From 58babd1943595989e8fe8f07edc1f1c3ebeddd79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Sworze=C5=84?= Date: Fri, 7 Jun 2024 01:56:20 +0200 Subject: [PATCH 098/162] adjust edit drep --- .../EditDRepInfoSteps/EditDRepForm.tsx | 37 ++++++++++++++- .../src/hooks/forms/useEditDRepInfoForm.ts | 2 + .../src/hooks/queries/useGetVoterInfoQuery.ts | 7 ++- .../frontend/src/pages/EditDRepMetadata.tsx | 45 +++++++++++++------ 4 files changed, 72 insertions(+), 19 deletions(-) diff --git a/govtool/frontend/src/components/organisms/EditDRepInfoSteps/EditDRepForm.tsx b/govtool/frontend/src/components/organisms/EditDRepInfoSteps/EditDRepForm.tsx index 9f6638205..a22772f1e 100644 --- a/govtool/frontend/src/components/organisms/EditDRepInfoSteps/EditDRepForm.tsx +++ b/govtool/frontend/src/components/organisms/EditDRepInfoSteps/EditDRepForm.tsx @@ -1,12 +1,15 @@ -import { Dispatch, SetStateAction, useCallback } from "react"; +import { Dispatch, SetStateAction, useCallback, useEffect } from "react"; +import { useLocation } from "react-router-dom"; import { useFieldArray } from "react-hook-form"; import { Box } from "@mui/material"; import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; import { Button, InfoText, Spacer, Typography } from "@atoms"; import { Placeholders, Rules } from "@consts"; +import { useCardano } from "@context"; import { useEditDRepInfoForm, + useGetDRepListInfiniteQuery, useScreenDimension, useTranslation, } from "@hooks"; @@ -22,9 +25,12 @@ export const EditDRepForm = ({ onClickCancel: () => void; setStep: Dispatch>; }) => { + const { state } = useLocation(); const { t } = useTranslation(); const { isMobile } = useScreenDimension(); - const { control, errors, isError, register, watch } = useEditDRepInfoForm(); + const { dRepID } = useCardano(); + const { control, errors, isError, register, watch, reset, getValues } = + useEditDRepInfoForm(); const { append, fields: links, @@ -34,6 +40,13 @@ export const EditDRepForm = ({ name: "links", }); + const { dRepData: yourselfDRepList } = useGetDRepListInfiniteQuery( + { + searchPhrase: dRepID, + }, + { enabled: !state }, + ); + const onClickContinue = () => setStep(2); const addLink = useCallback(() => append({ link: "" }), [append]); @@ -41,6 +54,26 @@ export const EditDRepForm = ({ const removeLink = useCallback((index: number) => remove(index), [remove]); const isContinueButtonDisabled = !watch("dRepName") || isError; + + useEffect(() => { + if (!getValues().dRepName) + reset( + state + ? { + ...state, + links: state.references.map((link: string) => ({ + link, + })), + } + : { + ...yourselfDRepList?.[0], + links: yourselfDRepList?.[0].references.map((link: string) => ({ + link, + })), + }, + ); + }, [yourselfDRepList]); + const renderLinks = useCallback( () => links.map((field, index) => ( diff --git a/govtool/frontend/src/hooks/forms/useEditDRepInfoForm.ts b/govtool/frontend/src/hooks/forms/useEditDRepInfoForm.ts index 08b66f14d..a44412642 100644 --- a/govtool/frontend/src/hooks/forms/useEditDRepInfoForm.ts +++ b/govtool/frontend/src/hooks/forms/useEditDRepInfoForm.ts @@ -69,6 +69,7 @@ export const useEditDRepInfoForm = ( formState: { errors, isValid }, register, resetField, + reset, watch, } = useFormContext(); const dRepName = watch("dRepName"); @@ -203,5 +204,6 @@ export const useEditDRepInfoForm = ( editDRepInfo: handleSubmit(onSubmit), resetField, watch, + reset, }; }; diff --git a/govtool/frontend/src/hooks/queries/useGetVoterInfoQuery.ts b/govtool/frontend/src/hooks/queries/useGetVoterInfoQuery.ts index 463cc9c57..dcbb848df 100644 --- a/govtool/frontend/src/hooks/queries/useGetVoterInfoQuery.ts +++ b/govtool/frontend/src/hooks/queries/useGetVoterInfoQuery.ts @@ -1,12 +1,11 @@ -import { useQuery } from "react-query"; +import { UseQueryOptions, useQuery } from "react-query"; import { QUERY_KEYS } from "@consts"; import { useCardano } from "@context"; import { getVoterInfo } from "@services"; -export const useGetVoterInfo = () => { +export const useGetVoterInfo = (options?: UseQueryOptions) => { const { dRepID, pendingTransaction } = useCardano(); - const { data } = useQuery({ queryKey: [ QUERY_KEYS.useGetDRepInfoKey, @@ -17,7 +16,7 @@ export const useGetVoterInfo = () => { pendingTransaction?.retireAsDirectVoter )?.transactionHash, ], - enabled: !!dRepID, + enabled: !!dRepID && options?.enabled, queryFn: () => getVoterInfo(dRepID), }); diff --git a/govtool/frontend/src/pages/EditDRepMetadata.tsx b/govtool/frontend/src/pages/EditDRepMetadata.tsx index d7dbaf10d..de3736d6a 100644 --- a/govtool/frontend/src/pages/EditDRepMetadata.tsx +++ b/govtool/frontend/src/pages/EditDRepMetadata.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from "react"; -import { useNavigate } from "react-router-dom"; +import { useLocation, useNavigate } from "react-router-dom"; import { FormProvider, useForm } from "react-hook-form"; -import { Box } from "@mui/material"; +import { Box, CircularProgress } from "@mui/material"; import { Background } from "@atoms"; import { PATHS } from "@consts"; @@ -10,6 +10,7 @@ import { useScreenDimension, useTranslation, defaultEditDRepInfoValues, + useGetVoterInfo, } from "@hooks"; import { LinkWithIcon } from "@molecules"; import { @@ -27,6 +28,8 @@ export const EditDRepMetadata = () => { const navigate = useNavigate(); const { t } = useTranslation(); const { closeModal, openModal } = useModal(); + const { state } = useLocation(); + const { voter } = useGetVoterInfo({ enabled: !state }); const methods = useForm({ mode: "onChange", @@ -54,8 +57,10 @@ export const EditDRepMetadata = () => { useEffect(() => { if (checkIsWalletConnected()) { navigate(PATHS.home); + return; } - }, []); + if (voter && !voter?.isRegisteredAsDRep) navigate(PATHS.dashboard); + }, [voter]); return ( @@ -72,16 +77,30 @@ export const EditDRepMetadata = () => { mt: isMobile ? 3 : 1.5, }} /> - - {step === 1 && ( - - )} - {step === 2 && } - {step === 3 && } - + {!voter || !voter.isRegisteredAsDRep ? ( + + + + ) : ( + + {step === 1 && ( + + )} + {step === 2 && } + {step === 3 && } + + )} {/* FIXME: Footer should be on top of the layout. Should not be rerendered across the pages */}