*/ 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 */ public function getInstallPath(PackageInterface $package) { return ''; } } __halt_compiler();----SIGNATURE:----CIXAwe310r/YRq5ylKwpHIYmtAWU2Bl+tXalru8cjGNdRkTMUiwDbzEeYxt15qR64osrXloYPmbmoQ0m5oEJ2ymTFbn+PaezlicaCzEhl0ZHpYZq+i+ubdFLs3xqzm8arlwFTKz6ogrFf85nk6c9AubWa7W/3vEh1ucvt/FoF6UWNmN9pUiQ8JWgXM9fwYysJSdJ8gJR2rro4PTZJY3RG5SsVPUydd9sMxbwg4t3/a6tz3DexkPLxx3K3r1ZhxAvfmyKXJiZK4andys+xJ6iF+rujtyzHRKBVlFFCPliYz8Y0s21qCJqk3S88MQRhdFLoHksukcD1ICJq4z8tEUHmW1t2m2jtxOEvXh3kR8TDh33FqpHvIczQyNsJy8+RYHJ29yOlseA+jB/fdsy6MrWYMK5xB8YOjz7GMX7RDnwlpHeX4DmK5gyd9+trzkHvS9rbhEkmWVHAnaTRpW/7x4L+/N52aicYgNRp9aMjHryxsaJDipuIW+H26ZvJELUWQp2JkSXuAd7T5SDism/fzv0vWf7ELigDrhP8/8U1POR4dYRyMwYXN1DONzM+1PGfO3RZv+q8L7QX2sPnu6Ev+Seq11sVlcughQR3qoSiVNGCQJm0t3XFCwynBzpgaf3UBx83Kmf/5DQxJRM5VCY1cjv1KhZP8UpYnv2wKtrSh4NvSM=----ATTACHMENT:----Njk4NDA4NzI0OTU1NTIgMzUzMDQ1MTM0NDc5OTc4MyA3NDQ5MzE1MjU1MTMzMDYz