From 743d58eacfef4b0717793d459a163901236fd9f3 Mon Sep 17 00:00:00 2001 From: Saurabh Kumar Bajpai Date: Sun, 2 Aug 2026 17:32:50 +0530 Subject: [PATCH] fix: code quality and safety improvements --- src/app/api/local-coding/sync/route.ts | 2 +- src/app/api/metrics/languages/route.ts | 2 +- src/app/api/metrics/repo-health/route.ts | 2 +- src/components/ContributionHeatmap.tsx | 4 ++-- src/hooks/useRealtimeSync.ts | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/app/api/local-coding/sync/route.ts b/src/app/api/local-coding/sync/route.ts index 6b444d7f4..673ba61bc 100644 --- a/src/app/api/local-coding/sync/route.ts +++ b/src/app/api/local-coding/sync/route.ts @@ -278,7 +278,7 @@ export async function GET(req: NextRequest) { } const { searchParams } = new URL(req.url); - const rawDays = parseInt(searchParams.get("days") || "30", 10); + const rawDays = parseInt(searchParams.get("days", 10) || "30", 10); const days = validateDays(isNaN(rawDays) ? DEFAULT_DAYS : rawDays); const fromDate = new Date(); fromDate.setDate(fromDate.getDate() - days); diff --git a/src/app/api/metrics/languages/route.ts b/src/app/api/metrics/languages/route.ts index ed24444af..010034e46 100644 --- a/src/app/api/metrics/languages/route.ts +++ b/src/app/api/metrics/languages/route.ts @@ -56,7 +56,7 @@ export async function GET(req: NextRequest) { const data = await withMetricsCache({ bypass, key, ttlSeconds: METRICS_CACHE_TTL_SECONDS.languages }, async () => { const headers = { Authorization: `Bearer ${token}`, Accept: "application/vnd.github+json" }; const since = new Date(); - const rawDays = parseInt(req.nextUrl.searchParams.get("days") ?? "90", 10); const days = Number.isFinite(rawDays) && rawDays > 0 ? Math.min(rawDays, 365) : 90; + const rawDays = parseInt(req.nextUrl.searchParams.get("days", 10) ?? "90", 10); const days = Number.isFinite(rawDays) && rawDays > 0 ? Math.min(rawDays, 365) : 90; const searchRes = await fetch( `${GITHUB_API}/search/commits?q=author:${githubLogin}+author-date:>=${since.toISOString().slice(0, 10)}&per_page=100&sort=author-date&order=desc`, diff --git a/src/app/api/metrics/repo-health/route.ts b/src/app/api/metrics/repo-health/route.ts index 8e059da02..058acefe7 100644 --- a/src/app/api/metrics/repo-health/route.ts +++ b/src/app/api/metrics/repo-health/route.ts @@ -150,7 +150,7 @@ export async function GET(req: NextRequest) { return Response.json({ error: "Unauthorized" }, { status: 401 }); } - const requestedDays = parseInt(req.nextUrl.searchParams.get("days") ?? "30", 10); + const requestedDays = parseInt(req.nextUrl.searchParams.get("days", 10) ?? "30", 10); // Only allow 7, 30, or 90 day windows — other values default to 30. const days = requestedDays === 7 || requestedDays === 30 || requestedDays === 90 ? requestedDays : 30; diff --git a/src/components/ContributionHeatmap.tsx b/src/components/ContributionHeatmap.tsx index 740750c0a..f1b59a578 100644 --- a/src/components/ContributionHeatmap.tsx +++ b/src/components/ContributionHeatmap.tsx @@ -318,7 +318,7 @@ export default function ContributionHeatmap({ commits.forEach((c) => { if (c.repo) reposSet.add(c.repo); }); - return Array.from(reposSet).sort(); + return Array.from(reposSet).sort((a, b) => a - b); }, [commits]); // Extract unique languages @@ -329,7 +329,7 @@ export default function ContributionHeatmap({ if (l.name) langsSet.add(l.name); }); }); - return Array.from(langsSet).sort(); + return Array.from(langsSet).sort((a, b) => a - b); }, [reposData]); // Map each repo to its languages for quick lookup diff --git a/src/hooks/useRealtimeSync.ts b/src/hooks/useRealtimeSync.ts index 0f43efa36..fe9689c64 100644 --- a/src/hooks/useRealtimeSync.ts +++ b/src/hooks/useRealtimeSync.ts @@ -97,7 +97,7 @@ export function useRealtimeSync( // Stabilise `events` so an inline array definition (e.g. `["INSERT", "DELETE"]`) // doesn't cause the effect to re-run on every render. - const eventsKey = [...events].sort().join(","); + const eventsKey = [...events].sort((a, b) => a - b).join(","); useEffect(() => { const supabase = getSupabaseClient();