resume/serve.ts
2024-12-03 17:10:40 +01:00

42 lines
944 B
TypeScript

let server: Deno.HttpServer | null = null;
async function runScript() {
if (server) {
await server.shutdown();
}
const { startServer } = await import((`./server.ts?cache_bust=${Date.now()}`));
server = startServer("localhost", 6969);
}
function debounced(fn: () => Promise<void>) {
let timeoutId: ReturnType<typeof setTimeout> | null;
return () => {
if (timeoutId) {
clearTimeout(timeoutId);
}
timeoutId = setTimeout(fn, 200);
};
}
// Watch for file changes
async function watchFiles(paths: string[], handler: () => void) {
const watcher = Deno.watchFs(paths);
for await (const event of watcher) {
if (event.kind === "modify" || event.kind === "create") {
handler();
}
}
}
async function startup() {
// Initial run
runScript();
await watchFiles(["."], debounced(runScript));
}
if (import.meta.main) {
await startup()
}