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:----cZ/dRy5lqOVa7zrwxd+pnH3cUVjewo4/VqzvmAtfKzodseOYUXwyILq+AFK6r2fst0oT72mSgugNTzbwiVeQ3RVwPtI99DAmC2G23xrKhzbZUGCqSooMUnQFBWZGtvedf0Mi1eZxsb/VLQ3eMjn05bW6OAuz0YNauwSLw5jbwCVBWw3OoIkuyTUhILU2UpnzfaVV8URA1uNWzo6bnMAdG5S9DmaM3hAShOGnFWxxy+Bc3mI7xA10u8kLvdwT7c9CvGfSuYakRqB6EpZ3awcTnmMOiyrwzw5+FDPeT7rMM/WaN2CNOl7HdH9dCY7X5eg8ziePxVyGplAa3mp9cI8eeXH4/pdrGPJi9vgoSAueP+vFQwXNmK4ZmCvZxNk5RXl0gmT4QvHXimrilVN4MPc1tCvC95mNLGp1TAljrtBPgBAfN1Hw8IczVpndEYI+T1yJG4si3zoK58SifKnDmciMYMPyIwtiZmreadeC0PxlggOwCfx3gvwnwFAIq7/YQ66WPNRpOJg1wgAvNN9/hC53EG1Izx0MLuyga1ERyNI5hFem9Z+x8ggzAfaJTVPyquWccIVrFRlNpMEwQIj/uYSGqacu8hxof3PK07iGvNddOAx6w5ft9T9VZEX/T+WAkenmX0TfjPZAdiTPW1VTWq/0Gz6v1YOeFIWEfKd/CaSapMA=----ATTACHMENT:----OTI5MjQ2MzQ1OTE3NTg0NyA5MjIxMTEzMDM1NDM4Njg5IDg1ODk3MTg3MzI0NDAzNDM=