42 lines
944 B
TypeScript
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()
|
|
}
|
|
|