@@ -2,7 +2,7 @@ import { Client, Server, WebSocket } from 'mock-socket';
22
33import { OutgoingRequest , RequestSuccessResponse , RequestErrorResponse } from '../../types/api_internal.js' ;
44import { EventEmitter } from 'events' ;
5- import { DEFAULT_CONNECT_PARAMS } from './mock-data.js' ;
5+ import { MOCK_SERVER_URL } from './mock-data.js' ;
66
77interface MockFunctionCreator {
88 fn : ( ...args : any [ ] ) => any ;
@@ -25,7 +25,7 @@ interface MockServerOptions {
2525}
2626
2727const DEFAULT_MOCK_SERVER_OPTIONS : MockServerOptions = {
28- url : DEFAULT_CONNECT_PARAMS . url ,
28+ url : MOCK_SERVER_URL ,
2929 reportMissingListeners : true ,
3030 mockF : getDefaultMockCreatorF ( ) ,
3131}
@@ -43,16 +43,19 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
4343 const mockServer = new Server ( url ) ;
4444 let socket : Client ;
4545 const emitter = new EventEmitter ( ) ;
46+ emitter . setMaxListeners ( 1 ) ;
4647
4748 const send = ( data : object ) => {
4849 socket . send ( JSON . stringify ( data ) ) ;
4950 } ;
5051
52+ const handlers : Map < string , ( ) => any > = new Map ( ) ;
53+
5154 const addServerHandler = < DataT extends object | undefined > (
5255 method : string ,
5356 path : string ,
5457 responseData : MockRequestResponseData < DataT > ,
55- subscriptionCallback ?: RequestCallback
58+ subscriptionCallback ?: RequestCallback ,
5659 ) => {
5760 const requestHandler = ( request : OutgoingRequest , s : WebSocket ) => {
5861 if ( subscriptionCallback ) {
@@ -72,14 +75,21 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
7275 s . send ( JSON . stringify ( response ) ) ;
7376 } ;
7477
78+ // Don't add duplicates
7579 const emitId = toEmitId ( path , method ) ;
76- emitter . addListener (
77- emitId ,
78- requestHandler ,
79- ) ;
80- emitter . setMaxListeners ( 1 ) ;
80+ const removeExisting = handlers . get ( emitId ) ;
81+ if ( removeExisting ) {
82+ removeExisting ( ) ;
83+ handlers . delete ( emitId ) ;
84+ }
85+
86+ // Add new
87+ emitter . addListener ( emitId , requestHandler ) ;
8188
82- return ( ) => emitter . removeListener ( emitId , requestHandler ) ;
89+ // Prepare for removal
90+ const removeListener = ( ) => emitter . removeListener ( emitId , requestHandler ) ;
91+ handlers . set ( emitId , removeListener )
92+ return removeListener ;
8393 } ;
8494
8595 const addDummyDataHandler = ( method : string , path : string ) => {
@@ -244,10 +254,6 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
244254 } ) ;
245255 } ) ;
246256
247- mockServer . on ( 'close' , ( ) => {
248- emitter . removeAllListeners ( ) ;
249- } ) ;
250-
251257 return {
252258 addRequestHandler,
253259 addErrorHandler,
@@ -258,7 +264,8 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
258264 ignoreMissingHandler : addDummyDataHandler ,
259265 stop : ( ) => {
260266 mockServer . stop ( ( ) => {
261- // ...
267+ emitter . removeAllListeners ( ) ;
268+ handlers . clear ( ) ;
262269 } ) ;
263270 } ,
264271 send,
0 commit comments