summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDebadree Chatterjee <debadree333@gmail.com>2022-12-10 22:36:40 +0530
committerDanielle Adams <adamzdanielle@gmail.com>2023-01-04 20:31:54 -0500
commitb453d4c910ad1cd3accc77a26b55150bf7ecca57 (patch)
treec822d32831db952294f0ea0ac60493f66d8f8a16
parent6a5b9c51bbe59835d3a8974a49a2e17100a85080 (diff)
downloadnode-new-b453d4c910ad1cd3accc77a26b55150bf7ecca57.tar.gz
lib: allow Writeable.toWeb() to work on http.Outgoing message
Attempted to fix the issue by watering down the condition being checked in internal/streams/utils isWritableNodeStream utility Fixes: https://github.com/nodejs/node/issues/44188 PR-URL: https://github.com/nodejs/node/pull/45642 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
-rw-r--r--lib/internal/webstreams/adapters.js10
-rw-r--r--test/parallel/test-stream-toWeb-allows-server-response.js29
2 files changed, 37 insertions, 2 deletions
diff --git a/lib/internal/webstreams/adapters.js b/lib/internal/webstreams/adapters.js
index 0e844d0120..02411a07a4 100644
--- a/lib/internal/webstreams/adapters.js
+++ b/lib/internal/webstreams/adapters.js
@@ -101,11 +101,17 @@ function newWritableStreamFromStreamWritable(streamWritable) {
// here because it will return false if streamWritable is a Duplex
// whose writable option is false. For a Duplex that is not writable,
// we want it to pass this check but return a closed WritableStream.
- if (typeof streamWritable?._writableState !== 'object') {
+ // We check if the given stream is a stream.Writable or http.OutgoingMessage
+ const checkIfWritableOrOutgoingMessage =
+ streamWritable &&
+ typeof streamWritable?.write === 'function' &&
+ typeof streamWritable?.on === 'function';
+ if (!checkIfWritableOrOutgoingMessage) {
throw new ERR_INVALID_ARG_TYPE(
'streamWritable',
'stream.Writable',
- streamWritable);
+ streamWritable
+ );
}
if (isDestroyed(streamWritable) || !isWritable(streamWritable)) {
diff --git a/test/parallel/test-stream-toWeb-allows-server-response.js b/test/parallel/test-stream-toWeb-allows-server-response.js
new file mode 100644
index 0000000000..fd7a14d596
--- /dev/null
+++ b/test/parallel/test-stream-toWeb-allows-server-response.js
@@ -0,0 +1,29 @@
+'use strict';
+const common = require('../common');
+const { Writable } = require('stream');
+
+const assert = require('assert');
+const http = require('http');
+
+// Check if Writable.toWeb works on the response object after creating a server.
+const server = http.createServer(
+ common.mustCall((req, res) => {
+ const webStreamResponse = Writable.toWeb(res);
+ assert.strictEqual(webStreamResponse instanceof WritableStream, true);
+ res.end();
+ })
+);
+
+server.listen(
+ 0,
+ common.mustCall(() => {
+ http.get(
+ {
+ port: server.address().port,
+ },
+ common.mustCall(() => {
+ server.close();
+ })
+ );
+ })
+);