openpanel/packages/devtools-shared/src/send.ts
Stefan Pejcic 09f9f9502d packages
2024-11-07 19:03:37 +01:00

25 lines
634 B
TypeScript

import type { DevtoolsEvent, DevtoolsEventPayloads } from "./event-types";
export async function send<T extends DevtoolsEvent>(
ws: WebSocket,
event: T,
payload: DevtoolsEventPayloads[T],
) {
// check if the socket is open
// if not, wait for it to open
if (ws.readyState !== ws.OPEN) {
await new Promise<void>((resolve) => {
const listener = () => {
ws.send(JSON.stringify({ event, payload }));
resolve();
ws.removeEventListener("open", listener);
};
ws.addEventListener("open", listener);
});
return;
}
ws.send(JSON.stringify({ event, payload }));
return;
}