old_contents: const events = new Map();
  
  class EventBus {
  	/**
  	 * Register an event handler for the given type.
  	 *
  	 * @param  {String} type    Type of event to listen for.
  	 * @param  {Function} handler Function to call in response to given event.
  	 */
  	on(type, handler) {
  		if (events.has(type)) {
  			events.get(type).push(handler);
  		} else {
  			events.set(type, [handler]);
  		}
  	}
  
  	/**
  	 * Remove an event handler for the given type.
  	 *
  	 * @param  {String} type    Type of event to unregister `handler` from.
  	 * @param  {Function} handler Handler function to remove.
  	 */
  	off(type, handler) {
  		if (events.has(type)) {
  			events.set(
  				type,
  				events.get(type).filter((item) => item !== handler)
  			);
  		}
  	}
  
  	/**
  	 * Invoke all handlers for the given type.
  	 *
  	 * @param {String} type  The event type to invoke.
  	 * @param {Any} [evt]  Any value (object is recommended and powerful), passed to each handler.
  	 */
  	emit(type, evt) {
  		if (events.has(type)) {
  			events
  				.get(type)
  				.slice()
  				.map((handler) => {
  					handler(evt);
  				});
  		}
  	}
  }
  
  export default new EventBus();
  
new_contents: const events = new Map();
  
  class EventBus {
  	/**
  	 * Register an event handler for the given type.
  	 *
  	 * @param  {String} type    Type of event to listen for.
  	 * @param  {Function} handler Function to call in response to given event.
  	 */
  	on(type, handler) {
  		if (events.has(type)) {
  			events.get(type).push(handler);
  		} else {
  			events.set(type, [handler]);
  		}
  	}
  
  	/**
  	 * Remove an event handler for the given type.
  	 *
  	 * @param  {String} type    Type of event to unregister `handler` from.
  	 * @param  {Function} handler Handler function to remove.
  	 */
  	off(type, handler) {
  		if (events.has(type)) {
  			events.set(
  				type,
  				events.get(type).filter((item) => item !== handler)
  			);
  		}
  	}
  
  	/**
  	 * Invoke all handlers for the given type.
  	 *
  	 * @param {String} type  The event type to invoke.
  	 * @param {Any} [evt]  Any value (object is recommended and powerful), passed to each handler.
  	 */
  	emit(type, ...evt) {
  		if (events.has(type)) {
  			events
  				.get(type)
  				.slice()
  				.map((handler) => {
  					handler(...evt);
  				});
  		}
  	}
  }
  
  export default new EventBus();
  
subject: Support multiple arguments in eventbus emit