openpanel/packages/devtools-server/src/reload-on-change.ts
Stefan Pejcic 8595a9f4e5 back
2024-05-08 19:58:53 +02:00

33 lines
975 B
TypeScript

import fs from "fs";
import path from "path";
import { debounce } from "lodash";
import { DevtoolsEvent, send } from "@refinedev/devtools-shared";
import type { Server } from "ws";
import { OPEN } from "ws";
export const reloadOnChange = __DEVELOPMENT__
? (ws: Server) => {
const reloadEmitter = debounce(() => {
setTimeout(() => {
ws.clients.forEach((client) => {
if (client.readyState === OPEN) {
console.log("Reloading connected client...");
send(client as any, DevtoolsEvent.RELOAD, {});
}
});
}, 800);
}, 1000);
const watcher = fs.watch(
path.resolve(__dirname, "client"),
{ recursive: true },
reloadEmitter,
);
process.on("SIGTERM", () => {
watcher.close();
});
}
: () => 0;