From a9e01e429d849eb03448a217dcd695299a9d4b62 Mon Sep 17 00:00:00 2001 From: Ward Peeters Date: Wed, 18 Mar 2026 16:54:35 +0100 Subject: [PATCH] Implement cancellation in ReadableStream handling Add cancellation support to the ReadableStream in the HTTP server. --- src/fetch-to-node/http-server.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/fetch-to-node/http-server.ts b/src/fetch-to-node/http-server.ts index ec8ec6c..67b4054 100644 --- a/src/fetch-to-node/http-server.ts +++ b/src/fetch-to-node/http-server.ts @@ -417,6 +417,7 @@ export class FetchServerResponse } const _this = this; + let cancelled = false; let body = this._hasBody ? new ReadableStream({ start(controller) { @@ -428,18 +429,30 @@ export class FetchServerResponse controller.close(); } else { _this.on("finish", () => { + if (cancelled) return; finished = true; - controller.close(); + try { + controller.close(); + } catch () { + // do nothing + } }); _this.on("_dataWritten", (e: DataWrittenEvent) => { - if (finished) { + if (finished || cancelled) { return; } const data = _this.dataFromDataWrittenEvent(e); - controller.enqueue(data); + try { + controller.enqueue(data); + } catch () { + // do nothing + } }); } }, + cancel() { + cancelled = true; + } }) : null;