|
|
|
@ -6,9 +6,11 @@ import {ResponseFactory} from "../response/ResponseFactory";
|
|
|
|
|
import {Response} from "../lifecycle/Response";
|
|
|
|
|
import {Controllers} from "../../service/Controllers";
|
|
|
|
|
import {ErrorWithContext, Collection} from "@extollo/util";
|
|
|
|
|
import {Container} from "@extollo/di";
|
|
|
|
|
import {Controller} from "../Controller";
|
|
|
|
|
import {Middlewares} from "../../service/Middlewares";
|
|
|
|
|
import {Middleware} from "./Middleware";
|
|
|
|
|
import {Config} from "../../service/Config";
|
|
|
|
|
|
|
|
|
|
export type ResponseObject = ResponseFactory | string | number | void | any | Promise<ResponseObject>
|
|
|
|
|
export type RouteHandler = ((request: Request, response: Response) => ResponseObject) | ((request: Request) => ResponseObject) | (() => ResponseObject) | string
|
|
|
|
@ -34,6 +36,9 @@ export class Route extends AppClass {
|
|
|
|
|
this.registeredRoutes = []
|
|
|
|
|
this.registeredGroups = []
|
|
|
|
|
|
|
|
|
|
const configService = <Config> Container.getContainer().make(Config)
|
|
|
|
|
const globalMiddleware = configService.get('server.middleware.global', {})
|
|
|
|
|
|
|
|
|
|
const stack = [...this.compiledGroupStack].reverse()
|
|
|
|
|
for ( const route of registeredRoutes ) {
|
|
|
|
|
for ( const group of stack ) {
|
|
|
|
@ -47,6 +52,39 @@ export class Route extends AppClass {
|
|
|
|
|
.each(def => route.appendMiddleware(def))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Add the global pre- and post- middleware
|
|
|
|
|
if ( Array.isArray(globalMiddleware?.pre) ) {
|
|
|
|
|
const globalPre = [...globalMiddleware.pre].reverse()
|
|
|
|
|
for ( const item of globalPre ) {
|
|
|
|
|
if ( typeof item !== 'string' ) {
|
|
|
|
|
throw new ErrorWithContext(`Invalid global pre-middleware definition. Global middleware must be string-references.`, {
|
|
|
|
|
configKey: 'server.middleware.global.pre',
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
route.prependMiddleware({
|
|
|
|
|
stage: 'pre',
|
|
|
|
|
handler: item,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( Array.isArray(globalMiddleware?.post) ) {
|
|
|
|
|
const globalPost = [...globalMiddleware.post]
|
|
|
|
|
for ( const item of globalPost ) {
|
|
|
|
|
if ( typeof item !== 'string' ) {
|
|
|
|
|
throw new ErrorWithContext(`Invalid global post-middleware definition. Global middleware must be string-references.`, {
|
|
|
|
|
configKey: 'server.middleware.global.post',
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
route.appendMiddleware({
|
|
|
|
|
stage: 'post',
|
|
|
|
|
handler: item,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
route.resolvePreflight() // Try to resolve here to catch any errors at boot-time and pre-compile
|
|
|
|
|
route.resolveHandler()
|
|
|
|
|
route.resolvePostflight()
|
|
|
|
|