import {Canonical, CanonicalDefinition} from './Canonical.ts' import Instantiable, {isInstantiable} from '../../../di/src/type/Instantiable.ts' 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 InstantiableCanonical extends Canonical> { public async init_canonical_item(def: CanonicalDefinition): Promise> { if ( isInstantiable(def.imported.default) ) { return this.make(def.imported.default) } throw new InvalidCanonicalExportError(def.original_name) } }