ComposerUpdate

This commit is contained in:
邹景立 2021-06-09 11:20:34 +08:00
parent 612077be96
commit aa03aa6391
4 changed files with 477 additions and 594 deletions

View File

@ -338,7 +338,7 @@ class ClassLoader
* Loads the given class or interface. * Loads the given class or interface.
* *
* @param string $class The name of the class * @param string $class The name of the class
* @return bool|null True if loaded, null otherwise * @return true|null True if loaded, null otherwise
*/ */
public function loadClass($class) public function loadClass($class)
{ {
@ -347,6 +347,8 @@ class ClassLoader
return true; return true;
} }
return null;
} }
/** /**

View File

@ -1,444 +1,325 @@
<?php <?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; namespace Composer;
use Composer\Autoload\ClassLoader; use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser; use Composer\Semver\VersionParser;
/**
* This class is copied in every Composer installed project and available to all
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require it's presence, you can require `composer-runtime-api ^2.0`
*/
class InstalledVersions class InstalledVersions
{ {
private static $installed = array ( private static $installed;
'root' => private static $canGetVendors;
array ( private static $installedByVendor = array();
'pretty_version' => '6.x-dev',
'version' => '6.9999999.9999999.9999999-dev',
'aliases' =>
array (
),
'reference' => 'd53fed33e1f513f043cccc0fbb69b48c0d9fbe41',
'name' => 'zoujingli/thinkadmin',
),
'versions' =>
array (
'endroid/qr-code' =>
array (
'pretty_version' => '1.9.3',
'version' => '1.9.3.0',
'aliases' =>
array (
),
'reference' => 'c9644bec2a9cc9318e98d1437de3c628dcd1ef93',
),
'league/flysystem' =>
array (
'pretty_version' => '1.0.70',
'version' => '1.0.70.0',
'aliases' =>
array (
),
'reference' => '585824702f534f8d3cf7fab7225e8466cc4b7493',
),
'league/flysystem-cached-adapter' =>
array (
'pretty_version' => '1.1.0',
'version' => '1.1.0.0',
'aliases' =>
array (
),
'reference' => 'd1925efb2207ac4be3ad0c40b8277175f99ffaff',
),
'psr/cache' =>
array (
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'aliases' =>
array (
),
'reference' => 'd11b50ad223250cf17b86e38383413f5a6764bf8',
),
'psr/container' =>
array (
'pretty_version' => '1.0.0',
'version' => '1.0.0.0',
'aliases' =>
array (
),
'reference' => 'b7ce3b176482dbbc1245ebf52b181af44c2cf55f',
),
'psr/log' =>
array (
'pretty_version' => '1.1.4',
'version' => '1.1.4.0',
'aliases' =>
array (
),
'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
),
'psr/simple-cache' =>
array (
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'aliases' =>
array (
),
'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b',
),
'symfony/options-resolver' =>
array (
'pretty_version' => 'v3.4.47',
'version' => '3.4.47.0',
'aliases' =>
array (
),
'reference' => 'c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744',
),
'topthink/framework' =>
array (
'pretty_version' => 'v6.0.8',
'version' => '6.0.8.0',
'aliases' =>
array (
),
'reference' => '4789343672aef06d571d556da369c0e156609bce',
),
'topthink/think-helper' =>
array (
'pretty_version' => 'v3.1.4',
'version' => '3.1.4.0',
'aliases' =>
array (
),
'reference' => 'c28d37743bda4a0455286ca85b17b5791d626e10',
),
'topthink/think-orm' =>
array (
'pretty_version' => 'v2.0.40',
'version' => '2.0.40.0',
'aliases' =>
array (
),
'reference' => '1119d979b850849f3725856460cf108eec1c3eb8',
),
'topthink/think-template' =>
array (
'pretty_version' => 'v2.0.8',
'version' => '2.0.8.0',
'aliases' =>
array (
),
'reference' => 'abfc293f74f9ef5127b5c416310a01fe42e59368',
),
'topthink/think-view' =>
array (
'pretty_version' => 'v1.0.14',
'version' => '1.0.14.0',
'aliases' =>
array (
),
'reference' => 'edce0ae2c9551ab65f9e94a222604b0dead3576d',
),
'zoujingli/ip2region' =>
array (
'pretty_version' => 'v1.0.10',
'version' => '1.0.10.0',
'aliases' =>
array (
),
'reference' => '453480d0ab5b6fdbdf4aa400b7598a10ff2dc5c0',
),
'zoujingli/think-library' =>
array (
'pretty_version' => 'v6.0.x-dev',
'version' => '6.0.9999999.9999999-dev',
'aliases' =>
array (
0 => '9999999-dev',
),
'reference' => 'dab37cf567def670988c452943022ff1b8bb4176',
),
'zoujingli/thinkadmin' =>
array (
'pretty_version' => '6.x-dev',
'version' => '6.9999999.9999999.9999999-dev',
'aliases' =>
array (
),
'reference' => 'd53fed33e1f513f043cccc0fbb69b48c0d9fbe41',
),
'zoujingli/wechat-developer' =>
array (
'pretty_version' => 'v1.2.31',
'version' => '1.2.31.0',
'aliases' =>
array (
),
'reference' => '0cf699c725f69d66657a50e60d22f71c9e5a5e16',
),
),
);
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)));
}
/**
* Returns a list of all package names with a specific type e.g. 'library'
*
* @param string $type
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackagesByType($type)
{
$packagesByType = array();
foreach (self::getInstalled() as $installed) {
foreach ($installed['versions'] as $name => $package) {
if (isset($package['type']) && $package['type'] === $type) {
$packagesByType[] = $name;
}
}
}
return $packagesByType;
}
public static function getInstalledPackages() /**
{ * Checks whether the given package is installed
$packages = array(); *
foreach (self::getInstalled() as $installed) { * This also returns true if the package name is provided or replaced by another package
$packages[] = array_keys($installed['versions']); *
} * @param string $packageName
* @param bool $includeDevRequirements
if (1 === \count($packages)) { * @return bool
return $packages[0]; */
} public static function isInstalled($packageName, $includeDevRequirements = true)
{
return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); foreach (self::getInstalled() as $installed) {
} if (isset($installed['versions'][$packageName])) {
return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
}
}
return false;
}
/**
* Checks whether the given package satisfies a version constraint
public static function isInstalled($packageName) *
{ * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
foreach (self::getInstalled() as $installed) { *
if (isset($installed['versions'][$packageName])) { * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
return true; *
} * @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 false; * @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
*
public static function satisfies(VersionParser $parser, $packageName, $constraint) * @param string $packageName
{ * @return string Version constraint usable with composer/semver
$constraint = $parser->parseConstraints($constraint); */
$provided = $parser->parseConstraints(self::getVersionRanges($packageName)); public static function getVersionRanges($packageName)
{
return $provided->matches($constraint); 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']);
}
public static function getVersionRanges($packageName) if (array_key_exists('replaced', $installed['versions'][$packageName])) {
{ $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
foreach (self::getInstalled() as $installed) { }
if (!isset($installed['versions'][$packageName])) { if (array_key_exists('provided', $installed['versions'][$packageName])) {
continue; $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
} }
$ranges = array(); return implode(' || ', $ranges);
if (isset($installed['versions'][$packageName]['pretty_version'])) { }
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
} throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
if (array_key_exists('aliases', $installed['versions'][$packageName])) { }
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
} /**
if (array_key_exists('replaced', $installed['versions'][$packageName])) { * @param string $packageName
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); * @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
} */
if (array_key_exists('provided', $installed['versions'][$packageName])) { public static function getVersion($packageName)
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); {
} foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
return implode(' || ', $ranges); continue;
} }
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); if (!isset($installed['versions'][$packageName]['version'])) {
} return null;
}
return $installed['versions'][$packageName]['version'];
}
public static function getVersion($packageName) throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
{ }
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) { /**
continue; * @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
*/
if (!isset($installed['versions'][$packageName]['version'])) { public static function getPrettyVersion($packageName)
return null; {
} foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
return $installed['versions'][$packageName]['version']; continue;
} }
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); if (!isset($installed['versions'][$packageName]['pretty_version'])) {
} return null;
}
return $installed['versions'][$packageName]['pretty_version'];
}
public static function getPrettyVersion($packageName) throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
{ }
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) { /**
continue; * @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
*/
if (!isset($installed['versions'][$packageName]['pretty_version'])) { public static function getReference($packageName)
return null; {
} foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
return $installed['versions'][$packageName]['pretty_version']; continue;
} }
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); if (!isset($installed['versions'][$packageName]['reference'])) {
} return null;
}
return $installed['versions'][$packageName]['reference'];
}
public static function getReference($packageName) throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
{ }
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) { /**
continue; * @param string $packageName
} * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
*/
if (!isset($installed['versions'][$packageName]['reference'])) { public static function getInstallPath($packageName)
return null; {
} foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
return $installed['versions'][$packageName]['reference']; continue;
} }
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
} }
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
public static function getRootPackage() * @return array
{ * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
$installed = self::getInstalled(); */
public static function getRootPackage()
return $installed[0]['root']; {
} $installed = self::getInstalled();
return $installed[0]['root'];
}
/**
* Returns the raw installed.php data for custom implementations
*
* @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.
public static function getRawData() * @return array[]
{ * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
@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); */
public static function getRawData()
return self::$installed; {
} @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);
if (null === self::$installed) {
self::$installed = include __DIR__ . '/installed.php';
}
return self::$installed;
}
public static function getAllRawData()
{ /**
return self::getInstalled(); * Returns the raw data of all installed.php which are currently loaded for custom implementations
} *
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
*/
public static function getAllRawData()
{
return self::getInstalled();
}
/**
* 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
public static function reload($data) * interference between PHPUnit's dependencies and the project's dependencies.
{ *
self::$installed = $data; * @param array[] $data A vendor/composer/installed.php data set
self::$installedByVendor = array(); * @return void
} *
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
*/
public static function reload($data)
{
self::$installed = $data;
private static function getInstalled() self::$installedByVendor = array();
{ }
if (null === self::$canGetVendors) {
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); /**
} * @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
$installed = array(); */
private static function getInstalled()
if (self::$canGetVendors) { {
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { if (null === self::$canGetVendors) {
if (isset(self::$installedByVendor[$vendorDir])) { self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
$installed[] = self::$installedByVendor[$vendorDir]; }
} elseif (is_file($vendorDir.'/composer/installed.php')) {
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; $installed = array();
}
} if (self::$canGetVendors) {
} foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
if (isset(self::$installedByVendor[$vendorDir])) {
$installed[] = self::$installed; $installed[] = self::$installedByVendor[$vendorDir];
} elseif (is_file($vendorDir.'/composer/installed.php')) {
return $installed; $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
} if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
self::$installed = $installed[count($installed) - 1];
}
}
}
}
if (null === self::$installed) {
self::$installed = require __DIR__ . '/installed.php';
}
$installed[] = self::$installed;
return $installed;
}
} }

View File

@ -1,169 +1,169 @@
<?php return array ( <?php return array(
'root' => 'root' => array(
array (
'pretty_version' => '6.x-dev', 'pretty_version' => '6.x-dev',
'version' => '6.9999999.9999999.9999999-dev', 'version' => '6.9999999.9999999.9999999-dev',
'aliases' => 'type' => 'project',
array ( 'install_path' => __DIR__ . '/../../',
), 'aliases' => array(),
'reference' => 'd53fed33e1f513f043cccc0fbb69b48c0d9fbe41', 'reference' => '612077be96278a23df4f517da2088fc3147574e0',
'name' => 'zoujingli/thinkadmin', 'name' => 'zoujingli/thinkadmin',
'dev' => false,
), ),
'versions' => 'versions' => array(
array ( 'endroid/qr-code' => array(
'endroid/qr-code' =>
array (
'pretty_version' => '1.9.3', 'pretty_version' => '1.9.3',
'version' => '1.9.3.0', 'version' => '1.9.3.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../endroid/qr-code',
), 'aliases' => array(),
'reference' => 'c9644bec2a9cc9318e98d1437de3c628dcd1ef93', 'reference' => 'c9644bec2a9cc9318e98d1437de3c628dcd1ef93',
'dev_requirement' => false,
), ),
'league/flysystem' => 'league/flysystem' => array(
array (
'pretty_version' => '1.0.70', 'pretty_version' => '1.0.70',
'version' => '1.0.70.0', 'version' => '1.0.70.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../league/flysystem',
), 'aliases' => array(),
'reference' => '585824702f534f8d3cf7fab7225e8466cc4b7493', 'reference' => '585824702f534f8d3cf7fab7225e8466cc4b7493',
'dev_requirement' => false,
), ),
'league/flysystem-cached-adapter' => 'league/flysystem-cached-adapter' => array(
array (
'pretty_version' => '1.1.0', 'pretty_version' => '1.1.0',
'version' => '1.1.0.0', 'version' => '1.1.0.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../league/flysystem-cached-adapter',
), 'aliases' => array(),
'reference' => 'd1925efb2207ac4be3ad0c40b8277175f99ffaff', 'reference' => 'd1925efb2207ac4be3ad0c40b8277175f99ffaff',
'dev_requirement' => false,
), ),
'psr/cache' => 'psr/cache' => array(
array (
'pretty_version' => '1.0.1', 'pretty_version' => '1.0.1',
'version' => '1.0.1.0', 'version' => '1.0.1.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../psr/cache',
), 'aliases' => array(),
'reference' => 'd11b50ad223250cf17b86e38383413f5a6764bf8', 'reference' => 'd11b50ad223250cf17b86e38383413f5a6764bf8',
'dev_requirement' => false,
), ),
'psr/container' => 'psr/container' => array(
array (
'pretty_version' => '1.0.0', 'pretty_version' => '1.0.0',
'version' => '1.0.0.0', 'version' => '1.0.0.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../psr/container',
), 'aliases' => array(),
'reference' => 'b7ce3b176482dbbc1245ebf52b181af44c2cf55f', 'reference' => 'b7ce3b176482dbbc1245ebf52b181af44c2cf55f',
'dev_requirement' => false,
), ),
'psr/log' => 'psr/log' => array(
array (
'pretty_version' => '1.1.4', 'pretty_version' => '1.1.4',
'version' => '1.1.4.0', 'version' => '1.1.4.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../psr/log',
), 'aliases' => array(),
'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11', 'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
'dev_requirement' => false,
), ),
'psr/simple-cache' => 'psr/simple-cache' => array(
array (
'pretty_version' => '1.0.1', 'pretty_version' => '1.0.1',
'version' => '1.0.1.0', 'version' => '1.0.1.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../psr/simple-cache',
), 'aliases' => array(),
'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b', 'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b',
'dev_requirement' => false,
), ),
'symfony/options-resolver' => 'symfony/options-resolver' => array(
array (
'pretty_version' => 'v3.4.47', 'pretty_version' => 'v3.4.47',
'version' => '3.4.47.0', 'version' => '3.4.47.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../symfony/options-resolver',
), 'aliases' => array(),
'reference' => 'c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744', 'reference' => 'c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744',
'dev_requirement' => false,
), ),
'topthink/framework' => 'topthink/framework' => array(
array (
'pretty_version' => 'v6.0.8', 'pretty_version' => 'v6.0.8',
'version' => '6.0.8.0', 'version' => '6.0.8.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../topthink/framework',
), 'aliases' => array(),
'reference' => '4789343672aef06d571d556da369c0e156609bce', 'reference' => '4789343672aef06d571d556da369c0e156609bce',
'dev_requirement' => false,
), ),
'topthink/think-helper' => 'topthink/think-helper' => array(
array (
'pretty_version' => 'v3.1.4', 'pretty_version' => 'v3.1.4',
'version' => '3.1.4.0', 'version' => '3.1.4.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../topthink/think-helper',
), 'aliases' => array(),
'reference' => 'c28d37743bda4a0455286ca85b17b5791d626e10', 'reference' => 'c28d37743bda4a0455286ca85b17b5791d626e10',
'dev_requirement' => false,
), ),
'topthink/think-orm' => 'topthink/think-orm' => array(
array (
'pretty_version' => 'v2.0.40', 'pretty_version' => 'v2.0.40',
'version' => '2.0.40.0', 'version' => '2.0.40.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../topthink/think-orm',
), 'aliases' => array(),
'reference' => '1119d979b850849f3725856460cf108eec1c3eb8', 'reference' => '1119d979b850849f3725856460cf108eec1c3eb8',
'dev_requirement' => false,
), ),
'topthink/think-template' => 'topthink/think-template' => array(
array (
'pretty_version' => 'v2.0.8', 'pretty_version' => 'v2.0.8',
'version' => '2.0.8.0', 'version' => '2.0.8.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../topthink/think-template',
), 'aliases' => array(),
'reference' => 'abfc293f74f9ef5127b5c416310a01fe42e59368', 'reference' => 'abfc293f74f9ef5127b5c416310a01fe42e59368',
'dev_requirement' => false,
), ),
'topthink/think-view' => 'topthink/think-view' => array(
array (
'pretty_version' => 'v1.0.14', 'pretty_version' => 'v1.0.14',
'version' => '1.0.14.0', 'version' => '1.0.14.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../topthink/think-view',
), 'aliases' => array(),
'reference' => 'edce0ae2c9551ab65f9e94a222604b0dead3576d', 'reference' => 'edce0ae2c9551ab65f9e94a222604b0dead3576d',
'dev_requirement' => false,
), ),
'zoujingli/ip2region' => 'zoujingli/ip2region' => array(
array (
'pretty_version' => 'v1.0.10', 'pretty_version' => 'v1.0.10',
'version' => '1.0.10.0', 'version' => '1.0.10.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../zoujingli/ip2region',
), 'aliases' => array(),
'reference' => '453480d0ab5b6fdbdf4aa400b7598a10ff2dc5c0', 'reference' => '453480d0ab5b6fdbdf4aa400b7598a10ff2dc5c0',
'dev_requirement' => false,
), ),
'zoujingli/think-library' => 'zoujingli/think-library' => array(
array (
'pretty_version' => 'v6.0.x-dev', 'pretty_version' => 'v6.0.x-dev',
'version' => '6.0.9999999.9999999-dev', 'version' => '6.0.9999999.9999999-dev',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../zoujingli/think-library',
'aliases' => array(
0 => '9999999-dev', 0 => '9999999-dev',
), ),
'reference' => 'dab37cf567def670988c452943022ff1b8bb4176', 'reference' => 'dab37cf567def670988c452943022ff1b8bb4176',
'dev_requirement' => false,
), ),
'zoujingli/thinkadmin' => 'zoujingli/thinkadmin' => array(
array (
'pretty_version' => '6.x-dev', 'pretty_version' => '6.x-dev',
'version' => '6.9999999.9999999.9999999-dev', 'version' => '6.9999999.9999999.9999999-dev',
'aliases' => 'type' => 'project',
array ( 'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => '612077be96278a23df4f517da2088fc3147574e0',
'dev_requirement' => false,
), ),
'reference' => 'd53fed33e1f513f043cccc0fbb69b48c0d9fbe41', 'zoujingli/wechat-developer' => array(
),
'zoujingli/wechat-developer' =>
array (
'pretty_version' => 'v1.2.31', 'pretty_version' => 'v1.2.31',
'version' => '1.2.31.0', 'version' => '1.2.31.0',
'aliases' => 'type' => 'library',
array ( 'install_path' => __DIR__ . '/../zoujingli/wechat-developer',
), 'aliases' => array(),
'reference' => '0cf699c725f69d66657a50e60d22f71c9e5a5e16', 'reference' => '0cf699c725f69d66657a50e60d22f71c9e5a5e16',
'dev_requirement' => false,
), ),
), ),
); );

2
vendor/services.php vendored
View File

@ -1,5 +1,5 @@
<?php <?php
// This file is automatically generated at:2021-05-27 10:19:04 // This file is automatically generated at:2021-06-09 11:20:22
declare (strict_types = 1); declare (strict_types = 1);
return array ( return array (
0 => 'think\\admin\\Library', 0 => 'think\\admin\\Library',