import EventEmitter from 'events'; import Logger from './logger.js'; import ServiceInterface from './interface.js'; interface EventListener { prefix: string; actions: string[]; } /** * A strict version of EventEmitter * 1. listener must be a standard class * 2. unregistered event not allow to emit * 3. all events register and trigger will be recorded */ declare class EventManager extends ServiceInterface { logger: Logger; emitter: EventEmitter; events: Set; static dependencies: (typeof Logger)[]; constructor(logger: Logger); getProto(): typeof EventEmitter; getAllowEvents(): Set; getEmitter(): EventEmitter; /** * Allow to register a class such like * class Foo { get prefix(){ return 'foo'} get actions() { return ['bar']} } */ addListener(ListenerClass: new () => EventListener): this; emit(eventName: string, callback?: unknown): boolean; } export default EventManager;