UNPKG

@microsoft/teams.common

Version:

<p> <a href="https://www.npmjs.com/package/@microsoft/teams.common" target="_blank"> <img src="https://img.shields.io/npm/v/@microsoft/teams.common/latest" /> </a> <a href="https://www.npmjs.com/package/@microsoft/teams.common?activeTa

43 lines (40 loc) • 2.12 kB
import { ILogger } from '../logging/logger.js'; type EventHandler<T = any> = (data: T) => void | Promise<void>; interface IEventEmitter<EventTypes = Record<string, any>> { on<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>): number; once<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>): number; off(id: number): void; emit<Event extends keyof EventTypes>(event: Event, value: EventTypes[Event]): void; } declare class EventEmitter<EventTypes = Record<string, any>> implements IEventEmitter<EventTypes> { protected readonly logger?: ILogger | undefined; protected index: number; protected subscriptions: Map<keyof EventTypes, Array<{ readonly id: number; readonly handler: EventHandler; }>>; /** * @param logger Used to report handler failures from {@link emitAsync}. * Defaults to `console` when omitted, so failures are never silent. */ constructor(logger?: ILogger | undefined); on<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>): number; once<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>): number; off(id: number): void; emit<Event extends keyof EventTypes>(event: Event, value: EventTypes[Event]): void; /** * Emit an event and wait for every subscribed handler to settle. * * Handlers are started in subscription order and then awaited together, so * async handlers run concurrently. Use this instead of `emit` when the * emitter must not continue until async listeners have finished — for * example when those listeners touch resources that are torn down once the * emitting operation returns. * * A handler that throws or rejects is logged and does not stop the other * handlers; this never rejects. */ emitAsync<Event extends keyof EventTypes>(event: Event, value: EventTypes[Event]): Promise<void>; private reportHandlerError; } export { EventEmitter, type EventHandler, type IEventEmitter };