@billjs/event-emitter
Version:
A simple and lightweight EventEmitter by TypeScript for Node.js or Browsers.
200 lines (199 loc) • 5.83 kB
TypeScript
/**
* A simple and lightweight EventEmitter by TypeScript for Node.js or Browsers.
*
* @author billjs
* @see https://github.com/billjs/event-emitter
* @license MIT(https://opensource.org/licenses/MIT)
*/
/**
* EventHandler
*
* @export
*/
export declare type EventHandler = ((evt: Event) => void) & {
_once?: boolean;
};
/**
* Event Object
*
* @export
* @interface Event
*/
export interface Event {
/**
* event type
*
* @type {string}
* @memberof Event
*/
type: string;
/**
* event data
*
* @type {*}
* @memberof Event
*/
data: any;
/**
* the timestamp when event fired
*
* @type {number}
* @memberof Event
*/
timestamp: number;
/**
* it is an once event, that meaning listen off after event fired
*
* @type {boolean}
* @memberof Event
*/
once: boolean;
}
/**
* It's a class for managing events.
* It can be extended to provide event functionality for other classes or object.
*
* @export
* @class EventEmitter
*/
export declare class EventEmitter {
/**
* the all event handlers are added.
* it's a Map data structure(key-value), the key is event type, and the value is event handler.
*
* @memberof EventEmitter
*/
_eventHandlers: Record<string, EventHandler[] | undefined>;
/**
* event type validator.
*
* @param {string} type event type
* @returns {boolean}
* @memberof EventEmitter
*/
isValidType(type: string): boolean;
/**
* event handler validator.
*
* @param {EventHandler} handler event handler
* @returns {boolean}
* @memberof EventEmitter
*/
isValidHandler(handler: EventHandler): boolean;
/**
* listen on a new event by type and handler.
* if listen on, the true is returned, otherwise the false.
* The handler will not be listen if it is a duplicate.
*
* @param {string} type event type, it must be a unique string.
* @param {EventHandler} handler event handler, when if the same handler is passed, listen it by only once.
* @returns {boolean}
* @memberof EventEmitter
* @example
* const emitter = new EventEmitter();
* emitter.on('change:name', evt => {
* console.log(evt);
* });
*/
on(type: string, handler: EventHandler): boolean;
/**
* listen on an once event by type and handler.
* when the event is fired, that will be listen off immediately and automatically.
* The handler will not be listen if it is a duplicate.
*
* @param {string} type event type, it must be a unique string.
* @param {EventHandler} handler event handler, when if the same handler is passed, listen it by only once.
* @returns {boolean}
* @memberof EventEmitter
* @example
* const emitter = new EventEmitter();
* emitter.once('change:name', evt => {
* console.log(evt);
* });
*/
once(type: string, handler: EventHandler): boolean;
/**
* listen off an event by type and handler.
* or listen off events by type, when if only type argument is passed.
* or listen off all events, when if no arguments are passed.
*
* @param {string} [type] event type
* @param {EventHandler} [handler] event handler
* @returns
* @memberof EventEmitter
* @example
* const emitter = new EventEmitter();
* // listen off the specified event
* emitter.off('change:name', evt => {
* console.log(evt);
* });
* // listen off events by type
* emitter.off('change:name');
* // listen off all events
* emitter.off();
*/
off(type?: string, handler?: EventHandler): void;
/**
* listen off all events, that means every event will be emptied.
*
* @memberof EventEmitter
* @example
* const emitter = new EventEmitter();
* emitter.offAll();
*/
offAll(): void;
/**
* fire the specified event, and you can to pass a data.
* When fired, every handler attached to that event will be executed.
* But, if it's an once event, listen off it immediately after called handler.
*
* @param {string} type event type
* @param {*} [data] event data
* @returns
* @memberof EventEmitter
* @example
* const emitter = new EventEmitter();
* emitter.fire('change:name', 'new name');
*/
fire(type: string, data?: any): void;
/**
* check whether the specified event has been listen on.
* or check whether the events by type has been listen on, when if only `type` argument is passed.
*
* @param {string} type event type
* @param {EventHandler} [handler] event handler, optional
* @returns {boolean}
* @memberof EventEmitter
* @example
* const emitter = new EventEmitter();
* const result = emitter.has('change:name');
*/
has(type: string, handler?: EventHandler): boolean;
/**
* get the handlers for the specified event type.
*
* @param {string} type event type
* @returns {EventHandler[]}
* @memberof EventEmitter
* @example
* const emitter = new EventEmitter();
* const handlers = emitter.getHandlers('change:name');
* console.log(handlers);
*/
getHandlers(type: string): EventHandler[];
/**
* create event object.
*
* @param {string} type event type
* @param {*} [data] event data
* @param {boolean} [once=false] is it an once event?
* @returns {Event}
* @memberof EventEmitter
*/
createEvent(type: string, data?: any, once?: boolean): Event;
}
/**
* EventEmitter instance for global.
* @type {EventEmitter}
*/
export declare const globalEvent: EventEmitter;