monex
Version:
Execute one or multiple scripts, interactively or in daemon mode, and restart them whenever they crash or a watched file changes.
55 lines (27 loc) • 836 B
text/typescript
/* IMPORT */
import type {Callback, Disposer} from '~/types';
/* MAIN */
class Events<Event extends string> {
/* VARIABLES */
private listeners: Partial<Record<Event, Callback[]>> = {};
/* API */
emit = ( event: Event ): void => {
const listeners = this.get ( event );
for ( let i = 0, l = listeners.length; i < l; i++ ) {
listeners[i]();
}
}
get = ( event: Event ): Callback[] => {
return this.listeners[event] || ( this.listeners[event] = [] );
}
on = ( event: Event, listener: Callback ): Disposer => {
const listeners = this.get ( event );
if ( listeners.includes ( listener ) ) return () => {};
listeners.push ( listener );
return () => {
listeners.splice ( listeners.indexOf ( listener ), 1 );
};
}
}
/* EXPORT */
export default Events;