Revert "Merge pull request #4166 from Tyriar/event_with_emitter"

This reverts commit d22f7c9edd, reversing
changes made to 1f8e6f0952.
This commit is contained in:
Daniel Imms
2022-10-06 09:48:54 -07:00
parent 5f1651ffbc
commit 4d97729010
34 changed files with 329 additions and 283 deletions
+2 -32
View File
@@ -14,15 +14,13 @@ export interface IEvent<T, U = void> {
}
export interface IEventEmitter<T, U = void> {
event: IEvent<T, U>;
fire(arg1: T, arg2: U): void;
dispose(): void;
}
export interface IEventWithEmitter<T, U = void> extends IEventEmitter<T, U>, IEvent<T, U> {
}
export class EventEmitter<T, U = void> implements IEventEmitter<T, U> {
private readonly _listeners: IListener<T, U>[] = [];
private _listeners: IListener<T, U>[] = [];
private _event?: IEvent<T, U>;
private _disposed: boolean = false;
@@ -66,34 +64,6 @@ export class EventEmitter<T, U = void> implements IEventEmitter<T, U> {
}
}
/**
* Creates an object that implements both the {@link IEvent} and {@link IEmitter} interfaces. This
* allows more concise instantiation. The idea is to internally use the combined
* {@link IEventWithEmitter} interface and only expose {@link IEvent} externally.
*
* @example
* ```ts
* public readonly onFoo = initEvent<string>();
* // ...
* onFoo(e => handle(e));
* onFoo.fire('bar');
* ```
*/
export function initEvent<T, U = void>(): IEventWithEmitter<T, U> {
const emitter = new EventEmitter<T, U>();
const event = emitter.event;
Object.defineProperty(event, '_listeners', {
value: (emitter as any)._listeners
});
Object.defineProperty(event, 'fire', {
value: emitter.fire.bind(emitter)
});
Object.defineProperty(event, 'dispose', {
value: emitter.dispose.bind(emitter)
});
return event as any;
}
export function forwardEvent<T>(from: IEvent<T>, to: IEventEmitter<T>): IDisposable {
return from(e => to.fire(e));
}