From 1163881deffb4f87878db355cfc25a76811eef4d Mon Sep 17 00:00:00 2001 From: Aman Sachan Date: Tue, 28 Apr 2026 07:35:52 +0000 Subject: [PATCH 1/2] http2: add writableObjectMode and writableNeedDrain getters to Http2ServerResponse Fixes nodejs/node#63000. Http2ServerResponse was missing these two properties that exist on OutgoingMessage and are documented as returning boolean values. Added getters mirroring the pattern already used for writableFinished, writableCorked, writableHighWaterMark, etc. in compat.js. --- lib/internal/http2/compat.js | 8 ++++++ test/fixtures/http2/test-writable-props.js | 31 ++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 test/fixtures/http2/test-writable-props.js diff --git a/lib/internal/http2/compat.js b/lib/internal/http2/compat.js index 41909ffa5756f8..ec40c136a1a062 100644 --- a/lib/internal/http2/compat.js +++ b/lib/internal/http2/compat.js @@ -555,6 +555,14 @@ class Http2ServerResponse extends Stream { return this[kStream].writableFinished; } + get writableObjectMode() { + return this[kStream].writableObjectMode; + } + + get writableNeedDrain() { + return this[kStream].writableNeedDrain; + } + get writableLength() { return this[kStream].writableLength; } diff --git a/test/fixtures/http2/test-writable-props.js b/test/fixtures/http2/test-writable-props.js new file mode 100644 index 00000000000000..f3fd88c5c7d307 --- /dev/null +++ b/test/fixtures/http2/test-writable-props.js @@ -0,0 +1,31 @@ +'use strict'; + +const { createServer } = require('http2'); +const { mustCall } = require('../common'); + +const server = createServer(); +server.on('stream', (stream) => { + // writableObjectMode and writableNeedDrain should be defined (boolean) + console.log('writableObjectMode:', stream.writableObjectMode); + console.log('writableNeedDrain:', stream.writableNeedDrain); + if (typeof stream.writableObjectMode !== 'boolean') { + throw new Error(`writableObjectMode should be boolean, got ${stream.writableObjectMode}`); + } + if (typeof stream.writableNeedDrain !== 'boolean') { + throw new Error(`writableNeedDrain should be boolean, got ${stream.writableNeedDrain}`); + } + stream.respond(); + stream.end('ok'); +}); +server.listen(0, mustCall(() => { + const client = require('http2').connect(`http://localhost:${server.address().port}`); + const req = client.request(); + req.on('response', () => { + req.on('data', () => {}); + req.on('end', () => { + client.close(); + server.close(); + console.log('PASS: writableObjectMode and writableNeedDrain are booleans'); + }); + }); +})); From 70e578e6b258c38b87aea5a66924af60f648e433 Mon Sep 17 00:00:00 2001 From: Aman Sachan Date: Tue, 28 Apr 2026 17:43:17 +0000 Subject: [PATCH 2/2] test-http2: add assertions for writableObjectMode and writableNeedDrain These properties were added to Http2ServerResponse but had no assertions in the existing test. Adding type checks to ensure they return booleans and are accessible on the response object. Refs: nodejs/node#63000 --- test/parallel/test-http2-res-writable-properties.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/parallel/test-http2-res-writable-properties.js b/test/parallel/test-http2-res-writable-properties.js index 488cb1babf3e8a..e05ed87da3e7a2 100644 --- a/test/parallel/test-http2-res-writable-properties.js +++ b/test/parallel/test-http2-res-writable-properties.js @@ -8,6 +8,8 @@ const server = http2.createServer(common.mustCall((req, res) => { const hwm = req.socket.writableHighWaterMark; assert.strictEqual(res.writableHighWaterMark, hwm); assert.strictEqual(res.writableLength, 0); + assert.strictEqual(typeof res.writableObjectMode, 'boolean'); + assert.strictEqual(typeof res.writableNeedDrain, 'boolean'); res.write(''); const len = res.writableLength; res.write('asd');