mirror of
https://gitee.com/technical-laohu/mpay.git
synced 2025-09-18 01:36:40 +08:00
框架更新
This commit is contained in:
parent
eb649b402f
commit
502f2f4dc1
0
vendor/.gitignore → vendor/!.gitignore
vendored
0
vendor/.gitignore → vendor/!.gitignore
vendored
25
vendor/autoload.php
vendored
Normal file
25
vendor/autoload.php
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload.php @generated by Composer
|
||||||
|
|
||||||
|
if (PHP_VERSION_ID < 50600) {
|
||||||
|
if (!headers_sent()) {
|
||||||
|
header('HTTP/1.1 500 Internal Server Error');
|
||||||
|
}
|
||||||
|
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
|
||||||
|
if (!ini_get('display_errors')) {
|
||||||
|
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
||||||
|
fwrite(STDERR, $err);
|
||||||
|
} elseif (!headers_sent()) {
|
||||||
|
echo $err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trigger_error(
|
||||||
|
$err,
|
||||||
|
E_USER_ERROR
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once __DIR__ . '/composer/autoload_real.php';
|
||||||
|
|
||||||
|
return ComposerAutoloaderInit4e6f1e8c0e4175887b7668bfe95e8f5a::getLoader();
|
119
vendor/bin/var-dump-server
vendored
Normal file
119
vendor/bin/var-dump-server
vendored
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proxy PHP file generated by Composer
|
||||||
|
*
|
||||||
|
* This file includes the referenced bin path (../symfony/var-dumper/Resources/bin/var-dump-server)
|
||||||
|
* using a stream wrapper to prevent the shebang from being output on PHP<8
|
||||||
|
*
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Composer;
|
||||||
|
|
||||||
|
$GLOBALS['_composer_bin_dir'] = __DIR__;
|
||||||
|
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
|
||||||
|
|
||||||
|
if (PHP_VERSION_ID < 80000) {
|
||||||
|
if (!class_exists('Composer\BinProxyWrapper')) {
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
final class BinProxyWrapper
|
||||||
|
{
|
||||||
|
private $handle;
|
||||||
|
private $position;
|
||||||
|
private $realpath;
|
||||||
|
|
||||||
|
public function stream_open($path, $mode, $options, &$opened_path)
|
||||||
|
{
|
||||||
|
// get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
|
||||||
|
$opened_path = substr($path, 17);
|
||||||
|
$this->realpath = realpath($opened_path) ?: $opened_path;
|
||||||
|
$opened_path = $this->realpath;
|
||||||
|
$this->handle = fopen($this->realpath, $mode);
|
||||||
|
$this->position = 0;
|
||||||
|
|
||||||
|
return (bool) $this->handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_read($count)
|
||||||
|
{
|
||||||
|
$data = fread($this->handle, $count);
|
||||||
|
|
||||||
|
if ($this->position === 0) {
|
||||||
|
$data = preg_replace('{^#!.*\r?\n}', '', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->position += strlen($data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_cast($castAs)
|
||||||
|
{
|
||||||
|
return $this->handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_close()
|
||||||
|
{
|
||||||
|
fclose($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_lock($operation)
|
||||||
|
{
|
||||||
|
return $operation ? flock($this->handle, $operation) : true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_seek($offset, $whence)
|
||||||
|
{
|
||||||
|
if (0 === fseek($this->handle, $offset, $whence)) {
|
||||||
|
$this->position = ftell($this->handle);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_tell()
|
||||||
|
{
|
||||||
|
return $this->position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_eof()
|
||||||
|
{
|
||||||
|
return feof($this->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_stat()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stream_set_option($option, $arg1, $arg2)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function url_stat($path, $flags)
|
||||||
|
{
|
||||||
|
$path = substr($path, 17);
|
||||||
|
if (file_exists($path)) {
|
||||||
|
return stat($path);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
(function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
|
||||||
|
|| (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
|
||||||
|
) {
|
||||||
|
return include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return include __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server';
|
5
vendor/bin/var-dump-server.bat
vendored
Normal file
5
vendor/bin/var-dump-server.bat
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
setlocal DISABLEDELAYEDEXPANSION
|
||||||
|
SET BIN_TARGET=%~dp0/var-dump-server
|
||||||
|
SET COMPOSER_RUNTIME_BIN_DIR=%~dp0
|
||||||
|
php "%BIN_TARGET%" %*
|
579
vendor/composer/ClassLoader.php
vendored
Normal file
579
vendor/composer/ClassLoader.php
vendored
Normal file
@ -0,0 +1,579 @@
|
|||||||
|
<?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\Autoload;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
|
||||||
|
*
|
||||||
|
* $loader = new \Composer\Autoload\ClassLoader();
|
||||||
|
*
|
||||||
|
* // register classes with namespaces
|
||||||
|
* $loader->add('Symfony\Component', __DIR__.'/component');
|
||||||
|
* $loader->add('Symfony', __DIR__.'/framework');
|
||||||
|
*
|
||||||
|
* // activate the autoloader
|
||||||
|
* $loader->register();
|
||||||
|
*
|
||||||
|
* // to enable searching the include path (eg. for PEAR packages)
|
||||||
|
* $loader->setUseIncludePath(true);
|
||||||
|
*
|
||||||
|
* In this example, if you try to use a class in the Symfony\Component
|
||||||
|
* namespace or one of its children (Symfony\Component\Console for instance),
|
||||||
|
* the autoloader will first look for the class under the component/
|
||||||
|
* directory, and it will then fallback to the framework/ directory if not
|
||||||
|
* found before giving up.
|
||||||
|
*
|
||||||
|
* This class is loosely based on the Symfony UniversalClassLoader.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||||
|
* @see https://www.php-fig.org/psr/psr-0/
|
||||||
|
* @see https://www.php-fig.org/psr/psr-4/
|
||||||
|
*/
|
||||||
|
class ClassLoader
|
||||||
|
{
|
||||||
|
/** @var \Closure(string):void */
|
||||||
|
private static $includeFile;
|
||||||
|
|
||||||
|
/** @var string|null */
|
||||||
|
private $vendorDir;
|
||||||
|
|
||||||
|
// PSR-4
|
||||||
|
/**
|
||||||
|
* @var array<string, array<string, int>>
|
||||||
|
*/
|
||||||
|
private $prefixLengthsPsr4 = array();
|
||||||
|
/**
|
||||||
|
* @var array<string, list<string>>
|
||||||
|
*/
|
||||||
|
private $prefixDirsPsr4 = array();
|
||||||
|
/**
|
||||||
|
* @var list<string>
|
||||||
|
*/
|
||||||
|
private $fallbackDirsPsr4 = array();
|
||||||
|
|
||||||
|
// PSR-0
|
||||||
|
/**
|
||||||
|
* List of PSR-0 prefixes
|
||||||
|
*
|
||||||
|
* Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
|
||||||
|
*
|
||||||
|
* @var array<string, array<string, list<string>>>
|
||||||
|
*/
|
||||||
|
private $prefixesPsr0 = array();
|
||||||
|
/**
|
||||||
|
* @var list<string>
|
||||||
|
*/
|
||||||
|
private $fallbackDirsPsr0 = array();
|
||||||
|
|
||||||
|
/** @var bool */
|
||||||
|
private $useIncludePath = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array<string, string>
|
||||||
|
*/
|
||||||
|
private $classMap = array();
|
||||||
|
|
||||||
|
/** @var bool */
|
||||||
|
private $classMapAuthoritative = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array<string, bool>
|
||||||
|
*/
|
||||||
|
private $missingClasses = array();
|
||||||
|
|
||||||
|
/** @var string|null */
|
||||||
|
private $apcuPrefix;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array<string, self>
|
||||||
|
*/
|
||||||
|
private static $registeredLoaders = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string|null $vendorDir
|
||||||
|
*/
|
||||||
|
public function __construct($vendorDir = null)
|
||||||
|
{
|
||||||
|
$this->vendorDir = $vendorDir;
|
||||||
|
self::initializeIncludeClosure();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array<string, list<string>>
|
||||||
|
*/
|
||||||
|
public function getPrefixes()
|
||||||
|
{
|
||||||
|
if (!empty($this->prefixesPsr0)) {
|
||||||
|
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
|
||||||
|
}
|
||||||
|
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array<string, list<string>>
|
||||||
|
*/
|
||||||
|
public function getPrefixesPsr4()
|
||||||
|
{
|
||||||
|
return $this->prefixDirsPsr4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return list<string>
|
||||||
|
*/
|
||||||
|
public function getFallbackDirs()
|
||||||
|
{
|
||||||
|
return $this->fallbackDirsPsr0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return list<string>
|
||||||
|
*/
|
||||||
|
public function getFallbackDirsPsr4()
|
||||||
|
{
|
||||||
|
return $this->fallbackDirsPsr4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array<string, string> Array of classname => path
|
||||||
|
*/
|
||||||
|
public function getClassMap()
|
||||||
|
{
|
||||||
|
return $this->classMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array<string, string> $classMap Class to filename map
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addClassMap(array $classMap)
|
||||||
|
{
|
||||||
|
if ($this->classMap) {
|
||||||
|
$this->classMap = array_merge($this->classMap, $classMap);
|
||||||
|
} else {
|
||||||
|
$this->classMap = $classMap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a set of PSR-0 directories for a given prefix, either
|
||||||
|
* appending or prepending to the ones previously set for this prefix.
|
||||||
|
*
|
||||||
|
* @param string $prefix The prefix
|
||||||
|
* @param list<string>|string $paths The PSR-0 root directories
|
||||||
|
* @param bool $prepend Whether to prepend the directories
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function add($prefix, $paths, $prepend = false)
|
||||||
|
{
|
||||||
|
$paths = (array) $paths;
|
||||||
|
if (!$prefix) {
|
||||||
|
if ($prepend) {
|
||||||
|
$this->fallbackDirsPsr0 = array_merge(
|
||||||
|
$paths,
|
||||||
|
$this->fallbackDirsPsr0
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$this->fallbackDirsPsr0 = array_merge(
|
||||||
|
$this->fallbackDirsPsr0,
|
||||||
|
$paths
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$first = $prefix[0];
|
||||||
|
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
||||||
|
$this->prefixesPsr0[$first][$prefix] = $paths;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ($prepend) {
|
||||||
|
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||||
|
$paths,
|
||||||
|
$this->prefixesPsr0[$first][$prefix]
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||||
|
$this->prefixesPsr0[$first][$prefix],
|
||||||
|
$paths
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a set of PSR-4 directories for a given namespace, either
|
||||||
|
* appending or prepending to the ones previously set for this namespace.
|
||||||
|
*
|
||||||
|
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||||
|
* @param list<string>|string $paths The PSR-4 base directories
|
||||||
|
* @param bool $prepend Whether to prepend the directories
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addPsr4($prefix, $paths, $prepend = false)
|
||||||
|
{
|
||||||
|
$paths = (array) $paths;
|
||||||
|
if (!$prefix) {
|
||||||
|
// Register directories for the root namespace.
|
||||||
|
if ($prepend) {
|
||||||
|
$this->fallbackDirsPsr4 = array_merge(
|
||||||
|
$paths,
|
||||||
|
$this->fallbackDirsPsr4
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$this->fallbackDirsPsr4 = array_merge(
|
||||||
|
$this->fallbackDirsPsr4,
|
||||||
|
$paths
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
||||||
|
// Register directories for a new namespace.
|
||||||
|
$length = strlen($prefix);
|
||||||
|
if ('\\' !== $prefix[$length - 1]) {
|
||||||
|
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||||
|
}
|
||||||
|
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||||
|
$this->prefixDirsPsr4[$prefix] = $paths;
|
||||||
|
} elseif ($prepend) {
|
||||||
|
// Prepend directories for an already registered namespace.
|
||||||
|
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||||
|
$paths,
|
||||||
|
$this->prefixDirsPsr4[$prefix]
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// Append directories for an already registered namespace.
|
||||||
|
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||||
|
$this->prefixDirsPsr4[$prefix],
|
||||||
|
$paths
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a set of PSR-0 directories for a given prefix,
|
||||||
|
* replacing any others previously set for this prefix.
|
||||||
|
*
|
||||||
|
* @param string $prefix The prefix
|
||||||
|
* @param list<string>|string $paths The PSR-0 base directories
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function set($prefix, $paths)
|
||||||
|
{
|
||||||
|
if (!$prefix) {
|
||||||
|
$this->fallbackDirsPsr0 = (array) $paths;
|
||||||
|
} else {
|
||||||
|
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a set of PSR-4 directories for a given namespace,
|
||||||
|
* replacing any others previously set for this namespace.
|
||||||
|
*
|
||||||
|
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||||
|
* @param list<string>|string $paths The PSR-4 base directories
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function setPsr4($prefix, $paths)
|
||||||
|
{
|
||||||
|
if (!$prefix) {
|
||||||
|
$this->fallbackDirsPsr4 = (array) $paths;
|
||||||
|
} else {
|
||||||
|
$length = strlen($prefix);
|
||||||
|
if ('\\' !== $prefix[$length - 1]) {
|
||||||
|
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||||
|
}
|
||||||
|
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||||
|
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Turns on searching the include path for class files.
|
||||||
|
*
|
||||||
|
* @param bool $useIncludePath
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function setUseIncludePath($useIncludePath)
|
||||||
|
{
|
||||||
|
$this->useIncludePath = $useIncludePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can be used to check if the autoloader uses the include path to check
|
||||||
|
* for classes.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function getUseIncludePath()
|
||||||
|
{
|
||||||
|
return $this->useIncludePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Turns off searching the prefix and fallback directories for classes
|
||||||
|
* that have not been registered with the class map.
|
||||||
|
*
|
||||||
|
* @param bool $classMapAuthoritative
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function setClassMapAuthoritative($classMapAuthoritative)
|
||||||
|
{
|
||||||
|
$this->classMapAuthoritative = $classMapAuthoritative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should class lookup fail if not found in the current class map?
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isClassMapAuthoritative()
|
||||||
|
{
|
||||||
|
return $this->classMapAuthoritative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
||||||
|
*
|
||||||
|
* @param string|null $apcuPrefix
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function setApcuPrefix($apcuPrefix)
|
||||||
|
{
|
||||||
|
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The APCu prefix in use, or null if APCu caching is not enabled.
|
||||||
|
*
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function getApcuPrefix()
|
||||||
|
{
|
||||||
|
return $this->apcuPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers this instance as an autoloader.
|
||||||
|
*
|
||||||
|
* @param bool $prepend Whether to prepend the autoloader or not
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function register($prepend = false)
|
||||||
|
{
|
||||||
|
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
||||||
|
|
||||||
|
if (null === $this->vendorDir) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($prepend) {
|
||||||
|
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
|
||||||
|
} else {
|
||||||
|
unset(self::$registeredLoaders[$this->vendorDir]);
|
||||||
|
self::$registeredLoaders[$this->vendorDir] = $this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregisters this instance as an autoloader.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function unregister()
|
||||||
|
{
|
||||||
|
spl_autoload_unregister(array($this, 'loadClass'));
|
||||||
|
|
||||||
|
if (null !== $this->vendorDir) {
|
||||||
|
unset(self::$registeredLoaders[$this->vendorDir]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the given class or interface.
|
||||||
|
*
|
||||||
|
* @param string $class The name of the class
|
||||||
|
* @return true|null True if loaded, null otherwise
|
||||||
|
*/
|
||||||
|
public function loadClass($class)
|
||||||
|
{
|
||||||
|
if ($file = $this->findFile($class)) {
|
||||||
|
$includeFile = self::$includeFile;
|
||||||
|
$includeFile($file);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the path to the file where the class is defined.
|
||||||
|
*
|
||||||
|
* @param string $class The name of the class
|
||||||
|
*
|
||||||
|
* @return string|false The path if found, false otherwise
|
||||||
|
*/
|
||||||
|
public function findFile($class)
|
||||||
|
{
|
||||||
|
// class map lookup
|
||||||
|
if (isset($this->classMap[$class])) {
|
||||||
|
return $this->classMap[$class];
|
||||||
|
}
|
||||||
|
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (null !== $this->apcuPrefix) {
|
||||||
|
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
||||||
|
if ($hit) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$file = $this->findFileWithExtension($class, '.php');
|
||||||
|
|
||||||
|
// Search for Hack files if we are running on HHVM
|
||||||
|
if (false === $file && defined('HHVM_VERSION')) {
|
||||||
|
$file = $this->findFileWithExtension($class, '.hh');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null !== $this->apcuPrefix) {
|
||||||
|
apcu_add($this->apcuPrefix.$class, $file);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (false === $file) {
|
||||||
|
// Remember that this class does not exist.
|
||||||
|
$this->missingClasses[$class] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the currently registered loaders keyed by their corresponding vendor directories.
|
||||||
|
*
|
||||||
|
* @return array<string, self>
|
||||||
|
*/
|
||||||
|
public static function getRegisteredLoaders()
|
||||||
|
{
|
||||||
|
return self::$registeredLoaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $class
|
||||||
|
* @param string $ext
|
||||||
|
* @return string|false
|
||||||
|
*/
|
||||||
|
private function findFileWithExtension($class, $ext)
|
||||||
|
{
|
||||||
|
// PSR-4 lookup
|
||||||
|
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
|
||||||
|
|
||||||
|
$first = $class[0];
|
||||||
|
if (isset($this->prefixLengthsPsr4[$first])) {
|
||||||
|
$subPath = $class;
|
||||||
|
while (false !== $lastPos = strrpos($subPath, '\\')) {
|
||||||
|
$subPath = substr($subPath, 0, $lastPos);
|
||||||
|
$search = $subPath . '\\';
|
||||||
|
if (isset($this->prefixDirsPsr4[$search])) {
|
||||||
|
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
|
||||||
|
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
||||||
|
if (file_exists($file = $dir . $pathEnd)) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PSR-4 fallback dirs
|
||||||
|
foreach ($this->fallbackDirsPsr4 as $dir) {
|
||||||
|
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PSR-0 lookup
|
||||||
|
if (false !== $pos = strrpos($class, '\\')) {
|
||||||
|
// namespaced class name
|
||||||
|
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
|
||||||
|
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
|
||||||
|
} else {
|
||||||
|
// PEAR-like class name
|
||||||
|
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($this->prefixesPsr0[$first])) {
|
||||||
|
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
|
||||||
|
if (0 === strpos($class, $prefix)) {
|
||||||
|
foreach ($dirs as $dir) {
|
||||||
|
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PSR-0 fallback dirs
|
||||||
|
foreach ($this->fallbackDirsPsr0 as $dir) {
|
||||||
|
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PSR-0 include paths.
|
||||||
|
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private static function initializeIncludeClosure()
|
||||||
|
{
|
||||||
|
if (self::$includeFile !== null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope isolated include.
|
||||||
|
*
|
||||||
|
* Prevents access to $this/self from included files.
|
||||||
|
*
|
||||||
|
* @param string $file
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
self::$includeFile = \Closure::bind(static function($file) {
|
||||||
|
include $file;
|
||||||
|
}, null, null);
|
||||||
|
}
|
||||||
|
}
|
359
vendor/composer/InstalledVersions.php
vendored
Normal file
359
vendor/composer/InstalledVersions.php
vendored
Normal file
@ -0,0 +1,359 @@
|
|||||||
|
<?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
|
||||||
|
*
|
||||||
|
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
|
||||||
|
*
|
||||||
|
* To require its presence, you can require `composer-runtime-api ^2.0`
|
||||||
|
*
|
||||||
|
* @final
|
||||||
|
*/
|
||||||
|
class InstalledVersions
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var mixed[]|null
|
||||||
|
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
|
||||||
|
*/
|
||||||
|
private static $installed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool|null
|
||||||
|
*/
|
||||||
|
private static $canGetVendors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array[]
|
||||||
|
* @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
* @param bool $includeDevRequirements
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function isInstalled($packageName, $includeDevRequirements = true)
|
||||||
|
{
|
||||||
|
foreach (self::getInstalled() as $installed) {
|
||||||
|
if (isset($installed['versions'][$packageName])) {
|
||||||
|
return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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((string) $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');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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.
|
||||||
|
*/
|
||||||
|
public static function getInstallPath($packageName)
|
||||||
|
{
|
||||||
|
foreach (self::getInstalled() as $installed) {
|
||||||
|
if (!isset($installed['versions'][$packageName])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
* @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
|
||||||
|
*/
|
||||||
|
public static function getRootPackage()
|
||||||
|
{
|
||||||
|
$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.
|
||||||
|
* @return array[]
|
||||||
|
* @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
|
||||||
|
*/
|
||||||
|
public static function getRawData()
|
||||||
|
{
|
||||||
|
@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) {
|
||||||
|
// only require the installed.php file if this file is loaded from its dumped location,
|
||||||
|
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
||||||
|
if (substr(__DIR__, -8, 1) !== 'C') {
|
||||||
|
self::$installed = include __DIR__ . '/installed.php';
|
||||||
|
} else {
|
||||||
|
self::$installed = array();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$installed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
||||||
|
*/
|
||||||
|
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
|
||||||
|
* 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, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
|
||||||
|
*/
|
||||||
|
public static function reload($data)
|
||||||
|
{
|
||||||
|
self::$installed = $data;
|
||||||
|
self::$installedByVendor = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array[]
|
||||||
|
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
||||||
|
*/
|
||||||
|
private static function getInstalled()
|
||||||
|
{
|
||||||
|
if (null === self::$canGetVendors) {
|
||||||
|
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
|
||||||
|
}
|
||||||
|
|
||||||
|
$installed = array();
|
||||||
|
|
||||||
|
if (self::$canGetVendors) {
|
||||||
|
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
||||||
|
if (isset(self::$installedByVendor[$vendorDir])) {
|
||||||
|
$installed[] = self::$installedByVendor[$vendorDir];
|
||||||
|
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
||||||
|
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
||||||
|
$required = require $vendorDir.'/composer/installed.php';
|
||||||
|
$installed[] = self::$installedByVendor[$vendorDir] = $required;
|
||||||
|
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
||||||
|
self::$installed = $installed[count($installed) - 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null === self::$installed) {
|
||||||
|
// only require the installed.php file if this file is loaded from its dumped location,
|
||||||
|
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
||||||
|
if (substr(__DIR__, -8, 1) !== 'C') {
|
||||||
|
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
||||||
|
$required = require __DIR__ . '/installed.php';
|
||||||
|
self::$installed = $required;
|
||||||
|
} else {
|
||||||
|
self::$installed = array();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self::$installed !== array()) {
|
||||||
|
$installed[] = self::$installed;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $installed;
|
||||||
|
}
|
||||||
|
}
|
21
vendor/composer/LICENSE
vendored
Normal file
21
vendor/composer/LICENSE
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
Copyright (c) Nils Adermann, Jordi Boggiano
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is furnished
|
||||||
|
to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
10
vendor/composer/autoload_classmap.php
vendored
Normal file
10
vendor/composer/autoload_classmap.php
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_classmap.php @generated by Composer
|
||||||
|
|
||||||
|
$vendorDir = dirname(__DIR__);
|
||||||
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
||||||
|
);
|
13
vendor/composer/autoload_files.php
vendored
Normal file
13
vendor/composer/autoload_files.php
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_files.php @generated by Composer
|
||||||
|
|
||||||
|
$vendorDir = dirname(__DIR__);
|
||||||
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'9b552a3cc426e3287cc811caefa3cf53' => $vendorDir . '/topthink/think-helper/src/helper.php',
|
||||||
|
'35fab96057f1bf5e7aba31a8a6d5fdde' => $vendorDir . '/topthink/think-orm/stubs/load_stubs.php',
|
||||||
|
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||||
|
'667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
|
||||||
|
);
|
10
vendor/composer/autoload_namespaces.php
vendored
Normal file
10
vendor/composer/autoload_namespaces.php
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_namespaces.php @generated by Composer
|
||||||
|
|
||||||
|
$vendorDir = dirname(__DIR__);
|
||||||
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'' => array($baseDir . '/extend'),
|
||||||
|
);
|
20
vendor/composer/autoload_psr4.php
vendored
Normal file
20
vendor/composer/autoload_psr4.php
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_psr4.php @generated by Composer
|
||||||
|
|
||||||
|
$vendorDir = dirname(__DIR__);
|
||||||
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'think\\trace\\' => array($vendorDir . '/topthink/think-trace/src'),
|
||||||
|
'think\\' => array($vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-orm/src', $vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-filesystem/src'),
|
||||||
|
'app\\' => array($baseDir . '/app'),
|
||||||
|
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
|
||||||
|
'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'),
|
||||||
|
'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
|
||||||
|
'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
|
||||||
|
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
|
||||||
|
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
||||||
|
'League\\MimeTypeDetection\\' => array($vendorDir . '/league/mime-type-detection/src'),
|
||||||
|
'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'),
|
||||||
|
);
|
50
vendor/composer/autoload_real.php
vendored
Normal file
50
vendor/composer/autoload_real.php
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_real.php @generated by Composer
|
||||||
|
|
||||||
|
class ComposerAutoloaderInit4e6f1e8c0e4175887b7668bfe95e8f5a
|
||||||
|
{
|
||||||
|
private static $loader;
|
||||||
|
|
||||||
|
public static function loadClassLoader($class)
|
||||||
|
{
|
||||||
|
if ('Composer\Autoload\ClassLoader' === $class) {
|
||||||
|
require __DIR__ . '/ClassLoader.php';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Composer\Autoload\ClassLoader
|
||||||
|
*/
|
||||||
|
public static function getLoader()
|
||||||
|
{
|
||||||
|
if (null !== self::$loader) {
|
||||||
|
return self::$loader;
|
||||||
|
}
|
||||||
|
|
||||||
|
require __DIR__ . '/platform_check.php';
|
||||||
|
|
||||||
|
spl_autoload_register(array('ComposerAutoloaderInit4e6f1e8c0e4175887b7668bfe95e8f5a', 'loadClassLoader'), true, true);
|
||||||
|
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
||||||
|
spl_autoload_unregister(array('ComposerAutoloaderInit4e6f1e8c0e4175887b7668bfe95e8f5a', 'loadClassLoader'));
|
||||||
|
|
||||||
|
require __DIR__ . '/autoload_static.php';
|
||||||
|
call_user_func(\Composer\Autoload\ComposerStaticInit4e6f1e8c0e4175887b7668bfe95e8f5a::getInitializer($loader));
|
||||||
|
|
||||||
|
$loader->register(true);
|
||||||
|
|
||||||
|
$filesToLoad = \Composer\Autoload\ComposerStaticInit4e6f1e8c0e4175887b7668bfe95e8f5a::$files;
|
||||||
|
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
|
||||||
|
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||||
|
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||||
|
|
||||||
|
require $file;
|
||||||
|
}
|
||||||
|
}, null, null);
|
||||||
|
foreach ($filesToLoad as $fileIdentifier => $file) {
|
||||||
|
$requireFile($fileIdentifier, $file);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $loader;
|
||||||
|
}
|
||||||
|
}
|
113
vendor/composer/autoload_static.php
vendored
Normal file
113
vendor/composer/autoload_static.php
vendored
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload_static.php @generated by Composer
|
||||||
|
|
||||||
|
namespace Composer\Autoload;
|
||||||
|
|
||||||
|
class ComposerStaticInit4e6f1e8c0e4175887b7668bfe95e8f5a
|
||||||
|
{
|
||||||
|
public static $files = array (
|
||||||
|
'9b552a3cc426e3287cc811caefa3cf53' => __DIR__ . '/..' . '/topthink/think-helper/src/helper.php',
|
||||||
|
'35fab96057f1bf5e7aba31a8a6d5fdde' => __DIR__ . '/..' . '/topthink/think-orm/stubs/load_stubs.php',
|
||||||
|
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||||
|
'667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
|
||||||
|
);
|
||||||
|
|
||||||
|
public static $prefixLengthsPsr4 = array (
|
||||||
|
't' =>
|
||||||
|
array (
|
||||||
|
'think\\trace\\' => 12,
|
||||||
|
'think\\' => 6,
|
||||||
|
),
|
||||||
|
'a' =>
|
||||||
|
array (
|
||||||
|
'app\\' => 4,
|
||||||
|
),
|
||||||
|
'S' =>
|
||||||
|
array (
|
||||||
|
'Symfony\\Polyfill\\Mbstring\\' => 26,
|
||||||
|
'Symfony\\Component\\VarDumper\\' => 28,
|
||||||
|
),
|
||||||
|
'P' =>
|
||||||
|
array (
|
||||||
|
'Psr\\SimpleCache\\' => 16,
|
||||||
|
'Psr\\Log\\' => 8,
|
||||||
|
'Psr\\Http\\Message\\' => 17,
|
||||||
|
'Psr\\Container\\' => 14,
|
||||||
|
),
|
||||||
|
'L' =>
|
||||||
|
array (
|
||||||
|
'League\\MimeTypeDetection\\' => 25,
|
||||||
|
'League\\Flysystem\\' => 17,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
public static $prefixDirsPsr4 = array (
|
||||||
|
'think\\trace\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/topthink/think-trace/src',
|
||||||
|
),
|
||||||
|
'think\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/topthink/think-helper/src',
|
||||||
|
1 => __DIR__ . '/..' . '/topthink/think-orm/src',
|
||||||
|
2 => __DIR__ . '/..' . '/topthink/framework/src/think',
|
||||||
|
3 => __DIR__ . '/..' . '/topthink/think-filesystem/src',
|
||||||
|
),
|
||||||
|
'app\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/../..' . '/app',
|
||||||
|
),
|
||||||
|
'Symfony\\Polyfill\\Mbstring\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
|
||||||
|
),
|
||||||
|
'Symfony\\Component\\VarDumper\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/symfony/var-dumper',
|
||||||
|
),
|
||||||
|
'Psr\\SimpleCache\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/psr/simple-cache/src',
|
||||||
|
),
|
||||||
|
'Psr\\Log\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/psr/log/src',
|
||||||
|
),
|
||||||
|
'Psr\\Http\\Message\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/psr/http-message/src',
|
||||||
|
),
|
||||||
|
'Psr\\Container\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/psr/container/src',
|
||||||
|
),
|
||||||
|
'League\\MimeTypeDetection\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/league/mime-type-detection/src',
|
||||||
|
),
|
||||||
|
'League\\Flysystem\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/league/flysystem/src',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
public static $fallbackDirsPsr0 = array (
|
||||||
|
0 => __DIR__ . '/../..' . '/extend',
|
||||||
|
);
|
||||||
|
|
||||||
|
public static $classMap = array (
|
||||||
|
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
|
||||||
|
);
|
||||||
|
|
||||||
|
public static function getInitializer(ClassLoader $loader)
|
||||||
|
{
|
||||||
|
return \Closure::bind(function () use ($loader) {
|
||||||
|
$loader->prefixLengthsPsr4 = ComposerStaticInit4e6f1e8c0e4175887b7668bfe95e8f5a::$prefixLengthsPsr4;
|
||||||
|
$loader->prefixDirsPsr4 = ComposerStaticInit4e6f1e8c0e4175887b7668bfe95e8f5a::$prefixDirsPsr4;
|
||||||
|
$loader->fallbackDirsPsr0 = ComposerStaticInit4e6f1e8c0e4175887b7668bfe95e8f5a::$fallbackDirsPsr0;
|
||||||
|
$loader->classMap = ComposerStaticInit4e6f1e8c0e4175887b7668bfe95e8f5a::$classMap;
|
||||||
|
|
||||||
|
}, null, ClassLoader::class);
|
||||||
|
}
|
||||||
|
}
|
832
vendor/composer/installed.json
vendored
Normal file
832
vendor/composer/installed.json
vendored
Normal file
@ -0,0 +1,832 @@
|
|||||||
|
{
|
||||||
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "league/flysystem",
|
||||||
|
"version": "2.5.0",
|
||||||
|
"version_normalized": "2.5.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/thephpleague/flysystem.git",
|
||||||
|
"reference": "8aaffb653c5777781b0f7f69a5d937baf7ab6cdb"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8aaffb653c5777781b0f7f69a5d937baf7ab6cdb",
|
||||||
|
"reference": "8aaffb653c5777781b0f7f69a5d937baf7ab6cdb",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-json": "*",
|
||||||
|
"league/mime-type-detection": "^1.0.0",
|
||||||
|
"php": "^7.2 || ^8.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"guzzlehttp/ringphp": "<1.1.1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"async-aws/s3": "^1.5",
|
||||||
|
"async-aws/simple-s3": "^1.0",
|
||||||
|
"aws/aws-sdk-php": "^3.132.4",
|
||||||
|
"composer/semver": "^3.0",
|
||||||
|
"ext-fileinfo": "*",
|
||||||
|
"ext-ftp": "*",
|
||||||
|
"friendsofphp/php-cs-fixer": "^3.2",
|
||||||
|
"google/cloud-storage": "^1.23",
|
||||||
|
"phpseclib/phpseclib": "^2.0",
|
||||||
|
"phpstan/phpstan": "^0.12.26",
|
||||||
|
"phpunit/phpunit": "^8.5 || ^9.4",
|
||||||
|
"sabre/dav": "^4.1"
|
||||||
|
},
|
||||||
|
"time": "2022-09-17T21:02:32+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"League\\Flysystem\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Frank de Jonge",
|
||||||
|
"email": "info@frankdejonge.nl"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "File storage abstraction for PHP",
|
||||||
|
"keywords": [
|
||||||
|
"WebDAV",
|
||||||
|
"aws",
|
||||||
|
"cloud",
|
||||||
|
"file",
|
||||||
|
"files",
|
||||||
|
"filesystem",
|
||||||
|
"filesystems",
|
||||||
|
"ftp",
|
||||||
|
"s3",
|
||||||
|
"sftp",
|
||||||
|
"storage"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/thephpleague/flysystem/issues",
|
||||||
|
"source": "https://github.com/thephpleague/flysystem/tree/2.5.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://ecologi.com/frankdejonge",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/frankdejonge",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/league/flysystem",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"install-path": "../league/flysystem"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "league/mime-type-detection",
|
||||||
|
"version": "1.15.0",
|
||||||
|
"version_normalized": "1.15.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/thephpleague/mime-type-detection.git",
|
||||||
|
"reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
|
||||||
|
"reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-fileinfo": "*",
|
||||||
|
"php": "^7.4 || ^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"friendsofphp/php-cs-fixer": "^3.2",
|
||||||
|
"phpstan/phpstan": "^0.12.68",
|
||||||
|
"phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0"
|
||||||
|
},
|
||||||
|
"time": "2024-01-28T23:22:08+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"League\\MimeTypeDetection\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Frank de Jonge",
|
||||||
|
"email": "info@frankdejonge.nl"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Mime-type detection for Flysystem",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/thephpleague/mime-type-detection/issues",
|
||||||
|
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/frankdejonge",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/league/flysystem",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"install-path": "../league/mime-type-detection"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/container",
|
||||||
|
"version": "2.0.2",
|
||||||
|
"version_normalized": "2.0.2.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/container.git",
|
||||||
|
"reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
|
||||||
|
"reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.4.0"
|
||||||
|
},
|
||||||
|
"time": "2021-11-05T16:47:00+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "2.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Container\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common Container Interface (PHP FIG PSR-11)",
|
||||||
|
"homepage": "https://github.com/php-fig/container",
|
||||||
|
"keywords": [
|
||||||
|
"PSR-11",
|
||||||
|
"container",
|
||||||
|
"container-interface",
|
||||||
|
"container-interop",
|
||||||
|
"psr"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/php-fig/container/issues",
|
||||||
|
"source": "https://github.com/php-fig/container/tree/2.0.2"
|
||||||
|
},
|
||||||
|
"install-path": "../psr/container"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/http-message",
|
||||||
|
"version": "1.1",
|
||||||
|
"version_normalized": "1.1.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/http-message.git",
|
||||||
|
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||||
|
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.2 || ^8.0"
|
||||||
|
},
|
||||||
|
"time": "2023-04-04T09:50:52+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.1.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Message\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "http://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interface for HTTP messages",
|
||||||
|
"homepage": "https://github.com/php-fig/http-message",
|
||||||
|
"keywords": [
|
||||||
|
"http",
|
||||||
|
"http-message",
|
||||||
|
"psr",
|
||||||
|
"psr-7",
|
||||||
|
"request",
|
||||||
|
"response"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/php-fig/http-message/tree/1.1"
|
||||||
|
},
|
||||||
|
"install-path": "../psr/http-message"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/log",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"version_normalized": "3.0.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/log.git",
|
||||||
|
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
||||||
|
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=8.0.0"
|
||||||
|
},
|
||||||
|
"time": "2021-07-14T16:46:02+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Log\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interface for logging libraries",
|
||||||
|
"homepage": "https://github.com/php-fig/log",
|
||||||
|
"keywords": [
|
||||||
|
"log",
|
||||||
|
"psr",
|
||||||
|
"psr-3"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/php-fig/log/tree/3.0.0"
|
||||||
|
},
|
||||||
|
"install-path": "../psr/log"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/simple-cache",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"version_normalized": "3.0.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/simple-cache.git",
|
||||||
|
"reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865",
|
||||||
|
"reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=8.0.0"
|
||||||
|
},
|
||||||
|
"time": "2021-10-29T13:26:27+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\SimpleCache\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interfaces for simple caching",
|
||||||
|
"keywords": [
|
||||||
|
"cache",
|
||||||
|
"caching",
|
||||||
|
"psr",
|
||||||
|
"psr-16",
|
||||||
|
"simple-cache"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/php-fig/simple-cache/tree/3.0.0"
|
||||||
|
},
|
||||||
|
"install-path": "../psr/simple-cache"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/polyfill-mbstring",
|
||||||
|
"version": "v1.30.0",
|
||||||
|
"version_normalized": "1.30.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||||
|
"reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c",
|
||||||
|
"reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.1"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"ext-mbstring": "*"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-mbstring": "For best performance"
|
||||||
|
},
|
||||||
|
"time": "2024-06-19T12:30:46+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"thanks": {
|
||||||
|
"name": "symfony/polyfill",
|
||||||
|
"url": "https://github.com/symfony/polyfill"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"bootstrap.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Mbstring\\": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nicolas Grekas",
|
||||||
|
"email": "p@tchwork.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Symfony polyfill for the Mbstring extension",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"compatibility",
|
||||||
|
"mbstring",
|
||||||
|
"polyfill",
|
||||||
|
"portable",
|
||||||
|
"shim"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"install-path": "../symfony/polyfill-mbstring"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/var-dumper",
|
||||||
|
"version": "v6.0.19",
|
||||||
|
"version_normalized": "6.0.19.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/var-dumper.git",
|
||||||
|
"reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/eb980457fa6899840fe1687e8627a03a7d8a3d52",
|
||||||
|
"reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=8.0.2",
|
||||||
|
"symfony/polyfill-mbstring": "~1.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"phpunit/phpunit": "<5.4.3",
|
||||||
|
"symfony/console": "<5.4"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"ext-iconv": "*",
|
||||||
|
"symfony/console": "^5.4|^6.0",
|
||||||
|
"symfony/process": "^5.4|^6.0",
|
||||||
|
"symfony/uid": "^5.4|^6.0",
|
||||||
|
"twig/twig": "^2.13|^3.0.4"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
|
||||||
|
"ext-intl": "To show region name in time zone dump",
|
||||||
|
"symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
|
||||||
|
},
|
||||||
|
"time": "2023-01-20T17:44:14+00:00",
|
||||||
|
"bin": [
|
||||||
|
"Resources/bin/var-dump-server"
|
||||||
|
],
|
||||||
|
"type": "library",
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"Resources/functions/dump.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Component\\VarDumper\\": ""
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nicolas Grekas",
|
||||||
|
"email": "p@tchwork.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Provides mechanisms for walking through any arbitrary PHP variable",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"debug",
|
||||||
|
"dump"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/var-dumper/tree/v6.0.19"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"install-path": "../symfony/var-dumper"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "topthink/framework",
|
||||||
|
"version": "v8.0.4",
|
||||||
|
"version_normalized": "8.0.4.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/top-think/framework.git",
|
||||||
|
"reference": "846432655a82614a874cdaaac7be6870940b14d2"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/top-think/framework/zipball/846432655a82614a874cdaaac7be6870940b14d2",
|
||||||
|
"reference": "846432655a82614a874cdaaac7be6870940b14d2",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-json": "*",
|
||||||
|
"ext-mbstring": "*",
|
||||||
|
"php": ">=8.0.0",
|
||||||
|
"psr/container": "^2.0",
|
||||||
|
"psr/http-message": "^1.0",
|
||||||
|
"psr/log": "^1.0|^2.0|^3.0",
|
||||||
|
"psr/simple-cache": "^1.0|^2.0|^3.0",
|
||||||
|
"topthink/think-helper": "^3.1",
|
||||||
|
"topthink/think-orm": "^3.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"guzzlehttp/psr7": "^2.1.0",
|
||||||
|
"mikey179/vfsstream": "^1.6",
|
||||||
|
"mockery/mockery": "^1.2",
|
||||||
|
"phpunit/phpunit": "^9.5"
|
||||||
|
},
|
||||||
|
"time": "2024-07-29T03:24:24+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"files": [],
|
||||||
|
"psr-4": {
|
||||||
|
"think\\": "src/think/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"Apache-2.0"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "liu21st",
|
||||||
|
"email": "liu21st@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "yunwuxin",
|
||||||
|
"email": "448901948@qq.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "The ThinkPHP Framework.",
|
||||||
|
"homepage": "http://thinkphp.cn/",
|
||||||
|
"keywords": [
|
||||||
|
"framework",
|
||||||
|
"orm",
|
||||||
|
"thinkphp"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/top-think/framework/issues",
|
||||||
|
"source": "https://github.com/top-think/framework/tree/v8.0.4"
|
||||||
|
},
|
||||||
|
"install-path": "../topthink/framework"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "topthink/think-filesystem",
|
||||||
|
"version": "v2.0.2",
|
||||||
|
"version_normalized": "2.0.2.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/top-think/think-filesystem.git",
|
||||||
|
"reference": "c08503232fcae0c3c7fefae5e6b5c841ffe09f2f"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/top-think/think-filesystem/zipball/c08503232fcae0c3c7fefae5e6b5c841ffe09f2f",
|
||||||
|
"reference": "c08503232fcae0c3c7fefae5e6b5c841ffe09f2f",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"league/flysystem": "^2.0",
|
||||||
|
"topthink/framework": "^6.1|^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"mikey179/vfsstream": "^1.6",
|
||||||
|
"mockery/mockery": "^1.2",
|
||||||
|
"phpunit/phpunit": "^8.0"
|
||||||
|
},
|
||||||
|
"time": "2023-02-08T01:23:42+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"think\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"Apache-2.0"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "yunwuxin",
|
||||||
|
"email": "448901948@qq.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "The ThinkPHP6.1 Filesystem Package",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/top-think/think-filesystem/issues",
|
||||||
|
"source": "https://github.com/top-think/think-filesystem/tree/v2.0.2"
|
||||||
|
},
|
||||||
|
"install-path": "../topthink/think-filesystem"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "topthink/think-helper",
|
||||||
|
"version": "v3.1.6",
|
||||||
|
"version_normalized": "3.1.6.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/top-think/think-helper.git",
|
||||||
|
"reference": "769acbe50a4274327162f9c68ec2e89a38eb2aff"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/top-think/think-helper/zipball/769acbe50a4274327162f9c68ec2e89a38eb2aff",
|
||||||
|
"reference": "769acbe50a4274327162f9c68ec2e89a38eb2aff",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^9.5"
|
||||||
|
},
|
||||||
|
"time": "2021-12-15T04:27:55+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"src/helper.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"think\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"Apache-2.0"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "yunwuxin",
|
||||||
|
"email": "448901948@qq.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "The ThinkPHP6 Helper Package",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/top-think/think-helper/issues",
|
||||||
|
"source": "https://github.com/top-think/think-helper/tree/v3.1.6"
|
||||||
|
},
|
||||||
|
"install-path": "../topthink/think-helper"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "topthink/think-orm",
|
||||||
|
"version": "v3.0.20",
|
||||||
|
"version_normalized": "3.0.20.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/top-think/think-orm.git",
|
||||||
|
"reference": "f9fc4f110bbc8ccbf325903ca95ac77fb6523e2b"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/top-think/think-orm/zipball/f9fc4f110bbc8ccbf325903ca95ac77fb6523e2b",
|
||||||
|
"reference": "f9fc4f110bbc8ccbf325903ca95ac77fb6523e2b",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-json": "*",
|
||||||
|
"ext-pdo": "*",
|
||||||
|
"php": ">=8.0.0",
|
||||||
|
"psr/log": ">=1.0",
|
||||||
|
"psr/simple-cache": ">=1.0",
|
||||||
|
"topthink/think-helper": "^3.1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^9.6|^10"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-mongodb": "provide mongodb support"
|
||||||
|
},
|
||||||
|
"time": "2024-08-05T09:54:58+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"stubs/load_stubs.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"think\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"Apache-2.0"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "liu21st",
|
||||||
|
"email": "liu21st@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "the PHP Database&ORM Framework",
|
||||||
|
"keywords": [
|
||||||
|
"database",
|
||||||
|
"orm"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/top-think/think-orm/issues",
|
||||||
|
"source": "https://github.com/top-think/think-orm/tree/v3.0.20"
|
||||||
|
},
|
||||||
|
"install-path": "../topthink/think-orm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "topthink/think-trace",
|
||||||
|
"version": "v1.6",
|
||||||
|
"version_normalized": "1.6.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/top-think/think-trace.git",
|
||||||
|
"reference": "136cd5d97e8bdb780e4b5c1637c588ed7ca3e142"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/top-think/think-trace/zipball/136cd5d97e8bdb780e4b5c1637c588ed7ca3e142",
|
||||||
|
"reference": "136cd5d97e8bdb780e4b5c1637c588ed7ca3e142",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.1.0",
|
||||||
|
"topthink/framework": "^6.0|^8.0"
|
||||||
|
},
|
||||||
|
"time": "2023-02-07T08:36:32+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"think": {
|
||||||
|
"services": [
|
||||||
|
"think\\trace\\Service"
|
||||||
|
],
|
||||||
|
"config": {
|
||||||
|
"trace": "src/config.php"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"think\\trace\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"Apache-2.0"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "liu21st",
|
||||||
|
"email": "liu21st@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "thinkphp debug trace",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/top-think/think-trace/issues",
|
||||||
|
"source": "https://github.com/top-think/think-trace/tree/v1.6"
|
||||||
|
},
|
||||||
|
"install-path": "../topthink/think-trace"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"dev-package-names": [
|
||||||
|
"symfony/polyfill-mbstring",
|
||||||
|
"symfony/var-dumper",
|
||||||
|
"topthink/think-trace"
|
||||||
|
]
|
||||||
|
}
|
140
vendor/composer/installed.php
vendored
Normal file
140
vendor/composer/installed.php
vendored
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
<?php return array(
|
||||||
|
'root' => array(
|
||||||
|
'name' => 'topthink/think',
|
||||||
|
'pretty_version' => 'v8.0.0',
|
||||||
|
'version' => '8.0.0.0',
|
||||||
|
'reference' => NULL,
|
||||||
|
'type' => 'project',
|
||||||
|
'install_path' => __DIR__ . '/../../',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev' => true,
|
||||||
|
),
|
||||||
|
'versions' => array(
|
||||||
|
'league/flysystem' => array(
|
||||||
|
'pretty_version' => '2.5.0',
|
||||||
|
'version' => '2.5.0.0',
|
||||||
|
'reference' => '8aaffb653c5777781b0f7f69a5d937baf7ab6cdb',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../league/flysystem',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => false,
|
||||||
|
),
|
||||||
|
'league/mime-type-detection' => array(
|
||||||
|
'pretty_version' => '1.15.0',
|
||||||
|
'version' => '1.15.0.0',
|
||||||
|
'reference' => 'ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../league/mime-type-detection',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => false,
|
||||||
|
),
|
||||||
|
'psr/container' => array(
|
||||||
|
'pretty_version' => '2.0.2',
|
||||||
|
'version' => '2.0.2.0',
|
||||||
|
'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../psr/container',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => false,
|
||||||
|
),
|
||||||
|
'psr/http-message' => array(
|
||||||
|
'pretty_version' => '1.1',
|
||||||
|
'version' => '1.1.0.0',
|
||||||
|
'reference' => 'cb6ce4845ce34a8ad9e68117c10ee90a29919eba',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../psr/http-message',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => false,
|
||||||
|
),
|
||||||
|
'psr/log' => array(
|
||||||
|
'pretty_version' => '3.0.0',
|
||||||
|
'version' => '3.0.0.0',
|
||||||
|
'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../psr/log',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => false,
|
||||||
|
),
|
||||||
|
'psr/simple-cache' => array(
|
||||||
|
'pretty_version' => '3.0.0',
|
||||||
|
'version' => '3.0.0.0',
|
||||||
|
'reference' => '764e0b3939f5ca87cb904f570ef9be2d78a07865',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../psr/simple-cache',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => false,
|
||||||
|
),
|
||||||
|
'symfony/polyfill-mbstring' => array(
|
||||||
|
'pretty_version' => 'v1.30.0',
|
||||||
|
'version' => '1.30.0.0',
|
||||||
|
'reference' => 'fd22ab50000ef01661e2a31d850ebaa297f8e03c',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => true,
|
||||||
|
),
|
||||||
|
'symfony/var-dumper' => array(
|
||||||
|
'pretty_version' => 'v6.0.19',
|
||||||
|
'version' => '6.0.19.0',
|
||||||
|
'reference' => 'eb980457fa6899840fe1687e8627a03a7d8a3d52',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../symfony/var-dumper',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => true,
|
||||||
|
),
|
||||||
|
'topthink/framework' => array(
|
||||||
|
'pretty_version' => 'v8.0.4',
|
||||||
|
'version' => '8.0.4.0',
|
||||||
|
'reference' => '846432655a82614a874cdaaac7be6870940b14d2',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../topthink/framework',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => false,
|
||||||
|
),
|
||||||
|
'topthink/think' => array(
|
||||||
|
'pretty_version' => 'v8.0.0',
|
||||||
|
'version' => '8.0.0.0',
|
||||||
|
'reference' => NULL,
|
||||||
|
'type' => 'project',
|
||||||
|
'install_path' => __DIR__ . '/../../',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => false,
|
||||||
|
),
|
||||||
|
'topthink/think-filesystem' => array(
|
||||||
|
'pretty_version' => 'v2.0.2',
|
||||||
|
'version' => '2.0.2.0',
|
||||||
|
'reference' => 'c08503232fcae0c3c7fefae5e6b5c841ffe09f2f',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../topthink/think-filesystem',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => false,
|
||||||
|
),
|
||||||
|
'topthink/think-helper' => array(
|
||||||
|
'pretty_version' => 'v3.1.6',
|
||||||
|
'version' => '3.1.6.0',
|
||||||
|
'reference' => '769acbe50a4274327162f9c68ec2e89a38eb2aff',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../topthink/think-helper',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => false,
|
||||||
|
),
|
||||||
|
'topthink/think-orm' => array(
|
||||||
|
'pretty_version' => 'v3.0.20',
|
||||||
|
'version' => '3.0.20.0',
|
||||||
|
'reference' => 'f9fc4f110bbc8ccbf325903ca95ac77fb6523e2b',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../topthink/think-orm',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => false,
|
||||||
|
),
|
||||||
|
'topthink/think-trace' => array(
|
||||||
|
'pretty_version' => 'v1.6',
|
||||||
|
'version' => '1.6.0.0',
|
||||||
|
'reference' => '136cd5d97e8bdb780e4b5c1637c588ed7ca3e142',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../topthink/think-trace',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => true,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
26
vendor/composer/platform_check.php
vendored
Normal file
26
vendor/composer/platform_check.php
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// platform_check.php @generated by Composer
|
||||||
|
|
||||||
|
$issues = array();
|
||||||
|
|
||||||
|
if (!(PHP_VERSION_ID >= 80000)) {
|
||||||
|
$issues[] = 'Your Composer dependencies require a PHP version ">= 8.0.0". You are running ' . PHP_VERSION . '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($issues) {
|
||||||
|
if (!headers_sent()) {
|
||||||
|
header('HTTP/1.1 500 Internal Server Error');
|
||||||
|
}
|
||||||
|
if (!ini_get('display_errors')) {
|
||||||
|
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
||||||
|
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
|
||||||
|
} elseif (!headers_sent()) {
|
||||||
|
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trigger_error(
|
||||||
|
'Composer detected issues in your platform: ' . implode(' ', $issues),
|
||||||
|
E_USER_ERROR
|
||||||
|
);
|
||||||
|
}
|
2
vendor/league/flysystem/INFO.md
vendored
Normal file
2
vendor/league/flysystem/INFO.md
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
View the docs at: https://flysystem.thephpleague.com/v2/
|
||||||
|
Changelog at: https://github.com/thephpleague/flysystem/blob/2.x/CHANGELOG.md
|
19
vendor/league/flysystem/LICENSE
vendored
Normal file
19
vendor/league/flysystem/LICENSE
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2013-2022 Frank de Jonge
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is furnished
|
||||||
|
to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
48
vendor/league/flysystem/composer.json
vendored
Normal file
48
vendor/league/flysystem/composer.json
vendored
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"name": "league/flysystem",
|
||||||
|
"description": "File storage abstraction for PHP",
|
||||||
|
"keywords": [
|
||||||
|
"filesystem", "filesystems", "files", "storage", "aws",
|
||||||
|
"s3", "ftp", "sftp", "webdav", "file", "cloud"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"phpstan": "vendor/bin/phpstan analyse -l 6 src"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"minimum-stability": "dev",
|
||||||
|
"prefer-stable": true,
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"League\\Flysystem\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.2 || ^8.0",
|
||||||
|
"ext-json": "*",
|
||||||
|
"league/mime-type-detection": "^1.0.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"ext-fileinfo": "*",
|
||||||
|
"ext-ftp": "*",
|
||||||
|
"phpunit/phpunit": "^8.5 || ^9.4",
|
||||||
|
"phpstan/phpstan": "^0.12.26",
|
||||||
|
"phpseclib/phpseclib": "^2.0",
|
||||||
|
"aws/aws-sdk-php": "^3.132.4",
|
||||||
|
"composer/semver": "^3.0",
|
||||||
|
"friendsofphp/php-cs-fixer": "^3.2",
|
||||||
|
"google/cloud-storage": "^1.23",
|
||||||
|
"async-aws/s3": "^1.5",
|
||||||
|
"async-aws/simple-s3": "^1.0",
|
||||||
|
"sabre/dav": "^4.1"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"guzzlehttp/ringphp": "<1.1.1"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Frank de Jonge",
|
||||||
|
"email": "info@frankdejonge.nl"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
49
vendor/league/flysystem/config.subsplit-publish.json
vendored
Normal file
49
vendor/league/flysystem/config.subsplit-publish.json
vendored
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"sub-splits": [
|
||||||
|
{
|
||||||
|
"name": "ftp",
|
||||||
|
"directory": "src/Ftp",
|
||||||
|
"target": "git@github.com:thephpleague/flysystem-ftp.git"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sftp",
|
||||||
|
"directory": "src/PhpseclibV2",
|
||||||
|
"target": "git@github.com:thephpleague/flysystem-sftp.git"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sftp-v3",
|
||||||
|
"directory": "src/PhpseclibV3",
|
||||||
|
"target": "git@github.com:thephpleague/flysystem-sftp-v3.git"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "memory",
|
||||||
|
"directory": "src/InMemory",
|
||||||
|
"target": "git@github.com:thephpleague/flysystem-memory.git"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ziparchive",
|
||||||
|
"directory": "src/ZipArchive",
|
||||||
|
"target": "git@github.com:thephpleague/flysystem-ziparchive.git"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "aws-s3-v3",
|
||||||
|
"directory": "src/AwsS3V3",
|
||||||
|
"target": "git@github.com:thephpleague/flysystem-aws-s3-v3.git"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "async-aws-s3",
|
||||||
|
"directory": "src/AsyncAwsS3",
|
||||||
|
"target": "git@github.com:thephpleague/flysystem-async-aws-s3.git"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "google-cloud-storage",
|
||||||
|
"directory": "src/GoogleCloudStorage",
|
||||||
|
"target": "git@github.com:thephpleague/flysystem-google-cloud-storage.git"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "adapter-test-utilities",
|
||||||
|
"directory": "src/AdapterTestUtilities",
|
||||||
|
"target": "git@github.com:thephpleague/flysystem-adapter-test-utilities.git"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
58
vendor/league/flysystem/docker-compose.yml
vendored
Normal file
58
vendor/league/flysystem/docker-compose.yml
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
webdav:
|
||||||
|
image: bytemark/webdav
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
environment:
|
||||||
|
AUTH_TYPE: Digest
|
||||||
|
USERNAME: alice
|
||||||
|
PASSWORD: secret1234
|
||||||
|
sftp:
|
||||||
|
container_name: sftp
|
||||||
|
restart: always
|
||||||
|
image: atmoz/sftp
|
||||||
|
volumes:
|
||||||
|
- ./test_files/sftp/users.conf:/etc/sftp/users.conf
|
||||||
|
- ./test_files/sftp/ssh_host_ed25519_key:/etc/ssh/ssh_host_ed25519_key
|
||||||
|
- ./test_files/sftp/ssh_host_rsa_key:/etc/ssh/ssh_host_rsa_key
|
||||||
|
- ./test_files/sftp/id_rsa.pub:/home/bar/.ssh/keys/id_rsa.pub
|
||||||
|
ports:
|
||||||
|
- "2222:22"
|
||||||
|
ftp:
|
||||||
|
container_name: ftp
|
||||||
|
restart: always
|
||||||
|
image: delfer/alpine-ftp-server
|
||||||
|
environment:
|
||||||
|
USERS: 'foo|pass|/home/foo/upload'
|
||||||
|
ADDRESS: 'localhost'
|
||||||
|
ports:
|
||||||
|
- "2121:21"
|
||||||
|
- "21000-21010:21000-21010"
|
||||||
|
ftpd:
|
||||||
|
container_name: ftpd
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
PUBLICHOST: localhost
|
||||||
|
FTP_USER_NAME: foo
|
||||||
|
FTP_USER_PASS: pass
|
||||||
|
FTP_USER_HOME: /home/foo
|
||||||
|
image: stilliard/pure-ftpd
|
||||||
|
ports:
|
||||||
|
- "2122:21"
|
||||||
|
- "30000-30009:30000-30009"
|
||||||
|
command: "/run.sh -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -j -P localhost"
|
||||||
|
toxiproxy:
|
||||||
|
container_name: toxiproxy
|
||||||
|
restart: unless-stopped
|
||||||
|
image: ghcr.io/shopify/toxiproxy
|
||||||
|
command: "-host 0.0.0.0 -config /opt/toxiproxy/config.json"
|
||||||
|
volumes:
|
||||||
|
- ./test_files/toxiproxy/toxiproxy.json:/opt/toxiproxy/config.json:ro
|
||||||
|
ports:
|
||||||
|
- "8474:8474" # HTTP API
|
||||||
|
- "8222:8222" # SFTP
|
||||||
|
- "8121:8121" # FTP
|
||||||
|
- "8122:8122" # FTPD
|
45
vendor/league/flysystem/readme.md
vendored
Normal file
45
vendor/league/flysystem/readme.md
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# League\Flysystem
|
||||||
|
|
||||||
|
[](https://twitter.com/frankdejonge)
|
||||||
|
[](https://github.com/thephpleague/flysystem)
|
||||||
|
[](https://github.com/thephpleague/flysystem/releases)
|
||||||
|
[](https://github.com/thephpleague/flysystem/blob/master/LICENSE)
|
||||||
|
[](https://github.com/thephpleague/flysystem/actions?query=workflow%3A%22Quality+Assurance%22)
|
||||||
|
[](https://packagist.org/packages/league/flysystem)
|
||||||
|

|
||||||
|
|
||||||
|
## About Flysystem
|
||||||
|
|
||||||
|
Flysystem is a file storage library for PHP. It provides one interface to
|
||||||
|
interact with many types of filesystems. When you use Flysystem, you're
|
||||||
|
not only protected from vendor lock-in, you'll also have a consistent experience
|
||||||
|
for which ever storage is right for you.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
* **[New in V2](https://flysystem.thephpleague.com/v2/docs/what-is-new/)**: What it new in Flysystem V2?
|
||||||
|
* **[Architecture](https://flysystem.thephpleague.com/v2/docs/architecture/)**: Flysystem's internal architecture
|
||||||
|
* **[Flysystem API](https://flysystem.thephpleague.com/v2/docs/usage/filesystem-api/)**: How to interact with your Flysystem instance
|
||||||
|
* **[Upgrade to V2](https://flysystem.thephpleague.com/v2/docs/advanced/upgrade-to-2.0.0/)**: How to upgrade your Flysystem V1 instance to V2
|
||||||
|
|
||||||
|
### Commonly-Used Adapters
|
||||||
|
|
||||||
|
* **[AsyncAws S3](https://flysystem.thephpleague.com/v2/docs/adapter/async-aws-s3/)**
|
||||||
|
* **[AWS S3](https://flysystem.thephpleague.com/v2/docs/adapter/aws-s3-v3/)**
|
||||||
|
* **[Local](https://flysystem.thephpleague.com/v2/docs/adapter/local/)**
|
||||||
|
* **[Memory](https://flysystem.thephpleague.com/v2/docs/adapter/in-memory/)**
|
||||||
|
|
||||||
|
### Third party Adapters
|
||||||
|
|
||||||
|
* **[Gitlab](https://github.com/RoyVoetman/flysystem-gitlab-storage)**
|
||||||
|
* **[Google Drive (using regular paths)](https://github.com/masbug/flysystem-google-drive-ext)**
|
||||||
|
|
||||||
|
You can always [create an adapter](https://flysystem.thephpleague.com/v2/docs/advanced/creating-an-adapter/) yourself.
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
If you discover any security related issues, please email info@frankdejonge.nl instead of using the issue tracker.
|
||||||
|
|
||||||
|
## Enjoy
|
||||||
|
|
||||||
|
Oh, and if you've come down this far, you might as well follow me on [twitter](https://twitter.com/frankdejonge).
|
43
vendor/league/flysystem/src/Config.php
vendored
Normal file
43
vendor/league/flysystem/src/Config.php
vendored
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use function array_merge;
|
||||||
|
|
||||||
|
class Config
|
||||||
|
{
|
||||||
|
public const OPTION_VISIBILITY = 'visibility';
|
||||||
|
public const OPTION_DIRECTORY_VISIBILITY = 'directory_visibility';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $options;
|
||||||
|
|
||||||
|
public function __construct(array $options = [])
|
||||||
|
{
|
||||||
|
$this->options = $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $default
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function get(string $property, $default = null)
|
||||||
|
{
|
||||||
|
return $this->options[$property] ?? $default;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function extend(array $options): Config
|
||||||
|
{
|
||||||
|
return new Config(array_merge($this->options, $options));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function withDefaults(array $defaults): Config
|
||||||
|
{
|
||||||
|
return new Config($this->options + $defaults);
|
||||||
|
}
|
||||||
|
}
|
13
vendor/league/flysystem/src/CorruptedPathDetected.php
vendored
Normal file
13
vendor/league/flysystem/src/CorruptedPathDetected.php
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
|
||||||
|
final class CorruptedPathDetected extends RuntimeException implements FilesystemException
|
||||||
|
{
|
||||||
|
public static function forPath(string $path): CorruptedPathDetected
|
||||||
|
{
|
||||||
|
return new CorruptedPathDetected("Corrupted path detected: " . $path);
|
||||||
|
}
|
||||||
|
}
|
110
vendor/league/flysystem/src/DirectoryAttributes.php
vendored
Normal file
110
vendor/league/flysystem/src/DirectoryAttributes.php
vendored
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
class DirectoryAttributes implements StorageAttributes
|
||||||
|
{
|
||||||
|
use ProxyArrayAccessToProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $type = StorageAttributes::TYPE_DIRECTORY;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $path;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string|null
|
||||||
|
*/
|
||||||
|
private $visibility;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int|null
|
||||||
|
*/
|
||||||
|
private $lastModified;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $extraMetadata;
|
||||||
|
|
||||||
|
public function __construct(string $path, ?string $visibility = null, ?int $lastModified = null, array $extraMetadata = [])
|
||||||
|
{
|
||||||
|
$this->path = $path;
|
||||||
|
$this->visibility = $visibility;
|
||||||
|
$this->lastModified = $lastModified;
|
||||||
|
$this->extraMetadata = $extraMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function path(): string
|
||||||
|
{
|
||||||
|
return $this->path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function type(): string
|
||||||
|
{
|
||||||
|
return StorageAttributes::TYPE_DIRECTORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function visibility(): ?string
|
||||||
|
{
|
||||||
|
return $this->visibility;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function lastModified(): ?int
|
||||||
|
{
|
||||||
|
return $this->lastModified;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function extraMetadata(): array
|
||||||
|
{
|
||||||
|
return $this->extraMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isFile(): bool
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isDir(): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function withPath(string $path): StorageAttributes
|
||||||
|
{
|
||||||
|
$clone = clone $this;
|
||||||
|
$clone->path = $path;
|
||||||
|
|
||||||
|
return $clone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function fromArray(array $attributes): StorageAttributes
|
||||||
|
{
|
||||||
|
return new DirectoryAttributes(
|
||||||
|
$attributes[StorageAttributes::ATTRIBUTE_PATH],
|
||||||
|
$attributes[StorageAttributes::ATTRIBUTE_VISIBILITY] ?? null,
|
||||||
|
$attributes[StorageAttributes::ATTRIBUTE_LAST_MODIFIED] ?? null,
|
||||||
|
$attributes[StorageAttributes::ATTRIBUTE_EXTRA_METADATA] ?? []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function jsonSerialize(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
StorageAttributes::ATTRIBUTE_TYPE => $this->type,
|
||||||
|
StorageAttributes::ATTRIBUTE_PATH => $this->path,
|
||||||
|
StorageAttributes::ATTRIBUTE_VISIBILITY => $this->visibility,
|
||||||
|
StorageAttributes::ATTRIBUTE_LAST_MODIFIED => $this->lastModified,
|
||||||
|
StorageAttributes::ATTRIBUTE_EXTRA_METADATA => $this->extraMetadata,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
84
vendor/league/flysystem/src/DirectoryListing.php
vendored
Normal file
84
vendor/league/flysystem/src/DirectoryListing.php
vendored
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use ArrayIterator;
|
||||||
|
use Generator;
|
||||||
|
use IteratorAggregate;
|
||||||
|
use Traversable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @template T
|
||||||
|
*/
|
||||||
|
class DirectoryListing implements IteratorAggregate
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var iterable<T>
|
||||||
|
*/
|
||||||
|
private $listing;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param iterable<T> $listing
|
||||||
|
*/
|
||||||
|
public function __construct(iterable $listing)
|
||||||
|
{
|
||||||
|
$this->listing = $listing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function filter(callable $filter): DirectoryListing
|
||||||
|
{
|
||||||
|
$generator = (static function (iterable $listing) use ($filter): Generator {
|
||||||
|
foreach ($listing as $item) {
|
||||||
|
if ($filter($item)) {
|
||||||
|
yield $item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})($this->listing);
|
||||||
|
|
||||||
|
return new DirectoryListing($generator);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function map(callable $mapper): DirectoryListing
|
||||||
|
{
|
||||||
|
$generator = (static function (iterable $listing) use ($mapper): Generator {
|
||||||
|
foreach ($listing as $item) {
|
||||||
|
yield $mapper($item);
|
||||||
|
}
|
||||||
|
})($this->listing);
|
||||||
|
|
||||||
|
return new DirectoryListing($generator);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function sortByPath(): DirectoryListing
|
||||||
|
{
|
||||||
|
$listing = $this->toArray();
|
||||||
|
|
||||||
|
usort($listing, function (StorageAttributes $a, StorageAttributes $b) {
|
||||||
|
return $a->path() <=> $b->path();
|
||||||
|
});
|
||||||
|
|
||||||
|
return new DirectoryListing($listing);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Traversable<T>
|
||||||
|
*/
|
||||||
|
public function getIterator(): Traversable
|
||||||
|
{
|
||||||
|
return $this->listing instanceof Traversable
|
||||||
|
? $this->listing
|
||||||
|
: new ArrayIterator($this->listing);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return T[]
|
||||||
|
*/
|
||||||
|
public function toArray(): array
|
||||||
|
{
|
||||||
|
return $this->listing instanceof Traversable
|
||||||
|
? iterator_to_array($this->listing, false)
|
||||||
|
: (array) $this->listing;
|
||||||
|
}
|
||||||
|
}
|
139
vendor/league/flysystem/src/FileAttributes.php
vendored
Normal file
139
vendor/league/flysystem/src/FileAttributes.php
vendored
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
class FileAttributes implements StorageAttributes
|
||||||
|
{
|
||||||
|
use ProxyArrayAccessToProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $type = StorageAttributes::TYPE_FILE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $path;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int|null
|
||||||
|
*/
|
||||||
|
private $fileSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string|null
|
||||||
|
*/
|
||||||
|
private $visibility;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int|null
|
||||||
|
*/
|
||||||
|
private $lastModified;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string|null
|
||||||
|
*/
|
||||||
|
private $mimeType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $extraMetadata;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
string $path,
|
||||||
|
?int $fileSize = null,
|
||||||
|
?string $visibility = null,
|
||||||
|
?int $lastModified = null,
|
||||||
|
?string $mimeType = null,
|
||||||
|
array $extraMetadata = []
|
||||||
|
) {
|
||||||
|
$this->path = $path;
|
||||||
|
$this->fileSize = $fileSize;
|
||||||
|
$this->visibility = $visibility;
|
||||||
|
$this->lastModified = $lastModified;
|
||||||
|
$this->mimeType = $mimeType;
|
||||||
|
$this->extraMetadata = $extraMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function type(): string
|
||||||
|
{
|
||||||
|
return $this->type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function path(): string
|
||||||
|
{
|
||||||
|
return $this->path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fileSize(): ?int
|
||||||
|
{
|
||||||
|
return $this->fileSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function visibility(): ?string
|
||||||
|
{
|
||||||
|
return $this->visibility;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function lastModified(): ?int
|
||||||
|
{
|
||||||
|
return $this->lastModified;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function mimeType(): ?string
|
||||||
|
{
|
||||||
|
return $this->mimeType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function extraMetadata(): array
|
||||||
|
{
|
||||||
|
return $this->extraMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isFile(): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isDir(): bool
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function withPath(string $path): StorageAttributes
|
||||||
|
{
|
||||||
|
$clone = clone $this;
|
||||||
|
$clone->path = $path;
|
||||||
|
|
||||||
|
return $clone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function fromArray(array $attributes): StorageAttributes
|
||||||
|
{
|
||||||
|
return new FileAttributes(
|
||||||
|
$attributes[StorageAttributes::ATTRIBUTE_PATH],
|
||||||
|
$attributes[StorageAttributes::ATTRIBUTE_FILE_SIZE] ?? null,
|
||||||
|
$attributes[StorageAttributes::ATTRIBUTE_VISIBILITY] ?? null,
|
||||||
|
$attributes[StorageAttributes::ATTRIBUTE_LAST_MODIFIED] ?? null,
|
||||||
|
$attributes[StorageAttributes::ATTRIBUTE_MIME_TYPE] ?? null,
|
||||||
|
$attributes[StorageAttributes::ATTRIBUTE_EXTRA_METADATA] ?? []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function jsonSerialize(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
StorageAttributes::ATTRIBUTE_TYPE => self::TYPE_FILE,
|
||||||
|
StorageAttributes::ATTRIBUTE_PATH => $this->path,
|
||||||
|
StorageAttributes::ATTRIBUTE_FILE_SIZE => $this->fileSize,
|
||||||
|
StorageAttributes::ATTRIBUTE_VISIBILITY => $this->visibility,
|
||||||
|
StorageAttributes::ATTRIBUTE_LAST_MODIFIED => $this->lastModified,
|
||||||
|
StorageAttributes::ATTRIBUTE_MIME_TYPE => $this->mimeType,
|
||||||
|
StorageAttributes::ATTRIBUTE_EXTRA_METADATA => $this->extraMetadata,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
163
vendor/league/flysystem/src/Filesystem.php
vendored
Normal file
163
vendor/league/flysystem/src/Filesystem.php
vendored
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
class Filesystem implements FilesystemOperator
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var FilesystemAdapter
|
||||||
|
*/
|
||||||
|
private $adapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Config
|
||||||
|
*/
|
||||||
|
private $config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var PathNormalizer
|
||||||
|
*/
|
||||||
|
private $pathNormalizer;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
FilesystemAdapter $adapter,
|
||||||
|
array $config = [],
|
||||||
|
PathNormalizer $pathNormalizer = null
|
||||||
|
) {
|
||||||
|
$this->adapter = $adapter;
|
||||||
|
$this->config = new Config($config);
|
||||||
|
$this->pathNormalizer = $pathNormalizer ?: new WhitespacePathNormalizer();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fileExists(string $location): bool
|
||||||
|
{
|
||||||
|
return $this->adapter->fileExists($this->pathNormalizer->normalizePath($location));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function write(string $location, string $contents, array $config = []): void
|
||||||
|
{
|
||||||
|
$this->adapter->write(
|
||||||
|
$this->pathNormalizer->normalizePath($location),
|
||||||
|
$contents,
|
||||||
|
$this->config->extend($config)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function writeStream(string $location, $contents, array $config = []): void
|
||||||
|
{
|
||||||
|
/* @var resource $contents */
|
||||||
|
$this->assertIsResource($contents);
|
||||||
|
$this->rewindStream($contents);
|
||||||
|
$this->adapter->writeStream(
|
||||||
|
$this->pathNormalizer->normalizePath($location),
|
||||||
|
$contents,
|
||||||
|
$this->config->extend($config)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function read(string $location): string
|
||||||
|
{
|
||||||
|
return $this->adapter->read($this->pathNormalizer->normalizePath($location));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function readStream(string $location)
|
||||||
|
{
|
||||||
|
return $this->adapter->readStream($this->pathNormalizer->normalizePath($location));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete(string $location): void
|
||||||
|
{
|
||||||
|
$this->adapter->delete($this->pathNormalizer->normalizePath($location));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteDirectory(string $location): void
|
||||||
|
{
|
||||||
|
$this->adapter->deleteDirectory($this->pathNormalizer->normalizePath($location));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createDirectory(string $location, array $config = []): void
|
||||||
|
{
|
||||||
|
$this->adapter->createDirectory(
|
||||||
|
$this->pathNormalizer->normalizePath($location),
|
||||||
|
$this->config->extend($config)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function listContents(string $location, bool $deep = self::LIST_SHALLOW): DirectoryListing
|
||||||
|
{
|
||||||
|
$path = $this->pathNormalizer->normalizePath($location);
|
||||||
|
|
||||||
|
return new DirectoryListing($this->adapter->listContents($path, $deep));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function move(string $source, string $destination, array $config = []): void
|
||||||
|
{
|
||||||
|
$this->adapter->move(
|
||||||
|
$this->pathNormalizer->normalizePath($source),
|
||||||
|
$this->pathNormalizer->normalizePath($destination),
|
||||||
|
$this->config->extend($config)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function copy(string $source, string $destination, array $config = []): void
|
||||||
|
{
|
||||||
|
$this->adapter->copy(
|
||||||
|
$this->pathNormalizer->normalizePath($source),
|
||||||
|
$this->pathNormalizer->normalizePath($destination),
|
||||||
|
$this->config->extend($config)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function lastModified(string $path): int
|
||||||
|
{
|
||||||
|
return $this->adapter->lastModified($this->pathNormalizer->normalizePath($path))->lastModified();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fileSize(string $path): int
|
||||||
|
{
|
||||||
|
return $this->adapter->fileSize($this->pathNormalizer->normalizePath($path))->fileSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function mimeType(string $path): string
|
||||||
|
{
|
||||||
|
return $this->adapter->mimeType($this->pathNormalizer->normalizePath($path))->mimeType();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setVisibility(string $path, string $visibility): void
|
||||||
|
{
|
||||||
|
$this->adapter->setVisibility($this->pathNormalizer->normalizePath($path), $visibility);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function visibility(string $path): string
|
||||||
|
{
|
||||||
|
return $this->adapter->visibility($this->pathNormalizer->normalizePath($path))->visibility();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $contents
|
||||||
|
*/
|
||||||
|
private function assertIsResource($contents): void
|
||||||
|
{
|
||||||
|
if (is_resource($contents) === false) {
|
||||||
|
throw new InvalidStreamProvided(
|
||||||
|
"Invalid stream provided, expected stream resource, received " . gettype($contents)
|
||||||
|
);
|
||||||
|
} elseif ($type = get_resource_type($contents) !== 'stream') {
|
||||||
|
throw new InvalidStreamProvided(
|
||||||
|
"Invalid stream provided, expected stream resource, received resource of type " . $type
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param resource $resource
|
||||||
|
*/
|
||||||
|
private function rewindStream($resource): void
|
||||||
|
{
|
||||||
|
if (ftell($resource) !== 0 && stream_get_meta_data($resource)['seekable']) {
|
||||||
|
rewind($resource);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
108
vendor/league/flysystem/src/FilesystemAdapter.php
vendored
Normal file
108
vendor/league/flysystem/src/FilesystemAdapter.php
vendored
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
interface FilesystemAdapter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function fileExists(string $path): bool;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToWriteFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function write(string $path, string $contents, Config $config): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param resource $contents
|
||||||
|
*
|
||||||
|
* @throws UnableToWriteFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function writeStream(string $path, $contents, Config $config): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToReadFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function read(string $path): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return resource
|
||||||
|
*
|
||||||
|
* @throws UnableToReadFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function readStream(string $path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToDeleteFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function delete(string $path): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToDeleteDirectory
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function deleteDirectory(string $path): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToCreateDirectory
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function createDirectory(string $path, Config $config): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws InvalidVisibilityProvided
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function setVisibility(string $path, string $visibility): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToRetrieveMetadata
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function visibility(string $path): FileAttributes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToRetrieveMetadata
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function mimeType(string $path): FileAttributes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToRetrieveMetadata
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function lastModified(string $path): FileAttributes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToRetrieveMetadata
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function fileSize(string $path): FileAttributes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return iterable<StorageAttributes>
|
||||||
|
*
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function listContents(string $path, bool $deep): iterable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToMoveFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function move(string $source, string $destination, Config $config): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToCopyFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function copy(string $source, string $destination, Config $config): void;
|
||||||
|
}
|
11
vendor/league/flysystem/src/FilesystemException.php
vendored
Normal file
11
vendor/league/flysystem/src/FilesystemException.php
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
interface FilesystemException extends Throwable
|
||||||
|
{
|
||||||
|
}
|
22
vendor/league/flysystem/src/FilesystemOperationFailed.php
vendored
Normal file
22
vendor/league/flysystem/src/FilesystemOperationFailed.php
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
interface FilesystemOperationFailed extends FilesystemException
|
||||||
|
{
|
||||||
|
public const OPERATION_WRITE = 'WRITE';
|
||||||
|
public const OPERATION_UPDATE = 'UPDATE';
|
||||||
|
public const OPERATION_FILE_EXISTS = 'FILE_EXISTS';
|
||||||
|
public const OPERATION_CREATE_DIRECTORY = 'CREATE_DIRECTORY';
|
||||||
|
public const OPERATION_DELETE = 'DELETE';
|
||||||
|
public const OPERATION_DELETE_DIRECTORY = 'DELETE_DIRECTORY';
|
||||||
|
public const OPERATION_MOVE = 'MOVE';
|
||||||
|
public const OPERATION_RETRIEVE_METADATA = 'RETRIEVE_METADATA';
|
||||||
|
public const OPERATION_COPY = 'COPY';
|
||||||
|
public const OPERATION_READ = 'READ';
|
||||||
|
public const OPERATION_SET_VISIBILITY = 'SET_VISIBILITY';
|
||||||
|
|
||||||
|
public function operation(): string;
|
||||||
|
}
|
9
vendor/league/flysystem/src/FilesystemOperator.php
vendored
Normal file
9
vendor/league/flysystem/src/FilesystemOperator.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
interface FilesystemOperator extends FilesystemReader, FilesystemWriter
|
||||||
|
{
|
||||||
|
}
|
66
vendor/league/flysystem/src/FilesystemReader.php
vendored
Normal file
66
vendor/league/flysystem/src/FilesystemReader.php
vendored
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface contains everything to read from and inspect
|
||||||
|
* a filesystem. All methods containing are non-destructive.
|
||||||
|
*/
|
||||||
|
interface FilesystemReader
|
||||||
|
{
|
||||||
|
public const LIST_SHALLOW = false;
|
||||||
|
public const LIST_DEEP = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws FilesystemException
|
||||||
|
* @throws UnableToCheckFileExistence
|
||||||
|
*/
|
||||||
|
public function fileExists(string $location): bool;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToReadFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function read(string $location): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return resource
|
||||||
|
*
|
||||||
|
* @throws UnableToReadFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function readStream(string $location);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return DirectoryListing<StorageAttributes>
|
||||||
|
*
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function listContents(string $location, bool $deep = self::LIST_SHALLOW): DirectoryListing;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToRetrieveMetadata
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function lastModified(string $path): int;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToRetrieveMetadata
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function fileSize(string $path): int;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToRetrieveMetadata
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function mimeType(string $path): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToRetrieveMetadata
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function visibility(string $path): string;
|
||||||
|
}
|
58
vendor/league/flysystem/src/FilesystemWriter.php
vendored
Normal file
58
vendor/league/flysystem/src/FilesystemWriter.php
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
interface FilesystemWriter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @throws UnableToWriteFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function write(string $location, string $contents, array $config = []): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $contents
|
||||||
|
*
|
||||||
|
* @throws UnableToWriteFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function writeStream(string $location, $contents, array $config = []): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToSetVisibility
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function setVisibility(string $path, string $visibility): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToDeleteFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function delete(string $location): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToDeleteDirectory
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function deleteDirectory(string $location): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToCreateDirectory
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function createDirectory(string $location, array $config = []): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToMoveFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function move(string $source, string $destination, array $config = []): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws UnableToCopyFile
|
||||||
|
* @throws FilesystemException
|
||||||
|
*/
|
||||||
|
public function copy(string $source, string $destination, array $config = []): void;
|
||||||
|
}
|
11
vendor/league/flysystem/src/InvalidStreamProvided.php
vendored
Normal file
11
vendor/league/flysystem/src/InvalidStreamProvided.php
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use InvalidArgumentException as BaseInvalidArgumentException;
|
||||||
|
|
||||||
|
class InvalidStreamProvided extends BaseInvalidArgumentException implements FilesystemException
|
||||||
|
{
|
||||||
|
}
|
20
vendor/league/flysystem/src/InvalidVisibilityProvided.php
vendored
Normal file
20
vendor/league/flysystem/src/InvalidVisibilityProvided.php
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use InvalidArgumentException;
|
||||||
|
|
||||||
|
use function var_export;
|
||||||
|
|
||||||
|
class InvalidVisibilityProvided extends InvalidArgumentException implements FilesystemException
|
||||||
|
{
|
||||||
|
public static function withVisibility(string $visibility, string $expectedMessage): InvalidVisibilityProvided
|
||||||
|
{
|
||||||
|
$provided = var_export($visibility, true);
|
||||||
|
$message = "Invalid visibility provided. Expected {$expectedMessage}, received {$provided}";
|
||||||
|
|
||||||
|
throw new InvalidVisibilityProvided($message);
|
||||||
|
}
|
||||||
|
}
|
419
vendor/league/flysystem/src/Local/LocalFilesystemAdapter.php
vendored
Normal file
419
vendor/league/flysystem/src/Local/LocalFilesystemAdapter.php
vendored
Normal file
@ -0,0 +1,419 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem\Local;
|
||||||
|
|
||||||
|
use function file_put_contents;
|
||||||
|
use const DIRECTORY_SEPARATOR;
|
||||||
|
use const LOCK_EX;
|
||||||
|
use DirectoryIterator;
|
||||||
|
use FilesystemIterator;
|
||||||
|
use Generator;
|
||||||
|
use League\Flysystem\Config;
|
||||||
|
use League\Flysystem\DirectoryAttributes;
|
||||||
|
use League\Flysystem\FileAttributes;
|
||||||
|
use League\Flysystem\FilesystemAdapter;
|
||||||
|
use League\Flysystem\PathPrefixer;
|
||||||
|
use League\Flysystem\SymbolicLinkEncountered;
|
||||||
|
use League\Flysystem\UnableToCopyFile;
|
||||||
|
use League\Flysystem\UnableToCreateDirectory;
|
||||||
|
use League\Flysystem\UnableToDeleteDirectory;
|
||||||
|
use League\Flysystem\UnableToDeleteFile;
|
||||||
|
use League\Flysystem\UnableToMoveFile;
|
||||||
|
use League\Flysystem\UnableToReadFile;
|
||||||
|
use League\Flysystem\UnableToRetrieveMetadata;
|
||||||
|
use League\Flysystem\UnableToSetVisibility;
|
||||||
|
use League\Flysystem\UnableToWriteFile;
|
||||||
|
use League\Flysystem\UnixVisibility\PortableVisibilityConverter;
|
||||||
|
use League\Flysystem\UnixVisibility\VisibilityConverter;
|
||||||
|
use League\MimeTypeDetection\FinfoMimeTypeDetector;
|
||||||
|
use League\MimeTypeDetection\MimeTypeDetector;
|
||||||
|
use RecursiveDirectoryIterator;
|
||||||
|
use RecursiveIteratorIterator;
|
||||||
|
use SplFileInfo;
|
||||||
|
use function chmod;
|
||||||
|
use function clearstatcache;
|
||||||
|
use function dirname;
|
||||||
|
use function error_clear_last;
|
||||||
|
use function error_get_last;
|
||||||
|
use function file_exists;
|
||||||
|
use function is_dir;
|
||||||
|
use function is_file;
|
||||||
|
use function mkdir;
|
||||||
|
use function rename;
|
||||||
|
use function stream_copy_to_stream;
|
||||||
|
|
||||||
|
class LocalFilesystemAdapter implements FilesystemAdapter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public const SKIP_LINKS = 0001;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public const DISALLOW_LINKS = 0002;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var PathPrefixer
|
||||||
|
*/
|
||||||
|
private $prefixer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $writeFlags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $linkHandling;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var VisibilityConverter
|
||||||
|
*/
|
||||||
|
private $visibility;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var MimeTypeDetector
|
||||||
|
*/
|
||||||
|
private $mimeTypeDetector;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
string $location,
|
||||||
|
VisibilityConverter $visibility = null,
|
||||||
|
int $writeFlags = LOCK_EX,
|
||||||
|
int $linkHandling = self::DISALLOW_LINKS,
|
||||||
|
MimeTypeDetector $mimeTypeDetector = null
|
||||||
|
) {
|
||||||
|
$this->prefixer = new PathPrefixer($location, DIRECTORY_SEPARATOR);
|
||||||
|
$this->writeFlags = $writeFlags;
|
||||||
|
$this->linkHandling = $linkHandling;
|
||||||
|
$this->visibility = $visibility ?: new PortableVisibilityConverter();
|
||||||
|
$this->ensureDirectoryExists($location, $this->visibility->defaultForDirectories());
|
||||||
|
$this->mimeTypeDetector = $mimeTypeDetector ?: new FinfoMimeTypeDetector();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function write(string $path, string $contents, Config $config): void
|
||||||
|
{
|
||||||
|
$this->writeToFile($path, $contents, $config);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function writeStream(string $path, $contents, Config $config): void
|
||||||
|
{
|
||||||
|
$this->writeToFile($path, $contents, $config);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param resource|string $contents
|
||||||
|
*/
|
||||||
|
private function writeToFile(string $path, $contents, Config $config): void
|
||||||
|
{
|
||||||
|
$prefixedLocation = $this->prefixer->prefixPath($path);
|
||||||
|
$this->ensureDirectoryExists(
|
||||||
|
dirname($prefixedLocation),
|
||||||
|
$this->resolveDirectoryVisibility($config->get(Config::OPTION_DIRECTORY_VISIBILITY))
|
||||||
|
);
|
||||||
|
error_clear_last();
|
||||||
|
|
||||||
|
if (@file_put_contents($prefixedLocation, $contents, $this->writeFlags) === false) {
|
||||||
|
throw UnableToWriteFile::atLocation($path, error_get_last()['message'] ?? '');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($visibility = $config->get(Config::OPTION_VISIBILITY)) {
|
||||||
|
$this->setVisibility($path, (string) $visibility);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete(string $path): void
|
||||||
|
{
|
||||||
|
$location = $this->prefixer->prefixPath($path);
|
||||||
|
|
||||||
|
if ( ! file_exists($location)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
error_clear_last();
|
||||||
|
|
||||||
|
if ( ! @unlink($location)) {
|
||||||
|
throw UnableToDeleteFile::atLocation($location, error_get_last()['message'] ?? '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteDirectory(string $prefix): void
|
||||||
|
{
|
||||||
|
$location = $this->prefixer->prefixPath($prefix);
|
||||||
|
|
||||||
|
if ( ! is_dir($location)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$contents = $this->listDirectoryRecursively($location, RecursiveIteratorIterator::CHILD_FIRST);
|
||||||
|
|
||||||
|
/** @var SplFileInfo $file */
|
||||||
|
foreach ($contents as $file) {
|
||||||
|
if ( ! $this->deleteFileInfoObject($file)) {
|
||||||
|
throw UnableToDeleteDirectory::atLocation($prefix, "Unable to delete file at " . $file->getPathname());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($contents);
|
||||||
|
|
||||||
|
if ( ! @rmdir($location)) {
|
||||||
|
throw UnableToDeleteDirectory::atLocation($prefix, error_get_last()['message'] ?? '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function listDirectoryRecursively(
|
||||||
|
string $path,
|
||||||
|
int $mode = RecursiveIteratorIterator::SELF_FIRST
|
||||||
|
): Generator {
|
||||||
|
yield from new RecursiveIteratorIterator(
|
||||||
|
new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS),
|
||||||
|
$mode
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function deleteFileInfoObject(SplFileInfo $file): bool
|
||||||
|
{
|
||||||
|
switch ($file->getType()) {
|
||||||
|
case 'dir':
|
||||||
|
return @rmdir((string) $file->getRealPath());
|
||||||
|
case 'link':
|
||||||
|
return @unlink((string) $file->getPathname());
|
||||||
|
default:
|
||||||
|
return @unlink((string) $file->getRealPath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function listContents(string $path, bool $deep): iterable
|
||||||
|
{
|
||||||
|
$location = $this->prefixer->prefixPath($path);
|
||||||
|
|
||||||
|
if ( ! is_dir($location)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var SplFileInfo[] $iterator */
|
||||||
|
$iterator = $deep ? $this->listDirectoryRecursively($location) : $this->listDirectory($location);
|
||||||
|
|
||||||
|
foreach ($iterator as $fileInfo) {
|
||||||
|
if ($fileInfo->isLink()) {
|
||||||
|
if ($this->linkHandling & self::SKIP_LINKS) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
throw SymbolicLinkEncountered::atLocation($fileInfo->getPathname());
|
||||||
|
}
|
||||||
|
|
||||||
|
$path = $this->prefixer->stripPrefix($fileInfo->getPathname());
|
||||||
|
$lastModified = $fileInfo->getMTime();
|
||||||
|
$isDirectory = $fileInfo->isDir();
|
||||||
|
$permissions = octdec(substr(sprintf('%o', $fileInfo->getPerms()), -4));
|
||||||
|
$visibility = $isDirectory ? $this->visibility->inverseForDirectory($permissions) : $this->visibility->inverseForFile($permissions);
|
||||||
|
|
||||||
|
yield $isDirectory ? new DirectoryAttributes($path, $visibility, $lastModified) : new FileAttributes(
|
||||||
|
str_replace('\\', '/', $path),
|
||||||
|
$fileInfo->getSize(),
|
||||||
|
$visibility,
|
||||||
|
$lastModified
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function move(string $source, string $destination, Config $config): void
|
||||||
|
{
|
||||||
|
$sourcePath = $this->prefixer->prefixPath($source);
|
||||||
|
$destinationPath = $this->prefixer->prefixPath($destination);
|
||||||
|
$this->ensureDirectoryExists(
|
||||||
|
dirname($destinationPath),
|
||||||
|
$this->resolveDirectoryVisibility($config->get(Config::OPTION_DIRECTORY_VISIBILITY))
|
||||||
|
);
|
||||||
|
|
||||||
|
if ( ! @rename($sourcePath, $destinationPath)) {
|
||||||
|
throw UnableToMoveFile::fromLocationTo($sourcePath, $destinationPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function copy(string $source, string $destination, Config $config): void
|
||||||
|
{
|
||||||
|
$sourcePath = $this->prefixer->prefixPath($source);
|
||||||
|
$destinationPath = $this->prefixer->prefixPath($destination);
|
||||||
|
$this->ensureDirectoryExists(
|
||||||
|
dirname($destinationPath),
|
||||||
|
$this->resolveDirectoryVisibility($config->get(Config::OPTION_DIRECTORY_VISIBILITY))
|
||||||
|
);
|
||||||
|
|
||||||
|
if ( ! @copy($sourcePath, $destinationPath)) {
|
||||||
|
throw UnableToCopyFile::fromLocationTo($sourcePath, $destinationPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function read(string $path): string
|
||||||
|
{
|
||||||
|
$location = $this->prefixer->prefixPath($path);
|
||||||
|
error_clear_last();
|
||||||
|
$contents = @file_get_contents($location);
|
||||||
|
|
||||||
|
if ($contents === false) {
|
||||||
|
throw UnableToReadFile::fromLocation($path, error_get_last()['message'] ?? '');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function readStream(string $path)
|
||||||
|
{
|
||||||
|
$location = $this->prefixer->prefixPath($path);
|
||||||
|
error_clear_last();
|
||||||
|
$contents = @fopen($location, 'rb');
|
||||||
|
|
||||||
|
if ($contents === false) {
|
||||||
|
throw UnableToReadFile::fromLocation($path, error_get_last()['message'] ?? '');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function ensureDirectoryExists(string $dirname, int $visibility): void
|
||||||
|
{
|
||||||
|
if (is_dir($dirname)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
error_clear_last();
|
||||||
|
|
||||||
|
if ( ! @mkdir($dirname, $visibility, true)) {
|
||||||
|
$mkdirError = error_get_last();
|
||||||
|
}
|
||||||
|
|
||||||
|
clearstatcache(true, $dirname);
|
||||||
|
|
||||||
|
if ( ! is_dir($dirname)) {
|
||||||
|
$errorMessage = isset($mkdirError['message']) ? $mkdirError['message'] : '';
|
||||||
|
|
||||||
|
throw UnableToCreateDirectory::atLocation($dirname, $errorMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fileExists(string $location): bool
|
||||||
|
{
|
||||||
|
$location = $this->prefixer->prefixPath($location);
|
||||||
|
|
||||||
|
return is_file($location);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createDirectory(string $path, Config $config): void
|
||||||
|
{
|
||||||
|
$location = $this->prefixer->prefixPath($path);
|
||||||
|
$visibility = $config->get(Config::OPTION_VISIBILITY, $config->get(Config::OPTION_DIRECTORY_VISIBILITY));
|
||||||
|
$permissions = $this->resolveDirectoryVisibility($visibility);
|
||||||
|
|
||||||
|
if (is_dir($location)) {
|
||||||
|
$this->setPermissions($location, $permissions);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
error_clear_last();
|
||||||
|
|
||||||
|
if ( ! @mkdir($location, $permissions, true)) {
|
||||||
|
throw UnableToCreateDirectory::atLocation($path, error_get_last()['message'] ?? '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setVisibility(string $path, string $visibility): void
|
||||||
|
{
|
||||||
|
$path = $this->prefixer->prefixPath($path);
|
||||||
|
$visibility = is_dir($path) ? $this->visibility->forDirectory($visibility) : $this->visibility->forFile(
|
||||||
|
$visibility
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->setPermissions($path, $visibility);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function visibility(string $path): FileAttributes
|
||||||
|
{
|
||||||
|
$location = $this->prefixer->prefixPath($path);
|
||||||
|
clearstatcache(false, $location);
|
||||||
|
error_clear_last();
|
||||||
|
$fileperms = @fileperms($location);
|
||||||
|
|
||||||
|
if ($fileperms === false) {
|
||||||
|
throw UnableToRetrieveMetadata::visibility($path, error_get_last()['message'] ?? '');
|
||||||
|
}
|
||||||
|
|
||||||
|
$permissions = $fileperms & 0777;
|
||||||
|
$visibility = $this->visibility->inverseForFile($permissions);
|
||||||
|
|
||||||
|
return new FileAttributes($path, null, $visibility);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function resolveDirectoryVisibility(?string $visibility): int
|
||||||
|
{
|
||||||
|
return $visibility === null ? $this->visibility->defaultForDirectories() : $this->visibility->forDirectory(
|
||||||
|
$visibility
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function mimeType(string $path): FileAttributes
|
||||||
|
{
|
||||||
|
$location = $this->prefixer->prefixPath($path);
|
||||||
|
error_clear_last();
|
||||||
|
$mimeType = $this->mimeTypeDetector->detectMimeTypeFromFile($location);
|
||||||
|
|
||||||
|
if ($mimeType === null) {
|
||||||
|
throw UnableToRetrieveMetadata::mimeType($path, error_get_last()['message'] ?? '');
|
||||||
|
}
|
||||||
|
|
||||||
|
return new FileAttributes($path, null, null, null, $mimeType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function lastModified(string $path): FileAttributes
|
||||||
|
{
|
||||||
|
$location = $this->prefixer->prefixPath($path);
|
||||||
|
error_clear_last();
|
||||||
|
$lastModified = @filemtime($location);
|
||||||
|
|
||||||
|
if ($lastModified === false) {
|
||||||
|
throw UnableToRetrieveMetadata::lastModified($path, error_get_last()['message'] ?? '');
|
||||||
|
}
|
||||||
|
|
||||||
|
return new FileAttributes($path, null, null, $lastModified);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fileSize(string $path): FileAttributes
|
||||||
|
{
|
||||||
|
$location = $this->prefixer->prefixPath($path);
|
||||||
|
error_clear_last();
|
||||||
|
|
||||||
|
if (is_file($location) && ($fileSize = @filesize($location)) !== false) {
|
||||||
|
return new FileAttributes($path, $fileSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw UnableToRetrieveMetadata::fileSize($path, error_get_last()['message'] ?? '');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function listDirectory(string $location): Generator
|
||||||
|
{
|
||||||
|
$iterator = new DirectoryIterator($location);
|
||||||
|
|
||||||
|
foreach ($iterator as $item) {
|
||||||
|
if ($item->isDot()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
yield $item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setPermissions(string $location, int $visibility): void
|
||||||
|
{
|
||||||
|
error_clear_last();
|
||||||
|
if ( ! @chmod($location, $visibility)) {
|
||||||
|
$extraMessage = error_get_last()['message'] ?? '';
|
||||||
|
throw UnableToSetVisibility::atLocation($this->prefixer->stripPrefix($location), $extraMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
334
vendor/league/flysystem/src/MountManager.php
vendored
Normal file
334
vendor/league/flysystem/src/MountManager.php
vendored
Normal file
@ -0,0 +1,334 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use function sprintf;
|
||||||
|
|
||||||
|
class MountManager implements FilesystemOperator
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var array<string, FilesystemOperator>
|
||||||
|
*/
|
||||||
|
private $filesystems = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MountManager constructor.
|
||||||
|
*
|
||||||
|
* @param array<string,FilesystemOperator> $filesystems
|
||||||
|
*/
|
||||||
|
public function __construct(array $filesystems = [])
|
||||||
|
{
|
||||||
|
$this->mountFilesystems($filesystems);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fileExists(string $location): bool
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||||
|
|
||||||
|
try {
|
||||||
|
return $filesystem->fileExists($path);
|
||||||
|
} catch (UnableToCheckFileExistence $exception) {
|
||||||
|
throw UnableToCheckFileExistence::forLocation($location, $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function read(string $location): string
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||||
|
|
||||||
|
try {
|
||||||
|
return $filesystem->read($path);
|
||||||
|
} catch (UnableToReadFile $exception) {
|
||||||
|
throw UnableToReadFile::fromLocation($location, $exception->reason(), $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function readStream(string $location)
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||||
|
|
||||||
|
try {
|
||||||
|
return $filesystem->readStream($path);
|
||||||
|
} catch (UnableToReadFile $exception) {
|
||||||
|
throw UnableToReadFile::fromLocation($location, $exception->reason(), $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function listContents(string $location, bool $deep = self::LIST_SHALLOW): DirectoryListing
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path, $mountIdentifier] = $this->determineFilesystemAndPath($location);
|
||||||
|
|
||||||
|
return
|
||||||
|
$filesystem
|
||||||
|
->listContents($path, $deep)
|
||||||
|
->map(
|
||||||
|
function (StorageAttributes $attributes) use ($mountIdentifier) {
|
||||||
|
return $attributes->withPath(sprintf('%s://%s', $mountIdentifier, $attributes->path()));
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function lastModified(string $location): int
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||||
|
|
||||||
|
try {
|
||||||
|
return $filesystem->lastModified($path);
|
||||||
|
} catch (UnableToRetrieveMetadata $exception) {
|
||||||
|
throw UnableToRetrieveMetadata::lastModified($location, $exception->reason(), $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fileSize(string $location): int
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||||
|
|
||||||
|
try {
|
||||||
|
return $filesystem->fileSize($path);
|
||||||
|
} catch (UnableToRetrieveMetadata $exception) {
|
||||||
|
throw UnableToRetrieveMetadata::fileSize($location, $exception->reason(), $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function mimeType(string $location): string
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||||
|
|
||||||
|
try {
|
||||||
|
return $filesystem->mimeType($path);
|
||||||
|
} catch (UnableToRetrieveMetadata $exception) {
|
||||||
|
throw UnableToRetrieveMetadata::mimeType($location, $exception->reason(), $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function visibility(string $location): string
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||||
|
|
||||||
|
try {
|
||||||
|
return $filesystem->visibility($path);
|
||||||
|
} catch (UnableToRetrieveMetadata $exception) {
|
||||||
|
throw UnableToRetrieveMetadata::visibility($location, $exception->reason(), $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function write(string $location, string $contents, array $config = []): void
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$filesystem->write($path, $contents, $config);
|
||||||
|
} catch (UnableToWriteFile $exception) {
|
||||||
|
throw UnableToWriteFile::atLocation($location, $exception->reason(), $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function writeStream(string $location, $contents, array $config = []): void
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||||
|
$filesystem->writeStream($path, $contents, $config);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setVisibility(string $path, string $visibility): void
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path] = $this->determineFilesystemAndPath($path);
|
||||||
|
$filesystem->setVisibility($path, $visibility);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete(string $location): void
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$filesystem->delete($path);
|
||||||
|
} catch (UnableToDeleteFile $exception) {
|
||||||
|
throw UnableToDeleteFile::atLocation($location, '', $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteDirectory(string $location): void
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$filesystem->deleteDirectory($path);
|
||||||
|
} catch (UnableToDeleteDirectory $exception) {
|
||||||
|
throw UnableToDeleteDirectory::atLocation($location, '', $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createDirectory(string $location, array $config = []): void
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $filesystem */
|
||||||
|
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$filesystem->createDirectory($path, $config);
|
||||||
|
} catch (UnableToCreateDirectory $exception) {
|
||||||
|
throw UnableToCreateDirectory::dueToFailure($location, $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function move(string $source, string $destination, array $config = []): void
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $sourceFilesystem */
|
||||||
|
/* @var FilesystemOperator $destinationFilesystem */
|
||||||
|
[$sourceFilesystem, $sourcePath] = $this->determineFilesystemAndPath($source);
|
||||||
|
[$destinationFilesystem, $destinationPath] = $this->determineFilesystemAndPath($destination);
|
||||||
|
|
||||||
|
$sourceFilesystem === $destinationFilesystem ? $this->moveInTheSameFilesystem(
|
||||||
|
$sourceFilesystem,
|
||||||
|
$sourcePath,
|
||||||
|
$destinationPath,
|
||||||
|
$source,
|
||||||
|
$destination
|
||||||
|
) : $this->moveAcrossFilesystems($source, $destination);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function copy(string $source, string $destination, array $config = []): void
|
||||||
|
{
|
||||||
|
/** @var FilesystemOperator $sourceFilesystem */
|
||||||
|
/* @var FilesystemOperator $destinationFilesystem */
|
||||||
|
[$sourceFilesystem, $sourcePath] = $this->determineFilesystemAndPath($source);
|
||||||
|
[$destinationFilesystem, $destinationPath] = $this->determineFilesystemAndPath($destination);
|
||||||
|
|
||||||
|
$sourceFilesystem === $destinationFilesystem ? $this->copyInSameFilesystem(
|
||||||
|
$sourceFilesystem,
|
||||||
|
$sourcePath,
|
||||||
|
$destinationPath,
|
||||||
|
$source,
|
||||||
|
$destination
|
||||||
|
) : $this->copyAcrossFilesystem(
|
||||||
|
$config['visibility'] ?? null,
|
||||||
|
$sourceFilesystem,
|
||||||
|
$sourcePath,
|
||||||
|
$destinationFilesystem,
|
||||||
|
$destinationPath,
|
||||||
|
$source,
|
||||||
|
$destination
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function mountFilesystems(array $filesystems): void
|
||||||
|
{
|
||||||
|
foreach ($filesystems as $key => $filesystem) {
|
||||||
|
$this->guardAgainstInvalidMount($key, $filesystem);
|
||||||
|
/* @var string $key */
|
||||||
|
/* @var FilesystemOperator $filesystem */
|
||||||
|
$this->mountFilesystem($key, $filesystem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $key
|
||||||
|
* @param mixed $filesystem
|
||||||
|
*/
|
||||||
|
private function guardAgainstInvalidMount($key, $filesystem): void
|
||||||
|
{
|
||||||
|
if ( ! is_string($key)) {
|
||||||
|
throw UnableToMountFilesystem::becauseTheKeyIsNotValid($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! $filesystem instanceof FilesystemOperator) {
|
||||||
|
throw UnableToMountFilesystem::becauseTheFilesystemWasNotValid($filesystem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function mountFilesystem(string $key, FilesystemOperator $filesystem): void
|
||||||
|
{
|
||||||
|
$this->filesystems[$key] = $filesystem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $path
|
||||||
|
*
|
||||||
|
* @return array{0:FilesystemOperator, 1:string}
|
||||||
|
*/
|
||||||
|
private function determineFilesystemAndPath(string $path): array
|
||||||
|
{
|
||||||
|
if (strpos($path, '://') < 1) {
|
||||||
|
throw UnableToResolveFilesystemMount::becauseTheSeparatorIsMissing($path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var string $mountIdentifier */
|
||||||
|
/** @var string $mountPath */
|
||||||
|
[$mountIdentifier, $mountPath] = explode('://', $path, 2);
|
||||||
|
|
||||||
|
if ( ! array_key_exists($mountIdentifier, $this->filesystems)) {
|
||||||
|
throw UnableToResolveFilesystemMount::becauseTheMountWasNotRegistered($mountIdentifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [$this->filesystems[$mountIdentifier], $mountPath, $mountIdentifier];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function copyInSameFilesystem(
|
||||||
|
FilesystemOperator $sourceFilesystem,
|
||||||
|
string $sourcePath,
|
||||||
|
string $destinationPath,
|
||||||
|
string $source,
|
||||||
|
string $destination
|
||||||
|
): void {
|
||||||
|
try {
|
||||||
|
$sourceFilesystem->copy($sourcePath, $destinationPath);
|
||||||
|
} catch (UnableToCopyFile $exception) {
|
||||||
|
throw UnableToCopyFile::fromLocationTo($source, $destination, $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function copyAcrossFilesystem(
|
||||||
|
?string $visibility,
|
||||||
|
FilesystemOperator $sourceFilesystem,
|
||||||
|
string $sourcePath,
|
||||||
|
FilesystemOperator $destinationFilesystem,
|
||||||
|
string $destinationPath,
|
||||||
|
string $source,
|
||||||
|
string $destination
|
||||||
|
): void {
|
||||||
|
try {
|
||||||
|
$visibility = $visibility ?? $sourceFilesystem->visibility($sourcePath);
|
||||||
|
$stream = $sourceFilesystem->readStream($sourcePath);
|
||||||
|
$destinationFilesystem->writeStream($destinationPath, $stream, compact('visibility'));
|
||||||
|
} catch (UnableToRetrieveMetadata | UnableToReadFile | UnableToWriteFile $exception) {
|
||||||
|
throw UnableToCopyFile::fromLocationTo($source, $destination, $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function moveInTheSameFilesystem(
|
||||||
|
FilesystemOperator $sourceFilesystem,
|
||||||
|
string $sourcePath,
|
||||||
|
string $destinationPath,
|
||||||
|
string $source,
|
||||||
|
string $destination
|
||||||
|
): void {
|
||||||
|
try {
|
||||||
|
$sourceFilesystem->move($sourcePath, $destinationPath);
|
||||||
|
} catch (UnableToMoveFile $exception) {
|
||||||
|
throw UnableToMoveFile::fromLocationTo($source, $destination, $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function moveAcrossFilesystems(string $source, string $destination): void
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$this->copy($source, $destination);
|
||||||
|
$this->delete($source);
|
||||||
|
} catch (UnableToCopyFile | UnableToDeleteFile $exception) {
|
||||||
|
throw UnableToMoveFile::fromLocationTo($source, $destination, $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
10
vendor/league/flysystem/src/PathNormalizer.php
vendored
Normal file
10
vendor/league/flysystem/src/PathNormalizer.php
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
interface PathNormalizer
|
||||||
|
{
|
||||||
|
public function normalizePath(string $path): string;
|
||||||
|
}
|
60
vendor/league/flysystem/src/PathPrefixer.php
vendored
Normal file
60
vendor/league/flysystem/src/PathPrefixer.php
vendored
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use function rtrim;
|
||||||
|
use function strlen;
|
||||||
|
use function substr;
|
||||||
|
|
||||||
|
final class PathPrefixer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $prefix = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $separator = '/';
|
||||||
|
|
||||||
|
public function __construct(string $prefix, string $separator = '/')
|
||||||
|
{
|
||||||
|
$this->prefix = rtrim($prefix, '\\/');
|
||||||
|
|
||||||
|
if ($this->prefix !== '' || $prefix === $separator) {
|
||||||
|
$this->prefix .= $separator;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->separator = $separator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function prefixPath(string $path): string
|
||||||
|
{
|
||||||
|
return $this->prefix . ltrim($path, '\\/');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stripPrefix(string $path): string
|
||||||
|
{
|
||||||
|
/* @var string */
|
||||||
|
return substr($path, strlen($this->prefix));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function stripDirectoryPrefix(string $path): string
|
||||||
|
{
|
||||||
|
return rtrim($this->stripPrefix($path), '\\/');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function prefixDirectoryPath(string $path): string
|
||||||
|
{
|
||||||
|
$prefixedPath = $this->prefixPath(rtrim($path, '\\/'));
|
||||||
|
|
||||||
|
if ((substr($prefixedPath, -1) === $this->separator) || $prefixedPath === '') {
|
||||||
|
return $prefixedPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $prefixedPath . $this->separator;
|
||||||
|
}
|
||||||
|
}
|
28
vendor/league/flysystem/src/PathTraversalDetected.php
vendored
Normal file
28
vendor/league/flysystem/src/PathTraversalDetected.php
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
|
||||||
|
class PathTraversalDetected extends RuntimeException implements FilesystemException
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $path;
|
||||||
|
|
||||||
|
public function path(): string
|
||||||
|
{
|
||||||
|
return $this->path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function forPath(string $path): PathTraversalDetected
|
||||||
|
{
|
||||||
|
$e = new PathTraversalDetected("Path traversal detected: {$path}");
|
||||||
|
$e->path = $path;
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
}
|
19
vendor/league/flysystem/src/PortableVisibilityGuard.php
vendored
Normal file
19
vendor/league/flysystem/src/PortableVisibilityGuard.php
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
final class PortableVisibilityGuard
|
||||||
|
{
|
||||||
|
public static function guardAgainstInvalidInput(string $visibility): void
|
||||||
|
{
|
||||||
|
if ($visibility !== Visibility::PUBLIC && $visibility !== Visibility::PRIVATE) {
|
||||||
|
$className = Visibility::class;
|
||||||
|
throw InvalidVisibilityProvided::withVisibility(
|
||||||
|
$visibility,
|
||||||
|
"either {$className}::PUBLIC or {$className}::PRIVATE"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
62
vendor/league/flysystem/src/ProxyArrayAccessToProperties.php
vendored
Normal file
62
vendor/league/flysystem/src/ProxyArrayAccessToProperties.php
vendored
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
trait ProxyArrayAccessToProperties
|
||||||
|
{
|
||||||
|
private function formatPropertyName(string $offset): string
|
||||||
|
{
|
||||||
|
return str_replace('_', '', lcfirst(ucwords($offset, '_')));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $offset
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function offsetExists($offset): bool
|
||||||
|
{
|
||||||
|
$property = $this->formatPropertyName((string) $offset);
|
||||||
|
|
||||||
|
return isset($this->{$property});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $offset
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
|
public function offsetGet($offset)
|
||||||
|
{
|
||||||
|
$property = $this->formatPropertyName((string) $offset);
|
||||||
|
|
||||||
|
return $this->{$property};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $offset
|
||||||
|
* @param mixed $value
|
||||||
|
*/
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
|
public function offsetSet($offset, $value): void
|
||||||
|
{
|
||||||
|
throw new RuntimeException('Properties can not be manipulated');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $offset
|
||||||
|
*/
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
|
public function offsetUnset($offset): void
|
||||||
|
{
|
||||||
|
throw new RuntimeException('Properties can not be manipulated');
|
||||||
|
}
|
||||||
|
}
|
40
vendor/league/flysystem/src/StorageAttributes.php
vendored
Normal file
40
vendor/league/flysystem/src/StorageAttributes.php
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use ArrayAccess;
|
||||||
|
use JsonSerializable;
|
||||||
|
|
||||||
|
interface StorageAttributes extends JsonSerializable, ArrayAccess
|
||||||
|
{
|
||||||
|
public const ATTRIBUTE_PATH = 'path';
|
||||||
|
public const ATTRIBUTE_TYPE = 'type';
|
||||||
|
public const ATTRIBUTE_FILE_SIZE = 'file_size';
|
||||||
|
public const ATTRIBUTE_VISIBILITY = 'visibility';
|
||||||
|
public const ATTRIBUTE_LAST_MODIFIED = 'last_modified';
|
||||||
|
public const ATTRIBUTE_MIME_TYPE = 'mime_type';
|
||||||
|
public const ATTRIBUTE_EXTRA_METADATA = 'extra_metadata';
|
||||||
|
|
||||||
|
public const TYPE_FILE = 'file';
|
||||||
|
public const TYPE_DIRECTORY = 'dir';
|
||||||
|
|
||||||
|
public function path(): string;
|
||||||
|
|
||||||
|
public function type(): string;
|
||||||
|
|
||||||
|
public function visibility(): ?string;
|
||||||
|
|
||||||
|
public function lastModified(): ?int;
|
||||||
|
|
||||||
|
public static function fromArray(array $attributes): StorageAttributes;
|
||||||
|
|
||||||
|
public function isFile(): bool;
|
||||||
|
|
||||||
|
public function isDir(): bool;
|
||||||
|
|
||||||
|
public function withPath(string $path): StorageAttributes;
|
||||||
|
|
||||||
|
public function extraMetadata(): array;
|
||||||
|
}
|
28
vendor/league/flysystem/src/SymbolicLinkEncountered.php
vendored
Normal file
28
vendor/league/flysystem/src/SymbolicLinkEncountered.php
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
|
||||||
|
final class SymbolicLinkEncountered extends RuntimeException implements FilesystemException
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $location;
|
||||||
|
|
||||||
|
public function location(): string
|
||||||
|
{
|
||||||
|
return $this->location;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function atLocation(string $pathName): SymbolicLinkEncountered
|
||||||
|
{
|
||||||
|
$e = new static("Unsupported symbolic link encountered at location $pathName");
|
||||||
|
$e->location = $pathName;
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
}
|
21
vendor/league/flysystem/src/UnableToCheckFileExistence.php
vendored
Normal file
21
vendor/league/flysystem/src/UnableToCheckFileExistence.php
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
class UnableToCheckFileExistence extends RuntimeException implements FilesystemOperationFailed
|
||||||
|
{
|
||||||
|
public static function forLocation(string $path, Throwable $exception = null): UnableToCheckFileExistence
|
||||||
|
{
|
||||||
|
return new UnableToCheckFileExistence("Unable to check file existence for: ${path}", 0, $exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function operation(): string
|
||||||
|
{
|
||||||
|
return FilesystemOperationFailed::OPERATION_FILE_EXISTS;
|
||||||
|
}
|
||||||
|
}
|
48
vendor/league/flysystem/src/UnableToCopyFile.php
vendored
Normal file
48
vendor/league/flysystem/src/UnableToCopyFile.php
vendored
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
final class UnableToCopyFile extends RuntimeException implements FilesystemOperationFailed
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $source;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $destination;
|
||||||
|
|
||||||
|
public function source(): string
|
||||||
|
{
|
||||||
|
return $this->source;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function destination(): string
|
||||||
|
{
|
||||||
|
return $this->destination;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function fromLocationTo(
|
||||||
|
string $sourcePath,
|
||||||
|
string $destinationPath,
|
||||||
|
Throwable $previous = null
|
||||||
|
): UnableToCopyFile {
|
||||||
|
$e = new static("Unable to copy file from $sourcePath to $destinationPath", 0 , $previous);
|
||||||
|
$e->source = $sourcePath;
|
||||||
|
$e->destination = $destinationPath;
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function operation(): string
|
||||||
|
{
|
||||||
|
return FilesystemOperationFailed::OPERATION_COPY;
|
||||||
|
}
|
||||||
|
}
|
44
vendor/league/flysystem/src/UnableToCreateDirectory.php
vendored
Normal file
44
vendor/league/flysystem/src/UnableToCreateDirectory.php
vendored
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
final class UnableToCreateDirectory extends RuntimeException implements FilesystemOperationFailed
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $location;
|
||||||
|
|
||||||
|
public static function atLocation(string $dirname, string $errorMessage = ''): UnableToCreateDirectory
|
||||||
|
{
|
||||||
|
$message = "Unable to create a directory at {$dirname}. ${errorMessage}";
|
||||||
|
$e = new static(rtrim($message));
|
||||||
|
$e->location = $dirname;
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function dueToFailure(string $dirname, Throwable $previous): UnableToCreateDirectory
|
||||||
|
{
|
||||||
|
$message = "Unable to create a directory at {$dirname}";
|
||||||
|
$e = new static($message, 0, $previous);
|
||||||
|
$e->location = $dirname;
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function operation(): string
|
||||||
|
{
|
||||||
|
return FilesystemOperationFailed::OPERATION_CREATE_DIRECTORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function location(): string
|
||||||
|
{
|
||||||
|
return $this->location;
|
||||||
|
}
|
||||||
|
}
|
48
vendor/league/flysystem/src/UnableToDeleteDirectory.php
vendored
Normal file
48
vendor/league/flysystem/src/UnableToDeleteDirectory.php
vendored
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
final class UnableToDeleteDirectory extends RuntimeException implements FilesystemOperationFailed
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $location = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $reason;
|
||||||
|
|
||||||
|
public static function atLocation(
|
||||||
|
string $location,
|
||||||
|
string $reason = '',
|
||||||
|
Throwable $previous = null
|
||||||
|
): UnableToDeleteDirectory {
|
||||||
|
$e = new static(rtrim("Unable to delete directory located at: {$location}. {$reason}"), 0, $previous);
|
||||||
|
$e->location = $location;
|
||||||
|
$e->reason = $reason;
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function operation(): string
|
||||||
|
{
|
||||||
|
return FilesystemOperationFailed::OPERATION_DELETE_DIRECTORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function reason(): string
|
||||||
|
{
|
||||||
|
return $this->reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function location(): string
|
||||||
|
{
|
||||||
|
return $this->location;
|
||||||
|
}
|
||||||
|
}
|
45
vendor/league/flysystem/src/UnableToDeleteFile.php
vendored
Normal file
45
vendor/league/flysystem/src/UnableToDeleteFile.php
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
final class UnableToDeleteFile extends RuntimeException implements FilesystemOperationFailed
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $location = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $reason;
|
||||||
|
|
||||||
|
public static function atLocation(string $location, string $reason = '', Throwable $previous = null): UnableToDeleteFile
|
||||||
|
{
|
||||||
|
$e = new static(rtrim("Unable to delete file located at: {$location}. {$reason}"), 0, $previous);
|
||||||
|
$e->location = $location;
|
||||||
|
$e->reason = $reason;
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function operation(): string
|
||||||
|
{
|
||||||
|
return FilesystemOperationFailed::OPERATION_DELETE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function reason(): string
|
||||||
|
{
|
||||||
|
return $this->reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function location(): string
|
||||||
|
{
|
||||||
|
return $this->location;
|
||||||
|
}
|
||||||
|
}
|
32
vendor/league/flysystem/src/UnableToMountFilesystem.php
vendored
Normal file
32
vendor/league/flysystem/src/UnableToMountFilesystem.php
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use LogicException;
|
||||||
|
|
||||||
|
class UnableToMountFilesystem extends LogicException implements FilesystemException
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param mixed $key
|
||||||
|
*/
|
||||||
|
public static function becauseTheKeyIsNotValid($key): UnableToMountFilesystem
|
||||||
|
{
|
||||||
|
return new UnableToMountFilesystem(
|
||||||
|
'Unable to mount filesystem, key was invalid. String expected, received: ' . gettype($key)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $filesystem
|
||||||
|
*/
|
||||||
|
public static function becauseTheFilesystemWasNotValid($filesystem): UnableToMountFilesystem
|
||||||
|
{
|
||||||
|
$received = is_object($filesystem) ? get_class($filesystem) : gettype($filesystem);
|
||||||
|
|
||||||
|
return new UnableToMountFilesystem(
|
||||||
|
'Unable to mount filesystem, filesystem was invalid. Instance of ' . FilesystemOperator::class . ' expected, received: ' . $received
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
48
vendor/league/flysystem/src/UnableToMoveFile.php
vendored
Normal file
48
vendor/league/flysystem/src/UnableToMoveFile.php
vendored
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
final class UnableToMoveFile extends RuntimeException implements FilesystemOperationFailed
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $source;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $destination;
|
||||||
|
|
||||||
|
public function source(): string
|
||||||
|
{
|
||||||
|
return $this->source;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function destination(): string
|
||||||
|
{
|
||||||
|
return $this->destination;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function fromLocationTo(
|
||||||
|
string $sourcePath,
|
||||||
|
string $destinationPath,
|
||||||
|
Throwable $previous = null
|
||||||
|
): UnableToMoveFile {
|
||||||
|
$e = new static("Unable to move file from $sourcePath to $destinationPath", 0, $previous);
|
||||||
|
$e->source = $sourcePath;
|
||||||
|
$e->destination = $destinationPath;
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function operation(): string
|
||||||
|
{
|
||||||
|
return FilesystemOperationFailed::OPERATION_MOVE;
|
||||||
|
}
|
||||||
|
}
|
45
vendor/league/flysystem/src/UnableToReadFile.php
vendored
Normal file
45
vendor/league/flysystem/src/UnableToReadFile.php
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
final class UnableToReadFile extends RuntimeException implements FilesystemOperationFailed
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $location = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $reason = '';
|
||||||
|
|
||||||
|
public static function fromLocation(string $location, string $reason = '', Throwable $previous = null): UnableToReadFile
|
||||||
|
{
|
||||||
|
$e = new static(rtrim("Unable to read file from location: {$location}. {$reason}"), 0, $previous);
|
||||||
|
$e->location = $location;
|
||||||
|
$e->reason = $reason;
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function operation(): string
|
||||||
|
{
|
||||||
|
return FilesystemOperationFailed::OPERATION_READ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function reason(): string
|
||||||
|
{
|
||||||
|
return $this->reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function location(): string
|
||||||
|
{
|
||||||
|
return $this->location;
|
||||||
|
}
|
||||||
|
}
|
20
vendor/league/flysystem/src/UnableToResolveFilesystemMount.php
vendored
Normal file
20
vendor/league/flysystem/src/UnableToResolveFilesystemMount.php
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
|
||||||
|
class UnableToResolveFilesystemMount extends RuntimeException implements FilesystemException
|
||||||
|
{
|
||||||
|
public static function becauseTheSeparatorIsMissing(string $path): UnableToResolveFilesystemMount
|
||||||
|
{
|
||||||
|
return new UnableToResolveFilesystemMount("Unable to resolve the filesystem mount because the path ($path) is missing a separator (://).");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function becauseTheMountWasNotRegistered(string $mountIdentifier): UnableToResolveFilesystemMount
|
||||||
|
{
|
||||||
|
return new UnableToResolveFilesystemMount("Unable to resolve the filesystem mount because the mount ($mountIdentifier) was not registered.");
|
||||||
|
}
|
||||||
|
}
|
76
vendor/league/flysystem/src/UnableToRetrieveMetadata.php
vendored
Normal file
76
vendor/league/flysystem/src/UnableToRetrieveMetadata.php
vendored
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
final class UnableToRetrieveMetadata extends RuntimeException implements FilesystemOperationFailed
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $location;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $metadataType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $reason;
|
||||||
|
|
||||||
|
public static function lastModified(string $location, string $reason = '', Throwable $previous = null): self
|
||||||
|
{
|
||||||
|
return static::create($location, FileAttributes::ATTRIBUTE_LAST_MODIFIED, $reason, $previous);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function visibility(string $location, string $reason = '', Throwable $previous = null): self
|
||||||
|
{
|
||||||
|
return static::create($location, FileAttributes::ATTRIBUTE_VISIBILITY, $reason, $previous);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function fileSize(string $location, string $reason = '', Throwable $previous = null): self
|
||||||
|
{
|
||||||
|
return static::create($location, FileAttributes::ATTRIBUTE_FILE_SIZE, $reason, $previous);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function mimeType(string $location, string $reason = '', Throwable $previous = null): self
|
||||||
|
{
|
||||||
|
return static::create($location, FileAttributes::ATTRIBUTE_MIME_TYPE, $reason, $previous);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function create(string $location, string $type, string $reason = '', Throwable $previous = null): self
|
||||||
|
{
|
||||||
|
$e = new static("Unable to retrieve the $type for file at location: $location. {$reason}", 0, $previous);
|
||||||
|
$e->reason = $reason;
|
||||||
|
$e->location = $location;
|
||||||
|
$e->metadataType = $type;
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function reason(): string
|
||||||
|
{
|
||||||
|
return $this->reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function location(): string
|
||||||
|
{
|
||||||
|
return $this->location;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function metadataType(): string
|
||||||
|
{
|
||||||
|
return $this->metadataType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function operation(): string
|
||||||
|
{
|
||||||
|
return FilesystemOperationFailed::OPERATION_RETRIEVE_METADATA;
|
||||||
|
}
|
||||||
|
}
|
49
vendor/league/flysystem/src/UnableToSetVisibility.php
vendored
Normal file
49
vendor/league/flysystem/src/UnableToSetVisibility.php
vendored
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
use function rtrim;
|
||||||
|
|
||||||
|
final class UnableToSetVisibility extends RuntimeException implements FilesystemOperationFailed
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $location;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $reason;
|
||||||
|
|
||||||
|
public function reason(): string
|
||||||
|
{
|
||||||
|
return $this->reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function atLocation(string $filename, string $extraMessage = '', Throwable $previous = null): self
|
||||||
|
{
|
||||||
|
$message = "Unable to set visibility for file {$filename}. $extraMessage";
|
||||||
|
$e = new static(rtrim($message), 0, $previous);
|
||||||
|
$e->reason = $extraMessage;
|
||||||
|
$e->location = $filename;
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function operation(): string
|
||||||
|
{
|
||||||
|
return FilesystemOperationFailed::OPERATION_SET_VISIBILITY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function location(): string
|
||||||
|
{
|
||||||
|
return $this->location;
|
||||||
|
}
|
||||||
|
}
|
45
vendor/league/flysystem/src/UnableToWriteFile.php
vendored
Normal file
45
vendor/league/flysystem/src/UnableToWriteFile.php
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
final class UnableToWriteFile extends RuntimeException implements FilesystemOperationFailed
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $location = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $reason;
|
||||||
|
|
||||||
|
public static function atLocation(string $location, string $reason = '', Throwable $previous = null): UnableToWriteFile
|
||||||
|
{
|
||||||
|
$e = new static(rtrim("Unable to write file at location: {$location}. {$reason}"), 0, $previous);
|
||||||
|
$e->location = $location;
|
||||||
|
$e->reason = $reason;
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function operation(): string
|
||||||
|
{
|
||||||
|
return FilesystemOperationFailed::OPERATION_WRITE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function reason(): string
|
||||||
|
{
|
||||||
|
return $this->reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function location(): string
|
||||||
|
{
|
||||||
|
return $this->location;
|
||||||
|
}
|
||||||
|
}
|
109
vendor/league/flysystem/src/UnixVisibility/PortableVisibilityConverter.php
vendored
Normal file
109
vendor/league/flysystem/src/UnixVisibility/PortableVisibilityConverter.php
vendored
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem\UnixVisibility;
|
||||||
|
|
||||||
|
use League\Flysystem\PortableVisibilityGuard;
|
||||||
|
use League\Flysystem\Visibility;
|
||||||
|
|
||||||
|
class PortableVisibilityConverter implements VisibilityConverter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $filePublic;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $filePrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $directoryPublic;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $directoryPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $defaultForDirectories;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
int $filePublic = 0644,
|
||||||
|
int $filePrivate = 0600,
|
||||||
|
int $directoryPublic = 0755,
|
||||||
|
int $directoryPrivate = 0700,
|
||||||
|
string $defaultForDirectories = Visibility::PRIVATE
|
||||||
|
) {
|
||||||
|
$this->filePublic = $filePublic;
|
||||||
|
$this->filePrivate = $filePrivate;
|
||||||
|
$this->directoryPublic = $directoryPublic;
|
||||||
|
$this->directoryPrivate = $directoryPrivate;
|
||||||
|
$this->defaultForDirectories = $defaultForDirectories;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function forFile(string $visibility): int
|
||||||
|
{
|
||||||
|
PortableVisibilityGuard::guardAgainstInvalidInput($visibility);
|
||||||
|
|
||||||
|
return $visibility === Visibility::PUBLIC
|
||||||
|
? $this->filePublic
|
||||||
|
: $this->filePrivate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function forDirectory(string $visibility): int
|
||||||
|
{
|
||||||
|
PortableVisibilityGuard::guardAgainstInvalidInput($visibility);
|
||||||
|
|
||||||
|
return $visibility === Visibility::PUBLIC
|
||||||
|
? $this->directoryPublic
|
||||||
|
: $this->directoryPrivate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function inverseForFile(int $visibility): string
|
||||||
|
{
|
||||||
|
if ($visibility === $this->filePublic) {
|
||||||
|
return Visibility::PUBLIC;
|
||||||
|
} elseif ($visibility === $this->filePrivate) {
|
||||||
|
return Visibility::PRIVATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Visibility::PUBLIC; // default
|
||||||
|
}
|
||||||
|
|
||||||
|
public function inverseForDirectory(int $visibility): string
|
||||||
|
{
|
||||||
|
if ($visibility === $this->directoryPublic) {
|
||||||
|
return Visibility::PUBLIC;
|
||||||
|
} elseif ($visibility === $this->directoryPrivate) {
|
||||||
|
return Visibility::PRIVATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Visibility::PUBLIC; // default
|
||||||
|
}
|
||||||
|
|
||||||
|
public function defaultForDirectories(): int
|
||||||
|
{
|
||||||
|
return $this->defaultForDirectories === Visibility::PUBLIC ? $this->directoryPublic : $this->directoryPrivate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array<mixed> $permissionMap
|
||||||
|
*/
|
||||||
|
public static function fromArray(array $permissionMap, string $defaultForDirectories = Visibility::PRIVATE): PortableVisibilityConverter
|
||||||
|
{
|
||||||
|
return new PortableVisibilityConverter(
|
||||||
|
$permissionMap['file']['public'] ?? 0644,
|
||||||
|
$permissionMap['file']['private'] ?? 0600,
|
||||||
|
$permissionMap['dir']['public'] ?? 0755,
|
||||||
|
$permissionMap['dir']['private'] ?? 0700,
|
||||||
|
$defaultForDirectories
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
14
vendor/league/flysystem/src/UnixVisibility/VisibilityConverter.php
vendored
Normal file
14
vendor/league/flysystem/src/UnixVisibility/VisibilityConverter.php
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem\UnixVisibility;
|
||||||
|
|
||||||
|
interface VisibilityConverter
|
||||||
|
{
|
||||||
|
public function forFile(string $visibility): int;
|
||||||
|
public function forDirectory(string $visibility): int;
|
||||||
|
public function inverseForFile(int $visibility): string;
|
||||||
|
public function inverseForDirectory(int $visibility): string;
|
||||||
|
public function defaultForDirectories(): int;
|
||||||
|
}
|
28
vendor/league/flysystem/src/UnreadableFileEncountered.php
vendored
Normal file
28
vendor/league/flysystem/src/UnreadableFileEncountered.php
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
|
||||||
|
final class UnreadableFileEncountered extends RuntimeException implements FilesystemException
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $location;
|
||||||
|
|
||||||
|
public function location(): string
|
||||||
|
{
|
||||||
|
return $this->location;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function atLocation(string $location): UnreadableFileEncountered
|
||||||
|
{
|
||||||
|
$e = new static("Unreadable file encountered at location {$location}.");
|
||||||
|
$e->location = $location;
|
||||||
|
|
||||||
|
return $e;
|
||||||
|
}
|
||||||
|
}
|
11
vendor/league/flysystem/src/Visibility.php
vendored
Normal file
11
vendor/league/flysystem/src/Visibility.php
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
final class Visibility
|
||||||
|
{
|
||||||
|
public const PUBLIC = 'public';
|
||||||
|
public const PRIVATE = 'private';
|
||||||
|
}
|
49
vendor/league/flysystem/src/WhitespacePathNormalizer.php
vendored
Normal file
49
vendor/league/flysystem/src/WhitespacePathNormalizer.php
vendored
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\Flysystem;
|
||||||
|
|
||||||
|
class WhitespacePathNormalizer implements PathNormalizer
|
||||||
|
{
|
||||||
|
public function normalizePath(string $path): string
|
||||||
|
{
|
||||||
|
$path = str_replace('\\', '/', $path);
|
||||||
|
$this->rejectFunkyWhiteSpace($path);
|
||||||
|
|
||||||
|
return $this->normalizeRelativePath($path);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function rejectFunkyWhiteSpace(string $path): void
|
||||||
|
{
|
||||||
|
if (preg_match('#\p{C}+#u', $path)) {
|
||||||
|
throw CorruptedPathDetected::forPath($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function normalizeRelativePath(string $path): string
|
||||||
|
{
|
||||||
|
$parts = [];
|
||||||
|
|
||||||
|
foreach (explode('/', $path) as $part) {
|
||||||
|
switch ($part) {
|
||||||
|
case '':
|
||||||
|
case '.':
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '..':
|
||||||
|
if (empty($parts)) {
|
||||||
|
throw PathTraversalDetected::forPath($path);
|
||||||
|
}
|
||||||
|
array_pop($parts);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$parts[] = $part;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return implode('/', $parts);
|
||||||
|
}
|
||||||
|
}
|
59
vendor/league/mime-type-detection/CHANGELOG.md
vendored
Normal file
59
vendor/league/mime-type-detection/CHANGELOG.md
vendored
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## 1.15.0 - 2024-01-28
|
||||||
|
|
||||||
|
- Updated lookup
|
||||||
|
|
||||||
|
## 1.14.0 - 2022-10-17
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- Updated lookup
|
||||||
|
|
||||||
|
## 1.13.0 - 2023-08-05
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- A reverse lookup mechanism to fetch one or all extensions for a given mimetype
|
||||||
|
|
||||||
|
## 1.12.0 - 2023-08-03
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- Updated lookup
|
||||||
|
|
||||||
|
## 1.11.0 - 2023-04-17
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- Updated lookup
|
||||||
|
|
||||||
|
## 1.10.0 - 2022-04-11
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Added Flysystem v1 inconclusive mime-types and made it configurable as a constructor parameter.
|
||||||
|
|
||||||
|
## 1.9.0 - 2021-11-21
|
||||||
|
|
||||||
|
### Updated
|
||||||
|
|
||||||
|
- Updated lookup
|
||||||
|
|
||||||
|
## 1.8.0 - 2021-09-25
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added the decorator `OverridingExtensionToMimeTypeMap` which allows you to override values.
|
||||||
|
|
||||||
|
## 1.7.0 - 2021-01-18
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added a `bufferSampleSize` parameter to the `FinfoMimeTypeDetector` class that allows you to send a reduced content sample which costs less memory.
|
||||||
|
|
||||||
|
## 1.6.0 - 2021-01-18
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
- Updated generated mime-type map
|
19
vendor/league/mime-type-detection/LICENSE
vendored
Normal file
19
vendor/league/mime-type-detection/LICENSE
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2013-2023 Frank de Jonge
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is furnished
|
||||||
|
to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
34
vendor/league/mime-type-detection/composer.json
vendored
Normal file
34
vendor/league/mime-type-detection/composer.json
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "league/mime-type-detection",
|
||||||
|
"description": "Mime-type detection for Flysystem",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Frank de Jonge",
|
||||||
|
"email": "info@frankdejonge.nl"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"test": "vendor/bin/phpunit",
|
||||||
|
"phpstan": "vendor/bin/phpstan analyse -l 6 src"
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.4 || ^8.0",
|
||||||
|
"ext-fileinfo": "*"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0",
|
||||||
|
"phpstan/phpstan": "^0.12.68",
|
||||||
|
"friendsofphp/php-cs-fixer": "^3.2"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"League\\MimeTypeDetection\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"platform": {
|
||||||
|
"php": "7.4.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
13
vendor/league/mime-type-detection/src/EmptyExtensionToMimeTypeMap.php
vendored
Normal file
13
vendor/league/mime-type-detection/src/EmptyExtensionToMimeTypeMap.php
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\MimeTypeDetection;
|
||||||
|
|
||||||
|
class EmptyExtensionToMimeTypeMap implements ExtensionToMimeTypeMap
|
||||||
|
{
|
||||||
|
public function lookupMimeType(string $extension): ?string
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
14
vendor/league/mime-type-detection/src/ExtensionLookup.php
vendored
Normal file
14
vendor/league/mime-type-detection/src/ExtensionLookup.php
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\MimeTypeDetection;
|
||||||
|
|
||||||
|
interface ExtensionLookup
|
||||||
|
{
|
||||||
|
public function lookupExtension(string $mimetype): ?string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public function lookupAllExtensions(string $mimetype): array;
|
||||||
|
}
|
56
vendor/league/mime-type-detection/src/ExtensionMimeTypeDetector.php
vendored
Normal file
56
vendor/league/mime-type-detection/src/ExtensionMimeTypeDetector.php
vendored
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\MimeTypeDetection;
|
||||||
|
|
||||||
|
use const PATHINFO_EXTENSION;
|
||||||
|
|
||||||
|
class ExtensionMimeTypeDetector implements MimeTypeDetector, ExtensionLookup
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ExtensionToMimeTypeMap
|
||||||
|
*/
|
||||||
|
private $extensions;
|
||||||
|
|
||||||
|
public function __construct(ExtensionToMimeTypeMap $extensions = null)
|
||||||
|
{
|
||||||
|
$this->extensions = $extensions ?: new GeneratedExtensionToMimeTypeMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function detectMimeType(string $path, $contents): ?string
|
||||||
|
{
|
||||||
|
return $this->detectMimeTypeFromPath($path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function detectMimeTypeFromPath(string $path): ?string
|
||||||
|
{
|
||||||
|
$extension = strtolower(pathinfo($path, PATHINFO_EXTENSION));
|
||||||
|
|
||||||
|
return $this->extensions->lookupMimeType($extension);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function detectMimeTypeFromFile(string $path): ?string
|
||||||
|
{
|
||||||
|
return $this->detectMimeTypeFromPath($path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function detectMimeTypeFromBuffer(string $contents): ?string
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function lookupExtension(string $mimetype): ?string
|
||||||
|
{
|
||||||
|
return $this->extensions instanceof ExtensionLookup
|
||||||
|
? $this->extensions->lookupExtension($mimetype)
|
||||||
|
: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function lookupAllExtensions(string $mimetype): array
|
||||||
|
{
|
||||||
|
return $this->extensions instanceof ExtensionLookup
|
||||||
|
? $this->extensions->lookupAllExtensions($mimetype)
|
||||||
|
: [];
|
||||||
|
}
|
||||||
|
}
|
10
vendor/league/mime-type-detection/src/ExtensionToMimeTypeMap.php
vendored
Normal file
10
vendor/league/mime-type-detection/src/ExtensionToMimeTypeMap.php
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\MimeTypeDetection;
|
||||||
|
|
||||||
|
interface ExtensionToMimeTypeMap
|
||||||
|
{
|
||||||
|
public function lookupMimeType(string $extension): ?string;
|
||||||
|
}
|
106
vendor/league/mime-type-detection/src/FinfoMimeTypeDetector.php
vendored
Normal file
106
vendor/league/mime-type-detection/src/FinfoMimeTypeDetector.php
vendored
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\MimeTypeDetection;
|
||||||
|
|
||||||
|
use const FILEINFO_MIME_TYPE;
|
||||||
|
|
||||||
|
use const PATHINFO_EXTENSION;
|
||||||
|
use finfo;
|
||||||
|
|
||||||
|
class FinfoMimeTypeDetector implements MimeTypeDetector, ExtensionLookup
|
||||||
|
{
|
||||||
|
private const INCONCLUSIVE_MIME_TYPES = [
|
||||||
|
'application/x-empty',
|
||||||
|
'text/plain',
|
||||||
|
'text/x-asm',
|
||||||
|
'application/octet-stream',
|
||||||
|
'inode/x-empty',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var finfo
|
||||||
|
*/
|
||||||
|
private $finfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var ExtensionToMimeTypeMap
|
||||||
|
*/
|
||||||
|
private $extensionMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int|null
|
||||||
|
*/
|
||||||
|
private $bufferSampleSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array<string>
|
||||||
|
*/
|
||||||
|
private $inconclusiveMimetypes;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
string $magicFile = '',
|
||||||
|
ExtensionToMimeTypeMap $extensionMap = null,
|
||||||
|
?int $bufferSampleSize = null,
|
||||||
|
array $inconclusiveMimetypes = self::INCONCLUSIVE_MIME_TYPES
|
||||||
|
) {
|
||||||
|
$this->finfo = new finfo(FILEINFO_MIME_TYPE, $magicFile);
|
||||||
|
$this->extensionMap = $extensionMap ?: new GeneratedExtensionToMimeTypeMap();
|
||||||
|
$this->bufferSampleSize = $bufferSampleSize;
|
||||||
|
$this->inconclusiveMimetypes = $inconclusiveMimetypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function detectMimeType(string $path, $contents): ?string
|
||||||
|
{
|
||||||
|
$mimeType = is_string($contents)
|
||||||
|
? (@$this->finfo->buffer($this->takeSample($contents)) ?: null)
|
||||||
|
: null;
|
||||||
|
|
||||||
|
if ($mimeType !== null && ! in_array($mimeType, $this->inconclusiveMimetypes)) {
|
||||||
|
return $mimeType;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->detectMimeTypeFromPath($path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function detectMimeTypeFromPath(string $path): ?string
|
||||||
|
{
|
||||||
|
$extension = strtolower(pathinfo($path, PATHINFO_EXTENSION));
|
||||||
|
|
||||||
|
return $this->extensionMap->lookupMimeType($extension);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function detectMimeTypeFromFile(string $path): ?string
|
||||||
|
{
|
||||||
|
return @$this->finfo->file($path) ?: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function detectMimeTypeFromBuffer(string $contents): ?string
|
||||||
|
{
|
||||||
|
return @$this->finfo->buffer($this->takeSample($contents)) ?: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function takeSample(string $contents): string
|
||||||
|
{
|
||||||
|
if ($this->bufferSampleSize === null) {
|
||||||
|
return $contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (string) substr($contents, 0, $this->bufferSampleSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function lookupExtension(string $mimetype): ?string
|
||||||
|
{
|
||||||
|
return $this->extensionMap instanceof ExtensionLookup
|
||||||
|
? $this->extensionMap->lookupExtension($mimetype)
|
||||||
|
: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function lookupAllExtensions(string $mimetype): array
|
||||||
|
{
|
||||||
|
return $this->extensionMap instanceof ExtensionLookup
|
||||||
|
? $this->extensionMap->lookupAllExtensions($mimetype)
|
||||||
|
: [];
|
||||||
|
}
|
||||||
|
}
|
2298
vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php
vendored
Normal file
2298
vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php
vendored
Normal file
File diff suppressed because it is too large
Load Diff
19
vendor/league/mime-type-detection/src/MimeTypeDetector.php
vendored
Normal file
19
vendor/league/mime-type-detection/src/MimeTypeDetector.php
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace League\MimeTypeDetection;
|
||||||
|
|
||||||
|
interface MimeTypeDetector
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param string|resource $contents
|
||||||
|
*/
|
||||||
|
public function detectMimeType(string $path, $contents): ?string;
|
||||||
|
|
||||||
|
public function detectMimeTypeFromBuffer(string $contents): ?string;
|
||||||
|
|
||||||
|
public function detectMimeTypeFromPath(string $path): ?string;
|
||||||
|
|
||||||
|
public function detectMimeTypeFromFile(string $path): ?string;
|
||||||
|
}
|
30
vendor/league/mime-type-detection/src/OverridingExtensionToMimeTypeMap.php
vendored
Normal file
30
vendor/league/mime-type-detection/src/OverridingExtensionToMimeTypeMap.php
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace League\MimeTypeDetection;
|
||||||
|
|
||||||
|
class OverridingExtensionToMimeTypeMap implements ExtensionToMimeTypeMap
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ExtensionToMimeTypeMap
|
||||||
|
*/
|
||||||
|
private $innerMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string[]
|
||||||
|
*/
|
||||||
|
private $overrides;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array<string, string> $overrides
|
||||||
|
*/
|
||||||
|
public function __construct(ExtensionToMimeTypeMap $innerMap, array $overrides)
|
||||||
|
{
|
||||||
|
$this->innerMap = $innerMap;
|
||||||
|
$this->overrides = $overrides;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function lookupMimeType(string $extension): ?string
|
||||||
|
{
|
||||||
|
return $this->overrides[$extension] ?? $this->innerMap->lookupMimeType($extension);
|
||||||
|
}
|
||||||
|
}
|
21
vendor/psr/container/LICENSE
vendored
Normal file
21
vendor/psr/container/LICENSE
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2013-2016 container-interop
|
||||||
|
Copyright (c) 2016 PHP Framework Interoperability Group
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
13
vendor/psr/container/README.md
vendored
Normal file
13
vendor/psr/container/README.md
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Container interface
|
||||||
|
==============
|
||||||
|
|
||||||
|
This repository holds all interfaces related to [PSR-11 (Container Interface)][psr-url].
|
||||||
|
|
||||||
|
Note that this is not a Container implementation of its own. It is merely abstractions that describe the components of a Dependency Injection Container.
|
||||||
|
|
||||||
|
The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.
|
||||||
|
|
||||||
|
[psr-url]: https://www.php-fig.org/psr/psr-11/
|
||||||
|
[package-url]: https://packagist.org/packages/psr/container
|
||||||
|
[implementation-url]: https://packagist.org/providers/psr/container-implementation
|
||||||
|
|
27
vendor/psr/container/composer.json
vendored
Normal file
27
vendor/psr/container/composer.json
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"name": "psr/container",
|
||||||
|
"type": "library",
|
||||||
|
"description": "Common Container Interface (PHP FIG PSR-11)",
|
||||||
|
"keywords": ["psr", "psr-11", "container", "container-interop", "container-interface"],
|
||||||
|
"homepage": "https://github.com/php-fig/container",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.4.0"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Container\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "2.0.x-dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
vendor/psr/container/src/ContainerExceptionInterface.php
vendored
Normal file
12
vendor/psr/container/src/ContainerExceptionInterface.php
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Container;
|
||||||
|
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base interface representing a generic exception in a container.
|
||||||
|
*/
|
||||||
|
interface ContainerExceptionInterface extends Throwable
|
||||||
|
{
|
||||||
|
}
|
36
vendor/psr/container/src/ContainerInterface.php
vendored
Normal file
36
vendor/psr/container/src/ContainerInterface.php
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Psr\Container;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes the interface of a container that exposes methods to read its entries.
|
||||||
|
*/
|
||||||
|
interface ContainerInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Finds an entry of the container by its identifier and returns it.
|
||||||
|
*
|
||||||
|
* @param string $id Identifier of the entry to look for.
|
||||||
|
*
|
||||||
|
* @throws NotFoundExceptionInterface No entry was found for **this** identifier.
|
||||||
|
* @throws ContainerExceptionInterface Error while retrieving the entry.
|
||||||
|
*
|
||||||
|
* @return mixed Entry.
|
||||||
|
*/
|
||||||
|
public function get(string $id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the container can return an entry for the given identifier.
|
||||||
|
* Returns false otherwise.
|
||||||
|
*
|
||||||
|
* `has($id)` returning true does not mean that `get($id)` will not throw an exception.
|
||||||
|
* It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.
|
||||||
|
*
|
||||||
|
* @param string $id Identifier of the entry to look for.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function has(string $id): bool;
|
||||||
|
}
|
10
vendor/psr/container/src/NotFoundExceptionInterface.php
vendored
Normal file
10
vendor/psr/container/src/NotFoundExceptionInterface.php
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Container;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No entry was found in the container.
|
||||||
|
*/
|
||||||
|
interface NotFoundExceptionInterface extends ContainerExceptionInterface
|
||||||
|
{
|
||||||
|
}
|
36
vendor/psr/http-message/CHANGELOG.md
vendored
Normal file
36
vendor/psr/http-message/CHANGELOG.md
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file, in reverse chronological order by release.
|
||||||
|
|
||||||
|
## 1.0.1 - 2016-08-06
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Nothing.
|
||||||
|
|
||||||
|
### Deprecated
|
||||||
|
|
||||||
|
- Nothing.
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- Nothing.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Updated all `@return self` annotation references in interfaces to use
|
||||||
|
`@return static`, which more closelly follows the semantics of the
|
||||||
|
specification.
|
||||||
|
- Updated the `MessageInterface::getHeaders()` return annotation to use the
|
||||||
|
value `string[][]`, indicating the format is a nested array of strings.
|
||||||
|
- Updated the `@link` annotation for `RequestInterface::withRequestTarget()`
|
||||||
|
to point to the correct section of RFC 7230.
|
||||||
|
- Updated the `ServerRequestInterface::withUploadedFiles()` parameter annotation
|
||||||
|
to add the parameter name (`$uploadedFiles`).
|
||||||
|
- Updated a `@throws` annotation for the `UploadedFileInterface::moveTo()`
|
||||||
|
method to correctly reference the method parameter (it was referencing an
|
||||||
|
incorrect parameter name previously).
|
||||||
|
|
||||||
|
## 1.0.0 - 2016-05-18
|
||||||
|
|
||||||
|
Initial stable release; reflects accepted PSR-7 specification.
|
19
vendor/psr/http-message/LICENSE
vendored
Normal file
19
vendor/psr/http-message/LICENSE
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2014 PHP Framework Interoperability Group
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
16
vendor/psr/http-message/README.md
vendored
Normal file
16
vendor/psr/http-message/README.md
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
PSR Http Message
|
||||||
|
================
|
||||||
|
|
||||||
|
This repository holds all interfaces/classes/traits related to
|
||||||
|
[PSR-7](http://www.php-fig.org/psr/psr-7/).
|
||||||
|
|
||||||
|
Note that this is not a HTTP message implementation of its own. It is merely an
|
||||||
|
interface that describes a HTTP message. See the specification for more details.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
Before reading the usage guide we recommend reading the PSR-7 interfaces method list:
|
||||||
|
|
||||||
|
* [`PSR-7 Interfaces Method List`](docs/PSR7-Interfaces.md)
|
||||||
|
* [`PSR-7 Usage Guide`](docs/PSR7-Usage.md)
|
26
vendor/psr/http-message/composer.json
vendored
Normal file
26
vendor/psr/http-message/composer.json
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"name": "psr/http-message",
|
||||||
|
"description": "Common interface for HTTP messages",
|
||||||
|
"keywords": ["psr", "psr-7", "http", "http-message", "request", "response"],
|
||||||
|
"homepage": "https://github.com/php-fig/http-message",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "http://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": "^7.2 || ^8.0"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Message\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.1.x-dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
130
vendor/psr/http-message/docs/PSR7-Interfaces.md
vendored
Normal file
130
vendor/psr/http-message/docs/PSR7-Interfaces.md
vendored
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
# Interfaces
|
||||||
|
|
||||||
|
The purpose of this list is to help in finding the methods when working with PSR-7. This can be considered as a cheatsheet for PSR-7 interfaces.
|
||||||
|
|
||||||
|
The interfaces defined in PSR-7 are the following:
|
||||||
|
|
||||||
|
| Class Name | Description |
|
||||||
|
|---|---|
|
||||||
|
| [Psr\Http\Message\MessageInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagemessageinterface) | Representation of a HTTP message |
|
||||||
|
| [Psr\Http\Message\RequestInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagerequestinterface) | Representation of an outgoing, client-side request. |
|
||||||
|
| [Psr\Http\Message\ServerRequestInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageserverrequestinterface) | Representation of an incoming, server-side HTTP request. |
|
||||||
|
| [Psr\Http\Message\ResponseInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageresponseinterface) | Representation of an outgoing, server-side response. |
|
||||||
|
| [Psr\Http\Message\StreamInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagestreaminterface) | Describes a data stream |
|
||||||
|
| [Psr\Http\Message\UriInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageuriinterface) | Value object representing a URI. |
|
||||||
|
| [Psr\Http\Message\UploadedFileInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageuploadedfileinterface) | Value object representing a file uploaded through an HTTP request. |
|
||||||
|
|
||||||
|
## `Psr\Http\Message\MessageInterface` Methods
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `getProtocolVersion()` | Retrieve HTTP protocol version | 1.0 or 1.1 |
|
||||||
|
| `withProtocolVersion($version)` | Returns new message instance with given HTTP protocol version | |
|
||||||
|
| `getHeaders()` | Retrieve all HTTP Headers | [Request Header List](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_fields), [Response Header List](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Response_fields) |
|
||||||
|
| `hasHeader($name)` | Checks if HTTP Header with given name exists | |
|
||||||
|
| `getHeader($name)` | Retrieves a array with the values for a single header | |
|
||||||
|
| `getHeaderLine($name)` | Retrieves a comma-separated string of the values for a single header | |
|
||||||
|
| `withHeader($name, $value)` | Returns new message instance with given HTTP Header | if the header existed in the original instance, replaces the header value from the original message with the value provided when creating the new instance. |
|
||||||
|
| `withAddedHeader($name, $value)` | Returns new message instance with appended value to given header | If header already exists value will be appended, if not a new header will be created |
|
||||||
|
| `withoutHeader($name)` | Removes HTTP Header with given name| |
|
||||||
|
| `getBody()` | Retrieves the HTTP Message Body | Returns object implementing `StreamInterface`|
|
||||||
|
| `withBody(StreamInterface $body)` | Returns new message instance with given HTTP Message Body | |
|
||||||
|
|
||||||
|
|
||||||
|
## `Psr\Http\Message\RequestInterface` Methods
|
||||||
|
|
||||||
|
Same methods as `Psr\Http\Message\MessageInterface` + the following methods:
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `getRequestTarget()` | Retrieves the message's request target | origin-form, absolute-form, authority-form, asterisk-form ([RFC7230](https://www.rfc-editor.org/rfc/rfc7230.txt)) |
|
||||||
|
| `withRequestTarget($requestTarget)` | Return a new message instance with the specific request-target | |
|
||||||
|
| `getMethod()` | Retrieves the HTTP method of the request. | GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE (defined in [RFC7231](https://tools.ietf.org/html/rfc7231)), PATCH (defined in [RFC5789](https://tools.ietf.org/html/rfc5789)) |
|
||||||
|
| `withMethod($method)` | Returns a new message instance with the provided HTTP method | |
|
||||||
|
| `getUri()` | Retrieves the URI instance | |
|
||||||
|
| `withUri(UriInterface $uri, $preserveHost = false)` | Returns a new message instance with the provided URI | |
|
||||||
|
|
||||||
|
|
||||||
|
## `Psr\Http\Message\ServerRequestInterface` Methods
|
||||||
|
|
||||||
|
Same methods as `Psr\Http\Message\RequestInterface` + the following methods:
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `getServerParams() ` | Retrieve server parameters | Typically derived from `$_SERVER` |
|
||||||
|
| `getCookieParams()` | Retrieves cookies sent by the client to the server. | Typically derived from `$_COOKIES` |
|
||||||
|
| `withCookieParams(array $cookies)` | Returns a new request instance with the specified cookies | |
|
||||||
|
| `withQueryParams(array $query)` | Returns a new request instance with the specified query string arguments | |
|
||||||
|
| `getUploadedFiles()` | Retrieve normalized file upload data | |
|
||||||
|
| `withUploadedFiles(array $uploadedFiles)` | Returns a new request instance with the specified uploaded files | |
|
||||||
|
| `getParsedBody()` | Retrieve any parameters provided in the request body | |
|
||||||
|
| `withParsedBody($data)` | Returns a new request instance with the specified body parameters | |
|
||||||
|
| `getAttributes()` | Retrieve attributes derived from the request | |
|
||||||
|
| `getAttribute($name, $default = null)` | Retrieve a single derived request attribute | |
|
||||||
|
| `withAttribute($name, $value)` | Returns a new request instance with the specified derived request attribute | |
|
||||||
|
| `withoutAttribute($name)` | Returns a new request instance that without the specified derived request attribute | |
|
||||||
|
|
||||||
|
## `Psr\Http\Message\ResponseInterface` Methods:
|
||||||
|
|
||||||
|
Same methods as `Psr\Http\Message\MessageInterface` + the following methods:
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `getStatusCode()` | Gets the response status code. | |
|
||||||
|
| `withStatus($code, $reasonPhrase = '')` | Returns a new response instance with the specified status code and, optionally, reason phrase. | |
|
||||||
|
| `getReasonPhrase()` | Gets the response reason phrase associated with the status code. | |
|
||||||
|
|
||||||
|
## `Psr\Http\Message\StreamInterface` Methods
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `__toString()` | Reads all data from the stream into a string, from the beginning to end. | |
|
||||||
|
| `close()` | Closes the stream and any underlying resources. | |
|
||||||
|
| `detach()` | Separates any underlying resources from the stream. | |
|
||||||
|
| `getSize()` | Get the size of the stream if known. | |
|
||||||
|
| `eof()` | Returns true if the stream is at the end of the stream.| |
|
||||||
|
| `isSeekable()` | Returns whether or not the stream is seekable. | |
|
||||||
|
| `seek($offset, $whence = SEEK_SET)` | Seek to a position in the stream. | |
|
||||||
|
| `rewind()` | Seek to the beginning of the stream. | |
|
||||||
|
| `isWritable()` | Returns whether or not the stream is writable. | |
|
||||||
|
| `write($string)` | Write data to the stream. | |
|
||||||
|
| `isReadable()` | Returns whether or not the stream is readable. | |
|
||||||
|
| `read($length)` | Read data from the stream. | |
|
||||||
|
| `getContents()` | Returns the remaining contents in a string | |
|
||||||
|
| `getMetadata($key = null)()` | Get stream metadata as an associative array or retrieve a specific key. | |
|
||||||
|
|
||||||
|
## `Psr\Http\Message\UriInterface` Methods
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `getScheme()` | Retrieve the scheme component of the URI. | |
|
||||||
|
| `getAuthority()` | Retrieve the authority component of the URI. | |
|
||||||
|
| `getUserInfo()` | Retrieve the user information component of the URI. | |
|
||||||
|
| `getHost()` | Retrieve the host component of the URI. | |
|
||||||
|
| `getPort()` | Retrieve the port component of the URI. | |
|
||||||
|
| `getPath()` | Retrieve the path component of the URI. | |
|
||||||
|
| `getQuery()` | Retrieve the query string of the URI. | |
|
||||||
|
| `getFragment()` | Retrieve the fragment component of the URI. | |
|
||||||
|
| `withScheme($scheme)` | Return an instance with the specified scheme. | |
|
||||||
|
| `withUserInfo($user, $password = null)` | Return an instance with the specified user information. | |
|
||||||
|
| `withHost($host)` | Return an instance with the specified host. | |
|
||||||
|
| `withPort($port)` | Return an instance with the specified port. | |
|
||||||
|
| `withPath($path)` | Return an instance with the specified path. | |
|
||||||
|
| `withQuery($query)` | Return an instance with the specified query string. | |
|
||||||
|
| `withFragment($fragment)` | Return an instance with the specified URI fragment. | |
|
||||||
|
| `__toString()` | Return the string representation as a URI reference. | |
|
||||||
|
|
||||||
|
## `Psr\Http\Message\UploadedFileInterface` Methods
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `getStream()` | Retrieve a stream representing the uploaded file. | |
|
||||||
|
| `moveTo($targetPath)` | Move the uploaded file to a new location. | |
|
||||||
|
| `getSize()` | Retrieve the file size. | |
|
||||||
|
| `getError()` | Retrieve the error associated with the uploaded file. | |
|
||||||
|
| `getClientFilename()` | Retrieve the filename sent by the client. | |
|
||||||
|
| `getClientMediaType()` | Retrieve the media type sent by the client. | |
|
||||||
|
|
||||||
|
> `RequestInterface`, `ServerRequestInterface`, `ResponseInterface` extend `MessageInterface` because the `Request` and the `Response` are `HTTP Messages`.
|
||||||
|
> When using `ServerRequestInterface`, both `RequestInterface` and `Psr\Http\Message\MessageInterface` methods are considered.
|
||||||
|
|
159
vendor/psr/http-message/docs/PSR7-Usage.md
vendored
Normal file
159
vendor/psr/http-message/docs/PSR7-Usage.md
vendored
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
### PSR-7 Usage
|
||||||
|
|
||||||
|
All PSR-7 applications comply with these interfaces
|
||||||
|
They were created to establish a standard between middleware implementations.
|
||||||
|
|
||||||
|
> `RequestInterface`, `ServerRequestInterface`, `ResponseInterface` extend `MessageInterface` because the `Request` and the `Response` are `HTTP Messages`.
|
||||||
|
> When using `ServerRequestInterface`, both `RequestInterface` and `Psr\Http\Message\MessageInterface` methods are considered.
|
||||||
|
|
||||||
|
|
||||||
|
The following examples will illustrate how basic operations are done in PSR-7.
|
||||||
|
|
||||||
|
##### Examples
|
||||||
|
|
||||||
|
|
||||||
|
For this examples to work (at least) a PSR-7 implementation package is required. (eg: zendframework/zend-diactoros, guzzlehttp/psr7, slim/slim, etc)
|
||||||
|
All PSR-7 implementations should have the same behaviour.
|
||||||
|
|
||||||
|
The following will be assumed:
|
||||||
|
`$request` is an object of `Psr\Http\Message\RequestInterface` and
|
||||||
|
|
||||||
|
`$response` is an object implementing `Psr\Http\Message\RequestInterface`
|
||||||
|
|
||||||
|
|
||||||
|
### Working with HTTP Headers
|
||||||
|
|
||||||
|
#### Adding headers to response:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$response->withHeader('My-Custom-Header', 'My Custom Message');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Appending values to headers
|
||||||
|
|
||||||
|
```php
|
||||||
|
$response->withAddedHeader('My-Custom-Header', 'The second message');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Checking if header exists:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$request->hasHeader('My-Custom-Header'); // will return false
|
||||||
|
$response->hasHeader('My-Custom-Header'); // will return true
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note: My-Custom-Header was only added in the Response
|
||||||
|
|
||||||
|
#### Getting comma-separated values from a header (also applies to request)
|
||||||
|
|
||||||
|
```php
|
||||||
|
// getting value from request headers
|
||||||
|
$request->getHeaderLine('Content-Type'); // will return: "text/html; charset=UTF-8"
|
||||||
|
// getting value from response headers
|
||||||
|
$response->getHeaderLine('My-Custom-Header'); // will return: "My Custom Message; The second message"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Getting array of value from a header (also applies to request)
|
||||||
|
```php
|
||||||
|
// getting value from request headers
|
||||||
|
$request->getHeader('Content-Type'); // will return: ["text/html", "charset=UTF-8"]
|
||||||
|
// getting value from response headers
|
||||||
|
$response->getHeader('My-Custom-Header'); // will return: ["My Custom Message", "The second message"]
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Removing headers from HTTP Messages
|
||||||
|
```php
|
||||||
|
// removing a header from Request, removing deprecated "Content-MD5" header
|
||||||
|
$request->withoutHeader('Content-MD5');
|
||||||
|
|
||||||
|
// removing a header from Response
|
||||||
|
// effect: the browser won't know the size of the stream
|
||||||
|
// the browser will download the stream till it ends
|
||||||
|
$response->withoutHeader('Content-Length');
|
||||||
|
```
|
||||||
|
|
||||||
|
### Working with HTTP Message Body
|
||||||
|
|
||||||
|
When working with the PSR-7 there are two methods of implementation:
|
||||||
|
#### 1. Getting the body separately
|
||||||
|
|
||||||
|
> This method makes the body handling easier to understand and is useful when repeatedly calling body methods. (You only call `getBody()` once). Using this method mistakes like `$response->write()` are also prevented.
|
||||||
|
|
||||||
|
```php
|
||||||
|
$body = $response->getBody();
|
||||||
|
// operations on body, eg. read, write, seek
|
||||||
|
// ...
|
||||||
|
// replacing the old body
|
||||||
|
$response->withBody($body);
|
||||||
|
// this last statement is optional as we working with objects
|
||||||
|
// in this case the "new" body is same with the "old" one
|
||||||
|
// the $body variable has the same value as the one in $request, only the reference is passed
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. Working directly on response
|
||||||
|
|
||||||
|
> This method is useful when only performing few operations as the `$request->getBody()` statement fragment is required
|
||||||
|
|
||||||
|
```php
|
||||||
|
$response->getBody()->write('hello');
|
||||||
|
```
|
||||||
|
|
||||||
|
### Getting the body contents
|
||||||
|
|
||||||
|
The following snippet gets the contents of a stream contents.
|
||||||
|
> Note: Streams must be rewinded, if content was written into streams, it will be ignored when calling `getContents()` because the stream pointer is set to the last character, which is `\0` - meaning end of stream.
|
||||||
|
```php
|
||||||
|
$body = $response->getBody();
|
||||||
|
$body->rewind(); // or $body->seek(0);
|
||||||
|
$bodyText = $body->getContents();
|
||||||
|
```
|
||||||
|
> Note: If `$body->seek(1)` is called before `$body->getContents()`, the first character will be ommited as the starting pointer is set to `1`, not `0`. This is why using `$body->rewind()` is recommended.
|
||||||
|
|
||||||
|
### Append to body
|
||||||
|
|
||||||
|
```php
|
||||||
|
$response->getBody()->write('Hello'); // writing directly
|
||||||
|
$body = $request->getBody(); // which is a `StreamInterface`
|
||||||
|
$body->write('xxxxx');
|
||||||
|
```
|
||||||
|
|
||||||
|
### Prepend to body
|
||||||
|
Prepending is different when it comes to streams. The content must be copied before writing the content to be prepended.
|
||||||
|
The following example will explain the behaviour of streams.
|
||||||
|
|
||||||
|
```php
|
||||||
|
// assuming our response is initially empty
|
||||||
|
$body = $repsonse->getBody();
|
||||||
|
// writing the string "abcd"
|
||||||
|
$body->write('abcd');
|
||||||
|
|
||||||
|
// seeking to start of stream
|
||||||
|
$body->seek(0);
|
||||||
|
// writing 'ef'
|
||||||
|
$body->write('ef'); // at this point the stream contains "efcd"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Prepending by rewriting separately
|
||||||
|
|
||||||
|
```php
|
||||||
|
// assuming our response body stream only contains: "abcd"
|
||||||
|
$body = $response->getBody();
|
||||||
|
$body->rewind();
|
||||||
|
$contents = $body->getContents(); // abcd
|
||||||
|
// seeking the stream to beginning
|
||||||
|
$body->rewind();
|
||||||
|
$body->write('ef'); // stream contains "efcd"
|
||||||
|
$body->write($contents); // stream contains "efabcd"
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note: `getContents()` seeks the stream while reading it, therefore if the second `rewind()` method call was not present the stream would have resulted in `abcdefabcd` because the `write()` method appends to stream if not preceeded by `rewind()` or `seek(0)`.
|
||||||
|
|
||||||
|
#### Prepending by using contents as a string
|
||||||
|
```php
|
||||||
|
$body = $response->getBody();
|
||||||
|
$body->rewind();
|
||||||
|
$contents = $body->getContents(); // efabcd
|
||||||
|
$contents = 'ef'.$contents;
|
||||||
|
$body->rewind();
|
||||||
|
$body->write($contents);
|
||||||
|
```
|
189
vendor/psr/http-message/src/MessageInterface.php
vendored
Normal file
189
vendor/psr/http-message/src/MessageInterface.php
vendored
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HTTP messages consist of requests from a client to a server and responses
|
||||||
|
* from a server to a client. This interface defines the methods common to
|
||||||
|
* each.
|
||||||
|
*
|
||||||
|
* Messages are considered immutable; all methods that might change state MUST
|
||||||
|
* be implemented such that they retain the internal state of the current
|
||||||
|
* message and return an instance that contains the changed state.
|
||||||
|
*
|
||||||
|
* @link http://www.ietf.org/rfc/rfc7230.txt
|
||||||
|
* @link http://www.ietf.org/rfc/rfc7231.txt
|
||||||
|
*/
|
||||||
|
interface MessageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Retrieves the HTTP protocol version as a string.
|
||||||
|
*
|
||||||
|
* The string MUST contain only the HTTP version number (e.g., "1.1", "1.0").
|
||||||
|
*
|
||||||
|
* @return string HTTP protocol version.
|
||||||
|
*/
|
||||||
|
public function getProtocolVersion();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified HTTP protocol version.
|
||||||
|
*
|
||||||
|
* The version string MUST contain only the HTTP version number (e.g.,
|
||||||
|
* "1.1", "1.0").
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* new protocol version.
|
||||||
|
*
|
||||||
|
* @param string $version HTTP protocol version
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withProtocolVersion(string $version);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves all message header values.
|
||||||
|
*
|
||||||
|
* The keys represent the header name as it will be sent over the wire, and
|
||||||
|
* each value is an array of strings associated with the header.
|
||||||
|
*
|
||||||
|
* // Represent the headers as a string
|
||||||
|
* foreach ($message->getHeaders() as $name => $values) {
|
||||||
|
* echo $name . ": " . implode(", ", $values);
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* // Emit headers iteratively:
|
||||||
|
* foreach ($message->getHeaders() as $name => $values) {
|
||||||
|
* foreach ($values as $value) {
|
||||||
|
* header(sprintf('%s: %s', $name, $value), false);
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* While header names are not case-sensitive, getHeaders() will preserve the
|
||||||
|
* exact case in which headers were originally specified.
|
||||||
|
*
|
||||||
|
* @return string[][] Returns an associative array of the message's headers. Each
|
||||||
|
* key MUST be a header name, and each value MUST be an array of strings
|
||||||
|
* for that header.
|
||||||
|
*/
|
||||||
|
public function getHeaders();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a header exists by the given case-insensitive name.
|
||||||
|
*
|
||||||
|
* @param string $name Case-insensitive header field name.
|
||||||
|
* @return bool Returns true if any header names match the given header
|
||||||
|
* name using a case-insensitive string comparison. Returns false if
|
||||||
|
* no matching header name is found in the message.
|
||||||
|
*/
|
||||||
|
public function hasHeader(string $name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a message header value by the given case-insensitive name.
|
||||||
|
*
|
||||||
|
* This method returns an array of all the header values of the given
|
||||||
|
* case-insensitive header name.
|
||||||
|
*
|
||||||
|
* If the header does not appear in the message, this method MUST return an
|
||||||
|
* empty array.
|
||||||
|
*
|
||||||
|
* @param string $name Case-insensitive header field name.
|
||||||
|
* @return string[] An array of string values as provided for the given
|
||||||
|
* header. If the header does not appear in the message, this method MUST
|
||||||
|
* return an empty array.
|
||||||
|
*/
|
||||||
|
public function getHeader(string $name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a comma-separated string of the values for a single header.
|
||||||
|
*
|
||||||
|
* This method returns all of the header values of the given
|
||||||
|
* case-insensitive header name as a string concatenated together using
|
||||||
|
* a comma.
|
||||||
|
*
|
||||||
|
* NOTE: Not all header values may be appropriately represented using
|
||||||
|
* comma concatenation. For such headers, use getHeader() instead
|
||||||
|
* and supply your own delimiter when concatenating.
|
||||||
|
*
|
||||||
|
* If the header does not appear in the message, this method MUST return
|
||||||
|
* an empty string.
|
||||||
|
*
|
||||||
|
* @param string $name Case-insensitive header field name.
|
||||||
|
* @return string A string of values as provided for the given header
|
||||||
|
* concatenated together using a comma. If the header does not appear in
|
||||||
|
* the message, this method MUST return an empty string.
|
||||||
|
*/
|
||||||
|
public function getHeaderLine(string $name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the provided value replacing the specified header.
|
||||||
|
*
|
||||||
|
* While header names are case-insensitive, the casing of the header will
|
||||||
|
* be preserved by this function, and returned from getHeaders().
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* new and/or updated header and value.
|
||||||
|
*
|
||||||
|
* @param string $name Case-insensitive header field name.
|
||||||
|
* @param string|string[] $value Header value(s).
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException for invalid header names or values.
|
||||||
|
*/
|
||||||
|
public function withHeader(string $name, $value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified header appended with the given value.
|
||||||
|
*
|
||||||
|
* Existing values for the specified header will be maintained. The new
|
||||||
|
* value(s) will be appended to the existing list. If the header did not
|
||||||
|
* exist previously, it will be added.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* new header and/or value.
|
||||||
|
*
|
||||||
|
* @param string $name Case-insensitive header field name to add.
|
||||||
|
* @param string|string[] $value Header value(s).
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException for invalid header names or values.
|
||||||
|
*/
|
||||||
|
public function withAddedHeader(string $name, $value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance without the specified header.
|
||||||
|
*
|
||||||
|
* Header resolution MUST be done without case-sensitivity.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that removes
|
||||||
|
* the named header.
|
||||||
|
*
|
||||||
|
* @param string $name Case-insensitive header field name to remove.
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withoutHeader(string $name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the body of the message.
|
||||||
|
*
|
||||||
|
* @return StreamInterface Returns the body as a stream.
|
||||||
|
*/
|
||||||
|
public function getBody();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified message body.
|
||||||
|
*
|
||||||
|
* The body MUST be a StreamInterface object.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return a new instance that has the
|
||||||
|
* new body stream.
|
||||||
|
*
|
||||||
|
* @param StreamInterface $body Body.
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException When the body is not valid.
|
||||||
|
*/
|
||||||
|
public function withBody(StreamInterface $body);
|
||||||
|
}
|
131
vendor/psr/http-message/src/RequestInterface.php
vendored
Normal file
131
vendor/psr/http-message/src/RequestInterface.php
vendored
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Representation of an outgoing, client-side request.
|
||||||
|
*
|
||||||
|
* Per the HTTP specification, this interface includes properties for
|
||||||
|
* each of the following:
|
||||||
|
*
|
||||||
|
* - Protocol version
|
||||||
|
* - HTTP method
|
||||||
|
* - URI
|
||||||
|
* - Headers
|
||||||
|
* - Message body
|
||||||
|
*
|
||||||
|
* During construction, implementations MUST attempt to set the Host header from
|
||||||
|
* a provided URI if no Host header is provided.
|
||||||
|
*
|
||||||
|
* Requests are considered immutable; all methods that might change state MUST
|
||||||
|
* be implemented such that they retain the internal state of the current
|
||||||
|
* message and return an instance that contains the changed state.
|
||||||
|
*/
|
||||||
|
interface RequestInterface extends MessageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Retrieves the message's request target.
|
||||||
|
*
|
||||||
|
* Retrieves the message's request-target either as it will appear (for
|
||||||
|
* clients), as it appeared at request (for servers), or as it was
|
||||||
|
* specified for the instance (see withRequestTarget()).
|
||||||
|
*
|
||||||
|
* In most cases, this will be the origin-form of the composed URI,
|
||||||
|
* unless a value was provided to the concrete implementation (see
|
||||||
|
* withRequestTarget() below).
|
||||||
|
*
|
||||||
|
* If no URI is available, and no request-target has been specifically
|
||||||
|
* provided, this method MUST return the string "/".
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getRequestTarget();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specific request-target.
|
||||||
|
*
|
||||||
|
* If the request needs a non-origin-form request-target — e.g., for
|
||||||
|
* specifying an absolute-form, authority-form, or asterisk-form —
|
||||||
|
* this method may be used to create an instance with the specified
|
||||||
|
* request-target, verbatim.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* changed request target.
|
||||||
|
*
|
||||||
|
* @link http://tools.ietf.org/html/rfc7230#section-5.3 (for the various
|
||||||
|
* request-target forms allowed in request messages)
|
||||||
|
* @param string $requestTarget
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withRequestTarget(string $requestTarget);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the HTTP method of the request.
|
||||||
|
*
|
||||||
|
* @return string Returns the request method.
|
||||||
|
*/
|
||||||
|
public function getMethod();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the provided HTTP method.
|
||||||
|
*
|
||||||
|
* While HTTP method names are typically all uppercase characters, HTTP
|
||||||
|
* method names are case-sensitive and thus implementations SHOULD NOT
|
||||||
|
* modify the given string.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* changed request method.
|
||||||
|
*
|
||||||
|
* @param string $method Case-sensitive method.
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException for invalid HTTP methods.
|
||||||
|
*/
|
||||||
|
public function withMethod(string $method);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the URI instance.
|
||||||
|
*
|
||||||
|
* This method MUST return a UriInterface instance.
|
||||||
|
*
|
||||||
|
* @link http://tools.ietf.org/html/rfc3986#section-4.3
|
||||||
|
* @return UriInterface Returns a UriInterface instance
|
||||||
|
* representing the URI of the request.
|
||||||
|
*/
|
||||||
|
public function getUri();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an instance with the provided URI.
|
||||||
|
*
|
||||||
|
* This method MUST update the Host header of the returned request by
|
||||||
|
* default if the URI contains a host component. If the URI does not
|
||||||
|
* contain a host component, any pre-existing Host header MUST be carried
|
||||||
|
* over to the returned request.
|
||||||
|
*
|
||||||
|
* You can opt-in to preserving the original state of the Host header by
|
||||||
|
* setting `$preserveHost` to `true`. When `$preserveHost` is set to
|
||||||
|
* `true`, this method interacts with the Host header in the following ways:
|
||||||
|
*
|
||||||
|
* - If the Host header is missing or empty, and the new URI contains
|
||||||
|
* a host component, this method MUST update the Host header in the returned
|
||||||
|
* request.
|
||||||
|
* - If the Host header is missing or empty, and the new URI does not contain a
|
||||||
|
* host component, this method MUST NOT update the Host header in the returned
|
||||||
|
* request.
|
||||||
|
* - If a Host header is present and non-empty, this method MUST NOT update
|
||||||
|
* the Host header in the returned request.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* new UriInterface instance.
|
||||||
|
*
|
||||||
|
* @link http://tools.ietf.org/html/rfc3986#section-4.3
|
||||||
|
* @param UriInterface $uri New request URI to use.
|
||||||
|
* @param bool $preserveHost Preserve the original state of the Host header.
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withUri(UriInterface $uri, bool $preserveHost = false);
|
||||||
|
}
|
70
vendor/psr/http-message/src/ResponseInterface.php
vendored
Normal file
70
vendor/psr/http-message/src/ResponseInterface.php
vendored
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Representation of an outgoing, server-side response.
|
||||||
|
*
|
||||||
|
* Per the HTTP specification, this interface includes properties for
|
||||||
|
* each of the following:
|
||||||
|
*
|
||||||
|
* - Protocol version
|
||||||
|
* - Status code and reason phrase
|
||||||
|
* - Headers
|
||||||
|
* - Message body
|
||||||
|
*
|
||||||
|
* Responses are considered immutable; all methods that might change state MUST
|
||||||
|
* be implemented such that they retain the internal state of the current
|
||||||
|
* message and return an instance that contains the changed state.
|
||||||
|
*/
|
||||||
|
interface ResponseInterface extends MessageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Gets the response status code.
|
||||||
|
*
|
||||||
|
* The status code is a 3-digit integer result code of the server's attempt
|
||||||
|
* to understand and satisfy the request.
|
||||||
|
*
|
||||||
|
* @return int Status code.
|
||||||
|
*/
|
||||||
|
public function getStatusCode();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified status code and, optionally, reason phrase.
|
||||||
|
*
|
||||||
|
* If no reason phrase is specified, implementations MAY choose to default
|
||||||
|
* to the RFC 7231 or IANA recommended reason phrase for the response's
|
||||||
|
* status code.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* updated status and reason phrase.
|
||||||
|
*
|
||||||
|
* @link http://tools.ietf.org/html/rfc7231#section-6
|
||||||
|
* @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
|
||||||
|
* @param int $code The 3-digit integer result code to set.
|
||||||
|
* @param string $reasonPhrase The reason phrase to use with the
|
||||||
|
* provided status code; if none is provided, implementations MAY
|
||||||
|
* use the defaults as suggested in the HTTP specification.
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException For invalid status code arguments.
|
||||||
|
*/
|
||||||
|
public function withStatus(int $code, string $reasonPhrase = '');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the response reason phrase associated with the status code.
|
||||||
|
*
|
||||||
|
* Because a reason phrase is not a required element in a response
|
||||||
|
* status line, the reason phrase value MAY be null. Implementations MAY
|
||||||
|
* choose to return the default RFC 7231 recommended reason phrase (or those
|
||||||
|
* listed in the IANA HTTP Status Code Registry) for the response's
|
||||||
|
* status code.
|
||||||
|
*
|
||||||
|
* @link http://tools.ietf.org/html/rfc7231#section-6
|
||||||
|
* @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
|
||||||
|
* @return string Reason phrase; must return an empty string if none present.
|
||||||
|
*/
|
||||||
|
public function getReasonPhrase();
|
||||||
|
}
|
263
vendor/psr/http-message/src/ServerRequestInterface.php
vendored
Normal file
263
vendor/psr/http-message/src/ServerRequestInterface.php
vendored
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Representation of an incoming, server-side HTTP request.
|
||||||
|
*
|
||||||
|
* Per the HTTP specification, this interface includes properties for
|
||||||
|
* each of the following:
|
||||||
|
*
|
||||||
|
* - Protocol version
|
||||||
|
* - HTTP method
|
||||||
|
* - URI
|
||||||
|
* - Headers
|
||||||
|
* - Message body
|
||||||
|
*
|
||||||
|
* Additionally, it encapsulates all data as it has arrived to the
|
||||||
|
* application from the CGI and/or PHP environment, including:
|
||||||
|
*
|
||||||
|
* - The values represented in $_SERVER.
|
||||||
|
* - Any cookies provided (generally via $_COOKIE)
|
||||||
|
* - Query string arguments (generally via $_GET, or as parsed via parse_str())
|
||||||
|
* - Upload files, if any (as represented by $_FILES)
|
||||||
|
* - Deserialized body parameters (generally from $_POST)
|
||||||
|
*
|
||||||
|
* $_SERVER values MUST be treated as immutable, as they represent application
|
||||||
|
* state at the time of request; as such, no methods are provided to allow
|
||||||
|
* modification of those values. The other values provide such methods, as they
|
||||||
|
* can be restored from $_SERVER or the request body, and may need treatment
|
||||||
|
* during the application (e.g., body parameters may be deserialized based on
|
||||||
|
* content type).
|
||||||
|
*
|
||||||
|
* Additionally, this interface recognizes the utility of introspecting a
|
||||||
|
* request to derive and match additional parameters (e.g., via URI path
|
||||||
|
* matching, decrypting cookie values, deserializing non-form-encoded body
|
||||||
|
* content, matching authorization headers to users, etc). These parameters
|
||||||
|
* are stored in an "attributes" property.
|
||||||
|
*
|
||||||
|
* Requests are considered immutable; all methods that might change state MUST
|
||||||
|
* be implemented such that they retain the internal state of the current
|
||||||
|
* message and return an instance that contains the changed state.
|
||||||
|
*/
|
||||||
|
interface ServerRequestInterface extends RequestInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Retrieve server parameters.
|
||||||
|
*
|
||||||
|
* Retrieves data related to the incoming request environment,
|
||||||
|
* typically derived from PHP's $_SERVER superglobal. The data IS NOT
|
||||||
|
* REQUIRED to originate from $_SERVER.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getServerParams();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve cookies.
|
||||||
|
*
|
||||||
|
* Retrieves cookies sent by the client to the server.
|
||||||
|
*
|
||||||
|
* The data MUST be compatible with the structure of the $_COOKIE
|
||||||
|
* superglobal.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getCookieParams();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified cookies.
|
||||||
|
*
|
||||||
|
* The data IS NOT REQUIRED to come from the $_COOKIE superglobal, but MUST
|
||||||
|
* be compatible with the structure of $_COOKIE. Typically, this data will
|
||||||
|
* be injected at instantiation.
|
||||||
|
*
|
||||||
|
* This method MUST NOT update the related Cookie header of the request
|
||||||
|
* instance, nor related values in the server params.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* updated cookie values.
|
||||||
|
*
|
||||||
|
* @param array $cookies Array of key/value pairs representing cookies.
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withCookieParams(array $cookies);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve query string arguments.
|
||||||
|
*
|
||||||
|
* Retrieves the deserialized query string arguments, if any.
|
||||||
|
*
|
||||||
|
* Note: the query params might not be in sync with the URI or server
|
||||||
|
* params. If you need to ensure you are only getting the original
|
||||||
|
* values, you may need to parse the query string from `getUri()->getQuery()`
|
||||||
|
* or from the `QUERY_STRING` server param.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getQueryParams();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified query string arguments.
|
||||||
|
*
|
||||||
|
* These values SHOULD remain immutable over the course of the incoming
|
||||||
|
* request. They MAY be injected during instantiation, such as from PHP's
|
||||||
|
* $_GET superglobal, or MAY be derived from some other value such as the
|
||||||
|
* URI. In cases where the arguments are parsed from the URI, the data
|
||||||
|
* MUST be compatible with what PHP's parse_str() would return for
|
||||||
|
* purposes of how duplicate query parameters are handled, and how nested
|
||||||
|
* sets are handled.
|
||||||
|
*
|
||||||
|
* Setting query string arguments MUST NOT change the URI stored by the
|
||||||
|
* request, nor the values in the server params.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* updated query string arguments.
|
||||||
|
*
|
||||||
|
* @param array $query Array of query string arguments, typically from
|
||||||
|
* $_GET.
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withQueryParams(array $query);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve normalized file upload data.
|
||||||
|
*
|
||||||
|
* This method returns upload metadata in a normalized tree, with each leaf
|
||||||
|
* an instance of Psr\Http\Message\UploadedFileInterface.
|
||||||
|
*
|
||||||
|
* These values MAY be prepared from $_FILES or the message body during
|
||||||
|
* instantiation, or MAY be injected via withUploadedFiles().
|
||||||
|
*
|
||||||
|
* @return array An array tree of UploadedFileInterface instances; an empty
|
||||||
|
* array MUST be returned if no data is present.
|
||||||
|
*/
|
||||||
|
public function getUploadedFiles();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new instance with the specified uploaded files.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* updated body parameters.
|
||||||
|
*
|
||||||
|
* @param array $uploadedFiles An array tree of UploadedFileInterface instances.
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException if an invalid structure is provided.
|
||||||
|
*/
|
||||||
|
public function withUploadedFiles(array $uploadedFiles);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve any parameters provided in the request body.
|
||||||
|
*
|
||||||
|
* If the request Content-Type is either application/x-www-form-urlencoded
|
||||||
|
* or multipart/form-data, and the request method is POST, this method MUST
|
||||||
|
* return the contents of $_POST.
|
||||||
|
*
|
||||||
|
* Otherwise, this method may return any results of deserializing
|
||||||
|
* the request body content; as parsing returns structured content, the
|
||||||
|
* potential types MUST be arrays or objects only. A null value indicates
|
||||||
|
* the absence of body content.
|
||||||
|
*
|
||||||
|
* @return null|array|object The deserialized body parameters, if any.
|
||||||
|
* These will typically be an array or object.
|
||||||
|
*/
|
||||||
|
public function getParsedBody();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified body parameters.
|
||||||
|
*
|
||||||
|
* These MAY be injected during instantiation.
|
||||||
|
*
|
||||||
|
* If the request Content-Type is either application/x-www-form-urlencoded
|
||||||
|
* or multipart/form-data, and the request method is POST, use this method
|
||||||
|
* ONLY to inject the contents of $_POST.
|
||||||
|
*
|
||||||
|
* The data IS NOT REQUIRED to come from $_POST, but MUST be the results of
|
||||||
|
* deserializing the request body content. Deserialization/parsing returns
|
||||||
|
* structured data, and, as such, this method ONLY accepts arrays or objects,
|
||||||
|
* or a null value if nothing was available to parse.
|
||||||
|
*
|
||||||
|
* As an example, if content negotiation determines that the request data
|
||||||
|
* is a JSON payload, this method could be used to create a request
|
||||||
|
* instance with the deserialized parameters.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* updated body parameters.
|
||||||
|
*
|
||||||
|
* @param null|array|object $data The deserialized body data. This will
|
||||||
|
* typically be in an array or object.
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException if an unsupported argument type is
|
||||||
|
* provided.
|
||||||
|
*/
|
||||||
|
public function withParsedBody($data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve attributes derived from the request.
|
||||||
|
*
|
||||||
|
* The request "attributes" may be used to allow injection of any
|
||||||
|
* parameters derived from the request: e.g., the results of path
|
||||||
|
* match operations; the results of decrypting cookies; the results of
|
||||||
|
* deserializing non-form-encoded message bodies; etc. Attributes
|
||||||
|
* will be application and request specific, and CAN be mutable.
|
||||||
|
*
|
||||||
|
* @return array Attributes derived from the request.
|
||||||
|
*/
|
||||||
|
public function getAttributes();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve a single derived request attribute.
|
||||||
|
*
|
||||||
|
* Retrieves a single derived request attribute as described in
|
||||||
|
* getAttributes(). If the attribute has not been previously set, returns
|
||||||
|
* the default value as provided.
|
||||||
|
*
|
||||||
|
* This method obviates the need for a hasAttribute() method, as it allows
|
||||||
|
* specifying a default value to return if the attribute is not found.
|
||||||
|
*
|
||||||
|
* @see getAttributes()
|
||||||
|
* @param string $name The attribute name.
|
||||||
|
* @param mixed $default Default value to return if the attribute does not exist.
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getAttribute(string $name, $default = null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified derived request attribute.
|
||||||
|
*
|
||||||
|
* This method allows setting a single derived request attribute as
|
||||||
|
* described in getAttributes().
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* updated attribute.
|
||||||
|
*
|
||||||
|
* @see getAttributes()
|
||||||
|
* @param string $name The attribute name.
|
||||||
|
* @param mixed $value The value of the attribute.
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withAttribute(string $name, $value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance that removes the specified derived request attribute.
|
||||||
|
*
|
||||||
|
* This method allows removing a single derived request attribute as
|
||||||
|
* described in getAttributes().
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that removes
|
||||||
|
* the attribute.
|
||||||
|
*
|
||||||
|
* @see getAttributes()
|
||||||
|
* @param string $name The attribute name.
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withoutAttribute(string $name);
|
||||||
|
}
|
160
vendor/psr/http-message/src/StreamInterface.php
vendored
Normal file
160
vendor/psr/http-message/src/StreamInterface.php
vendored
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes a data stream.
|
||||||
|
*
|
||||||
|
* Typically, an instance will wrap a PHP stream; this interface provides
|
||||||
|
* a wrapper around the most common operations, including serialization of
|
||||||
|
* the entire stream to a string.
|
||||||
|
*/
|
||||||
|
interface StreamInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Reads all data from the stream into a string, from the beginning to end.
|
||||||
|
*
|
||||||
|
* This method MUST attempt to seek to the beginning of the stream before
|
||||||
|
* reading data and read the stream until the end is reached.
|
||||||
|
*
|
||||||
|
* Warning: This could attempt to load a large amount of data into memory.
|
||||||
|
*
|
||||||
|
* This method MUST NOT raise an exception in order to conform with PHP's
|
||||||
|
* string casting operations.
|
||||||
|
*
|
||||||
|
* @see http://php.net/manual/en/language.oop5.magic.php#object.tostring
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function __toString();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the stream and any underlying resources.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function close();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Separates any underlying resources from the stream.
|
||||||
|
*
|
||||||
|
* After the stream has been detached, the stream is in an unusable state.
|
||||||
|
*
|
||||||
|
* @return resource|null Underlying PHP stream, if any
|
||||||
|
*/
|
||||||
|
public function detach();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the size of the stream if known.
|
||||||
|
*
|
||||||
|
* @return int|null Returns the size in bytes if known, or null if unknown.
|
||||||
|
*/
|
||||||
|
public function getSize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current position of the file read/write pointer
|
||||||
|
*
|
||||||
|
* @return int Position of the file pointer
|
||||||
|
* @throws \RuntimeException on error.
|
||||||
|
*/
|
||||||
|
public function tell();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the stream is at the end of the stream.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function eof();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether or not the stream is seekable.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isSeekable();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Seek to a position in the stream.
|
||||||
|
*
|
||||||
|
* @link http://www.php.net/manual/en/function.fseek.php
|
||||||
|
* @param int $offset Stream offset
|
||||||
|
* @param int $whence Specifies how the cursor position will be calculated
|
||||||
|
* based on the seek offset. Valid values are identical to the built-in
|
||||||
|
* PHP $whence values for `fseek()`. SEEK_SET: Set position equal to
|
||||||
|
* offset bytes SEEK_CUR: Set position to current location plus offset
|
||||||
|
* SEEK_END: Set position to end-of-stream plus offset.
|
||||||
|
* @throws \RuntimeException on failure.
|
||||||
|
*/
|
||||||
|
public function seek(int $offset, int $whence = SEEK_SET);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Seek to the beginning of the stream.
|
||||||
|
*
|
||||||
|
* If the stream is not seekable, this method will raise an exception;
|
||||||
|
* otherwise, it will perform a seek(0).
|
||||||
|
*
|
||||||
|
* @see seek()
|
||||||
|
* @link http://www.php.net/manual/en/function.fseek.php
|
||||||
|
* @throws \RuntimeException on failure.
|
||||||
|
*/
|
||||||
|
public function rewind();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether or not the stream is writable.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isWritable();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write data to the stream.
|
||||||
|
*
|
||||||
|
* @param string $string The string that is to be written.
|
||||||
|
* @return int Returns the number of bytes written to the stream.
|
||||||
|
* @throws \RuntimeException on failure.
|
||||||
|
*/
|
||||||
|
public function write(string $string);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether or not the stream is readable.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isReadable();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read data from the stream.
|
||||||
|
*
|
||||||
|
* @param int $length Read up to $length bytes from the object and return
|
||||||
|
* them. Fewer than $length bytes may be returned if underlying stream
|
||||||
|
* call returns fewer bytes.
|
||||||
|
* @return string Returns the data read from the stream, or an empty string
|
||||||
|
* if no bytes are available.
|
||||||
|
* @throws \RuntimeException if an error occurs.
|
||||||
|
*/
|
||||||
|
public function read(int $length);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the remaining contents in a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws \RuntimeException if unable to read or an error occurs while
|
||||||
|
* reading.
|
||||||
|
*/
|
||||||
|
public function getContents();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get stream metadata as an associative array or retrieve a specific key.
|
||||||
|
*
|
||||||
|
* The keys returned are identical to the keys returned from PHP's
|
||||||
|
* stream_get_meta_data() function.
|
||||||
|
*
|
||||||
|
* @link http://php.net/manual/en/function.stream-get-meta-data.php
|
||||||
|
* @param string|null $key Specific metadata to retrieve.
|
||||||
|
* @return array|mixed|null Returns an associative array if no key is
|
||||||
|
* provided. Returns a specific key value if a key is provided and the
|
||||||
|
* value is found, or null if the key is not found.
|
||||||
|
*/
|
||||||
|
public function getMetadata(?string $key = null);
|
||||||
|
}
|
125
vendor/psr/http-message/src/UploadedFileInterface.php
vendored
Normal file
125
vendor/psr/http-message/src/UploadedFileInterface.php
vendored
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Value object representing a file uploaded through an HTTP request.
|
||||||
|
*
|
||||||
|
* Instances of this interface are considered immutable; all methods that
|
||||||
|
* might change state MUST be implemented such that they retain the internal
|
||||||
|
* state of the current instance and return an instance that contains the
|
||||||
|
* changed state.
|
||||||
|
*/
|
||||||
|
interface UploadedFileInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Retrieve a stream representing the uploaded file.
|
||||||
|
*
|
||||||
|
* This method MUST return a StreamInterface instance, representing the
|
||||||
|
* uploaded file. The purpose of this method is to allow utilizing native PHP
|
||||||
|
* stream functionality to manipulate the file upload, such as
|
||||||
|
* stream_copy_to_stream() (though the result will need to be decorated in a
|
||||||
|
* native PHP stream wrapper to work with such functions).
|
||||||
|
*
|
||||||
|
* If the moveTo() method has been called previously, this method MUST raise
|
||||||
|
* an exception.
|
||||||
|
*
|
||||||
|
* @return StreamInterface Stream representation of the uploaded file.
|
||||||
|
* @throws \RuntimeException in cases when no stream is available or can be
|
||||||
|
* created.
|
||||||
|
*/
|
||||||
|
public function getStream();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move the uploaded file to a new location.
|
||||||
|
*
|
||||||
|
* Use this method as an alternative to move_uploaded_file(). This method is
|
||||||
|
* guaranteed to work in both SAPI and non-SAPI environments.
|
||||||
|
* Implementations must determine which environment they are in, and use the
|
||||||
|
* appropriate method (move_uploaded_file(), rename(), or a stream
|
||||||
|
* operation) to perform the operation.
|
||||||
|
*
|
||||||
|
* $targetPath may be an absolute path, or a relative path. If it is a
|
||||||
|
* relative path, resolution should be the same as used by PHP's rename()
|
||||||
|
* function.
|
||||||
|
*
|
||||||
|
* The original file or stream MUST be removed on completion.
|
||||||
|
*
|
||||||
|
* If this method is called more than once, any subsequent calls MUST raise
|
||||||
|
* an exception.
|
||||||
|
*
|
||||||
|
* When used in an SAPI environment where $_FILES is populated, when writing
|
||||||
|
* files via moveTo(), is_uploaded_file() and move_uploaded_file() SHOULD be
|
||||||
|
* used to ensure permissions and upload status are verified correctly.
|
||||||
|
*
|
||||||
|
* If you wish to move to a stream, use getStream(), as SAPI operations
|
||||||
|
* cannot guarantee writing to stream destinations.
|
||||||
|
*
|
||||||
|
* @see http://php.net/is_uploaded_file
|
||||||
|
* @see http://php.net/move_uploaded_file
|
||||||
|
* @param string $targetPath Path to which to move the uploaded file.
|
||||||
|
* @throws \InvalidArgumentException if the $targetPath specified is invalid.
|
||||||
|
* @throws \RuntimeException on any error during the move operation, or on
|
||||||
|
* the second or subsequent call to the method.
|
||||||
|
*/
|
||||||
|
public function moveTo(string $targetPath);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the file size.
|
||||||
|
*
|
||||||
|
* Implementations SHOULD return the value stored in the "size" key of
|
||||||
|
* the file in the $_FILES array if available, as PHP calculates this based
|
||||||
|
* on the actual size transmitted.
|
||||||
|
*
|
||||||
|
* @return int|null The file size in bytes or null if unknown.
|
||||||
|
*/
|
||||||
|
public function getSize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the error associated with the uploaded file.
|
||||||
|
*
|
||||||
|
* The return value MUST be one of PHP's UPLOAD_ERR_XXX constants.
|
||||||
|
*
|
||||||
|
* If the file was uploaded successfully, this method MUST return
|
||||||
|
* UPLOAD_ERR_OK.
|
||||||
|
*
|
||||||
|
* Implementations SHOULD return the value stored in the "error" key of
|
||||||
|
* the file in the $_FILES array.
|
||||||
|
*
|
||||||
|
* @see http://php.net/manual/en/features.file-upload.errors.php
|
||||||
|
* @return int One of PHP's UPLOAD_ERR_XXX constants.
|
||||||
|
*/
|
||||||
|
public function getError();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the filename sent by the client.
|
||||||
|
*
|
||||||
|
* Do not trust the value returned by this method. A client could send
|
||||||
|
* a malicious filename with the intention to corrupt or hack your
|
||||||
|
* application.
|
||||||
|
*
|
||||||
|
* Implementations SHOULD return the value stored in the "name" key of
|
||||||
|
* the file in the $_FILES array.
|
||||||
|
*
|
||||||
|
* @return string|null The filename sent by the client or null if none
|
||||||
|
* was provided.
|
||||||
|
*/
|
||||||
|
public function getClientFilename();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the media type sent by the client.
|
||||||
|
*
|
||||||
|
* Do not trust the value returned by this method. A client could send
|
||||||
|
* a malicious media type with the intention to corrupt or hack your
|
||||||
|
* application.
|
||||||
|
*
|
||||||
|
* Implementations SHOULD return the value stored in the "type" key of
|
||||||
|
* the file in the $_FILES array.
|
||||||
|
*
|
||||||
|
* @return string|null The media type sent by the client or null if none
|
||||||
|
* was provided.
|
||||||
|
*/
|
||||||
|
public function getClientMediaType();
|
||||||
|
}
|
326
vendor/psr/http-message/src/UriInterface.php
vendored
Normal file
326
vendor/psr/http-message/src/UriInterface.php
vendored
Normal file
@ -0,0 +1,326 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Value object representing a URI.
|
||||||
|
*
|
||||||
|
* This interface is meant to represent URIs according to RFC 3986 and to
|
||||||
|
* provide methods for most common operations. Additional functionality for
|
||||||
|
* working with URIs can be provided on top of the interface or externally.
|
||||||
|
* Its primary use is for HTTP requests, but may also be used in other
|
||||||
|
* contexts.
|
||||||
|
*
|
||||||
|
* Instances of this interface are considered immutable; all methods that
|
||||||
|
* might change state MUST be implemented such that they retain the internal
|
||||||
|
* state of the current instance and return an instance that contains the
|
||||||
|
* changed state.
|
||||||
|
*
|
||||||
|
* Typically the Host header will be also be present in the request message.
|
||||||
|
* For server-side requests, the scheme will typically be discoverable in the
|
||||||
|
* server parameters.
|
||||||
|
*
|
||||||
|
* @link http://tools.ietf.org/html/rfc3986 (the URI specification)
|
||||||
|
*/
|
||||||
|
interface UriInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Retrieve the scheme component of the URI.
|
||||||
|
*
|
||||||
|
* If no scheme is present, this method MUST return an empty string.
|
||||||
|
*
|
||||||
|
* The value returned MUST be normalized to lowercase, per RFC 3986
|
||||||
|
* Section 3.1.
|
||||||
|
*
|
||||||
|
* The trailing ":" character is not part of the scheme and MUST NOT be
|
||||||
|
* added.
|
||||||
|
*
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-3.1
|
||||||
|
* @return string The URI scheme.
|
||||||
|
*/
|
||||||
|
public function getScheme();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the authority component of the URI.
|
||||||
|
*
|
||||||
|
* If no authority information is present, this method MUST return an empty
|
||||||
|
* string.
|
||||||
|
*
|
||||||
|
* The authority syntax of the URI is:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* [user-info@]host[:port]
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* If the port component is not set or is the standard port for the current
|
||||||
|
* scheme, it SHOULD NOT be included.
|
||||||
|
*
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-3.2
|
||||||
|
* @return string The URI authority, in "[user-info@]host[:port]" format.
|
||||||
|
*/
|
||||||
|
public function getAuthority();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the user information component of the URI.
|
||||||
|
*
|
||||||
|
* If no user information is present, this method MUST return an empty
|
||||||
|
* string.
|
||||||
|
*
|
||||||
|
* If a user is present in the URI, this will return that value;
|
||||||
|
* additionally, if the password is also present, it will be appended to the
|
||||||
|
* user value, with a colon (":") separating the values.
|
||||||
|
*
|
||||||
|
* The trailing "@" character is not part of the user information and MUST
|
||||||
|
* NOT be added.
|
||||||
|
*
|
||||||
|
* @return string The URI user information, in "username[:password]" format.
|
||||||
|
*/
|
||||||
|
public function getUserInfo();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the host component of the URI.
|
||||||
|
*
|
||||||
|
* If no host is present, this method MUST return an empty string.
|
||||||
|
*
|
||||||
|
* The value returned MUST be normalized to lowercase, per RFC 3986
|
||||||
|
* Section 3.2.2.
|
||||||
|
*
|
||||||
|
* @see http://tools.ietf.org/html/rfc3986#section-3.2.2
|
||||||
|
* @return string The URI host.
|
||||||
|
*/
|
||||||
|
public function getHost();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the port component of the URI.
|
||||||
|
*
|
||||||
|
* If a port is present, and it is non-standard for the current scheme,
|
||||||
|
* this method MUST return it as an integer. If the port is the standard port
|
||||||
|
* used with the current scheme, this method SHOULD return null.
|
||||||
|
*
|
||||||
|
* If no port is present, and no scheme is present, this method MUST return
|
||||||
|
* a null value.
|
||||||
|
*
|
||||||
|
* If no port is present, but a scheme is present, this method MAY return
|
||||||
|
* the standard port for that scheme, but SHOULD return null.
|
||||||
|
*
|
||||||
|
* @return null|int The URI port.
|
||||||
|
*/
|
||||||
|
public function getPort();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the path component of the URI.
|
||||||
|
*
|
||||||
|
* The path can either be empty or absolute (starting with a slash) or
|
||||||
|
* rootless (not starting with a slash). Implementations MUST support all
|
||||||
|
* three syntaxes.
|
||||||
|
*
|
||||||
|
* Normally, the empty path "" and absolute path "/" are considered equal as
|
||||||
|
* defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically
|
||||||
|
* do this normalization because in contexts with a trimmed base path, e.g.
|
||||||
|
* the front controller, this difference becomes significant. It's the task
|
||||||
|
* of the user to handle both "" and "/".
|
||||||
|
*
|
||||||
|
* The value returned MUST be percent-encoded, but MUST NOT double-encode
|
||||||
|
* any characters. To determine what characters to encode, please refer to
|
||||||
|
* RFC 3986, Sections 2 and 3.3.
|
||||||
|
*
|
||||||
|
* As an example, if the value should include a slash ("/") not intended as
|
||||||
|
* delimiter between path segments, that value MUST be passed in encoded
|
||||||
|
* form (e.g., "%2F") to the instance.
|
||||||
|
*
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-2
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-3.3
|
||||||
|
* @return string The URI path.
|
||||||
|
*/
|
||||||
|
public function getPath();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the query string of the URI.
|
||||||
|
*
|
||||||
|
* If no query string is present, this method MUST return an empty string.
|
||||||
|
*
|
||||||
|
* The leading "?" character is not part of the query and MUST NOT be
|
||||||
|
* added.
|
||||||
|
*
|
||||||
|
* The value returned MUST be percent-encoded, but MUST NOT double-encode
|
||||||
|
* any characters. To determine what characters to encode, please refer to
|
||||||
|
* RFC 3986, Sections 2 and 3.4.
|
||||||
|
*
|
||||||
|
* As an example, if a value in a key/value pair of the query string should
|
||||||
|
* include an ampersand ("&") not intended as a delimiter between values,
|
||||||
|
* that value MUST be passed in encoded form (e.g., "%26") to the instance.
|
||||||
|
*
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-2
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-3.4
|
||||||
|
* @return string The URI query string.
|
||||||
|
*/
|
||||||
|
public function getQuery();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the fragment component of the URI.
|
||||||
|
*
|
||||||
|
* If no fragment is present, this method MUST return an empty string.
|
||||||
|
*
|
||||||
|
* The leading "#" character is not part of the fragment and MUST NOT be
|
||||||
|
* added.
|
||||||
|
*
|
||||||
|
* The value returned MUST be percent-encoded, but MUST NOT double-encode
|
||||||
|
* any characters. To determine what characters to encode, please refer to
|
||||||
|
* RFC 3986, Sections 2 and 3.5.
|
||||||
|
*
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-2
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-3.5
|
||||||
|
* @return string The URI fragment.
|
||||||
|
*/
|
||||||
|
public function getFragment();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified scheme.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified scheme.
|
||||||
|
*
|
||||||
|
* Implementations MUST support the schemes "http" and "https" case
|
||||||
|
* insensitively, and MAY accommodate other schemes if required.
|
||||||
|
*
|
||||||
|
* An empty scheme is equivalent to removing the scheme.
|
||||||
|
*
|
||||||
|
* @param string $scheme The scheme to use with the new instance.
|
||||||
|
* @return static A new instance with the specified scheme.
|
||||||
|
* @throws \InvalidArgumentException for invalid or unsupported schemes.
|
||||||
|
*/
|
||||||
|
public function withScheme(string $scheme);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified user information.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified user information.
|
||||||
|
*
|
||||||
|
* Password is optional, but the user information MUST include the
|
||||||
|
* user; an empty string for the user is equivalent to removing user
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* @param string $user The user name to use for authority.
|
||||||
|
* @param null|string $password The password associated with $user.
|
||||||
|
* @return static A new instance with the specified user information.
|
||||||
|
*/
|
||||||
|
public function withUserInfo(string $user, ?string $password = null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified host.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified host.
|
||||||
|
*
|
||||||
|
* An empty host value is equivalent to removing the host.
|
||||||
|
*
|
||||||
|
* @param string $host The hostname to use with the new instance.
|
||||||
|
* @return static A new instance with the specified host.
|
||||||
|
* @throws \InvalidArgumentException for invalid hostnames.
|
||||||
|
*/
|
||||||
|
public function withHost(string $host);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified port.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified port.
|
||||||
|
*
|
||||||
|
* Implementations MUST raise an exception for ports outside the
|
||||||
|
* established TCP and UDP port ranges.
|
||||||
|
*
|
||||||
|
* A null value provided for the port is equivalent to removing the port
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* @param null|int $port The port to use with the new instance; a null value
|
||||||
|
* removes the port information.
|
||||||
|
* @return static A new instance with the specified port.
|
||||||
|
* @throws \InvalidArgumentException for invalid ports.
|
||||||
|
*/
|
||||||
|
public function withPort(?int $port);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified path.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified path.
|
||||||
|
*
|
||||||
|
* The path can either be empty or absolute (starting with a slash) or
|
||||||
|
* rootless (not starting with a slash). Implementations MUST support all
|
||||||
|
* three syntaxes.
|
||||||
|
*
|
||||||
|
* If the path is intended to be domain-relative rather than path relative then
|
||||||
|
* it must begin with a slash ("/"). Paths not starting with a slash ("/")
|
||||||
|
* are assumed to be relative to some base path known to the application or
|
||||||
|
* consumer.
|
||||||
|
*
|
||||||
|
* Users can provide both encoded and decoded path characters.
|
||||||
|
* Implementations ensure the correct encoding as outlined in getPath().
|
||||||
|
*
|
||||||
|
* @param string $path The path to use with the new instance.
|
||||||
|
* @return static A new instance with the specified path.
|
||||||
|
* @throws \InvalidArgumentException for invalid paths.
|
||||||
|
*/
|
||||||
|
public function withPath(string $path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified query string.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified query string.
|
||||||
|
*
|
||||||
|
* Users can provide both encoded and decoded query characters.
|
||||||
|
* Implementations ensure the correct encoding as outlined in getQuery().
|
||||||
|
*
|
||||||
|
* An empty query string value is equivalent to removing the query string.
|
||||||
|
*
|
||||||
|
* @param string $query The query string to use with the new instance.
|
||||||
|
* @return static A new instance with the specified query string.
|
||||||
|
* @throws \InvalidArgumentException for invalid query strings.
|
||||||
|
*/
|
||||||
|
public function withQuery(string $query);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified URI fragment.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified URI fragment.
|
||||||
|
*
|
||||||
|
* Users can provide both encoded and decoded fragment characters.
|
||||||
|
* Implementations ensure the correct encoding as outlined in getFragment().
|
||||||
|
*
|
||||||
|
* An empty fragment value is equivalent to removing the fragment.
|
||||||
|
*
|
||||||
|
* @param string $fragment The fragment to use with the new instance.
|
||||||
|
* @return static A new instance with the specified fragment.
|
||||||
|
*/
|
||||||
|
public function withFragment(string $fragment);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the string representation as a URI reference.
|
||||||
|
*
|
||||||
|
* Depending on which components of the URI are present, the resulting
|
||||||
|
* string is either a full URI or relative reference according to RFC 3986,
|
||||||
|
* Section 4.1. The method concatenates the various components of the URI,
|
||||||
|
* using the appropriate delimiters:
|
||||||
|
*
|
||||||
|
* - If a scheme is present, it MUST be suffixed by ":".
|
||||||
|
* - If an authority is present, it MUST be prefixed by "//".
|
||||||
|
* - The path can be concatenated without delimiters. But there are two
|
||||||
|
* cases where the path has to be adjusted to make the URI reference
|
||||||
|
* valid as PHP does not allow to throw an exception in __toString():
|
||||||
|
* - If the path is rootless and an authority is present, the path MUST
|
||||||
|
* be prefixed by "/".
|
||||||
|
* - If the path is starting with more than one "/" and no authority is
|
||||||
|
* present, the starting slashes MUST be reduced to one.
|
||||||
|
* - If a query is present, it MUST be prefixed by "?".
|
||||||
|
* - If a fragment is present, it MUST be prefixed by "#".
|
||||||
|
*
|
||||||
|
* @see http://tools.ietf.org/html/rfc3986#section-4.1
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function __toString();
|
||||||
|
}
|
19
vendor/psr/log/LICENSE
vendored
Normal file
19
vendor/psr/log/LICENSE
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2012 PHP Framework Interoperability Group
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
58
vendor/psr/log/README.md
vendored
Normal file
58
vendor/psr/log/README.md
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
PSR Log
|
||||||
|
=======
|
||||||
|
|
||||||
|
This repository holds all interfaces/classes/traits related to
|
||||||
|
[PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md).
|
||||||
|
|
||||||
|
Note that this is not a logger of its own. It is merely an interface that
|
||||||
|
describes a logger. See the specification for more details.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer require psr/log
|
||||||
|
```
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
If you need a logger, you can use the interface like this:
|
||||||
|
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
|
class Foo
|
||||||
|
{
|
||||||
|
private $logger;
|
||||||
|
|
||||||
|
public function __construct(LoggerInterface $logger = null)
|
||||||
|
{
|
||||||
|
$this->logger = $logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function doSomething()
|
||||||
|
{
|
||||||
|
if ($this->logger) {
|
||||||
|
$this->logger->info('Doing work');
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$this->doSomethingElse();
|
||||||
|
} catch (Exception $exception) {
|
||||||
|
$this->logger->error('Oh no!', array('exception' => $exception));
|
||||||
|
}
|
||||||
|
|
||||||
|
// do something useful
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can then pick one of the implementations of the interface to get a logger.
|
||||||
|
|
||||||
|
If you want to implement the interface, you can require this package and
|
||||||
|
implement `Psr\Log\LoggerInterface` in your code. Please read the
|
||||||
|
[specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md)
|
||||||
|
for details.
|
26
vendor/psr/log/composer.json
vendored
Normal file
26
vendor/psr/log/composer.json
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"name": "psr/log",
|
||||||
|
"description": "Common interface for logging libraries",
|
||||||
|
"keywords": ["psr", "psr-3", "log"],
|
||||||
|
"homepage": "https://github.com/php-fig/log",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=8.0.0"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Log\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.x-dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
vendor/psr/log/src/AbstractLogger.php
vendored
Normal file
15
vendor/psr/log/src/AbstractLogger.php
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a simple Logger implementation that other Loggers can inherit from.
|
||||||
|
*
|
||||||
|
* It simply delegates all log-level-specific methods to the `log` method to
|
||||||
|
* reduce boilerplate code that a simple Logger that does the same thing with
|
||||||
|
* messages regardless of the error level has to implement.
|
||||||
|
*/
|
||||||
|
abstract class AbstractLogger implements LoggerInterface
|
||||||
|
{
|
||||||
|
use LoggerTrait;
|
||||||
|
}
|
7
vendor/psr/log/src/InvalidArgumentException.php
vendored
Normal file
7
vendor/psr/log/src/InvalidArgumentException.php
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log;
|
||||||
|
|
||||||
|
class InvalidArgumentException extends \InvalidArgumentException
|
||||||
|
{
|
||||||
|
}
|
18
vendor/psr/log/src/LogLevel.php
vendored
Normal file
18
vendor/psr/log/src/LogLevel.php
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes log levels.
|
||||||
|
*/
|
||||||
|
class LogLevel
|
||||||
|
{
|
||||||
|
const EMERGENCY = 'emergency';
|
||||||
|
const ALERT = 'alert';
|
||||||
|
const CRITICAL = 'critical';
|
||||||
|
const ERROR = 'error';
|
||||||
|
const WARNING = 'warning';
|
||||||
|
const NOTICE = 'notice';
|
||||||
|
const INFO = 'info';
|
||||||
|
const DEBUG = 'debug';
|
||||||
|
}
|
18
vendor/psr/log/src/LoggerAwareInterface.php
vendored
Normal file
18
vendor/psr/log/src/LoggerAwareInterface.php
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes a logger-aware instance.
|
||||||
|
*/
|
||||||
|
interface LoggerAwareInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Sets a logger instance on the object.
|
||||||
|
*
|
||||||
|
* @param LoggerInterface $logger
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function setLogger(LoggerInterface $logger): void;
|
||||||
|
}
|
26
vendor/psr/log/src/LoggerAwareTrait.php
vendored
Normal file
26
vendor/psr/log/src/LoggerAwareTrait.php
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic Implementation of LoggerAwareInterface.
|
||||||
|
*/
|
||||||
|
trait LoggerAwareTrait
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The logger instance.
|
||||||
|
*
|
||||||
|
* @var LoggerInterface|null
|
||||||
|
*/
|
||||||
|
protected ?LoggerInterface $logger = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a logger.
|
||||||
|
*
|
||||||
|
* @param LoggerInterface $logger
|
||||||
|
*/
|
||||||
|
public function setLogger(LoggerInterface $logger): void
|
||||||
|
{
|
||||||
|
$this->logger = $logger;
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user