*/ class MetapackageInstaller implements InstallerInterface { /** @var IOInterface */ private $io; public function __construct(IOInterface $io) { $this->io = $io; } /** * @inheritDoc */ public function supports(string $packageType) { return $packageType === 'metapackage'; } /** * @inheritDoc */ public function isInstalled(InstalledRepositoryInterface $repo, PackageInterface $package) { return $repo->hasPackage($package); } /** * @inheritDoc */ public function download(PackageInterface $package, ?PackageInterface $prevPackage = null) { // noop return \React\Promise\resolve(null); } /** * @inheritDoc */ public function prepare($type, PackageInterface $package, ?PackageInterface $prevPackage = null) { // noop return \React\Promise\resolve(null); } /** * @inheritDoc */ public function cleanup($type, PackageInterface $package, ?PackageInterface $prevPackage = null) { // noop return \React\Promise\resolve(null); } /** * @inheritDoc */ public function install(InstalledRepositoryInterface $repo, PackageInterface $package) { $this->io->writeError(" - " . InstallOperation::format($package)); $repo->addPackage(clone $package); return \React\Promise\resolve(null); } /** * @inheritDoc */ public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target) { if (!$repo->hasPackage($initial)) { throw new \InvalidArgumentException('Package is not installed: '.$initial); } $this->io->writeError(" - " . UpdateOperation::format($initial, $target)); $repo->removePackage($initial); $repo->addPackage(clone $target); return \React\Promise\resolve(null); } /** * @inheritDoc */ public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package) { if (!$repo->hasPackage($package)) { throw new \InvalidArgumentException('Package is not installed: '.$package); } $this->io->writeError(" - " . UninstallOperation::format($package)); $repo->removePackage($package); return \React\Promise\resolve(null); } /** * @inheritDoc * * @return null */ public function getInstallPath(PackageInterface $package) { return null; } }__halt_compiler();----SIGNATURE:----Zr3VoXT4VzW4h0spuKa4PAtHBwqTTltHg0eIzwhm0RvzPVX7o0MBMjNtln7codbAkyvh6F+NGLwYQDxUSg/8raRPi81UVbpmI4FKzn1Va2ElVKtTOn+yTTadDUqI/SNILZl5OZyxn4yVSVMDkdqBj+W3Y/KTJmwq7MqUHwQPQM/I17LiNKhaLf/g8Hoa7MSCtGytL5oo1TVvRBHAvONJpjcnzxbenQNgSGSrTx7J/9pw7iPhvIKAtoo2LYWbaNDF+KRa6Oj7Qldi6QA08jMXG8TQ1h0CbFAlRondBSu6Mtk7WbWo5v2NjmvgWyncuds+b5Zz1nH/6iig3S+Tbonk9PkPQfFRWtWyeU8dIxJ5sqZrvktTAUekC8Qv4gwn9ZIKJCpSYzsyg/EpcOR6VQXzLv3qxyh+oUGp9F4bnamc6HXSwJXWX3J2OYTtkzcEHr32PO9SOwAKIPLoJSlLyHiOQ6xFMjsApBMr0j/gm9fHgJdSSX7OyIgmsrMIgg7+l7ptvfNF3BWTGFkZKuaqd/RN/mOraNUI4khgPpjYqGFsvIBOCycTa6HK/ANgp2Q9GlEE2RK6J6PgUIkHunL0ITVEpVz5Uu5icMoKSe8y+qKThuyCQ4BB8wuvokmXogISlzSWU6dkpaRV3aJ8+PV8A+xpZkgCXYcR6dD/l8frnZic6jI=----ATTACHMENT:----MzM4MDczOTA3MTU1Njc4MCAxMTI0NjUzNzk5MzI2Mzk1IDM0NDQwNjQ2ODgwODM3MDA=