diff --git a/apps/frontend/app/(client)/(code-editor)/_components/ContestProblemDropdown.tsx b/apps/frontend/app/(client)/(code-editor)/_components/ContestProblemDropdown.tsx index 335dab63c2..515840edbd 100644 --- a/apps/frontend/app/(client)/(code-editor)/_components/ContestProblemDropdown.tsx +++ b/apps/frontend/app/(client)/(code-editor)/_components/ContestProblemDropdown.tsx @@ -6,63 +6,61 @@ import { DropdownMenuItem, DropdownMenuTrigger } from '@/components/shadcn/dropdown-menu' -import { cn, convertToLetter, fetcherWithAuth } from '@/libs/utils' +import { cn, convertToLetter, isHttpError } from '@/libs/utils' import checkIcon from '@/public/icons/check-green.svg' -import type { ContestProblem, ProblemDetail } from '@/types/type' +import type { ProblemDetail } from '@/types/type' import { useQuery } from '@tanstack/react-query' import Image from 'next/image' import Link from 'next/link' import { FaSortDown } from 'react-icons/fa' - -interface ContestProblemsResponse { - data: ContestProblem[] - total: number -} +import { contestProblemQueries } from '../../_libs/queries/contestProblem' interface ContestProblemDropdownProps { - problem: ProblemDetail - problemId: number + problem: Required contestId: number } export default function ContestProblemDropdown({ problem, - problemId, contestId }: ContestProblemDropdownProps) { - const { data: contestProblems } = useQuery< - ContestProblemsResponse | undefined - >({ - queryKey: ['contest', contestId, 'problems'], - queryFn: () => - fetcherWithAuth.get(`contest/${contestId}/problem?take=20`).json() + const { data: contestProblems, error } = useQuery({ + ...contestProblemQueries.list({ contestId, take: 20 }), + throwOnError: false }) return ( -

{`${convertToLetter(contestProblems?.data.find((item) => item.id === Number(problemId))?.order as number)}. ${problem.title}`}

+

{`${convertToLetter(problem.order)}. ${problem.title}`}

- {contestProblems?.data.map((p) => ( - - - {`${convertToLetter(p.order)}. ${p.title}`} - {p.submissionTime && ( -
- check -
- )} -
- - ))} + {error && isHttpError(error) + ? 'Failed to load the contest problem' + : contestProblems?.data.map((p) => ( + + + {`${convertToLetter(p.order)}. ${p.title}`} + {p.submissionTime && ( +
+ check +
+ )} +
+ + ))}
) diff --git a/apps/frontend/app/(client)/(code-editor)/_components/EditorDescription.tsx b/apps/frontend/app/(client)/(code-editor)/_components/EditorDescription.tsx index 6810ab81b7..e2979060c7 100644 --- a/apps/frontend/app/(client)/(code-editor)/_components/EditorDescription.tsx +++ b/apps/frontend/app/(client)/(code-editor)/_components/EditorDescription.tsx @@ -17,8 +17,7 @@ import { } from '@/components/shadcn/dialog' import { convertToLetter } from '@/libs/utils' import compileIcon from '@/public/icons/compile-version.svg' -import type { ContestProblem, ProblemDetail } from '@/types/type' -import type { Level } from '@/types/type' +import type { ProblemDetail } from '@/types/type' import { sanitize } from 'isomorphic-dompurify' import { FileText } from 'lucide-react' import Image from 'next/image' @@ -27,24 +26,23 @@ import { WhitespaceVisualizer } from './WhitespaceVisualizer' export function EditorDescription({ problem, - contestProblems, isContest = false }: { problem: ProblemDetail - contestProblems?: ContestProblem[] isContest?: boolean }) { const level = problem.difficulty const levelNumber = level.slice(-1) + return (
-

{`#${contestProblems ? convertToLetter(contestProblems.find((item) => item.id === problem.id)?.order as number) : problem.id}. ${problem.title}`}

+

{`#${problem?.order !== undefined ? convertToLetter(problem.order) : problem.id}. ${problem.title}`}

{!isContest && ( {`Level ${levelNumber}`} diff --git a/apps/frontend/app/(client)/(code-editor)/_components/EditorHeader/EditorHeader.tsx b/apps/frontend/app/(client)/(code-editor)/_components/EditorHeader/EditorHeader.tsx index 917ecbfdf1..76b6da54ed 100644 --- a/apps/frontend/app/(client)/(code-editor)/_components/EditorHeader/EditorHeader.tsx +++ b/apps/frontend/app/(client)/(code-editor)/_components/EditorHeader/EditorHeader.tsx @@ -1,5 +1,6 @@ 'use client' +import { contestProblemQueries } from '@/app/(client)/_libs/queries/contestProblem' import { AlertDialog, AlertDialogAction, @@ -189,9 +190,11 @@ export default function Editor({ storeCodeToLocalStorage(code) const submission: Submission = await res.json() setSubmissionId(submission.id) - queryClient.refetchQueries({ - queryKey: ['contest', contestId, 'problems'] - }) + if (contestId) { + queryClient.invalidateQueries({ + queryKey: contestProblemQueries.lists(contestId) + }) + } } else { setIsSubmitting(false) if (res.status === 401) { diff --git a/apps/frontend/app/(client)/(code-editor)/_components/EditorLayout.tsx b/apps/frontend/app/(client)/(code-editor)/_components/EditorLayout.tsx index 4e67da54ef..3cebdb21e0 100644 --- a/apps/frontend/app/(client)/(code-editor)/_components/EditorLayout.tsx +++ b/apps/frontend/app/(client)/(code-editor)/_components/EditorLayout.tsx @@ -4,10 +4,10 @@ import { auth } from '@/libs/auth' import { fetcher, fetcherWithAuth } from '@/libs/utils' import codedangLogo from '@/public/logos/codedang-editor.svg' import type { Contest, ProblemDetail } from '@/types/type' -import type { Route } from 'next' import Image from 'next/image' import Link from 'next/link' import { redirect } from 'next/navigation' +import type { GetContestProblemDetailResponse } from '../../_libs/apis/contestProblem' import ContestProblemDropdown from './ContestProblemDropdown' import EditorMainResizablePanel from './EditorResizablePanel' @@ -23,27 +23,28 @@ export default async function EditorLayout({ children }: EditorLayoutProps) { let contest: Contest | undefined - let problem: ProblemDetail + let problem: Required if (contestId) { // for getting contest info and problems list + + // TODO: use `getContestProblemDetail` from _libs/apis folder & use error boundary const res = await fetcherWithAuth( `contest/${contestId}/problem/${problemId}` ) - if (!res.ok && res.status === 403) { redirect(`/contest/${contestId}/finished/problem/${problemId}`) } - const ContestProblem: { problem: ProblemDetail } = await res.json() - problem = ContestProblem.problem + + const contestProblem = await res.json() + problem = { ...contestProblem.problem, order: contestProblem.order } + contest = await fetcher(`contest/${contestId}`).json() contest ? (contest.status = 'ongoing') : null // TODO: refactor this after change status interactively } else { problem = await fetcher(`problem/${problemId}`).json() } - // for getting problem detail - const session = await auth() return ( @@ -56,16 +57,13 @@ export default async function EditorLayout({
{contest ? <>Contest : Problem}

/

- {contest && contestId ? ( + {contest ? ( <> - - {contest.title} - + {contest.title}

/

) : ( diff --git a/apps/frontend/app/(client)/(code-editor)/contest/[contestId]/problem/[problemId]/layout.tsx b/apps/frontend/app/(client)/(code-editor)/contest/[contestId]/problem/[problemId]/layout.tsx index 613570e977..8377f880dc 100644 --- a/apps/frontend/app/(client)/(code-editor)/contest/[contestId]/problem/[problemId]/layout.tsx +++ b/apps/frontend/app/(client)/(code-editor)/contest/[contestId]/problem/[problemId]/layout.tsx @@ -4,13 +4,13 @@ export default async function layout({ params, children }: { - params: { problemId: number; contestId: number } + params: { problemId: string; contestId: string } children: React.ReactNode }) { const { problemId, contestId } = params return ( - + {children} ) diff --git a/apps/frontend/app/(client)/(code-editor)/contest/[contestId]/problem/[problemId]/page.tsx b/apps/frontend/app/(client)/(code-editor)/contest/[contestId]/problem/[problemId]/page.tsx index 45218035b4..f89cab7ab4 100644 --- a/apps/frontend/app/(client)/(code-editor)/contest/[contestId]/problem/[problemId]/page.tsx +++ b/apps/frontend/app/(client)/(code-editor)/contest/[contestId]/problem/[problemId]/page.tsx @@ -1,30 +1,22 @@ import { EditorDescription } from '@/app/(client)/(code-editor)/_components/EditorDescription' +import type { GetContestProblemDetailResponse } from '@/app/(client)/_libs/apis/contestProblem' import { fetcherWithAuth } from '@/libs/utils' -import type { ContestProblem, ProblemDetail } from '@/types/type' import { redirect } from 'next/navigation' export default async function DescriptionPage({ params }: { - params: { problemId: number; contestId: number } + params: { problemId: string; contestId: string } }) { const { problemId, contestId } = params - const res = await fetcherWithAuth(`contest/${contestId}/problem/${problemId}`) + // TODO: use `getContestProblemDetail` from _libs/apis folder & use error boundary + const res = await fetcherWithAuth(`contest/${contestId}/problem/${problemId}`) if (!res.ok && res.status === 403) { redirect(`/contest/${contestId}/finished/problem/${problemId}`) } - const contestProblem: { problem: ProblemDetail } = await res.json() + const { problem, order } = await res.json() - const contestProblems: { problems: ContestProblem[] } = await fetcherWithAuth( - `contest/${params.contestId}/problem` - ).json() - return ( - - ) + return } diff --git a/apps/frontend/app/(client)/(code-editor)/problem/[problemId]/layout.tsx b/apps/frontend/app/(client)/(code-editor)/problem/[problemId]/layout.tsx index ab1e301426..f26f701614 100644 --- a/apps/frontend/app/(client)/(code-editor)/problem/[problemId]/layout.tsx +++ b/apps/frontend/app/(client)/(code-editor)/problem/[problemId]/layout.tsx @@ -4,10 +4,10 @@ export default async function layout({ params, children }: { - params: { problemId: number } + params: { problemId: string } children: React.ReactNode }) { const { problemId } = params - return {children} + return {children} } diff --git a/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/_components/GoToFirstProblemButton.tsx b/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/_components/GoToFirstProblemButton.tsx new file mode 100644 index 0000000000..47fc846e33 --- /dev/null +++ b/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/_components/GoToFirstProblemButton.tsx @@ -0,0 +1,36 @@ +'use client' + +import { contestProblemQueries } from '@/app/(client)/_libs/queries/contestProblem' +import { Button } from '@/components/shadcn/button' +import { Skeleton } from '@/components/shadcn/skeleton' +import { useSuspenseQuery } from '@tanstack/react-query' +import { useRouter } from 'next/navigation' + +interface GoToFirstProblemButtonProps { + contestId: number +} + +export function GoToFirstProblemButton({ + contestId +}: GoToFirstProblemButtonProps) { + const router = useRouter() + const { data: firstProblemId } = useSuspenseQuery({ + ...contestProblemQueries.list({ contestId, take: 1 }), + select: (data) => data.data.at(0)?.id + }) + + return ( + + ) +} + +export function GoToFirstProblemButtonFallback() { + return +} diff --git a/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/_components/RegisterButton.tsx b/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/_components/RegisterButton.tsx index 6e7fb71c5b..c4b511da2e 100644 --- a/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/_components/RegisterButton.tsx +++ b/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/_components/RegisterButton.tsx @@ -12,7 +12,6 @@ import { Input } from '@/components/shadcn/input' import { cn, fetcherWithAuth } from '@/libs/utils' import { zodResolver } from '@hookform/resolvers/zod' import { useRouter } from 'next/navigation' -import { useEffect, useState } from 'react' import { useForm } from 'react-hook-form' import { toast } from 'sonner' import { z } from 'zod' @@ -25,30 +24,17 @@ const schema = z.object({ invitationCode: z.string().length(6) }) -const getFirstProblemId = async (contestId: string) => { - const { problems }: { problems: { id: string }[] } = await fetcherWithAuth - .get(`contest/${contestId}/problem`, { - searchParams: { take: 1 } - }) - .json() - return problems?.at(0)?.id -} - export default function RegisterButton({ id, - registered, state, title, invitationCodeExists }: { id: string - registered: boolean state: string title: string invitationCodeExists: boolean }) { - const [firstProblemId, setFirstProblemId] = useState('') - // const buttonColor = registered ? 'bg-secondary' : 'bg-primary' const router = useRouter() const clickRegister = async (contestId: string) => { await fetcherWithAuth @@ -73,29 +59,6 @@ export default function RegisterButton({ }) .catch((err) => console.log(err)) } - // const clickDeregister = async (contestId: string) => { - // await fetcherWithAuth - // .delete(`contest/${contestId}/participation`, { - // searchParams: { groupId: 1 } - // }) - // .then((res) => { - // res.json() - // router.refresh() - // }) - // .catch((err) => console.log(err)) - // } - - useEffect(() => { - async function fetchFirstProblemId() { - if (registered && state === 'Ongoing') { - const firstId = await getFirstProblemId(id) - setFirstProblemId(firstId ?? '') - } else { - setFirstProblemId('') - } - } - fetchFirstProblemId() - }, [registered, state, id]) const { handleSubmit, @@ -111,96 +74,57 @@ export default function RegisterButton({ clickRegister(id) } - return ( - <> - {registered ? ( - // Case 1) User registered for the contest - <> - {/* {state === 'Upcoming' ? ( - - ) : ( - <> */} - {firstProblemId && ( - - )} - {/* - )} */} - - ) : !invitationCodeExists ? ( - // Case 2) User not registered and no invitation code required + return !invitationCodeExists ? ( + // User not registered and no invitation code required + + ) : ( + // User not registered and invitation code required + + - ) : ( - // Case 3) User not registered and invitation code required - - - - - - - - {title} - - - -
- trigger('invitationCode') - })} - type="number" - className={cn( - 'hide-spin-button h-12 w-full', - errors.invitationCode && - 'border-red-500 focus-visible:ring-red-500' - )} - /> - {errors.invitationCode && ( -

- Register Code must be a 6-digit number -

- )} -
-
- -
- -
-
- )} - +
+ + + ) } diff --git a/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/page.tsx b/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/page.tsx index 6a3dba6a57..cf5b13bdec 100644 --- a/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/page.tsx +++ b/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/page.tsx @@ -1,6 +1,11 @@ import KatexContent from '@/components/KatexContent' import { auth } from '@/libs/auth' import { fetcherWithAuth } from '@/libs/utils' +import { Suspense } from 'react' +import { + GoToFirstProblemButton, + GoToFirstProblemButtonFallback +} from './_components/GoToFirstProblemButton' import RegisterButton from './_components/RegisterButton' interface ContestTop { @@ -43,13 +48,19 @@ export default async function ContestTop({ params }: ContestTopProps) { /> {session && state !== 'Finished' && (
- + {data.isRegistered ? ( + // TODO: add error boundary + }> + + + ) : ( + + )}
)} diff --git a/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/problem/page.tsx b/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/problem/page.tsx index f6a0692f9f..2236b06995 100644 --- a/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/problem/page.tsx +++ b/apps/frontend/app/(client)/(main)/contest/[contestId]/@tabs/problem/page.tsx @@ -17,12 +17,15 @@ interface ContestApiResponse { export default async function ContestProblem({ params }: ContestProblemProps) { const { contestId } = params + + // TODO: use `getContestProblemList` from _libs/apis folder const res = await fetcherWithAuth.get(`contest/${contestId}/problem`, { searchParams: { take: 20 } }) + // TODO: use error boundary if (!res.ok) { const { statusCode }: { statusCode: number } = await res.json() diff --git a/apps/frontend/app/(client)/(main)/contest/[contestId]/_libs/utils.ts b/apps/frontend/app/(client)/(main)/contest/[contestId]/_libs/utils.ts index a089435761..d36235becc 100644 --- a/apps/frontend/app/(client)/(main)/contest/[contestId]/_libs/utils.ts +++ b/apps/frontend/app/(client)/(main)/contest/[contestId]/_libs/utils.ts @@ -1,15 +1,10 @@ -import { safeFetcherWithAuth } from '@/libs/utils' -import type { ContestProblem } from '@/types/type' - -interface ContestProblemsApiRes { - data: ContestProblem[] -} +import { getContestProblemList } from '@/app/(client)/_libs/apis/contestProblem' const calculateContestScore = async ({ contestId }: { contestId: string }) => { try { - const contestProblems: ContestProblemsApiRes = await safeFetcherWithAuth - .get(`contest/${contestId}/problem`) - .json() + const contestProblems = await getContestProblemList({ + contestId: Number(contestId) + }) const { totalScore, totalMaxScore } = contestProblems.data.reduce( (acc, curr) => { diff --git a/apps/frontend/app/(client)/_libs/apis/contestProblem.ts b/apps/frontend/app/(client)/_libs/apis/contestProblem.ts new file mode 100644 index 0000000000..c4db79c0d3 --- /dev/null +++ b/apps/frontend/app/(client)/_libs/apis/contestProblem.ts @@ -0,0 +1,58 @@ +import { safeFetcherWithAuth } from '@/libs/utils' +import type { ContestProblem, ProblemDetail } from '@/types/type' +import type { PaginationQueryParams } from './types' + +export interface GetContestProblemListRequest extends PaginationQueryParams { + groupId?: number + contestId: number +} + +export interface GetContestProblemListResponse { + data: ContestProblem[] + total: number +} + +export const getContestProblemList = async ({ + contestId, + ...searchParams +}: GetContestProblemListRequest) => { + const response = await safeFetcherWithAuth.get( + `contest/${contestId}/problem`, + { + searchParams + } + ) + + const data = response.json() + + return data +} + +// -------------------------------------------------------------------- + +export interface GetContestProblemDetailRequest { + contestId: number + problemId: number +} + +export interface GetContestProblemDetailResponse { + order: number + problem: ProblemDetail +} + +export const getContestProblemDetail = async ({ + contestId, + problemId, + ...searchParams +}: GetContestProblemDetailRequest) => { + const response = await safeFetcherWithAuth.get( + `contest/${contestId}/problem/${problemId}`, + { + searchParams + } + ) + + const data = await response.json() + + return data +} diff --git a/apps/frontend/app/(client)/_libs/apis/types.ts b/apps/frontend/app/(client)/_libs/apis/types.ts new file mode 100644 index 0000000000..38a5cf7b44 --- /dev/null +++ b/apps/frontend/app/(client)/_libs/apis/types.ts @@ -0,0 +1,4 @@ +export interface PaginationQueryParams { + cursor?: number + take?: number +} diff --git a/apps/frontend/app/(client)/_libs/queries/contestProblem.ts b/apps/frontend/app/(client)/_libs/queries/contestProblem.ts new file mode 100644 index 0000000000..27e758cdf1 --- /dev/null +++ b/apps/frontend/app/(client)/_libs/queries/contestProblem.ts @@ -0,0 +1,19 @@ +import { queryOptions } from '@tanstack/react-query' +import { + getContestProblemList, + type GetContestProblemListRequest +} from '../apis/contestProblem' + +export const contestProblemQueries = { + all: (contestId: number) => ['contest', contestId, 'problem'] as const, + lists: (contestId: number) => + [...contestProblemQueries.all(contestId), 'list'] as const, + list: ({ contestId, ...searchParams }: GetContestProblemListRequest) => + queryOptions({ + queryKey: [ + ...contestProblemQueries.lists(contestId), + { ...searchParams } + ] as const, + queryFn: () => getContestProblemList({ contestId, ...searchParams }) + }) +} diff --git a/apps/frontend/app/(client)/layout.tsx b/apps/frontend/app/(client)/layout.tsx index 2604d5b87b..98282049cc 100644 --- a/apps/frontend/app/(client)/layout.tsx +++ b/apps/frontend/app/(client)/layout.tsx @@ -1,6 +1,7 @@ 'use client' import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { ReactQueryDevtools } from '@tanstack/react-query-devtools' export default function MainLayout({ children @@ -16,6 +17,11 @@ export default function MainLayout({ }) return ( - {children} + + {children} + {process.env.NODE_ENV === 'development' && ( + + )} + ) } diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 00f1a8e363..42ecee58bb 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -92,6 +92,7 @@ "@graphql-codegen/cli": "^5.0.3", "@graphql-codegen/client-preset": "^4.5.0", "@graphql-typed-document-node/core": "^3.2.0", + "@tanstack/react-query-devtools": "^5.61.0", "@testing-library/react": "^16.0.1", "@types/apollo-upload-client": "^18.0.0", "@types/katex": "^0.16.7", diff --git a/apps/frontend/types/type.ts b/apps/frontend/types/type.ts index 47147ea6de..ce4c9086aa 100644 --- a/apps/frontend/types/type.ts +++ b/apps/frontend/types/type.ts @@ -48,8 +48,8 @@ export interface WorkbookProblem extends Omit { export interface ContestProblem extends Omit { order: number maxScore: number - score?: string - submissionTime?: Date + score: string | null + submissionTime: string | null } export interface TestcaseItem { @@ -73,6 +73,7 @@ export interface ProblemDetail { hint: string template: string[] difficulty: Level + order?: number } // Contest type definition diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e6165ad90..3a737cba3b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -79,19 +79,19 @@ importers: version: 3.687.0(@aws-sdk/client-sso-oidc@3.687.0(@aws-sdk/client-sts@3.687.0))(@aws-sdk/client-sts@3.687.0) '@golevelup/nestjs-rabbitmq': specifier: ^5.6.1 - version: 5.6.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2)(rxjs@7.8.1) + version: 5.6.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs-modules/mailer': specifier: ^2.0.2 - version: 2.0.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(nodemailer@6.9.16) + version: 2.0.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(nodemailer@6.9.16) '@nestjs/apollo': specifier: ^12.2.1 - version: 12.2.1(@apollo/server@4.11.2(graphql@16.9.0))(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/graphql@12.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(graphql@16.9.0)(reflect-metadata@0.2.2)(ts-morph@16.0.0))(graphql@16.9.0) + version: 12.2.1(@apollo/server@4.11.2(graphql@16.9.0))(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/graphql@12.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(class-transformer@0.5.1)(class-validator@0.14.1)(graphql@16.9.0)(reflect-metadata@0.2.2)(ts-morph@16.0.0))(graphql@16.9.0) '@nestjs/axios': specifier: ^3.1.2 version: 3.1.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(axios@1.7.7)(rxjs@7.8.1) '@nestjs/cache-manager': specifier: ^2.3.0 - version: 2.3.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(cache-manager@5.7.6)(rxjs@7.8.1) + version: 2.3.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(cache-manager@5.7.6)(rxjs@7.8.1) '@nestjs/common': specifier: ^10.4.7 version: 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -103,7 +103,7 @@ importers: version: 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/graphql': specifier: ^12.2.1 - version: 12.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(graphql@16.9.0)(reflect-metadata@0.2.2)(ts-morph@16.0.0) + version: 12.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(class-transformer@0.5.1)(class-validator@0.14.1)(graphql@16.9.0)(reflect-metadata@0.2.2)(ts-morph@16.0.0) '@nestjs/jwt': specifier: ^10.2.0 version: 10.2.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)) @@ -115,7 +115,7 @@ importers: version: 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7) '@nestjs/swagger': specifier: ^7.4.2 - version: 7.4.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2) + version: 7.4.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2) '@opentelemetry/api': specifier: ~1.9.0 version: 1.9.0 @@ -211,7 +211,7 @@ importers: version: 4.7.8 nestjs-otel: specifier: ^6.1.1 - version: 6.1.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1)) + version: 6.1.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7) nestjs-pino: specifier: ^4.1.0 version: 4.1.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(pino-http@10.3.0) @@ -263,7 +263,7 @@ importers: version: 10.2.3(chokidar@3.6.0)(typescript@5.6.3) '@nestjs/testing': specifier: ^10.4.7 - version: 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)) + version: 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7) '@swc-node/register': specifier: ^1.10.9 version: 1.10.9(@swc/core@1.9.2(@swc/helpers@0.5.13))(@swc/types@0.1.15)(typescript@5.6.3) @@ -446,10 +446,10 @@ importers: version: 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@sentry/nextjs': specifier: ^8.38.0 - version: 8.38.0(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@14.2.17(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.96.1(@swc/core@1.9.2)) + version: 8.38.0(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@14.2.17(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) '@tailwindcss/typography': specifier: ^0.5.15 - version: 0.5.15(tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.17.6)(typescript@5.6.3))) + version: 0.5.15(tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@20.17.6)(typescript@5.6.3))) '@tanstack/react-query': specifier: ^5.59.20 version: 5.59.20(react@18.3.1) @@ -592,6 +592,9 @@ importers: '@graphql-typed-document-node/core': specifier: ^3.2.0 version: 3.2.0(graphql@16.9.0) + '@tanstack/react-query-devtools': + specifier: ^5.61.0 + version: 5.61.0(@tanstack/react-query@5.59.20(react@18.3.1))(react@18.3.1) '@testing-library/react': specifier: ^16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -648,10 +651,10 @@ importers: version: 2.5.4 tailwindcss: specifier: ^3.4.14 - version: 3.4.14(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.17.6)(typescript@5.6.3)) + version: 3.4.14(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@20.17.6)(typescript@5.6.3)) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.17.6)(typescript@5.6.3))) + version: 1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@20.17.6)(typescript@5.6.3))) typescript: specifier: 5.6.3 version: 5.6.3 @@ -4341,6 +4344,15 @@ packages: '@tanstack/query-core@5.59.20': resolution: {integrity: sha512-e8vw0lf7KwfGe1if4uPFhvZRWULqHjFcz3K8AebtieXvnMOz5FSzlZe3mTLlPuUBcydCnBRqYs2YJ5ys68wwLg==} + '@tanstack/query-devtools@5.59.20': + resolution: {integrity: sha512-vxhuQ+8VV4YWQSFxQLsuM+dnEKRY7VeRzpNabFXdhEwsBYLrjXlF1pM38A8WyKNLqZy8JjyRO8oP4Wd/oKHwuQ==} + + '@tanstack/react-query-devtools@5.61.0': + resolution: {integrity: sha512-hd3yXl+KV+OGQmAw946qHAFp6DygcXcYN+1ai9idYddx6uEQyCwYk3jyIBOQEUw9uzN5DOGJLBsgd/QcimDQsA==} + peerDependencies: + '@tanstack/react-query': ^5.61.0 + react: ^18 || ^19 + '@tanstack/react-query@5.59.20': resolution: {integrity: sha512-Zly0egsK0tFdfSbh5/mapSa+Zfc3Et0Zkar7Wo5sQkFzWyB3p3uZWOHR2wrlAEEV2L953eLuDBtbgFvMYiLvUw==} peerDependencies: @@ -12492,7 +12504,7 @@ snapshots: lodash: 4.17.21 nanoid: 3.3.7 - '@golevelup/nestjs-discovery@4.0.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))': + '@golevelup/nestjs-discovery@4.0.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)': dependencies: '@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -12504,10 +12516,10 @@ snapshots: lodash: 4.17.21 rxjs: 7.8.1 - '@golevelup/nestjs-rabbitmq@5.6.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2)(rxjs@7.8.1)': + '@golevelup/nestjs-rabbitmq@5.6.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1)': dependencies: '@golevelup/nestjs-common': 2.0.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)) - '@golevelup/nestjs-discovery': 4.0.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1)) + '@golevelup/nestjs-discovery': 4.0.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7) '@golevelup/nestjs-modules': 0.7.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(rxjs@7.8.1) '@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -13377,7 +13389,7 @@ snapshots: '@tybys/wasm-util': 0.9.0 optional: true - '@nestjs-modules/mailer@2.0.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(nodemailer@6.9.16)': + '@nestjs-modules/mailer@2.0.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(nodemailer@6.9.16)': dependencies: '@css-inline/css-inline': 0.14.1 '@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -13397,13 +13409,13 @@ snapshots: transitivePeerDependencies: - encoding - '@nestjs/apollo@12.2.1(@apollo/server@4.11.2(graphql@16.9.0))(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/graphql@12.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(graphql@16.9.0)(reflect-metadata@0.2.2)(ts-morph@16.0.0))(graphql@16.9.0)': + '@nestjs/apollo@12.2.1(@apollo/server@4.11.2(graphql@16.9.0))(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/graphql@12.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(class-transformer@0.5.1)(class-validator@0.14.1)(graphql@16.9.0)(reflect-metadata@0.2.2)(ts-morph@16.0.0))(graphql@16.9.0)': dependencies: '@apollo/server': 4.11.2(graphql@16.9.0) '@apollo/server-plugin-landing-page-graphql-playground': 4.0.0(@apollo/server@4.11.2(graphql@16.9.0)) '@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1) - '@nestjs/graphql': 12.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(graphql@16.9.0)(reflect-metadata@0.2.2)(ts-morph@16.0.0) + '@nestjs/graphql': 12.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(class-transformer@0.5.1)(class-validator@0.14.1)(graphql@16.9.0)(reflect-metadata@0.2.2)(ts-morph@16.0.0) graphql: 16.9.0 iterall: 1.3.0 lodash.omit: 4.5.0 @@ -13415,7 +13427,7 @@ snapshots: axios: 1.7.7 rxjs: 7.8.1 - '@nestjs/cache-manager@2.3.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(cache-manager@5.7.6)(rxjs@7.8.1)': + '@nestjs/cache-manager@2.3.0(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(cache-manager@5.7.6)(rxjs@7.8.1)': dependencies: '@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -13486,7 +13498,7 @@ snapshots: transitivePeerDependencies: - encoding - '@nestjs/graphql@12.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(graphql@16.9.0)(reflect-metadata@0.2.2)(ts-morph@16.0.0)': + '@nestjs/graphql@12.2.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(class-transformer@0.5.1)(class-validator@0.14.1)(graphql@16.9.0)(reflect-metadata@0.2.2)(ts-morph@16.0.0)': dependencies: '@graphql-tools/merge': 9.0.8(graphql@16.9.0) '@graphql-tools/schema': 10.0.7(graphql@16.9.0) @@ -13556,7 +13568,7 @@ snapshots: transitivePeerDependencies: - chokidar - '@nestjs/swagger@7.4.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)': + '@nestjs/swagger@7.4.2(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)': dependencies: '@microsoft/tsdoc': 0.15.0 '@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -13571,7 +13583,7 @@ snapshots: class-transformer: 0.5.1 class-validator: 0.14.1 - '@nestjs/testing@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7))': + '@nestjs/testing@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7)': dependencies: '@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -15063,7 +15075,7 @@ snapshots: '@sentry/types': 8.38.0 '@sentry/utils': 8.38.0 - '@sentry/nextjs@8.38.0(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@14.2.17(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.96.1(@swc/core@1.9.2))': + '@sentry/nextjs@8.38.0(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.54.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(next@14.2.17(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)))': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) @@ -15077,7 +15089,7 @@ snapshots: '@sentry/types': 8.38.0 '@sentry/utils': 8.38.0 '@sentry/vercel-edge': 8.38.0 - '@sentry/webpack-plugin': 2.22.6(webpack@5.96.1(@swc/core@1.9.2)) + '@sentry/webpack-plugin': 2.22.6(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) chalk: 3.0.0 next: 14.2.17(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) resolve: 1.22.8 @@ -15167,12 +15179,12 @@ snapshots: '@sentry/types': 8.38.0 '@sentry/utils': 8.38.0 - '@sentry/webpack-plugin@2.22.6(webpack@5.96.1(@swc/core@1.9.2))': + '@sentry/webpack-plugin@2.22.6(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)))': dependencies: '@sentry/bundler-plugin-core': 2.22.6 unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.96.1(@swc/core@1.9.2) + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) transitivePeerDependencies: - encoding - supports-color @@ -15638,16 +15650,24 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/typography@0.5.15(tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.17.6)(typescript@5.6.3)))': + '@tailwindcss/typography@0.5.15(tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@20.17.6)(typescript@5.6.3)))': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.14(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.17.6)(typescript@5.6.3)) + tailwindcss: 3.4.14(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@20.17.6)(typescript@5.6.3)) '@tanstack/query-core@5.59.20': {} + '@tanstack/query-devtools@5.59.20': {} + + '@tanstack/react-query-devtools@5.61.0(@tanstack/react-query@5.59.20(react@18.3.1))(react@18.3.1)': + dependencies: + '@tanstack/query-devtools': 5.59.20 + '@tanstack/react-query': 5.59.20(react@18.3.1) + react: 18.3.1 + '@tanstack/react-query@5.59.20(react@18.3.1)': dependencies: '@tanstack/query-core': 5.59.20 @@ -18057,7 +18077,7 @@ snapshots: debug: 4.3.7(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.57.1 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 @@ -18070,7 +18090,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: @@ -18092,7 +18112,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -20440,7 +20460,7 @@ snapshots: neo-async@2.6.2: {} - nestjs-otel@6.1.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1)): + nestjs-otel@6.1.1(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7): dependencies: '@nestjs/common': 10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/core': 10.4.7(@nestjs/common@10.4.7(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -21056,7 +21076,7 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.49 - postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.17.6)(typescript@5.6.3)): + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@20.17.6)(typescript@5.6.3)): dependencies: lilconfig: 3.1.2 yaml: 2.6.0 @@ -22309,11 +22329,11 @@ snapshots: tailwind-merge@2.5.4: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.17.6)(typescript@5.6.3))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@20.17.6)(typescript@5.6.3))): dependencies: - tailwindcss: 3.4.14(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.17.6)(typescript@5.6.3)) + tailwindcss: 3.4.14(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@20.17.6)(typescript@5.6.3)) - tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.17.6)(typescript@5.6.3)): + tailwindcss@3.4.14(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@20.17.6)(typescript@5.6.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -22332,7 +22352,7 @@ snapshots: postcss: 8.4.49 postcss-import: 15.1.0(postcss@8.4.49) postcss-js: 4.0.1(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.17.6)(typescript@5.6.3)) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@20.17.6)(typescript@5.6.3)) postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -22361,17 +22381,6 @@ snapshots: optionalDependencies: '@swc/core': 1.9.2(@swc/helpers@0.5.13) - terser-webpack-plugin@5.3.10(@swc/core@1.9.2)(webpack@5.96.1(@swc/core@1.9.2)): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.2 - terser: 5.36.0 - webpack: 5.96.1(@swc/core@1.9.2) - optionalDependencies: - '@swc/core': 1.9.2(@swc/helpers@0.5.13) - terser@5.36.0: dependencies: '@jridgewell/source-map': 0.3.6 @@ -22902,36 +22911,6 @@ snapshots: - esbuild - uglify-js - webpack@5.96.1(@swc/core@1.9.2): - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.6 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.14.0 - browserslist: 4.24.2 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.4 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.9.2)(webpack@5.96.1(@swc/core@1.9.2)) - watchpack: 2.4.2 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3