import Emittery from 'emittery'; interface ComponentConstructor { new (): AbstractComponent; } declare abstract class AbstractComponent extends Emittery { protected _isActivated: boolean; get isActivated(): boolean; protected abstract _initialize(): void; activate(): Promise; protected _activate(): Promise; protected abstract _create(): Promise; deactivate(): Promise; protected _deactivate(): Promise; protected abstract _destroy(): Promise; reactivate(): Promise; protected _reactivate(): Promise; toString(): string; } declare abstract class AbstractComponentAgent { findMeta(name: string): ComponentMeta; findBundle(mode: string): string[][]; protected abstract get _metas(): Map; protected abstract get _modeBundles(): Map; } type ComponentMeta = { constructor: ComponentConstructor; dependencies: string[]; }; export { ComponentConstructor, AbstractComponent, AbstractComponentAgent, ComponentMeta };