emitSync(eventName, ...args) {
    assertEventName(eventName, this[EVENT_NAMES]);

    const event = new Event(eventName);

    for (const listener of this.listeners(eventName)) {
      const returnValue = listener(...args, event);

      assert(
        `Attempted to emit a synchronous event "${eventName}" but an asynchronous listener was called.`,
        !(isObjectLike(returnValue) && typeof returnValue.then === 'function')
      );

      if (event.shouldStopPropagating) {
        return false;
      }
    }

    return true;
  }
Synchronously calls each of the `listeners` registered for the event named
`eventName`, in the order they were registered, passing the supplied
arguments to each.

Throws if a listener's return value is promise-like.

Returns`false` if a listener stopped propagation, `true` otherwise.

@param {String} eventName - The name of the event
@param {any} ...args - The arguments to pass to the listeners
@returns {Boolean}