diff options
Diffstat (limited to 'src/js/internal/debugger.ts')
-rw-r--r-- | src/js/internal/debugger.ts | 48 |
1 files changed, 31 insertions, 17 deletions
diff --git a/src/js/internal/debugger.ts b/src/js/internal/debugger.ts index 2fd875d10..2b121949a 100644 --- a/src/js/internal/debugger.ts +++ b/src/js/internal/debugger.ts @@ -100,28 +100,35 @@ class WebSocketListener { idleTimeout: 0, open: socket => { var connection = new DebuggerWithMessageQueue(); + // @ts-expect-error + const shouldRefEventLoop = !!socket.data?.shouldRefEventLoop; + socket.data = connection; this.activeConnections.add(socket); - connection.debugger = this.createInspectorConnection(this.scriptExecutionContextId, (...msgs: string[]) => { - if (socket.readyState > 1) { - connection.disconnect(); - return; - } + connection.debugger = this.createInspectorConnection( + this.scriptExecutionContextId, + shouldRefEventLoop, + (...msgs: string[]) => { + if (socket.readyState > 1) { + connection.disconnect(); + return; + } - if (connection.messageQueue.length > 0) { - connection.messageQueue.push(...msgs); - return; - } + if (connection.messageQueue.length > 0) { + connection.messageQueue.push(...msgs); + return; + } - for (let i = 0; i < msgs.length; i++) { - if (!socket.sendText(msgs[i])) { - if (socket.readyState < 2) { - connection.messageQueue.push(...msgs.slice(i)); + for (let i = 0; i < msgs.length; i++) { + if (!socket.sendText(msgs[i])) { + if (socket.readyState < 2) { + connection.messageQueue.push(...msgs.slice(i)); + } + return; } - return; } - } - }); + }, + ); console.log( "[Inspector]", @@ -180,7 +187,14 @@ class WebSocketListener { } if (pathname === this.url) { - if (server.upgrade(req)) { + const refHeader = req.headers.get("Ref-Event-Loop"); + if ( + server.upgrade(req, { + data: { + shouldRefEventLoop: !!refHeader && refHeader !== "0", + }, + }) + ) { return new Response(); } |