| @@ -20,16 +20,14 @@ | ||
| 20 | 20 | * |
| 21 | 21 | * See also https://getcomposer.org/doc/07-runtime.md#installed-versions |
| 22 | 22 | * |
| 23 | 23 | * To require its presence, you can require `composer-runtime-api ^2.0` |
| 24 | - * | |
| 25 | - * @final | |
| 26 | 24 | */ |
| 27 | 25 | class InstalledVersions |
| 28 | 26 | { |
| 29 | 27 | /** |
| 30 | 28 | * @var mixed[]|null |
| 31 | - * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null | |
| 29 | + * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null | |
| 32 | 30 | */ |
| 33 | 31 | private static $installed; |
| 34 | 32 | |
| 35 | 33 | /** |
| @@ -38,9 +36,9 @@ | ||
| 38 | 36 | private static $canGetVendors; |
| 39 | 37 | |
| 40 | 38 | /** |
| 41 | 39 | * @var array[] |
| 42 | - * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> | |
| 40 | + * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |
| 43 | 41 | */ |
| 44 | 42 | private static $installedByVendor = array(); |
| 45 | 43 | |
| 46 | 44 | /** |
| @@ -97,9 +95,9 @@ | ||
| 97 | 95 | public static function isInstalled($packageName, $includeDevRequirements = true) |
| 98 | 96 | { |
| 99 | 97 | foreach (self::getInstalled() as $installed) { |
| 100 | 98 | if (isset($installed['versions'][$packageName])) { |
| 101 | - return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; | |
| 99 | + return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); | |
| 102 | 100 | } |
| 103 | 101 | } |
| 104 | 102 | |
| 105 | 103 | return false; |
| @@ -118,9 +116,9 @@ | ||
| 118 | 116 | * @return bool |
| 119 | 117 | */ |
| 120 | 118 | public static function satisfies(VersionParser $parser, $packageName, $constraint) |
| 121 | 119 | { |
| 122 | - $constraint = $parser->parseConstraints((string) $constraint); | |
| 120 | + $constraint = $parser->parseConstraints($constraint); | |
| 123 | 121 | $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); |
| 124 | 122 | |
| 125 | 123 | return $provided->matches($constraint); |
| 126 | 124 | } |
| @@ -242,9 +240,9 @@ | ||
| 242 | 240 | } |
| 243 | 241 | |
| 244 | 242 | /** |
| 245 | 243 | * @return array |
| 246 | - * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} | |
| 244 | + * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} | |
| 247 | 245 | */ |
| 248 | 246 | public static function getRootPackage() |
| 249 | 247 | { |
| 250 | 248 | $installed = self::getInstalled(); |
| @@ -256,9 +254,9 @@ | ||
| 256 | 254 | * Returns the raw installed.php data for custom implementations |
| 257 | 255 | * |
| 258 | 256 | * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. |
| 259 | 257 | * @return array[] |
| 260 | - * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} | |
| 258 | + * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} | |
| 261 | 259 | */ |
| 262 | 260 | public static function getRawData() |
| 263 | 261 | { |
| 264 | 262 | @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); |
| @@ -279,9 +277,9 @@ | ||
| 279 | 277 | /** |
| 280 | 278 | * Returns the raw data of all installed.php which are currently loaded for custom implementations |
| 281 | 279 | * |
| 282 | 280 | * @return array[] |
| 283 | - * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> | |
| 281 | + * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |
| 284 | 282 | */ |
| 285 | 283 | public static function getAllRawData() |
| 286 | 284 | { |
| 287 | 285 | return self::getInstalled(); |
| @@ -302,9 +300,9 @@ | ||
| 302 | 300 | * |
| 303 | 301 | * @param array[] $data A vendor/composer/installed.php data set |
| 304 | 302 | * @return void |
| 305 | 303 | * |
| 306 | - * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data | |
| 304 | + * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data | |
| 307 | 305 | */ |
| 308 | 306 | public static function reload($data) |
| 309 | 307 | { |
| 310 | 308 | self::$installed = $data; |
| @@ -312,9 +310,9 @@ | ||
| 312 | 310 | } |
| 313 | 311 | |
| 314 | 312 | /** |
| 315 | 313 | * @return array[] |
| 316 | - * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> | |
| 314 | + * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> | |
| 317 | 315 | */ |
| 318 | 316 | private static function getInstalled() |
| 319 | 317 | { |
| 320 | 318 | if (null === self::$canGetVendors) { |
| @@ -327,11 +325,9 @@ | ||
| 327 | 325 | foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { |
| 328 | 326 | if (isset(self::$installedByVendor[$vendorDir])) { |
| 329 | 327 | $installed[] = self::$installedByVendor[$vendorDir]; |
| 330 | 328 | } elseif (is_file($vendorDir.'/composer/installed.php')) { |
| 331 | - /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */ | |
| 332 | - $required = require $vendorDir.'/composer/installed.php'; | |
| 333 | - $installed[] = self::$installedByVendor[$vendorDir] = $required; | |
| 329 | + $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; | |
| 334 | 330 | if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { |
| 335 | 331 | self::$installed = $installed[count($installed) - 1]; |
| 336 | 332 | } |
| 337 | 333 | } |
| @@ -341,19 +337,14 @@ | ||
| 341 | 337 | if (null === self::$installed) { |
| 342 | 338 | // only require the installed.php file if this file is loaded from its dumped location, |
| 343 | 339 | // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 |
| 344 | 340 | if (substr(__DIR__, -8, 1) !== 'C') { |
| 345 | - /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */ | |
| 346 | - $required = require __DIR__ . '/installed.php'; | |
| 347 | - self::$installed = $required; | |
| 341 | + self::$installed = require __DIR__ . '/installed.php'; | |
| 348 | 342 | } else { |
| 349 | 343 | self::$installed = array(); |
| 350 | 344 | } |
| 351 | 345 | } |
| 352 | - | |
| 353 | - if (self::$installed !== array()) { | |
| 354 | - $installed[] = self::$installed; | |
| 355 | - } | |
| 346 | + $installed[] = self::$installed; | |
| 356 | 347 | |
| 357 | 348 | return $installed; |
| 358 | 349 | } |
| 359 | 350 | } |