My SMM panel
 
 
 
 
 
 

1545 lines
38 KiB

  1. <?php
  2. /*
  3. * This file is part of Composer.
  4. *
  5. * (c) Nils Adermann <naderman@naderman.de>
  6. * Jordi Boggiano <j.boggiano@seld.be>
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace Composer;
  12. use Composer\Autoload\ClassLoader;
  13. use Composer\Semver\VersionParser;
  14. /**
  15. * This class is copied in every Composer installed project and available to all
  16. *
  17. * To require it's presence, you can require `composer-runtime-api ^2.0`
  18. */
  19. class InstalledVersions
  20. {
  21. private static $installed = array (
  22. 'root' =>
  23. array (
  24. 'pretty_version' => 'dev-master',
  25. 'version' => 'dev-master',
  26. 'aliases' =>
  27. array (
  28. ),
  29. 'reference' => 'ef8951a8e7a670357f2839b1c7ec2d9e8e89e15b',
  30. 'name' => 'laravel/laravel',
  31. ),
  32. 'versions' =>
  33. array (
  34. 'asm89/stack-cors' =>
  35. array (
  36. 'pretty_version' => 'v2.0.3',
  37. 'version' => '2.0.3.0',
  38. 'aliases' =>
  39. array (
  40. ),
  41. 'reference' => '9cb795bf30988e8c96dd3c40623c48a877bc6714',
  42. ),
  43. 'brick/math' =>
  44. array (
  45. 'pretty_version' => '0.9.2',
  46. 'version' => '0.9.2.0',
  47. 'aliases' =>
  48. array (
  49. ),
  50. 'reference' => 'dff976c2f3487d42c1db75a3b180e2b9f0e72ce0',
  51. ),
  52. 'cordoval/hamcrest-php' =>
  53. array (
  54. 'replaced' =>
  55. array (
  56. 0 => '*',
  57. ),
  58. ),
  59. 'davedevelopment/hamcrest-php' =>
  60. array (
  61. 'replaced' =>
  62. array (
  63. 0 => '*',
  64. ),
  65. ),
  66. 'dnoegel/php-xdg-base-dir' =>
  67. array (
  68. 'pretty_version' => 'v0.1.1',
  69. 'version' => '0.1.1.0',
  70. 'aliases' =>
  71. array (
  72. ),
  73. 'reference' => '8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd',
  74. ),
  75. 'doctrine/inflector' =>
  76. array (
  77. 'pretty_version' => '2.0.3',
  78. 'version' => '2.0.3.0',
  79. 'aliases' =>
  80. array (
  81. ),
  82. 'reference' => '9cf661f4eb38f7c881cac67c75ea9b00bf97b210',
  83. ),
  84. 'doctrine/instantiator' =>
  85. array (
  86. 'pretty_version' => '1.4.0',
  87. 'version' => '1.4.0.0',
  88. 'aliases' =>
  89. array (
  90. ),
  91. 'reference' => 'd56bf6102915de5702778fe20f2de3b2fe570b5b',
  92. ),
  93. 'doctrine/lexer' =>
  94. array (
  95. 'pretty_version' => '1.2.1',
  96. 'version' => '1.2.1.0',
  97. 'aliases' =>
  98. array (
  99. ),
  100. 'reference' => 'e864bbf5904cb8f5bb334f99209b48018522f042',
  101. ),
  102. 'dragonmantank/cron-expression' =>
  103. array (
  104. 'pretty_version' => 'v3.1.0',
  105. 'version' => '3.1.0.0',
  106. 'aliases' =>
  107. array (
  108. ),
  109. 'reference' => '7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c',
  110. ),
  111. 'egulias/email-validator' =>
  112. array (
  113. 'pretty_version' => '2.1.25',
  114. 'version' => '2.1.25.0',
  115. 'aliases' =>
  116. array (
  117. ),
  118. 'reference' => '0dbf5d78455d4d6a41d186da50adc1122ec066f4',
  119. ),
  120. 'facade/flare-client-php' =>
  121. array (
  122. 'pretty_version' => '1.5.0',
  123. 'version' => '1.5.0.0',
  124. 'aliases' =>
  125. array (
  126. ),
  127. 'reference' => '9dd6f2b56486d939c4467b3f35475d44af57cf17',
  128. ),
  129. 'facade/ignition' =>
  130. array (
  131. 'pretty_version' => '2.7.0',
  132. 'version' => '2.7.0.0',
  133. 'aliases' =>
  134. array (
  135. ),
  136. 'reference' => 'bdc8b0b32c888f6edc838ca641358322b3d9506d',
  137. ),
  138. 'facade/ignition-contracts' =>
  139. array (
  140. 'pretty_version' => '1.0.2',
  141. 'version' => '1.0.2.0',
  142. 'aliases' =>
  143. array (
  144. ),
  145. 'reference' => '3c921a1cdba35b68a7f0ccffc6dffc1995b18267',
  146. ),
  147. 'fakerphp/faker' =>
  148. array (
  149. 'pretty_version' => 'v1.14.1',
  150. 'version' => '1.14.1.0',
  151. 'aliases' =>
  152. array (
  153. ),
  154. 'reference' => 'ed22aee8d17c7b396f74a58b1e7fefa4f90d5ef1',
  155. ),
  156. 'fideloper/proxy' =>
  157. array (
  158. 'pretty_version' => '4.4.1',
  159. 'version' => '4.4.1.0',
  160. 'aliases' =>
  161. array (
  162. ),
  163. 'reference' => 'c073b2bd04d1c90e04dc1b787662b558dd65ade0',
  164. ),
  165. 'filp/whoops' =>
  166. array (
  167. 'pretty_version' => '2.12.0',
  168. 'version' => '2.12.0.0',
  169. 'aliases' =>
  170. array (
  171. ),
  172. 'reference' => 'd501fd2658d55491a2295ff600ae5978eaad7403',
  173. ),
  174. 'fruitcake/laravel-cors' =>
  175. array (
  176. 'pretty_version' => 'v2.0.3',
  177. 'version' => '2.0.3.0',
  178. 'aliases' =>
  179. array (
  180. ),
  181. 'reference' => '01de0fe5f71c70d1930ee9a80385f9cc28e0f63a',
  182. ),
  183. 'graham-campbell/result-type' =>
  184. array (
  185. 'pretty_version' => 'v1.0.1',
  186. 'version' => '1.0.1.0',
  187. 'aliases' =>
  188. array (
  189. ),
  190. 'reference' => '7e279d2cd5d7fbb156ce46daada972355cea27bb',
  191. ),
  192. 'guzzlehttp/guzzle' =>
  193. array (
  194. 'pretty_version' => '7.3.0',
  195. 'version' => '7.3.0.0',
  196. 'aliases' =>
  197. array (
  198. ),
  199. 'reference' => '7008573787b430c1c1f650e3722d9bba59967628',
  200. ),
  201. 'guzzlehttp/promises' =>
  202. array (
  203. 'pretty_version' => '1.4.1',
  204. 'version' => '1.4.1.0',
  205. 'aliases' =>
  206. array (
  207. ),
  208. 'reference' => '8e7d04f1f6450fef59366c399cfad4b9383aa30d',
  209. ),
  210. 'guzzlehttp/psr7' =>
  211. array (
  212. 'pretty_version' => '1.8.1',
  213. 'version' => '1.8.1.0',
  214. 'aliases' =>
  215. array (
  216. ),
  217. 'reference' => '35ea11d335fd638b5882ff1725228b3d35496ab1',
  218. ),
  219. 'hamcrest/hamcrest-php' =>
  220. array (
  221. 'pretty_version' => 'v2.0.1',
  222. 'version' => '2.0.1.0',
  223. 'aliases' =>
  224. array (
  225. ),
  226. 'reference' => '8c3d0a3f6af734494ad8f6fbbee0ba92422859f3',
  227. ),
  228. 'illuminate/auth' =>
  229. array (
  230. 'replaced' =>
  231. array (
  232. 0 => 'v8.35.1',
  233. ),
  234. ),
  235. 'illuminate/broadcasting' =>
  236. array (
  237. 'replaced' =>
  238. array (
  239. 0 => 'v8.35.1',
  240. ),
  241. ),
  242. 'illuminate/bus' =>
  243. array (
  244. 'replaced' =>
  245. array (
  246. 0 => 'v8.35.1',
  247. ),
  248. ),
  249. 'illuminate/cache' =>
  250. array (
  251. 'replaced' =>
  252. array (
  253. 0 => 'v8.35.1',
  254. ),
  255. ),
  256. 'illuminate/collections' =>
  257. array (
  258. 'replaced' =>
  259. array (
  260. 0 => 'v8.35.1',
  261. ),
  262. ),
  263. 'illuminate/config' =>
  264. array (
  265. 'replaced' =>
  266. array (
  267. 0 => 'v8.35.1',
  268. ),
  269. ),
  270. 'illuminate/console' =>
  271. array (
  272. 'replaced' =>
  273. array (
  274. 0 => 'v8.35.1',
  275. ),
  276. ),
  277. 'illuminate/container' =>
  278. array (
  279. 'replaced' =>
  280. array (
  281. 0 => 'v8.35.1',
  282. ),
  283. ),
  284. 'illuminate/contracts' =>
  285. array (
  286. 'replaced' =>
  287. array (
  288. 0 => 'v8.35.1',
  289. ),
  290. ),
  291. 'illuminate/cookie' =>
  292. array (
  293. 'replaced' =>
  294. array (
  295. 0 => 'v8.35.1',
  296. ),
  297. ),
  298. 'illuminate/database' =>
  299. array (
  300. 'replaced' =>
  301. array (
  302. 0 => 'v8.35.1',
  303. ),
  304. ),
  305. 'illuminate/encryption' =>
  306. array (
  307. 'replaced' =>
  308. array (
  309. 0 => 'v8.35.1',
  310. ),
  311. ),
  312. 'illuminate/events' =>
  313. array (
  314. 'replaced' =>
  315. array (
  316. 0 => 'v8.35.1',
  317. ),
  318. ),
  319. 'illuminate/filesystem' =>
  320. array (
  321. 'replaced' =>
  322. array (
  323. 0 => 'v8.35.1',
  324. ),
  325. ),
  326. 'illuminate/hashing' =>
  327. array (
  328. 'replaced' =>
  329. array (
  330. 0 => 'v8.35.1',
  331. ),
  332. ),
  333. 'illuminate/http' =>
  334. array (
  335. 'replaced' =>
  336. array (
  337. 0 => 'v8.35.1',
  338. ),
  339. ),
  340. 'illuminate/log' =>
  341. array (
  342. 'replaced' =>
  343. array (
  344. 0 => 'v8.35.1',
  345. ),
  346. ),
  347. 'illuminate/macroable' =>
  348. array (
  349. 'replaced' =>
  350. array (
  351. 0 => 'v8.35.1',
  352. ),
  353. ),
  354. 'illuminate/mail' =>
  355. array (
  356. 'replaced' =>
  357. array (
  358. 0 => 'v8.35.1',
  359. ),
  360. ),
  361. 'illuminate/notifications' =>
  362. array (
  363. 'replaced' =>
  364. array (
  365. 0 => 'v8.35.1',
  366. ),
  367. ),
  368. 'illuminate/pagination' =>
  369. array (
  370. 'replaced' =>
  371. array (
  372. 0 => 'v8.35.1',
  373. ),
  374. ),
  375. 'illuminate/pipeline' =>
  376. array (
  377. 'replaced' =>
  378. array (
  379. 0 => 'v8.35.1',
  380. ),
  381. ),
  382. 'illuminate/queue' =>
  383. array (
  384. 'replaced' =>
  385. array (
  386. 0 => 'v8.35.1',
  387. ),
  388. ),
  389. 'illuminate/redis' =>
  390. array (
  391. 'replaced' =>
  392. array (
  393. 0 => 'v8.35.1',
  394. ),
  395. ),
  396. 'illuminate/routing' =>
  397. array (
  398. 'replaced' =>
  399. array (
  400. 0 => 'v8.35.1',
  401. ),
  402. ),
  403. 'illuminate/session' =>
  404. array (
  405. 'replaced' =>
  406. array (
  407. 0 => 'v8.35.1',
  408. ),
  409. ),
  410. 'illuminate/support' =>
  411. array (
  412. 'replaced' =>
  413. array (
  414. 0 => 'v8.35.1',
  415. ),
  416. ),
  417. 'illuminate/testing' =>
  418. array (
  419. 'replaced' =>
  420. array (
  421. 0 => 'v8.35.1',
  422. ),
  423. ),
  424. 'illuminate/translation' =>
  425. array (
  426. 'replaced' =>
  427. array (
  428. 0 => 'v8.35.1',
  429. ),
  430. ),
  431. 'illuminate/validation' =>
  432. array (
  433. 'replaced' =>
  434. array (
  435. 0 => 'v8.35.1',
  436. ),
  437. ),
  438. 'illuminate/view' =>
  439. array (
  440. 'replaced' =>
  441. array (
  442. 0 => 'v8.35.1',
  443. ),
  444. ),
  445. 'kodova/hamcrest-php' =>
  446. array (
  447. 'replaced' =>
  448. array (
  449. 0 => '*',
  450. ),
  451. ),
  452. 'laravel/framework' =>
  453. array (
  454. 'pretty_version' => 'v8.35.1',
  455. 'version' => '8.35.1.0',
  456. 'aliases' =>
  457. array (
  458. ),
  459. 'reference' => 'd118c0df39e7524131176aaf76493eae63a8a602',
  460. ),
  461. 'laravel/laravel' =>
  462. array (
  463. 'pretty_version' => 'dev-master',
  464. 'version' => 'dev-master',
  465. 'aliases' =>
  466. array (
  467. ),
  468. 'reference' => 'ef8951a8e7a670357f2839b1c7ec2d9e8e89e15b',
  469. ),
  470. 'laravel/sail' =>
  471. array (
  472. 'pretty_version' => 'v1.4.10',
  473. 'version' => '1.4.10.0',
  474. 'aliases' =>
  475. array (
  476. ),
  477. 'reference' => '4f0b2bac128ee60a11d9758651f103f78157474a',
  478. ),
  479. 'laravel/sanctum' =>
  480. array (
  481. 'pretty_version' => 'v2.10.0',
  482. 'version' => '2.10.0.0',
  483. 'aliases' =>
  484. array (
  485. ),
  486. 'reference' => 'a08cfee365c6b6df3e91c8f43b92f7163ffc8a94',
  487. ),
  488. 'laravel/tinker' =>
  489. array (
  490. 'pretty_version' => 'v2.6.1',
  491. 'version' => '2.6.1.0',
  492. 'aliases' =>
  493. array (
  494. ),
  495. 'reference' => '04ad32c1a3328081097a181875733fa51f402083',
  496. ),
  497. 'league/commonmark' =>
  498. array (
  499. 'pretty_version' => '1.5.8',
  500. 'version' => '1.5.8.0',
  501. 'aliases' =>
  502. array (
  503. ),
  504. 'reference' => '08fa59b8e4e34ea8a773d55139ae9ac0e0aecbaf',
  505. ),
  506. 'league/flysystem' =>
  507. array (
  508. 'pretty_version' => '1.1.3',
  509. 'version' => '1.1.3.0',
  510. 'aliases' =>
  511. array (
  512. ),
  513. 'reference' => '9be3b16c877d477357c015cec057548cf9b2a14a',
  514. ),
  515. 'league/mime-type-detection' =>
  516. array (
  517. 'pretty_version' => '1.7.0',
  518. 'version' => '1.7.0.0',
  519. 'aliases' =>
  520. array (
  521. ),
  522. 'reference' => '3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3',
  523. ),
  524. 'mockery/mockery' =>
  525. array (
  526. 'pretty_version' => '1.4.3',
  527. 'version' => '1.4.3.0',
  528. 'aliases' =>
  529. array (
  530. ),
  531. 'reference' => 'd1339f64479af1bee0e82a0413813fe5345a54ea',
  532. ),
  533. 'monolog/monolog' =>
  534. array (
  535. 'pretty_version' => '2.2.0',
  536. 'version' => '2.2.0.0',
  537. 'aliases' =>
  538. array (
  539. ),
  540. 'reference' => '1cb1cde8e8dd0f70cc0fe51354a59acad9302084',
  541. ),
  542. 'mtdowling/cron-expression' =>
  543. array (
  544. 'replaced' =>
  545. array (
  546. 0 => '^1.0',
  547. ),
  548. ),
  549. 'myclabs/deep-copy' =>
  550. array (
  551. 'pretty_version' => '1.10.2',
  552. 'version' => '1.10.2.0',
  553. 'aliases' =>
  554. array (
  555. ),
  556. 'reference' => '776f831124e9c62e1a2c601ecc52e776d8bb7220',
  557. 'replaced' =>
  558. array (
  559. 0 => '1.10.2',
  560. ),
  561. ),
  562. 'nesbot/carbon' =>
  563. array (
  564. 'pretty_version' => '2.46.0',
  565. 'version' => '2.46.0.0',
  566. 'aliases' =>
  567. array (
  568. ),
  569. 'reference' => '2fd2c4a77d58a4e95234c8a61c5df1f157a91bf4',
  570. ),
  571. 'nikic/php-parser' =>
  572. array (
  573. 'pretty_version' => 'v4.10.4',
  574. 'version' => '4.10.4.0',
  575. 'aliases' =>
  576. array (
  577. ),
  578. 'reference' => 'c6d052fc58cb876152f89f532b95a8d7907e7f0e',
  579. ),
  580. 'nunomaduro/collision' =>
  581. array (
  582. 'pretty_version' => 'v5.3.0',
  583. 'version' => '5.3.0.0',
  584. 'aliases' =>
  585. array (
  586. ),
  587. 'reference' => 'aca63581f380f63a492b1e3114604e411e39133a',
  588. ),
  589. 'opis/closure' =>
  590. array (
  591. 'pretty_version' => '3.6.1',
  592. 'version' => '3.6.1.0',
  593. 'aliases' =>
  594. array (
  595. ),
  596. 'reference' => '943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5',
  597. ),
  598. 'phar-io/manifest' =>
  599. array (
  600. 'pretty_version' => '2.0.1',
  601. 'version' => '2.0.1.0',
  602. 'aliases' =>
  603. array (
  604. ),
  605. 'reference' => '85265efd3af7ba3ca4b2a2c34dbfc5788dd29133',
  606. ),
  607. 'phar-io/version' =>
  608. array (
  609. 'pretty_version' => '3.1.0',
  610. 'version' => '3.1.0.0',
  611. 'aliases' =>
  612. array (
  613. ),
  614. 'reference' => 'bae7c545bef187884426f042434e561ab1ddb182',
  615. ),
  616. 'phpdocumentor/reflection-common' =>
  617. array (
  618. 'pretty_version' => '2.2.0',
  619. 'version' => '2.2.0.0',
  620. 'aliases' =>
  621. array (
  622. ),
  623. 'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b',
  624. ),
  625. 'phpdocumentor/reflection-docblock' =>
  626. array (
  627. 'pretty_version' => '5.2.2',
  628. 'version' => '5.2.2.0',
  629. 'aliases' =>
  630. array (
  631. ),
  632. 'reference' => '069a785b2141f5bcf49f3e353548dc1cce6df556',
  633. ),
  634. 'phpdocumentor/type-resolver' =>
  635. array (
  636. 'pretty_version' => '1.4.0',
  637. 'version' => '1.4.0.0',
  638. 'aliases' =>
  639. array (
  640. ),
  641. 'reference' => '6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0',
  642. ),
  643. 'phpoption/phpoption' =>
  644. array (
  645. 'pretty_version' => '1.7.5',
  646. 'version' => '1.7.5.0',
  647. 'aliases' =>
  648. array (
  649. ),
  650. 'reference' => '994ecccd8f3283ecf5ac33254543eb0ac946d525',
  651. ),
  652. 'phpspec/prophecy' =>
  653. array (
  654. 'pretty_version' => '1.13.0',
  655. 'version' => '1.13.0.0',
  656. 'aliases' =>
  657. array (
  658. ),
  659. 'reference' => 'be1996ed8adc35c3fd795488a653f4b518be70ea',
  660. ),
  661. 'phpunit/php-code-coverage' =>
  662. array (
  663. 'pretty_version' => '9.2.6',
  664. 'version' => '9.2.6.0',
  665. 'aliases' =>
  666. array (
  667. ),
  668. 'reference' => 'f6293e1b30a2354e8428e004689671b83871edde',
  669. ),
  670. 'phpunit/php-file-iterator' =>
  671. array (
  672. 'pretty_version' => '3.0.5',
  673. 'version' => '3.0.5.0',
  674. 'aliases' =>
  675. array (
  676. ),
  677. 'reference' => 'aa4be8575f26070b100fccb67faabb28f21f66f8',
  678. ),
  679. 'phpunit/php-invoker' =>
  680. array (
  681. 'pretty_version' => '3.1.1',
  682. 'version' => '3.1.1.0',
  683. 'aliases' =>
  684. array (
  685. ),
  686. 'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67',
  687. ),
  688. 'phpunit/php-text-template' =>
  689. array (
  690. 'pretty_version' => '2.0.4',
  691. 'version' => '2.0.4.0',
  692. 'aliases' =>
  693. array (
  694. ),
  695. 'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28',
  696. ),
  697. 'phpunit/php-timer' =>
  698. array (
  699. 'pretty_version' => '5.0.3',
  700. 'version' => '5.0.3.0',
  701. 'aliases' =>
  702. array (
  703. ),
  704. 'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2',
  705. ),
  706. 'phpunit/phpunit' =>
  707. array (
  708. 'pretty_version' => '9.5.4',
  709. 'version' => '9.5.4.0',
  710. 'aliases' =>
  711. array (
  712. ),
  713. 'reference' => 'c73c6737305e779771147af66c96ca6a7ed8a741',
  714. ),
  715. 'psr/container' =>
  716. array (
  717. 'pretty_version' => '1.1.1',
  718. 'version' => '1.1.1.0',
  719. 'aliases' =>
  720. array (
  721. ),
  722. 'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf',
  723. ),
  724. 'psr/container-implementation' =>
  725. array (
  726. 'provided' =>
  727. array (
  728. 0 => '1.0',
  729. ),
  730. ),
  731. 'psr/event-dispatcher' =>
  732. array (
  733. 'pretty_version' => '1.0.0',
  734. 'version' => '1.0.0.0',
  735. 'aliases' =>
  736. array (
  737. ),
  738. 'reference' => 'dbefd12671e8a14ec7f180cab83036ed26714bb0',
  739. ),
  740. 'psr/event-dispatcher-implementation' =>
  741. array (
  742. 'provided' =>
  743. array (
  744. 0 => '1.0',
  745. ),
  746. ),
  747. 'psr/http-client' =>
  748. array (
  749. 'pretty_version' => '1.0.1',
  750. 'version' => '1.0.1.0',
  751. 'aliases' =>
  752. array (
  753. ),
  754. 'reference' => '2dfb5f6c5eff0e91e20e913f8c5452ed95b86621',
  755. ),
  756. 'psr/http-client-implementation' =>
  757. array (
  758. 'provided' =>
  759. array (
  760. 0 => '1.0',
  761. ),
  762. ),
  763. 'psr/http-message' =>
  764. array (
  765. 'pretty_version' => '1.0.1',
  766. 'version' => '1.0.1.0',
  767. 'aliases' =>
  768. array (
  769. ),
  770. 'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',
  771. ),
  772. 'psr/http-message-implementation' =>
  773. array (
  774. 'provided' =>
  775. array (
  776. 0 => '1.0',
  777. ),
  778. ),
  779. 'psr/log' =>
  780. array (
  781. 'pretty_version' => '1.1.3',
  782. 'version' => '1.1.3.0',
  783. 'aliases' =>
  784. array (
  785. ),
  786. 'reference' => '0f73288fd15629204f9d42b7055f72dacbe811fc',
  787. ),
  788. 'psr/log-implementation' =>
  789. array (
  790. 'provided' =>
  791. array (
  792. 0 => '1.0.0',
  793. 1 => '1.0',
  794. ),
  795. ),
  796. 'psr/simple-cache' =>
  797. array (
  798. 'pretty_version' => '1.0.1',
  799. 'version' => '1.0.1.0',
  800. 'aliases' =>
  801. array (
  802. ),
  803. 'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b',
  804. ),
  805. 'psy/psysh' =>
  806. array (
  807. 'pretty_version' => 'v0.10.7',
  808. 'version' => '0.10.7.0',
  809. 'aliases' =>
  810. array (
  811. ),
  812. 'reference' => 'a395af46999a12006213c0c8346c9445eb31640c',
  813. ),
  814. 'ralouphie/getallheaders' =>
  815. array (
  816. 'pretty_version' => '3.0.3',
  817. 'version' => '3.0.3.0',
  818. 'aliases' =>
  819. array (
  820. ),
  821. 'reference' => '120b605dfeb996808c31b6477290a714d356e822',
  822. ),
  823. 'ramsey/collection' =>
  824. array (
  825. 'pretty_version' => '1.1.3',
  826. 'version' => '1.1.3.0',
  827. 'aliases' =>
  828. array (
  829. ),
  830. 'reference' => '28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1',
  831. ),
  832. 'ramsey/uuid' =>
  833. array (
  834. 'pretty_version' => '4.1.1',
  835. 'version' => '4.1.1.0',
  836. 'aliases' =>
  837. array (
  838. ),
  839. 'reference' => 'cd4032040a750077205918c86049aa0f43d22947',
  840. ),
  841. 'rhumsaa/uuid' =>
  842. array (
  843. 'replaced' =>
  844. array (
  845. 0 => '4.1.1',
  846. ),
  847. ),
  848. 'sebastian/cli-parser' =>
  849. array (
  850. 'pretty_version' => '1.0.1',
  851. 'version' => '1.0.1.0',
  852. 'aliases' =>
  853. array (
  854. ),
  855. 'reference' => '442e7c7e687e42adc03470c7b668bc4b2402c0b2',
  856. ),
  857. 'sebastian/code-unit' =>
  858. array (
  859. 'pretty_version' => '1.0.8',
  860. 'version' => '1.0.8.0',
  861. 'aliases' =>
  862. array (
  863. ),
  864. 'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120',
  865. ),
  866. 'sebastian/code-unit-reverse-lookup' =>
  867. array (
  868. 'pretty_version' => '2.0.3',
  869. 'version' => '2.0.3.0',
  870. 'aliases' =>
  871. array (
  872. ),
  873. 'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5',
  874. ),
  875. 'sebastian/comparator' =>
  876. array (
  877. 'pretty_version' => '4.0.6',
  878. 'version' => '4.0.6.0',
  879. 'aliases' =>
  880. array (
  881. ),
  882. 'reference' => '55f4261989e546dc112258c7a75935a81a7ce382',
  883. ),
  884. 'sebastian/complexity' =>
  885. array (
  886. 'pretty_version' => '2.0.2',
  887. 'version' => '2.0.2.0',
  888. 'aliases' =>
  889. array (
  890. ),
  891. 'reference' => '739b35e53379900cc9ac327b2147867b8b6efd88',
  892. ),
  893. 'sebastian/diff' =>
  894. array (
  895. 'pretty_version' => '4.0.4',
  896. 'version' => '4.0.4.0',
  897. 'aliases' =>
  898. array (
  899. ),
  900. 'reference' => '3461e3fccc7cfdfc2720be910d3bd73c69be590d',
  901. ),
  902. 'sebastian/environment' =>
  903. array (
  904. 'pretty_version' => '5.1.3',
  905. 'version' => '5.1.3.0',
  906. 'aliases' =>
  907. array (
  908. ),
  909. 'reference' => '388b6ced16caa751030f6a69e588299fa09200ac',
  910. ),
  911. 'sebastian/exporter' =>
  912. array (
  913. 'pretty_version' => '4.0.3',
  914. 'version' => '4.0.3.0',
  915. 'aliases' =>
  916. array (
  917. ),
  918. 'reference' => 'd89cc98761b8cb5a1a235a6b703ae50d34080e65',
  919. ),
  920. 'sebastian/global-state' =>
  921. array (
  922. 'pretty_version' => '5.0.2',
  923. 'version' => '5.0.2.0',
  924. 'aliases' =>
  925. array (
  926. ),
  927. 'reference' => 'a90ccbddffa067b51f574dea6eb25d5680839455',
  928. ),
  929. 'sebastian/lines-of-code' =>
  930. array (
  931. 'pretty_version' => '1.0.3',
  932. 'version' => '1.0.3.0',
  933. 'aliases' =>
  934. array (
  935. ),
  936. 'reference' => 'c1c2e997aa3146983ed888ad08b15470a2e22ecc',
  937. ),
  938. 'sebastian/object-enumerator' =>
  939. array (
  940. 'pretty_version' => '4.0.4',
  941. 'version' => '4.0.4.0',
  942. 'aliases' =>
  943. array (
  944. ),
  945. 'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71',
  946. ),
  947. 'sebastian/object-reflector' =>
  948. array (
  949. 'pretty_version' => '2.0.4',
  950. 'version' => '2.0.4.0',
  951. 'aliases' =>
  952. array (
  953. ),
  954. 'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7',
  955. ),
  956. 'sebastian/recursion-context' =>
  957. array (
  958. 'pretty_version' => '4.0.4',
  959. 'version' => '4.0.4.0',
  960. 'aliases' =>
  961. array (
  962. ),
  963. 'reference' => 'cd9d8cf3c5804de4341c283ed787f099f5506172',
  964. ),
  965. 'sebastian/resource-operations' =>
  966. array (
  967. 'pretty_version' => '3.0.3',
  968. 'version' => '3.0.3.0',
  969. 'aliases' =>
  970. array (
  971. ),
  972. 'reference' => '0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8',
  973. ),
  974. 'sebastian/type' =>
  975. array (
  976. 'pretty_version' => '2.3.1',
  977. 'version' => '2.3.1.0',
  978. 'aliases' =>
  979. array (
  980. ),
  981. 'reference' => '81cd61ab7bbf2de744aba0ea61fae32f721df3d2',
  982. ),
  983. 'sebastian/version' =>
  984. array (
  985. 'pretty_version' => '3.0.2',
  986. 'version' => '3.0.2.0',
  987. 'aliases' =>
  988. array (
  989. ),
  990. 'reference' => 'c6c1022351a901512170118436c764e473f6de8c',
  991. ),
  992. 'swiftmailer/swiftmailer' =>
  993. array (
  994. 'pretty_version' => 'v6.2.7',
  995. 'version' => '6.2.7.0',
  996. 'aliases' =>
  997. array (
  998. ),
  999. 'reference' => '15f7faf8508e04471f666633addacf54c0ab5933',
  1000. ),
  1001. 'symfony/console' =>
  1002. array (
  1003. 'pretty_version' => 'v5.2.6',
  1004. 'version' => '5.2.6.0',
  1005. 'aliases' =>
  1006. array (
  1007. ),
  1008. 'reference' => '35f039df40a3b335ebf310f244cb242b3a83ac8d',
  1009. ),
  1010. 'symfony/css-selector' =>
  1011. array (
  1012. 'pretty_version' => 'v5.2.4',
  1013. 'version' => '5.2.4.0',
  1014. 'aliases' =>
  1015. array (
  1016. ),
  1017. 'reference' => 'f65f217b3314504a1ec99c2d6ef69016bb13490f',
  1018. ),
  1019. 'symfony/deprecation-contracts' =>
  1020. array (
  1021. 'pretty_version' => 'v2.2.0',
  1022. 'version' => '2.2.0.0',
  1023. 'aliases' =>
  1024. array (
  1025. ),
  1026. 'reference' => '5fa56b4074d1ae755beb55617ddafe6f5d78f665',
  1027. ),
  1028. 'symfony/error-handler' =>
  1029. array (
  1030. 'pretty_version' => 'v5.2.6',
  1031. 'version' => '5.2.6.0',
  1032. 'aliases' =>
  1033. array (
  1034. ),
  1035. 'reference' => 'bdb7fb4188da7f4211e4b88350ba0dfdad002b03',
  1036. ),
  1037. 'symfony/event-dispatcher' =>
  1038. array (
  1039. 'pretty_version' => 'v5.2.4',
  1040. 'version' => '5.2.4.0',
  1041. 'aliases' =>
  1042. array (
  1043. ),
  1044. 'reference' => 'd08d6ec121a425897951900ab692b612a61d6240',
  1045. ),
  1046. 'symfony/event-dispatcher-contracts' =>
  1047. array (
  1048. 'pretty_version' => 'v2.2.0',
  1049. 'version' => '2.2.0.0',
  1050. 'aliases' =>
  1051. array (
  1052. ),
  1053. 'reference' => '0ba7d54483095a198fa51781bc608d17e84dffa2',
  1054. ),
  1055. 'symfony/event-dispatcher-implementation' =>
  1056. array (
  1057. 'provided' =>
  1058. array (
  1059. 0 => '2.0',
  1060. ),
  1061. ),
  1062. 'symfony/finder' =>
  1063. array (
  1064. 'pretty_version' => 'v5.2.4',
  1065. 'version' => '5.2.4.0',
  1066. 'aliases' =>
  1067. array (
  1068. ),
  1069. 'reference' => '0d639a0943822626290d169965804f79400e6a04',
  1070. ),
  1071. 'symfony/http-client-contracts' =>
  1072. array (
  1073. 'pretty_version' => 'v2.3.1',
  1074. 'version' => '2.3.1.0',
  1075. 'aliases' =>
  1076. array (
  1077. ),
  1078. 'reference' => '41db680a15018f9c1d4b23516059633ce280ca33',
  1079. ),
  1080. 'symfony/http-foundation' =>
  1081. array (
  1082. 'pretty_version' => 'v5.2.4',
  1083. 'version' => '5.2.4.0',
  1084. 'aliases' =>
  1085. array (
  1086. ),
  1087. 'reference' => '54499baea7f7418bce7b5ec92770fd0799e8e9bf',
  1088. ),
  1089. 'symfony/http-kernel' =>
  1090. array (
  1091. 'pretty_version' => 'v5.2.6',
  1092. 'version' => '5.2.6.0',
  1093. 'aliases' =>
  1094. array (
  1095. ),
  1096. 'reference' => 'f34de4c61ca46df73857f7f36b9a3805bdd7e3b2',
  1097. ),
  1098. 'symfony/mime' =>
  1099. array (
  1100. 'pretty_version' => 'v5.2.6',
  1101. 'version' => '5.2.6.0',
  1102. 'aliases' =>
  1103. array (
  1104. ),
  1105. 'reference' => '1b2092244374cbe48ae733673f2ca0818b37197b',
  1106. ),
  1107. 'symfony/polyfill-ctype' =>
  1108. array (
  1109. 'pretty_version' => 'v1.22.1',
  1110. 'version' => '1.22.1.0',
  1111. 'aliases' =>
  1112. array (
  1113. ),
  1114. 'reference' => 'c6c942b1ac76c82448322025e084cadc56048b4e',
  1115. ),
  1116. 'symfony/polyfill-iconv' =>
  1117. array (
  1118. 'pretty_version' => 'v1.22.1',
  1119. 'version' => '1.22.1.0',
  1120. 'aliases' =>
  1121. array (
  1122. ),
  1123. 'reference' => '06fb361659649bcfd6a208a0f1fcaf4e827ad342',
  1124. ),
  1125. 'symfony/polyfill-intl-grapheme' =>
  1126. array (
  1127. 'pretty_version' => 'v1.22.1',
  1128. 'version' => '1.22.1.0',
  1129. 'aliases' =>
  1130. array (
  1131. ),
  1132. 'reference' => '5601e09b69f26c1828b13b6bb87cb07cddba3170',
  1133. ),
  1134. 'symfony/polyfill-intl-idn' =>
  1135. array (
  1136. 'pretty_version' => 'v1.22.1',
  1137. 'version' => '1.22.1.0',
  1138. 'aliases' =>
  1139. array (
  1140. ),
  1141. 'reference' => '2d63434d922daf7da8dd863e7907e67ee3031483',
  1142. ),
  1143. 'symfony/polyfill-intl-normalizer' =>
  1144. array (
  1145. 'pretty_version' => 'v1.22.1',
  1146. 'version' => '1.22.1.0',
  1147. 'aliases' =>
  1148. array (
  1149. ),
  1150. 'reference' => '43a0283138253ed1d48d352ab6d0bdb3f809f248',
  1151. ),
  1152. 'symfony/polyfill-mbstring' =>
  1153. array (
  1154. 'pretty_version' => 'v1.22.1',
  1155. 'version' => '1.22.1.0',
  1156. 'aliases' =>
  1157. array (
  1158. ),
  1159. 'reference' => '5232de97ee3b75b0360528dae24e73db49566ab1',
  1160. ),
  1161. 'symfony/polyfill-php72' =>
  1162. array (
  1163. 'pretty_version' => 'v1.22.1',
  1164. 'version' => '1.22.1.0',
  1165. 'aliases' =>
  1166. array (
  1167. ),
  1168. 'reference' => 'cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9',
  1169. ),
  1170. 'symfony/polyfill-php73' =>
  1171. array (
  1172. 'pretty_version' => 'v1.22.1',
  1173. 'version' => '1.22.1.0',
  1174. 'aliases' =>
  1175. array (
  1176. ),
  1177. 'reference' => 'a678b42e92f86eca04b7fa4c0f6f19d097fb69e2',
  1178. ),
  1179. 'symfony/polyfill-php80' =>
  1180. array (
  1181. 'pretty_version' => 'v1.22.1',
  1182. 'version' => '1.22.1.0',
  1183. 'aliases' =>
  1184. array (
  1185. ),
  1186. 'reference' => 'dc3063ba22c2a1fd2f45ed856374d79114998f91',
  1187. ),
  1188. 'symfony/process' =>
  1189. array (
  1190. 'pretty_version' => 'v5.2.4',
  1191. 'version' => '5.2.4.0',
  1192. 'aliases' =>
  1193. array (
  1194. ),
  1195. 'reference' => '313a38f09c77fbcdc1d223e57d368cea76a2fd2f',
  1196. ),
  1197. 'symfony/routing' =>
  1198. array (
  1199. 'pretty_version' => 'v5.2.6',
  1200. 'version' => '5.2.6.0',
  1201. 'aliases' =>
  1202. array (
  1203. ),
  1204. 'reference' => '31fba555f178afd04d54fd26953501b2c3f0c6e6',
  1205. ),
  1206. 'symfony/service-contracts' =>
  1207. array (
  1208. 'pretty_version' => 'v2.2.0',
  1209. 'version' => '2.2.0.0',
  1210. 'aliases' =>
  1211. array (
  1212. ),
  1213. 'reference' => 'd15da7ba4957ffb8f1747218be9e1a121fd298a1',
  1214. ),
  1215. 'symfony/string' =>
  1216. array (
  1217. 'pretty_version' => 'v5.2.6',
  1218. 'version' => '5.2.6.0',
  1219. 'aliases' =>
  1220. array (
  1221. ),
  1222. 'reference' => 'ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572',
  1223. ),
  1224. 'symfony/translation' =>
  1225. array (
  1226. 'pretty_version' => 'v5.2.6',
  1227. 'version' => '5.2.6.0',
  1228. 'aliases' =>
  1229. array (
  1230. ),
  1231. 'reference' => '2cc7f45d96db9adfcf89adf4401d9dfed509f4e1',
  1232. ),
  1233. 'symfony/translation-contracts' =>
  1234. array (
  1235. 'pretty_version' => 'v2.3.0',
  1236. 'version' => '2.3.0.0',
  1237. 'aliases' =>
  1238. array (
  1239. ),
  1240. 'reference' => 'e2eaa60b558f26a4b0354e1bbb25636efaaad105',
  1241. ),
  1242. 'symfony/translation-implementation' =>
  1243. array (
  1244. 'provided' =>
  1245. array (
  1246. 0 => '2.3',
  1247. ),
  1248. ),
  1249. 'symfony/var-dumper' =>
  1250. array (
  1251. 'pretty_version' => 'v5.2.6',
  1252. 'version' => '5.2.6.0',
  1253. 'aliases' =>
  1254. array (
  1255. ),
  1256. 'reference' => '89412a68ea2e675b4e44f260a5666729f77f668e',
  1257. ),
  1258. 'theseer/tokenizer' =>
  1259. array (
  1260. 'pretty_version' => '1.2.0',
  1261. 'version' => '1.2.0.0',
  1262. 'aliases' =>
  1263. array (
  1264. ),
  1265. 'reference' => '75a63c33a8577608444246075ea0af0d052e452a',
  1266. ),
  1267. 'tijsverkoyen/css-to-inline-styles' =>
  1268. array (
  1269. 'pretty_version' => '2.2.3',
  1270. 'version' => '2.2.3.0',
  1271. 'aliases' =>
  1272. array (
  1273. ),
  1274. 'reference' => 'b43b05cf43c1b6d849478965062b6ef73e223bb5',
  1275. ),
  1276. 'vlucas/phpdotenv' =>
  1277. array (
  1278. 'pretty_version' => 'v5.3.0',
  1279. 'version' => '5.3.0.0',
  1280. 'aliases' =>
  1281. array (
  1282. ),
  1283. 'reference' => 'b3eac5c7ac896e52deab4a99068e3f4ab12d9e56',
  1284. ),
  1285. 'voku/portable-ascii' =>
  1286. array (
  1287. 'pretty_version' => '1.5.6',
  1288. 'version' => '1.5.6.0',
  1289. 'aliases' =>
  1290. array (
  1291. ),
  1292. 'reference' => '80953678b19901e5165c56752d087fc11526017c',
  1293. ),
  1294. 'webmozart/assert' =>
  1295. array (
  1296. 'pretty_version' => '1.10.0',
  1297. 'version' => '1.10.0.0',
  1298. 'aliases' =>
  1299. array (
  1300. ),
  1301. 'reference' => '6964c76c7804814a842473e0c8fd15bab0f18e25',
  1302. ),
  1303. ),
  1304. );
  1305. private static $canGetVendors;
  1306. private static $installedByVendor = array();
  1307. /**
  1308. * Returns a list of all package names which are present, either by being installed, replaced or provided
  1309. *
  1310. * @return string[]
  1311. * @psalm-return list<string>
  1312. */
  1313. public static function getInstalledPackages()
  1314. {
  1315. $packages = array();
  1316. foreach (self::getInstalled() as $installed) {
  1317. $packages[] = array_keys($installed['versions']);
  1318. }
  1319. if (1 === \count($packages)) {
  1320. return $packages[0];
  1321. }
  1322. return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
  1323. }
  1324. /**
  1325. * Checks whether the given package is installed
  1326. *
  1327. * This also returns true if the package name is provided or replaced by another package
  1328. *
  1329. * @param string $packageName
  1330. * @return bool
  1331. */
  1332. public static function isInstalled($packageName)
  1333. {
  1334. foreach (self::getInstalled() as $installed) {
  1335. if (isset($installed['versions'][$packageName])) {
  1336. return true;
  1337. }
  1338. }
  1339. return false;
  1340. }
  1341. /**
  1342. * Checks whether the given package satisfies a version constraint
  1343. *
  1344. * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
  1345. *
  1346. * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
  1347. *
  1348. * @param VersionParser $parser Install composer/semver to have access to this class and functionality
  1349. * @param string $packageName
  1350. * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
  1351. *
  1352. * @return bool
  1353. */
  1354. public static function satisfies(VersionParser $parser, $packageName, $constraint)
  1355. {
  1356. $constraint = $parser->parseConstraints($constraint);
  1357. $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
  1358. return $provided->matches($constraint);
  1359. }
  1360. /**
  1361. * Returns a version constraint representing all the range(s) which are installed for a given package
  1362. *
  1363. * It is easier to use this via isInstalled() with the $constraint argument if you need to check
  1364. * whether a given version of a package is installed, and not just whether it exists
  1365. *
  1366. * @param string $packageName
  1367. * @return string Version constraint usable with composer/semver
  1368. */
  1369. public static function getVersionRanges($packageName)
  1370. {
  1371. foreach (self::getInstalled() as $installed) {
  1372. if (!isset($installed['versions'][$packageName])) {
  1373. continue;
  1374. }
  1375. $ranges = array();
  1376. if (isset($installed['versions'][$packageName]['pretty_version'])) {
  1377. $ranges[] = $installed['versions'][$packageName]['pretty_version'];
  1378. }
  1379. if (array_key_exists('aliases', $installed['versions'][$packageName])) {
  1380. $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
  1381. }
  1382. if (array_key_exists('replaced', $installed['versions'][$packageName])) {
  1383. $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
  1384. }
  1385. if (array_key_exists('provided', $installed['versions'][$packageName])) {
  1386. $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
  1387. }
  1388. return implode(' || ', $ranges);
  1389. }
  1390. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  1391. }
  1392. /**
  1393. * @param string $packageName
  1394. * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
  1395. */
  1396. public static function getVersion($packageName)
  1397. {
  1398. foreach (self::getInstalled() as $installed) {
  1399. if (!isset($installed['versions'][$packageName])) {
  1400. continue;
  1401. }
  1402. if (!isset($installed['versions'][$packageName]['version'])) {
  1403. return null;
  1404. }
  1405. return $installed['versions'][$packageName]['version'];
  1406. }
  1407. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  1408. }
  1409. /**
  1410. * @param string $packageName
  1411. * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
  1412. */
  1413. public static function getPrettyVersion($packageName)
  1414. {
  1415. foreach (self::getInstalled() as $installed) {
  1416. if (!isset($installed['versions'][$packageName])) {
  1417. continue;
  1418. }
  1419. if (!isset($installed['versions'][$packageName]['pretty_version'])) {
  1420. return null;
  1421. }
  1422. return $installed['versions'][$packageName]['pretty_version'];
  1423. }
  1424. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  1425. }
  1426. /**
  1427. * @param string $packageName
  1428. * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
  1429. */
  1430. public static function getReference($packageName)
  1431. {
  1432. foreach (self::getInstalled() as $installed) {
  1433. if (!isset($installed['versions'][$packageName])) {
  1434. continue;
  1435. }
  1436. if (!isset($installed['versions'][$packageName]['reference'])) {
  1437. return null;
  1438. }
  1439. return $installed['versions'][$packageName]['reference'];
  1440. }
  1441. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  1442. }
  1443. /**
  1444. * @return array
  1445. * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}
  1446. */
  1447. public static function getRootPackage()
  1448. {
  1449. $installed = self::getInstalled();
  1450. return $installed[0]['root'];
  1451. }
  1452. /**
  1453. * Returns the raw installed.php data for custom implementations
  1454. *
  1455. * @return array[]
  1456. * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}, versions: list<string, array{pretty_version: ?string, version: ?string, aliases: ?string[], reference: ?string, replaced: ?string[], provided: ?string[]}>}
  1457. */
  1458. public static function getRawData()
  1459. {
  1460. return self::$installed;
  1461. }
  1462. /**
  1463. * Lets you reload the static array from another file
  1464. *
  1465. * This is only useful for complex integrations in which a project needs to use
  1466. * this class but then also needs to execute another project's autoloader in process,
  1467. * and wants to ensure both projects have access to their version of installed.php.
  1468. *
  1469. * A typical case would be PHPUnit, where it would need to make sure it reads all
  1470. * the data it needs from this class, then call reload() with
  1471. * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
  1472. * the project in which it runs can then also use this class safely, without
  1473. * interference between PHPUnit's dependencies and the project's dependencies.
  1474. *
  1475. * @param array[] $data A vendor/composer/installed.php data set
  1476. * @return void
  1477. *
  1478. * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}, versions: list<string, array{pretty_version: ?string, version: ?string, aliases: ?string[], reference: ?string, replaced: ?string[], provided: ?string[]}>} $data
  1479. */
  1480. public static function reload($data)
  1481. {
  1482. self::$installed = $data;
  1483. self::$installedByVendor = array();
  1484. }
  1485. /**
  1486. * @return array[]
  1487. */
  1488. private static function getInstalled()
  1489. {
  1490. if (null === self::$canGetVendors) {
  1491. self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
  1492. }
  1493. $installed = array();
  1494. if (self::$canGetVendors) {
  1495. // @phpstan-ignore-next-line
  1496. foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
  1497. if (isset(self::$installedByVendor[$vendorDir])) {
  1498. $installed[] = self::$installedByVendor[$vendorDir];
  1499. } elseif (is_file($vendorDir.'/composer/installed.php')) {
  1500. $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
  1501. }
  1502. }
  1503. }
  1504. $installed[] = self::$installed;
  1505. return $installed;
  1506. }
  1507. }