import { BaseEvent, EventBus } from 'bubus'
const HandlerEvent = BaseEvent.extend('HandlerEvent', {})
const bus = new EventBus('ParallelHandlerBus', { event_handler_concurrency: 'parallel' })
let inFlight = 0
let maxInFlight = 0
let release!: () => void
const gate = new Promise<void>((resolve) => {
release = resolve
})
const tracked = async () => {
inFlight += 1
maxInFlight = Math.max(maxInFlight, inFlight)
await gate
inFlight -= 1
}
bus.on(HandlerEvent, tracked)
bus.on(HandlerEvent, tracked)
const event = bus.emit(HandlerEvent({}))
await new Promise((resolve) => setTimeout(resolve, 0))
release()
await event.done()
if (maxInFlight < 2) throw new Error('expected overlapping handlers')