UNPKG

graphql-ws

Version:

Coherent, zero-dependency, lazy, simple, GraphQL over WebSocket Protocol compliant server and client

55 lines (51 loc) 1.59 kB
'use strict'; 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;