diff options
author | Debadree Chatterjee <debadree333@gmail.com> | 2022-12-10 22:36:40 +0530 |
---|---|---|
committer | Danielle Adams <adamzdanielle@gmail.com> | 2023-01-04 20:31:54 -0500 |
commit | b453d4c910ad1cd3accc77a26b55150bf7ecca57 (patch) | |
tree | c822d32831db952294f0ea0ac60493f66d8f8a16 | |
parent | 6a5b9c51bbe59835d3a8974a49a2e17100a85080 (diff) | |
download | node-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.js | 10 | ||||
-rw-r--r-- | test/parallel/test-stream-toWeb-allows-server-response.js | 29 |
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(); + }) + ); + }) +); |