import { serve } from "bun"; import packages from "../database/database/packages.json"; import programs from "../database/database/programs.json"; serve({ port: 7860, fetch(req) { const url = new URL(req.url); const pathname = url.pathname; const q = url.searchParams.get("q")?.trim().toLowerCase(); const filter = url.searchParams.get("filter")?.trim().toLowerCase(); const corsHeaders = { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*", }; // CORS preflight handling if (req.method === "OPTIONS") { return new Response(null, { status: 204, headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, POST, OPTIONS", "Access-Control-Allow-Headers": "Content-Type", }, }); } if (pathname === "/api/searchPackages") { const results = packages.filter( ({ name, full_name, description, topics }) => { if ( filter && !topics?.some((t: string) => t.toLowerCase() === filter) ) return false; if (!q) return true; return [name, full_name, description, ...(topics || [])].some( (field: string) => field?.toLowerCase().includes(q), ); }, ); return new Response(JSON.stringify(results.slice(0, 25)), { status: 200, headers: corsHeaders, }); } if (pathname === "/api/searchPrograms") { const results = programs.filter(({ full_name, description, topics }) => { if (filter && !topics?.some((t: string) => t.toLowerCase() === filter)) return false; if (!q) return true; return [full_name, description, ...(topics || [])].some( (field: string) => field?.toLowerCase().includes(q), ); }); return new Response(JSON.stringify(results.slice(0, 25)), { status: 200, headers: corsHeaders, }); } if (pathname === "/api/infiniteScrollPackages") { const pageNumberParam = url.searchParams.get("pageNumber"); const pageNumber = parseInt(pageNumberParam || "0", 10); if (isNaN(pageNumber) || pageNumber < 0) { return new Response(JSON.stringify({ error: "Invalid page number" }), { status: 400, headers: corsHeaders, }); } const lowerLimit = pageNumber * 10; const scrollResults = packages.slice(lowerLimit, lowerLimit + 10); return new Response(JSON.stringify(scrollResults), { status: 200, headers: corsHeaders, }); } if (pathname === "/api/infiniteScrollPrograms") { const pageNumberParam = url.searchParams.get("pageNumber"); const pageNumber = parseInt(pageNumberParam || "0", 10); if (isNaN(pageNumber) || pageNumber < 0) { return new Response(JSON.stringify({ error: "Invalid page number" }), { status: 400, headers: corsHeaders, }); } const lowerLimit = pageNumber * 10; const scrollResults = programs.slice(lowerLimit, lowerLimit + 10); return new Response(JSON.stringify(scrollResults), { status: 200, headers: corsHeaders, }); } return new Response("Not Found", { status: 404, headers: { "Access-Control-Allow-Origin": "*" }, }); }, });