Skip to content

Commit 1163881

Browse files
committed
http2: add writableObjectMode and writableNeedDrain getters to Http2ServerResponse
Fixes #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.
1 parent bb85d23 commit 1163881

2 files changed

Lines changed: 39 additions & 0 deletions

File tree

lib/internal/http2/compat.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,14 @@ class Http2ServerResponse extends Stream {
555555
return this[kStream].writableFinished;
556556
}
557557

558+
get writableObjectMode() {
559+
return this[kStream].writableObjectMode;
560+
}
561+
562+
get writableNeedDrain() {
563+
return this[kStream].writableNeedDrain;
564+
}
565+
558566
get writableLength() {
559567
return this[kStream].writableLength;
560568
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
'use strict';
2+
3+
const { createServer } = require('http2');
4+
const { mustCall } = require('../common');
5+
6+
const server = createServer();
7+
server.on('stream', (stream) => {
8+
// writableObjectMode and writableNeedDrain should be defined (boolean)
9+
console.log('writableObjectMode:', stream.writableObjectMode);
10+
console.log('writableNeedDrain:', stream.writableNeedDrain);
11+
if (typeof stream.writableObjectMode !== 'boolean') {
12+
throw new Error(`writableObjectMode should be boolean, got ${stream.writableObjectMode}`);
13+
}
14+
if (typeof stream.writableNeedDrain !== 'boolean') {
15+
throw new Error(`writableNeedDrain should be boolean, got ${stream.writableNeedDrain}`);
16+
}
17+
stream.respond();
18+
stream.end('ok');
19+
});
20+
server.listen(0, mustCall(() => {
21+
const client = require('http2').connect(`http://localhost:${server.address().port}`);
22+
const req = client.request();
23+
req.on('response', () => {
24+
req.on('data', () => {});
25+
req.on('end', () => {
26+
client.close();
27+
server.close();
28+
console.log('PASS: writableObjectMode and writableNeedDrain are booleans');
29+
});
30+
});
31+
}));

0 commit comments

Comments
 (0)