composer = $composer; $this->io = $io; } /** * Run the uninstall operation. */ public function __invoke() { $this->io->write(sprintf('Removing %s...', self::PLUGIN_NAME)); $this->removePluginInstall(); $this->removePluginFromComposer(); $this->io->write(' Complete!'); } /** * Remove the plugin installation itself. */ private function removePluginInstall() { $installer = $this->composer->getInstallationManager(); $repository = $this->composer->getRepositoryManager()->getLocalRepository(); $package = $repository->findPackage(self::PLUGIN_NAME, '*'); if (! $package) { $this->io->write(' Package not installed; nothing to do.'); return; } $installer->uninstall($repository, new UninstallOperation($package)); $this->io->write(sprintf(' Removed plugin %s.', self::PLUGIN_NAME)); $this->updateLockFile($repository); } /** * Remove the plugin from the composer.json */ private function removePluginFromComposer() { $this->io->write(' Removing from composer.json'); $composerJson = $this->getComposerJson(); $json = $composerJson->read(); unset($json['require'][self::PLUGIN_NAME]); $composerJson->write($json); } /** * Update the lock file */ private function updateLockFile(RepositoryInterface $repository) { $locker = $this->composer->getLocker(); $allPackages = Collection::create($repository->getPackages()) ->reject(function ($package) { return self::PLUGIN_NAME === $package->getName(); }); $aliases = $allPackages->filter(function ($package) { return $package instanceof AliasPackage; }); $devPackages = $allPackages->filter(function ($package) { return $package->isDev(); }); $packages = $allPackages->filter(function ($package) { return ! $package instanceof AliasPackage && ! $package->isDev(); }); $platformReqs = $locker->getPlatformRequirements(false); $platformDevReqs = array_diff($locker->getPlatformRequirements(true), $platformReqs); $result = $locker->setLockData( $packages->toArray(), $devPackages->toArray(), $platformReqs, $platformDevReqs, $aliases->toArray(), $locker->getMinimumStability(), $locker->getStabilityFlags(), $locker->getPreferStable(), $locker->getPreferLowest(), $locker->getPlatformOverrides() ); if (! $result) { $this->io->write('Unable to update lock file after removal of laminas-skeleton-installer'); } } }