import {HTTPKernelModule} from '../HTTPKernelModule' import {Inject, Injectable} from '../../../di' import {HTTPKernel} from '../HTTPKernel' import {Request} from '../../lifecycle/Request' import {EventBus} from '../../../event/EventBus' import {PropagatingEventBus} from '../../../event/PropagatingEventBus' /** * HTTP kernel module that creates a request-specific event bus * and injects it into the request container. */ @Injectable() export class InjectRequestEventBusHTTPModule extends HTTPKernelModule { @Inject() protected bus!: EventBus public static register(kernel: HTTPKernel): void { kernel.register(this).first() } public async apply(request: Request): Promise { const bus = this.make(PropagatingEventBus) bus.connect(this.bus) request.purge(EventBus).registerProducer(EventBus, () => bus) return request } }