Skip to content

Commit c346b66

Browse files
committed
Revert "fix: don't leak internal class (#3024)"
This reverts commit 2d5cbdf.
1 parent d542b8c commit c346b66

File tree

6 files changed

+30
-36
lines changed

6 files changed

+30
-36
lines changed

docs/docs/api/DiagnosticsChannel.md

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ diagnosticsChannel.channel('undici:request:create').subscribe(({ request }) => {
2020
console.log('method', request.method)
2121
console.log('path', request.path)
2222
console.log('headers') // array of strings, e.g: ['foo', 'bar']
23+
request.addHeader('hello', 'world')
24+
console.log('headers', request.headers) // e.g. ['foo', 'bar', 'hello', 'world']
2325
})
2426
```
2527

lib/core/request.js

+10-29
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,6 @@ class Request {
9191

9292
this.abort = null
9393

94-
this.publicInterface = null
95-
9694
if (body == null) {
9795
this.body = null
9896
} else if (isStream(body)) {
@@ -189,32 +187,10 @@ class Request {
189187
this[kHandler] = handler
190188

191189
if (channels.create.hasSubscribers) {
192-
channels.create.publish({ request: this.getPublicInterface() })
190+
channels.create.publish({ request: this })
193191
}
194192
}
195193

196-
getPublicInterface () {
197-
const self = this
198-
this.publicInterface ??= {
199-
get origin () {
200-
return self.origin
201-
},
202-
get method () {
203-
return self.method
204-
},
205-
get path () {
206-
return self.path
207-
},
208-
get headers () {
209-
return self.headers
210-
},
211-
get completed () {
212-
return self.completed
213-
}
214-
}
215-
return this.publicInterface
216-
}
217-
218194
onBodySent (chunk) {
219195
if (this[kHandler].onBodySent) {
220196
try {
@@ -227,7 +203,7 @@ class Request {
227203

228204
onRequestSent () {
229205
if (channels.bodySent.hasSubscribers) {
230-
channels.bodySent.publish({ request: this.getPublicInterface() })
206+
channels.bodySent.publish({ request: this })
231207
}
232208

233209
if (this[kHandler].onRequestSent) {
@@ -260,7 +236,7 @@ class Request {
260236
assert(!this.completed)
261237

262238
if (channels.headers.hasSubscribers) {
263-
channels.headers.publish({ request: this.getPublicInterface(), response: { statusCode, headers, statusText } })
239+
channels.headers.publish({ request: this, response: { statusCode, headers, statusText } })
264240
}
265241

266242
try {
@@ -296,7 +272,7 @@ class Request {
296272

297273
this.completed = true
298274
if (channels.trailers.hasSubscribers) {
299-
channels.trailers.publish({ request: this.getPublicInterface(), trailers })
275+
channels.trailers.publish({ request: this, trailers })
300276
}
301277

302278
try {
@@ -311,7 +287,7 @@ class Request {
311287
this.onFinally()
312288

313289
if (channels.error.hasSubscribers) {
314-
channels.error.publish({ request: this.getPublicInterface(), error })
290+
channels.error.publish({ request: this, error })
315291
}
316292

317293
if (this.aborted) {
@@ -333,6 +309,11 @@ class Request {
333309
this.endHandler = null
334310
}
335311
}
312+
313+
addHeader (key, value) {
314+
processHeader(this, key, value)
315+
return this
316+
}
336317
}
337318

338319
function processHeader (request, key, val) {

lib/dispatcher/client-h1.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -993,7 +993,7 @@ function writeH1 (client, request) {
993993
}
994994

995995
if (channels.sendHeaders.hasSubscribers) {
996-
channels.sendHeaders.publish({ request: request.getPublicInterface(), headers: header, socket })
996+
channels.sendHeaders.publish({ request, headers: header, socket })
997997
}
998998

999999
/* istanbul ignore else: assertion */

test/node-test/diagnostics-channel/get.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const { Client } = require('../../..')
77
const { createServer } = require('node:http')
88

99
test('Diagnostics channel - get', (t) => {
10-
const assert = tspl(t, { plan: 31 })
10+
const assert = tspl(t, { plan: 32 })
1111
const server = createServer((req, res) => {
1212
res.setHeader('Content-Type', 'text/plain')
1313
res.setHeader('trailer', 'foo')
@@ -33,6 +33,8 @@ test('Diagnostics channel - get', (t) => {
3333
assert.equal(request.method, 'GET')
3434
assert.equal(request.path, '/')
3535
assert.deepStrictEqual(request.headers, ['bar', 'bar'])
36+
request.addHeader('hello', 'world')
37+
assert.deepStrictEqual(request.headers, ['bar', 'bar', 'hello', 'world'])
3638
})
3739

3840
let _connector
@@ -75,7 +77,8 @@ test('Diagnostics channel - get', (t) => {
7577
'GET / HTTP/1.1',
7678
`host: localhost:${server.address().port}`,
7779
'connection: keep-alive',
78-
'bar: bar'
80+
'bar: bar',
81+
'hello: world'
7982
]
8083

8184
assert.deepStrictEqual(headers, expectedHeaders.join('\r\n') + '\r\n')

test/node-test/diagnostics-channel/post-stream.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const { Client } = require('../../..')
88
const { createServer } = require('node:http')
99

1010
test('Diagnostics channel - post stream', (t) => {
11-
const assert = tspl(t, { plan: 31 })
11+
const assert = tspl(t, { plan: 33 })
1212
const server = createServer((req, res) => {
1313
req.resume()
1414
res.setHeader('Content-Type', 'text/plain')
@@ -34,6 +34,9 @@ test('Diagnostics channel - post stream', (t) => {
3434
assert.equal(request.method, 'POST')
3535
assert.equal(request.path, '/')
3636
assert.deepStrictEqual(request.headers, ['bar', 'bar'])
37+
request.addHeader('hello', 'world')
38+
assert.deepStrictEqual(request.headers, ['bar', 'bar', 'hello', 'world'])
39+
assert.deepStrictEqual(request.body, body)
3740
})
3841

3942
let _connector
@@ -76,7 +79,8 @@ test('Diagnostics channel - post stream', (t) => {
7679
'POST / HTTP/1.1',
7780
`host: localhost:${server.address().port}`,
7881
'connection: keep-alive',
79-
'bar: bar'
82+
'bar: bar',
83+
'hello: world'
8084
]
8185

8286
assert.equal(headers, expectedHeaders.join('\r\n') + '\r\n')

test/node-test/diagnostics-channel/post.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const { Client } = require('../../../')
77
const { createServer } = require('node:http')
88

99
test('Diagnostics channel - post', (t) => {
10-
const assert = tspl(t, { plan: 31 })
10+
const assert = tspl(t, { plan: 33 })
1111
const server = createServer((req, res) => {
1212
req.resume()
1313
res.setHeader('Content-Type', 'text/plain')
@@ -32,6 +32,9 @@ test('Diagnostics channel - post', (t) => {
3232
assert.equal(request.method, 'POST')
3333
assert.equal(request.path, '/')
3434
assert.deepStrictEqual(request.headers, ['bar', 'bar'])
35+
request.addHeader('hello', 'world')
36+
assert.deepStrictEqual(request.headers, ['bar', 'bar', 'hello', 'world'])
37+
assert.deepStrictEqual(request.body, Buffer.from('hello world'))
3538
})
3639

3740
let _connector
@@ -74,7 +77,8 @@ test('Diagnostics channel - post', (t) => {
7477
'POST / HTTP/1.1',
7578
`host: localhost:${server.address().port}`,
7679
'connection: keep-alive',
77-
'bar: bar'
80+
'bar: bar',
81+
'hello: world'
7882
]
7983

8084
assert.deepStrictEqual(headers, expectedHeaders.join('\r\n') + '\r\n')

0 commit comments

Comments
 (0)