/**
  * @param CommitId $commitId
  *
  * @return void
  */
 public function commit(CommitId $commitId)
 {
     $pendingEventEnvelopes = $this->pendingEventEnvelopes;
     if ($this->eventEnvelopeDecorator) {
         $pendingEventEnvelopes = array_map(function ($eventEnvelope) {
             return $this->eventEnvelopeDecorator->decorateEventEnvelope($eventEnvelope);
         }, $pendingEventEnvelopes);
     }
     $this->persistence->commit($commitId, $this->aggregateType, $this->aggregateId, count($this->committedEventEnvelopes) - 1, $pendingEventEnvelopes);
     $this->committedEventEnvelopes = array_merge($this->committedEventEnvelopes, $pendingEventEnvelopes);
     $this->pendingEventEnvelopes = [];
 }
 protected function createCommit(Persistence $persistence, $commitId, $aggregateClassName, $aggregateId, $expectedAggregateVersion, array $eventEnvelopes)
 {
     $persistence->commit(CommitId::fromString($commitId), $this->getContractResolver()->resolveFromClassName($aggregateClassName), $aggregateId, $expectedAggregateVersion, $eventEnvelopes);
 }