InstalledVersions.php (13858B)
1 <?php 2 3 4 5 6 7 8 9 10 11 12 13 namespace Composer; 14 15 use Composer\Autoload\ClassLoader; 16 use Composer\Semver\VersionParser; 17 18 19 20 21 22 23 class InstalledVersions 24 { 25 private static $installed = array ( 26 'root' => 27 array ( 28 'pretty_version' => 'dev-main', 29 'version' => 'dev-main', 30 'aliases' => 31 array ( 32 ), 33 'reference' => 'ac2cfec95277e7980dfcf8dfde5cd858f1023e03', 34 'name' => 'extendify/extendify-sdk', 35 ), 36 'versions' => 37 array ( 38 'dealerdirect/phpcodesniffer-composer-installer' => 39 array ( 40 'pretty_version' => 'v0.7.1', 41 'version' => '0.7.1.0', 42 'aliases' => 43 array ( 44 ), 45 'reference' => 'fe390591e0241955f22eb9ba327d137e501c771c', 46 ), 47 'doctrine/instantiator' => 48 array ( 49 'pretty_version' => '1.4.0', 50 'version' => '1.4.0.0', 51 'aliases' => 52 array ( 53 ), 54 'reference' => 'd56bf6102915de5702778fe20f2de3b2fe570b5b', 55 ), 56 'extendify/extendify-sdk' => 57 array ( 58 'pretty_version' => 'dev-main', 59 'version' => 'dev-main', 60 'aliases' => 61 array ( 62 ), 63 'reference' => 'ac2cfec95277e7980dfcf8dfde5cd858f1023e03', 64 ), 65 'johnpbloch/wordpress-core' => 66 array ( 67 'pretty_version' => '5.7.0', 68 'version' => '5.7.0.0', 69 'aliases' => 70 array ( 71 ), 72 'reference' => '8b057056692ca196aaa7a7ddd915f29426922c6d', 73 ), 74 'myclabs/deep-copy' => 75 array ( 76 'pretty_version' => '1.10.2', 77 'version' => '1.10.2.0', 78 'aliases' => 79 array ( 80 ), 81 'reference' => '776f831124e9c62e1a2c601ecc52e776d8bb7220', 82 'replaced' => 83 array ( 84 0 => '1.10.2', 85 ), 86 ), 87 'nikic/php-parser' => 88 array ( 89 'pretty_version' => 'v4.10.4', 90 'version' => '4.10.4.0', 91 'aliases' => 92 array ( 93 ), 94 'reference' => 'c6d052fc58cb876152f89f532b95a8d7907e7f0e', 95 ), 96 'phar-io/manifest' => 97 array ( 98 'pretty_version' => '2.0.1', 99 'version' => '2.0.1.0', 100 'aliases' => 101 array ( 102 ), 103 'reference' => '85265efd3af7ba3ca4b2a2c34dbfc5788dd29133', 104 ), 105 'phar-io/version' => 106 array ( 107 'pretty_version' => '3.1.0', 108 'version' => '3.1.0.0', 109 'aliases' => 110 array ( 111 ), 112 'reference' => 'bae7c545bef187884426f042434e561ab1ddb182', 113 ), 114 'phpcompatibility/php-compatibility' => 115 array ( 116 'pretty_version' => '9.3.5', 117 'version' => '9.3.5.0', 118 'aliases' => 119 array ( 120 ), 121 'reference' => '9fb324479acf6f39452e0655d2429cc0d3914243', 122 ), 123 'phpcompatibility/phpcompatibility-paragonie' => 124 array ( 125 'pretty_version' => '1.3.1', 126 'version' => '1.3.1.0', 127 'aliases' => 128 array ( 129 ), 130 'reference' => 'ddabec839cc003651f2ce695c938686d1086cf43', 131 ), 132 'phpcompatibility/phpcompatibility-wp' => 133 array ( 134 'pretty_version' => '2.1.1', 135 'version' => '2.1.1.0', 136 'aliases' => 137 array ( 138 ), 139 'reference' => 'b7dc0cd7a8f767ccac5e7637550ea1c50a67b09e', 140 ), 141 'phpdocumentor/reflection-common' => 142 array ( 143 'pretty_version' => '2.2.0', 144 'version' => '2.2.0.0', 145 'aliases' => 146 array ( 147 ), 148 'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b', 149 ), 150 'phpdocumentor/reflection-docblock' => 151 array ( 152 'pretty_version' => '5.2.2', 153 'version' => '5.2.2.0', 154 'aliases' => 155 array ( 156 ), 157 'reference' => '069a785b2141f5bcf49f3e353548dc1cce6df556', 158 ), 159 'phpdocumentor/type-resolver' => 160 array ( 161 'pretty_version' => '1.4.0', 162 'version' => '1.4.0.0', 163 'aliases' => 164 array ( 165 ), 166 'reference' => '6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0', 167 ), 168 'phpspec/prophecy' => 169 array ( 170 'pretty_version' => '1.13.0', 171 'version' => '1.13.0.0', 172 'aliases' => 173 array ( 174 ), 175 'reference' => 'be1996ed8adc35c3fd795488a653f4b518be70ea', 176 ), 177 'phpunit/php-code-coverage' => 178 array ( 179 'pretty_version' => '9.2.6', 180 'version' => '9.2.6.0', 181 'aliases' => 182 array ( 183 ), 184 'reference' => 'f6293e1b30a2354e8428e004689671b83871edde', 185 ), 186 'phpunit/php-file-iterator' => 187 array ( 188 'pretty_version' => '3.0.5', 189 'version' => '3.0.5.0', 190 'aliases' => 191 array ( 192 ), 193 'reference' => 'aa4be8575f26070b100fccb67faabb28f21f66f8', 194 ), 195 'phpunit/php-invoker' => 196 array ( 197 'pretty_version' => '3.1.1', 198 'version' => '3.1.1.0', 199 'aliases' => 200 array ( 201 ), 202 'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67', 203 ), 204 'phpunit/php-text-template' => 205 array ( 206 'pretty_version' => '2.0.4', 207 'version' => '2.0.4.0', 208 'aliases' => 209 array ( 210 ), 211 'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28', 212 ), 213 'phpunit/php-timer' => 214 array ( 215 'pretty_version' => '5.0.3', 216 'version' => '5.0.3.0', 217 'aliases' => 218 array ( 219 ), 220 'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2', 221 ), 222 'phpunit/phpunit' => 223 array ( 224 'pretty_version' => '9.5.4', 225 'version' => '9.5.4.0', 226 'aliases' => 227 array ( 228 ), 229 'reference' => 'c73c6737305e779771147af66c96ca6a7ed8a741', 230 ), 231 'sebastian/cli-parser' => 232 array ( 233 'pretty_version' => '1.0.1', 234 'version' => '1.0.1.0', 235 'aliases' => 236 array ( 237 ), 238 'reference' => '442e7c7e687e42adc03470c7b668bc4b2402c0b2', 239 ), 240 'sebastian/code-unit' => 241 array ( 242 'pretty_version' => '1.0.8', 243 'version' => '1.0.8.0', 244 'aliases' => 245 array ( 246 ), 247 'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120', 248 ), 249 'sebastian/code-unit-reverse-lookup' => 250 array ( 251 'pretty_version' => '2.0.3', 252 'version' => '2.0.3.0', 253 'aliases' => 254 array ( 255 ), 256 'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5', 257 ), 258 'sebastian/comparator' => 259 array ( 260 'pretty_version' => '4.0.6', 261 'version' => '4.0.6.0', 262 'aliases' => 263 array ( 264 ), 265 'reference' => '55f4261989e546dc112258c7a75935a81a7ce382', 266 ), 267 'sebastian/complexity' => 268 array ( 269 'pretty_version' => '2.0.2', 270 'version' => '2.0.2.0', 271 'aliases' => 272 array ( 273 ), 274 'reference' => '739b35e53379900cc9ac327b2147867b8b6efd88', 275 ), 276 'sebastian/diff' => 277 array ( 278 'pretty_version' => '4.0.4', 279 'version' => '4.0.4.0', 280 'aliases' => 281 array ( 282 ), 283 'reference' => '3461e3fccc7cfdfc2720be910d3bd73c69be590d', 284 ), 285 'sebastian/environment' => 286 array ( 287 'pretty_version' => '5.1.3', 288 'version' => '5.1.3.0', 289 'aliases' => 290 array ( 291 ), 292 'reference' => '388b6ced16caa751030f6a69e588299fa09200ac', 293 ), 294 'sebastian/exporter' => 295 array ( 296 'pretty_version' => '4.0.3', 297 'version' => '4.0.3.0', 298 'aliases' => 299 array ( 300 ), 301 'reference' => 'd89cc98761b8cb5a1a235a6b703ae50d34080e65', 302 ), 303 'sebastian/global-state' => 304 array ( 305 'pretty_version' => '5.0.2', 306 'version' => '5.0.2.0', 307 'aliases' => 308 array ( 309 ), 310 'reference' => 'a90ccbddffa067b51f574dea6eb25d5680839455', 311 ), 312 'sebastian/lines-of-code' => 313 array ( 314 'pretty_version' => '1.0.3', 315 'version' => '1.0.3.0', 316 'aliases' => 317 array ( 318 ), 319 'reference' => 'c1c2e997aa3146983ed888ad08b15470a2e22ecc', 320 ), 321 'sebastian/object-enumerator' => 322 array ( 323 'pretty_version' => '4.0.4', 324 'version' => '4.0.4.0', 325 'aliases' => 326 array ( 327 ), 328 'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71', 329 ), 330 'sebastian/object-reflector' => 331 array ( 332 'pretty_version' => '2.0.4', 333 'version' => '2.0.4.0', 334 'aliases' => 335 array ( 336 ), 337 'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7', 338 ), 339 'sebastian/recursion-context' => 340 array ( 341 'pretty_version' => '4.0.4', 342 'version' => '4.0.4.0', 343 'aliases' => 344 array ( 345 ), 346 'reference' => 'cd9d8cf3c5804de4341c283ed787f099f5506172', 347 ), 348 'sebastian/resource-operations' => 349 array ( 350 'pretty_version' => '3.0.3', 351 'version' => '3.0.3.0', 352 'aliases' => 353 array ( 354 ), 355 'reference' => '0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8', 356 ), 357 'sebastian/type' => 358 array ( 359 'pretty_version' => '2.3.1', 360 'version' => '2.3.1.0', 361 'aliases' => 362 array ( 363 ), 364 'reference' => '81cd61ab7bbf2de744aba0ea61fae32f721df3d2', 365 ), 366 'sebastian/version' => 367 array ( 368 'pretty_version' => '3.0.2', 369 'version' => '3.0.2.0', 370 'aliases' => 371 array ( 372 ), 373 'reference' => 'c6c1022351a901512170118436c764e473f6de8c', 374 ), 375 'squizlabs/php_codesniffer' => 376 array ( 377 'pretty_version' => '3.6.0', 378 'version' => '3.6.0.0', 379 'aliases' => 380 array ( 381 ), 382 'reference' => 'ffced0d2c8fa8e6cdc4d695a743271fab6c38625', 383 ), 384 'symfony/polyfill-ctype' => 385 array ( 386 'pretty_version' => 'v1.22.1', 387 'version' => '1.22.1.0', 388 'aliases' => 389 array ( 390 ), 391 'reference' => 'c6c942b1ac76c82448322025e084cadc56048b4e', 392 ), 393 'theseer/tokenizer' => 394 array ( 395 'pretty_version' => '1.2.0', 396 'version' => '1.2.0.0', 397 'aliases' => 398 array ( 399 ), 400 'reference' => '75a63c33a8577608444246075ea0af0d052e452a', 401 ), 402 'webmozart/assert' => 403 array ( 404 'pretty_version' => '1.10.0', 405 'version' => '1.10.0.0', 406 'aliases' => 407 array ( 408 ), 409 'reference' => '6964c76c7804814a842473e0c8fd15bab0f18e25', 410 ), 411 'wordpress/core-implementation' => 412 array ( 413 'provided' => 414 array ( 415 0 => '5.7.0', 416 ), 417 ), 418 ), 419 ); 420 private static $canGetVendors; 421 private static $installedByVendor = array(); 422 423 424 425 426 427 428 429 public static function getInstalledPackages() 430 { 431 $packages = array(); 432 foreach (self::getInstalled() as $installed) { 433 $packages[] = array_keys($installed['versions']); 434 } 435 436 437 if (1 === \count($packages)) { 438 return $packages[0]; 439 } 440 441 return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); 442 } 443 444 445 446 447 448 449 450 451 452 public static function isInstalled($packageName) 453 { 454 foreach (self::getInstalled() as $installed) { 455 if (isset($installed['versions'][$packageName])) { 456 return true; 457 } 458 } 459 460 return false; 461 } 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 public static function satisfies(VersionParser $parser, $packageName, $constraint) 477 { 478 $constraint = $parser->parseConstraints($constraint); 479 $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); 480 481 return $provided->matches($constraint); 482 } 483 484 485 486 487 488 489 490 491 492 493 public static function getVersionRanges($packageName) 494 { 495 foreach (self::getInstalled() as $installed) { 496 if (!isset($installed['versions'][$packageName])) { 497 continue; 498 } 499 500 $ranges = array(); 501 if (isset($installed['versions'][$packageName]['pretty_version'])) { 502 $ranges[] = $installed['versions'][$packageName]['pretty_version']; 503 } 504 if (array_key_exists('aliases', $installed['versions'][$packageName])) { 505 $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); 506 } 507 if (array_key_exists('replaced', $installed['versions'][$packageName])) { 508 $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); 509 } 510 if (array_key_exists('provided', $installed['versions'][$packageName])) { 511 $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); 512 } 513 514 return implode(' || ', $ranges); 515 } 516 517 throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); 518 } 519 520 521 522 523 524 public static function getVersion($packageName) 525 { 526 foreach (self::getInstalled() as $installed) { 527 if (!isset($installed['versions'][$packageName])) { 528 continue; 529 } 530 531 if (!isset($installed['versions'][$packageName]['version'])) { 532 return null; 533 } 534 535 return $installed['versions'][$packageName]['version']; 536 } 537 538 throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); 539 } 540 541 542 543 544 545 public static function getPrettyVersion($packageName) 546 { 547 foreach (self::getInstalled() as $installed) { 548 if (!isset($installed['versions'][$packageName])) { 549 continue; 550 } 551 552 if (!isset($installed['versions'][$packageName]['pretty_version'])) { 553 return null; 554 } 555 556 return $installed['versions'][$packageName]['pretty_version']; 557 } 558 559 throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); 560 } 561 562 563 564 565 566 public static function getReference($packageName) 567 { 568 foreach (self::getInstalled() as $installed) { 569 if (!isset($installed['versions'][$packageName])) { 570 continue; 571 } 572 573 if (!isset($installed['versions'][$packageName]['reference'])) { 574 return null; 575 } 576 577 return $installed['versions'][$packageName]['reference']; 578 } 579 580 throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); 581 } 582 583 584 585 586 587 public static function getRootPackage() 588 { 589 $installed = self::getInstalled(); 590 591 return $installed[0]['root']; 592 } 593 594 595 596 597 598 599 600 public static function getRawData() 601 { 602 return self::$installed; 603 } 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 public static function reload($data) 624 { 625 self::$installed = $data; 626 self::$installedByVendor = array(); 627 } 628 629 630 631 632 private static function getInstalled() 633 { 634 if (null === self::$canGetVendors) { 635 self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); 636 } 637 638 $installed = array(); 639 640 if (self::$canGetVendors) { 641 foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { 642 if (isset(self::$installedByVendor[$vendorDir])) { 643 $installed[] = self::$installedByVendor[$vendorDir]; 644 } elseif (is_file($vendorDir.'/composer/installed.php')) { 645 $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; 646 } 647 } 648 } 649 650 $installed[] = self::$installed; 651 652 return $installed; 653 } 654 }