import { createReadStream, existsSync, statSync } from "node:fs"; import { createServer } from "node:http"; import { extname, join, normalize, resolve } from "node:path"; const root = resolve(process.cwd(), process.argv[2] ?? "dist"); const port = Number(process.env.PORT ?? 4173); const mimeTypes = new Map([ [".css", "text/css; charset=utf-8"], [".html", "text/html; charset=utf-8"], [".js", "text/javascript; charset=utf-8"], [".json", "application/json; charset=utf-8"], [".png", "image/png"], [".svg", "image/svg+xml"], [".webp", "image/webp"], ]); const server = createServer((request, response) => { const rawPath = decodeURIComponent((request.url ?? "/").split("?")[0]); const relativePath = normalize(rawPath).replace(/^([/\\])+/, ""); let filePath = resolve(join(root, relativePath || "index.html")); if (!filePath.startsWith(root)) { response.writeHead(403).end("Forbidden"); return; } if (!existsSync(filePath) || statSync(filePath).isDirectory()) { filePath = join(root, "index.html"); } response.setHeader("Content-Type", mimeTypes.get(extname(filePath)) ?? "application/octet-stream"); response.setHeader("X-Content-Type-Options", "nosniff"); response.setHeader("Referrer-Policy", "strict-origin-when-cross-origin"); response.setHeader("Cross-Origin-Opener-Policy", "same-origin"); createReadStream(filePath).pipe(response); }); server.listen(port, "127.0.0.1", () => { console.log(`GLM Hub disponible en http://127.0.0.1:${port}`); });