Skip to content

Commit 69830ee

Browse files
committed
Fix
1 parent 86aa384 commit 69830ee

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

packages/server/src/utils.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import type { Readable } from 'node:stream';
55
import {
66
createDeferredPromise,
77
fakePromise,
8+
handleMaybePromise,
89
isPromise,
910
MaybePromise,
1011
} from '@whatwg-node/promise-helpers';
@@ -317,6 +318,14 @@ function sendAsyncIterable(serverResponse: NodeResponse, asyncIterable: AsyncIte
317318
return pump();
318319
}
319320

321+
function safeWrite(chunk: any, serverResponse: NodeResponse) {
322+
// @ts-expect-error http and http2 writes are actually compatible
323+
const result = serverResponse.write(chunk);
324+
if (!result) {
325+
return new Promise(resolve => serverResponse.once('drain', resolve));
326+
}
327+
}
328+
320329
export function sendNodeResponse(
321330
fetchResponse: Response,
322331
serverResponse: NodeResponse,
@@ -354,10 +363,10 @@ export function sendNodeResponse(
354363
// @ts-expect-error - _buffer is a private property
355364
fetchResponse._buffer;
356365
if (bufOfRes) {
357-
// @ts-expect-error http and http2 writes are actually compatible
358-
serverResponse.write(bufOfRes);
359-
endResponse(serverResponse);
360-
return;
366+
return handleMaybePromise(
367+
() => safeWrite(bufOfRes, serverResponse),
368+
() => endResponse(serverResponse),
369+
);
361370
}
362371

363372
// Other fetch implementations
@@ -371,11 +380,10 @@ export function sendNodeResponse(
371380
// @ts-expect-error - Uint8Array is a valid body type
372381
fetchBody[Symbol.toStringTag] === 'Uint8Array'
373382
) {
374-
serverResponse
375-
// @ts-expect-error http and http2 writes are actually compatible
376-
.write(fetchBody);
377-
endResponse(serverResponse);
378-
return;
383+
return handleMaybePromise(
384+
() => safeWrite(fetchBody, serverResponse),
385+
() => endResponse(serverResponse),
386+
);
379387
}
380388

381389
configureSocket(nodeRequest);

0 commit comments

Comments
 (0)