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) { 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 = new ActivatedRoute(route, request.path) request.registerSingletonInstance(ActivatedRoute, activated) } else { this.logging.debug(`No matching route found for: ${request.method} -> ${request.path}`) } return request } }