@@ -63,7 +63,6 @@ function compression (options) {
63
63
var stream
64
64
65
65
var _end = res . end
66
- var _removeListener = res . removeListener
67
66
var _write = res . write
68
67
69
68
// proxy drain events from stream
@@ -80,6 +79,23 @@ function compression (options) {
80
79
}
81
80
} )
82
81
82
+ interceptRemoveListener ( res , function ( type , listener ) {
83
+ if ( ! listeners || type !== 'drain' ) {
84
+ // skip intercept
85
+ return false
86
+ } else if ( stream ) {
87
+ // remove listener from stream
88
+ stream . removeListener ( type , listener )
89
+ } else {
90
+ // remove buffered listener
91
+ for ( var i = listeners . length - 1 ; i >= 0 ; i -- ) {
92
+ if ( listeners [ i ] [ 0 ] === type && listeners [ i ] [ 1 ] === listener ) {
93
+ listeners . splice ( i , 1 )
94
+ }
95
+ }
96
+ }
97
+ } )
98
+
83
99
// flush
84
100
res . flush = function flush ( ) {
85
101
if ( stream ) {
@@ -130,31 +146,6 @@ function compression (options) {
130
146
: stream . end ( )
131
147
}
132
148
133
- res . removeListener = function removeListener ( type , listener ) {
134
- if ( ! listeners || type !== 'drain' ) {
135
- return _removeListener . call ( this , type , listener )
136
- }
137
-
138
- if ( stream ) {
139
- return stream . removeListener ( type , listener )
140
- }
141
-
142
- // remove buffered listener
143
- for ( var i = listeners . length - 1 ; i >= 0 ; i -- ) {
144
- if ( listeners [ i ] [ 0 ] === type && listeners [ i ] [ 1 ] === listener ) {
145
- listeners . splice ( i , 1 )
146
- }
147
- }
148
-
149
- return this
150
- }
151
-
152
- /* istanbul ignore next */
153
- if ( res . off ) {
154
- // emitter.off was added in Node.js v10+; don't add it to earlier versions
155
- res . off = res . removeListener
156
- }
157
-
158
149
function nocompress ( msg ) {
159
150
debug ( 'no compression: %s' , msg )
160
151
addListeners ( res , _addListener , listeners )
@@ -310,6 +301,46 @@ function interceptAddListener (ee, fn) {
310
301
}
311
302
}
312
303
304
+ /**
305
+ * Intercept add listener on event emitter.
306
+ * @private
307
+ */
308
+
309
+ function interceptRemoveListener ( ee , fn ) {
310
+ var _removeListener = ee . removeListener
311
+ var _off = ee . off
312
+
313
+ if ( _removeListener ) {
314
+ Object . defineProperty ( ee , 'removeListener' , {
315
+ configurable : true ,
316
+ value : removeListener ,
317
+ writable : true
318
+ } )
319
+ }
320
+
321
+ if ( _off ) {
322
+ Object . defineProperty ( ee , 'off' , {
323
+ configurable : true ,
324
+ value : off ,
325
+ writable : true
326
+ } )
327
+ }
328
+
329
+ return _removeListener || _off || noop
330
+
331
+ function removeListener ( type , listener ) {
332
+ return fn . call ( this , type , listener ) === false
333
+ ? _removeListener . call ( this , type , listener )
334
+ : this
335
+ }
336
+
337
+ function off ( type , listener ) {
338
+ return fn . call ( this , type , listener ) === false
339
+ ? _off . call ( this , type , listener )
340
+ : this
341
+ }
342
+ }
343
+
313
344
/**
314
345
* Reusable no-op function.
315
346
* @private
0 commit comments