import {HTTPKernelModule} from "../HTTPKernelModule"; import {HTTPKernel} from "../HTTPKernel"; import {Request} from "../../lifecycle/Request"; import {ActivatedRoute} from "../../routing/ActivatedRoute"; import {ResponseObject} from "../../routing/Route"; import {plaintext} from "../../response/StringResponseFactory"; import {ResponseFactory} from "../../response/ResponseFactory"; import {json} from "../../response/JSONResponseFactory"; import {http} from "../../response/HTTPErrorResponseFactory"; import {HTTPStatus} from "@extollo/util"; export class ExecuteResolvedRouteHandlerHTTPModule extends HTTPKernelModule { public static register(kernel: HTTPKernel) { kernel.register(this).core() } public async apply(request: Request) { if ( request.hasInstance(ActivatedRoute) ) { const route = request.make(ActivatedRoute) let object: ResponseObject = await route.handler(request) if ( (typeof object === 'string') || (typeof object === 'number') ) { object = plaintext(String(object)) } if ( object instanceof ResponseFactory ) { await object.write(request) } else if ( typeof object !== 'undefined' ) { await json(object).write(request) } else { await plaintext('').write(request) } } else { await http(HTTPStatus.NOT_FOUND).write(request) } return request } }