60 lines
1.2 KiB
TypeScript
60 lines
1.2 KiB
TypeScript
import { watch } from "chokidar";
|
|
import path from "path";
|
|
|
|
const server = Bun.serve({
|
|
port: 8081,
|
|
fetch: async (req): Promise<Response> => {
|
|
if (req.url.endsWith("ws")) {
|
|
if (server.upgrade(req)) return new Response("ok");
|
|
}
|
|
return new Response("ok");
|
|
},
|
|
websocket: {
|
|
message: () => {},
|
|
open: async (ws) => {
|
|
console.log("connected");
|
|
ws.subscribe("reload");
|
|
},
|
|
close: () => {
|
|
console.log("dc");
|
|
},
|
|
},
|
|
});
|
|
|
|
const watcher = watch(path.join(__dirname, "src"), {
|
|
persistent: true,
|
|
atomic: true,
|
|
ignoreInitial: true,
|
|
usePolling: true,
|
|
interval: 50,
|
|
});
|
|
|
|
let p = Bun.spawn(
|
|
[path.join(process.env.HOME!, ".bun/bin/bun"), "src/index.tsx"],
|
|
{
|
|
stdout: "inherit",
|
|
env: {
|
|
DEV: "1",
|
|
},
|
|
},
|
|
);
|
|
|
|
let timer: Timer | undefined;
|
|
const reload = async () => {
|
|
p.kill();
|
|
await p.exited;
|
|
p = Bun.spawn(
|
|
[path.join(process.env.HOME!, ".bun/bin/bun"), "src/index.tsx"],
|
|
{
|
|
stdout: "inherit",
|
|
},
|
|
);
|
|
setTimeout(() => server.publish("reload", "reload"), 50);
|
|
};
|
|
|
|
watcher.on("all", async () => {
|
|
console.log("WATCHER TRIGGERED");
|
|
clearTimeout(timer);
|
|
timer = setTimeout(reload, 50);
|
|
});
|