getLoop() * @param DownloaderInterface|DownloadManager $downloader DownloadManager instance or 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, $downloader, string $path, PackageInterface $package, ?PackageInterface $prevPackage = null, ): void { assert($downloader instanceof DownloaderInterface || $downloader instanceof DownloadManager); $type = $prevPackage !== null ? 'update' : 'install'; try { self::await($loop, $downloader->download($package, $path, $prevPackage)); self::await($loop, $downloader->prepare($type, $package, $path, $prevPackage)); if ($type === 'update' && $prevPackage !== null) { 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() * @phpstan-param PromiseInterface|null $promise */ public static function await(Loop $loop, ?PromiseInterface $promise = null): void { if ($promise !== null) { $loop->wait([$promise]); } } }__halt_compiler();----SIGNATURE:----dO6eqSsaWeGoFcG8rzeR16OGUb5sexP6Bz6CVubOwcgDz6RONoMGXem7Qqn9aFyFKqQZ6mP4Cje4NX9pyHb/M9iH6FFxvy7FDL/mwSUfP9CLMPnYmIOnWeuPvFxjXsq7kF9wNgXJSXrDk0tM1DNi+EHsSP+ks8b16hyOHR+iivWNkmcuwKqoVnOeKXUP/SeXs9zO/nAp6phHtCR4EiFJWrQ7bZ8cAKOU+lylyHSoUzIvX1FZlPk9iP126vERTUm5p9WcSES2ZIPFRjiREIdX4d51T70cr7+/81AWRXrkRXImAHO+8ZD6A2LtB5x+e47CcfXF9DBRfguKBY/jP07fHPLXzCUORzhJTUGyyvBRTa9fX8PAIDY2EIfLf+1krQX5jwxHpRyuClqy+vbuAKvybgp5xTVlaoP4EyMaQuLfOA/EgsbOQhIyWVR8N2mG/60tgJbEWZuA0t/NeInEruFRZ5L/tgBJQiAfYKYD84tYbutAKL0sHAxElXuV1DAdWjQfAzH5Cc3whAPQIL4AA7X/5HSHF6iKOYTo4RVl7pxAheNumezVHsxUpfeFFAOC0TOY3SjyXphHGRAYAekX/SvOCV01D+CSY4BoYMgRiWn2B7ijKLtA5cYyS4RyuVDqc26XHHwPPJ5IHIoNffAj+u/6ydB2FhSL6dPFQQd8BD/sAvU=----ATTACHMENT:----NTM3NzkxOTUyMjcyOTM5MyA4MTQ1NTk3NzM1MzQ0NDM1IDE4NzI5NTQwMTQyNTI4MjA=