File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ import {
1212 type AnyHandler ,
1313} from './handlers-controller'
1414import { toReadonlyArray } from '../utils/internal/toReadonlyArray'
15+ import { Disposable } from '../utils/internal/Disposable'
1516
1617type UnionToIntersection < U > = ( U extends any ? ( k : U ) => void : never ) extends (
1718 k : infer I ,
@@ -112,6 +113,7 @@ export function defineNetwork<Sources extends Array<NetworkSource<any>>>(
112113) : NetworkApi < Sources > {
113114 let readyState : NetworkReadyState = NetworkReadyState . DISABLED
114115 const events = new Emitter < MergeEventMaps < Sources > > ( )
116+ const disposable = new Disposable ( )
115117
116118 const deriveHandlersController = (
117119 handlers : DefineNetworkOptions < Sources > [ 'handlers' ] ,
@@ -187,6 +189,10 @@ export function defineNetwork<Sources extends Array<NetworkSource<any>>>(
187189 events . emit ( event )
188190 } )
189191
192+ disposable [ 'subscriptions' ] . push ( ( ) => {
193+ frame . events . removeAllListeners ( )
194+ } )
195+
190196 const handlers = frame . getHandlers ( handlersController )
191197
192198 await frame . resolve (
@@ -210,6 +216,7 @@ export function defineNetwork<Sources extends Array<NetworkSource<any>>>(
210216 )
211217
212218 readyState = NetworkReadyState . DISABLED
219+ disposable . dispose ( )
213220
214221 return colorlessPromiseAll (
215222 resolvedOptions . sources . map ( ( source ) => source . disable ( ) ) ,
Original file line number Diff line number Diff line change 1+ import { devUtils } from './devUtils'
2+
13export type DisposableSubscription = ( ) => void
24
35export class Disposable {
46 protected subscriptions : Array < DisposableSubscription > = [ ]
57
68 public dispose ( ) {
79 let subscription : DisposableSubscription | undefined
10+ const errors : Array < Error > = [ ]
11+
812 while ( ( subscription = this . subscriptions . shift ( ) ) ) {
9- subscription ( )
13+ try {
14+ subscription ( )
15+ } catch ( error ) {
16+ if ( error instanceof Error ) {
17+ errors . push ( error )
18+ }
19+ }
20+ }
21+
22+ if ( errors . length > 0 ) {
23+ console . error (
24+ new AggregateError (
25+ errors ,
26+ devUtils . formatMessage (
27+ 'Failed to dispose of some side effects. This is likely an issue with MSW, please report it on GitHub: https://github.com/mswjs/msw/issues' ,
28+ ) ,
29+ ) ,
30+ )
1031 }
1132 }
1233}
You can’t perform that action at this time.
0 commit comments