/** * Error thrown when the item returned from a canonical definition file is not the expected item. * @extends Error */ import {Canonical, CanonicalDefinition} from "./Canonical"; import {Instantiable, isInstantiable} from "@extollo/di"; export class InvalidCanonicalExportError extends Error { constructor(name: string) { super(`Unable to import canonical item from "${name}". The default export of this file is invalid.`) } } export class CanonicalInstantiable extends Canonical> { public async initCanonicalItem(definition: CanonicalDefinition): Promise> { if ( isInstantiable(definition.imported.default) ) { return this.app().make(definition.imported.default) } throw new InvalidCanonicalExportError(definition.originalName) } }