All files index.es6

100% Statements 30/30
85.71% Branches 12/14
100% Functions 10/10
100% Lines 23/23
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 44 45 46 47 48 49 50 51  20x 20x 1x   19x       20x 14x 14x           16x   4x 5x 5x       4x     2x     1x   1x         8x 4x   4x 2x 4x 2x 2x 4x        
export class Disposable {
  constructor (block) {
    if (!block) {
      throw new Error('A Disposable must be created with a dispose callback')
    }
    this.block = block
  }
 
  dispose () {
    if (this.block) {
      this.block()
      delete this.block
    }
  }
}
 
export class CompositeDisposable extends Disposable {
  constructor (disposables = []) {
    super(() => {
      for (let i = 0; i < this.disposables.length; i++) {
        const disposable = this.disposables[i]
        disposable.dispose()
      }
    })
 
    this.disposables = disposables
  }
 
  add (disposable) { this.disposables.push(disposable) }
 
  remove (disposable) {
    const index = this.disposables.indexOf(disposable)
 
    Eif (index !== -1) { this.disposables.splice(index, 1) }
  }
}
 
export class DisposableEvent extends Disposable {
  constructor (target, event, listener) {
    const events = event.split(/\s+/g)
 
    if (typeof target.addEventListener === 'function') {
      super(() => events.forEach(e => target.removeEventListener(e, listener)))
      events.forEach(e => target.addEventListener(e, listener))
    } else Eif (typeof target.on === 'function') {
      super(() => events.forEach(e => target.off(e, listener)))
      events.forEach(e => target.on(e, listener))
    }
  }
}