From 356c27a75d3073c2daf544eda8551b3e867717b9 Mon Sep 17 00:00:00 2001 From: Le Vivilet Date: Tue, 6 May 2025 00:33:17 +0200 Subject: [PATCH] feature: lazyload ws to work better with bundling for electron where ws is not used --- src/index.js | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/index.js b/src/index.js index c53501e..1a414d7 100644 --- a/src/index.js +++ b/src/index.js @@ -1,21 +1,30 @@ import { Buffer } from 'node:buffer' -import * as _ws from 'ws' -// workaround for jest or node bug -const WebSocketServer = _ws.WebSocketServer - ? _ws.WebSocketServer - : // @ts-ignore - _ws.default.WebSocketServer +const createWebSocketServer = async () => { + const _ws = await import('ws') + // workaround for jest or node bug + const WebSocketServer = _ws.WebSocketServer + ? _ws.WebSocketServer + : // @ts-ignore + _ws.default.WebSocketServer -const webSocketServer = new WebSocketServer({ - noServer: true, + const webSocketServer = new WebSocketServer({ + noServer: true, - // TODO not sure if ws compress is working at all - // perMessageDeflate: true -}) + // TODO not sure if ws compress is working at all + // perMessageDeflate: true + }) + return webSocketServer +} -export const handleUpgrade = (request, socket) => { +const doSocketUpgrade = (webSocketServer, request, socket) => { const { promise, resolve } = Promise.withResolvers() webSocketServer.handleUpgrade(request, socket, Buffer.alloc(0), resolve) return promise } + +export const handleUpgrade = async (request, socket) => { + const webSocketServer = await createWebSocketServer() + const webSocket = await doSocketUpgrade(webSocketServer, request, socket) + return webSocket +}