import { EmitCallback, EventSignature, MercuryAggregateResponse, MercuryEventEmitter, EventContract, EventNames, ListenerCallback } from '@sprucelabs/mercury-types'; import { Schema, SchemaValues } from '@sprucelabs/schema'; export default class AbstractEventEmitter implements MercuryEventEmitter { private shouldEmitSequentally; protected eventContract: EventContract; protected listenersByEvent: Record any | Promise)[]>; constructor(contract: EventContract, options?: { shouldEmitSequentally?: boolean; }); emit, IEventSignature extends EventSignature = Contract['eventSignatures'][EventName], EmitSchema extends Schema = IEventSignature['emitPayloadSchema'] extends Schema ? IEventSignature['emitPayloadSchema'] : never, ResponseSchema extends Schema = IEventSignature['responsePayloadSchema'] extends Schema ? IEventSignature['responsePayloadSchema'] : never>(eventName: EventName, payload?: (EmitSchema extends Schema ? SchemaValues : never) | EmitCallback, cb?: EmitCallback): Promise>>; emitAndFlattenResponses, IEventSignature extends EventSignature = Contract['eventSignatures'][EventName], EmitSchema extends Schema = IEventSignature['emitPayloadSchema'] extends Schema ? IEventSignature['emitPayloadSchema'] : never, ResponseSchema extends Schema = IEventSignature['responsePayloadSchema'] extends Schema ? IEventSignature['responsePayloadSchema'] : never>(eventName: EventName, payload?: (EmitSchema extends Schema ? SchemaValues : never) | EmitCallback, cb?: EmitCallback): Promise[]>; private emitOne; listenCount(eventName: EventNames): number; mixinContract(contract: EventContract): void; protected validateEmitPayload(schema: Schema | undefined | null, actualPayload: any, eventName: string): void; protected validateResponsePayload(schema: Schema | undefined | null, actualPayload: any, eventName: string): void; private normalizePayloadAndCallback; on, IEventSignature extends EventSignature = Contract['eventSignatures'][EventName]>(eventName: EventName, cb: ListenerCallback): Promise; off(eventName: EventNames, cb?: any): Promise; }