src/engine/lib/services/EventsService.ts (21 lines of code) (raw):
export class MRIEventsService {
private events: { [key: string]: Function[] } = {};
on(eventName: string, fn: Function): Function {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(fn);
return () => this.off(eventName, fn);
}
off(eventName: string, fn: Function): void {
if (!this.events[eventName]) return;
this.events[eventName] = this.events[eventName].filter((subscriber) => subscriber !== fn);
}
emit(eventName: string, data = {}): void {
if (!this.events[eventName]) return;
this.events[eventName].forEach((fn) => fn(data));
}
}
// Create the singleton instance and freeze it
const mriEventsService = new MRIEventsService();
Object.freeze(mriEventsService);
// Export the MRIEventsService singleton instance
export default mriEventsService;