import {Injectable, Inject} from '../../../di' import {HTTPKernelModule} from '../HTTPKernelModule' import {HTTPKernel} from '../HTTPKernel' import {Request} from '../../lifecycle/Request' import {Routing} from '../../../service/Routing' import {ActivatedRoute} from '../../routing/ActivatedRoute' import {Logging} from '../../../service/Logging' /** * HTTP kernel middleware that tries to find a registered route matching the request's * path and creates an ActivatedRoute instance from it. */ @Injectable() export class MountActivatedRouteHTTPModule extends HTTPKernelModule { public readonly executeWithBlockingWriteback = true @Inject() protected readonly routing!: Routing @Inject() protected readonly logging!: Logging public static register(kernel: HTTPKernel): void { kernel.register(this).before() } public async apply(request: Request): Promise { const route = this.routing.match(request.method, request.path) if ( route ) { this.logging.verbose(`Mounting activated route: ${request.path} -> ${route}`) const activated = request.make(ActivatedRoute, route, request.path) request.registerSingletonInstance(ActivatedRoute, activated) } else { this.logging.debug(`No matching route found for: ${request.method} -> ${request.path}`) } return request } }