All files / web/src/components/toys/euclid/agent ConstructionEventBus.ts

0% Statements 0/20
0% Branches 0/1
0% Functions 0/1
0% Lines 0/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21                                         
import type { ConstructionEvent } from './useConstructionNotifier'

type Listener = (event: ConstructionEvent) => void

export class ConstructionEventBus {
  private listeners = new Set<Listener>()

  subscribe(listener: Listener): () => void {
    this.listeners.add(listener)
    return () => {
      this.listeners.delete(listener)
    }
  }

  emit(event: ConstructionEvent): void {
    for (const listener of this.listeners) {
      listener(event)
    }
  }
}