komi-logger
Version:
High-performance, type-safe logging library for Bun with advanced TypeScript body intersection, modular strategy pattern, transform streams, and immutable API design.
200 lines (199 loc) • 7.25 kB
TypeScript
import { EventEmitter } from 'events';
import type { EventMap } from './types/eventMap';
/**
* A generic event emitter class that allows for type-safe event handling.
*
* @template TEvents - The type of events and their payloads.
*/
export declare class TypedEventEmitter<TEvents extends EventMap> extends EventEmitter {
/**
* Emits an event with the specified payload.
*
* @template KEvent - The type of event to emit.
* @param event - The event name to emit.
* @param payload - The data to send with the event.
* @returns Whether the event had listeners.
*
* @example
* ```typescript
* class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
* const emitter = new MyEmitter();
* emitter.emit('foo', 'hello');
* ```
*/
emit<KEvent extends keyof TEvents>(event: KEvent, ...args: TEvents[KEvent]): boolean;
/**
* Registers an event listener for the specified event.
*
* @template KEvent - The type of event to listen for.
* @param event - The event name to listen for.
* @param listener - The callback function that handles the event.
* @returns This instance for chaining.
*
* @example
* ```typescript
* class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
* const emitter = new MyEmitter();
* emitter.on('foo', payload => {
* console.log(payload); // payload is string
* });
* ```
*/
on<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
/**
* Registers a one-time event listener for the specified event.
*
* @template KEvent - The type of event to listen for.
* @param event - The event name to listen for.
* @param listener - The callback function that handles the event.
* @returns This instance for chaining.
*
* @example
* ```typescript
* class MyEmitter extends TypedEventEmitter<{ bar: [number] }> {}
* const emitter = new MyEmitter();
* emitter.once('bar', payload => {
* console.log(payload); // payload is number
* });
* ```
*/
once<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
/**
* Registers an event listener for the specified event (alias for on).
*
* @template KEvent - The type of event to listen for.
* @param event - The event name to listen for.
* @param listener - The callback function that handles the event.
* @returns This instance for chaining.
*
* @example
* ```typescript
* class MyEmitter extends TypedEventEmitter<{ baz: [boolean] }> {}
* const emitter = new MyEmitter();
* emitter.addListener('baz', payload => {
* console.log(payload); // payload is boolean
* });
* ```
*/
addListener<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
/**
* Removes an event listener for the specified event.
*
* @template KEvent - The type of event.
* @param event - The event name.
* @param listener - The callback function to remove.
* @returns This instance for chaining.
*
* @example
* ```typescript
* class MyEmitter extends TypedEventEmitter<{ foo: string }> {}
* const emitter = new MyEmitter();
* const handler = (payload: string) => {};
* emitter.on('foo', handler);
* emitter.removeListener('foo', handler);
* ```
*/
removeListener<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
/**
* Removes an event listener for the specified event (alias for removeListener).
*
* @template KEvent - The type of event.
* @param event - The event name.
* @param listener - The callback function to remove.
* @returns This instance for chaining.
*
* @example
* ```typescript
* class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
* const emitter = new MyEmitter();
* const handler = (payload: string) => {};
* emitter.on('foo', handler);
* emitter.off('foo', handler);
* ```
*/
off<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
/**
* Returns the number of listeners for the specified event.
*
* @template KEvent - The type of event.
* @param event - The event name.
* @returns The number of listeners.
*
* @example
* ```typescript
* class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
* const emitter = new MyEmitter();
* emitter.on('foo', () => {});
* const count = emitter.listenerCount('foo');
* ```
*/
listenerCount<KEvent extends keyof TEvents>(event: KEvent): number;
/**
* Returns a copy of the array of listeners for the specified event.
*
* @template KEvent - The type of event.
* @param event - The event name.
* @returns An array of listener functions.
*
* @example
* ```typescript
* class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
* const emitter = new MyEmitter();
* emitter.on('foo', () => {});
* const listeners = emitter.listeners('foo');
* ```
*/
listeners<KEvent extends keyof TEvents>(event: KEvent): ((...args: TEvents[KEvent]) => void)[];
/**
* Returns a copy of the array of raw listeners for the specified event.
*
* @template KEvent - The type of event.
* @param event - The event name.
* @returns An array of raw listener functions.
*
* @example
* ```typescript
* class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
* const emitter = new MyEmitter();
* emitter.on('foo', () => {});
* const rawListeners = emitter.rawListeners('foo');
* ```
*/
rawListeners<KEvent extends keyof TEvents>(event: KEvent): ((...args: TEvents[KEvent]) => void)[];
/**
* Adds a listener to the beginning of the listeners array for the specified event.
*
* @template KEvent - The type of event.
* @param event - The event name.
* @param listener - The callback function to add.
* @returns This instance for chaining.
*
* @example
* ```typescript
* class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
* const emitter = new MyEmitter();
* emitter.prependListener('foo', payload => {
* console.log(payload);
* });
* ```
*/
prependListener<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
/**
* Adds a one-time listener to the beginning of the listeners array for the specified event.
*
* @template KEvent - The type of event.
* @param event - The event name.
* @param listener - The callback function to add.
* @returns This instance for chaining.
*
* @example
* ```typescript
* class MyEmitter extends TypedEventEmitter<{ foo: [string] }> {}
* const emitter = new MyEmitter();
* emitter.prependOnceListener('foo', payload => {
* console.log(payload);
* });
* ```
*/
prependOnceListener<KEvent extends keyof TEvents>(event: KEvent, listener: (...args: TEvents[KEvent]) => void): this;
}