import {HTTPKernel} from '../HTTPKernel' import {Request} from '../../lifecycle/Request' import {ActivatedRoute} from '../../routing/ActivatedRoute' import {ResponseObject} from '../../routing/Route' import {http} from '../../response/HTTPErrorResponseFactory' import {HTTPStatus} from '../../../util' import {AbstractResolvedRouteHandlerHTTPModule} from './AbstractResolvedRouteHandlerHTTPModule' /** * HTTP kernel module that runs the handler for the request's route. * * In most cases, this is the controller method defined by the route. */ export class ExecuteResolvedRouteHandlerHTTPModule extends AbstractResolvedRouteHandlerHTTPModule { public static register(kernel: HTTPKernel): void { kernel.register(this).core() } public async apply(request: Request): Promise { if ( request.hasInstance(ActivatedRoute) ) { const route = request.make(ActivatedRoute) const object: ResponseObject = await route.handler(request) await this.applyResponseObject(object, request) } else { await http(HTTPStatus.NOT_FOUND).write(request) request.response.blockingWriteback(true) } return request } }