docs: function Transition(router, intent, state, error) {
      var transition = this;
      this.state = state || router.state;
      this.intent = intent;
      this.router = router;
      this.data = this.intent && this.intent.data || {};
      this.resolvedModels = {};
      this.queryParams = {};
  
      if (error) {
        this.promise = _rsvpPromise.default.reject(error);
        this.error = error;
        return;
      }
  
      if (state) {
        this.params = state.params;
        this.queryParams = state.queryParams;
        this.handlerInfos = state.handlerInfos;
  
        var len = state.handlerInfos.length;
        if (len) {
          this.targetName = state.handlerInfos[len - 1].name;
        }
  
        for (var i = 0; i < len; ++i) {
          var handlerInfo = state.handlerInfos[i];
  
          // TODO: this all seems hacky
          if (!handlerInfo.isResolved) {
            break;
          }
          this.pivotHandler = handlerInfo.handler;
        }
  
        this.sequence = Transition.currentSequence++;
        this.promise = state.resolve(checkForAbort, this)['catch'](function (result) {
          if (result.wasAborted || transition.isAborted) {
            return _rsvpPromise.default.reject(logAbort(transition));
          } else {
            transition.trigger('error', result.error, transition, result.handlerWithError);
            transition.abort();
            return _rsvpPromise.default.reject(result.error);
          }
        }, _routerUtils.promiseLabel('Handle Abort'));
      } else {
        this.promise = _rsvpPromise.default.resolve(this.state);
        this.params = {};
      }
  
      function checkForAbort() {
        if (transition.isAborted) {
          return _rsvpPromise.default.reject(undefined, _routerUtils.promiseLabel("Transition aborted - reject"));
        }
      }
    }