/**
  * Run Composer dependency check for uninstall
  *
  * @param array $packages
  * @return array
  * @throws \RuntimeException
  */
 public function runUninstallReadinessCheck(array $packages)
 {
     try {
         $packagesAndTypes = $this->composerInfo->getRootRequiredPackageTypesByName();
         $dependencies = $this->packageDependencyChecker->checkDependencies($packages, true);
         $messages = [];
         $themes = [];
         foreach ($packages as $package) {
             if (!isset($packagesAndTypes[$package])) {
                 throw new \RuntimeException('Package ' . $package . ' not found in the system.');
             }
             switch ($packagesAndTypes[$package]) {
                 case ComposerInformation::METAPACKAGE_PACKAGE_TYPE:
                     unset($dependencies[$package]);
                     break;
                 case ComposerInformation::THEME_PACKAGE_TYPE:
                     $themes[] = $package;
                     break;
             }
             if (!empty($dependencies[$package])) {
                 $messages[] = $package . " has the following dependent package(s): " . implode(', ', $dependencies[$package]);
             }
         }
         if (!empty($themes)) {
             $messages = array_merge($messages, $this->themeDependencyChecker->checkChildThemeByPackagesName($themes));
         }
         if (!empty($messages)) {
             throw new \RuntimeException(implode(PHP_EOL, $messages));
         }
         return ['success' => true];
     } catch (\RuntimeException $e) {
         $message = str_replace(PHP_EOL, '<br/>', htmlspecialchars($e->getMessage()));
         return ['success' => false, 'error' => $message];
     }
 }
 /**
  * Validates user input
  *
  * @param string $package
  *
  * @return bool
  */
 private function validate($package)
 {
     $installedPackages = $this->composerInfo->getRootRequiredPackageTypesByName();
     if (isset($installedPackages[$package]) && $installedPackages[$package] === 'magento2-language') {
         return true;
     }
     return false;
 }