16. create an Event Emitter

medium  - accepted / - tried

There is Event Emitter in Node.js, Facebook once had its own implementation but now it is archived.

You are asked to create an Event Emitter Class

const emitter = new Emitter()

It should support event subscribing

const sub1  = emitter.subscribe('event1', callback1)
const sub2 = emitter.subscribe('event2', callback2)

// same callback could subscribe 
// on same event multiple times
const sub3 = emitter.subscribe('event1', callback1)

emit(eventName, ...args) is used to trigger the callbacks, with args relayed

emitter.emit('event1', 1, 2);
// callback1 will be called twice

Subscription returned by subscribe() has a release() method that could be used to unsubscribe

// now even if we emit 'event1' again, 
// callback1 is not called anymore

What is time & space complexity of your approach?