import {Canonical, CanonicalDefinition} from './Canonical' import {isStaticClass, StaticClass} from '../di' import {InvalidCanonicalExportError} from './CanonicalInstantiable' /** * Variant of the Canonical unit whose files export static classes, and these static classes * are the exports of the class. * * @example * The Controllers class is CanonicalStatic. The various `.controller.ts` files export static * Controller classes, so the canonical items managed by the Controllers service are `Instantiable`. */ export class CanonicalStatic extends Canonical> { public async initCanonicalItem(definition: CanonicalDefinition): Promise> { if ( isStaticClass(definition.imported.default) ) { return definition.imported.default } if ( isStaticClass(definition.imported[definition.canonicalName.split(':').reverse()[0]]) ) { return definition.imported[definition.canonicalName.split(':').reverse()[0]] } throw new InvalidCanonicalExportError(definition.originalName) } }