graphql-ws
Version:
Coherent, zero-dependency, lazy, simple, GraphQL over WebSocket Protocol compliant server and client
55 lines (51 loc) • 1.59 kB
JavaScript
var common = require('../common-DqFHi7oM.cjs');
var server = require('../server-Dr_BC2Xw.cjs');
require('graphql');
function makeHandler(options) {
const server$1 = server.makeServer(options);
const clients = /* @__PURE__ */ new WeakMap();
return {
open(ws) {
const client = {
handleMessage: () => {
throw new Error("Message received before handler was registered");
},
closed: () => {
throw new Error("Closed before handler was registered");
}
};
client.closed = server$1.opened(
{
// TODO: use protocol on socket once Bun exposes it
protocol: common.GRAPHQL_TRANSPORT_WS_PROTOCOL,
send: async (message) => {
if (clients.has(ws)) {
ws.sendText(message);
}
},
close: (code, reason) => {
if (clients.has(ws)) {
ws.close(code, reason);
}
},
onMessage: (cb) => client.handleMessage = cb
},
{ socket: ws }
);
clients.set(ws, client);
},
message(ws, message) {
const client = clients.get(ws);
if (!client) throw new Error("Message received for a missing client");
return client.handleMessage(String(message));
},
close(ws, code, message) {
const client = clients.get(ws);
if (!client) throw new Error("Closing a missing client");
return client.closed(code, message);
}
};
}
exports.handleProtocols = server.handleProtocols;
exports.makeHandler = makeHandler;
;