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:----fph97KLCvo4z0biPD3uqQqtN5y1/14/Kv1vNUJT1rZdE3LFEIci1zI94PcfXpuTClmLSvz3QQqGxsGYfFDQwzR9ypcueROQESb4clGxhIzBQTjUTLnWKql3e0DlbNKtP5IEhawcOcqnyUDssQKAO6uWdI/SglcupVYsti3sNgmwKFU64AxVI2TxEQ/tetsVUgHnAiXslRsdrLg5feIqRbRz6OkeCzV9DrfLRSpjfzgdAUtAmaUqjunsGBupIBXVgc+yw49ou+kndZSDQ72M1QGgf7nCeyWF8MinyCCMDv2J+VHt2GoVSDs3sMm4mSdcjugqH0i/QcR08GfCkO2T9bkolGzce8SDt7xWcQTBoItQucN9Z2S7wt2UKcr40H3yOLnHST86lHYtCy0U1yB2CLh0ioDP4D7qyPuM8R0+8Z+rySRFS3yMzarOSC8+K1tX6o1na3/RMGBM+z/59eTqYlJEaGxx7YUHb3LIZ90CnKKlNDY1FJkJ/Z49jv2DLSuBbWinKpP76sBILKB317YqJabfGygDJ3864Ob7ZIEEpMDEBfw9BxV0I8Qd+YzoKJT0H5GMLNIYCxKmWKbA4BwwKoD7fuOewrgbvwVjcK4OVPRChi7ePc3RV2UwScw7csqFcIQdnWNRiqwIj3caQ8MgupNQGo33XrNBakWZkIcM5HhE=----ATTACHMENT:----NDkwNjU0MDkzODczMTg0MiA5NTAwNzEzMDc1NjYwODQwIDQ5NjIwMjU0MTE5Mzc0NzA=