import {CanonicalStatic} from './CanonicalStatic' import {Singleton, Instantiable, StaticClass} from '../di' import {CanonicalDefinition} from './Canonical' import {Middleware} from '../http/routing/Middleware' /** * A canonical unit that loads the middleware classes from `app/http/middlewares`. */ @Singleton() export class Middlewares extends CanonicalStatic> { protected appPath = ['http', 'middlewares'] protected canonicalItem = 'middleware' protected suffix = '.middleware' public async initCanonicalItem(definition: CanonicalDefinition): Promise>> { const item = await super.initCanonicalItem(definition) if ( !(item.prototype instanceof Middleware) ) { throw new TypeError(`Invalid middleware definition: ${definition.originalName}. Controllers must extend from @extollo/lib.http.routing.Middleware.`) } return item } }