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