Repository navigation
Expand file tree
/
Copy pathindex.js
More file actions
43 lines (37 loc) · 1.5 KB
/
Copy pathindex.js
File metadata and controls
43 lines (37 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const AsyncStreamEmitter = require('async-stream-emitter');
function createStreamEmit(originalEmitMethod) {
return function streamEmit(eventName, ...args) {
originalEmitMethod.apply(this, arguments);
AsyncStreamEmitter.prototype.emit.call(this, eventName, args);
}
}
function createStreamRemoveListener(originalRemoveListenerMethod) {
return function streamRemoveListener(eventName, listener) {
if (listener) {
originalRemoveListenerMethod.apply(this, arguments);
} else {
AsyncStreamEmitter.prototype.removeListener.call(this, eventName);
}
}
}
function createStreamListenerCount(originalListenerCountMethod) {
return function streamListenerCount(eventName) {
let eventListenerCount = originalListenerCountMethod.apply(this, arguments);
let streamConsumerCount = this.getListenerConsumerCount(eventName);
return eventListenerCount + streamConsumerCount;
}
}
function eetase(object) {
// Prevent EventEmitter from throwing on error.
object.on('error', () => {});
let originalEmitMethod = object.emit;
let originalListenerCountMethod = object.listenerCount;
let originalRemoveListenerMethod = object.removeListener;
Object.assign(object, AsyncStreamEmitter.prototype);
AsyncStreamEmitter.call(object);
object.emit = createStreamEmit(originalEmitMethod);
object.listenerCount = createStreamListenerCount(originalListenerCountMethod);
object.removeListener = createStreamRemoveListener(originalRemoveListenerMethod);
return object;
}
module.exports = eetase;