File tree Expand file tree Collapse file tree 1 file changed +28
-0
lines changed Expand file tree Collapse file tree 1 file changed +28
-0
lines changed Original file line number Diff line number Diff line change 2
2
3
3
const { test } = require ( 'node:test' )
4
4
const assert = require ( 'node:assert' )
5
+ const { setImmediate } = require ( 'node:timers/promises' )
6
+ const { AsyncLocalStorage } = require ( 'node:async_hooks' )
5
7
const { tspl } = require ( '@matteo.collina/tspl' )
6
8
const {
7
9
Response,
@@ -285,3 +287,29 @@ test('fromInnerResponse', () => {
285
287
assert . strictEqual ( getHeadersList ( response [ kHeaders ] ) , innerResponse . headersList )
286
288
assert . strictEqual ( getHeadersGuard ( response [ kHeaders ] ) , 'immutable' )
287
289
} )
290
+
291
+ test ( 'clone body garbage collection' , async ( ) => {
292
+ const asyncLocalStorage = new AsyncLocalStorage ( )
293
+ let ref
294
+
295
+ await new Promise ( resolve => {
296
+ asyncLocalStorage . run ( new Map ( ) , async ( ) => {
297
+ const res = new Response ( 'hello world' )
298
+ const clone = res . clone ( )
299
+
300
+ asyncLocalStorage . getStore ( ) . set ( 'key' , clone )
301
+ ref = new WeakRef ( clone . body )
302
+
303
+ await res . text ( )
304
+ await clone . text ( ) // consume body
305
+
306
+ resolve ( )
307
+ } )
308
+ } )
309
+
310
+ await setImmediate ( )
311
+ global . gc ( )
312
+
313
+ const cloneBody = ref . deref ( )
314
+ assert . equal ( cloneBody , undefined , 'clone body was not garbage collected' )
315
+ } )
You can’t perform that action at this time.
0 commit comments