code: public function update(PackageInterface $initial, PackageInterface $target, $targetDir)
      {
          $downloader = $this->getDownloaderForInstalledPackage($initial);
          if (!$downloader) {
              return;
          }
  
          $installationSource = $initial->getInstallationSource();
  
          if ('dist' === $installationSource) {
              $initialType = $initial->getDistType();
              $targetType = $target->getDistType();
          } else {
              $initialType = $initial->getSourceType();
              $targetType = $target->getSourceType();
          }
  
          // upgrading from a dist stable package to a dev package, force source reinstall
          if ($target->isDev() && 'dist' === $installationSource) {
              $downloader->remove($initial, $targetDir);
              $this->download($target, $targetDir);
  
              return;
          }
  
          if ($initialType === $targetType) {
              $target->setInstallationSource($installationSource);
              try {
                  $downloader->update($initial, $target, $targetDir);
  
                  return;
              } catch (\RuntimeException $e) {
                  if (!$this->io->isInteractive()) {
                      throw $e;
                  }
                  $this->io->writeError('<error>    Update failed ('.$e->getMessage().')</error>');
                  if (!$this->io->askConfirmation('    Would you like to try reinstalling the package instead [<comment>yes</comment>]? ', true)) {
                      throw $e;
                  }
              }
          }
  
          $downloader->remove($initial, $targetDir);
          $this->download($target, $targetDir, 'source' === $installationSource);
      }
docs: Updates package from initial to target version.
  
  @param PackageInterface $initial   initial package version
  @param PackageInterface $target    target package version
  @param string           $targetDir target dir
  
  @throws \InvalidArgumentException if initial package is not installed