import {HTTPKernelModule} from '../HTTPKernelModule' import {Inject, Injectable} from '../../../di' import {HTTPKernel} from '../HTTPKernel' import {Request} from '../../lifecycle/Request' import {Bus} from '../../../support/bus' /** * 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!: Bus public static register(kernel: HTTPKernel): void { kernel.register(this).first() } public async apply(request: Request): Promise { const requestBus = this.container().makeNew(Bus) await requestBus.up(false) await requestBus.connect(this.bus) request.purge(Bus).registerProducer(Bus, () => requestBus) return request } }