mirror of
https://github.com/morten-olsen/morten-olsen.github.io.git
synced 2026-02-08 01:46:28 +01:00
init
This commit is contained in:
46
bin/dev/server.ts
Normal file
46
bin/dev/server.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
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(`<script>window.location.reload()</script>`);
|
||||
});
|
||||
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("</html>", ""));
|
||||
} else {
|
||||
res.send(data.content);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
res.status(404).send("Not found");
|
||||
}
|
||||
});
|
||||
|
||||
return app;
|
||||
};
|
||||
|
||||
export { createServer };
|
||||
Reference in New Issue
Block a user