UNPKG

@bigmi/client

Version:

Reactive primitives for Bitcoin apps.

32 lines (31 loc) 1.49 kB
import { EventEmitter } from 'eventemitter3'; type EventMap = Record<string, object | never>; type EventKey<eventMap extends EventMap> = string & keyof eventMap; type EventFn<parameters extends unknown[] = any[]> = (...parameters: parameters) => void; export type EventData<eventMap extends EventMap, eventName extends keyof eventMap> = (eventMap[eventName] extends [never] ? unknown : eventMap[eventName]) & { uid: string; }; export declare class Emitter<eventMap extends EventMap> { uid: string; _emitter: EventEmitter<string | symbol, any>; constructor(uid: string); on<key extends EventKey<eventMap>>(eventName: key, fn: EventFn<eventMap[key] extends [never] ? [{ uid: string; }] : [data: eventMap[key] & { uid: string; }]>): void; once<key extends EventKey<eventMap>>(eventName: key, fn: EventFn<eventMap[key] extends [never] ? [{ uid: string; }] : [data: eventMap[key] & { uid: string; }]>): void; off<key extends EventKey<eventMap>>(eventName: key, fn: EventFn<eventMap[key] extends [never] ? [{ uid: string; }] : [data: eventMap[key] & { uid: string; }]>): void; emit<key extends EventKey<eventMap>>(eventName: key, ...params: eventMap[key] extends [never] ? [] : [data: eventMap[key]]): void; listenerCount<key extends EventKey<eventMap>>(eventName: key): number; } export declare function createEmitter<eventMap extends EventMap>(uid: string): Emitter<eventMap>; export {};