44
55namespace RoadRunner \VersionChecker \Version ;
66
7- use Composer \InstalledVersions ;
87use Composer \Semver \Comparator as SemverComparator ;
98use Composer \Semver \VersionParser ;
9+ use RoadRunner \VersionChecker \Composer \Package ;
10+ use RoadRunner \VersionChecker \Composer \PackageInterface ;
1011
1112final class Required implements RequiredInterface
1213{
1314 private const ROADRUNNER_PACKAGE = 'spiral/roadrunner ' ;
1415
16+ public function __construct (
17+ private readonly PackageInterface $ package = new Package ()
18+ ) {
19+ }
20+
1521 /**
1622 * @return non-empty-string|null
1723 */
@@ -20,23 +26,10 @@ public function getRequiredVersion(): ?string
2026 $ parser = new VersionParser ();
2127
2228 $ version = null ;
23- foreach (InstalledVersions::getInstalledPackages () as $ package ) {
24- $ path = InstalledVersions::getInstallPath ($ package );
25- if ($ path !== null && \file_exists ($ path . '/composer.json ' )) {
26- /** @var array $composerJson */
27- $ composerJson = \json_decode (\file_get_contents ($ path . '/composer.json ' ), true );
28-
29- if (isset ($ composerJson ['require ' ]) && \is_array ($ composerJson ['require ' ])) {
30- /** @var non-empty-string $packageVersion */
31- foreach ($ composerJson ['require ' ] as $ package => $ packageVersion ) {
32- if ($ package === self ::ROADRUNNER_PACKAGE ) {
33- /** @var non-empty-string $packageVersion */
34- $ packageVersion = $ parser ->normalize ($ packageVersion );
35- $ version = $ this ->getMinimumVersion ($ packageVersion , $ version );
36- }
37- }
38- }
39- }
29+ foreach ($ this ->package ->getRequiredVersions (self ::ROADRUNNER_PACKAGE ) as $ packageVersion ) {
30+ /** @var non-empty-string $packageVersion */
31+ $ packageVersion = $ parser ->normalize ($ packageVersion );
32+ $ version = $ this ->getMinimumVersion ($ packageVersion , $ version );
4033 }
4134
4235 return $ version ;
0 commit comments