57 lines
1.2 KiB
TypeScript
57 lines
1.2 KiB
TypeScript
import { ICommand } from '../definitions/ICommand';
|
|
import log from './log';
|
|
|
|
type TEventEmitterEmmitArgs =
|
|
| { rid: string }
|
|
| { message: string }
|
|
| { method: string }
|
|
| { invalid: boolean }
|
|
| { force: boolean }
|
|
| { hasBiometry: boolean }
|
|
| { event: string | ICommand }
|
|
| { cancel: () => void }
|
|
| { submit: (param: string) => void };
|
|
|
|
class EventEmitter {
|
|
private events: { [key: string]: any };
|
|
|
|
constructor() {
|
|
this.events = {};
|
|
}
|
|
|
|
addEventListener(event: string, listener: Function) {
|
|
if (typeof this.events[event] !== 'object') {
|
|
this.events[event] = [];
|
|
}
|
|
this.events[event].push(listener);
|
|
return listener;
|
|
}
|
|
|
|
removeListener(event: string, listener: Function) {
|
|
if (typeof this.events[event] === 'object') {
|
|
const idx = this.events[event].indexOf(listener);
|
|
if (idx > -1) {
|
|
this.events[event].splice(idx, 1);
|
|
}
|
|
if (this.events[event].length === 0) {
|
|
delete this.events[event];
|
|
}
|
|
}
|
|
}
|
|
|
|
emit(event: string, ...args: TEventEmitterEmmitArgs[]) {
|
|
if (typeof this.events[event] === 'object') {
|
|
this.events[event].forEach((listener: Function) => {
|
|
try {
|
|
listener.apply(this, args);
|
|
} catch (e) {
|
|
log(e);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
const events = new EventEmitter();
|
|
export default events;
|