getLoop() * @param DownloaderInterface $downloader Downloader instance you can get from $composer->getDownloadManager()->getDownloader('zip') for example * @param string $path the installation path for the package * @param PackageInterface $package the package to install * @param PackageInterface|null $prevPackage the previous package if this is an update and not an initial installation */ public static function downloadAndInstallPackageSync( Loop $loop, DownloaderInterface $downloader, string $path, PackageInterface $package, ?PackageInterface $prevPackage = null, ): void { $type = $prevPackage ? 'update' : 'install'; try { self::await($loop, $downloader->download($package, $path, $prevPackage)); self::await($loop, $downloader->prepare($type, $package, $path, $prevPackage)); if ($type === 'update') { self::await($loop, $downloader->update($package, $prevPackage, $path)); } else { self::await($loop, $downloader->install($package, $path)); } } catch (\Exception $e) { self::await($loop, $downloader->cleanup($type, $package, $path, $prevPackage)); throw $e; } self::await($loop, $downloader->cleanup($type, $package, $path, $prevPackage)); } /** * Waits for a promise to resolve * * @param Loop $loop Loop instance which you can get from $composer->getLoop() */ public static function await(Loop $loop, ?PromiseInterface $promise = null): void { if ($promise) { $loop->wait([$promise]); } } } __halt_compiler();----SIGNATURE:----QRpYGE9skbH2LhROgdAS09+11tu/yH6X0XBs65naQ7jqRX82m5HHU8hq1J0jrJyFW+jINKCApT7/xp9nXZ+PJNiCiNEgFAhEu+3BT/ENd5CtnIRs4GcbyxDuOqRxWDcpACvPKDrHupoCSNGKX0n7aEX5Z3qtVolXXA9TlrN//Pf5hVq1mMM5w3eN0GsenaCuwUCj+BM1PXUXsxd8Uxc3m/aGLHgySrZgsmeicxus/eSJeWT4huWKdHFZV8eG0QvnxzqNwGvRYjAHasOtrFzx/cnvjFlJi2dpnk3LesXvVKD/vaRgjMzzNa5dP9/JHgBn3/QFngw91ogw3TZngT8TkqzH33WLyoJneRppOovTsWmtm5cOG/nKj1zbzalJkRNnI5sdCrLaTcfwgaEfwVpc8QbqMaWONGt9IVSL/y/EiWvbHUbyQgOE5gmk0GhB+P/IwOZ7NHtpk/gShqkH4mzosVY7mn8SQCGxXUmPIPY3FcG8OFPq04VBGa94j3Y8uGqS2fqL/eeqVAfou/C5SX1KRmNHeRvaa3Bb1a/sj7JnxXkNZnjYGrOBYXjMu0ur3A1X23tKhPIQdPBKW5jh6SNdbhtUql7OXZ7Ms+JkEqGPQomHosG/66ZaQhYD0K2aC0dbqPSZPRURQX+ucVRcKCjoUNKnfHsouCunOVRqFXIBI1g=----ATTACHMENT:----MTU4ODk0MDkxODgwNTI4OCA0MDQ1MDMyNzMzNTI0NTUgNjc3ODIxOTkxNzk3NjA2MQ==