@@ -9,6 +9,8 @@ const REGEXP_WRAP_PREFIX = '$$vitest:'
9
9
// Store global APIs in case process is overwritten by tests
10
10
const processSend = process . send ?. bind ( process )
11
11
const processOn = process . on ?. bind ( process )
12
+ const processOff = process . off ?. bind ( process )
13
+ const dispose : ( ( ) => void ) [ ] = [ ]
12
14
13
15
export function createThreadsRpcOptions ( {
14
16
port,
@@ -23,6 +25,16 @@ export function createThreadsRpcOptions({
23
25
}
24
26
}
25
27
28
+ export function disposeInternalListeners ( ) {
29
+ for ( const fn of dispose ) {
30
+ try {
31
+ fn ( )
32
+ }
33
+ catch { }
34
+ }
35
+ dispose . length = 0
36
+ }
37
+
26
38
export function createForksRpcOptions (
27
39
nodeV8 : typeof import ( 'v8' ) ,
28
40
) : WorkerRpcOptions {
@@ -33,14 +45,16 @@ export function createForksRpcOptions(
33
45
processSend ! ( v )
34
46
} ,
35
47
on ( fn ) {
36
- processOn ( 'message' , ( message : any , ...extras : any ) => {
48
+ const handler = ( message : any , ...extras : any ) => {
37
49
// Do not react on Tinypool's internal messaging
38
50
if ( ( message as TinypoolWorkerMessage ) ?. __tinypool_worker_message__ ) {
39
51
return
40
52
}
41
53
42
54
return fn ( message , ...extras )
43
- } )
55
+ }
56
+ processOn ( 'message' , handler )
57
+ dispose . push ( ( ) => processOff ( 'message' , handler ) )
44
58
} ,
45
59
}
46
60
}
0 commit comments