From ef7a71485c470e223c799cd073e36c526e791bb1 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 1 Jul 2026 22:36:25 +0000 Subject: [PATCH] Fix Docker build failure caused by server-only import reaching client bundle scoring-event.ts exported getEventTypeLabel, a pure display helper used directly in route components, from the same module that imports scoring-calculator.ts (which now pulls in the Discord notification service, a .server-only module). Because that whole chain was value-imported into the client bundle, Vite's server-only-module guard failed the build. Move getEventTypeLabel into a new client-safe scoring-event-types.ts module with no server dependencies, and import it directly where it's rendered. --- app/models/scoring-event-types.ts | 11 +++++++++++ app/models/scoring-event.ts | 14 ++------------ .../admin.sports-seasons.$id.events.$eventId.tsx | 2 +- app/routes/admin.sports-seasons.$id.events.tsx | 2 +- 4 files changed, 15 insertions(+), 14 deletions(-) create mode 100644 app/models/scoring-event-types.ts diff --git a/app/models/scoring-event-types.ts b/app/models/scoring-event-types.ts new file mode 100644 index 0000000..2e8f87f --- /dev/null +++ b/app/models/scoring-event-types.ts @@ -0,0 +1,11 @@ +export type EventType = "playoff_game" | "major_tournament" | "final_standings" | "schedule_event"; + +export function getEventTypeLabel(eventType: string): string { + switch (eventType) { + case "playoff_game": return "Bracket"; + case "major_tournament": return "Major Tournament"; + case "final_standings": return "Final Standings"; + case "schedule_event": return "Non-Scoring"; + default: return eventType; + } +} diff --git a/app/models/scoring-event.ts b/app/models/scoring-event.ts index 4a850a3..dac8156 100644 --- a/app/models/scoring-event.ts +++ b/app/models/scoring-event.ts @@ -5,18 +5,8 @@ import type { BracketRegion } from "~/lib/bracket-templates"; import { recalculateAffectedLeagues } from "./scoring-calculator"; import { hasProcessedQualifyingPlacement, recalculateParticipantQP } from "./qualifying-points"; import { findParticipantNamesByIds } from "./season-participant"; - -export type EventType = "playoff_game" | "major_tournament" | "final_standings" | "schedule_event"; - -export function getEventTypeLabel(eventType: string): string { - switch (eventType) { - case "playoff_game": return "Bracket"; - case "major_tournament": return "Major Tournament"; - case "final_standings": return "Final Standings"; - case "schedule_event": return "Non-Scoring"; - default: return eventType; - } -} +import type { EventType } from "./scoring-event-types"; +export { type EventType, getEventTypeLabel } from "./scoring-event-types"; export interface CreateScoringEventData { sportsSeasonId: string; diff --git a/app/routes/admin.sports-seasons.$id.events.$eventId.tsx b/app/routes/admin.sports-seasons.$id.events.$eventId.tsx index 57db509..46a5fec 100644 --- a/app/routes/admin.sports-seasons.$id.events.$eventId.tsx +++ b/app/routes/admin.sports-seasons.$id.events.$eventId.tsx @@ -21,7 +21,7 @@ import { } from "~/components/ui/select"; import { Badge } from "~/components/ui/badge"; import { ArrowLeft, Trophy, CheckCircle2, Pencil, Trash2, Brackets, Save } from "lucide-react"; -import { getEventTypeLabel } from "~/models/scoring-event"; +import { getEventTypeLabel } from "~/models/scoring-event-types"; import { isBracketMajor } from "~/lib/event-utils"; import { Table, diff --git a/app/routes/admin.sports-seasons.$id.events.tsx b/app/routes/admin.sports-seasons.$id.events.tsx index 8c96d48..fd13261 100644 --- a/app/routes/admin.sports-seasons.$id.events.tsx +++ b/app/routes/admin.sports-seasons.$id.events.tsx @@ -37,7 +37,7 @@ import { import { Calendar, Trophy, ArrowLeft, Trash2, ListPlus } from "lucide-react"; import { format, parseISO } from "date-fns"; import { QualifyingPointsStandings } from "~/components/scoring/QualifyingPointsStandings"; -import { getEventTypeLabel } from "~/models/scoring-event"; +import { getEventTypeLabel } from "~/models/scoring-event-types"; export function meta({ data }: Route.MetaArgs): Route.MetaDescriptors { return [{ title: `Events — ${data?.sportsSeason?.name ?? "Sports Season"} - Brackt Admin` }];