@@ -12,17 +12,32 @@ const stubNavigator = (serviceWorker: Partial<ServiceWorkerContainer>) => {
1212const createServiceWorkerContainer = (
1313 registration : Partial < ServiceWorkerRegistration > = { }
1414) => {
15- const listeners = new Map < string , ( evt ?: Event ) => void > ( ) ;
15+ const listeners = new Map < string , Array < ( evt ?: Event ) => void > > ( ) ;
1616 return {
1717 register : vi . fn ( ) . mockResolvedValue ( registration ) ,
1818 ready : Promise . resolve ( registration as ServiceWorkerRegistration ) ,
1919 controller : null ,
2020 addEventListener : ( event : string , cb : ( evt ?: Event ) => void ) => {
21- listeners . set ( event , cb ) ;
21+ const cbs = listeners . get ( event ) ;
22+ if ( cbs ) {
23+ cbs . push ( cb ) ;
24+ } else {
25+ listeners . set ( event , [ cb ] ) ;
26+ }
27+ } ,
28+ removeEventListener : ( event : string , cb ?: ( evt ?: Event ) => void ) => {
29+ if ( ! cb ) {
30+ listeners . delete ( event ) ;
31+ return ;
32+ }
33+ const cbs = listeners . get ( event ) ;
34+ if ( ! cbs ) return ;
35+ const idx = cbs . indexOf ( cb ) ;
36+ if ( idx !== - 1 ) cbs . splice ( idx , 1 ) ;
37+ if ( cbs . length === 0 ) listeners . delete ( event ) ;
2238 } ,
23- removeEventListener : ( event : string ) => listeners . delete ( event ) ,
2439 dispatch : ( event : string , evt : Event = new Event ( event ) ) => {
25- listeners . get ( event ) ?.( evt ) ;
40+ listeners . get ( event ) ?. forEach ( ( cb ) => cb ( evt ) ) ;
2641 } ,
2742 } ;
2843} ;
0 commit comments