import {Collection} from "@extollo/util" import {AppClass} from "../../lifecycle/AppClass" import {RouteHandler} from "./Route" export class RouteGroup extends AppClass { private static currentGroupNesting: RouteGroup[] = [] protected middlewares: Collection<{ stage: 'pre' | 'post', handler: RouteHandler }> = new Collection<{stage: "pre" | "post"; handler: RouteHandler}>() public static getCurrentGroupHierarchy(): RouteGroup[] { return [...this.currentGroupNesting] } constructor( public readonly group: () => void | Promise, public readonly prefix: string ) { super() } pre(middleware: RouteHandler) { this.middlewares.push({ stage: 'pre', handler: middleware }) return this } post(middleware: RouteHandler) { this.middlewares.push({ stage: 'post', handler: middleware, }) return this } getGroupMiddlewareDefinitions() { return this.middlewares } }