All files / utils event.ts

75% Statements 6/8
100% Branches 0/0
71.43% Functions 5/7
83.33% Lines 5/6
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              4x 45x     13x               118x       13x    
type Handler<T> = (data?: T) => void;
 
export interface IEvent<T> {
  on(handler: Handler<T>) : void;
  off(handler: Handler<T>) : void;
}
 
export class Event<T> implements IEvent<T> {
  private handlers: Handler<T>[] = [];
 
  public on(handler: Handler<T>) : void {
      this.handlers.push(handler);
  }
 
  public off(handler: Handler<T>) : void {
      this.handlers = this.handlers.filter(h => h !== handler);
  }
 
  public trigger(data?: T) {
      this.handlers.slice(0).forEach(h => h(data));
  }
 
  public expose() : IEvent<T> {
    return this;
  }
}