text: 
  export default class MessageBag {
      constructor() {
          this.bag = {}
      }
  
      add(name, thing) {
          if (! this.bag[name]) {
              this.bag[name] = []
          }
  
          this.bag[name].push(thing)
      }
  
      push(name, thing) {
          this.add(name, thing)
      }
  
      first(name) {
          if (! this.bag[name]) return null
  
          return this.bag[name][0]
      }
  
      last(name) {
          return this.bag[name].slice(-1)[0]
      }
  
      get(name) {
          return this.bag[name]
      }
  
      shift(name) {
          return this.bag[name].shift()
      }
  
      call(name, ...params) {
          (this.listeners[name] || []).forEach(callback => {
              callback(...params)
          })
      }
  
      has(name) {
          return Object.keys(this.listeners).includes(name)
      }
  }
  