<?php /* * This file is part of Composer. * * (c) Nils Adermann <naderman@naderman.de> * Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer; use Composer\Autoload\ClassLoader; use Composer\Semver\VersionParser; /** * This class is copied in every Composer installed project and available to all * * To require it's presence, you can require `composer-runtime-api ^2.0` */ class InstalledVersions { private static $installed = array ( 'root' => array ( 'pretty_version' => 'dev-master', 'version' => 'dev-master', 'aliases' => array ( ), 'reference' => 'ef8951a8e7a670357f2839b1c7ec2d9e8e89e15b', 'name' => 'laravel/laravel', ), 'versions' => array ( 'asm89/stack-cors' => array ( 'pretty_version' => 'v2.0.3', 'version' => '2.0.3.0', 'aliases' => array ( ), 'reference' => '9cb795bf30988e8c96dd3c40623c48a877bc6714', ), 'brick/math' => array ( 'pretty_version' => '0.9.2', 'version' => '0.9.2.0', 'aliases' => array ( ), 'reference' => 'dff976c2f3487d42c1db75a3b180e2b9f0e72ce0', ), 'cordoval/hamcrest-php' => array ( 'replaced' => array ( 0 => '*', ), ), 'davedevelopment/hamcrest-php' => array ( 'replaced' => array ( 0 => '*', ), ), 'dnoegel/php-xdg-base-dir' => array ( 'pretty_version' => 'v0.1.1', 'version' => '0.1.1.0', 'aliases' => array ( ), 'reference' => '8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd', ), 'doctrine/inflector' => array ( 'pretty_version' => '2.0.3', 'version' => '2.0.3.0', 'aliases' => array ( ), 'reference' => '9cf661f4eb38f7c881cac67c75ea9b00bf97b210', ), 'doctrine/instantiator' => array ( 'pretty_version' => '1.4.0', 'version' => '1.4.0.0', 'aliases' => array ( ), 'reference' => 'd56bf6102915de5702778fe20f2de3b2fe570b5b', ), 'doctrine/lexer' => array ( 'pretty_version' => '1.2.1', 'version' => '1.2.1.0', 'aliases' => array ( ), 'reference' => 'e864bbf5904cb8f5bb334f99209b48018522f042', ), 'dragonmantank/cron-expression' => array ( 'pretty_version' => 'v3.1.0', 'version' => '3.1.0.0', 'aliases' => array ( ), 'reference' => '7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c', ), 'egulias/email-validator' => array ( 'pretty_version' => '2.1.25', 'version' => '2.1.25.0', 'aliases' => array ( ), 'reference' => '0dbf5d78455d4d6a41d186da50adc1122ec066f4', ), 'facade/flare-client-php' => array ( 'pretty_version' => '1.5.0', 'version' => '1.5.0.0', 'aliases' => array ( ), 'reference' => '9dd6f2b56486d939c4467b3f35475d44af57cf17', ), 'facade/ignition' => array ( 'pretty_version' => '2.7.0', 'version' => '2.7.0.0', 'aliases' => array ( ), 'reference' => 'bdc8b0b32c888f6edc838ca641358322b3d9506d', ), 'facade/ignition-contracts' => array ( 'pretty_version' => '1.0.2', 'version' => '1.0.2.0', 'aliases' => array ( ), 'reference' => '3c921a1cdba35b68a7f0ccffc6dffc1995b18267', ), 'fakerphp/faker' => array ( 'pretty_version' => 'v1.14.1', 'version' => '1.14.1.0', 'aliases' => array ( ), 'reference' => 'ed22aee8d17c7b396f74a58b1e7fefa4f90d5ef1', ), 'fideloper/proxy' => array ( 'pretty_version' => '4.4.1', 'version' => '4.4.1.0', 'aliases' => array ( ), 'reference' => 'c073b2bd04d1c90e04dc1b787662b558dd65ade0', ), 'filp/whoops' => array ( 'pretty_version' => '2.12.0', 'version' => '2.12.0.0', 'aliases' => array ( ), 'reference' => 'd501fd2658d55491a2295ff600ae5978eaad7403', ), 'fruitcake/laravel-cors' => array ( 'pretty_version' => 'v2.0.3', 'version' => '2.0.3.0', 'aliases' => array ( ), 'reference' => '01de0fe5f71c70d1930ee9a80385f9cc28e0f63a', ), 'graham-campbell/result-type' => array ( 'pretty_version' => 'v1.0.1', 'version' => '1.0.1.0', 'aliases' => array ( ), 'reference' => '7e279d2cd5d7fbb156ce46daada972355cea27bb', ), 'guzzlehttp/guzzle' => array ( 'pretty_version' => '7.3.0', 'version' => '7.3.0.0', 'aliases' => array ( ), 'reference' => '7008573787b430c1c1f650e3722d9bba59967628', ), 'guzzlehttp/promises' => array ( 'pretty_version' => '1.4.1', 'version' => '1.4.1.0', 'aliases' => array ( ), 'reference' => '8e7d04f1f6450fef59366c399cfad4b9383aa30d', ), 'guzzlehttp/psr7' => array ( 'pretty_version' => '1.8.1', 'version' => '1.8.1.0', 'aliases' => array ( ), 'reference' => '35ea11d335fd638b5882ff1725228b3d35496ab1', ), 'hamcrest/hamcrest-php' => array ( 'pretty_version' => 'v2.0.1', 'version' => '2.0.1.0', 'aliases' => array ( ), 'reference' => '8c3d0a3f6af734494ad8f6fbbee0ba92422859f3', ), 'illuminate/auth' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/broadcasting' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/bus' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/cache' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/collections' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/config' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/console' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/container' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/contracts' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/cookie' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/database' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/encryption' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/events' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/filesystem' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/hashing' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/http' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/log' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/macroable' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/mail' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/notifications' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/pagination' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/pipeline' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/queue' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/redis' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/routing' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/session' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/support' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/testing' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/translation' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/validation' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'illuminate/view' => array ( 'replaced' => array ( 0 => 'v8.35.1', ), ), 'kodova/hamcrest-php' => array ( 'replaced' => array ( 0 => '*', ), ), 'laravel/framework' => array ( 'pretty_version' => 'v8.35.1', 'version' => '8.35.1.0', 'aliases' => array ( ), 'reference' => 'd118c0df39e7524131176aaf76493eae63a8a602', ), 'laravel/laravel' => array ( 'pretty_version' => 'dev-master', 'version' => 'dev-master', 'aliases' => array ( ), 'reference' => 'ef8951a8e7a670357f2839b1c7ec2d9e8e89e15b', ), 'laravel/sail' => array ( 'pretty_version' => 'v1.4.10', 'version' => '1.4.10.0', 'aliases' => array ( ), 'reference' => '4f0b2bac128ee60a11d9758651f103f78157474a', ), 'laravel/sanctum' => array ( 'pretty_version' => 'v2.10.0', 'version' => '2.10.0.0', 'aliases' => array ( ), 'reference' => 'a08cfee365c6b6df3e91c8f43b92f7163ffc8a94', ), 'laravel/tinker' => array ( 'pretty_version' => 'v2.6.1', 'version' => '2.6.1.0', 'aliases' => array ( ), 'reference' => '04ad32c1a3328081097a181875733fa51f402083', ), 'league/commonmark' => array ( 'pretty_version' => '1.5.8', 'version' => '1.5.8.0', 'aliases' => array ( ), 'reference' => '08fa59b8e4e34ea8a773d55139ae9ac0e0aecbaf', ), 'league/flysystem' => array ( 'pretty_version' => '1.1.3', 'version' => '1.1.3.0', 'aliases' => array ( ), 'reference' => '9be3b16c877d477357c015cec057548cf9b2a14a', ), 'league/mime-type-detection' => array ( 'pretty_version' => '1.7.0', 'version' => '1.7.0.0', 'aliases' => array ( ), 'reference' => '3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3', ), 'mockery/mockery' => array ( 'pretty_version' => '1.4.3', 'version' => '1.4.3.0', 'aliases' => array ( ), 'reference' => 'd1339f64479af1bee0e82a0413813fe5345a54ea', ), 'monolog/monolog' => array ( 'pretty_version' => '2.2.0', 'version' => '2.2.0.0', 'aliases' => array ( ), 'reference' => '1cb1cde8e8dd0f70cc0fe51354a59acad9302084', ), 'mtdowling/cron-expression' => array ( 'replaced' => array ( 0 => '^1.0', ), ), 'myclabs/deep-copy' => array ( 'pretty_version' => '1.10.2', 'version' => '1.10.2.0', 'aliases' => array ( ), 'reference' => '776f831124e9c62e1a2c601ecc52e776d8bb7220', 'replaced' => array ( 0 => '1.10.2', ), ), 'nesbot/carbon' => array ( 'pretty_version' => '2.46.0', 'version' => '2.46.0.0', 'aliases' => array ( ), 'reference' => '2fd2c4a77d58a4e95234c8a61c5df1f157a91bf4', ), 'nikic/php-parser' => array ( 'pretty_version' => 'v4.10.4', 'version' => '4.10.4.0', 'aliases' => array ( ), 'reference' => 'c6d052fc58cb876152f89f532b95a8d7907e7f0e', ), 'nunomaduro/collision' => array ( 'pretty_version' => 'v5.3.0', 'version' => '5.3.0.0', 'aliases' => array ( ), 'reference' => 'aca63581f380f63a492b1e3114604e411e39133a', ), 'opis/closure' => array ( 'pretty_version' => '3.6.1', 'version' => '3.6.1.0', 'aliases' => array ( ), 'reference' => '943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5', ), 'phar-io/manifest' => array ( 'pretty_version' => '2.0.1', 'version' => '2.0.1.0', 'aliases' => array ( ), 'reference' => '85265efd3af7ba3ca4b2a2c34dbfc5788dd29133', ), 'phar-io/version' => array ( 'pretty_version' => '3.1.0', 'version' => '3.1.0.0', 'aliases' => array ( ), 'reference' => 'bae7c545bef187884426f042434e561ab1ddb182', ), 'phpdocumentor/reflection-common' => array ( 'pretty_version' => '2.2.0', 'version' => '2.2.0.0', 'aliases' => array ( ), 'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b', ), 'phpdocumentor/reflection-docblock' => array ( 'pretty_version' => '5.2.2', 'version' => '5.2.2.0', 'aliases' => array ( ), 'reference' => '069a785b2141f5bcf49f3e353548dc1cce6df556', ), 'phpdocumentor/type-resolver' => array ( 'pretty_version' => '1.4.0', 'version' => '1.4.0.0', 'aliases' => array ( ), 'reference' => '6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0', ), 'phpoption/phpoption' => array ( 'pretty_version' => '1.7.5', 'version' => '1.7.5.0', 'aliases' => array ( ), 'reference' => '994ecccd8f3283ecf5ac33254543eb0ac946d525', ), 'phpspec/prophecy' => array ( 'pretty_version' => '1.13.0', 'version' => '1.13.0.0', 'aliases' => array ( ), 'reference' => 'be1996ed8adc35c3fd795488a653f4b518be70ea', ), 'phpunit/php-code-coverage' => array ( 'pretty_version' => '9.2.6', 'version' => '9.2.6.0', 'aliases' => array ( ), 'reference' => 'f6293e1b30a2354e8428e004689671b83871edde', ), 'phpunit/php-file-iterator' => array ( 'pretty_version' => '3.0.5', 'version' => '3.0.5.0', 'aliases' => array ( ), 'reference' => 'aa4be8575f26070b100fccb67faabb28f21f66f8', ), 'phpunit/php-invoker' => array ( 'pretty_version' => '3.1.1', 'version' => '3.1.1.0', 'aliases' => array ( ), 'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67', ), 'phpunit/php-text-template' => array ( 'pretty_version' => '2.0.4', 'version' => '2.0.4.0', 'aliases' => array ( ), 'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28', ), 'phpunit/php-timer' => array ( 'pretty_version' => '5.0.3', 'version' => '5.0.3.0', 'aliases' => array ( ), 'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2', ), 'phpunit/phpunit' => array ( 'pretty_version' => '9.5.4', 'version' => '9.5.4.0', 'aliases' => array ( ), 'reference' => 'c73c6737305e779771147af66c96ca6a7ed8a741', ), 'psr/container' => array ( 'pretty_version' => '1.1.1', 'version' => '1.1.1.0', 'aliases' => array ( ), 'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf', ), 'psr/container-implementation' => array ( 'provided' => array ( 0 => '1.0', ), ), 'psr/event-dispatcher' => array ( 'pretty_version' => '1.0.0', 'version' => '1.0.0.0', 'aliases' => array ( ), 'reference' => 'dbefd12671e8a14ec7f180cab83036ed26714bb0', ), 'psr/event-dispatcher-implementation' => array ( 'provided' => array ( 0 => '1.0', ), ), 'psr/http-client' => array ( 'pretty_version' => '1.0.1', 'version' => '1.0.1.0', 'aliases' => array ( ), 'reference' => '2dfb5f6c5eff0e91e20e913f8c5452ed95b86621', ), 'psr/http-client-implementation' => array ( 'provided' => array ( 0 => '1.0', ), ), 'psr/http-message' => array ( 'pretty_version' => '1.0.1', 'version' => '1.0.1.0', 'aliases' => array ( ), 'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363', ), 'psr/http-message-implementation' => array ( 'provided' => array ( 0 => '1.0', ), ), 'psr/log' => array ( 'pretty_version' => '1.1.3', 'version' => '1.1.3.0', 'aliases' => array ( ), 'reference' => '0f73288fd15629204f9d42b7055f72dacbe811fc', ), 'psr/log-implementation' => array ( 'provided' => array ( 0 => '1.0.0', 1 => '1.0', ), ), 'psr/simple-cache' => array ( 'pretty_version' => '1.0.1', 'version' => '1.0.1.0', 'aliases' => array ( ), 'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b', ), 'psy/psysh' => array ( 'pretty_version' => 'v0.10.7', 'version' => '0.10.7.0', 'aliases' => array ( ), 'reference' => 'a395af46999a12006213c0c8346c9445eb31640c', ), 'ralouphie/getallheaders' => array ( 'pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'aliases' => array ( ), 'reference' => '120b605dfeb996808c31b6477290a714d356e822', ), 'ramsey/collection' => array ( 'pretty_version' => '1.1.3', 'version' => '1.1.3.0', 'aliases' => array ( ), 'reference' => '28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1', ), 'ramsey/uuid' => array ( 'pretty_version' => '4.1.1', 'version' => '4.1.1.0', 'aliases' => array ( ), 'reference' => 'cd4032040a750077205918c86049aa0f43d22947', ), 'rhumsaa/uuid' => array ( 'replaced' => array ( 0 => '4.1.1', ), ), 'sebastian/cli-parser' => array ( 'pretty_version' => '1.0.1', 'version' => '1.0.1.0', 'aliases' => array ( ), 'reference' => '442e7c7e687e42adc03470c7b668bc4b2402c0b2', ), 'sebastian/code-unit' => array ( 'pretty_version' => '1.0.8', 'version' => '1.0.8.0', 'aliases' => array ( ), 'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120', ), 'sebastian/code-unit-reverse-lookup' => array ( 'pretty_version' => '2.0.3', 'version' => '2.0.3.0', 'aliases' => array ( ), 'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5', ), 'sebastian/comparator' => array ( 'pretty_version' => '4.0.6', 'version' => '4.0.6.0', 'aliases' => array ( ), 'reference' => '55f4261989e546dc112258c7a75935a81a7ce382', ), 'sebastian/complexity' => array ( 'pretty_version' => '2.0.2', 'version' => '2.0.2.0', 'aliases' => array ( ), 'reference' => '739b35e53379900cc9ac327b2147867b8b6efd88', ), 'sebastian/diff' => array ( 'pretty_version' => '4.0.4', 'version' => '4.0.4.0', 'aliases' => array ( ), 'reference' => '3461e3fccc7cfdfc2720be910d3bd73c69be590d', ), 'sebastian/environment' => array ( 'pretty_version' => '5.1.3', 'version' => '5.1.3.0', 'aliases' => array ( ), 'reference' => '388b6ced16caa751030f6a69e588299fa09200ac', ), 'sebastian/exporter' => array ( 'pretty_version' => '4.0.3', 'version' => '4.0.3.0', 'aliases' => array ( ), 'reference' => 'd89cc98761b8cb5a1a235a6b703ae50d34080e65', ), 'sebastian/global-state' => array ( 'pretty_version' => '5.0.2', 'version' => '5.0.2.0', 'aliases' => array ( ), 'reference' => 'a90ccbddffa067b51f574dea6eb25d5680839455', ), 'sebastian/lines-of-code' => array ( 'pretty_version' => '1.0.3', 'version' => '1.0.3.0', 'aliases' => array ( ), 'reference' => 'c1c2e997aa3146983ed888ad08b15470a2e22ecc', ), 'sebastian/object-enumerator' => array ( 'pretty_version' => '4.0.4', 'version' => '4.0.4.0', 'aliases' => array ( ), 'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71', ), 'sebastian/object-reflector' => array ( 'pretty_version' => '2.0.4', 'version' => '2.0.4.0', 'aliases' => array ( ), 'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7', ), 'sebastian/recursion-context' => array ( 'pretty_version' => '4.0.4', 'version' => '4.0.4.0', 'aliases' => array ( ), 'reference' => 'cd9d8cf3c5804de4341c283ed787f099f5506172', ), 'sebastian/resource-operations' => array ( 'pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'aliases' => array ( ), 'reference' => '0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8', ), 'sebastian/type' => array ( 'pretty_version' => '2.3.1', 'version' => '2.3.1.0', 'aliases' => array ( ), 'reference' => '81cd61ab7bbf2de744aba0ea61fae32f721df3d2', ), 'sebastian/version' => array ( 'pretty_version' => '3.0.2', 'version' => '3.0.2.0', 'aliases' => array ( ), 'reference' => 'c6c1022351a901512170118436c764e473f6de8c', ), 'swiftmailer/swiftmailer' => array ( 'pretty_version' => 'v6.2.7', 'version' => '6.2.7.0', 'aliases' => array ( ), 'reference' => '15f7faf8508e04471f666633addacf54c0ab5933', ), 'symfony/console' => array ( 'pretty_version' => 'v5.2.6', 'version' => '5.2.6.0', 'aliases' => array ( ), 'reference' => '35f039df40a3b335ebf310f244cb242b3a83ac8d', ), 'symfony/css-selector' => array ( 'pretty_version' => 'v5.2.4', 'version' => '5.2.4.0', 'aliases' => array ( ), 'reference' => 'f65f217b3314504a1ec99c2d6ef69016bb13490f', ), 'symfony/deprecation-contracts' => array ( 'pretty_version' => 'v2.2.0', 'version' => '2.2.0.0', 'aliases' => array ( ), 'reference' => '5fa56b4074d1ae755beb55617ddafe6f5d78f665', ), 'symfony/error-handler' => array ( 'pretty_version' => 'v5.2.6', 'version' => '5.2.6.0', 'aliases' => array ( ), 'reference' => 'bdb7fb4188da7f4211e4b88350ba0dfdad002b03', ), 'symfony/event-dispatcher' => array ( 'pretty_version' => 'v5.2.4', 'version' => '5.2.4.0', 'aliases' => array ( ), 'reference' => 'd08d6ec121a425897951900ab692b612a61d6240', ), 'symfony/event-dispatcher-contracts' => array ( 'pretty_version' => 'v2.2.0', 'version' => '2.2.0.0', 'aliases' => array ( ), 'reference' => '0ba7d54483095a198fa51781bc608d17e84dffa2', ), 'symfony/event-dispatcher-implementation' => array ( 'provided' => array ( 0 => '2.0', ), ), 'symfony/finder' => array ( 'pretty_version' => 'v5.2.4', 'version' => '5.2.4.0', 'aliases' => array ( ), 'reference' => '0d639a0943822626290d169965804f79400e6a04', ), 'symfony/http-client-contracts' => array ( 'pretty_version' => 'v2.3.1', 'version' => '2.3.1.0', 'aliases' => array ( ), 'reference' => '41db680a15018f9c1d4b23516059633ce280ca33', ), 'symfony/http-foundation' => array ( 'pretty_version' => 'v5.2.4', 'version' => '5.2.4.0', 'aliases' => array ( ), 'reference' => '54499baea7f7418bce7b5ec92770fd0799e8e9bf', ), 'symfony/http-kernel' => array ( 'pretty_version' => 'v5.2.6', 'version' => '5.2.6.0', 'aliases' => array ( ), 'reference' => 'f34de4c61ca46df73857f7f36b9a3805bdd7e3b2', ), 'symfony/mime' => array ( 'pretty_version' => 'v5.2.6', 'version' => '5.2.6.0', 'aliases' => array ( ), 'reference' => '1b2092244374cbe48ae733673f2ca0818b37197b', ), 'symfony/polyfill-ctype' => array ( 'pretty_version' => 'v1.22.1', 'version' => '1.22.1.0', 'aliases' => array ( ), 'reference' => 'c6c942b1ac76c82448322025e084cadc56048b4e', ), 'symfony/polyfill-iconv' => array ( 'pretty_version' => 'v1.22.1', 'version' => '1.22.1.0', 'aliases' => array ( ), 'reference' => '06fb361659649bcfd6a208a0f1fcaf4e827ad342', ), 'symfony/polyfill-intl-grapheme' => array ( 'pretty_version' => 'v1.22.1', 'version' => '1.22.1.0', 'aliases' => array ( ), 'reference' => '5601e09b69f26c1828b13b6bb87cb07cddba3170', ), 'symfony/polyfill-intl-idn' => array ( 'pretty_version' => 'v1.22.1', 'version' => '1.22.1.0', 'aliases' => array ( ), 'reference' => '2d63434d922daf7da8dd863e7907e67ee3031483', ), 'symfony/polyfill-intl-normalizer' => array ( 'pretty_version' => 'v1.22.1', 'version' => '1.22.1.0', 'aliases' => array ( ), 'reference' => '43a0283138253ed1d48d352ab6d0bdb3f809f248', ), 'symfony/polyfill-mbstring' => array ( 'pretty_version' => 'v1.22.1', 'version' => '1.22.1.0', 'aliases' => array ( ), 'reference' => '5232de97ee3b75b0360528dae24e73db49566ab1', ), 'symfony/polyfill-php72' => array ( 'pretty_version' => 'v1.22.1', 'version' => '1.22.1.0', 'aliases' => array ( ), 'reference' => 'cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9', ), 'symfony/polyfill-php73' => array ( 'pretty_version' => 'v1.22.1', 'version' => '1.22.1.0', 'aliases' => array ( ), 'reference' => 'a678b42e92f86eca04b7fa4c0f6f19d097fb69e2', ), 'symfony/polyfill-php80' => array ( 'pretty_version' => 'v1.22.1', 'version' => '1.22.1.0', 'aliases' => array ( ), 'reference' => 'dc3063ba22c2a1fd2f45ed856374d79114998f91', ), 'symfony/process' => array ( 'pretty_version' => 'v5.2.4', 'version' => '5.2.4.0', 'aliases' => array ( ), 'reference' => '313a38f09c77fbcdc1d223e57d368cea76a2fd2f', ), 'symfony/routing' => array ( 'pretty_version' => 'v5.2.6', 'version' => '5.2.6.0', 'aliases' => array ( ), 'reference' => '31fba555f178afd04d54fd26953501b2c3f0c6e6', ), 'symfony/service-contracts' => array ( 'pretty_version' => 'v2.2.0', 'version' => '2.2.0.0', 'aliases' => array ( ), 'reference' => 'd15da7ba4957ffb8f1747218be9e1a121fd298a1', ), 'symfony/string' => array ( 'pretty_version' => 'v5.2.6', 'version' => '5.2.6.0', 'aliases' => array ( ), 'reference' => 'ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572', ), 'symfony/translation' => array ( 'pretty_version' => 'v5.2.6', 'version' => '5.2.6.0', 'aliases' => array ( ), 'reference' => '2cc7f45d96db9adfcf89adf4401d9dfed509f4e1', ), 'symfony/translation-contracts' => array ( 'pretty_version' => 'v2.3.0', 'version' => '2.3.0.0', 'aliases' => array ( ), 'reference' => 'e2eaa60b558f26a4b0354e1bbb25636efaaad105', ), 'symfony/translation-implementation' => array ( 'provided' => array ( 0 => '2.3', ), ), 'symfony/var-dumper' => array ( 'pretty_version' => 'v5.2.6', 'version' => '5.2.6.0', 'aliases' => array ( ), 'reference' => '89412a68ea2e675b4e44f260a5666729f77f668e', ), 'theseer/tokenizer' => array ( 'pretty_version' => '1.2.0', 'version' => '1.2.0.0', 'aliases' => array ( ), 'reference' => '75a63c33a8577608444246075ea0af0d052e452a', ), 'tijsverkoyen/css-to-inline-styles' => array ( 'pretty_version' => '2.2.3', 'version' => '2.2.3.0', 'aliases' => array ( ), 'reference' => 'b43b05cf43c1b6d849478965062b6ef73e223bb5', ), 'vlucas/phpdotenv' => array ( 'pretty_version' => 'v5.3.0', 'version' => '5.3.0.0', 'aliases' => array ( ), 'reference' => 'b3eac5c7ac896e52deab4a99068e3f4ab12d9e56', ), 'voku/portable-ascii' => array ( 'pretty_version' => '1.5.6', 'version' => '1.5.6.0', 'aliases' => array ( ), 'reference' => '80953678b19901e5165c56752d087fc11526017c', ), 'webmozart/assert' => array ( 'pretty_version' => '1.10.0', 'version' => '1.10.0.0', 'aliases' => array ( ), 'reference' => '6964c76c7804814a842473e0c8fd15bab0f18e25', ), ), ); private static $canGetVendors; private static $installedByVendor = array(); /** * Returns a list of all package names which are present, either by being installed, replaced or provided * * @return string[] * @psalm-return list<string> */ public static function getInstalledPackages() { $packages = array(); foreach (self::getInstalled() as $installed) { $packages[] = array_keys($installed['versions']); } if (1 === \count($packages)) { return $packages[0]; } return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); } /** * Checks whether the given package is installed * * This also returns true if the package name is provided or replaced by another package * * @param string $packageName * @return bool */ public static function isInstalled($packageName) { foreach (self::getInstalled() as $installed) { if (isset($installed['versions'][$packageName])) { return true; } } return false; } /** * Checks whether the given package satisfies a version constraint * * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: * * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') * * @param VersionParser $parser Install composer/semver to have access to this class and functionality * @param string $packageName * @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 * * @return bool */ public static function satisfies(VersionParser $parser, $packageName, $constraint) { $constraint = $parser->parseConstraints($constraint); $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); return $provided->matches($constraint); } /** * Returns a version constraint representing all the range(s) which are installed for a given package * * It is easier to use this via isInstalled() with the $constraint argument if you need to check * whether a given version of a package is installed, and not just whether it exists * * @param string $packageName * @return string Version constraint usable with composer/semver */ public static function getVersionRanges($packageName) { foreach (self::getInstalled() as $installed) { if (!isset($installed['versions'][$packageName])) { continue; } $ranges = array(); if (isset($installed['versions'][$packageName]['pretty_version'])) { $ranges[] = $installed['versions'][$packageName]['pretty_version']; } if (array_key_exists('aliases', $installed['versions'][$packageName])) { $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); } if (array_key_exists('replaced', $installed['versions'][$packageName])) { $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); } if (array_key_exists('provided', $installed['versions'][$packageName])) { $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); } return implode(' || ', $ranges); } throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); } /** * @param string $packageName * @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 */ public static function getVersion($packageName) { foreach (self::getInstalled() as $installed) { if (!isset($installed['versions'][$packageName])) { continue; } if (!isset($installed['versions'][$packageName]['version'])) { return null; } return $installed['versions'][$packageName]['version']; } throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); } /** * @param string $packageName * @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 */ public static function getPrettyVersion($packageName) { foreach (self::getInstalled() as $installed) { if (!isset($installed['versions'][$packageName])) { continue; } if (!isset($installed['versions'][$packageName]['pretty_version'])) { return null; } return $installed['versions'][$packageName]['pretty_version']; } throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); } /** * @param string $packageName * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference */ public static function getReference($packageName) { foreach (self::getInstalled() as $installed) { if (!isset($installed['versions'][$packageName])) { continue; } if (!isset($installed['versions'][$packageName]['reference'])) { return null; } return $installed['versions'][$packageName]['reference']; } throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); } /** * @return array * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]} */ public static function getRootPackage() { $installed = self::getInstalled(); return $installed[0]['root']; } /** * Returns the raw installed.php data for custom implementations * * @return array[] * @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[]}>} */ public static function getRawData() { return self::$installed; } /** * Lets you reload the static array from another file * * This is only useful for complex integrations in which a project needs to use * this class but then also needs to execute another project's autoloader in process, * and wants to ensure both projects have access to their version of installed.php. * * A typical case would be PHPUnit, where it would need to make sure it reads all * the data it needs from this class, then call reload() with * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure * the project in which it runs can then also use this class safely, without * interference between PHPUnit's dependencies and the project's dependencies. * * @param array[] $data A vendor/composer/installed.php data set * @return void * * @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 */ public static function reload($data) { self::$installed = $data; self::$installedByVendor = array(); } /** * @return array[] */ private static function getInstalled() { if (null === self::$canGetVendors) { self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); } $installed = array(); if (self::$canGetVendors) { // @phpstan-ignore-next-line foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { if (isset(self::$installedByVendor[$vendorDir])) { $installed[] = self::$installedByVendor[$vendorDir]; } elseif (is_file($vendorDir.'/composer/installed.php')) { $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; } } } $installed[] = self::$installed; return $installed; } }