From a9a4f1617a620dfe1b7d5a9ece7f9575d0dd75e2 Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Thu, 10 Jul 2025 00:35:34 -0700 Subject: [PATCH] fixed dispatch eslint errors --- .vscode/settings.json | 2 +- .../dispatch/_components/StationSelect.tsx | 3 +- .../navbar/_components/Connection.tsx | 4 +- .../_components/pannel/MissionForm.tsx | 3 +- .../dispatch/_components/pannel/Pannel.tsx | 9 +- .../(app)/pilot/_components/mrt/useButtons.ts | 4 +- .../navbar/_components/Connection.tsx | 9 +- apps/dispatch/app/(app)/pilot/page.tsx | 2 +- apps/dispatch/app/(auth)/layout.tsx | 1 - .../app/(auth)/login/_components/Login.tsx | 2 +- .../app/_components/Audio/useSounds.ts | 3 +- .../app/_components/ErrorBoundary.tsx | 4 +- .../app/_components/QueryProvider.tsx | 6 +- apps/dispatch/app/_components/Select.tsx | 4 +- .../customToasts/HPGnotification.tsx | 4 +- .../customToasts/StationStatusToast.tsx | 3 +- apps/dispatch/app/_components/left/Chat.tsx | 4 +- .../app/_components/left/SituationBoard.tsx | 14 +- .../app/_components/map/AircraftMarker.tsx | 2 +- .../dispatch/app/_components/map/BaseMaps.tsx | 18 +- .../app/_components/map/ContextMenu.tsx | 9 +- .../app/_components/map/MissionMarkers.tsx | 6 +- .../app/_components/map/SearchElements.tsx | 4 +- .../map/_components/AircraftMarkerTabs.tsx | 2 +- .../map/_components/MissionMarkerTabs.tsx | 27 +- .../app/_components/navbar/AdminPanel.tsx | 5 +- .../app/_components/navbar/Settings.tsx | 1 - .../app/_helpers/findClosestPolygon.ts | 1 + .../app/_helpers/findLeitstelleinPoint.ts | 4 +- .../app/_helpers/liveKitEventHandler.ts | 13 +- apps/dispatch/app/_querys/aircrafts.ts | 2 +- apps/dispatch/app/_querys/dispatcher.ts | 2 +- apps/dispatch/app/_querys/missions.ts | 6 +- apps/dispatch/app/_querys/osm.ts | 2 - apps/dispatch/app/_store/audioStore.ts | 7 +- .../app/api/aircrafts/positionlog/route.ts | 2 +- .../app/api/auth/[...nextauth]/auth.ts | 9 +- .../app/api/livekit-participant/route.ts | 7 +- apps/dispatch/app/api/livekit-token/route.ts | 1 - apps/dispatch/app/api/position-log/route.ts | 2 +- apps/dispatch/eslint.config.js | 2 +- apps/dispatch/package.json | 2 + apps/dispatch/types/next-auth.d.ts | 1 - package.json | 5 +- packages/eslint-config/next.js | 5 + packages/typescript-config/base.json | 3 +- pnpm-lock.yaml | 350 ++++++++++++++---- 47 files changed, 396 insertions(+), 185 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index d40ae7d2..7265ca71 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,7 +2,7 @@ "editor.formatOnSave": true, "files.autoSave": "off", "editor.defaultFormatter": "esbenp.prettier-vscode", - "eslint.workingDirectories": [{ "pattern": "./apps/*/" }, { "pattern": "./packages/*/" }], + "eslint.workingDirectories": [{ "mode": "auto" }], "editor.codeActionsOnSave": ["source.formatDocument", "source.fixAll.eslint"], "typescript.validate.enable": true, "typescript.tsserver.experimental.enableProjectDiagnostics": true, diff --git a/apps/dispatch/app/(app)/dispatch/_components/StationSelect.tsx b/apps/dispatch/app/(app)/dispatch/_components/StationSelect.tsx index dec6274a..53038bdb 100644 --- a/apps/dispatch/app/(app)/dispatch/_components/StationSelect.tsx +++ b/apps/dispatch/app/(app)/dispatch/_components/StationSelect.tsx @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { HpgState } from "@repo/db"; import { cn } from "@repo/shared-components"; import { useQuery } from "@tanstack/react-query"; @@ -6,7 +7,6 @@ import { getConnectedAircraftsAPI } from "_querys/aircrafts"; import { getStationsAPI } from "_querys/stations"; import { Ambulance, FireExtinguisher, Radio, Siren } from "lucide-react"; import { useEffect, useState } from "react"; -import { FieldValues } from "react-hook-form"; type MissionStationsSelectProps = { selectedStations?: number[]; @@ -54,7 +54,6 @@ export function StationsSelect({ ...(vehicleStates.hpgFireEngineState !== HpgState.NOT_REQUESTED || undefined ? ["FW"] : []), ...(vehicleStates.hpgPoliceState !== HpgState.NOT_REQUESTED || undefined ? ["POL"] : []), ]); - // eslint-disable-next-line react-hooks/exhaustive-deps }, [selectedStations, vehicleStates]); // Helper to check if a station is a vehicle and its state is NOT_REQUESTED diff --git a/apps/dispatch/app/(app)/dispatch/_components/navbar/_components/Connection.tsx b/apps/dispatch/app/(app)/dispatch/_components/navbar/_components/Connection.tsx index 66dea2af..3ec4a56a 100644 --- a/apps/dispatch/app/(app)/dispatch/_components/navbar/_components/Connection.tsx +++ b/apps/dispatch/app/(app)/dispatch/_components/navbar/_components/Connection.tsx @@ -1,3 +1,4 @@ +/* eslint-disable react-hooks/exhaustive-deps */ "use client"; import { useSession } from "next-auth/react"; import { useDispatchConnectionStore } from "../../../../../_store/dispatch/connectionStore"; @@ -22,7 +23,6 @@ export const ConnectionBtn = () => { const [logoffDebounce, setLogoffDebounce] = useState(null); const session = useSession(); const uid = session.data?.user?.id; - if (!uid) return null; // useEffect für die Logoff-Zeit const [logoffHours, logoffMinutes] = form.logoffTime?.split(":").map(Number) || []; @@ -58,7 +58,7 @@ export const ConnectionBtn = () => { connection.disconnect(); }; }, [connection.disconnect]); - + if (!uid) return null; return (
{connection.message.length > 0 && ( diff --git a/apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx b/apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx index 3ae8f2e0..df0baa41 100644 --- a/apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx +++ b/apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx @@ -1,8 +1,9 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ "use client"; import React, { useEffect } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; -import { BellRing, BookmarkPlus, Radio } from "lucide-react"; +import { BellRing, BookmarkPlus } from "lucide-react"; import { KEYWORD_CATEGORY, Mission, missionType, Prisma } from "@repo/db"; import { JsonValueType, diff --git a/apps/dispatch/app/(app)/dispatch/_components/pannel/Pannel.tsx b/apps/dispatch/app/(app)/dispatch/_components/pannel/Pannel.tsx index cb98c919..4515fce0 100644 --- a/apps/dispatch/app/(app)/dispatch/_components/pannel/Pannel.tsx +++ b/apps/dispatch/app/(app)/dispatch/_components/pannel/Pannel.tsx @@ -26,7 +26,14 @@ export const Pannel = () => { setOpen(false); } } - }, [missions, setMissionFormValues, setEditingMission, setOpen, missionFormValues]); + }, [ + missions, + setMissionFormValues, + setEditingMission, + setOpen, + missionFormValues, + editingMissionId, + ]); return (
diff --git a/apps/dispatch/app/(app)/pilot/_components/mrt/useButtons.ts b/apps/dispatch/app/(app)/pilot/_components/mrt/useButtons.ts index dfaad039..8718295f 100644 --- a/apps/dispatch/app/(app)/pilot/_components/mrt/useButtons.ts +++ b/apps/dispatch/app/(app)/pilot/_components/mrt/useButtons.ts @@ -1,4 +1,4 @@ -import { ConnectedAircraft, Prisma } from "@repo/db"; +import { Prisma } from "@repo/db"; import { usePilotConnectionStore } from "_store/pilot/connectionStore"; import { useMrtStore } from "_store/pilot/MrtStore"; import { pilotSocket } from "(app)/pilot/socket"; @@ -21,7 +21,7 @@ export const useButtons = () => { }) => editConnectedAircraftAPI(aircraftId, data), }); - const { page, setPage } = useMrtStore((state) => state); + const { setPage } = useMrtStore((state) => state); const handleButton = (button: "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "0" | "home") => () => { diff --git a/apps/dispatch/app/(app)/pilot/_components/navbar/_components/Connection.tsx b/apps/dispatch/app/(app)/pilot/_components/navbar/_components/Connection.tsx index 85e54acb..e39c1f74 100644 --- a/apps/dispatch/app/(app)/pilot/_components/navbar/_components/Connection.tsx +++ b/apps/dispatch/app/(app)/pilot/_components/navbar/_components/Connection.tsx @@ -9,7 +9,6 @@ import { editConnectedAircraftAPI, getConnectedAircraftsAPI } from "_querys/airc import { Prisma } from "@repo/db"; import { getNextDateWithTime } from "@repo/shared-components"; import { Select } from "_components/Select"; -import { components } from "react-select"; import { Radio } from "lucide-react"; export const ConnectionBtn = () => { @@ -54,7 +53,7 @@ export const ConnectionBtn = () => { return () => { connection.disconnect(); }; - }, [connection.disconnect]); + }, [connection, connection.disconnect]); const [logoffHours, logoffMinutes] = form.logoffTime?.split(":").map(Number) || []; @@ -87,7 +86,7 @@ export const ConnectionBtn = () => { return () => { if (logoffDebounce) clearTimeout(logoffDebounce); }; - }, [logoffHours, logoffMinutes, connection.connectedAircraft]); + }, [logoffHours, logoffMinutes, connection.connectedAircraft, aircraftMutation, logoffDebounce]); const session = useSession(); const uid = session.data?.user?.id; @@ -143,7 +142,9 @@ export const ConnectionBtn = () => { }) } value={form.selectedStationId ?? ""} - formatOptionLabel={(option: any) => option.component} + formatOptionLabel={(option: unknown) => + (option as { component: React.ReactNode }).component + } options={ stations?.map((station) => ({ value: station.id.toString(), diff --git a/apps/dispatch/app/(app)/pilot/page.tsx b/apps/dispatch/app/(app)/pilot/page.tsx index 664b0b8e..e72bf3e9 100644 --- a/apps/dispatch/app/(app)/pilot/page.tsx +++ b/apps/dispatch/app/(app)/pilot/page.tsx @@ -8,7 +8,7 @@ import dynamic from "next/dynamic"; import { ConnectedDispatcher } from "tracker/_components/ConnectedDispatcher"; import { useQuery } from "@tanstack/react-query"; import { usePilotConnectionStore } from "_store/pilot/connectionStore"; -import { getAircraftsAPI, getConnectedAircraftsAPI } from "_querys/aircrafts"; +import { getAircraftsAPI } from "_querys/aircrafts"; import { checkSimulatorConnected } from "@repo/shared-components"; import { SimConnectionAlert } from "(app)/pilot/_components/SimConnectionAlert"; diff --git a/apps/dispatch/app/(auth)/layout.tsx b/apps/dispatch/app/(auth)/layout.tsx index 27c67211..a721e44c 100644 --- a/apps/dispatch/app/(auth)/layout.tsx +++ b/apps/dispatch/app/(auth)/layout.tsx @@ -1,5 +1,4 @@ import { NextPage } from "next"; -import { ReactNode } from "react"; const AuthLayout: NextPage< Readonly<{ diff --git a/apps/dispatch/app/(auth)/login/_components/Login.tsx b/apps/dispatch/app/(auth)/login/_components/Login.tsx index 57c23341..515d3a85 100644 --- a/apps/dispatch/app/(auth)/login/_components/Login.tsx +++ b/apps/dispatch/app/(auth)/login/_components/Login.tsx @@ -14,7 +14,7 @@ export const Login = () => { if (status === "authenticated") { navigate.push("/"); } - }, [session, navigate]); + }, [session, navigate, status]); useEffect(() => { const signInWithCode = async () => { diff --git a/apps/dispatch/app/_components/Audio/useSounds.ts b/apps/dispatch/app/_components/Audio/useSounds.ts index 9a7e8acd..c70247da 100644 --- a/apps/dispatch/app/_components/Audio/useSounds.ts +++ b/apps/dispatch/app/_components/Audio/useSounds.ts @@ -1,5 +1,5 @@ "use client"; -import { useDebounce } from "_helpers/useDebounce"; +import { useDebounce } from "@repo/shared-components"; import { useAudioStore } from "_store/audioStore"; import { useEffect, useRef, useState } from "react"; @@ -112,5 +112,6 @@ export const useSounds = ({ callToLong.current!.pause(); }; } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [isTransmitting]); }; diff --git a/apps/dispatch/app/_components/ErrorBoundary.tsx b/apps/dispatch/app/_components/ErrorBoundary.tsx index 3b60d886..11082aa7 100644 --- a/apps/dispatch/app/_components/ErrorBoundary.tsx +++ b/apps/dispatch/app/_components/ErrorBoundary.tsx @@ -11,10 +11,10 @@ export const CustomErrorBoundary = ({ children }: { children?: React.ReactNode } let errorTest; let errorCode = 500; if ("statusCode" in error) { - errorCode = (error as any).statusCode; + errorCode = error.statusCode; } if ("message" in error || error instanceof Error) { - errorTest = (error as any).message; + errorTest = error.message; } else if (typeof error === "string") { errorTest = error; } else { diff --git a/apps/dispatch/app/_components/QueryProvider.tsx b/apps/dispatch/app/_components/QueryProvider.tsx index 2148e219..b973a835 100644 --- a/apps/dispatch/app/_components/QueryProvider.tsx +++ b/apps/dispatch/app/_components/QueryProvider.tsx @@ -2,10 +2,10 @@ "use client"; import { toast } from "react-hot-toast"; -import { QueryClient, QueryClientProvider, useQuery } from "@tanstack/react-query"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { ReactNode, useEffect, useState } from "react"; import { dispatchSocket } from "(app)/dispatch/socket"; -import { Mission, NotificationPayload } from "@repo/db"; +import { NotificationPayload } from "@repo/db"; import { HPGnotificationToast } from "_components/customToasts/HPGnotification"; import { useMapStore } from "_store/mapStore"; import { AdminMessageToast } from "_components/customToasts/AdminMessage"; @@ -30,7 +30,7 @@ export function QueryProvider({ children }: { children: ReactNode }) { }), ); useEffect(() => { - const invalidateMission = (mission: Mission) => { + const invalidateMission = () => { queryClient.invalidateQueries({ queryKey: ["missions"], }); diff --git a/apps/dispatch/app/_components/Select.tsx b/apps/dispatch/app/_components/Select.tsx index 2db672ad..d7605b2d 100644 --- a/apps/dispatch/app/_components/Select.tsx +++ b/apps/dispatch/app/_components/Select.tsx @@ -1,5 +1,5 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ "use client"; -import { FieldValues, Path } from "react-hook-form"; import SelectTemplate, { Props as SelectTemplateProps, StylesConfig } from "react-select"; import { cn } from "@repo/shared-components"; import dynamic from "next/dynamic"; @@ -99,7 +99,7 @@ const SelectCom = ({ ); }; -const SelectWrapper = (props: SelectProps) => ; +const SelectWrapper = (props: SelectProps) => ; export const Select = dynamic(() => Promise.resolve(SelectWrapper), { ssr: false, diff --git a/apps/dispatch/app/_components/customToasts/HPGnotification.tsx b/apps/dispatch/app/_components/customToasts/HPGnotification.tsx index 5437598b..ccf5593d 100644 --- a/apps/dispatch/app/_components/customToasts/HPGnotification.tsx +++ b/apps/dispatch/app/_components/customToasts/HPGnotification.tsx @@ -1,6 +1,6 @@ -import { NotificationPayload, ValidationFailed, ValidationSuccess } from "@repo/db"; +import { ValidationFailed, ValidationSuccess } from "@repo/db"; import { BaseNotification } from "_components/customToasts/BaseNotification"; -import { MapStore, useMapStore } from "_store/mapStore"; +import { MapStore } from "_store/mapStore"; import { Check, Cross } from "lucide-react"; import toast, { Toast } from "react-hot-toast"; diff --git a/apps/dispatch/app/_components/customToasts/StationStatusToast.tsx b/apps/dispatch/app/_components/customToasts/StationStatusToast.tsx index 76737ef1..689cbbde 100644 --- a/apps/dispatch/app/_components/customToasts/StationStatusToast.tsx +++ b/apps/dispatch/app/_components/customToasts/StationStatusToast.tsx @@ -5,7 +5,6 @@ import { FMS_STATUS_COLORS } from "_helpers/fmsStatusColors"; import { editConnectedAircraftAPI, getConnectedAircraftsAPI } from "_querys/aircrafts"; import { getStationsAPI } from "_querys/stations"; import { useMapStore } from "_store/mapStore"; -import { cpSync } from "fs"; import { X } from "lucide-react"; import { useEffect, useRef, useState } from "react"; import { Toast, toast } from "react-hot-toast"; @@ -67,7 +66,7 @@ export const StatusToast = ({ event, t }: { event: StationStatus; t: Toast }) => } else if (event.status == connectedAircraft?.fmsStatus && !aircraftDataAcurate) { setAircraftDataAccurate(true); } - }, [connectedAircraft, station]); + }, [aircraftDataAcurate, connectedAircraft, event.status, t.id]); useEffect(() => { let soundRef: React.RefObject | null = null; diff --git a/apps/dispatch/app/_components/left/Chat.tsx b/apps/dispatch/app/_components/left/Chat.tsx index 79ae6b36..0ef4ed3e 100644 --- a/apps/dispatch/app/_components/left/Chat.tsx +++ b/apps/dispatch/app/_components/left/Chat.tsx @@ -41,7 +41,7 @@ export const Chat = () => { useEffect(() => { if (!session.data?.user.id) return; setOwnId(session.data?.user.id); - }, [session.data?.user.id]); + }, [session.data?.user.id, setOwnId]); const filteredDispatcher = dispatcher?.filter((d) => d.userId !== session.data?.user.id); const filteredAircrafts = aircrafts?.filter((a) => a.userId !== session.data?.user.id); @@ -118,7 +118,7 @@ export const Chat = () => { const dispatcherUser = dispatcher?.find((d) => d.userId === addTabValue); const user = aircraftUser || dispatcherUser; if (!user) return; - let role = "Station" in user ? user.Station.bosCallsignShort : user.zone; + const role = "Station" in user ? user.Station.bosCallsignShort : user.zone; addChat(addTabValue, `${asPublicUser(user.publicUser).fullName} (${role})`); setSelectedChat(addTabValue); }} diff --git a/apps/dispatch/app/_components/left/SituationBoard.tsx b/apps/dispatch/app/_components/left/SituationBoard.tsx index 91014b2f..635f75af 100644 --- a/apps/dispatch/app/_components/left/SituationBoard.tsx +++ b/apps/dispatch/app/_components/left/SituationBoard.tsx @@ -4,7 +4,7 @@ import { cn } from "@repo/shared-components"; import { ListCollapse, Plane } from "lucide-react"; import { useQuery } from "@tanstack/react-query"; import { getMissionsAPI } from "_querys/missions"; -import { Station } from "@repo/db"; +import { Mission, Station } from "@repo/db"; import { getConnectedAircraftsAPI } from "_querys/aircrafts"; import { FMS_STATUS_COLORS, FMS_STATUS_TEXT_COLORS } from "_helpers/fmsStatusColors"; import { useMapStore } from "_store/mapStore"; @@ -20,7 +20,13 @@ export const SituationBoard = () => { const { data: missions } = useQuery({ queryKey: ["missions", "missions-on-stations"], queryFn: () => - getMissionsAPI( + getMissionsAPI< + Mission & { + MissionsOnStations: (Station & { + Station: Station; + })[]; + } + >( { state: { not: "finished", @@ -125,8 +131,8 @@ export const SituationBoard = () => { {mission.missionKeywordAbbreviation} {mission.addressCity} - {(mission as any).MissionsOnStations?.map( - (mos: { Station: Station }) => mos.Station?.bosCallsignShort, + {mission.MissionsOnStations?.map( + (mos) => mos.Station?.bosCallsignShort, ).join(", ")} diff --git a/apps/dispatch/app/_components/map/AircraftMarker.tsx b/apps/dispatch/app/_components/map/AircraftMarker.tsx index 23ac1ef2..28fee344 100644 --- a/apps/dispatch/app/_components/map/AircraftMarker.tsx +++ b/apps/dispatch/app/_components/map/AircraftMarker.tsx @@ -262,7 +262,7 @@ const AircraftMarker = ({ aircraft }: { aircraft: ConnectedAircraft & { Station: return () => { marker?.off("click", handleClick); }; - }, [aircraft.id, openAircraftMarker, setOpenAircraftMarker, markerRef.current]); + }, [aircraft.id, openAircraftMarker, setOpenAircraftMarker]); const [anchor, setAnchor] = useState<"topleft" | "topright" | "bottomleft" | "bottomright">( "topleft", diff --git a/apps/dispatch/app/_components/map/BaseMaps.tsx b/apps/dispatch/app/_components/map/BaseMaps.tsx index f3a8e884..89dfac16 100644 --- a/apps/dispatch/app/_components/map/BaseMaps.tsx +++ b/apps/dispatch/app/_components/map/BaseMaps.tsx @@ -1,7 +1,6 @@ "use client"; -import { usePannelStore } from "_store/pannelStore"; import { Control, Icon, LatLngExpression } from "leaflet"; -import { useEffect, useMemo, useRef, useState } from "react"; +import { useEffect, useRef, useState } from "react"; import { LayerGroup, LayersControl, @@ -15,7 +14,7 @@ import { Marker, Tooltip, } from "react-leaflet"; -// @ts-ignore +// @ts-expect-error geojson hat keine Typen import type { FeatureCollection, Geometry } from "geojson"; import L from "leaflet"; import LEITSTELLENBERECHE from "./_geojson/Leitstellen.json"; @@ -197,7 +196,7 @@ const StationsLayer = ({ attribution }: { attribution: Control.Attribution }) => ); }; -const EsriSatellite = ({ attribution }: { attribution: Control.Attribution }) => { +const EsriSatellite = () => { const accessToken = process.env.NEXT_PUBLIC_ESRI_ACCESS; return ( <> @@ -221,8 +220,7 @@ const StrassentexteEsri = () => { ); }; -const OpenAIP = ({ attribution }: { attribution: Control.Attribution }) => { - const accessToken = process.env.NEXT_PUBLIC_OPENAIP_ACCESS; +const OpenAIP = () => { const ref = useRef(null); return ( @@ -241,7 +239,7 @@ const OpenAIP = ({ attribution }: { attribution: Control.Attribution }) => { ); }; -const NiederschlagOverlay = ({ attribution }: { attribution: Control.Attribution }) => { +const NiederschlagOverlay = () => { const tileLayerRef = useRef(null); return ( @@ -311,7 +309,7 @@ export const BaseMaps = () => { - + @@ -322,7 +320,7 @@ export const BaseMaps = () => { - + @@ -348,7 +346,7 @@ export const BaseMaps = () => { - + diff --git a/apps/dispatch/app/_components/map/ContextMenu.tsx b/apps/dispatch/app/_components/map/ContextMenu.tsx index 79baa740..830a2c33 100644 --- a/apps/dispatch/app/_components/map/ContextMenu.tsx +++ b/apps/dispatch/app/_components/map/ContextMenu.tsx @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { OSMWay, Prisma } from "@repo/db"; +import { OSMWay } from "@repo/db"; import { useDispatchConnectionStore } from "_store/dispatch/connectionStore"; import { useMapStore } from "_store/mapStore"; import { usePannelStore } from "_store/pannelStore"; @@ -8,8 +8,6 @@ import { getOsmAddress } from "_querys/osm"; import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { Popup, useMap } from "react-leaflet"; -import { useMutation, useQueryClient } from "@tanstack/react-query"; -import { editMissionAPI } from "_querys/missions"; import { findClosestPolygon } from "_helpers/findClosestPolygon"; export const ContextMenu = () => { @@ -22,8 +20,9 @@ export const ContextMenu = () => { setSearchPopup, toggleSearchElementSelection, } = useMapStore(); - const { missionFormValues, setMissionFormValues, setOpen, isOpen, editingMissionId } = - usePannelStore((state) => state); + const { missionFormValues, setMissionFormValues, setOpen, isOpen } = usePannelStore( + (state) => state, + ); const [showRulerOptions, setShowRulerOptions] = useState(false); const [rulerHover, setRulerHover] = useState(false); const [rulerOptionsHover, setRulerOptionsHover] = useState(false); diff --git a/apps/dispatch/app/_components/map/MissionMarkers.tsx b/apps/dispatch/app/_components/map/MissionMarkers.tsx index 1a536087..5b186776 100644 --- a/apps/dispatch/app/_components/map/MissionMarkers.tsx +++ b/apps/dispatch/app/_components/map/MissionMarkers.tsx @@ -72,7 +72,7 @@ const MissionPopupContent = ({ default: return Error; } - }, [currentTab, mission]); + }, [currentTab, hpgNeedsAttention, mission]); const setOpenMissionMarker = useMapStore((state) => state.setOpenMissionMarker); const { anchor } = useSmartPopup(); @@ -350,6 +350,10 @@ const MissionMarker = ({ mission }: { mission: Mission }) => { editingMissionId, mission.addressLat, mission.addressLng, + mission.hpgLocationLat, + mission.hpgLocationLng, + mission.hpgValidationState, + mission.id, missionFormValues?.addressLat, missionFormValues?.addressLng, ]); diff --git a/apps/dispatch/app/_components/map/SearchElements.tsx b/apps/dispatch/app/_components/map/SearchElements.tsx index 24deb97f..05134368 100644 --- a/apps/dispatch/app/_components/map/SearchElements.tsx +++ b/apps/dispatch/app/_components/map/SearchElements.tsx @@ -8,7 +8,7 @@ import { useEffect } from "react"; export const SearchElements = () => { const { searchElements, openMissionMarker, setSearchElements } = useMapStore(); - const { isOpen: pannelOpen, editingMissionId } = usePannelStore((state) => state); + const { isOpen: pannelOpen } = usePannelStore((state) => state); const { data: missions } = useQuery({ queryKey: ["missions"], queryFn: () => @@ -42,7 +42,7 @@ export const SearchElements = () => { ); setSearchElements(elements.filter((e) => !!e)); } - }, [openMissionMarker, pannelOpen, missions]); + }, [openMissionMarker, pannelOpen, missions, setSearchElements]); const SearchElement = ({ element }: { element: OSMWay }) => { const { toggleSearchElementSelection } = useMapStore(); diff --git a/apps/dispatch/app/_components/map/_components/AircraftMarkerTabs.tsx b/apps/dispatch/app/_components/map/_components/AircraftMarkerTabs.tsx index 39c6e55b..3eafedaf 100644 --- a/apps/dispatch/app/_components/map/_components/AircraftMarkerTabs.tsx +++ b/apps/dispatch/app/_components/map/_components/AircraftMarkerTabs.tsx @@ -250,7 +250,7 @@ const StationTab = ({ aircraft }: { aircraft: ConnectedAircraft & { Station: Sta const lstName = useMemo(() => { if (!aircraft.posLng || !aircraft.posLat) return station.bosRadioArea; return findLeitstelleForPosition(aircraft.posLng, aircraft.posLat); - }, [aircraft.posLng, aircraft.posLat]); + }, [aircraft.posLng, aircraft.posLat, station.bosRadioArea]); return (
diff --git a/apps/dispatch/app/_components/map/_components/MissionMarkerTabs.tsx b/apps/dispatch/app/_components/map/_components/MissionMarkerTabs.tsx index c1f68a05..a50a8564 100644 --- a/apps/dispatch/app/_components/map/_components/MissionMarkerTabs.tsx +++ b/apps/dispatch/app/_components/map/_components/MissionMarkerTabs.tsx @@ -18,7 +18,6 @@ import { SmartphoneNfc, CheckCheck, Cross, - Radio, Route, } from "lucide-react"; import { @@ -26,12 +25,9 @@ import { HpgState, HpgValidationState, Mission, - MissionAlertLog, - MissionCompletedLog, MissionLog, MissionMessageLog, Prisma, - Station, } from "@repo/db"; import { usePannelStore } from "_store/pannelStore"; import { useSession } from "next-auth/react"; @@ -143,13 +139,16 @@ const Einsatzdetails = ({ state: "finished", missionLog: { push: { - type: "completed-log", - auto: false, - timeStamp: new Date().toISOString(), - data: { - user: getPublicUser(session.data?.user, { ignorePrivacy: true }), - }, - } as any, + toJSON: () => ({ + type: "message-log", + auto: false, + timeStamp: new Date().toISOString(), + data: { + message: "Einsatz abgeschlossen", + user: getPublicUser(session.data.user, { ignorePrivacy: true }), + }, + }), + }, }, }, }); @@ -408,11 +407,6 @@ const Rettungsmittel = ({ mission }: { mission: Mission }) => { refetchMissionStationIds(); }, [mission.missionStationIds, refetchMissionStationIds]); - const { data: allStations } = useQuery({ - queryKey: ["stations"], - queryFn: () => getStationsAPI(), - }); - const sendAlertMutation = useMutation({ mutationKey: ["missions"], mutationFn: ({ @@ -527,6 +521,7 @@ const Rettungsmittel = ({ mission }: { mission: Mission }) => { menuPlacement="top" className="min-w-[320px] flex-1" isMulti={false} + // eslint-disable-next-line @typescript-eslint/no-explicit-any onChange={(v: any) => { setSelectedStation(v); }} diff --git a/apps/dispatch/app/_components/navbar/AdminPanel.tsx b/apps/dispatch/app/_components/navbar/AdminPanel.tsx index f13649b3..3d1bbb49 100644 --- a/apps/dispatch/app/_components/navbar/AdminPanel.tsx +++ b/apps/dispatch/app/_components/navbar/AdminPanel.tsx @@ -1,13 +1,12 @@ "use client"; import { PublicUser } from "@repo/db"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; -import { cn, PenaltyDropdown } from "@repo/shared-components"; +import { PenaltyDropdown } from "@repo/shared-components"; import { getConnectedAircraftsAPI, kickAircraftAPI } from "_querys/aircrafts"; import { getConnectedDispatcherAPI, kickDispatcherAPI } from "_querys/dispatcher"; import { getLivekitRooms, kickLivekitParticipant } from "_querys/livekit"; import { ParticipantInfo } from "livekit-server-sdk"; import { - Eye, LockKeyhole, Plane, RedoDot, @@ -17,7 +16,7 @@ import { UserCheck, Workflow, } from "lucide-react"; -import { ReactNode, useRef, useState } from "react"; +import { useRef } from "react"; import toast from "react-hot-toast"; export default function AdminPanel() { diff --git a/apps/dispatch/app/_components/navbar/Settings.tsx b/apps/dispatch/app/_components/navbar/Settings.tsx index 1889edb9..0b223602 100644 --- a/apps/dispatch/app/_components/navbar/Settings.tsx +++ b/apps/dispatch/app/_components/navbar/Settings.tsx @@ -5,7 +5,6 @@ import { SettingsIcon, Volume2 } from "lucide-react"; import MicVolumeBar from "_components/MicVolumeIndication"; import { useMutation, useQuery } from "@tanstack/react-query"; import { editUserAPI, getUserAPI } from "_querys/user"; -import { Prisma } from "@repo/db"; import { useSession } from "next-auth/react"; import { useAudioStore } from "_store/audioStore"; import toast from "react-hot-toast"; diff --git a/apps/dispatch/app/_helpers/findClosestPolygon.ts b/apps/dispatch/app/_helpers/findClosestPolygon.ts index fd190696..bfda8688 100644 --- a/apps/dispatch/app/_helpers/findClosestPolygon.ts +++ b/apps/dispatch/app/_helpers/findClosestPolygon.ts @@ -36,6 +36,7 @@ export function findClosestPolygon( const polygon = toPolygonFeature(way.nodes); if (!polygon) continue; + // eslint-disable-next-line @typescript-eslint/no-explicit-any const center = centroid(polygon as any).geometry.coordinates; // [lon, lat] const newDistance = distance([referencePoint.lon, referencePoint.lat], center); diff --git a/apps/dispatch/app/_helpers/findLeitstelleinPoint.ts b/apps/dispatch/app/_helpers/findLeitstelleinPoint.ts index c4bfc5fd..1528d522 100644 --- a/apps/dispatch/app/_helpers/findLeitstelleinPoint.ts +++ b/apps/dispatch/app/_helpers/findLeitstelleinPoint.ts @@ -1,10 +1,10 @@ -import { point, multiPolygon, booleanPointInPolygon, booleanIntersects, polygon } from "@turf/turf"; +import { point, booleanPointInPolygon, polygon } from "@turf/turf"; import leitstellenGeoJSON from "../_components/map/_geojson/Leitstellen.json"; // Pfad anpassen export function findLeitstelleForPosition(lat: number, lng: number) { const heliPoint = point([lat, lng]); - for (const feature of (leitstellenGeoJSON as any).features) { + for (const feature of (leitstellenGeoJSON as GeoJSON.FeatureCollection).features) { const geom = feature.geometry; if (geom.type === "Polygon") { diff --git a/apps/dispatch/app/_helpers/liveKitEventHandler.ts b/apps/dispatch/app/_helpers/liveKitEventHandler.ts index 9a625eb8..3d93f718 100644 --- a/apps/dispatch/app/_helpers/liveKitEventHandler.ts +++ b/apps/dispatch/app/_helpers/liveKitEventHandler.ts @@ -1,8 +1,6 @@ import { useAudioStore } from "_store/audioStore"; import { - LocalParticipant, LocalTrackPublication, - Participant, RemoteParticipant, RemoteTrack, RemoteTrackPublication, @@ -30,19 +28,12 @@ export const handleTrackSubscribed = ( } }; -export const handleTrackUnsubscribed = ( - track: RemoteTrack, - publication: RemoteTrackPublication, - participant: RemoteParticipant, -) => { +export const handleTrackUnsubscribed = (track: RemoteTrack) => { // remove tracks from all attached elements track.detach(); }; -export const handleLocalTrackUnpublished = ( - publication: LocalTrackPublication, - participant: LocalParticipant, -) => { +export const handleLocalTrackUnpublished = (publication: LocalTrackPublication) => { // when local tracks are ended, update UI to remove them from rendering publication.track?.detach(); }; diff --git a/apps/dispatch/app/_querys/aircrafts.ts b/apps/dispatch/app/_querys/aircrafts.ts index b0978f0d..ddc53602 100644 --- a/apps/dispatch/app/_querys/aircrafts.ts +++ b/apps/dispatch/app/_querys/aircrafts.ts @@ -1,4 +1,4 @@ -import { ConnectedAircraft, PositionLog, Prisma, PublicUser, Station } from "@repo/db"; +import { ConnectedAircraft, PositionLog, Prisma, Station } from "@repo/db"; import axios from "axios"; import { serverApi } from "_helpers/axios"; import { checkSimulatorConnected } from "@repo/shared-components"; diff --git a/apps/dispatch/app/_querys/dispatcher.ts b/apps/dispatch/app/_querys/dispatcher.ts index 5865b9ae..fda3ed36 100644 --- a/apps/dispatch/app/_querys/dispatcher.ts +++ b/apps/dispatch/app/_querys/dispatcher.ts @@ -1,4 +1,4 @@ -import { ConnectedAircraft, ConnectedDispatcher, Prisma } from "@repo/db"; +import { ConnectedDispatcher, Prisma } from "@repo/db"; import { serverApi } from "_helpers/axios"; import axios from "axios"; diff --git a/apps/dispatch/app/_querys/missions.ts b/apps/dispatch/app/_querys/missions.ts index 5b106beb..8a212fcd 100644 --- a/apps/dispatch/app/_querys/missions.ts +++ b/apps/dispatch/app/_querys/missions.ts @@ -2,12 +2,12 @@ import { Mission, MissionSdsLog, Prisma } from "@repo/db"; import axios from "axios"; import { serverApi } from "_helpers/axios"; -export const getMissionsAPI = async ( +export const getMissionsAPI = async ( filter?: Prisma.MissionWhereInput, include?: Prisma.MissionInclude, orderBy?: Prisma.MissionOrderByWithRelationInput, -) => { - const res = await axios.get("/api/missions", { +): Promise => { + const res = await axios.get("/api/missions", { params: { filter: JSON.stringify(filter), include: JSON.stringify(include), diff --git a/apps/dispatch/app/_querys/osm.ts b/apps/dispatch/app/_querys/osm.ts index 42175f9f..20addd6f 100644 --- a/apps/dispatch/app/_querys/osm.ts +++ b/apps/dispatch/app/_querys/osm.ts @@ -1,5 +1,3 @@ -import { raw } from "../../../../packages/database/generated/client/runtime/library"; - export const getOsmAddress = async (lat: number, lng: number) => { const address = await fetch( `https://nominatim.openstreetmap.org/reverse?lat=${lat}&lon=${lng}&format=json`, diff --git a/apps/dispatch/app/_store/audioStore.ts b/apps/dispatch/app/_store/audioStore.ts index a6768468..6bf09c61 100644 --- a/apps/dispatch/app/_store/audioStore.ts +++ b/apps/dispatch/app/_store/audioStore.ts @@ -65,7 +65,7 @@ export const useAudioStore = create((set, get) => ({ const newSpeaktingParticipants = get().speakingParticipants.filter( (p) => !(p.identity === participant.identity), ); - set((state) => ({ + set(() => ({ speakingParticipants: newSpeaktingParticipants, })); if (newSpeaktingParticipants.length === 0 && get().transmitBlocked) { @@ -77,8 +77,7 @@ export const useAudioStore = create((set, get) => ({ set({ micDeviceId, micVolume }); }, toggleTalking: () => { - const { room, isTalking, micDeviceId, micVolume, speakingParticipants, transmitBlocked } = - get(); + const { room, isTalking, micDeviceId, speakingParticipants, transmitBlocked } = get(); if (!room) return; if (speakingParticipants.length > 0 && !isTalking && !transmitBlocked) { @@ -187,7 +186,7 @@ interface PTTData { } const handlePTT = (data: PTTData) => { - const { shouldTransmit, source } = data; + const { shouldTransmit } = data; const { room, speakingParticipants } = useAudioStore.getState(); if (!room) return; diff --git a/apps/dispatch/app/api/aircrafts/positionlog/route.ts b/apps/dispatch/app/api/aircrafts/positionlog/route.ts index 5878b4bb..00ea91a4 100644 --- a/apps/dispatch/app/api/aircrafts/positionlog/route.ts +++ b/apps/dispatch/app/api/aircrafts/positionlog/route.ts @@ -1,4 +1,4 @@ -import { prisma, Prisma } from "@repo/db"; +import { prisma } from "@repo/db"; import { NextRequest, NextResponse } from "next/server"; export async function GET(request: NextRequest): Promise { diff --git a/apps/dispatch/app/api/auth/[...nextauth]/auth.ts b/apps/dispatch/app/api/auth/[...nextauth]/auth.ts index 16f406b3..3f1268e9 100644 --- a/apps/dispatch/app/api/auth/[...nextauth]/auth.ts +++ b/apps/dispatch/app/api/auth/[...nextauth]/auth.ts @@ -1,7 +1,8 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { AuthOptions, getServerSession as getNextAuthServerSession } from "next-auth"; import { PrismaAdapter } from "@next-auth/prisma-adapter"; import Credentials from "next-auth/providers/credentials"; -import { prisma, PrismaClient } from "@repo/db"; +import { prisma } from "@repo/db"; export const options: AuthOptions = { providers: [ @@ -9,7 +10,7 @@ export const options: AuthOptions = { credentials: { code: { label: "code", type: "code" }, }, - async authorize(credentials, req) { + async authorize(credentials) { try { if (!credentials) throw new Error("No credentials provided"); const code = await prisma.oAuthToken.findFirstOrThrow({ @@ -60,7 +61,7 @@ export const options: AuthOptions = { adapter: PrismaAdapter(prisma as any), callbacks: { - jwt: async ({ token, user, ...rest }) => { + jwt: async ({ token, user }) => { if (user && "firstname" in user) { return { ...token, @@ -69,7 +70,7 @@ export const options: AuthOptions = { } return token; }, - session: async ({ session, user, token }) => { + session: async ({ session, token }) => { const dbUser = await prisma.user.findUnique({ where: { id: token?.sub, diff --git a/apps/dispatch/app/api/livekit-participant/route.ts b/apps/dispatch/app/api/livekit-participant/route.ts index 5b84765a..e17b57c1 100644 --- a/apps/dispatch/app/api/livekit-participant/route.ts +++ b/apps/dispatch/app/api/livekit-participant/route.ts @@ -3,15 +3,10 @@ import { RoomManager } from "_helpers/LivekitRoomManager"; import { getServerSession } from "api/auth/[...nextauth]/auth"; import { NextRequest } from "next/server"; -export const GET = async (request: NextRequest) => { +export const GET = async () => { const session = await getServerSession(); if (!session) return Response.json({ message: "Unauthorized" }, { status: 401 }); - const user = await prisma.user.findUnique({ - where: { - id: session.user.id, - }, - }); const rooms = await RoomManager.listRooms(); diff --git a/apps/dispatch/app/api/livekit-token/route.ts b/apps/dispatch/app/api/livekit-token/route.ts index 23e5219f..e1e37372 100644 --- a/apps/dispatch/app/api/livekit-token/route.ts +++ b/apps/dispatch/app/api/livekit-token/route.ts @@ -1,5 +1,4 @@ import { getServerSession } from "api/auth/[...nextauth]/auth"; -import { ROOMS } from "_data/livekitRooms"; import { AccessToken } from "livekit-server-sdk"; import { NextRequest } from "next/server"; import { getPublicUser, prisma } from "@repo/db"; diff --git a/apps/dispatch/app/api/position-log/route.ts b/apps/dispatch/app/api/position-log/route.ts index bba54a36..3b50dbcc 100644 --- a/apps/dispatch/app/api/position-log/route.ts +++ b/apps/dispatch/app/api/position-log/route.ts @@ -1,4 +1,4 @@ -import { PositionLog, Prisma, prisma, User } from "@repo/db"; +import { PositionLog, prisma, User } from "@repo/db"; import { getServerSession } from "api/auth/[...nextauth]/auth"; import { verify } from "jsonwebtoken"; diff --git a/apps/dispatch/eslint.config.js b/apps/dispatch/eslint.config.js index e8759ff5..47794e08 100644 --- a/apps/dispatch/eslint.config.js +++ b/apps/dispatch/eslint.config.js @@ -1,4 +1,4 @@ -import { nextJsConfig } from "@repo/eslint-config/next-js"; +import nextJsConfig from "@repo/eslint-config/next-js"; /** @type {import("eslint").Linter.Config} */ export default nextJsConfig; diff --git a/apps/dispatch/package.json b/apps/dispatch/package.json index 075b1b97..d2af73a6 100644 --- a/apps/dispatch/package.json +++ b/apps/dispatch/package.json @@ -12,6 +12,7 @@ "check-types": "tsc --noEmit" }, "dependencies": { + "@eslint/eslintrc": "^3.3.1", "@hookform/resolvers": "^5.1.1", "@livekit/components-react": "^2.9.12", "@livekit/components-styles": "^1.1.6", @@ -34,6 +35,7 @@ "clsx": "^2.1.1", "daisyui": "^5.0.43", "date-fns": "^4.1.0", + "eslint-config-next": "^15.3.4", "geojson": "^0.5.0", "i": "^0.3.7", "jsonwebtoken": "^9.0.2", diff --git a/apps/dispatch/types/next-auth.d.ts b/apps/dispatch/types/next-auth.d.ts index 511b2555..5d6c6cd0 100644 --- a/apps/dispatch/types/next-auth.d.ts +++ b/apps/dispatch/types/next-auth.d.ts @@ -1,4 +1,3 @@ -import NextAuth from "next-auth"; import { User as IUser } from "@repo/db"; declare module "next-auth" { diff --git a/package.json b/package.json index 43eff148..3069f01e 100644 --- a/package.json +++ b/package.json @@ -24,5 +24,8 @@ "workspaces": [ "apps/*", "packages/*" - ] + ], + "dependencies": { + "eslint": "^9.30.1" + } } diff --git a/packages/eslint-config/next.js b/packages/eslint-config/next.js index a79ba5ea..271aa4b2 100644 --- a/packages/eslint-config/next.js +++ b/packages/eslint-config/next.js @@ -29,4 +29,9 @@ export default defineConfig([ }, }, ...tseslint.config(js.configs.recommended, tseslint.configs.recommended, eslintConfigPrettier), + { + rules: { + "@typescript-eslint/no-unused-vars": "warn", + }, + }, ]); diff --git a/packages/typescript-config/base.json b/packages/typescript-config/base.json index edc9c160..a20c637c 100644 --- a/packages/typescript-config/base.json +++ b/packages/typescript-config/base.json @@ -16,5 +16,6 @@ "skipLibCheck": true, "strict": true, "target": "ES2022" - } + }, + "exclude": ["node_modules", "dist", ".next", "out"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 980656a9..1c379cc7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,10 @@ settings: importers: .: + dependencies: + eslint: + specifier: ^9.30.1 + version: 9.30.1(jiti@2.4.2) devDependencies: prettier: specifier: ^3.5.3 @@ -81,6 +85,9 @@ importers: apps/dispatch: dependencies: + '@eslint/eslintrc': + specifier: ^3.3.1 + version: 3.3.1 '@hookform/resolvers': specifier: ^5.1.1 version: 5.1.1(react-hook-form@7.59.0(react@19.1.0)) @@ -95,7 +102,7 @@ importers: version: 0.5.7(@types/dom-mediacapture-transform@0.1.11)(livekit-client@2.14.0(@types/dom-mediacapture-record@1.0.22)) '@next-auth/prisma-adapter': specifier: ^1.0.7 - version: 1.0.7(@prisma/client@6.8.2(prisma@6.8.2(typescript@5.8.3))(typescript@5.8.3))(next-auth@4.24.11(next@15.3.4(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) + version: 1.0.7(@prisma/client@6.8.2(prisma@6.8.2(typescript@5.8.3))(typescript@5.8.3))(next-auth@4.24.11(next@15.3.4(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.1.0) @@ -147,6 +154,9 @@ importers: date-fns: specifier: ^4.1.0 version: 4.1.0 + eslint-config-next: + specifier: ^15.3.4 + version: 15.3.4(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) geojson: specifier: ^0.5.0 version: 0.5.0 @@ -176,7 +186,7 @@ importers: version: 15.3.4(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next-auth: specifier: ^4.24.11 - version: 4.24.11(next@15.3.4(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 4.24.11(next@15.3.4(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) npm: specifier: ^11.4.2 version: 11.4.2 @@ -340,7 +350,7 @@ importers: version: 5.1.1(react-hook-form@7.59.0(react@19.1.0)) '@next-auth/prisma-adapter': specifier: ^1.0.7 - version: 1.0.7(@prisma/client@6.8.2(prisma@6.8.2(typescript@5.8.3))(typescript@5.8.3))(next-auth@4.24.11(next@15.3.4(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) + version: 1.0.7(@prisma/client@6.8.2(prisma@6.8.2(typescript@5.8.3))(typescript@5.8.3))(next-auth@4.24.11(next@15.3.4(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.1.0) @@ -415,7 +425,7 @@ importers: version: 15.3.4(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next-auth: specifier: ^4.24.11 - version: 4.24.11(next@15.3.4(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 4.24.11(next@15.3.4(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next-remove-imports: specifier: ^1.0.12 version: 1.0.12(webpack@5.99.9) @@ -562,7 +572,7 @@ importers: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^8.36.0 - version: 8.36.0(@typescript-eslint/parser@8.35.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + version: 8.36.0(@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) devDependencies: '@eslint/js': specifier: ^9.17.0 @@ -1234,6 +1244,10 @@ packages: resolution: {integrity: sha512-Wzw3wQwPvc9sHM+NjakWTcPx11mbZyiYHuwWa/QfZ7cIRX7WK54PSk7bdyXDaoaopUcMatv1zaQvOAAO8hCdww==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@9.30.1': + resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2569,14 +2583,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/eslint-plugin@8.35.0': - resolution: {integrity: sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.35.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/eslint-plugin@8.36.0': resolution: {integrity: sha512-lZNihHUVB6ZZiPBNgOQGSxUASI7UJWhT8nHyUGCnaQ28XFCw98IfrMCG3rUl1uwUWoAvodJQby2KTs79UTcrAg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2654,13 +2660,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.35.0': - resolution: {integrity: sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.36.0': resolution: {integrity: sha512-5aaGYG8cVDd6cxfk/ynpYzxBRZJk7w/ymto6uiyUFtdCozQIsQWh7M28/6r57Fwkbweng8qAzoMCPwSJfWlmsg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2705,13 +2704,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.35.0': - resolution: {integrity: sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.36.0': resolution: {integrity: sha512-VOqmHu42aEMT+P2qYjylw6zP/3E/HvptRwdn/PZxyV27KhZg2IOszXod4NcXisWzPAGSS4trE/g4moNj6XmH2g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3754,6 +3746,16 @@ packages: jiti: optional: true + eslint@9.30.1: + resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + espree@10.3.0: resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6675,6 +6677,11 @@ snapshots: eslint: 9.30.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@2.4.2))': + dependencies: + eslint: 9.30.1(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.1': {} '@eslint/config-array@0.20.0': @@ -6723,6 +6730,8 @@ snapshots: '@eslint/js@9.30.0': {} + '@eslint/js@9.30.1': {} + '@eslint/object-schema@2.1.6': {} '@eslint/plugin-kit@0.3.1': @@ -6945,10 +6954,10 @@ snapshots: '@tybys/wasm-util': 0.9.0 optional: true - '@next-auth/prisma-adapter@1.0.7(@prisma/client@6.8.2(prisma@6.8.2(typescript@5.8.3))(typescript@5.8.3))(next-auth@4.24.11(next@15.3.4(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))': + '@next-auth/prisma-adapter@1.0.7(@prisma/client@6.8.2(prisma@6.8.2(typescript@5.8.3))(typescript@5.8.3))(next-auth@4.24.11(next@15.3.4(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))': dependencies: '@prisma/client': 6.8.2(prisma@6.8.2(typescript@5.8.3))(typescript@5.8.3) - next-auth: 4.24.11(next@15.3.4(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next-auth: 4.24.11(next@15.3.4(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@next/env@15.3.4': {} @@ -8734,14 +8743,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.36.0(@typescript-eslint/parser@8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.33.1(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.36.0 + '@typescript-eslint/type-utils': 8.36.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.36.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.36.0 + eslint: 9.28.0(jiti@2.4.2) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@8.36.0(@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 '@typescript-eslint/parser': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.35.0 - '@typescript-eslint/type-utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.35.0 + '@typescript-eslint/scope-manager': 8.36.0 + '@typescript-eslint/type-utils': 8.36.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.36.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.36.0 eslint: 9.30.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.5 @@ -8751,15 +8777,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.36.0(@typescript-eslint/parser@8.35.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.36.0(@typescript-eslint/parser@8.35.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.35.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.35.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.36.0 - '@typescript-eslint/type-utils': 8.36.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.36.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.36.0 - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.30.1(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -8792,18 +8818,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.35.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.35.0 - '@typescript-eslint/types': 8.35.0 - '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.35.0 - debug: 4.4.1(supports-color@5.5.0) - eslint: 9.28.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.35.0 @@ -8816,6 +8830,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.35.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.35.0 + '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.35.0 + debug: 4.4.1(supports-color@5.5.0) + eslint: 9.30.1(jiti@2.4.2) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.33.1(typescript@5.8.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.36.0(typescript@5.8.3) @@ -8892,10 +8918,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.36.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.36.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + debug: 4.4.1(supports-color@5.5.0) + eslint: 9.28.0(jiti@2.4.2) + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.36.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.36.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1(supports-color@5.5.0) eslint: 9.30.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) @@ -8903,12 +8940,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.36.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.36.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1(supports-color@5.5.0) - eslint: 9.28.0(jiti@2.4.2) + eslint: 9.30.1(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -8990,17 +9027,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.35.0 - '@typescript-eslint/types': 8.35.0 - '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3) - eslint: 9.30.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@8.36.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) @@ -9012,6 +9038,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.36.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.36.0 + '@typescript-eslint/types': 8.36.0 + '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) + eslint: 9.30.0(jiti@2.4.2) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.36.0 + '@typescript-eslint/types': 8.36.0 + '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) + eslint: 9.30.1(jiti@2.4.2) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.33.1': dependencies: '@typescript-eslint/types': 8.33.1 @@ -10109,7 +10157,7 @@ snapshots: dependencies: '@next/eslint-plugin-next': 15.3.4 '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/eslint-plugin': 8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.36.0(@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/parser': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.30.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 @@ -10125,6 +10173,26 @@ snapshots: - eslint-plugin-import-x - supports-color + eslint-config-next@15.3.4(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3): + dependencies: + '@next/eslint-plugin-next': 15.3.4 + '@rushstack/eslint-patch': 1.12.0 + '@typescript-eslint/eslint-plugin': 8.36.0(@typescript-eslint/parser@8.35.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.35.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.30.1(jiti@2.4.2) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.1(jiti@2.4.2)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.35.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.1(jiti@2.4.2)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.30.1(jiti@2.4.2)) + eslint-plugin-react: 7.37.5(eslint@9.30.1(jiti@2.4.2)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.30.1(jiti@2.4.2)) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + eslint-config-prettier@9.1.0(eslint@9.28.0(jiti@2.4.2)): dependencies: eslint: 9.28.0(jiti@2.4.2) @@ -10152,6 +10220,21 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.1(jiti@2.4.2)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.1(supports-color@5.5.0) + eslint: 9.30.1(jiti@2.4.2) + get-tsconfig: 4.10.1 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.14 + unrs-resolver: 1.9.2 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.35.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.1(jiti@2.4.2)) + transitivePeerDependencies: + - supports-color + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.0(jiti@2.4.2)): dependencies: debug: 3.2.7 @@ -10163,6 +10246,17 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.35.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.1(jiti@2.4.2)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.35.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.30.1(jiti@2.4.2) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.30.1(jiti@2.4.2)) + transitivePeerDependencies: + - supports-color + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 @@ -10192,6 +10286,35 @@ snapshots: - eslint-import-resolver-webpack - supports-color + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.35.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.1(jiti@2.4.2)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.30.1(jiti@2.4.2) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.35.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.30.1(jiti@2.4.2)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.35.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + eslint-plugin-jsx-a11y@6.10.2(eslint@9.30.0(jiti@2.4.2)): dependencies: aria-query: 5.3.2 @@ -10211,6 +10334,25 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 + eslint-plugin-jsx-a11y@6.10.2(eslint@9.30.1(jiti@2.4.2)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.3 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.30.1(jiti@2.4.2) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + eslint-plugin-only-warn@1.1.0: {} eslint-plugin-react-hooks@5.2.0(eslint@9.28.0(jiti@2.4.2)): @@ -10221,6 +10363,10 @@ snapshots: dependencies: eslint: 9.30.0(jiti@2.4.2) + eslint-plugin-react-hooks@5.2.0(eslint@9.30.1(jiti@2.4.2)): + dependencies: + eslint: 9.30.1(jiti@2.4.2) + eslint-plugin-react@7.37.5(eslint@9.28.0(jiti@2.4.2)): dependencies: array-includes: 3.1.9 @@ -10265,6 +10411,28 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 + eslint-plugin-react@7.37.5(eslint@9.30.1(jiti@2.4.2)): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.30.1(jiti@2.4.2) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + eslint-plugin-turbo@2.5.4(eslint@9.28.0(jiti@2.4.2))(turbo@2.5.4): dependencies: dotenv: 16.0.3 @@ -10376,6 +10544,48 @@ snapshots: transitivePeerDependencies: - supports-color + eslint@9.30.1(jiti@2.4.2): + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.0 + '@eslint/core': 0.14.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.30.1 + '@eslint/plugin-kit': 0.3.3 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.1(supports-color@5.5.0) + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.2 + transitivePeerDependencies: + - supports-color + espree@10.3.0: dependencies: acorn: 8.14.1 @@ -11676,7 +11886,7 @@ snapshots: neo-async@2.6.2: {} - next-auth@4.24.11(next@15.3.4(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next-auth@4.24.11(next@15.3.4(@babel/core@7.27.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@babel/runtime': 7.27.6 '@panva/hkdf': 1.2.1