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:----veQldHtTEbfH4AfgOnXkNIcupxQCpUrerKkacWao+ia7QnTiurvI9ohpHSmD1UZ96/iIeM0w3rG52x7nXAl8oVltk2LEZZhKkXCt7mTXKW9PE20sqP/VCkBEtouIbjZVREM0pu784B7kja2HDfLTGqdUsY4qn42OOIMVgW41PcgYYLzQiUHQ9EWa/iARh+DVYji1+mFj0z3blJWT/vnjs1EEbLe5yVI0LfyVerA2fICQIboYTqeCiti0bOsn30AqAgl3pmHCFhO4RbeJ2pAeOfQkwxa1tg2aUjy0A5EhyMB699c6M8SuyDdaVnuReXTw4QseBgR7DGEZpelAu5rh2AhXLb5ipVhCnq+t6a0epLIj8N9qW9ip7E8Nyd0X0u7a7hjBMl+ZUiVG+pqh07ZVSfGqYl0SIUFSkenLymKuAEK1XsKXOIHQ82+wjvwHohCGceMmy+m4FQbRHaVLSAHikOOATkoqKsk6qh22PoxNov/hIvZTQrFSQJfdOAXslKABaQCHLLGu7ZeMNeUaxZ6flDiArbIaoDtrcNwKtqCx5wk/iryvv5I8VZeOEESV3ow3kZerbUaLbCSiEzKlpKNQl5qsK0enwO80uvAxwHx91YL7sf0E167jERooPSi/ReLCS3k4f0V/23fkcqZjaXGA0gnw8XjZZOfz2MXVnJwZZOA=----ATTACHMENT:----MzYxNjk1NjYwNTM5ODM5MiA3MDUyMTY2MzQ3NjI2MTU5IDgzMzIzNTgwNDM0OTQxNjg=