import express, { Express } from "express"; import { Bundler } from "../bundler"; import { extname } from "path"; const createServer = (bundler: Bundler): Express => { const app = express(); app.use((req, res) => { let path = req.path; let asset = bundler.get(path); if (!asset) { path = path.endsWith("/") ? path + "index.html" : path + "/index.html"; asset = bundler.get(path); } if (asset) { const ext = extname(path); asset.data.then((data) => { if (ext === ".html") { const unsubscribe = asset!.subscribe(async () => { await asset?.data; unsubscribe(); res.end(``); }); res.on("close", unsubscribe); res.on("finish", unsubscribe); res.on("error", unsubscribe); res.writeHead(200, { "content-type": "text/html;charset=utf-8", "Cache-Control": "no-cache, no-store, must-revalidate", Pragma: "no-cache", Expires: "0", "keep-alive": "timeout=5, max=100", }); res.write(data.content.toString().replace("", "")); } else { res.send(data.content); } }); } else { res.status(404).send("Not found"); } }); return app; }; export { createServer };