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