diff --git a/build.ts b/build.ts index 15778df..61c8152 100644 --- a/build.ts +++ b/build.ts @@ -13,7 +13,7 @@ const result = await Bun.build({ plugins: [tailwind], minify: true, target: "browser", - sourcemap: "linked", + sourcemap: "none", define: { "process.env.NODE_ENV": JSON.stringify("production"), }, diff --git a/package.json b/package.json index f44954f..c268b17 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "type": "module", "scripts": { "dev": "bun --hot src/index.ts", - "start": "NODE_ENV=production bun src/index.ts", + "start": "bun run build && NODE_ENV=production bun src/index.ts", "build": "bun run build.ts" }, "dependencies": { diff --git a/src/index.ts b/src/index.ts index eb69bb0..c706abb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,41 +1,58 @@ import { serve } from "bun"; -import index from "./index.html"; import { fetchAllPackageDetails } from "./services/api"; +import path from "node:path"; -const server = serve({ - routes: { - "/*": index, - "/api/analyze": async req => { - const data = await req.json(); - const dependencies = data.dependencies || {}; - const devDependencies = data.devDependencies || {}; - let devDependeciesPackagetDetails: any[] = []; - let dependenciesPackagetDetails: any[] = []; - try { - devDependeciesPackagetDetails = await fetchAllPackageDetails(devDependencies); - dependenciesPackagetDetails = await fetchAllPackageDetails(dependencies); - } catch (error) { - console.log(error); - devDependeciesPackagetDetails = []; - dependenciesPackagetDetails = []; - } +const isProd = process.env.NODE_ENV === "production"; +const distDir = path.join(process.cwd(), "dist"); - return Response.json({ - data: { - devDependencies: devDependeciesPackagetDetails, - dependencies: dependenciesPackagetDetails - } - }); +const apiRoutes = { + "/api/analyze": async (req: Request) => { + const data = await req.json(); + const dependencies = data.dependencies || {}; + const devDependencies = data.devDependencies || {}; + let devDependeciesPackagetDetails: any[] = []; + let dependenciesPackagetDetails: any[] = []; + try { + devDependeciesPackagetDetails = await fetchAllPackageDetails(devDependencies); + dependenciesPackagetDetails = await fetchAllPackageDetails(dependencies); + } catch (error) { + console.log(error); + devDependeciesPackagetDetails = []; + dependenciesPackagetDetails = []; + } + return Response.json({ + data: { + devDependencies: devDependeciesPackagetDetails, + dependencies: dependenciesPackagetDetails, + }, + }); + }, +}; + +let server; + +if (isProd) { + server = serve({ + routes: { + ...apiRoutes, + "/*": async req => { + const url = new URL(req.url); + let filePath = path.join(distDir, url.pathname === "/" ? "index.html" : url.pathname); + const file = Bun.file(filePath); + if (await file.exists()) return new Response(file); + return new Response(Bun.file(path.join(distDir, "index.html"))); + }, }, - }, + }); +} else { + const index = (await import("./index.html")).default; + server = serve({ + routes: { + "/*": index, + ...apiRoutes, + }, + development: { hmr: true, console: true }, + }); +} - development: process.env.NODE_ENV !== "production" && { - // Enable browser hot reloading in development - hmr: true, - - // Echo console logs from the browser to the server - console: true, - }, -}); - -console.log(`Server running at ${server.url}`); +console.log(`Server running at ${server.url}`); \ No newline at end of file