File tree Expand file tree Collapse file tree 2 files changed +25
-3
lines changed Expand file tree Collapse file tree 2 files changed +25
-3
lines changed Original file line number Diff line number Diff line change @@ -10,8 +10,10 @@ const bindHiddenSignalsHandler = (
1010 handler : NodeJS . SignalsListener ,
1111) => {
1212 type RelaySignals = typeof signals [ number ] ;
13+
14+ const hiddenHandlers = new Map < RelaySignals , NodeJS . SignalsListener > ( ) ;
1315 for ( const signal of signals ) {
14- process . on ( signal , ( receivedSignal ) => {
16+ const hiddenHandler = ( receivedSignal : NodeJS . Signals ) => {
1517 handler ( receivedSignal ) ;
1618
1719 /**
@@ -22,7 +24,10 @@ const bindHiddenSignalsHandler = (
2224 // eslint-disable-next-line n/no-process-exit
2325 process . exit ( 128 + osConstants . signals [ signal ] ) ;
2426 }
25- } ) ;
27+ } ;
28+
29+ process . on ( signal , hiddenHandler ) ;
30+ hiddenHandlers . set ( signal , hiddenHandler ) ;
2631 }
2732
2833 /**
@@ -41,7 +46,9 @@ const bindHiddenSignalsHandler = (
4146 process . listeners = function ( eventName ) {
4247 const result : BaseEventListener [ ] = Reflect . apply ( listeners , this , arguments ) ;
4348 if ( signals . includes ( eventName as RelaySignals ) ) {
44- return result . filter ( listener => listener !== handler ) ;
49+ return result . filter (
50+ listener => listener !== hiddenHandlers . get ( eventName as RelaySignals ) ,
51+ ) ;
4552 }
4653 return result ;
4754 } ;
Original file line number Diff line number Diff line change @@ -178,6 +178,10 @@ export default testSuite(({ describe }, node: NodeApis) => {
178178 });
179179 setTimeout(() => {}, 1e5);
180180 ` ,
181+ 'hidden-signals-handler.js' : `
182+ console.log('process.listeners().length = ' + process.listeners('SIGINT').length);
183+ console.log('process.listenerCount() = ' + process.listenerCount('SIGINT'));
184+ ` ,
181185 } ) ;
182186 onFinish ( async ( ) => await fixture . rm ( ) ) ;
183187
@@ -306,6 +310,17 @@ export default testSuite(({ describe }, node: NodeApis) => {
306310 retry : 3 ,
307311 } ) ;
308312
313+ test ( 'Relay signal handlers are properly hidden' , async ( ) => {
314+ const tsxProcess = tsx ( [
315+ fixture . getPath ( 'hidden-signals-handler.js' ) ,
316+ ] ) ;
317+
318+ const result = await tsxProcess ;
319+
320+ expect ( result . stdout ) . toBe ( 'process.listeners().length = 0\nprocess.listenerCount() = 0' ) ;
321+ expect ( result . exitCode ) . toBe ( 0 ) ;
322+ } ) ;
323+
309324 describe ( 'Ctrl + C' , ( { test } ) => {
310325 const CtrlC = '\u0003' ;
311326
You can’t perform that action at this time.
0 commit comments