Skip to content
This repository was archived by the owner on Feb 26, 2024. It is now read-only.

Commit c5130a6

Browse files
jtmalinowskimhevery
authored andcommitted
fix: fluent interface for EventEmitter (#475)
1 parent 21935e8 commit c5130a6

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

lib/node/events.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88

99
import {makeZoneAwareAddListener, makeZoneAwareListeners, makeZoneAwareRemoveListener, patchMethod} from '../common/utils';
1010

11+
const callAndReturnFirstParam = (fn: (self: any, args: any[]) => any) => {
12+
return (self: any, args: any[]) => {
13+
fn(self, args);
14+
return self;
15+
};
16+
};
1117

1218
// For EventEmitter
1319
const EE_ADD_LISTENER = 'addListener';
@@ -16,12 +22,9 @@ const EE_REMOVE_LISTENER = 'removeListener';
1622
const EE_LISTENERS = 'listeners';
1723
const EE_ON = 'on';
1824

19-
20-
const zoneAwareAddListener =
21-
makeZoneAwareAddListener(EE_ADD_LISTENER, EE_REMOVE_LISTENER, false, true);
22-
const zoneAwarePrependListener =
23-
makeZoneAwareAddListener(EE_PREPEND_LISTENER, EE_REMOVE_LISTENER, false, true);
24-
const zoneAwareRemoveListener = makeZoneAwareRemoveListener(EE_REMOVE_LISTENER, false);
25+
const zoneAwareAddListener = callAndReturnFirstParam(makeZoneAwareAddListener(EE_ADD_LISTENER, EE_REMOVE_LISTENER, false, true));
26+
const zoneAwarePrependListener = callAndReturnFirstParam(makeZoneAwareAddListener(EE_PREPEND_LISTENER, EE_REMOVE_LISTENER, false, true));
27+
const zoneAwareRemoveListener = callAndReturnFirstParam(makeZoneAwareRemoveListener(EE_REMOVE_LISTENER, false));
2528
const zoneAwareListeners = makeZoneAwareListeners(EE_LISTENERS);
2629

2730
export function patchEventEmitterMethods(obj: any): boolean {
@@ -46,4 +49,4 @@ try {
4649

4750
if (events && events.EventEmitter) {
4851
patchEventEmitterMethods(events.EventEmitter.prototype);
49-
}
52+
}

test/node/events.spec.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ describe('nodejs EventEmitter', () => {
3737
zoneB.run(() => emitter.emit('test', 'test value'));
3838
expect(expectZoneACount).toBe(2);
3939
});
40+
it('allows chaining methods', () => {
41+
zoneA.run(() => {
42+
expect(emitter.on('test', expectZoneA)).toBe(emitter);
43+
expect(emitter.addListener('test', expectZoneA)).toBe(emitter);
44+
});
45+
});
4046
it('should remove listeners properly', () => {
4147
zoneA.run(() => {
4248
emitter.on('test', shouldNotRun);

0 commit comments

Comments
 (0)