UNPKG

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
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; }