UNPKG

@100mslive/hms-video-store

Version:

@100mslive Core SDK which abstracts the complexities of webRTC while providing a reactive store for data management with a unidirectional data flow

36 lines (27 loc) 1.19 kB
import { EventEmitter2 as EventEmitter } from 'eventemitter2'; /** * Typed Event Emitter Reference: * https://rjzaworski.com/2019/10/event-emitters-in-typescript#a-typescript-event-emitter-interface */ export type EventMap = Record<string, any>; export type EventKey<T extends EventMap> = string & keyof T; export type EventReceiver<T> = (params: T) => void; // interface Emitter<T extends EventMap> { // on<K extends EventKey<T>>(eventName: K, fn: EventReceiver<T[K]>): void; // off<K extends EventKey<T>>(eventName: K, fn: EventReceiver<T[K]>): void; // emit<K extends EventKey<T>>(eventName: K, params: T[K]): void; // } export abstract class TypedEventEmitter<T extends EventMap> extends EventEmitter { on<K extends EventKey<T>>(eventName: K, fn: EventReceiver<T[K]>) { return super.on(eventName, fn); } off<K extends EventKey<T>>(eventName: K, fn: EventReceiver<T[K]>) { return super.off(eventName, fn); } emit<K extends EventKey<T>>(eventName: K, params: T[K]) { return super.emit(eventName, params); } listeners<K extends EventKey<T>>(eventName: K): EventReceiver<T[K]>[] { return super.listeners(eventName) as EventReceiver<T[K]>[]; } }