@oaklean/profiler-core
Version:
Part of the @oaklean suite. It provides all basic functions to work with the `.oak` file format. It allows parsing the `.oak` file format as well as tools for analyzing the measurement values. It also provides all necessary capabilities required for prec
28 lines (27 loc) • 2.1 kB
TypeScript
import EventEmitter from 'events';
type EventMap<T> = Record<keyof T, any[]>;
type IfEventMap<Events extends EventMap<Events>, True, False> = object extends Events ? False : True;
type Args<Events extends EventMap<Events>, EventName extends string | symbol> = IfEventMap<Events, EventName extends keyof Events ? Events[EventName] : EventName extends keyof EventEmitterEventMap ? EventEmitterEventMap[EventName] : any[], any[]>;
type EventNames<Events extends EventMap<Events>, EventName extends string | symbol> = IfEventMap<Events, EventName | (keyof Events & (string | symbol)) | keyof EventEmitterEventMap, string | symbol>;
type Listener<Events extends EventMap<Events>, EventName extends string | symbol> = IfEventMap<Events, (...args: EventName extends keyof Events ? Events[EventName] : EventName extends keyof EventEmitterEventMap ? EventEmitterEventMap[EventName] : any[]) => void, (...args: any[]) => void>;
interface EventEmitterEventMap {
newListener: [eventName: string | symbol, listener: (...args: any[]) => void];
removeListener: [
eventName: string | symbol,
listener: (...args: any[]) => void
];
}
export declare class EventHandler<T extends EventMap<T> = any> {
_eventEmitter: EventEmitter<T>;
private _eventCallCount;
constructor();
eventCount<E extends string | symbol>(eventName: EventNames<T, E>): number;
fire<E extends string | symbol>(eventName: EventNames<T, E>, ...args: Args<T, E>): void;
waitForFirstEventCall<E extends string | symbol>(eventName: EventNames<T, E>): Promise<void>;
awaitEventCall<E extends string | symbol>(eventName: EventNames<T, E>): Promise<void>;
removeListener<E extends string | symbol>(eventName: EventNames<T, E>, listener: Listener<T, E>): EventEmitter<T>;
removeAllListeners<E extends string | symbol>(eventName: EventNames<T, E>): EventEmitter<T>;
on<E extends string | symbol>(eventName: EventNames<T, E>, listener: Listener<T, E>): EventEmitter<T>;
once<E extends string | symbol>(eventName: EventNames<T, E>, listener: Listener<T, E>): EventEmitter<T>;
}
export {};