Files
test-web-push/server.ts
2025-09-10 02:50:32 +02:00

78 lines
2.0 KiB
TypeScript

// server.ts
const server = Bun.serve({
port: 5173,
async fetch(req) {
const url = new URL(req.url);
const pathname = url.pathname;
// Helper function to get MIME type
function getMimeType(filename: string): string {
const ext = filename.split(".").pop()?.toLowerCase();
switch (ext) {
case "js":
return "application/javascript";
case "ts":
return "application/javascript";
case "css":
return "text/css";
case "html":
return "text/html";
case "json":
return "application/json";
case "png":
return "image/png";
case "jpg":
case "jpeg":
return "image/jpeg";
case "svg":
return "image/svg+xml";
case "ico":
return "image/x-icon";
default:
return "text/plain";
}
}
// Serve root as index.html
if (pathname === "/")
try {
const file = Bun.file("./index.html");
return new Response(file, {
headers: {
"Content-Type": "text/html",
},
});
} catch (error) {
return new Response("Index file not found", { status: 404 });
}
// Serve other files
const filename = pathname.startsWith("/") ? pathname.slice(1) : pathname;
try {
const file = Bun.file(`./${filename}`);
const exists = await file.exists();
if (!exists)
return new Response(`File not found: ${filename}`, { status: 404 });
const mimeType = getMimeType(filename);
return new Response(file, {
headers: {
"Content-Type": mimeType,
},
});
} catch (error) {
console.error(`Error serving ${filename}:`, error);
return new Response("Internal Server Error", { status: 500 });
}
},
});
console.log(`🚀 Server running at http://localhost:${server.port}`);
console.log("📋 Available routes:");
console.log(" - / (index.html)");
console.log(" - /sw.js (Service Worker)");
console.log(" - /style.css (Styles)");