diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 7e2563a8..c18c43cc 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -2,8 +2,8 @@ namespace App\Exceptions; -use Exception; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; +use Throwable; class Handler extends ExceptionHandler { @@ -22,32 +22,20 @@ class Handler extends ExceptionHandler * @var array */ protected $dontFlash = [ + 'current_password', 'password', 'password_confirmation', ]; /** - * Report or log an exception. + * Register the exception handling callbacks for the application. * - * This is a great spot to send exceptions to Sentry, Bugsnag, etc. - * - * @param \Exception $exception * @return void */ - public function report(Exception $exception) + public function register() { - parent::report($exception); - } - - /** - * Render an exception into an HTTP response. - * - * @param \Illuminate\Http\Request $request - * @param \Exception $exception - * @return \Illuminate\Http\Response - */ - public function render($request, Exception $exception) - { - return parent::render($request, $exception); + $this->reportable(function (Throwable $e) { + // + }); } } diff --git a/app/Helper.php b/app/Helper.php index 86cf5e8a..aaa16ac3 100644 --- a/app/Helper.php +++ b/app/Helper.php @@ -1,5 +1,7 @@ user(); if (!is_null($setting)) { - $data = Setting::getInput(); + $data = Setting::getInput($request); $setting_value = null; diff --git a/app/Setting.php b/app/Setting.php index e1f8bf40..cb613522 100644 --- a/app/Setting.php +++ b/app/Setting.php @@ -8,6 +8,7 @@ use Form; use Illuminate\Support\Facades\Auth; use App\User; use App\Search; +use Illuminate\Http\Request; class Setting extends Model { @@ -39,11 +40,11 @@ class Setting extends Model /** * @return array */ - public static function getInput() + public static function getInput(Request $request) { return (object) [ - 'value' => Input::get('value'), - 'image' => Input::file('value'), + 'value' => $request->input('value'), + 'image' => $request->file('value'), ]; } diff --git a/composer.json b/composer.json index c3357a22..a5d91983 100644 --- a/composer.json +++ b/composer.json @@ -7,12 +7,12 @@ "require": { "php": ">=7.1.3", "fideloper/proxy": "^4.0", - "graham-campbell/github": "^7.5", - "guzzlehttp/guzzle": "^6.3", - "laravel/framework": "5.7.*", - "laravel/tinker": "~1.0", - "laravelcollective/html": "^5.5", - "php-http/guzzle6-adapter": "^1.1" + "graham-campbell/github": "^10.5", + "guzzlehttp/guzzle": "^7.4", + "laravel/framework": "^7.0", + "laravel/tinker": "^2.0", + "laravel/ui": "^2.4", + "laravelcollective/html": "^6.0" }, "require-dev": { "filp/whoops": "~2.0", @@ -59,6 +59,10 @@ "config": { "preferred-install": "dist", "sort-packages": true, - "optimize-autoloader": true + "optimize-autoloader": true, + "allow-plugins": { + "kylekatarnls/update-helper": true, + "symfony/thanks": true + } } } diff --git a/composer.lock b/composer.lock index a5141f9d..9cf5f08f 100644 --- a/composer.lock +++ b/composer.lock @@ -1,39 +1,99 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "375f1aa6db349f949ad13cdbe9ddb275", + "content-hash": "7c2e9180811d1213f10aedcef74bf8dd", "packages": [ { - "name": "clue/stream-filter", - "version": "v1.4.1", + "name": "brick/math", + "version": "0.9.3", "source": { "type": "git", - "url": "https://github.com/clue/php-stream-filter.git", - "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71" + "url": "https://github.com/brick/math.git", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", - "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", + "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "vimeo/psalm": "4.9.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.9.3" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/brick/math", + "type": "tidelift" + } + ], + "time": "2021-08-15T20:50:18+00:00" + }, + { + "name": "clue/stream-filter", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/clue/stream-filter.git", + "reference": "d6169430c7731d8509da7aecd0af756a5747b78e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/stream-filter/zipball/d6169430c7731d8509da7aecd0af756a5747b78e", + "reference": "d6169430c7731d8509da7aecd0af756a5747b78e", "shasum": "" }, "require": { "php": ">=5.3" }, "require-dev": { - "phpunit/phpunit": "^5.0 || ^4.8" + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" }, "type": "library", "autoload": { - "psr-4": { - "Clue\\StreamFilter\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "Clue\\StreamFilter\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -42,7 +102,7 @@ "authors": [ { "name": "Christian Lück", - "email": "christian@lueck.tv" + "email": "christian@clue.engineering" } ], "description": "A simple and modern approach to stream filtering in PHP", @@ -56,70 +116,51 @@ "stream_filter_append", "stream_filter_register" ], - "time": "2019-04-09T12:31:48+00:00" - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "0.1", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" + "support": { + "issues": "https://github.com/clue/stream-filter/issues", + "source": "https://github.com/clue/stream-filter/tree/v1.6.0" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "@stable" - }, - "type": "project", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" ], - "description": "implementation of xdg base directory specification for php", - "time": "2014-10-24T07:27:01+00:00" + "time": "2022-02-21T13:15:14+00:00" }, { "name": "doctrine/inflector", - "version": "v1.3.0", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a" + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "doctrine/coding-standard": "^8.2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "vimeo/psalm": "^4.10" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -127,6 +168,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -135,10 +180,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -148,42 +189,64 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", "keywords": [ "inflection", - "pluralize", - "singularize", - "string" + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" ], - "time": "2018-01-09T20:05:19+00:00" + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:16:43+00:00" }, { "name": "doctrine/lexer", - "version": "1.0.2", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.5" + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" @@ -194,14 +257,14 @@ "MIT" ], "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, { "name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com" }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, { "name": "Johannes Schmitt", "email": "schmittjoh@gmail.com" @@ -216,27 +279,45 @@ "parser", "php" ], - "time": "2019-06-08T11:03:04+00:00" + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v2.3.0", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" + "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", - "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/65b2d8ee1f10915efb3b55597da3404f096acba2", + "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.0|^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.4|^7.0" + "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0" }, "type": "library", "extra": { @@ -270,29 +351,40 @@ "cron", "schedule" ], - "time": "2019-03-31T00:38:28+00:00" + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2020-10-13T00:52:37+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.8", + "version": "2.1.25", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "c26463ff9241f27907112fbcd0c86fa670cfef98" + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/c26463ff9241f27907112fbcd0c86fa670cfef98", - "reference": "c26463ff9241f27907112fbcd0c86fa670cfef98", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", "shasum": "" }, "require": { "doctrine/lexer": "^1.0.1", - "php": ">= 5.5" + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" }, "require-dev": { - "dominicsayers/isemail": "dev-master", - "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", "satooshi/php-coveralls": "^1.0.1" }, "suggest": { @@ -301,12 +393,12 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" + "Egulias\\EmailValidator\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -327,75 +419,39 @@ "validation", "validator" ], - "time": "2019-05-16T22:02:54+00:00" - }, - { - "name": "erusev/parsedown", - "version": "1.7.3", - "source": { - "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7" + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7", - "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35" - }, - "type": "library", - "autoload": { - "psr-0": { - "Parsedown": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" + "url": "https://github.com/egulias", + "type": "github" } ], - "description": "Parser for Markdown.", - "homepage": "http://parsedown.org", - "keywords": [ - "markdown", - "parser" - ], - "time": "2019-03-17T18:48:37+00:00" + "time": "2020-12-29T14:50:06+00:00" }, { "name": "fideloper/proxy", - "version": "4.1.0", + "version": "4.4.1", "source": { "type": "git", "url": "https://github.com/fideloper/TrustedProxy.git", - "reference": "177c79a2d1f9970f89ee2fb4c12b429af38b6dfb" + "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/177c79a2d1f9970f89ee2fb4c12b429af38b6dfb", - "reference": "177c79a2d1f9970f89ee2fb4c12b429af38b6dfb", + "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/c073b2bd04d1c90e04dc1b787662b558dd65ade0", + "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0", "shasum": "" }, "require": { - "illuminate/contracts": "~5.0", + "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0", "php": ">=5.4.0" }, "require-dev": { - "illuminate/http": "~5.6", - "mockery/mockery": "~1.0", + "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0", + "mockery/mockery": "^1.0", "phpunit/phpunit": "^6.0" }, "type": "library", @@ -427,42 +483,40 @@ "proxy", "trusted proxy" ], - "time": "2019-01-10T14:06:47+00:00" + "support": { + "issues": "https://github.com/fideloper/TrustedProxy/issues", + "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.1" + }, + "time": "2020-10-22T13:48:01+00:00" }, { - "name": "graham-campbell/cache-plugin", - "version": "v1.1.0", + "name": "graham-campbell/bounded-cache", + "version": "v1.1.3", "source": { "type": "git", - "url": "https://github.com/GrahamCampbell/Cache-Plugin.git", - "reference": "7090dd5e4a07f5c9c8e8a4ff65c3c57dab536b78" + "url": "https://github.com/GrahamCampbell/Bounded-Cache.git", + "reference": "cbb12c2d7b2f93f4d8c2a1e46e16fb1e5842c92b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Cache-Plugin/zipball/7090dd5e4a07f5c9c8e8a4ff65c3c57dab536b78", - "reference": "7090dd5e4a07f5c9c8e8a4ff65c3c57dab536b78", + "url": "https://api.github.com/repos/GrahamCampbell/Bounded-Cache/zipball/cbb12c2d7b2f93f4d8c2a1e46e16fb1e5842c92b", + "reference": "cbb12c2d7b2f93f4d8c2a1e46e16fb1e5842c92b", "shasum": "" }, "require": { - "php": "^7.0", - "php-http/cache-plugin": "^1.6", - "php-http/client-common": "^1.9|^2.0", - "php-http/message-factory": "^1.0", - "psr/cache": "^1.0" + "php": "^7.2.5 || ^8.0", + "psr/simple-cache": "^1.0" }, "require-dev": { - "graham-campbell/analyzer": "^2.1", - "phpunit/phpunit": "^6.5|^7.0" + "graham-campbell/analyzer": "^3.0", + "graham-campbell/testbench-core": "^3.1", + "mockery/mockery": "^1.3.2", + "phpunit/phpunit": "^8.5.8 || ^9.3.7" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, "autoload": { "psr-4": { - "GrahamCampbell\\CachePlugin\\": "src/" + "GrahamCampbell\\BoundedCache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -472,58 +526,73 @@ "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], - "description": "Provides A Simple HTTP Cache Plugin With Good Defaults", + "description": "A Bounded TTL PSR-16 Cache Implementation", "keywords": [ - "Cache Plugin", - "Cache-Plugin", + "Bounded Cache", + "Bounded-Cache", "Graham Campbell", "GrahamCampbell", + "bounded", "cache", - "http" + "psr16" ], - "time": "2019-01-27T13:36:25+00:00" + "support": { + "issues": "https://github.com/GrahamCampbell/Bounded-Cache/issues", + "source": "https://github.com/GrahamCampbell/Bounded-Cache/tree/v1.1.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/bounded-cache", + "type": "tidelift" + } + ], + "time": "2021-11-21T20:48:45+00:00" }, { "name": "graham-campbell/github", - "version": "v7.7.0", + "version": "v10.5.0", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Laravel-GitHub.git", - "reference": "eb61a055a03a5151cbbeedb3b0a357c4eeb2640d" + "reference": "b88f6737bcc088a84ce3ec863a50afbc3ab8e867" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-GitHub/zipball/eb61a055a03a5151cbbeedb3b0a357c4eeb2640d", - "reference": "eb61a055a03a5151cbbeedb3b0a357c4eeb2640d", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-GitHub/zipball/b88f6737bcc088a84ce3ec863a50afbc3ab8e867", + "reference": "b88f6737bcc088a84ce3ec863a50afbc3ab8e867", "shasum": "" }, "require": { - "graham-campbell/cache-plugin": "^1.0", - "graham-campbell/manager": "^4.2", - "illuminate/contracts": "5.5.*|5.6.*|5.7.*|5.8.*", - "illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*", - "knplabs/github-api": "2.11.*", - "php": "^7.1.3" + "graham-campbell/bounded-cache": "^1.1", + "graham-campbell/manager": "^4.7", + "illuminate/contracts": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "illuminate/support": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "knplabs/github-api": "3.5.*", + "php": "^7.2.5 || ^8.0", + "symfony/cache": "^4.3 || ^5.0 || ^6.0" }, "require-dev": { - "graham-campbell/analyzer": "^2.1", - "graham-campbell/testbench": "^5.2", - "madewithlove/illuminate-psr-cache-bridge": "^1.0", - "mockery/mockery": "^1.0", - "php-http/guzzle6-adapter": "^1.0", - "phpunit/phpunit": "^6.5|^7.0|^8.0" + "graham-campbell/analyzer": "^3.0", + "graham-campbell/testbench": "^5.7", + "guzzlehttp/guzzle": "^7.4", + "http-interop/http-factory-guzzle": "^1.0", + "lcobucci/jwt": "^3.4 || ^4.0", + "mockery/mockery": "^1.3.1", + "phpunit/phpunit": "^8.5.8 || ^9.3.7" }, "suggest": { - "madewithlove/illuminate-psr-cache-bridge": "Allows caching GitHub HTTP requests" + "lcobucci/jwt": "Allows using the private key authenticator (^3.4 || ^4.0)" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "7.7-dev" - }, "laravel": { "providers": [ "GrahamCampbell\\GitHub\\GitHubServiceProvider" @@ -542,10 +611,11 @@ "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], - "description": "GitHub Is A GitHub Bridge For Laravel 5", + "description": "GitHub Is A GitHub Bridge For Laravel", "keywords": [ "Bridge", "Graham Campbell", @@ -559,39 +629,48 @@ "laravel", "php-github-api" ], - "time": "2019-04-07T11:08:44+00:00" + "support": { + "issues": "https://github.com/GrahamCampbell/Laravel-GitHub/issues", + "source": "https://github.com/GrahamCampbell/Laravel-GitHub/tree/v10.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/github", + "type": "tidelift" + } + ], + "time": "2022-01-24T03:22:38+00:00" }, { "name": "graham-campbell/manager", - "version": "v4.2.1", + "version": "v4.7.0", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Laravel-Manager.git", - "reference": "ba3e236392665425723b2b967196aeeabc7f929f" + "reference": "b4cafa6491b9c92ecf7ce17521580050a27b8308" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Manager/zipball/ba3e236392665425723b2b967196aeeabc7f929f", - "reference": "ba3e236392665425723b2b967196aeeabc7f929f", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Manager/zipball/b4cafa6491b9c92ecf7ce17521580050a27b8308", + "reference": "b4cafa6491b9c92ecf7ce17521580050a27b8308", "shasum": "" }, "require": { - "illuminate/contracts": "5.5.*|5.6.*|5.7.*|5.8.*", - "illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*", - "php": "^7.1.3" + "illuminate/contracts": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0", + "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0", + "php": "^7.1.3 || ^8.0" }, "require-dev": { - "graham-campbell/analyzer": "^2.1", - "graham-campbell/testbench-core": "^3.0", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.5|^7.0|^8.0" + "graham-campbell/analyzer": "^2.4 || ^3.0", + "graham-campbell/testbench-core": "^3.4", + "mockery/mockery": "^1.3.1", + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.7" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, "autoload": { "psr-4": { "GrahamCampbell\\Manager\\": "src/" @@ -604,10 +683,11 @@ "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], - "description": "Manager Provides Some Manager Functionality For Laravel 5", + "description": "Manager Provides Some Manager Functionality For Laravel", "keywords": [ "Graham Campbell", "GrahamCampbell", @@ -619,39 +699,63 @@ "laravel", "manager" ], - "time": "2019-02-16T14:23:38+00:00" + "support": { + "issues": "https://github.com/GrahamCampbell/Laravel-Manager/issues", + "source": "https://github.com/GrahamCampbell/Laravel-Manager/tree/v4.7.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/manager", + "type": "tidelift" + } + ], + "time": "2022-01-24T01:59:19+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "6.3.3", + "version": "7.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79", "shasum": "" }, "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.3-dev" + "dev-master": "7.4-dev" } }, "autoload": { @@ -667,100 +771,93 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", "keywords": [ "client", "curl", "framework", "http", "http client", + "psr-18", + "psr-7", "rest", "web service" ], - "time": "2018-04-22T15:46:56+00:00" + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.4.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2021-12-06T18:43:05+00:00" }, { "name": "guzzlehttp/promises", - "version": "v1.3.1", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", "shasum": "" }, "require": { - "php": ">=5.5.0" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.5.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "9f83dded91781a01c63574e387eaa769be769115" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", - "reference": "9f83dded91781a01c63574e387eaa769be769115", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", "extra": { @@ -769,28 +866,147 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, { "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", "homepage": "https://github.com/Tobion" } ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:56:57+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ "http", @@ -802,131 +1018,72 @@ "uri", "url" ], - "time": "2018-12-04T20:46:45+00:00" - }, - { - "name": "jakub-onderka/php-console-color", - "version": "v0.2", - "source": { - "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", - "reference": "d5deaecff52a0d61ccb613bb3804088da0307191" + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.1.0" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191", - "reference": "d5deaecff52a0d61ccb613bb3804088da0307191", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "jakub-onderka/php-code-style": "1.0", - "jakub-onderka/php-parallel-lint": "1.0", - "jakub-onderka/php-var-dump-check": "0.*", - "phpunit/phpunit": "~4.3", - "squizlabs/php_codesniffer": "1.*" - }, - "type": "library", - "autoload": { - "psr-4": { - "JakubOnderka\\PhpConsoleColor\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ + "funding": [ { - "name": "Jakub Onderka", - "email": "jakub.onderka@gmail.com" - } - ], - "time": "2018-09-29T17:23:10+00:00" - }, - { - "name": "jakub-onderka/php-console-highlighter", - "version": "v0.4", - "source": { - "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", - "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547", - "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "jakub-onderka/php-console-color": "~0.2", - "php": ">=5.4.0" - }, - "require-dev": { - "jakub-onderka/php-code-style": "~1.0", - "jakub-onderka/php-parallel-lint": "~1.0", - "jakub-onderka/php-var-dump-check": "~0.1", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "JakubOnderka\\PhpConsoleHighlighter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, { - "name": "Jakub Onderka", - "email": "acci@acci.cz", - "homepage": "http://www.acci.cz/" + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" } ], - "description": "Highlight PHP code in terminal", - "time": "2018-09-29T18:48:56+00:00" + "time": "2021-10-06T17:43:30+00:00" }, { "name": "knplabs/github-api", - "version": "2.11.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/KnpLabs/php-github-api.git", - "reference": "7e67b4ccf9ef62fbd6321a314c61d3202c07b855" + "reference": "37b167998e8e1f318b3d99633675cfa007540565" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/7e67b4ccf9ef62fbd6321a314c61d3202c07b855", - "reference": "7e67b4ccf9ef62fbd6321a314c61d3202c07b855", + "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/37b167998e8e1f318b3d99633675cfa007540565", + "reference": "37b167998e8e1f318b3d99633675cfa007540565", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", - "php-http/cache-plugin": "^1.4", - "php-http/client-common": "^1.6", - "php-http/client-implementation": "^1.0", - "php-http/discovery": "^1.0", - "php-http/httplug": "^1.1", - "psr/cache": "^1.0", - "psr/http-message": "^1.0" + "ext-json": "*", + "php": "^7.2.5 || ^8.0", + "php-http/cache-plugin": "^1.7.1", + "php-http/client-common": "^2.3", + "php-http/discovery": "^1.12", + "php-http/httplug": "^2.2", + "php-http/multipart-stream-builder": "^1.1.2", + "psr/cache": "^1.0|^2.0|^3.0", + "psr/http-client-implementation": "^1.0", + "psr/http-factory-implementation": "^1.0", + "psr/http-message": "^1.0", + "symfony/deprecation-contracts": "^2.2|^3.0", + "symfony/polyfill-php80": "^1.17" }, "require-dev": { - "cache/array-adapter": "^0.4", - "guzzlehttp/psr7": "^1.2", - "php-http/guzzle6-adapter": "^1.0", - "php-http/mock-client": "^1.0", - "phpunit/phpunit": "^5.5 || ^6.0" + "guzzlehttp/guzzle": "^7.2", + "guzzlehttp/psr7": "^1.7", + "http-interop/http-factory-guzzle": "^1.0", + "php-http/mock-client": "^1.4.1", + "phpstan/extension-installer": "^1.0.5", + "phpstan/phpstan": "^0.12.57", + "phpstan/phpstan-deprecation-rules": "^0.12.5", + "phpunit/phpunit": "^8.5 || ^9.4", + "symfony/cache": "^5.1.8", + "symfony/phpunit-bridge": "^5.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.11.x-dev" + "dev-2.x": "2.20.x-dev", + "dev-master": "3.4.x-dev" } }, "autoload": { @@ -939,14 +1096,14 @@ "MIT" ], "authors": [ + { + "name": "KnpLabs Team", + "homepage": "http://knplabs.com" + }, { "name": "Thibault Duplessis", "email": "thibault.duplessis@gmail.com", "homepage": "http://ornicar.github.com" - }, - { - "name": "KnpLabs Team", - "homepage": "http://knplabs.com" } ], "description": "GitHub API v3 client", @@ -957,98 +1114,69 @@ "gist", "github" ], - "time": "2019-01-28T19:31:35+00:00" - }, - { - "name": "kylekatarnls/update-helper", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/kylekatarnls/update-helper.git", - "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9" + "support": { + "issues": "https://github.com/KnpLabs/php-github-api/issues", + "source": "https://github.com/KnpLabs/php-github-api/tree/v3.5.1" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/b34a46d7f5ec1795b4a15ac9d46b884377262df9", - "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1.0", - "php": ">=5.3.0" - }, - "require-dev": { - "codeclimate/php-test-reporter": "dev-master", - "composer/composer": "^2.0.x-dev", - "phpunit/phpunit": ">=4.8.35 <6.0" - }, - "type": "composer-plugin", - "extra": { - "class": "UpdateHelper\\ComposerPlugin" - }, - "autoload": { - "psr-0": { - "UpdateHelper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Kyle", - "email": "kylekatarnls@gmail.com" + "url": "https://github.com/acrobat", + "type": "github" } ], - "description": "Update helper", - "time": "2019-06-05T08:34:23+00:00" + "time": "2022-02-19T11:15:46+00:00" }, { "name": "laravel/framework", - "version": "v5.7.28", + "version": "v7.30.6", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192" + "reference": "ecdafad1dda3c790af186a6d18479ea4757ef9ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/8e69728f1c80a024588adbd24c65c4fcf9aa9192", - "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192", + "url": "https://api.github.com/repos/laravel/framework/zipball/ecdafad1dda3c790af186a6d18479ea4757ef9ee", + "reference": "ecdafad1dda3c790af186a6d18479ea4757ef9ee", "shasum": "" }, "require": { - "doctrine/inflector": "^1.1", - "dragonmantank/cron-expression": "^2.0", - "erusev/parsedown": "^1.7", + "doctrine/inflector": "^1.4|^2.0", + "dragonmantank/cron-expression": "^2.3.1", + "egulias/email-validator": "^2.1.10", + "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", - "laravel/nexmo-notification-channel": "^1.0", - "laravel/slack-notification-channel": "^1.0", - "league/flysystem": "^1.0.8", - "monolog/monolog": "^1.12", - "nesbot/carbon": "^1.26.3", - "opis/closure": "^3.1", - "php": "^7.1.3", + "league/commonmark": "^1.3", + "league/flysystem": "^1.1", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.31", + "opis/closure": "^3.6", + "php": "^7.2.5|^8.0", "psr/container": "^1.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "^3.7", + "ramsey/uuid": "^3.7|^4.0", "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^4.1", - "symfony/debug": "^4.1", - "symfony/finder": "^4.1", - "symfony/http-foundation": "^4.1", - "symfony/http-kernel": "^4.1", - "symfony/process": "^4.1", - "symfony/routing": "^4.1", - "symfony/var-dumper": "^4.1", - "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "^2.2" + "symfony/console": "^5.0", + "symfony/error-handler": "^5.0", + "symfony/finder": "^5.0", + "symfony/http-foundation": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/mime": "^5.0", + "symfony/polyfill-php73": "^1.17", + "symfony/process": "^5.0", + "symfony/routing": "^5.0", + "symfony/var-dumper": "^5.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^4.0", + "voku/portable-ascii": "^1.4.8" }, "conflict": { "tightenco/collect": "<5.5.33" }, + "provide": { + "psr/container-implementation": "1.0" + }, "replace": { "illuminate/auth": "self.version", "illuminate/broadcasting": "self.version", @@ -1075,52 +1203,58 @@ "illuminate/routing": "self.version", "illuminate/session": "self.version", "illuminate/support": "self.version", + "illuminate/testing": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.0", + "aws/aws-sdk-php": "^3.155", "doctrine/dbal": "^2.6", - "filp/whoops": "^2.1.4", - "guzzlehttp/guzzle": "^6.3", + "filp/whoops": "^2.8", + "guzzlehttp/guzzle": "^6.3.1|^7.0.1", "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.0", + "mockery/mockery": "~1.3.3|^1.4.2", "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.7.*", - "pda/pheanstalk": "^3.0|^4.0", - "phpunit/phpunit": "^7.5", + "orchestra/testbench-core": "^5.8", + "pda/pheanstalk": "^4.0", + "phpunit/phpunit": "^8.4|^9.3.3", "predis/predis": "^1.1.1", - "symfony/css-selector": "^4.1", - "symfony/dom-crawler": "^4.1", - "true/punycode": "^2.1" + "symfony/cache": "^5.0" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", - "filp/whoops": "Required for friendly error pages in development (^2.1.4).", - "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", - "laravel/tinker": "Required to use the tinker console command (^1.0).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.8).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0.1).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "mockery/mockery": "Required to use mocking (~1.3.3|^1.4.2).", "moontoast/math": "Required to use ordered UUIDs (^1.1).", - "nexmo/client": "Required to use the Nexmo transport (^1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0|^4.0).", - "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)." + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.3.3).", + "predis/predis": "Required to use the predis connector (^1.1.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.0).", + "symfony/filesystem": "Required to create relative storage directory symbolic links (^5.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", + "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.7-dev" + "dev-master": "7.x-dev" } }, "autoload": { @@ -1148,154 +1282,45 @@ "framework", "laravel" ], - "time": "2019-02-26T15:41:34+00:00" - }, - { - "name": "laravel/nexmo-notification-channel", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/nexmo-notification-channel.git", - "reference": "03edd42a55b306ff980c9950899d5a2b03260d48" + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/nexmo-notification-channel/zipball/03edd42a55b306ff980c9950899d5a2b03260d48", - "reference": "03edd42a55b306ff980c9950899d5a2b03260d48", - "shasum": "" - }, - "require": { - "nexmo/client": "^1.0", - "php": "^7.1.3" - }, - "require-dev": { - "illuminate/notifications": "~5.7", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "laravel": { - "providers": [ - "Illuminate\\Notifications\\NexmoChannelServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Notifications\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Nexmo Notification Channel for laravel.", - "keywords": [ - "laravel", - "nexmo", - "notifications" - ], - "time": "2018-12-04T12:57:08+00:00" - }, - { - "name": "laravel/slack-notification-channel", - "version": "v1.0.3", - "source": { - "type": "git", - "url": "https://github.com/laravel/slack-notification-channel.git", - "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/6e164293b754a95f246faf50ab2bbea3e4923cc9", - "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^6.0", - "php": "^7.1.3" - }, - "require-dev": { - "illuminate/notifications": "~5.7", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "laravel": { - "providers": [ - "Illuminate\\Notifications\\SlackChannelServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Notifications\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Slack Notification Channel for laravel.", - "keywords": [ - "laravel", - "notifications", - "slack" - ], - "time": "2018-12-12T13:12:06+00:00" + "time": "2021-12-07T14:56:47+00:00" }, { "name": "laravel/tinker", - "version": "v1.0.8", + "version": "v2.7.0", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "cafbf598a90acde68985660e79b2b03c5609a405" + "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/cafbf598a90acde68985660e79b2b03c5609a405", - "reference": "cafbf598a90acde68985660e79b2b03c5609a405", + "url": "https://api.github.com/repos/laravel/tinker/zipball/5f2f9815b7631b9f586a3de7933c25f9327d4073", + "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073", "shasum": "" }, "require": { - "illuminate/console": "~5.1", - "illuminate/contracts": "~5.1", - "illuminate/support": "~5.1", - "php": ">=5.5.9", - "psy/psysh": "0.7.*|0.8.*|0.9.*", - "symfony/var-dumper": "~3.0|~4.0" + "illuminate/console": "^6.0|^7.0|^8.0|^9.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4|^0.11.1", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0" }, "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" }, "suggest": { - "illuminate/database": "The Illuminate Database package (~5.1)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.x-dev" }, "laravel": { "providers": [ @@ -1325,39 +1350,98 @@ "laravel", "psysh" ], - "time": "2018-10-12T19:39:35+00:00" + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.7.0" + }, + "time": "2022-01-10T08:52:49+00:00" }, { - "name": "laravelcollective/html", - "version": "v5.7.1", + "name": "laravel/ui", + "version": "v2.5.0", "source": { "type": "git", - "url": "https://github.com/LaravelCollective/html.git", - "reference": "777b6d390811ba249255ed5750bf17a019cd88a5" + "url": "https://github.com/laravel/ui.git", + "reference": "d01a705763c243b07be795e9d1bb47f89260f73d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LaravelCollective/html/zipball/777b6d390811ba249255ed5750bf17a019cd88a5", - "reference": "777b6d390811ba249255ed5750bf17a019cd88a5", + "url": "https://api.github.com/repos/laravel/ui/zipball/d01a705763c243b07be795e9d1bb47f89260f73d", + "reference": "d01a705763c243b07be795e9d1bb47f89260f73d", "shasum": "" }, "require": { - "illuminate/http": "5.7.*", - "illuminate/routing": "5.7.*", - "illuminate/session": "5.7.*", - "illuminate/support": "5.7.*", - "illuminate/view": "5.7.*", - "php": ">=7.1.3" + "illuminate/console": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/support": "^7.0", + "php": "^7.2.5|^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Ui\\UiServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Ui\\": "src/", + "Illuminate\\Foundation\\Auth\\": "auth-backend/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel UI utilities and presets.", + "keywords": [ + "laravel", + "ui" + ], + "support": { + "issues": "https://github.com/laravel/ui/issues", + "source": "https://github.com/laravel/ui/tree/v2.5.0" + }, + "time": "2020-11-03T19:45:19+00:00" + }, + { + "name": "laravelcollective/html", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/LaravelCollective/html.git", + "reference": "78c3cb516ac9e6d3d76cad9191f81d217302dea6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/LaravelCollective/html/zipball/78c3cb516ac9e6d3d76cad9191f81d217302dea6", + "reference": "78c3cb516ac9e6d3d76cad9191f81d217302dea6", + "shasum": "" + }, + "require": { + "illuminate/http": "^6.0|^7.0|^8.0|^9.0", + "illuminate/routing": "^6.0|^7.0|^8.0|^9.0", + "illuminate/session": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "illuminate/view": "^6.0|^7.0|^8.0|^9.0", + "php": ">=7.2.5" }, "require-dev": { - "illuminate/database": "5.7.*", + "illuminate/database": "^6.0|^7.0|^8.0|^9.0", "mockery/mockery": "~1.0", - "phpunit/phpunit": "~7.1" + "phpunit/phpunit": "~8.5|^9.5.10" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.7-dev" + "dev-master": "6.x-dev" }, "laravel": { "providers": [ @@ -1370,66 +1454,76 @@ } }, "autoload": { - "psr-4": { - "Collective\\Html\\": "src/" - }, "files": [ "src/helpers.php" - ] + ], + "psr-4": { + "Collective\\Html\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ - { - "name": "Taylor Otwell", - "email": "taylorotwell@gmail.com" - }, { "name": "Adam Engebretson", "email": "adam@laravelcollective.com" + }, + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" } ], "description": "HTML and Form Builders for the Laravel Framework", "homepage": "https://laravelcollective.com", - "time": "2018-09-05T18:32:53+00:00" + "support": { + "issues": "https://github.com/LaravelCollective/html/issues", + "source": "https://github.com/LaravelCollective/html" + }, + "time": "2022-02-08T21:02:54+00:00" }, { - "name": "lcobucci/jwt", - "version": "3.3.1", + "name": "league/commonmark", + "version": "1.6.7", "source": { "type": "git", - "url": "https://github.com/lcobucci/jwt.git", - "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18" + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", - "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2b8185c13bc9578367a5bf901881d1c1b5bbd09b", + "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b", "shasum": "" }, "require": { "ext-mbstring": "*", - "ext-openssl": "*", - "php": "^5.6 || ^7.0" + "php": "^7.1 || ^8.0" + }, + "conflict": { + "scrutinizer/ocular": "1.7.*" }, "require-dev": { - "mikey179/vfsstream": "~1.5", - "phpmd/phpmd": "~2.2", - "phpunit/php-invoker": "~1.1", - "phpunit/phpunit": "^5.7 || ^7.3", - "squizlabs/php_codesniffer": "~2.3" + "cebe/markdown": "~1.0", + "commonmark/commonmark.js": "0.29.2", + "erusev/parsedown": "~1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "~1.4", + "mikehaertl/php-shellcommand": "^1.4", + "phpstan/phpstan": "^0.12.90", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", + "scrutinizer/ocular": "^1.5", + "symfony/finder": "^4.2" }, + "bin": [ + "bin/commonmark" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, "autoload": { "psr-4": { - "Lcobucci\\JWT\\": "src" + "League\\CommonMark\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1438,45 +1532,77 @@ ], "authors": [ { - "name": "Luís Otávio Cobucci Oblonczyk", - "email": "lcobucci@gmail.com", - "role": "Developer" + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" } ], - "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", "keywords": [ - "JWS", - "jwt" + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" ], - "time": "2019-05-24T18:30:49+00:00" + "support": { + "docs": "https://commonmark.thephpleague.com/", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2022-01-13T17:18:13+00:00" }, { "name": "league/flysystem", - "version": "1.0.52", + "version": "1.1.9", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "c5a5097156387970e6f0ccfcdf03f752856f3391" + "reference": "094defdb4a7001845300334e7c1ee2335925ef99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/c5a5097156387970e6f0ccfcdf03f752856f3391", - "reference": "c5a5097156387970e6f0ccfcdf03f752856f3391", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99", + "reference": "094defdb4a7001845300334e7c1ee2335925ef99", "shasum": "" }, "require": { "ext-fileinfo": "*", - "php": ">=5.5.9" + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" }, "conflict": { "league/flysystem-sftp": "<1.0.6" }, "require-dev": { - "phpspec/phpspec": "^3.4", - "phpunit/phpunit": "^5.7.10" + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" }, "suggest": { - "ext-fileinfo": "Required for MimeType", "ext-ftp": "Allows you to use FTP server storage", "ext-openssl": "Allows you to use FTPS server storage", "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", @@ -1532,59 +1658,132 @@ "sftp", "storage" ], - "time": "2019-05-20T20:21:14+00:00" + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.1.9" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2021-12-09T09:40:50+00:00" }, { - "name": "monolog/monolog", - "version": "1.24.0", + "name": "league/mime-type-detection", + "version": "1.9.0", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/aa70e813a6ad3d1558fc927863d47309b4c23e69", + "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "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.9.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2021-11-21T11:48:40+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.3.5", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0" + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" }, "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "jakub-onderka/php-parallel-lint": "0.9", - "php-amqplib/php-amqplib": "~2.4", + "elasticsearch/elasticsearch": "^7", + "graylog2/gelf-php": "^1.4.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", "php-console/php-console": "^3.1.3", - "phpunit/phpunit": "~4.5", - "phpunit/phpunit-mock-objects": "2.3.0", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", + "phpspec/prophecy": "^1.6.1", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90@dev", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { @@ -1600,57 +1799,87 @@ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "homepage": "https://seld.be" } ], "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", + "homepage": "https://github.com/Seldaek/monolog", "keywords": [ "log", "logging", "psr-3" ], - "time": "2018-11-05T09:00:11+00:00" + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.3.5" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2021-10-01T21:08:31+00:00" }, { "name": "nesbot/carbon", - "version": "1.38.4", + "version": "2.57.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad" + "reference": "4a54375c21eea4811dbd1149fe6b246517554e78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8dd4172bfe1784952c4d58c4db725d183b1c23ad", - "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78", + "reference": "4a54375c21eea4811dbd1149fe6b246517554e78", "shasum": "" }, "require": { - "kylekatarnls/update-helper": "^1.1", - "php": ">=5.3.9", - "symfony/translation": "~2.6 || ~3.0 || ~4.0" + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { - "composer/composer": "^1.2", - "friendsofphp/php-cs-fixer": "~2", - "phpunit/phpunit": "^4.8.35 || ^5.7" + "doctrine/dbal": "^2.0 || ^3.0", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.54 || ^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.14", + "squizlabs/php_codesniffer": "^3.4" }, "bin": [ - "bin/upgrade-carbon" + "bin/carbon" ], "type": "library", "extra": { - "update-helper": "Carbon\\Upgrade", + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { "psr-4": { - "": "src/" + "Carbon\\": "src/Carbon/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1661,78 +1890,49 @@ { "name": "Brian Nesbitt", "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" } ], - "description": "A simple API extension for DateTime.", - "homepage": "http://carbon.nesbot.com", + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", "keywords": [ "date", "datetime", "time" ], - "time": "2019-06-03T15:41:40+00:00" - }, - { - "name": "nexmo/client", - "version": "1.8.1", - "source": { - "type": "git", - "url": "https://github.com/Nexmo/nexmo-php.git", - "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4" + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/182d41a02ebd3e4be147baea45458ccfe2f528c4", - "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4", - "shasum": "" - }, - "require": { - "lcobucci/jwt": "^3.2", - "php": ">=5.6", - "php-http/client-implementation": "^1.0", - "php-http/guzzle6-adapter": "^1.0", - "zendframework/zend-diactoros": "^1.8.4 || ^2.0" - }, - "require-dev": { - "estahn/phpunit-json-assertions": "^1.0.0", - "php-http/mock-client": "^0.3.0", - "phpunit/phpunit": "^5.7", - "squizlabs/php_codesniffer": "^3.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Nexmo\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Tim Lytle", - "email": "tim@nexmo.com", - "homepage": "http://twitter.com/tjlytle", - "role": "Developer" + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" } ], - "description": "PHP Client for using Nexmo's API.", - "time": "2019-05-13T20:27:43+00:00" + "time": "2022-02-13T18:13:33+00:00" }, { "name": "nikic/php-parser", - "version": "v4.2.2", + "version": "v4.13.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420" + "reference": "210577fe3cf7badcc5814d99455df46564f3c077" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bd73cc04c3843ad8d6b0bfc0956026a151fc420", - "reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077", "shasum": "" }, "require": { @@ -1740,7 +1940,8 @@ "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^6.5 || ^7.0" + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -1748,7 +1949,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "4.9-dev" } }, "autoload": { @@ -1770,42 +1971,46 @@ "parser", "php" ], - "time": "2019-05-25T20:07:01+00:00" + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + }, + "time": "2021-11-30T19:35:32+00:00" }, { "name": "opis/closure", - "version": "3.3.0", + "version": "3.6.3", "source": { "type": "git", "url": "https://github.com/opis/closure.git", - "reference": "f846725591203098246276b2e7b9e8b7814c4965" + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/f846725591203098246276b2e7b9e8b7814c4965", - "reference": "f846725591203098246276b2e7b9e8b7814c4965", + "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0" + "php": "^5.4 || ^7.0 || ^8.0" }, "require-dev": { "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3.x-dev" + "dev-master": "3.6.x-dev" } }, "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, "files": [ "functions.php" - ] + ], + "psr-4": { + "Opis\\Closure\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1831,77 +2036,35 @@ "serialization", "serialize" ], - "time": "2019-05-31T20:04:32+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + "support": { + "issues": "https://github.com/opis/closure/issues", + "source": "https://github.com/opis/closure/tree/3.6.3" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "time": "2018-07-02T15:55:56+00:00" + "time": "2022-01-27T09:35:39+00:00" }, { "name": "php-http/cache-plugin", - "version": "1.6.0", + "version": "1.7.5", "source": { "type": "git", "url": "https://github.com/php-http/cache-plugin.git", - "reference": "8e2505d2090316fac7cce637b39b6bbb5249c5a8" + "reference": "63bc3f7242825c9a817db8f78e4c9703b0c471e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/8e2505d2090316fac7cce637b39b6bbb5249c5a8", - "reference": "8e2505d2090316fac7cce637b39b6bbb5249c5a8", + "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/63bc3f7242825c9a817db8f78e4c9703b0c471e2", + "reference": "63bc3f7242825c9a817db8f78e4c9703b0c471e2", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0", + "php": "^7.1 || ^8.0", "php-http/client-common": "^1.9 || ^2.0", "php-http/message-factory": "^1.0", - "psr/cache": "^1.0", - "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0" + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.5" + "phpspec/phpspec": "^5.1 || ^6.0" }, "type": "library", "extra": { @@ -1932,34 +2095,48 @@ "httplug", "plugin" ], - "time": "2019-01-23T16:51:58+00:00" + "support": { + "issues": "https://github.com/php-http/cache-plugin/issues", + "source": "https://github.com/php-http/cache-plugin/tree/1.7.5" + }, + "time": "2022-01-18T12:24:56+00:00" }, { "name": "php-http/client-common", - "version": "1.9.1", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/php-http/client-common.git", - "reference": "0e156a12cc3e46f590c73bf57592a2252fc3dc48" + "reference": "d135751167d57e27c74de674d6a30cef2dc8e054" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/0e156a12cc3e46f590c73bf57592a2252fc3dc48", - "reference": "0e156a12cc3e46f590c73bf57592a2252fc3dc48", + "url": "https://api.github.com/repos/php-http/client-common/zipball/d135751167d57e27c74de674d6a30cef2dc8e054", + "reference": "d135751167d57e27c74de674d6a30cef2dc8e054", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0", - "php-http/httplug": "^1.1", + "php": "^7.1 || ^8.0", + "php-http/httplug": "^2.0", "php-http/message": "^1.6", "php-http/message-factory": "^1.0", - "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0" + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.17" }, "require-dev": { + "doctrine/instantiator": "^1.1", "guzzlehttp/psr7": "^1.4", - "phpspec/phpspec": "^2.5 || ^3.4 || ^4.2" + "nyholm/psr7": "^1.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "phpspec/prophecy": "^1.10.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" }, "suggest": { + "ext-json": "To detect JSON responses with the ContentTypePlugin", + "ext-libxml": "To detect XML responses with the ContentTypePlugin", "php-http/cache-plugin": "PSR-6 Cache plugin", "php-http/logger-plugin": "PSR-3 Logger plugin", "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" @@ -1967,7 +2144,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9.x-dev" + "dev-master": "2.3.x-dev" } }, "autoload": { @@ -1993,42 +2170,46 @@ "http", "httplug" ], - "time": "2019-02-02T07:03:15+00:00" + "support": { + "issues": "https://github.com/php-http/client-common/issues", + "source": "https://github.com/php-http/client-common/tree/2.5.0" + }, + "time": "2021-11-26T15:01:24+00:00" }, { "name": "php-http/discovery", - "version": "1.6.1", + "version": "1.14.1", "source": { "type": "git", "url": "https://github.com/php-http/discovery.git", - "reference": "684855f2c2e9d0a61868b8f8d6bd0295c8a4b651" + "reference": "de90ab2b41d7d61609f504e031339776bc8c7223" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/684855f2c2e9d0a61868b8f8d6bd0295c8a4b651", - "reference": "684855f2c2e9d0a61868b8f8d6bd0295c8a4b651", + "url": "https://api.github.com/repos/php-http/discovery/zipball/de90ab2b41d7d61609f504e031339776bc8c7223", + "reference": "de90ab2b41d7d61609f504e031339776bc8c7223", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0" + "php": "^7.1 || ^8.0" }, "conflict": { "nyholm/psr7": "<1.0" }, "require-dev": { + "graham-campbell/phpspec-skip-example-extension": "^5.0", "php-http/httplug": "^1.0 || ^2.0", "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^2.4", + "phpspec/phpspec": "^5.1 || ^6.1", "puli/composer-plugin": "1.0.0-beta10" }, "suggest": { - "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories", - "puli/composer-plugin": "Sets up Puli which is recommended for Discovery to work. Check http://docs.php-http.org/en/latest/discovery.html for more details." + "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -2057,95 +2238,40 @@ "message", "psr7" ], - "time": "2019-02-23T07:42:53+00:00" - }, - { - "name": "php-http/guzzle6-adapter", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/guzzle6-adapter.git", - "reference": "a56941f9dc6110409cfcddc91546ee97039277ab" + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.14.1" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab", - "reference": "a56941f9dc6110409cfcddc91546ee97039277ab", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^6.0", - "php": ">=5.5.0", - "php-http/httplug": "^1.0" - }, - "provide": { - "php-http/async-client-implementation": "1.0", - "php-http/client-implementation": "1.0" - }, - "require-dev": { - "ext-curl": "*", - "php-http/adapter-integration-tests": "^0.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Adapter\\Guzzle6\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - }, - { - "name": "David de Boer", - "email": "david@ddeboer.nl" - } - ], - "description": "Guzzle 6 HTTP Adapter", - "homepage": "http://httplug.io", - "keywords": [ - "Guzzle", - "http" - ], - "time": "2016-05-10T06:13:32+00:00" + "time": "2021-09-18T07:57:46+00:00" }, { "name": "php-http/httplug", - "version": "v1.1.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/php-http/httplug.git", - "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" + "reference": "f640739f80dfa1152533976e3c112477f69274eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", - "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb", + "reference": "f640739f80dfa1152533976e3c112477f69274eb", "shasum": "" }, "require": { - "php": ">=5.4", - "php-http/promise": "^1.0", + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", "psr/http-message": "^1.0" }, "require-dev": { - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.4" + "friends-of-phpspec/phpspec-code-coverage": "^4.1", + "phpspec/phpspec": "^5.1 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -2164,7 +2290,8 @@ }, { "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], "description": "HTTPlug, the HTTP client abstraction for PHP", @@ -2173,25 +2300,29 @@ "client", "http" ], - "time": "2016-08-31T08:30:17+00:00" + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.3.0" + }, + "time": "2022-02-21T09:52:22+00:00" }, { "name": "php-http/message", - "version": "1.7.2", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/php-http/message.git", - "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1" + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/b159ffe570dffd335e22ef0b91a946eacb182fa1", - "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1", + "url": "https://api.github.com/repos/php-http/message/zipball/7886e647a30a966a1a8d1dad1845b71ca8678361", + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361", "shasum": "" }, "require": { - "clue/stream-filter": "^1.4", - "php": "^5.4 || ^7.0", + "clue/stream-filter": "^1.5", + "php": "^7.1 || ^8.0", "php-http/message-factory": "^1.0.2", "psr/http-message": "^1.0" }, @@ -2199,34 +2330,32 @@ "php-http/message-factory-implementation": "1.0" }, "require-dev": { - "akeneo/phpspec-skip-example-extension": "^1.0", - "coduo/phpspec-data-provider-extension": "^1.0", + "ergebnis/composer-normalize": "^2.6", "ext-zlib": "*", "guzzlehttp/psr7": "^1.0", - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.4", - "slim/slim": "^3.0", - "zendframework/zend-diactoros": "^1.0" + "laminas/laminas-diactoros": "^2.0", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "slim/slim": "^3.0" }, "suggest": { "ext-zlib": "Used with compressor/decompressor streams", "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", - "slim/slim": "Used with Slim Framework PSR-7 implementation", - "zendframework/zend-diactoros": "Used with Diactoros Factories" + "laminas/laminas-diactoros": "Used with Diactoros Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.10-dev" } }, "autoload": { - "psr-4": { - "Http\\Message\\": "src/" - }, "files": [ "src/filters.php" - ] + ], + "psr-4": { + "Http\\Message\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2245,7 +2374,11 @@ "message", "psr-7" ], - "time": "2018-11-01T09:32:41+00:00" + "support": { + "issues": "https://github.com/php-http/message/issues", + "source": "https://github.com/php-http/message/tree/1.13.0" + }, + "time": "2022-02-11T13:41:14+00:00" }, { "name": "php-http/message-factory", @@ -2295,25 +2428,94 @@ "stream", "uri" ], + "support": { + "issues": "https://github.com/php-http/message-factory/issues", + "source": "https://github.com/php-http/message-factory/tree/master" + }, "time": "2015-12-19T14:08:53+00:00" }, { - "name": "php-http/promise", - "version": "v1.0.0", + "name": "php-http/multipart-stream-builder", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/php-http/promise.git", - "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" + "url": "https://github.com/php-http/multipart-stream-builder.git", + "reference": "11c1d31f72e01c738bbce9e27649a7cca829c30e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", - "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", + "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/11c1d31f72e01c738bbce9e27649a7cca829c30e", + "reference": "11c1d31f72e01c738bbce9e27649a7cca829c30e", "shasum": "" }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/discovery": "^1.7", + "php-http/message-factory": "^1.0.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, "require-dev": { - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.4" + "nyholm/psr7": "^1.0", + "php-http/message": "^1.5", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\MultipartStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + } + ], + "description": "A builder class that help you create a multipart stream", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "multipart stream", + "stream" + ], + "support": { + "issues": "https://github.com/php-http/multipart-stream-builder/issues", + "source": "https://github.com/php-http/multipart-stream-builder/tree/1.2.0" + }, + "time": "2021-05-21T08:32:01+00:00" + }, + { + "name": "php-http/promise", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2", + "phpspec/phpspec": "^5.1.2 || ^6.2" }, "type": "library", "extra": { @@ -2331,13 +2533,13 @@ "MIT" ], "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - }, { "name": "Joel Wurtz", "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], "description": "Promise used for asynchronous HTTP requests", @@ -2345,7 +2547,82 @@ "keywords": [ "promise" ], - "time": "2016-01-26T13:27:02+00:00" + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.1.0" + }, + "time": "2020-07-07T09:29:14+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", + "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.8.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2021-12-04T23:24:31+00:00" }, { "name": "psr/cache", @@ -2391,31 +2668,29 @@ "psr", "psr-6" ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, "time": "2016-08-06T20:24:11+00:00" }, { "name": "psr/container", - "version": "1.0.0", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.4.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -2428,7 +2703,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -2440,7 +2715,113 @@ "container-interop", "psr" ], - "time": "2017-02-14T16:28:37+00:00" + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.2" + }, + "time": "2021-11-05T16:50:12+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" }, { "name": "psr/http-factory", @@ -2492,6 +2873,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, "time": "2019-04-30T12:38:16+00:00" }, { @@ -2542,20 +2926,23 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, "time": "2016-08-06T14:39:51+00:00" }, { "name": "psr/log", - "version": "1.1.0", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { @@ -2564,7 +2951,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -2579,7 +2966,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for logging libraries", @@ -2589,7 +2976,10 @@ "psr", "psr-3" ], - "time": "2018-11-20T15:27:04+00:00" + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" }, { "name": "psr/simple-cache", @@ -2637,36 +3027,39 @@ "psr-16", "simple-cache" ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, "time": "2017-10-23T01:57:42+00:00" }, { "name": "psy/psysh", - "version": "v0.9.9", + "version": "v0.11.2", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e" + "reference": "7f7da640d68b9c9fec819caae7c744a213df6514" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9aaf29575bb8293206bb0420c1e1c87ff2ffa94e", - "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/7f7da640d68b9c9fec819caae7c744a213df6514", + "reference": "7f7da640d68b9c9fec819caae7c744a213df6514", "shasum": "" }, "require": { - "dnoegel/php-xdg-base-dir": "0.1", "ext-json": "*", "ext-tokenizer": "*", - "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", - "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0", - "php": ">=5.4.0", - "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0", - "symfony/var-dumper": "~2.7|~3.0|~4.0" + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "~2.15|~3.16", - "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0" + "hoa/console": "3.17.05.02" }, "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", @@ -2681,7 +3074,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-develop": "0.9.x-dev" + "dev-main": "0.11.x-dev" } }, "autoload": { @@ -2711,28 +3104,32 @@ "interactive", "shell" ], - "time": "2018-10-13T15:16:03+00:00" + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.2" + }, + "time": "2022-02-28T15:28:54+00:00" }, { "name": "ralouphie/getallheaders", - "version": "2.0.5", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "php": ">=5.3" + "php": ">=5.6" }, "require-dev": { - "phpunit/phpunit": "~3.7.0", - "satooshi/php-coveralls": ">=1.0" + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" }, "type": "library", "autoload": { @@ -2751,60 +3148,53 @@ } ], "description": "A polyfill for getallheaders.", - "time": "2016-02-11T07:05:27+00:00" + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" }, { - "name": "ramsey/uuid", - "version": "3.8.0", + "name": "ramsey/collection", + "version": "1.2.2", "source": { "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" + "url": "https://github.com/ramsey/collection.git", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", - "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", "shasum": "" }, "require": { - "paragonie/random_compat": "^1.0|^2.0|9.99.99", - "php": "^5.4 || ^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "replace": { - "rhumsaa/uuid": "self.version" + "php": "^7.3 || ^8", + "symfony/polyfill-php81": "^1.23" }, "require-dev": { - "codeception/aspect-mock": "^1.0 | ~2.0.0", - "doctrine/annotations": "~1.2.0", - "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", - "ircmaxell/random-lib": "^1.1", - "jakub-onderka/php-parallel-lint": "^0.9.0", - "mockery/mockery": "^0.9.9", - "moontoast/math": "^1.1", - "php-mock/php-mock-phpunit": "^0.3|^1.1", - "phpunit/phpunit": "^4.7|^5.0|^6.5", - "squizlabs/php_codesniffer": "^2.3" - }, - "suggest": { - "ext-ctype": "Provides support for PHP Ctype functions", - "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", - "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", - "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fakerphp/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.8", + "mockery/mockery": "^1.3", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5 || ^9", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "autoload": { "psr-4": { - "Ramsey\\Uuid\\": "src/" + "Ramsey\\Collection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2812,57 +3202,162 @@ "MIT" ], "authors": [ - { - "name": "Marijn Huizendveld", - "email": "marijn.huizendveld@gmail.com" - }, - { - "name": "Thibaud Fabre", - "email": "thibaud@aztech.io" - }, { "name": "Ben Ramsey", "email": "ben@benramsey.com", "homepage": "https://benramsey.com" } ], - "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", - "homepage": "https://github.com/ramsey/uuid", + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.2.2" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2021-10-10T03:01:02+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.2.3", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "shasum": "" + }, + "require": { + "brick/math": "^0.8 || ^0.9", + "ext-json": "*", + "php": "^7.2 || ^8.0", + "ramsey/collection": "^1.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php80": "^1.14" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5 || ^9", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.x-dev" + }, + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", "keywords": [ "guid", "identifier", "uuid" ], - "time": "2018-07-19T23:38:55+00:00" + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.2.3" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2021-09-25T23:10:38+00:00" }, { "name": "swiftmailer/swiftmailer", - "version": "v6.2.1", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a" + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", - "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", "shasum": "" }, "require": { - "egulias/email-validator": "~2.0", + "egulias/email-validator": "^2.0|^3.1", "php": ">=7.0.0", "symfony/polyfill-iconv": "^1.0", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { - "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.4" }, "suggest": { - "ext-intl": "Needed to support internationalized email addresses", - "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" + "ext-intl": "Needed to support internationalized email addresses" }, "type": "library", "extra": { @@ -2895,44 +3390,241 @@ "mail", "mailer" ], - "time": "2019-04-21T09:21:45+00:00" + "support": { + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], + "abandoned": "symfony/mailer", + "time": "2021-10-18T15:26:12+00:00" }, { - "name": "symfony/console", - "version": "v4.3.1", + "name": "symfony/cache", + "version": "v5.4.6", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64" + "url": "https://github.com/symfony/cache.git", + "reference": "c0718d0e01ac14251a45cc9c8b93716ec41ae64b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d50bbeeb0e17e6dd4124ea391eff235e932cbf64", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64", + "url": "https://api.github.com/repos/symfony/cache/zipball/c0718d0e01ac14251a45cc9c8b93716ec41ae64b", + "reference": "c0718d0e01ac14251a45cc9c8b93716ec41ae64b", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1" + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^4.4|^5.0|^6.0" }, "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3", - "symfony/process": "<3.3" + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/cache-implementation": "1.0|2.0", + "psr/simple-cache-implementation": "1.0|2.0", + "symfony/cache-implementation": "1.0|2.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "^4.3", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "symfony/var-dumper": "^4.3" + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6|^2.0", + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0|^2.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "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 an extended PSR-6, PSR-16 (and tags) implementation", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.4.6" + }, + "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" + } + ], + "time": "2022-03-02T12:56:28+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ac2e168102a2e06a2624f0379bde94cd5854ced2", + "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0|^3.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "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": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.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" + } + ], + "time": "2021-08-17T14:20:01+00:00" + }, + { + "name": "symfony/console", + "version": "v5.4.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/d8111acc99876953f52fe16d4c50eb60940d49ad", + "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -2941,11 +3633,6 @@ "symfony/process": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Console\\": "" @@ -2968,33 +3655,52 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Console Component", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", - "time": "2019-06-05T13:25:51+00:00" + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.4.5" + }, + "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" + } + ], + "time": "2022-02-24T12:45:35+00:00" }, { "name": "symfony/css-selector", - "version": "v4.3.1", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" + "reference": "b0a190285cd95cb019237851205b8140ef6e368e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e", + "reference": "b0a190285cd95cb019237851205b8140ef6e368e", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\CssSelector\\": "" @@ -3008,56 +3714,138 @@ "MIT" ], "authors": [ - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony CssSelector Component", + "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", - "time": "2019-01-16T21:53:39+00:00" + "support": { + "source": "https://github.com/symfony/css-selector/tree/v5.4.3" + }, + "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" + } + ], + "time": "2022-01-02T09:53:40+00:00" }, { - "name": "symfony/debug", - "version": "v4.3.1", + "name": "symfony/deprecation-contracts", + "version": "v2.5.0", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "~3.4|~4.0" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, + "autoload": { + "files": [ + "function.php" + ] + }, + "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": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.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" + } + ], + "time": "2021-07-12T14:48:14+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v5.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", + "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Debug\\": "" + "Symfony\\Component\\ErrorHandler\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -3077,54 +3865,69 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.4.3" + }, + "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" + } + ], + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.3.1", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f" + "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4e6c670af81c4fb0b6c08b035530a9915d0b691f", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d", + "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/event-dispatcher-contracts": "^1.1" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/dependency-injection": "<3.4" + "symfony/dependency-injection": "<4.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" + "symfony/event-dispatcher-implementation": "2.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "^3.4|^4.0", - "symfony/service-contracts": "^1.1", - "symfony/stopwatch": "~3.4|~4.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/dependency-injection": "", "symfony/http-kernel": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" @@ -3147,35 +3950,56 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3" + }, + "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" + } + ], + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.1", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8fa2cf2177083dd59cf8e44ea4b6541764fbda69" + "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8fa2cf2177083dd59cf8e44ea4b6541764fbda69", - "reference": "8fa2cf2177083dd59cf8e44ea4b6541764fbda69", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" }, "suggest": { - "psr/event-dispatcher": "", "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3207,31 +4031,45 @@ "interoperability", "standards" ], - "time": "2019-05-22T12:23:29+00:00" + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.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" + } + ], + "time": "2021-07-12T14:48:14+00:00" }, { "name": "symfony/finder", - "version": "v4.3.1", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176" + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", + "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Finder\\": "" @@ -3254,39 +4092,57 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", - "time": "2019-05-26T20:47:49+00:00" + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.3" + }, + "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" + } + ], + "time": "2022-01-26T16:34:36+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.3.1", + "version": "v5.4.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9" + "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b7e4945dd9b277cd24e93566e4da0a87956392a9", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/34e89bc147633c0f9dd6caaaf56da3b806a21465", + "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/mime": "^4.3", - "symfony/polyfill-mbstring": "~1.1" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { "predis/predis": "~1.0", - "symfony/expression-language": "~3.4|~4.0" + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" @@ -3309,76 +4165,96 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpFoundation Component", + "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", - "time": "2019-06-06T10:05:02+00:00" + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.4.6" + }, + "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" + } + ], + "time": "2022-03-05T21:03:43+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.3.1", + "version": "v5.4.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429" + "reference": "d41f29ae9af1b5f40c7ebcddf09082953229411d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/738ad561cd6a8d1c44ee1da941b2e628e264c429", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d41f29ae9af1b5f40c7ebcddf09082953229411d", + "reference": "d41f29ae9af1b5f40c7ebcddf09082953229411d", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/log": "~1.0", - "symfony/debug": "~3.4|~4.0", - "symfony/event-dispatcher": "^4.3", - "symfony/http-foundation": "^4.1.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php73": "^1.9" + "php": ">=7.2.5", + "psr/log": "^1|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^5.0|^6.0", + "symfony/http-foundation": "^5.3.7|^6.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/browser-kit": "<4.3", - "symfony/config": "<3.4", - "symfony/dependency-injection": "<4.3", - "symfony/translation": "<4.2", - "symfony/var-dumper": "<4.1.1", - "twig/twig": "<1.34|<2.4,>=2" + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.3", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.13" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "psr/cache": "~1.0", - "symfony/browser-kit": "^4.3", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/css-selector": "~3.4|~4.0", - "symfony/dependency-injection": "^4.3", - "symfony/dom-crawler": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/finder": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~3.4|~4.0", - "symfony/templating": "~3.4|~4.0", - "symfony/translation": "~4.2", - "symfony/translation-contracts": "^1.1", - "symfony/var-dumper": "^4.1.1", - "twig/twig": "^1.34|^2.4" + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^2.13|^3.0.4" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/var-dumper": "" + "symfony/dependency-injection": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\HttpKernel\\": "" @@ -3401,39 +4277,63 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpKernel Component", + "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", - "time": "2019-06-06T13:23:34+00:00" + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.4.6" + }, + "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" + } + ], + "time": "2022-03-05T21:14:51+00:00" }, { "name": "symfony/mime", - "version": "v4.3.1", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b" + "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ec2c5565de60e03f33d4296a655e3273f0ad1f8b", - "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b", + "url": "https://api.github.com/repos/symfony/mime/zipball/e1503cfb5c9a225350f549d3bb99296f4abfb80f", + "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4" }, "require-dev": { - "egulias/email-validator": "^2.0", - "symfony/dependency-injection": "~3.4|^4.1" + "egulias/email-validator": "^2.1.10|^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/property-access": "^4.4|^5.1|^6.0", + "symfony/property-info": "^4.4|^5.1|^6.0", + "symfony/serializer": "^5.2|^6.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Mime\\": "" @@ -3456,37 +4356,52 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "A library to manipulate MIME messages", + "description": "Allows manipulating MIME messages", "homepage": "https://symfony.com", "keywords": [ "mime", "mime-type" ], - "time": "2019-06-04T09:22:54+00:00" + "support": { + "source": "https://github.com/symfony/mime/tree/v5.4.3" + }, + "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" + } + ], + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/options-resolver", - "version": "v4.3.1", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "914e0edcb7cd0c9f494bc023b1d47534f4542332" + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/914e0edcb7cd0c9f494bc023b1d47534f4542332", - "reference": "914e0edcb7cd0c9f494bc023b1d47534f4542332", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\OptionsResolver\\": "" @@ -3509,31 +4424,51 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony OptionsResolver Component", + "description": "Provides an improved replacement for the array_replace PHP function", "homepage": "https://symfony.com", "keywords": [ "config", "configuration", "options" ], - "time": "2019-05-10T05:38:46+00:00" + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.4.3" + }, + "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" + } + ], + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.11.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "82ebae02209c21113908c229e9883c419720738a" + "reference": "30885182c981ab175d4d034db0f6f469898070ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", - "reference": "82ebae02209c21113908c229e9883c419720738a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" }, "suggest": { "ext-ctype": "For best performance" @@ -3541,29 +4476,33 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, { "name": "Gert de Pagter", "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for ctype functions", @@ -3574,24 +4513,44 @@ "polyfill", "portable" ], - "time": "2019-02-06T07:57:58+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.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" + } + ], + "time": "2021-10-20T20:35:02+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.11.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7" + "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40", + "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "provide": { + "ext-iconv": "*" }, "suggest": { "ext-iconv": "For best performance" @@ -3599,16 +4558,20 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3633,26 +4596,41 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.25.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" + } + ], + "time": "2022-01-04T09:04:05+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.11.0", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.25.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c766e95bec706cdd89903b1eda8afab7d7a6b7af", - "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.9" + "php": ">=7.1" }, "suggest": { "ext-intl": "For best performance" @@ -3660,29 +4638,120 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "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 intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.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" + } + ], + "time": "2021-11-23T21:10:46+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", + "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { "name": "Laurent Bassin", "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", @@ -3695,24 +4764,128 @@ "portable", "shim" ], - "time": "2019-03-04T13:44:35+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.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" + } + ], + "time": "2021-09-14T14:02:44+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.11.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.25.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "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 intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.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" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" }, "suggest": { "ext-mbstring": "For best performance" @@ -3720,16 +4893,20 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3754,38 +4931,59 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.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" + } + ], + "time": "2021-11-30T18:21:41+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.11.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3809,38 +5007,59 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.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" + } + ], + "time": "2021-05-27T09:17:38+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.11.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -3867,31 +5086,206 @@ "portable", "shim" ], - "time": "2019-02-06T07:57:58+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.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" + } + ], + "time": "2021-06-05T21:20:04+00:00" }, { - "name": "symfony/process", - "version": "v4.3.1", + "name": "symfony/polyfill-php80", + "version": "v1.25.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c", - "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.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" + } + ], + "time": "2022-03-04T08:16:47+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "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 backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.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" + } + ], + "time": "2021-09-13T13:58:11+00:00" + }, + { + "name": "symfony/process", + "version": "v5.4.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "95440409896f90a5f85db07a32b517ecec17fa4c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/95440409896f90a5f85db07a32b517ecec17fa4c", + "reference": "95440409896f90a5f85db07a32b517ecec17fa4c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Process\\": "" @@ -3914,54 +5308,68 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.5" + }, + "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" + } + ], + "time": "2022-01-30T18:16:22+00:00" }, { "name": "symfony/routing", - "version": "v4.3.1", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465" + "reference": "44b29c7a94e867ccde1da604792f11a469958981" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", + "url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981", + "reference": "44b29c7a94e867ccde1da604792f11a469958981", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/config": "<4.2", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" + "doctrine/annotations": "<1.12", + "symfony/config": "<5.3", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" }, "require-dev": { - "doctrine/annotations": "~1.2", - "psr/log": "~1.0", - "symfony/config": "~4.2", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" + "doctrine/annotations": "^1.12", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.3|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "suggest": { - "doctrine/annotations": "For using the annotation loader", "symfony/config": "For using the all-in-one router or any loader", "symfony/expression-language": "For using expression matching", "symfony/http-foundation": "For using a Symfony Request object", "symfony/yaml": "For using the YAML loader" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Routing\\": "" @@ -3984,7 +5392,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Routing Component", + "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", "keywords": [ "router", @@ -3992,33 +5400,58 @@ "uri", "url" ], - "time": "2019-06-05T09:16:20+00:00" + "support": { + "source": "https://github.com/symfony/routing/tree/v5.4.3" + }, + "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" + } + ], + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/service-contracts", - "version": "v1.1.2", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0" + "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/191afdcb5804db960d26d8566b7e9a2843cab3a0", - "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "suggest": { - "psr/container": "", "symfony/service-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4050,46 +5483,155 @@ "interoperability", "standards" ], - "time": "2019-05-28T07:50:59+00:00" + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.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" + } + ], + "time": "2021-11-04T16:48:04+00:00" }, { - "name": "symfony/translation", - "version": "v4.3.1", + "name": "symfony/string", + "version": "v5.4.3", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa" + "url": "https://github.com/symfony/string.git", + "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/5dda505e5f65d759741dfaf4e54b36010a4b57aa", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10", + "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^1.1.2" + "symfony/polyfill-php80": "~1.15" }, "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" - }, - "provide": { - "symfony/translation-implementation": "1.0" + "symfony/translation-contracts": ">=3.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/http-kernel": "~3.4|~4.0", - "symfony/intl": "~3.4|~4.0", - "symfony/service-contracts": "^1.1.2", - "symfony/var-dumper": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "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 an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.4.3" + }, + "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" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.4.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/a7ca9fdfffb0174209440c2ffa1dee228e15d95b", + "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^2.3" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/console": "<5.3", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.3" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log-implementation": "To use logging capability in translator", @@ -4097,12 +5639,10 @@ "symfony/yaml": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { "Symfony\\Component\\Translation\\": "" }, @@ -4124,26 +5664,43 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Translation Component", + "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", - "time": "2019-06-03T20:27:40+00:00" + "support": { + "source": "https://github.com/symfony/translation/tree/v5.4.6" + }, + "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" + } + ], + "time": "2022-03-02T12:56:28+00:00" }, { "name": "symfony/translation-contracts", - "version": "v1.1.2", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "93597ce975d91c52ebfaca1253343cd9ccb7916d" + "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/93597ce975d91c52ebfaca1253343cd9ccb7916d", - "reference": "93597ce975d91c52ebfaca1253343cd9ccb7916d", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e", + "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.2.5" }, "suggest": { "symfony/translation-implementation": "" @@ -4151,7 +5708,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4183,36 +5744,54 @@ "interoperability", "standards" ], - "time": "2019-05-27T08:16:38+00:00" + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.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" + } + ], + "time": "2021-08-17T14:20:01+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.3.1", + "version": "v5.4.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b" + "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f974f448154928d2b5fb7c412bd23b81d063f34b", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/294e9da6e2e0dd404e983daa5aa74253d92c05d0", + "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5" + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<3.4" + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "twig/twig": "~1.34|~2.4" + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/uid": "^5.1|^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).", @@ -4223,11 +5802,6 @@ "Resources/bin/var-dump-server" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { "files": [ "Resources/functions/dump.php" @@ -4253,34 +5827,126 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony mechanism for exploring and dumping PHP variables", + "description": "Provides mechanisms for walking through any arbitrary PHP variable", "homepage": "https://symfony.com", "keywords": [ "debug", "dump" ], - "time": "2019-06-05T02:08:12+00:00" + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v5.4.6" + }, + "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" + } + ], + "time": "2022-03-02T12:42:23+00:00" }, { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.1", + "name": "symfony/var-exporter", + "version": "v5.4.6", "source": { "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757" + "url": "https://github.com/symfony/var-exporter.git", + "reference": "49e2355fe6f59ea30c18ebb68edf13b7e20582e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", - "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/49e2355fe6f59ea30c18ebb68edf13b7e20582e5", + "reference": "49e2355fe6f59ea30c18ebb68edf13b7e20582e5", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "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": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.4.6" + }, + "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" + } + ], + "time": "2022-03-02T12:42:23+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c", + "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" }, "type": "library", "extra": { @@ -4306,33 +5972,45 @@ ], "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "time": "2017-11-27T11:13:29+00:00" + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4" + }, + "time": "2021-12-08T09:12:39+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v2.6.1", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" + "reference": "77e974614d2ead521f18069dccc571696f52b8dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", - "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/77e974614d2ead521f18069dccc571696f52b8dc", + "reference": "77e974614d2ead521f18069dccc571696f52b8dc", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/polyfill-ctype": "^1.9" + "php": "^5.5.9 || ^7.0 || ^8.0", + "phpoption/phpoption": "^1.7.3", + "symfony/polyfill-ctype": "^1.17" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.0" + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "ext-pcre": "*", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.21" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator.", + "ext-pcre": "Required to use most of the library." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -4345,10 +6023,15 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Vance Lucas", "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" + "homepage": "https://github.com/vlucas" } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", @@ -4357,108 +6040,126 @@ "env", "environment" ], - "time": "2019-01-29T11:11:52+00:00" + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v4.2.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2021-12-12T23:07:53+00:00" }, { - "name": "zendframework/zend-diactoros", - "version": "2.1.2", + "name": "voku/portable-ascii", + "version": "1.6.1", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-diactoros.git", - "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1" + "url": "https://github.com/voku/portable-ascii.git", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/37bf68b428850ee26ed7c3be6c26236dd95a95f1", - "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", "shasum": "" }, "require": { - "php": "^7.1", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" + "php": ">=7.0.0" }, "require-dev": { - "ext-dom": "*", - "ext-libxml": "*", - "http-interop/http-factory-tests": "^0.5.0", - "php-http/psr7-integration-tests": "dev-master", - "phpunit/phpunit": "^7.0.2", - "zendframework/zend-coding-standard": "~1.0.0" + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev", - "dev-develop": "2.2.x-dev", - "dev-release-1.8": "1.8.x-dev" - } - }, "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/marshal_uri_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php" - ], "psr-4": { - "Zend\\Diactoros\\": "src/" + "voku\\": "src/voku/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "PSR HTTP Message implementations", + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", "keywords": [ - "http", - "psr", - "psr-7" + "ascii", + "clean", + "php" ], - "time": "2019-04-29T21:11:00+00:00" + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/1.6.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-01-24T18:55:24+00:00" } ], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.2.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "a2c590166b2133a4633738648b6b064edae0814a" + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", - "reference": "a2c590166b2133a4633738648b6b064edae0814a", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "doctrine/coding-standard": "^9", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" @@ -4472,7 +6173,7 @@ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", @@ -4481,30 +6182,48 @@ "constructor", "instantiate" ], - "time": "2019-03-17T17:37:11+00:00" + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-03-03T08:28:38+00:00" }, { "name": "filp/whoops", - "version": "2.3.1", + "version": "2.14.5", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7" + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/bc0fd11bc455cc20ee4b5edabc63ebbf859324c7", - "reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7", + "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0", - "psr/log": "^1.0.1" + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "require-dev": { "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0" + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" }, "suggest": { "symfony/var-dumper": "Pretty print complex values better with var-dumper available", @@ -4513,7 +6232,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.7-dev" } }, "autoload": { @@ -4542,20 +6261,30 @@ "throwable", "whoops" ], - "time": "2018-10-23T09:00:00+00:00" + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.14.5" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2022-01-07T12:00:00+00:00" }, { "name": "fzaninotto/faker", - "version": "v1.8.0", + "version": "v1.9.2", "source": { "type": "git", "url": "https://github.com/fzaninotto/Faker.git", - "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de" + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de", - "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e", + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e", "shasum": "" }, "require": { @@ -4564,12 +6293,12 @@ "require-dev": { "ext-intl": "*", "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^1.5" + "squizlabs/php_codesniffer": "^2.9.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -4592,24 +6321,29 @@ "faker", "fixtures" ], - "time": "2018-07-12T10:23:15+00:00" + "support": { + "issues": "https://github.com/fzaninotto/Faker/issues", + "source": "https://github.com/fzaninotto/Faker/tree/v1.9.2" + }, + "abandoned": true, + "time": "2020-12-11T09:56:16+00:00" }, { "name": "hamcrest/hamcrest-php", - "version": "v2.0.0", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", - "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", "shasum": "" }, "require": { - "php": "^5.3|^7.0" + "php": "^5.3|^7.0|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -4617,14 +6351,13 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "1.3.3", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "^1.0" + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -4634,40 +6367,44 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD" + "BSD-3-Clause" ], "description": "This is the PHP port of Hamcrest Matchers", "keywords": [ "test" ], - "time": "2016-01-20T08:20:44+00:00" + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" }, { "name": "mockery/mockery", - "version": "1.2.2", + "version": "1.3.5", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2" + "reference": "472fa8ca4e55483d55ee1e73c963718c4393791d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2", - "reference": "0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2", + "url": "https://api.github.com/repos/mockery/mockery/zipball/472fa8ca4e55483d55ee1e73c963718c4393791d", + "reference": "472fa8ca4e55483d55ee1e73c963718c4393791d", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "~2.0", + "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", "php": ">=5.6.0" }, "require-dev": { - "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0" + "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -4705,41 +6442,46 @@ "test double", "testing" ], - "time": "2019-02-13T09:37:52+00:00" + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.3.5" + }, + "time": "2021-09-13T15:33:03+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.9.1", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4753,7 +6495,17 @@ "object", "object graph" ], - "time": "2019-04-07T13:18:21+00:00" + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" }, { "name": "phar-io/manifest", @@ -4808,6 +6560,10 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, "time": "2017-03-05T18:14:27+00:00" }, { @@ -4855,39 +6611,38 @@ } ], "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/master" + }, "time": "2017-03-05T17:38:23+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "1.0.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4909,44 +6664,46 @@ "reflection", "static analysis" ], - "time": "2017-09-11T18:02:19+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.1", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", - "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -4957,44 +6714,50 @@ { "name": "Mike van Riel", "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2019-04-30T17:48:53+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.4.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "ext-tokenizer": "*", + "psalm/phar": "^4.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -5007,42 +6770,47 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14T14:27:02+00:00" + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" + }, + "time": "2022-01-04T19:58:01+00:00" }, { "name": "phpspec/prophecy", - "version": "1.8.0", + "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + "reference": "451c3cd1418cf640de218914901e51b064abb093" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" }, "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", + "phpspec/phpspec": "^2.5 || ^3.2", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8.x-dev" + "dev-master": "1.10.x-dev" } }, "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -5070,7 +6838,11 @@ "spy", "stub" ], - "time": "2018-08-05T17:53:17+00:00" + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.10.3" + }, + "time": "2020-03-05T15:02:03+00:00" }, { "name": "phpunit/php-code-coverage", @@ -5133,6 +6905,10 @@ "testing", "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/5.3" + }, "time": "2018-04-06T15:36:58+00:00" }, { @@ -5180,6 +6956,11 @@ "filesystem", "iterator" ], + "support": { + "irc": "irc://irc.freenode.net/phpunit", + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/1.4.5" + }, "time": "2017-11-27T13:52:08+00:00" }, { @@ -5221,6 +7002,10 @@ "keywords": [ "template" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + }, "time": "2015-06-21T13:50:34+00:00" }, { @@ -5270,6 +7055,10 @@ "keywords": [ "timer" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/master" + }, "time": "2017-02-26T11:10:40+00:00" }, { @@ -5319,6 +7108,11 @@ "keywords": [ "tokenizer" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" + }, + "abandoned": true, "time": "2017-11-27T05:48:46+00:00" }, { @@ -5403,6 +7197,10 @@ "testing", "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/6.5.14" + }, "time": "2019-02-01T05:22:47+00:00" }, { @@ -5462,27 +7260,32 @@ "mock", "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit-mock-objects/issues", + "source": "https://github.com/sebastianbergmann/phpunit-mock-objects/tree/5.0.10" + }, + "abandoned": true, "time": "2018-08-09T05:50:03+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": ">=5.6" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { @@ -5507,7 +7310,17 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T08:15:22+00:00" }, { "name": "sebastian/comparator", @@ -5571,6 +7384,10 @@ "compare", "equality" ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/master" + }, "time": "2018-02-01T13:46:46+00:00" }, { @@ -5623,6 +7440,10 @@ "keywords": [ "diff" ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/master" + }, "time": "2017-08-03T08:09:46+00:00" }, { @@ -5673,29 +7494,33 @@ "environment", "hhvm" ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/master" + }, "time": "2017-07-01T08:51:00+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.0", + "version": "3.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", + "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", "shasum": "" }, "require": { - "php": "^7.0", + "php": ">=7.0", "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { @@ -5713,6 +7538,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -5721,17 +7550,13 @@ "name": "Volker Dusch", "email": "github@wallbash.com" }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Adam Harvey", "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", @@ -5740,7 +7565,17 @@ "export", "exporter" ], - "time": "2017-04-03T13:19:02+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-11-11T13:51:24+00:00" }, { "name": "sebastian/global-state", @@ -5791,24 +7626,28 @@ "keywords": [ "global state" ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0" + }, "time": "2017-04-27T15:39:26+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", "shasum": "" }, "require": { - "php": "^7.0", + "php": ">=7.0", "sebastian/object-reflector": "^1.1.1", "sebastian/recursion-context": "^3.0" }, @@ -5838,24 +7677,34 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:40:27+00:00" }, { "name": "sebastian/object-reflector", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" @@ -5883,24 +7732,34 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:37:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" @@ -5921,14 +7780,14 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, { "name": "Adam Harvey", "email": "aharvey@php.net" @@ -5936,7 +7795,17 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:34:24+00:00" }, { "name": "sebastian/resource-operations", @@ -5978,6 +7847,10 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/master" + }, "time": "2015-07-28T20:34:47+00:00" }, { @@ -6021,30 +7894,34 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/master" + }, "time": "2016-10-03T07:35:21+00:00" }, { "name": "symfony/thanks", - "version": "v1.1.0", + "version": "v1.2.10", "source": { "type": "git", "url": "https://github.com/symfony/thanks.git", - "reference": "9474a631b52737c623b6aeba22f00bbc003251da" + "reference": "e9c4709560296acbd4fe9e12b8d57a925aa7eae8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/thanks/zipball/9474a631b52737c623b6aeba22f00bbc003251da", - "reference": "9474a631b52737c623b6aeba22f00bbc003251da", + "url": "https://api.github.com/repos/symfony/thanks/zipball/e9c4709560296acbd4fe9e12b8d57a925aa7eae8", + "reference": "e9c4709560296acbd4fe9e12b8d57a925aa7eae8", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0", - "php": "^5.5.9|^7.0.0" + "composer-plugin-api": "^1.0|^2.0", + "php": ">=5.5.9" }, "type": "composer-plugin", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "1.2-dev" }, "class": "Symfony\\Thanks\\Thanks" }, @@ -6063,28 +7940,46 @@ "email": "p@tchwork.com" } ], - "description": "Give thanks (in the form of a GitHub ⭐) to your fellow PHP package maintainers (not limited to Symfony components)!", - "time": "2018-08-24T14:08:13+00:00" + "description": "Encourages sending ⭐ and 💵 to fellow PHP package maintainers (not limited to Symfony components)!", + "support": { + "issues": "https://github.com/symfony/thanks/issues", + "source": "https://github.com/symfony/thanks/tree/v1.2.10" + }, + "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" + } + ], + "time": "2020-10-14T17:47:37+00:00" }, { "name": "theseer/tokenizer", - "version": "1.1.2", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/1c42705be2b6c1de5904f8afacef5895cab44bf8", - "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -6104,34 +7999,47 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-04-04T09:56:43+00:00" + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" }, { "name": "webmozart/assert", - "version": "1.4.0", + "version": "1.10.0", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", + "php": "^7.2 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^8.5.13" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.10-dev" } }, "autoload": { @@ -6155,7 +8063,11 @@ "check", "validate" ], - "time": "2018-12-25T11:19:39+00:00" + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], @@ -6164,7 +8076,8 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=7.0.0" + "php": ">=7.1.3" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "2.2.0" } diff --git a/config/app.php b/config/app.php index cf4738c3..329996ae 100644 --- a/config/app.php +++ b/config/app.php @@ -14,7 +14,7 @@ return [ */ 'name' => env('APP_NAME', 'Heimdall'), - 'version' => '2.2.3', + 'version' => '2.2.4', /* |-------------------------------------------------------------------------- diff --git a/config/session.php b/config/session.php index 736fb3c7..e9324843 100644 --- a/config/session.php +++ b/config/session.php @@ -164,7 +164,7 @@ return [ | */ - 'secure' => env('SESSION_SECURE_COOKIE', false), + 'secure' => env('SESSION_SECURE_COOKIE', null), /* |-------------------------------------------------------------------------- diff --git a/resources/views/items/preview.blade.php b/resources/views/items/preview.blade.php index 0a3dc8cb..4c1ab42c 100644 --- a/resources/views/items/preview.blade.php +++ b/resources/views/items/preview.blade.php @@ -16,6 +16,7 @@ link_target !!} href="{{ $item->link }}"> + @if(isset($item->id)) - + @endif diff --git a/vendor/bin/carbon b/vendor/bin/carbon new file mode 100644 index 00000000..d6da140b --- /dev/null +++ b/vendor/bin/carbon @@ -0,0 +1,117 @@ +#!/usr/bin/env php +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_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/nesbot/carbon/bin/carbon'); + exit(0); + } +} + +include __DIR__ . '/..'.'/nesbot/carbon/bin/carbon'; diff --git a/vendor/bin/carbon.bat b/vendor/bin/carbon.bat new file mode 100644 index 00000000..806cf153 --- /dev/null +++ b/vendor/bin/carbon.bat @@ -0,0 +1,5 @@ +@ECHO OFF +setlocal DISABLEDELAYEDEXPANSION +SET BIN_TARGET=%~dp0/carbon +SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 +php "%BIN_TARGET%" %* diff --git a/vendor/bin/commonmark b/vendor/bin/commonmark new file mode 100644 index 00000000..f6895294 --- /dev/null +++ b/vendor/bin/commonmark @@ -0,0 +1,117 @@ +#!/usr/bin/env php +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_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/league/commonmark/bin/commonmark'); + exit(0); + } +} + +include __DIR__ . '/..'.'/league/commonmark/bin/commonmark'; diff --git a/vendor/bin/commonmark.bat b/vendor/bin/commonmark.bat new file mode 100644 index 00000000..dceb0e6b --- /dev/null +++ b/vendor/bin/commonmark.bat @@ -0,0 +1,5 @@ +@ECHO OFF +setlocal DISABLEDELAYEDEXPANSION +SET BIN_TARGET=%~dp0/commonmark +SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 +php "%BIN_TARGET%" %* diff --git a/vendor/bin/patch-type-declarations b/vendor/bin/patch-type-declarations new file mode 100644 index 00000000..36cc892e --- /dev/null +++ b/vendor/bin/patch-type-declarations @@ -0,0 +1,117 @@ +#!/usr/bin/env php +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_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/error-handler/Resources/bin/patch-type-declarations'); + exit(0); + } +} + +include __DIR__ . '/..'.'/symfony/error-handler/Resources/bin/patch-type-declarations'; diff --git a/vendor/bin/patch-type-declarations.bat b/vendor/bin/patch-type-declarations.bat new file mode 100644 index 00000000..2b070796 --- /dev/null +++ b/vendor/bin/patch-type-declarations.bat @@ -0,0 +1,5 @@ +@ECHO OFF +setlocal DISABLEDELAYEDEXPANSION +SET BIN_TARGET=%~dp0/patch-type-declarations +SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 +php "%BIN_TARGET%" %* diff --git a/vendor/bin/php-parse b/vendor/bin/php-parse index 062d66a3..80f0e486 120000 --- a/vendor/bin/php-parse +++ b/vendor/bin/php-parse @@ -1 +1,117 @@ -../nikic/php-parser/bin/php-parse \ No newline at end of file +#!/usr/bin/env php +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_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/nikic/php-parser/bin/php-parse'); + exit(0); + } +} + +include __DIR__ . '/..'.'/nikic/php-parser/bin/php-parse'; diff --git a/vendor/bin/php-parse.bat b/vendor/bin/php-parse.bat new file mode 100644 index 00000000..2c5096dc --- /dev/null +++ b/vendor/bin/php-parse.bat @@ -0,0 +1,5 @@ +@ECHO OFF +setlocal DISABLEDELAYEDEXPANSION +SET BIN_TARGET=%~dp0/php-parse +SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 +php "%BIN_TARGET%" %* diff --git a/vendor/bin/psysh b/vendor/bin/psysh index 3c06b1ae..c10304ba 120000 --- a/vendor/bin/psysh +++ b/vendor/bin/psysh @@ -1 +1,117 @@ -../psy/psysh/bin/psysh \ No newline at end of file +#!/usr/bin/env php +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_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/psy/psysh/bin/psysh'); + exit(0); + } +} + +include __DIR__ . '/..'.'/psy/psysh/bin/psysh'; diff --git a/vendor/bin/psysh.bat b/vendor/bin/psysh.bat new file mode 100644 index 00000000..2f47770e --- /dev/null +++ b/vendor/bin/psysh.bat @@ -0,0 +1,5 @@ +@ECHO OFF +setlocal DISABLEDELAYEDEXPANSION +SET BIN_TARGET=%~dp0/psysh +SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 +php "%BIN_TARGET%" %* diff --git a/vendor/bin/var-dump-server b/vendor/bin/var-dump-server index 6bd4e93d..527f3ed4 120000 --- a/vendor/bin/var-dump-server +++ b/vendor/bin/var-dump-server @@ -1 +1,117 @@ -../symfony/var-dumper/Resources/bin/var-dump-server \ No newline at end of file +#!/usr/bin/env php +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_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server'); + exit(0); + } +} + +include __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server'; diff --git a/vendor/bin/var-dump-server.bat b/vendor/bin/var-dump-server.bat new file mode 100644 index 00000000..94333da5 --- /dev/null +++ b/vendor/bin/var-dump-server.bat @@ -0,0 +1,5 @@ +@ECHO OFF +setlocal DISABLEDELAYEDEXPANSION +SET BIN_TARGET=%~dp0/var-dump-server +SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 +php "%BIN_TARGET%" %* diff --git a/vendor/brick/math/CHANGELOG.md b/vendor/brick/math/CHANGELOG.md new file mode 100644 index 00000000..03c3d824 --- /dev/null +++ b/vendor/brick/math/CHANGELOG.md @@ -0,0 +1,415 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [0.9.3](https://github.com/brick/math/releases/tag/0.9.3) - 2021-08-15 + +🚀 **Compatibility with PHP 8.1** + +- Support for custom object serialization; this removes a warning on PHP 8.1 due to the `Serializable` interface being deprecated (thanks @TRowbotham) + +## [0.9.2](https://github.com/brick/math/releases/tag/0.9.2) - 2021-01-20 + +🐛 **Bug fix** + +- Incorrect results could be returned when using the BCMath calculator, with a default scale set with `bcscale()`, on PHP >= 7.2 (#55). + +## [0.9.1](https://github.com/brick/math/releases/tag/0.9.1) - 2020-08-19 + +✨ New features + +- `BigInteger::not()` returns the bitwise `NOT` value + +🐛 **Bug fixes** + +- `BigInteger::toBytes()` could return an incorrect binary representation for some numbers +- The bitwise operations `and()`, `or()`, `xor()` on `BigInteger` could return an incorrect result when the GMP extension is not available + +## [0.9.0](https://github.com/brick/math/releases/tag/0.9.0) - 2020-08-18 + +👌 **Improvements** + +- `BigNumber::of()` now accepts `.123` and `123.` formats, both of which return a `BigDecimal` + +💥 **Breaking changes** + +- Deprecated method `BigInteger::powerMod()` has been removed - use `modPow()` instead +- Deprecated method `BigInteger::parse()` has been removed - use `fromBase()` instead + +## [0.8.17](https://github.com/brick/math/releases/tag/0.8.17) - 2020-08-19 + +🐛 **Bug fix** + +- `BigInteger::toBytes()` could return an incorrect binary representation for some numbers +- The bitwise operations `and()`, `or()`, `xor()` on `BigInteger` could return an incorrect result when the GMP extension is not available + +## [0.8.16](https://github.com/brick/math/releases/tag/0.8.16) - 2020-08-18 + +🚑 **Critical fix** + +- This version reintroduces the deprecated `BigInteger::parse()` method, that has been removed by mistake in version `0.8.9` and should have lasted for the whole `0.8` release cycle. + +✨ **New features** + +- `BigInteger::modInverse()` calculates a modular multiplicative inverse +- `BigInteger::fromBytes()` creates a `BigInteger` from a byte string +- `BigInteger::toBytes()` converts a `BigInteger` to a byte string +- `BigInteger::randomBits()` creates a pseudo-random `BigInteger` of a given bit length +- `BigInteger::randomRange()` creates a pseudo-random `BigInteger` between two bounds + +💩 **Deprecations** + +- `BigInteger::powerMod()` is now deprecated in favour of `modPow()` + +## [0.8.15](https://github.com/brick/math/releases/tag/0.8.15) - 2020-04-15 + +🐛 **Fixes** + +- added missing `ext-json` requirement, due to `BigNumber` implementing `JsonSerializable` + +⚡️ **Optimizations** + +- additional optimization in `BigInteger::remainder()` + +## [0.8.14](https://github.com/brick/math/releases/tag/0.8.14) - 2020-02-18 + +✨ **New features** + +- `BigInteger::getLowestSetBit()` returns the index of the rightmost one bit + +## [0.8.13](https://github.com/brick/math/releases/tag/0.8.13) - 2020-02-16 + +✨ **New features** + +- `BigInteger::isEven()` tests whether the number is even +- `BigInteger::isOdd()` tests whether the number is odd +- `BigInteger::testBit()` tests if a bit is set +- `BigInteger::getBitLength()` returns the number of bits in the minimal representation of the number + +## [0.8.12](https://github.com/brick/math/releases/tag/0.8.12) - 2020-02-03 + +🛠️ **Maintenance release** + +Classes are now annotated for better static analysis with [psalm](https://psalm.dev/). + +This is a maintenance release: no bug fixes, no new features, no breaking changes. + +## [0.8.11](https://github.com/brick/math/releases/tag/0.8.11) - 2020-01-23 + +✨ **New feature** + +`BigInteger::powerMod()` performs a power-with-modulo operation. Useful for crypto. + +## [0.8.10](https://github.com/brick/math/releases/tag/0.8.10) - 2020-01-21 + +✨ **New feature** + +`BigInteger::mod()` returns the **modulo** of two numbers. The *modulo* differs from the *remainder* when the signs of the operands are different. + +## [0.8.9](https://github.com/brick/math/releases/tag/0.8.9) - 2020-01-08 + +⚡️ **Performance improvements** + +A few additional optimizations in `BigInteger` and `BigDecimal` when one of the operands can be returned as is. Thanks to @tomtomsen in #24. + +## [0.8.8](https://github.com/brick/math/releases/tag/0.8.8) - 2019-04-25 + +🐛 **Bug fixes** + +- `BigInteger::toBase()` could return an empty string for zero values (BCMath & Native calculators only, GMP calculator unaffected) + +✨ **New features** + +- `BigInteger::toArbitraryBase()` converts a number to an arbitrary base, using a custom alphabet +- `BigInteger::fromArbitraryBase()` converts a string in an arbitrary base, using a custom alphabet, back to a number + +These methods can be used as the foundation to convert strings between different bases/alphabets, using BigInteger as an intermediate representation. + +💩 **Deprecations** + +- `BigInteger::parse()` is now deprecated in favour of `fromBase()` + +`BigInteger::fromBase()` works the same way as `parse()`, with 2 minor differences: + +- the `$base` parameter is required, it does not default to `10` +- it throws a `NumberFormatException` instead of an `InvalidArgumentException` when the number is malformed + +## [0.8.7](https://github.com/brick/math/releases/tag/0.8.7) - 2019-04-20 + +**Improvements** + +- Safer conversion from `float` when using custom locales +- **Much faster** `NativeCalculator` implementation 🚀 + +You can expect **at least a 3x performance improvement** for common arithmetic operations when using the library on systems without GMP or BCMath; it gets exponentially faster on multiplications with a high number of digits. This is due to calculations now being performed on whole blocks of digits (the block size depending on the platform, 32-bit or 64-bit) instead of digit-by-digit as before. + +## [0.8.6](https://github.com/brick/math/releases/tag/0.8.6) - 2019-04-11 + +**New method** + +`BigNumber::sum()` returns the sum of one or more numbers. + +## [0.8.5](https://github.com/brick/math/releases/tag/0.8.5) - 2019-02-12 + +**Bug fix**: `of()` factory methods could fail when passing a `float` in environments using a `LC_NUMERIC` locale with a decimal separator other than `'.'` (#20). + +Thanks @manowark 👍 + +## [0.8.4](https://github.com/brick/math/releases/tag/0.8.4) - 2018-12-07 + +**New method** + +`BigDecimal::sqrt()` calculates the square root of a decimal number, to a given scale. + +## [0.8.3](https://github.com/brick/math/releases/tag/0.8.3) - 2018-12-06 + +**New method** + +`BigInteger::sqrt()` calculates the square root of a number (thanks @peter279k). + +**New exception** + +`NegativeNumberException` is thrown when calling `sqrt()` on a negative number. + +## [0.8.2](https://github.com/brick/math/releases/tag/0.8.2) - 2018-11-08 + +**Performance update** + +- Further improvement of `toInt()` performance +- `NativeCalculator` can now perform some multiplications more efficiently + +## [0.8.1](https://github.com/brick/math/releases/tag/0.8.1) - 2018-11-07 + +Performance optimization of `toInt()` methods. + +## [0.8.0](https://github.com/brick/math/releases/tag/0.8.0) - 2018-10-13 + +**Breaking changes** + +The following deprecated methods have been removed. Use the new method name instead: + +| Method removed | Replacement method | +| --- | --- | +| `BigDecimal::getIntegral()` | `BigDecimal::getIntegralPart()` | +| `BigDecimal::getFraction()` | `BigDecimal::getFractionalPart()` | + +--- + +**New features** + +`BigInteger` has been augmented with 5 new methods for bitwise operations: + +| New method | Description | +| --- | --- | +| `and()` | performs a bitwise `AND` operation on two numbers | +| `or()` | performs a bitwise `OR` operation on two numbers | +| `xor()` | performs a bitwise `XOR` operation on two numbers | +| `shiftedLeft()` | returns the number shifted left by a number of bits | +| `shiftedRight()` | returns the number shifted right by a number of bits | + +Thanks to @DASPRiD 👍 + +## [0.7.3](https://github.com/brick/math/releases/tag/0.7.3) - 2018-08-20 + +**New method:** `BigDecimal::hasNonZeroFractionalPart()` + +**Renamed/deprecated methods:** + +- `BigDecimal::getIntegral()` has been renamed to `getIntegralPart()` and is now deprecated +- `BigDecimal::getFraction()` has been renamed to `getFractionalPart()` and is now deprecated + +## [0.7.2](https://github.com/brick/math/releases/tag/0.7.2) - 2018-07-21 + +**Performance update** + +`BigInteger::parse()` and `toBase()` now use GMP's built-in base conversion features when available. + +## [0.7.1](https://github.com/brick/math/releases/tag/0.7.1) - 2018-03-01 + +This is a maintenance release, no code has been changed. + +- When installed with `--no-dev`, the autoloader does not autoload tests anymore +- Tests and other files unnecessary for production are excluded from the dist package + +This will help make installations more compact. + +## [0.7.0](https://github.com/brick/math/releases/tag/0.7.0) - 2017-10-02 + +Methods renamed: + +- `BigNumber:sign()` has been renamed to `getSign()` +- `BigDecimal::unscaledValue()` has been renamed to `getUnscaledValue()` +- `BigDecimal::scale()` has been renamed to `getScale()` +- `BigDecimal::integral()` has been renamed to `getIntegral()` +- `BigDecimal::fraction()` has been renamed to `getFraction()` +- `BigRational::numerator()` has been renamed to `getNumerator()` +- `BigRational::denominator()` has been renamed to `getDenominator()` + +Classes renamed: + +- `ArithmeticException` has been renamed to `MathException` + +## [0.6.2](https://github.com/brick/math/releases/tag/0.6.2) - 2017-10-02 + +The base class for all exceptions is now `MathException`. +`ArithmeticException` has been deprecated, and will be removed in 0.7.0. + +## [0.6.1](https://github.com/brick/math/releases/tag/0.6.1) - 2017-10-02 + +A number of methods have been renamed: + +- `BigNumber:sign()` is deprecated; use `getSign()` instead +- `BigDecimal::unscaledValue()` is deprecated; use `getUnscaledValue()` instead +- `BigDecimal::scale()` is deprecated; use `getScale()` instead +- `BigDecimal::integral()` is deprecated; use `getIntegral()` instead +- `BigDecimal::fraction()` is deprecated; use `getFraction()` instead +- `BigRational::numerator()` is deprecated; use `getNumerator()` instead +- `BigRational::denominator()` is deprecated; use `getDenominator()` instead + +The old methods will be removed in version 0.7.0. + +## [0.6.0](https://github.com/brick/math/releases/tag/0.6.0) - 2017-08-25 + +- Minimum PHP version is now [7.1](https://gophp71.org/); for PHP 5.6 and PHP 7.0 support, use version `0.5` +- Deprecated method `BigDecimal::withScale()` has been removed; use `toScale()` instead +- Method `BigNumber::toInteger()` has been renamed to `toInt()` + +## [0.5.4](https://github.com/brick/math/releases/tag/0.5.4) - 2016-10-17 + +`BigNumber` classes now implement [JsonSerializable](http://php.net/manual/en/class.jsonserializable.php). +The JSON output is always a string. + +## [0.5.3](https://github.com/brick/math/releases/tag/0.5.3) - 2016-03-31 + +This is a bugfix release. Dividing by a negative power of 1 with the same scale as the dividend could trigger an incorrect optimization which resulted in a wrong result. See #6. + +## [0.5.2](https://github.com/brick/math/releases/tag/0.5.2) - 2015-08-06 + +The `$scale` parameter of `BigDecimal::dividedBy()` is now optional again. + +## [0.5.1](https://github.com/brick/math/releases/tag/0.5.1) - 2015-07-05 + +**New method: `BigNumber::toScale()`** + +This allows to convert any `BigNumber` to a `BigDecimal` with a given scale, using rounding if necessary. + +## [0.5.0](https://github.com/brick/math/releases/tag/0.5.0) - 2015-07-04 + +**New features** +- Common `BigNumber` interface for all classes, with the following methods: + - `sign()` and derived methods (`isZero()`, `isPositive()`, ...) + - `compareTo()` and derived methods (`isEqualTo()`, `isGreaterThan()`, ...) that work across different `BigNumber` types + - `toBigInteger()`, `toBigDecimal()`, `toBigRational`() conversion methods + - `toInteger()` and `toFloat()` conversion methods to native types +- Unified `of()` behaviour: every class now accepts any type of number, provided that it can be safely converted to the current type +- New method: `BigDecimal::exactlyDividedBy()`; this method automatically computes the scale of the result, provided that the division yields a finite number of digits +- New methods: `BigRational::quotient()` and `remainder()` +- Fine-grained exceptions: `DivisionByZeroException`, `RoundingNecessaryException`, `NumberFormatException` +- Factory methods `zero()`, `one()` and `ten()` available in all classes +- Rounding mode reintroduced in `BigInteger::dividedBy()` + +This release also comes with many performance improvements. + +--- + +**Breaking changes** +- `BigInteger`: + - `getSign()` is renamed to `sign()` + - `toString()` is renamed to `toBase()` + - `BigInteger::dividedBy()` now throws an exception by default if the remainder is not zero; use `quotient()` to get the previous behaviour +- `BigDecimal`: + - `getSign()` is renamed to `sign()` + - `getUnscaledValue()` is renamed to `unscaledValue()` + - `getScale()` is renamed to `scale()` + - `getIntegral()` is renamed to `integral()` + - `getFraction()` is renamed to `fraction()` + - `divideAndRemainder()` is renamed to `quotientAndRemainder()` + - `dividedBy()` now takes a **mandatory** `$scale` parameter **before** the rounding mode + - `toBigInteger()` does not accept a `$roundingMode` parameter any more + - `toBigRational()` does not simplify the fraction any more; explicitly add `->simplified()` to get the previous behaviour +- `BigRational`: + - `getSign()` is renamed to `sign()` + - `getNumerator()` is renamed to `numerator()` + - `getDenominator()` is renamed to `denominator()` + - `of()` is renamed to `nd()`, while `parse()` is renamed to `of()` +- Miscellaneous: + - `ArithmeticException` is moved to an `Exception\` sub-namespace + - `of()` factory methods now throw `NumberFormatException` instead of `InvalidArgumentException` + +## [0.4.3](https://github.com/brick/math/releases/tag/0.4.3) - 2016-03-31 + +Backport of two bug fixes from the 0.5 branch: +- `BigInteger::parse()` did not always throw `InvalidArgumentException` as expected +- Dividing by a negative power of 1 with the same scale as the dividend could trigger an incorrect optimization which resulted in a wrong result. See #6. + +## [0.4.2](https://github.com/brick/math/releases/tag/0.4.2) - 2015-06-16 + +New method: `BigDecimal::stripTrailingZeros()` + +## [0.4.1](https://github.com/brick/math/releases/tag/0.4.1) - 2015-06-12 + +Introducing a `BigRational` class, to perform calculations on fractions of any size. + +## [0.4.0](https://github.com/brick/math/releases/tag/0.4.0) - 2015-06-12 + +Rounding modes have been removed from `BigInteger`, and are now a concept specific to `BigDecimal`. + +`BigInteger::dividedBy()` now always returns the quotient of the division. + +## [0.3.5](https://github.com/brick/math/releases/tag/0.3.5) - 2016-03-31 + +Backport of two bug fixes from the 0.5 branch: + +- `BigInteger::parse()` did not always throw `InvalidArgumentException` as expected +- Dividing by a negative power of 1 with the same scale as the dividend could trigger an incorrect optimization which resulted in a wrong result. See #6. + +## [0.3.4](https://github.com/brick/math/releases/tag/0.3.4) - 2015-06-11 + +New methods: +- `BigInteger::remainder()` returns the remainder of a division only +- `BigInteger::gcd()` returns the greatest common divisor of two numbers + +## [0.3.3](https://github.com/brick/math/releases/tag/0.3.3) - 2015-06-07 + +Fix `toString()` not handling negative numbers. + +## [0.3.2](https://github.com/brick/math/releases/tag/0.3.2) - 2015-06-07 + +`BigInteger` and `BigDecimal` now have a `getSign()` method that returns: +- `-1` if the number is negative +- `0` if the number is zero +- `1` if the number is positive + +## [0.3.1](https://github.com/brick/math/releases/tag/0.3.1) - 2015-06-05 + +Minor performance improvements + +## [0.3.0](https://github.com/brick/math/releases/tag/0.3.0) - 2015-06-04 + +The `$roundingMode` and `$scale` parameters have been swapped in `BigDecimal::dividedBy()`. + +## [0.2.2](https://github.com/brick/math/releases/tag/0.2.2) - 2015-06-04 + +Stronger immutability guarantee for `BigInteger` and `BigDecimal`. + +So far, it would have been possible to break immutability of these classes by calling the `unserialize()` internal function. This release fixes that. + +## [0.2.1](https://github.com/brick/math/releases/tag/0.2.1) - 2015-06-02 + +Added `BigDecimal::divideAndRemainder()` + +## [0.2.0](https://github.com/brick/math/releases/tag/0.2.0) - 2015-05-22 + +- `min()` and `max()` do not accept an `array` any more, but a variable number of parameters +- **minimum PHP version is now 5.6** +- continuous integration with PHP 7 + +## [0.1.1](https://github.com/brick/math/releases/tag/0.1.1) - 2014-09-01 + +- Added `BigInteger::power()` +- Added HHVM support + +## [0.1.0](https://github.com/brick/math/releases/tag/0.1.0) - 2014-08-31 + +First beta release. + diff --git a/vendor/brick/math/LICENSE b/vendor/brick/math/LICENSE new file mode 100644 index 00000000..f9b724f0 --- /dev/null +++ b/vendor/brick/math/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-present Benjamin Morel + +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. diff --git a/vendor/brick/math/SECURITY.md b/vendor/brick/math/SECURITY.md new file mode 100644 index 00000000..cc8289bb --- /dev/null +++ b/vendor/brick/math/SECURITY.md @@ -0,0 +1,17 @@ +# Security Policy + +## Supported Versions + +Only the last two release streams are supported. + +| Version | Supported | +| ------- | ------------------ | +| 0.9.x | :white_check_mark: | +| 0.8.x | :white_check_mark: | +| < 0.8 | :x: | + +## Reporting a Vulnerability + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. diff --git a/vendor/brick/math/composer.json b/vendor/brick/math/composer.json new file mode 100644 index 00000000..ec196632 --- /dev/null +++ b/vendor/brick/math/composer.json @@ -0,0 +1,35 @@ +{ + "name": "brick/math", + "description": "Arbitrary-precision arithmetic library", + "type": "library", + "keywords": [ + "Brick", + "Math", + "Arbitrary-precision", + "Arithmetic", + "BigInteger", + "BigDecimal", + "BigRational", + "Bignum" + ], + "license": "MIT", + "require": { + "php": "^7.1 || ^8.0", + "ext-json": "*" + }, + "require-dev": { + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "php-coveralls/php-coveralls": "^2.2", + "vimeo/psalm": "4.9.2" + }, + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Brick\\Math\\Tests\\": "tests/" + } + } +} diff --git a/vendor/brick/math/src/BigDecimal.php b/vendor/brick/math/src/BigDecimal.php new file mode 100644 index 00000000..78246500 --- /dev/null +++ b/vendor/brick/math/src/BigDecimal.php @@ -0,0 +1,895 @@ +value = $value; + $this->scale = $scale; + } + + /** + * Creates a BigDecimal of the given value. + * + * @param BigNumber|int|float|string $value + * + * @return BigDecimal + * + * @throws MathException If the value cannot be converted to a BigDecimal. + * + * @psalm-pure + */ + public static function of($value) : BigNumber + { + return parent::of($value)->toBigDecimal(); + } + + /** + * Creates a BigDecimal from an unscaled value and a scale. + * + * Example: `(12345, 3)` will result in the BigDecimal `12.345`. + * + * @param BigNumber|int|float|string $value The unscaled value. Must be convertible to a BigInteger. + * @param int $scale The scale of the number, positive or zero. + * + * @return BigDecimal + * + * @throws \InvalidArgumentException If the scale is negative. + * + * @psalm-pure + */ + public static function ofUnscaledValue($value, int $scale = 0) : BigDecimal + { + if ($scale < 0) { + throw new \InvalidArgumentException('The scale cannot be negative.'); + } + + return new BigDecimal((string) BigInteger::of($value), $scale); + } + + /** + * Returns a BigDecimal representing zero, with a scale of zero. + * + * @return BigDecimal + * + * @psalm-pure + */ + public static function zero() : BigDecimal + { + /** + * @psalm-suppress ImpureStaticVariable + * @var BigDecimal|null $zero + */ + static $zero; + + if ($zero === null) { + $zero = new BigDecimal('0'); + } + + return $zero; + } + + /** + * Returns a BigDecimal representing one, with a scale of zero. + * + * @return BigDecimal + * + * @psalm-pure + */ + public static function one() : BigDecimal + { + /** + * @psalm-suppress ImpureStaticVariable + * @var BigDecimal|null $one + */ + static $one; + + if ($one === null) { + $one = new BigDecimal('1'); + } + + return $one; + } + + /** + * Returns a BigDecimal representing ten, with a scale of zero. + * + * @return BigDecimal + * + * @psalm-pure + */ + public static function ten() : BigDecimal + { + /** + * @psalm-suppress ImpureStaticVariable + * @var BigDecimal|null $ten + */ + static $ten; + + if ($ten === null) { + $ten = new BigDecimal('10'); + } + + return $ten; + } + + /** + * Returns the sum of this number and the given one. + * + * The result has a scale of `max($this->scale, $that->scale)`. + * + * @param BigNumber|int|float|string $that The number to add. Must be convertible to a BigDecimal. + * + * @return BigDecimal The result. + * + * @throws MathException If the number is not valid, or is not convertible to a BigDecimal. + */ + public function plus($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->value === '0' && $that->scale <= $this->scale) { + return $this; + } + + if ($this->value === '0' && $this->scale <= $that->scale) { + return $that; + } + + [$a, $b] = $this->scaleValues($this, $that); + + $value = Calculator::get()->add($a, $b); + $scale = $this->scale > $that->scale ? $this->scale : $that->scale; + + return new BigDecimal($value, $scale); + } + + /** + * Returns the difference of this number and the given one. + * + * The result has a scale of `max($this->scale, $that->scale)`. + * + * @param BigNumber|int|float|string $that The number to subtract. Must be convertible to a BigDecimal. + * + * @return BigDecimal The result. + * + * @throws MathException If the number is not valid, or is not convertible to a BigDecimal. + */ + public function minus($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->value === '0' && $that->scale <= $this->scale) { + return $this; + } + + [$a, $b] = $this->scaleValues($this, $that); + + $value = Calculator::get()->sub($a, $b); + $scale = $this->scale > $that->scale ? $this->scale : $that->scale; + + return new BigDecimal($value, $scale); + } + + /** + * Returns the product of this number and the given one. + * + * The result has a scale of `$this->scale + $that->scale`. + * + * @param BigNumber|int|float|string $that The multiplier. Must be convertible to a BigDecimal. + * + * @return BigDecimal The result. + * + * @throws MathException If the multiplier is not a valid number, or is not convertible to a BigDecimal. + */ + public function multipliedBy($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->value === '1' && $that->scale === 0) { + return $this; + } + + if ($this->value === '1' && $this->scale === 0) { + return $that; + } + + $value = Calculator::get()->mul($this->value, $that->value); + $scale = $this->scale + $that->scale; + + return new BigDecimal($value, $scale); + } + + /** + * Returns the result of the division of this number by the given one, at the given scale. + * + * @param BigNumber|int|float|string $that The divisor. + * @param int|null $scale The desired scale, or null to use the scale of this number. + * @param int $roundingMode An optional rounding mode. + * + * @return BigDecimal + * + * @throws \InvalidArgumentException If the scale or rounding mode is invalid. + * @throws MathException If the number is invalid, is zero, or rounding was necessary. + */ + public function dividedBy($that, ?int $scale = null, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->isZero()) { + throw DivisionByZeroException::divisionByZero(); + } + + if ($scale === null) { + $scale = $this->scale; + } elseif ($scale < 0) { + throw new \InvalidArgumentException('Scale cannot be negative.'); + } + + if ($that->value === '1' && $that->scale === 0 && $scale === $this->scale) { + return $this; + } + + $p = $this->valueWithMinScale($that->scale + $scale); + $q = $that->valueWithMinScale($this->scale - $scale); + + $result = Calculator::get()->divRound($p, $q, $roundingMode); + + return new BigDecimal($result, $scale); + } + + /** + * Returns the exact result of the division of this number by the given one. + * + * The scale of the result is automatically calculated to fit all the fraction digits. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal. + * + * @return BigDecimal The result. + * + * @throws MathException If the divisor is not a valid number, is not convertible to a BigDecimal, is zero, + * or the result yields an infinite number of digits. + */ + public function exactlyDividedBy($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + [, $b] = $this->scaleValues($this, $that); + + $d = \rtrim($b, '0'); + $scale = \strlen($b) - \strlen($d); + + $calculator = Calculator::get(); + + foreach ([5, 2] as $prime) { + for (;;) { + $lastDigit = (int) $d[-1]; + + if ($lastDigit % $prime !== 0) { + break; + } + + $d = $calculator->divQ($d, (string) $prime); + $scale++; + } + } + + return $this->dividedBy($that, $scale)->stripTrailingZeros(); + } + + /** + * Returns this number exponentiated to the given value. + * + * The result has a scale of `$this->scale * $exponent`. + * + * @param int $exponent The exponent. + * + * @return BigDecimal The result. + * + * @throws \InvalidArgumentException If the exponent is not in the range 0 to 1,000,000. + */ + public function power(int $exponent) : BigDecimal + { + if ($exponent === 0) { + return BigDecimal::one(); + } + + if ($exponent === 1) { + return $this; + } + + if ($exponent < 0 || $exponent > Calculator::MAX_POWER) { + throw new \InvalidArgumentException(\sprintf( + 'The exponent %d is not in the range 0 to %d.', + $exponent, + Calculator::MAX_POWER + )); + } + + return new BigDecimal(Calculator::get()->pow($this->value, $exponent), $this->scale * $exponent); + } + + /** + * Returns the quotient of the division of this number by this given one. + * + * The quotient has a scale of `0`. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal. + * + * @return BigDecimal The quotient. + * + * @throws MathException If the divisor is not a valid decimal number, or is zero. + */ + public function quotient($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->isZero()) { + throw DivisionByZeroException::divisionByZero(); + } + + $p = $this->valueWithMinScale($that->scale); + $q = $that->valueWithMinScale($this->scale); + + $quotient = Calculator::get()->divQ($p, $q); + + return new BigDecimal($quotient, 0); + } + + /** + * Returns the remainder of the division of this number by this given one. + * + * The remainder has a scale of `max($this->scale, $that->scale)`. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal. + * + * @return BigDecimal The remainder. + * + * @throws MathException If the divisor is not a valid decimal number, or is zero. + */ + public function remainder($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->isZero()) { + throw DivisionByZeroException::divisionByZero(); + } + + $p = $this->valueWithMinScale($that->scale); + $q = $that->valueWithMinScale($this->scale); + + $remainder = Calculator::get()->divR($p, $q); + + $scale = $this->scale > $that->scale ? $this->scale : $that->scale; + + return new BigDecimal($remainder, $scale); + } + + /** + * Returns the quotient and remainder of the division of this number by the given one. + * + * The quotient has a scale of `0`, and the remainder has a scale of `max($this->scale, $that->scale)`. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal. + * + * @return BigDecimal[] An array containing the quotient and the remainder. + * + * @throws MathException If the divisor is not a valid decimal number, or is zero. + */ + public function quotientAndRemainder($that) : array + { + $that = BigDecimal::of($that); + + if ($that->isZero()) { + throw DivisionByZeroException::divisionByZero(); + } + + $p = $this->valueWithMinScale($that->scale); + $q = $that->valueWithMinScale($this->scale); + + [$quotient, $remainder] = Calculator::get()->divQR($p, $q); + + $scale = $this->scale > $that->scale ? $this->scale : $that->scale; + + $quotient = new BigDecimal($quotient, 0); + $remainder = new BigDecimal($remainder, $scale); + + return [$quotient, $remainder]; + } + + /** + * Returns the square root of this number, rounded down to the given number of decimals. + * + * @param int $scale + * + * @return BigDecimal + * + * @throws \InvalidArgumentException If the scale is negative. + * @throws NegativeNumberException If this number is negative. + */ + public function sqrt(int $scale) : BigDecimal + { + if ($scale < 0) { + throw new \InvalidArgumentException('Scale cannot be negative.'); + } + + if ($this->value === '0') { + return new BigDecimal('0', $scale); + } + + if ($this->value[0] === '-') { + throw new NegativeNumberException('Cannot calculate the square root of a negative number.'); + } + + $value = $this->value; + $addDigits = 2 * $scale - $this->scale; + + if ($addDigits > 0) { + // add zeros + $value .= \str_repeat('0', $addDigits); + } elseif ($addDigits < 0) { + // trim digits + if (-$addDigits >= \strlen($this->value)) { + // requesting a scale too low, will always yield a zero result + return new BigDecimal('0', $scale); + } + + $value = \substr($value, 0, $addDigits); + } + + $value = Calculator::get()->sqrt($value); + + return new BigDecimal($value, $scale); + } + + /** + * Returns a copy of this BigDecimal with the decimal point moved $n places to the left. + * + * @param int $n + * + * @return BigDecimal + */ + public function withPointMovedLeft(int $n) : BigDecimal + { + if ($n === 0) { + return $this; + } + + if ($n < 0) { + return $this->withPointMovedRight(-$n); + } + + return new BigDecimal($this->value, $this->scale + $n); + } + + /** + * Returns a copy of this BigDecimal with the decimal point moved $n places to the right. + * + * @param int $n + * + * @return BigDecimal + */ + public function withPointMovedRight(int $n) : BigDecimal + { + if ($n === 0) { + return $this; + } + + if ($n < 0) { + return $this->withPointMovedLeft(-$n); + } + + $value = $this->value; + $scale = $this->scale - $n; + + if ($scale < 0) { + if ($value !== '0') { + $value .= \str_repeat('0', -$scale); + } + $scale = 0; + } + + return new BigDecimal($value, $scale); + } + + /** + * Returns a copy of this BigDecimal with any trailing zeros removed from the fractional part. + * + * @return BigDecimal + */ + public function stripTrailingZeros() : BigDecimal + { + if ($this->scale === 0) { + return $this; + } + + $trimmedValue = \rtrim($this->value, '0'); + + if ($trimmedValue === '') { + return BigDecimal::zero(); + } + + $trimmableZeros = \strlen($this->value) - \strlen($trimmedValue); + + if ($trimmableZeros === 0) { + return $this; + } + + if ($trimmableZeros > $this->scale) { + $trimmableZeros = $this->scale; + } + + $value = \substr($this->value, 0, -$trimmableZeros); + $scale = $this->scale - $trimmableZeros; + + return new BigDecimal($value, $scale); + } + + /** + * Returns the absolute value of this number. + * + * @return BigDecimal + */ + public function abs() : BigDecimal + { + return $this->isNegative() ? $this->negated() : $this; + } + + /** + * Returns the negated value of this number. + * + * @return BigDecimal + */ + public function negated() : BigDecimal + { + return new BigDecimal(Calculator::get()->neg($this->value), $this->scale); + } + + /** + * {@inheritdoc} + */ + public function compareTo($that) : int + { + $that = BigNumber::of($that); + + if ($that instanceof BigInteger) { + $that = $that->toBigDecimal(); + } + + if ($that instanceof BigDecimal) { + [$a, $b] = $this->scaleValues($this, $that); + + return Calculator::get()->cmp($a, $b); + } + + return - $that->compareTo($this); + } + + /** + * {@inheritdoc} + */ + public function getSign() : int + { + return ($this->value === '0') ? 0 : (($this->value[0] === '-') ? -1 : 1); + } + + /** + * @return BigInteger + */ + public function getUnscaledValue() : BigInteger + { + return BigInteger::create($this->value); + } + + /** + * @return int + */ + public function getScale() : int + { + return $this->scale; + } + + /** + * Returns a string representing the integral part of this decimal number. + * + * Example: `-123.456` => `-123`. + * + * @return string + */ + public function getIntegralPart() : string + { + if ($this->scale === 0) { + return $this->value; + } + + $value = $this->getUnscaledValueWithLeadingZeros(); + + return \substr($value, 0, -$this->scale); + } + + /** + * Returns a string representing the fractional part of this decimal number. + * + * If the scale is zero, an empty string is returned. + * + * Examples: `-123.456` => '456', `123` => ''. + * + * @return string + */ + public function getFractionalPart() : string + { + if ($this->scale === 0) { + return ''; + } + + $value = $this->getUnscaledValueWithLeadingZeros(); + + return \substr($value, -$this->scale); + } + + /** + * Returns whether this decimal number has a non-zero fractional part. + * + * @return bool + */ + public function hasNonZeroFractionalPart() : bool + { + return $this->getFractionalPart() !== \str_repeat('0', $this->scale); + } + + /** + * {@inheritdoc} + */ + public function toBigInteger() : BigInteger + { + $zeroScaleDecimal = $this->scale === 0 ? $this : $this->dividedBy(1, 0); + + return BigInteger::create($zeroScaleDecimal->value); + } + + /** + * {@inheritdoc} + */ + public function toBigDecimal() : BigDecimal + { + return $this; + } + + /** + * {@inheritdoc} + */ + public function toBigRational() : BigRational + { + $numerator = BigInteger::create($this->value); + $denominator = BigInteger::create('1' . \str_repeat('0', $this->scale)); + + return BigRational::create($numerator, $denominator, false); + } + + /** + * {@inheritdoc} + */ + public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal + { + if ($scale === $this->scale) { + return $this; + } + + return $this->dividedBy(BigDecimal::one(), $scale, $roundingMode); + } + + /** + * {@inheritdoc} + */ + public function toInt() : int + { + return $this->toBigInteger()->toInt(); + } + + /** + * {@inheritdoc} + */ + public function toFloat() : float + { + return (float) (string) $this; + } + + /** + * {@inheritdoc} + */ + public function __toString() : string + { + if ($this->scale === 0) { + return $this->value; + } + + $value = $this->getUnscaledValueWithLeadingZeros(); + + return \substr($value, 0, -$this->scale) . '.' . \substr($value, -$this->scale); + } + + /** + * This method is required for serializing the object and SHOULD NOT be accessed directly. + * + * @internal + * + * @return array{value: string, scale: int} + */ + public function __serialize(): array + { + return ['value' => $this->value, 'scale' => $this->scale]; + } + + /** + * This method is only here to allow unserializing the object and cannot be accessed directly. + * + * @internal + * @psalm-suppress RedundantPropertyInitializationCheck + * + * @param array{value: string, scale: int} $data + * + * @return void + * + * @throws \LogicException + */ + public function __unserialize(array $data): void + { + if (isset($this->value)) { + throw new \LogicException('__unserialize() is an internal function, it must not be called directly.'); + } + + $this->value = $data['value']; + $this->scale = $data['scale']; + } + + /** + * This method is required by interface Serializable and SHOULD NOT be accessed directly. + * + * @internal + * + * @return string + */ + public function serialize() : string + { + return $this->value . ':' . $this->scale; + } + + /** + * This method is only here to implement interface Serializable and cannot be accessed directly. + * + * @internal + * @psalm-suppress RedundantPropertyInitializationCheck + * + * @param string $value + * + * @return void + * + * @throws \LogicException + */ + public function unserialize($value) : void + { + if (isset($this->value)) { + throw new \LogicException('unserialize() is an internal function, it must not be called directly.'); + } + + [$value, $scale] = \explode(':', $value); + + $this->value = $value; + $this->scale = (int) $scale; + } + + /** + * Puts the internal values of the given decimal numbers on the same scale. + * + * @param BigDecimal $x The first decimal number. + * @param BigDecimal $y The second decimal number. + * + * @return array{string, string} The scaled integer values of $x and $y. + */ + private function scaleValues(BigDecimal $x, BigDecimal $y) : array + { + $a = $x->value; + $b = $y->value; + + if ($b !== '0' && $x->scale > $y->scale) { + $b .= \str_repeat('0', $x->scale - $y->scale); + } elseif ($a !== '0' && $x->scale < $y->scale) { + $a .= \str_repeat('0', $y->scale - $x->scale); + } + + return [$a, $b]; + } + + /** + * @param int $scale + * + * @return string + */ + private function valueWithMinScale(int $scale) : string + { + $value = $this->value; + + if ($this->value !== '0' && $scale > $this->scale) { + $value .= \str_repeat('0', $scale - $this->scale); + } + + return $value; + } + + /** + * Adds leading zeros if necessary to the unscaled value to represent the full decimal number. + * + * @return string + */ + private function getUnscaledValueWithLeadingZeros() : string + { + $value = $this->value; + $targetLength = $this->scale + 1; + $negative = ($value[0] === '-'); + $length = \strlen($value); + + if ($negative) { + $length--; + } + + if ($length >= $targetLength) { + return $this->value; + } + + if ($negative) { + $value = \substr($value, 1); + } + + $value = \str_pad($value, $targetLength, '0', STR_PAD_LEFT); + + if ($negative) { + $value = '-' . $value; + } + + return $value; + } +} diff --git a/vendor/brick/math/src/BigInteger.php b/vendor/brick/math/src/BigInteger.php new file mode 100644 index 00000000..f213fbed --- /dev/null +++ b/vendor/brick/math/src/BigInteger.php @@ -0,0 +1,1184 @@ +value = $value; + } + + /** + * Creates a BigInteger of the given value. + * + * @param BigNumber|int|float|string $value + * + * @return BigInteger + * + * @throws MathException If the value cannot be converted to a BigInteger. + * + * @psalm-pure + */ + public static function of($value) : BigNumber + { + return parent::of($value)->toBigInteger(); + } + + /** + * Creates a number from a string in a given base. + * + * The string can optionally be prefixed with the `+` or `-` sign. + * + * Bases greater than 36 are not supported by this method, as there is no clear consensus on which of the lowercase + * or uppercase characters should come first. Instead, this method accepts any base up to 36, and does not + * differentiate lowercase and uppercase characters, which are considered equal. + * + * For bases greater than 36, and/or custom alphabets, use the fromArbitraryBase() method. + * + * @param string $number The number to convert, in the given base. + * @param int $base The base of the number, between 2 and 36. + * + * @return BigInteger + * + * @throws NumberFormatException If the number is empty, or contains invalid chars for the given base. + * @throws \InvalidArgumentException If the base is out of range. + * + * @psalm-pure + */ + public static function fromBase(string $number, int $base) : BigInteger + { + if ($number === '') { + throw new NumberFormatException('The number cannot be empty.'); + } + + if ($base < 2 || $base > 36) { + throw new \InvalidArgumentException(\sprintf('Base %d is not in range 2 to 36.', $base)); + } + + if ($number[0] === '-') { + $sign = '-'; + $number = \substr($number, 1); + } elseif ($number[0] === '+') { + $sign = ''; + $number = \substr($number, 1); + } else { + $sign = ''; + } + + if ($number === '') { + throw new NumberFormatException('The number cannot be empty.'); + } + + $number = \ltrim($number, '0'); + + if ($number === '') { + // The result will be the same in any base, avoid further calculation. + return BigInteger::zero(); + } + + if ($number === '1') { + // The result will be the same in any base, avoid further calculation. + return new BigInteger($sign . '1'); + } + + $pattern = '/[^' . \substr(Calculator::ALPHABET, 0, $base) . ']/'; + + if (\preg_match($pattern, \strtolower($number), $matches) === 1) { + throw new NumberFormatException(\sprintf('"%s" is not a valid character in base %d.', $matches[0], $base)); + } + + if ($base === 10) { + // The number is usable as is, avoid further calculation. + return new BigInteger($sign . $number); + } + + $result = Calculator::get()->fromBase($number, $base); + + return new BigInteger($sign . $result); + } + + /** + * Parses a string containing an integer in an arbitrary base, using a custom alphabet. + * + * Because this method accepts an alphabet with any character, including dash, it does not handle negative numbers. + * + * @param string $number The number to parse. + * @param string $alphabet The alphabet, for example '01' for base 2, or '01234567' for base 8. + * + * @return BigInteger + * + * @throws NumberFormatException If the given number is empty or contains invalid chars for the given alphabet. + * @throws \InvalidArgumentException If the alphabet does not contain at least 2 chars. + * + * @psalm-pure + */ + public static function fromArbitraryBase(string $number, string $alphabet) : BigInteger + { + if ($number === '') { + throw new NumberFormatException('The number cannot be empty.'); + } + + $base = \strlen($alphabet); + + if ($base < 2) { + throw new \InvalidArgumentException('The alphabet must contain at least 2 chars.'); + } + + $pattern = '/[^' . \preg_quote($alphabet, '/') . ']/'; + + if (\preg_match($pattern, $number, $matches) === 1) { + throw NumberFormatException::charNotInAlphabet($matches[0]); + } + + $number = Calculator::get()->fromArbitraryBase($number, $alphabet, $base); + + return new BigInteger($number); + } + + /** + * Translates a string of bytes containing the binary representation of a BigInteger into a BigInteger. + * + * The input string is assumed to be in big-endian byte-order: the most significant byte is in the zeroth element. + * + * If `$signed` is true, the input is assumed to be in two's-complement representation, and the leading bit is + * interpreted as a sign bit. If `$signed` is false, the input is interpreted as an unsigned number, and the + * resulting BigInteger will always be positive or zero. + * + * This method can be used to retrieve a number exported by `toBytes()`, as long as the `$signed` flags match. + * + * @param string $value The byte string. + * @param bool $signed Whether to interpret as a signed number in two's-complement representation with a leading + * sign bit. + * + * @return BigInteger + * + * @throws NumberFormatException If the string is empty. + */ + public static function fromBytes(string $value, bool $signed = true) : BigInteger + { + if ($value === '') { + throw new NumberFormatException('The byte string must not be empty.'); + } + + $twosComplement = false; + + if ($signed) { + $x = \ord($value[0]); + + if (($twosComplement = ($x >= 0x80))) { + $value = ~$value; + } + } + + $number = self::fromBase(\bin2hex($value), 16); + + if ($twosComplement) { + return $number->plus(1)->negated(); + } + + return $number; + } + + /** + * Generates a pseudo-random number in the range 0 to 2^numBits - 1. + * + * Using the default random bytes generator, this method is suitable for cryptographic use. + * + * @psalm-param callable(int): string $randomBytesGenerator + * + * @param int $numBits The number of bits. + * @param callable|null $randomBytesGenerator A function that accepts a number of bytes as an integer, and returns a + * string of random bytes of the given length. Defaults to the + * `random_bytes()` function. + * + * @return BigInteger + * + * @throws \InvalidArgumentException If $numBits is negative. + */ + public static function randomBits(int $numBits, ?callable $randomBytesGenerator = null) : BigInteger + { + if ($numBits < 0) { + throw new \InvalidArgumentException('The number of bits cannot be negative.'); + } + + if ($numBits === 0) { + return BigInteger::zero(); + } + + if ($randomBytesGenerator === null) { + $randomBytesGenerator = 'random_bytes'; + } + + $byteLength = \intdiv($numBits - 1, 8) + 1; + + $extraBits = ($byteLength * 8 - $numBits); + $bitmask = \chr(0xFF >> $extraBits); + + $randomBytes = $randomBytesGenerator($byteLength); + $randomBytes[0] = $randomBytes[0] & $bitmask; + + return self::fromBytes($randomBytes, false); + } + + /** + * Generates a pseudo-random number between `$min` and `$max`. + * + * Using the default random bytes generator, this method is suitable for cryptographic use. + * + * @psalm-param (callable(int): string)|null $randomBytesGenerator + * + * @param BigNumber|int|float|string $min The lower bound. Must be convertible to a BigInteger. + * @param BigNumber|int|float|string $max The upper bound. Must be convertible to a BigInteger. + * @param callable|null $randomBytesGenerator A function that accepts a number of bytes as an integer, + * and returns a string of random bytes of the given length. + * Defaults to the `random_bytes()` function. + * + * @return BigInteger + * + * @throws MathException If one of the parameters cannot be converted to a BigInteger, + * or `$min` is greater than `$max`. + */ + public static function randomRange($min, $max, ?callable $randomBytesGenerator = null) : BigInteger + { + $min = BigInteger::of($min); + $max = BigInteger::of($max); + + if ($min->isGreaterThan($max)) { + throw new MathException('$min cannot be greater than $max.'); + } + + if ($min->isEqualTo($max)) { + return $min; + } + + $diff = $max->minus($min); + $bitLength = $diff->getBitLength(); + + // try until the number is in range (50% to 100% chance of success) + do { + $randomNumber = self::randomBits($bitLength, $randomBytesGenerator); + } while ($randomNumber->isGreaterThan($diff)); + + return $randomNumber->plus($min); + } + + /** + * Returns a BigInteger representing zero. + * + * @return BigInteger + * + * @psalm-pure + */ + public static function zero() : BigInteger + { + /** + * @psalm-suppress ImpureStaticVariable + * @var BigInteger|null $zero + */ + static $zero; + + if ($zero === null) { + $zero = new BigInteger('0'); + } + + return $zero; + } + + /** + * Returns a BigInteger representing one. + * + * @return BigInteger + * + * @psalm-pure + */ + public static function one() : BigInteger + { + /** + * @psalm-suppress ImpureStaticVariable + * @var BigInteger|null $one + */ + static $one; + + if ($one === null) { + $one = new BigInteger('1'); + } + + return $one; + } + + /** + * Returns a BigInteger representing ten. + * + * @return BigInteger + * + * @psalm-pure + */ + public static function ten() : BigInteger + { + /** + * @psalm-suppress ImpureStaticVariable + * @var BigInteger|null $ten + */ + static $ten; + + if ($ten === null) { + $ten = new BigInteger('10'); + } + + return $ten; + } + + /** + * Returns the sum of this number and the given one. + * + * @param BigNumber|int|float|string $that The number to add. Must be convertible to a BigInteger. + * + * @return BigInteger The result. + * + * @throws MathException If the number is not valid, or is not convertible to a BigInteger. + */ + public function plus($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '0') { + return $this; + } + + if ($this->value === '0') { + return $that; + } + + $value = Calculator::get()->add($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the difference of this number and the given one. + * + * @param BigNumber|int|float|string $that The number to subtract. Must be convertible to a BigInteger. + * + * @return BigInteger The result. + * + * @throws MathException If the number is not valid, or is not convertible to a BigInteger. + */ + public function minus($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '0') { + return $this; + } + + $value = Calculator::get()->sub($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the product of this number and the given one. + * + * @param BigNumber|int|float|string $that The multiplier. Must be convertible to a BigInteger. + * + * @return BigInteger The result. + * + * @throws MathException If the multiplier is not a valid number, or is not convertible to a BigInteger. + */ + public function multipliedBy($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '1') { + return $this; + } + + if ($this->value === '1') { + return $that; + } + + $value = Calculator::get()->mul($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the result of the division of this number by the given one. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * @param int $roundingMode An optional rounding mode. + * + * @return BigInteger The result. + * + * @throws MathException If the divisor is not a valid number, is not convertible to a BigInteger, is zero, + * or RoundingMode::UNNECESSARY is used and the remainder is not zero. + */ + public function dividedBy($that, int $roundingMode = RoundingMode::UNNECESSARY) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '1') { + return $this; + } + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + $result = Calculator::get()->divRound($this->value, $that->value, $roundingMode); + + return new BigInteger($result); + } + + /** + * Returns this number exponentiated to the given value. + * + * @param int $exponent The exponent. + * + * @return BigInteger The result. + * + * @throws \InvalidArgumentException If the exponent is not in the range 0 to 1,000,000. + */ + public function power(int $exponent) : BigInteger + { + if ($exponent === 0) { + return BigInteger::one(); + } + + if ($exponent === 1) { + return $this; + } + + if ($exponent < 0 || $exponent > Calculator::MAX_POWER) { + throw new \InvalidArgumentException(\sprintf( + 'The exponent %d is not in the range 0 to %d.', + $exponent, + Calculator::MAX_POWER + )); + } + + return new BigInteger(Calculator::get()->pow($this->value, $exponent)); + } + + /** + * Returns the quotient of the division of this number by the given one. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return BigInteger + * + * @throws DivisionByZeroException If the divisor is zero. + */ + public function quotient($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '1') { + return $this; + } + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + $quotient = Calculator::get()->divQ($this->value, $that->value); + + return new BigInteger($quotient); + } + + /** + * Returns the remainder of the division of this number by the given one. + * + * The remainder, when non-zero, has the same sign as the dividend. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return BigInteger + * + * @throws DivisionByZeroException If the divisor is zero. + */ + public function remainder($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '1') { + return BigInteger::zero(); + } + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + $remainder = Calculator::get()->divR($this->value, $that->value); + + return new BigInteger($remainder); + } + + /** + * Returns the quotient and remainder of the division of this number by the given one. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return BigInteger[] An array containing the quotient and the remainder. + * + * @throws DivisionByZeroException If the divisor is zero. + */ + public function quotientAndRemainder($that) : array + { + $that = BigInteger::of($that); + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + [$quotient, $remainder] = Calculator::get()->divQR($this->value, $that->value); + + return [ + new BigInteger($quotient), + new BigInteger($remainder) + ]; + } + + /** + * Returns the modulo of this number and the given one. + * + * The modulo operation yields the same result as the remainder operation when both operands are of the same sign, + * and may differ when signs are different. + * + * The result of the modulo operation, when non-zero, has the same sign as the divisor. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return BigInteger + * + * @throws DivisionByZeroException If the divisor is zero. + */ + public function mod($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '0') { + throw DivisionByZeroException::modulusMustNotBeZero(); + } + + $value = Calculator::get()->mod($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the modular multiplicative inverse of this BigInteger modulo $m. + * + * @param BigInteger $m + * + * @return BigInteger + * + * @throws DivisionByZeroException If $m is zero. + * @throws NegativeNumberException If $m is negative. + * @throws MathException If this BigInteger has no multiplicative inverse mod m (that is, this BigInteger + * is not relatively prime to m). + */ + public function modInverse(BigInteger $m) : BigInteger + { + if ($m->value === '0') { + throw DivisionByZeroException::modulusMustNotBeZero(); + } + + if ($m->isNegative()) { + throw new NegativeNumberException('Modulus must not be negative.'); + } + + if ($m->value === '1') { + return BigInteger::zero(); + } + + $value = Calculator::get()->modInverse($this->value, $m->value); + + if ($value === null) { + throw new MathException('Unable to compute the modInverse for the given modulus.'); + } + + return new BigInteger($value); + } + + /** + * Returns this number raised into power with modulo. + * + * This operation only works on positive numbers. + * + * @param BigNumber|int|float|string $exp The exponent. Must be positive or zero. + * @param BigNumber|int|float|string $mod The modulus. Must be strictly positive. + * + * @return BigInteger + * + * @throws NegativeNumberException If any of the operands is negative. + * @throws DivisionByZeroException If the modulus is zero. + */ + public function modPow($exp, $mod) : BigInteger + { + $exp = BigInteger::of($exp); + $mod = BigInteger::of($mod); + + if ($this->isNegative() || $exp->isNegative() || $mod->isNegative()) { + throw new NegativeNumberException('The operands cannot be negative.'); + } + + if ($mod->isZero()) { + throw DivisionByZeroException::modulusMustNotBeZero(); + } + + $result = Calculator::get()->modPow($this->value, $exp->value, $mod->value); + + return new BigInteger($result); + } + + /** + * Returns the greatest common divisor of this number and the given one. + * + * The GCD is always positive, unless both operands are zero, in which case it is zero. + * + * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number. + * + * @return BigInteger + */ + public function gcd($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '0' && $this->value[0] !== '-') { + return $this; + } + + if ($this->value === '0' && $that->value[0] !== '-') { + return $that; + } + + $value = Calculator::get()->gcd($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the integer square root number of this number, rounded down. + * + * The result is the largest x such that x² ≤ n. + * + * @return BigInteger + * + * @throws NegativeNumberException If this number is negative. + */ + public function sqrt() : BigInteger + { + if ($this->value[0] === '-') { + throw new NegativeNumberException('Cannot calculate the square root of a negative number.'); + } + + $value = Calculator::get()->sqrt($this->value); + + return new BigInteger($value); + } + + /** + * Returns the absolute value of this number. + * + * @return BigInteger + */ + public function abs() : BigInteger + { + return $this->isNegative() ? $this->negated() : $this; + } + + /** + * Returns the inverse of this number. + * + * @return BigInteger + */ + public function negated() : BigInteger + { + return new BigInteger(Calculator::get()->neg($this->value)); + } + + /** + * Returns the integer bitwise-and combined with another integer. + * + * This method returns a negative BigInteger if and only if both operands are negative. + * + * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number. + * + * @return BigInteger + */ + public function and($that) : BigInteger + { + $that = BigInteger::of($that); + + return new BigInteger(Calculator::get()->and($this->value, $that->value)); + } + + /** + * Returns the integer bitwise-or combined with another integer. + * + * This method returns a negative BigInteger if and only if either of the operands is negative. + * + * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number. + * + * @return BigInteger + */ + public function or($that) : BigInteger + { + $that = BigInteger::of($that); + + return new BigInteger(Calculator::get()->or($this->value, $that->value)); + } + + /** + * Returns the integer bitwise-xor combined with another integer. + * + * This method returns a negative BigInteger if and only if exactly one of the operands is negative. + * + * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number. + * + * @return BigInteger + */ + public function xor($that) : BigInteger + { + $that = BigInteger::of($that); + + return new BigInteger(Calculator::get()->xor($this->value, $that->value)); + } + + /** + * Returns the bitwise-not of this BigInteger. + * + * @return BigInteger + */ + public function not() : BigInteger + { + return $this->negated()->minus(1); + } + + /** + * Returns the integer left shifted by a given number of bits. + * + * @param int $distance The distance to shift. + * + * @return BigInteger + */ + public function shiftedLeft(int $distance) : BigInteger + { + if ($distance === 0) { + return $this; + } + + if ($distance < 0) { + return $this->shiftedRight(- $distance); + } + + return $this->multipliedBy(BigInteger::of(2)->power($distance)); + } + + /** + * Returns the integer right shifted by a given number of bits. + * + * @param int $distance The distance to shift. + * + * @return BigInteger + */ + public function shiftedRight(int $distance) : BigInteger + { + if ($distance === 0) { + return $this; + } + + if ($distance < 0) { + return $this->shiftedLeft(- $distance); + } + + $operand = BigInteger::of(2)->power($distance); + + if ($this->isPositiveOrZero()) { + return $this->quotient($operand); + } + + return $this->dividedBy($operand, RoundingMode::UP); + } + + /** + * Returns the number of bits in the minimal two's-complement representation of this BigInteger, excluding a sign bit. + * + * For positive BigIntegers, this is equivalent to the number of bits in the ordinary binary representation. + * Computes (ceil(log2(this < 0 ? -this : this+1))). + * + * @return int + */ + public function getBitLength() : int + { + if ($this->value === '0') { + return 0; + } + + if ($this->isNegative()) { + return $this->abs()->minus(1)->getBitLength(); + } + + return \strlen($this->toBase(2)); + } + + /** + * Returns the index of the rightmost (lowest-order) one bit in this BigInteger. + * + * Returns -1 if this BigInteger contains no one bits. + * + * @return int + */ + public function getLowestSetBit() : int + { + $n = $this; + $bitLength = $this->getBitLength(); + + for ($i = 0; $i <= $bitLength; $i++) { + if ($n->isOdd()) { + return $i; + } + + $n = $n->shiftedRight(1); + } + + return -1; + } + + /** + * Returns whether this number is even. + * + * @return bool + */ + public function isEven() : bool + { + return \in_array($this->value[-1], ['0', '2', '4', '6', '8'], true); + } + + /** + * Returns whether this number is odd. + * + * @return bool + */ + public function isOdd() : bool + { + return \in_array($this->value[-1], ['1', '3', '5', '7', '9'], true); + } + + /** + * Returns true if and only if the designated bit is set. + * + * Computes ((this & (1<shiftedRight($n)->isOdd(); + } + + /** + * {@inheritdoc} + */ + public function compareTo($that) : int + { + $that = BigNumber::of($that); + + if ($that instanceof BigInteger) { + return Calculator::get()->cmp($this->value, $that->value); + } + + return - $that->compareTo($this); + } + + /** + * {@inheritdoc} + */ + public function getSign() : int + { + return ($this->value === '0') ? 0 : (($this->value[0] === '-') ? -1 : 1); + } + + /** + * {@inheritdoc} + */ + public function toBigInteger() : BigInteger + { + return $this; + } + + /** + * {@inheritdoc} + */ + public function toBigDecimal() : BigDecimal + { + return BigDecimal::create($this->value); + } + + /** + * {@inheritdoc} + */ + public function toBigRational() : BigRational + { + return BigRational::create($this, BigInteger::one(), false); + } + + /** + * {@inheritdoc} + */ + public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal + { + return $this->toBigDecimal()->toScale($scale, $roundingMode); + } + + /** + * {@inheritdoc} + */ + public function toInt() : int + { + $intValue = (int) $this->value; + + if ($this->value !== (string) $intValue) { + throw IntegerOverflowException::toIntOverflow($this); + } + + return $intValue; + } + + /** + * {@inheritdoc} + */ + public function toFloat() : float + { + return (float) $this->value; + } + + /** + * Returns a string representation of this number in the given base. + * + * The output will always be lowercase for bases greater than 10. + * + * @param int $base + * + * @return string + * + * @throws \InvalidArgumentException If the base is out of range. + */ + public function toBase(int $base) : string + { + if ($base === 10) { + return $this->value; + } + + if ($base < 2 || $base > 36) { + throw new \InvalidArgumentException(\sprintf('Base %d is out of range [2, 36]', $base)); + } + + return Calculator::get()->toBase($this->value, $base); + } + + /** + * Returns a string representation of this number in an arbitrary base with a custom alphabet. + * + * Because this method accepts an alphabet with any character, including dash, it does not handle negative numbers; + * a NegativeNumberException will be thrown when attempting to call this method on a negative number. + * + * @param string $alphabet The alphabet, for example '01' for base 2, or '01234567' for base 8. + * + * @return string + * + * @throws NegativeNumberException If this number is negative. + * @throws \InvalidArgumentException If the given alphabet does not contain at least 2 chars. + */ + public function toArbitraryBase(string $alphabet) : string + { + $base = \strlen($alphabet); + + if ($base < 2) { + throw new \InvalidArgumentException('The alphabet must contain at least 2 chars.'); + } + + if ($this->value[0] === '-') { + throw new NegativeNumberException(__FUNCTION__ . '() does not support negative numbers.'); + } + + return Calculator::get()->toArbitraryBase($this->value, $alphabet, $base); + } + + /** + * Returns a string of bytes containing the binary representation of this BigInteger. + * + * The string is in big-endian byte-order: the most significant byte is in the zeroth element. + * + * If `$signed` is true, the output will be in two's-complement representation, and a sign bit will be prepended to + * the output. If `$signed` is false, no sign bit will be prepended, and this method will throw an exception if the + * number is negative. + * + * The string will contain the minimum number of bytes required to represent this BigInteger, including a sign bit + * if `$signed` is true. + * + * This representation is compatible with the `fromBytes()` factory method, as long as the `$signed` flags match. + * + * @param bool $signed Whether to output a signed number in two's-complement representation with a leading sign bit. + * + * @return string + * + * @throws NegativeNumberException If $signed is false, and the number is negative. + */ + public function toBytes(bool $signed = true) : string + { + if (! $signed && $this->isNegative()) { + throw new NegativeNumberException('Cannot convert a negative number to a byte string when $signed is false.'); + } + + $hex = $this->abs()->toBase(16); + + if (\strlen($hex) % 2 !== 0) { + $hex = '0' . $hex; + } + + $baseHexLength = \strlen($hex); + + if ($signed) { + if ($this->isNegative()) { + $bin = \hex2bin($hex); + assert($bin !== false); + + $hex = \bin2hex(~$bin); + $hex = self::fromBase($hex, 16)->plus(1)->toBase(16); + + $hexLength = \strlen($hex); + + if ($hexLength < $baseHexLength) { + $hex = \str_repeat('0', $baseHexLength - $hexLength) . $hex; + } + + if ($hex[0] < '8') { + $hex = 'FF' . $hex; + } + } else { + if ($hex[0] >= '8') { + $hex = '00' . $hex; + } + } + } + + return \hex2bin($hex); + } + + /** + * {@inheritdoc} + */ + public function __toString() : string + { + return $this->value; + } + + /** + * This method is required for serializing the object and SHOULD NOT be accessed directly. + * + * @internal + * + * @return array{value: string} + */ + public function __serialize(): array + { + return ['value' => $this->value]; + } + + /** + * This method is only here to allow unserializing the object and cannot be accessed directly. + * + * @internal + * @psalm-suppress RedundantPropertyInitializationCheck + * + * @param array{value: string} $data + * + * @return void + * + * @throws \LogicException + */ + public function __unserialize(array $data): void + { + if (isset($this->value)) { + throw new \LogicException('__unserialize() is an internal function, it must not be called directly.'); + } + + $this->value = $data['value']; + } + + /** + * This method is required by interface Serializable and SHOULD NOT be accessed directly. + * + * @internal + * + * @return string + */ + public function serialize() : string + { + return $this->value; + } + + /** + * This method is only here to implement interface Serializable and cannot be accessed directly. + * + * @internal + * @psalm-suppress RedundantPropertyInitializationCheck + * + * @param string $value + * + * @return void + * + * @throws \LogicException + */ + public function unserialize($value) : void + { + if (isset($this->value)) { + throw new \LogicException('unserialize() is an internal function, it must not be called directly.'); + } + + $this->value = $value; + } +} diff --git a/vendor/brick/math/src/BigNumber.php b/vendor/brick/math/src/BigNumber.php new file mode 100644 index 00000000..38c8c554 --- /dev/null +++ b/vendor/brick/math/src/BigNumber.php @@ -0,0 +1,572 @@ +[\-\+])?' . + '(?:' . + '(?:' . + '(?[0-9]+)?' . + '(?\.)?' . + '(?[0-9]+)?' . + '(?:[eE](?[\-\+]?[0-9]+))?' . + ')|(?:' . + '(?[0-9]+)' . + '\/?' . + '(?[0-9]+)' . + ')' . + ')' . + '$/'; + + /** + * Creates a BigNumber of the given value. + * + * The concrete return type is dependent on the given value, with the following rules: + * + * - BigNumber instances are returned as is + * - integer numbers are returned as BigInteger + * - floating point numbers are converted to a string then parsed as such + * - strings containing a `/` character are returned as BigRational + * - strings containing a `.` character or using an exponential notation are returned as BigDecimal + * - strings containing only digits with an optional leading `+` or `-` sign are returned as BigInteger + * + * @param BigNumber|int|float|string $value + * + * @return BigNumber + * + * @throws NumberFormatException If the format of the number is not valid. + * @throws DivisionByZeroException If the value represents a rational number with a denominator of zero. + * + * @psalm-pure + */ + public static function of($value) : BigNumber + { + if ($value instanceof BigNumber) { + return $value; + } + + if (\is_int($value)) { + return new BigInteger((string) $value); + } + + /** @psalm-suppress RedundantCastGivenDocblockType We cannot trust the untyped $value here! */ + $value = \is_float($value) ? self::floatToString($value) : (string) $value; + + $throw = static function() use ($value) : void { + throw new NumberFormatException(\sprintf( + 'The given value "%s" does not represent a valid number.', + $value + )); + }; + + if (\preg_match(self::PARSE_REGEXP, $value, $matches) !== 1) { + $throw(); + } + + $getMatch = static function(string $value) use ($matches) : ?string { + return isset($matches[$value]) && $matches[$value] !== '' ? $matches[$value] : null; + }; + + $sign = $getMatch('sign'); + $numerator = $getMatch('numerator'); + $denominator = $getMatch('denominator'); + + if ($numerator !== null) { + assert($denominator !== null); + + if ($sign !== null) { + $numerator = $sign . $numerator; + } + + $numerator = self::cleanUp($numerator); + $denominator = self::cleanUp($denominator); + + if ($denominator === '0') { + throw DivisionByZeroException::denominatorMustNotBeZero(); + } + + return new BigRational( + new BigInteger($numerator), + new BigInteger($denominator), + false + ); + } + + $point = $getMatch('point'); + $integral = $getMatch('integral'); + $fractional = $getMatch('fractional'); + $exponent = $getMatch('exponent'); + + if ($integral === null && $fractional === null) { + $throw(); + } + + if ($integral === null) { + $integral = '0'; + } + + if ($point !== null || $exponent !== null) { + $fractional = ($fractional ?? ''); + $exponent = ($exponent !== null) ? (int) $exponent : 0; + + if ($exponent === PHP_INT_MIN || $exponent === PHP_INT_MAX) { + throw new NumberFormatException('Exponent too large.'); + } + + $unscaledValue = self::cleanUp(($sign ?? ''). $integral . $fractional); + + $scale = \strlen($fractional) - $exponent; + + if ($scale < 0) { + if ($unscaledValue !== '0') { + $unscaledValue .= \str_repeat('0', - $scale); + } + $scale = 0; + } + + return new BigDecimal($unscaledValue, $scale); + } + + $integral = self::cleanUp(($sign ?? '') . $integral); + + return new BigInteger($integral); + } + + /** + * Safely converts float to string, avoiding locale-dependent issues. + * + * @see https://github.com/brick/math/pull/20 + * + * @param float $float + * + * @return string + * + * @psalm-pure + * @psalm-suppress ImpureFunctionCall + */ + private static function floatToString(float $float) : string + { + $currentLocale = \setlocale(LC_NUMERIC, '0'); + \setlocale(LC_NUMERIC, 'C'); + + $result = (string) $float; + + \setlocale(LC_NUMERIC, $currentLocale); + + return $result; + } + + /** + * Proxy method to access protected constructors from sibling classes. + * + * @internal + * + * @param mixed ...$args The arguments to the constructor. + * + * @return static + * + * @psalm-pure + * @psalm-suppress TooManyArguments + * @psalm-suppress UnsafeInstantiation + */ + protected static function create(... $args) : BigNumber + { + return new static(... $args); + } + + /** + * Returns the minimum of the given values. + * + * @param BigNumber|int|float|string ...$values The numbers to compare. All the numbers need to be convertible + * to an instance of the class this method is called on. + * + * @return static The minimum value. + * + * @throws \InvalidArgumentException If no values are given. + * @throws MathException If an argument is not valid. + * + * @psalm-suppress LessSpecificReturnStatement + * @psalm-suppress MoreSpecificReturnType + * @psalm-pure + */ + public static function min(...$values) : BigNumber + { + $min = null; + + foreach ($values as $value) { + $value = static::of($value); + + if ($min === null || $value->isLessThan($min)) { + $min = $value; + } + } + + if ($min === null) { + throw new \InvalidArgumentException(__METHOD__ . '() expects at least one value.'); + } + + return $min; + } + + /** + * Returns the maximum of the given values. + * + * @param BigNumber|int|float|string ...$values The numbers to compare. All the numbers need to be convertible + * to an instance of the class this method is called on. + * + * @return static The maximum value. + * + * @throws \InvalidArgumentException If no values are given. + * @throws MathException If an argument is not valid. + * + * @psalm-suppress LessSpecificReturnStatement + * @psalm-suppress MoreSpecificReturnType + * @psalm-pure + */ + public static function max(...$values) : BigNumber + { + $max = null; + + foreach ($values as $value) { + $value = static::of($value); + + if ($max === null || $value->isGreaterThan($max)) { + $max = $value; + } + } + + if ($max === null) { + throw new \InvalidArgumentException(__METHOD__ . '() expects at least one value.'); + } + + return $max; + } + + /** + * Returns the sum of the given values. + * + * @param BigNumber|int|float|string ...$values The numbers to add. All the numbers need to be convertible + * to an instance of the class this method is called on. + * + * @return static The sum. + * + * @throws \InvalidArgumentException If no values are given. + * @throws MathException If an argument is not valid. + * + * @psalm-suppress LessSpecificReturnStatement + * @psalm-suppress MoreSpecificReturnType + * @psalm-pure + */ + public static function sum(...$values) : BigNumber + { + /** @var BigNumber|null $sum */ + $sum = null; + + foreach ($values as $value) { + $value = static::of($value); + + $sum = $sum === null ? $value : self::add($sum, $value); + } + + if ($sum === null) { + throw new \InvalidArgumentException(__METHOD__ . '() expects at least one value.'); + } + + return $sum; + } + + /** + * Adds two BigNumber instances in the correct order to avoid a RoundingNecessaryException. + * + * @todo This could be better resolved by creating an abstract protected method in BigNumber, and leaving to + * concrete classes the responsibility to perform the addition themselves or delegate it to the given number, + * depending on their ability to perform the operation. This will also require a version bump because we're + * potentially breaking custom BigNumber implementations (if any...) + * + * @param BigNumber $a + * @param BigNumber $b + * + * @return BigNumber + * + * @psalm-pure + */ + private static function add(BigNumber $a, BigNumber $b) : BigNumber + { + if ($a instanceof BigRational) { + return $a->plus($b); + } + + if ($b instanceof BigRational) { + return $b->plus($a); + } + + if ($a instanceof BigDecimal) { + return $a->plus($b); + } + + if ($b instanceof BigDecimal) { + return $b->plus($a); + } + + /** @var BigInteger $a */ + + return $a->plus($b); + } + + /** + * Removes optional leading zeros and + sign from the given number. + * + * @param string $number The number, validated as a non-empty string of digits with optional leading sign. + * + * @return string + * + * @psalm-pure + */ + private static function cleanUp(string $number) : string + { + $firstChar = $number[0]; + + if ($firstChar === '+' || $firstChar === '-') { + $number = \substr($number, 1); + } + + $number = \ltrim($number, '0'); + + if ($number === '') { + return '0'; + } + + if ($firstChar === '-') { + return '-' . $number; + } + + return $number; + } + + /** + * Checks if this number is equal to the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isEqualTo($that) : bool + { + return $this->compareTo($that) === 0; + } + + /** + * Checks if this number is strictly lower than the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isLessThan($that) : bool + { + return $this->compareTo($that) < 0; + } + + /** + * Checks if this number is lower than or equal to the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isLessThanOrEqualTo($that) : bool + { + return $this->compareTo($that) <= 0; + } + + /** + * Checks if this number is strictly greater than the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isGreaterThan($that) : bool + { + return $this->compareTo($that) > 0; + } + + /** + * Checks if this number is greater than or equal to the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isGreaterThanOrEqualTo($that) : bool + { + return $this->compareTo($that) >= 0; + } + + /** + * Checks if this number equals zero. + * + * @return bool + */ + public function isZero() : bool + { + return $this->getSign() === 0; + } + + /** + * Checks if this number is strictly negative. + * + * @return bool + */ + public function isNegative() : bool + { + return $this->getSign() < 0; + } + + /** + * Checks if this number is negative or zero. + * + * @return bool + */ + public function isNegativeOrZero() : bool + { + return $this->getSign() <= 0; + } + + /** + * Checks if this number is strictly positive. + * + * @return bool + */ + public function isPositive() : bool + { + return $this->getSign() > 0; + } + + /** + * Checks if this number is positive or zero. + * + * @return bool + */ + public function isPositiveOrZero() : bool + { + return $this->getSign() >= 0; + } + + /** + * Returns the sign of this number. + * + * @return int -1 if the number is negative, 0 if zero, 1 if positive. + */ + abstract public function getSign() : int; + + /** + * Compares this number to the given one. + * + * @param BigNumber|int|float|string $that + * + * @return int [-1,0,1] If `$this` is lower than, equal to, or greater than `$that`. + * + * @throws MathException If the number is not valid. + */ + abstract public function compareTo($that) : int; + + /** + * Converts this number to a BigInteger. + * + * @return BigInteger The converted number. + * + * @throws RoundingNecessaryException If this number cannot be converted to a BigInteger without rounding. + */ + abstract public function toBigInteger() : BigInteger; + + /** + * Converts this number to a BigDecimal. + * + * @return BigDecimal The converted number. + * + * @throws RoundingNecessaryException If this number cannot be converted to a BigDecimal without rounding. + */ + abstract public function toBigDecimal() : BigDecimal; + + /** + * Converts this number to a BigRational. + * + * @return BigRational The converted number. + */ + abstract public function toBigRational() : BigRational; + + /** + * Converts this number to a BigDecimal with the given scale, using rounding if necessary. + * + * @param int $scale The scale of the resulting `BigDecimal`. + * @param int $roundingMode A `RoundingMode` constant. + * + * @return BigDecimal + * + * @throws RoundingNecessaryException If this number cannot be converted to the given scale without rounding. + * This only applies when RoundingMode::UNNECESSARY is used. + */ + abstract public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal; + + /** + * Returns the exact value of this number as a native integer. + * + * If this number cannot be converted to a native integer without losing precision, an exception is thrown. + * Note that the acceptable range for an integer depends on the platform and differs for 32-bit and 64-bit. + * + * @return int The converted value. + * + * @throws MathException If this number cannot be exactly converted to a native integer. + */ + abstract public function toInt() : int; + + /** + * Returns an approximation of this number as a floating-point value. + * + * Note that this method can discard information as the precision of a floating-point value + * is inherently limited. + * + * If the number is greater than the largest representable floating point number, positive infinity is returned. + * If the number is less than the smallest representable floating point number, negative infinity is returned. + * + * @return float The converted value. + */ + abstract public function toFloat() : float; + + /** + * Returns a string representation of this number. + * + * The output of this method can be parsed by the `of()` factory method; + * this will yield an object equal to this one, without any information loss. + * + * @return string + */ + abstract public function __toString() : string; + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : string + { + return $this->__toString(); + } +} diff --git a/vendor/brick/math/src/BigRational.php b/vendor/brick/math/src/BigRational.php new file mode 100644 index 00000000..bee094f7 --- /dev/null +++ b/vendor/brick/math/src/BigRational.php @@ -0,0 +1,523 @@ +isZero()) { + throw DivisionByZeroException::denominatorMustNotBeZero(); + } + + if ($denominator->isNegative()) { + $numerator = $numerator->negated(); + $denominator = $denominator->negated(); + } + } + + $this->numerator = $numerator; + $this->denominator = $denominator; + } + + /** + * Creates a BigRational of the given value. + * + * @param BigNumber|int|float|string $value + * + * @return BigRational + * + * @throws MathException If the value cannot be converted to a BigRational. + * + * @psalm-pure + */ + public static function of($value) : BigNumber + { + return parent::of($value)->toBigRational(); + } + + /** + * Creates a BigRational out of a numerator and a denominator. + * + * If the denominator is negative, the signs of both the numerator and the denominator + * will be inverted to ensure that the denominator is always positive. + * + * @param BigNumber|int|float|string $numerator The numerator. Must be convertible to a BigInteger. + * @param BigNumber|int|float|string $denominator The denominator. Must be convertible to a BigInteger. + * + * @return BigRational + * + * @throws NumberFormatException If an argument does not represent a valid number. + * @throws RoundingNecessaryException If an argument represents a non-integer number. + * @throws DivisionByZeroException If the denominator is zero. + * + * @psalm-pure + */ + public static function nd($numerator, $denominator) : BigRational + { + $numerator = BigInteger::of($numerator); + $denominator = BigInteger::of($denominator); + + return new BigRational($numerator, $denominator, true); + } + + /** + * Returns a BigRational representing zero. + * + * @return BigRational + * + * @psalm-pure + */ + public static function zero() : BigRational + { + /** + * @psalm-suppress ImpureStaticVariable + * @var BigRational|null $zero + */ + static $zero; + + if ($zero === null) { + $zero = new BigRational(BigInteger::zero(), BigInteger::one(), false); + } + + return $zero; + } + + /** + * Returns a BigRational representing one. + * + * @return BigRational + * + * @psalm-pure + */ + public static function one() : BigRational + { + /** + * @psalm-suppress ImpureStaticVariable + * @var BigRational|null $one + */ + static $one; + + if ($one === null) { + $one = new BigRational(BigInteger::one(), BigInteger::one(), false); + } + + return $one; + } + + /** + * Returns a BigRational representing ten. + * + * @return BigRational + * + * @psalm-pure + */ + public static function ten() : BigRational + { + /** + * @psalm-suppress ImpureStaticVariable + * @var BigRational|null $ten + */ + static $ten; + + if ($ten === null) { + $ten = new BigRational(BigInteger::ten(), BigInteger::one(), false); + } + + return $ten; + } + + /** + * @return BigInteger + */ + public function getNumerator() : BigInteger + { + return $this->numerator; + } + + /** + * @return BigInteger + */ + public function getDenominator() : BigInteger + { + return $this->denominator; + } + + /** + * Returns the quotient of the division of the numerator by the denominator. + * + * @return BigInteger + */ + public function quotient() : BigInteger + { + return $this->numerator->quotient($this->denominator); + } + + /** + * Returns the remainder of the division of the numerator by the denominator. + * + * @return BigInteger + */ + public function remainder() : BigInteger + { + return $this->numerator->remainder($this->denominator); + } + + /** + * Returns the quotient and remainder of the division of the numerator by the denominator. + * + * @return BigInteger[] + */ + public function quotientAndRemainder() : array + { + return $this->numerator->quotientAndRemainder($this->denominator); + } + + /** + * Returns the sum of this number and the given one. + * + * @param BigNumber|int|float|string $that The number to add. + * + * @return BigRational The result. + * + * @throws MathException If the number is not valid. + */ + public function plus($that) : BigRational + { + $that = BigRational::of($that); + + $numerator = $this->numerator->multipliedBy($that->denominator); + $numerator = $numerator->plus($that->numerator->multipliedBy($this->denominator)); + $denominator = $this->denominator->multipliedBy($that->denominator); + + return new BigRational($numerator, $denominator, false); + } + + /** + * Returns the difference of this number and the given one. + * + * @param BigNumber|int|float|string $that The number to subtract. + * + * @return BigRational The result. + * + * @throws MathException If the number is not valid. + */ + public function minus($that) : BigRational + { + $that = BigRational::of($that); + + $numerator = $this->numerator->multipliedBy($that->denominator); + $numerator = $numerator->minus($that->numerator->multipliedBy($this->denominator)); + $denominator = $this->denominator->multipliedBy($that->denominator); + + return new BigRational($numerator, $denominator, false); + } + + /** + * Returns the product of this number and the given one. + * + * @param BigNumber|int|float|string $that The multiplier. + * + * @return BigRational The result. + * + * @throws MathException If the multiplier is not a valid number. + */ + public function multipliedBy($that) : BigRational + { + $that = BigRational::of($that); + + $numerator = $this->numerator->multipliedBy($that->numerator); + $denominator = $this->denominator->multipliedBy($that->denominator); + + return new BigRational($numerator, $denominator, false); + } + + /** + * Returns the result of the division of this number by the given one. + * + * @param BigNumber|int|float|string $that The divisor. + * + * @return BigRational The result. + * + * @throws MathException If the divisor is not a valid number, or is zero. + */ + public function dividedBy($that) : BigRational + { + $that = BigRational::of($that); + + $numerator = $this->numerator->multipliedBy($that->denominator); + $denominator = $this->denominator->multipliedBy($that->numerator); + + return new BigRational($numerator, $denominator, true); + } + + /** + * Returns this number exponentiated to the given value. + * + * @param int $exponent The exponent. + * + * @return BigRational The result. + * + * @throws \InvalidArgumentException If the exponent is not in the range 0 to 1,000,000. + */ + public function power(int $exponent) : BigRational + { + if ($exponent === 0) { + $one = BigInteger::one(); + + return new BigRational($one, $one, false); + } + + if ($exponent === 1) { + return $this; + } + + return new BigRational( + $this->numerator->power($exponent), + $this->denominator->power($exponent), + false + ); + } + + /** + * Returns the reciprocal of this BigRational. + * + * The reciprocal has the numerator and denominator swapped. + * + * @return BigRational + * + * @throws DivisionByZeroException If the numerator is zero. + */ + public function reciprocal() : BigRational + { + return new BigRational($this->denominator, $this->numerator, true); + } + + /** + * Returns the absolute value of this BigRational. + * + * @return BigRational + */ + public function abs() : BigRational + { + return new BigRational($this->numerator->abs(), $this->denominator, false); + } + + /** + * Returns the negated value of this BigRational. + * + * @return BigRational + */ + public function negated() : BigRational + { + return new BigRational($this->numerator->negated(), $this->denominator, false); + } + + /** + * Returns the simplified value of this BigRational. + * + * @return BigRational + */ + public function simplified() : BigRational + { + $gcd = $this->numerator->gcd($this->denominator); + + $numerator = $this->numerator->quotient($gcd); + $denominator = $this->denominator->quotient($gcd); + + return new BigRational($numerator, $denominator, false); + } + + /** + * {@inheritdoc} + */ + public function compareTo($that) : int + { + return $this->minus($that)->getSign(); + } + + /** + * {@inheritdoc} + */ + public function getSign() : int + { + return $this->numerator->getSign(); + } + + /** + * {@inheritdoc} + */ + public function toBigInteger() : BigInteger + { + $simplified = $this->simplified(); + + if (! $simplified->denominator->isEqualTo(1)) { + throw new RoundingNecessaryException('This rational number cannot be represented as an integer value without rounding.'); + } + + return $simplified->numerator; + } + + /** + * {@inheritdoc} + */ + public function toBigDecimal() : BigDecimal + { + return $this->numerator->toBigDecimal()->exactlyDividedBy($this->denominator); + } + + /** + * {@inheritdoc} + */ + public function toBigRational() : BigRational + { + return $this; + } + + /** + * {@inheritdoc} + */ + public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal + { + return $this->numerator->toBigDecimal()->dividedBy($this->denominator, $scale, $roundingMode); + } + + /** + * {@inheritdoc} + */ + public function toInt() : int + { + return $this->toBigInteger()->toInt(); + } + + /** + * {@inheritdoc} + */ + public function toFloat() : float + { + return $this->numerator->toFloat() / $this->denominator->toFloat(); + } + + /** + * {@inheritdoc} + */ + public function __toString() : string + { + $numerator = (string) $this->numerator; + $denominator = (string) $this->denominator; + + if ($denominator === '1') { + return $numerator; + } + + return $this->numerator . '/' . $this->denominator; + } + + /** + * This method is required for serializing the object and SHOULD NOT be accessed directly. + * + * @internal + * + * @return array{numerator: BigInteger, denominator: BigInteger} + */ + public function __serialize(): array + { + return ['numerator' => $this->numerator, 'denominator' => $this->denominator]; + } + + /** + * This method is only here to allow unserializing the object and cannot be accessed directly. + * + * @internal + * @psalm-suppress RedundantPropertyInitializationCheck + * + * @param array{numerator: BigInteger, denominator: BigInteger} $data + * + * @return void + * + * @throws \LogicException + */ + public function __unserialize(array $data): void + { + if (isset($this->numerator)) { + throw new \LogicException('__unserialize() is an internal function, it must not be called directly.'); + } + + $this->numerator = $data['numerator']; + $this->denominator = $data['denominator']; + } + + /** + * This method is required by interface Serializable and SHOULD NOT be accessed directly. + * + * @internal + * + * @return string + */ + public function serialize() : string + { + return $this->numerator . '/' . $this->denominator; + } + + /** + * This method is only here to implement interface Serializable and cannot be accessed directly. + * + * @internal + * @psalm-suppress RedundantPropertyInitializationCheck + * + * @param string $value + * + * @return void + * + * @throws \LogicException + */ + public function unserialize($value) : void + { + if (isset($this->numerator)) { + throw new \LogicException('unserialize() is an internal function, it must not be called directly.'); + } + + [$numerator, $denominator] = \explode('/', $value); + + $this->numerator = BigInteger::of($numerator); + $this->denominator = BigInteger::of($denominator); + } +} diff --git a/vendor/brick/math/src/Exception/DivisionByZeroException.php b/vendor/brick/math/src/Exception/DivisionByZeroException.php new file mode 100644 index 00000000..a4e44317 --- /dev/null +++ b/vendor/brick/math/src/Exception/DivisionByZeroException.php @@ -0,0 +1,41 @@ + 126) { + $char = \strtoupper(\dechex($ord)); + + if ($ord < 10) { + $char = '0' . $char; + } + } else { + $char = '"' . $char . '"'; + } + + return new self(sprintf('Char %s is not a valid character in the given alphabet.', $char)); + } +} diff --git a/vendor/brick/math/src/Exception/RoundingNecessaryException.php b/vendor/brick/math/src/Exception/RoundingNecessaryException.php new file mode 100644 index 00000000..1c610056 --- /dev/null +++ b/vendor/brick/math/src/Exception/RoundingNecessaryException.php @@ -0,0 +1,21 @@ +init($a, $b); + + if ($aNeg && ! $bNeg) { + return -1; + } + + if ($bNeg && ! $aNeg) { + return 1; + } + + $aLen = \strlen($aDig); + $bLen = \strlen($bDig); + + if ($aLen < $bLen) { + $result = -1; + } elseif ($aLen > $bLen) { + $result = 1; + } else { + $result = $aDig <=> $bDig; + } + + return $aNeg ? -$result : $result; + } + + /** + * Adds two numbers. + * + * @param string $a The augend. + * @param string $b The addend. + * + * @return string The sum. + */ + abstract public function add(string $a, string $b) : string; + + /** + * Subtracts two numbers. + * + * @param string $a The minuend. + * @param string $b The subtrahend. + * + * @return string The difference. + */ + abstract public function sub(string $a, string $b) : string; + + /** + * Multiplies two numbers. + * + * @param string $a The multiplicand. + * @param string $b The multiplier. + * + * @return string The product. + */ + abstract public function mul(string $a, string $b) : string; + + /** + * Returns the quotient of the division of two numbers. + * + * @param string $a The dividend. + * @param string $b The divisor, must not be zero. + * + * @return string The quotient. + */ + abstract public function divQ(string $a, string $b) : string; + + /** + * Returns the remainder of the division of two numbers. + * + * @param string $a The dividend. + * @param string $b The divisor, must not be zero. + * + * @return string The remainder. + */ + abstract public function divR(string $a, string $b) : string; + + /** + * Returns the quotient and remainder of the division of two numbers. + * + * @param string $a The dividend. + * @param string $b The divisor, must not be zero. + * + * @return string[] An array containing the quotient and remainder. + */ + abstract public function divQR(string $a, string $b) : array; + + /** + * Exponentiates a number. + * + * @param string $a The base number. + * @param int $e The exponent, validated as an integer between 0 and MAX_POWER. + * + * @return string The power. + */ + abstract public function pow(string $a, int $e) : string; + + /** + * @param string $a + * @param string $b The modulus; must not be zero. + * + * @return string + */ + public function mod(string $a, string $b) : string + { + return $this->divR($this->add($this->divR($a, $b), $b), $b); + } + + /** + * Returns the modular multiplicative inverse of $x modulo $m. + * + * If $x has no multiplicative inverse mod m, this method must return null. + * + * This method can be overridden by the concrete implementation if the underlying library has built-in support. + * + * @param string $x + * @param string $m The modulus; must not be negative or zero. + * + * @return string|null + */ + public function modInverse(string $x, string $m) : ?string + { + if ($m === '1') { + return '0'; + } + + $modVal = $x; + + if ($x[0] === '-' || ($this->cmp($this->abs($x), $m) >= 0)) { + $modVal = $this->mod($x, $m); + } + + $x = '0'; + $y = '0'; + $g = $this->gcdExtended($modVal, $m, $x, $y); + + if ($g !== '1') { + return null; + } + + return $this->mod($this->add($this->mod($x, $m), $m), $m); + } + + /** + * Raises a number into power with modulo. + * + * @param string $base The base number; must be positive or zero. + * @param string $exp The exponent; must be positive or zero. + * @param string $mod The modulus; must be strictly positive. + * + * @return string The power. + */ + abstract public function modPow(string $base, string $exp, string $mod) : string; + + /** + * Returns the greatest common divisor of the two numbers. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for GCD calculations. + * + * @param string $a The first number. + * @param string $b The second number. + * + * @return string The GCD, always positive, or zero if both arguments are zero. + */ + public function gcd(string $a, string $b) : string + { + if ($a === '0') { + return $this->abs($b); + } + + if ($b === '0') { + return $this->abs($a); + } + + return $this->gcd($b, $this->divR($a, $b)); + } + + private function gcdExtended(string $a, string $b, string &$x, string &$y) : string + { + if ($a === '0') { + $x = '0'; + $y = '1'; + + return $b; + } + + $x1 = '0'; + $y1 = '0'; + + $gcd = $this->gcdExtended($this->mod($b, $a), $a, $x1, $y1); + + $x = $this->sub($y1, $this->mul($this->divQ($b, $a), $x1)); + $y = $x1; + + return $gcd; + } + + /** + * Returns the square root of the given number, rounded down. + * + * The result is the largest x such that x² ≤ n. + * The input MUST NOT be negative. + * + * @param string $n The number. + * + * @return string The square root. + */ + abstract public function sqrt(string $n) : string; + + /** + * Converts a number from an arbitrary base. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for base conversion. + * + * @param string $number The number, positive or zero, non-empty, case-insensitively validated for the given base. + * @param int $base The base of the number, validated from 2 to 36. + * + * @return string The converted number, following the Calculator conventions. + */ + public function fromBase(string $number, int $base) : string + { + return $this->fromArbitraryBase(\strtolower($number), self::ALPHABET, $base); + } + + /** + * Converts a number to an arbitrary base. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for base conversion. + * + * @param string $number The number to convert, following the Calculator conventions. + * @param int $base The base to convert to, validated from 2 to 36. + * + * @return string The converted number, lowercase. + */ + public function toBase(string $number, int $base) : string + { + $negative = ($number[0] === '-'); + + if ($negative) { + $number = \substr($number, 1); + } + + $number = $this->toArbitraryBase($number, self::ALPHABET, $base); + + if ($negative) { + return '-' . $number; + } + + return $number; + } + + /** + * Converts a non-negative number in an arbitrary base using a custom alphabet, to base 10. + * + * @param string $number The number to convert, validated as a non-empty string, + * containing only chars in the given alphabet/base. + * @param string $alphabet The alphabet that contains every digit, validated as 2 chars minimum. + * @param int $base The base of the number, validated from 2 to alphabet length. + * + * @return string The number in base 10, following the Calculator conventions. + */ + final public function fromArbitraryBase(string $number, string $alphabet, int $base) : string + { + // remove leading "zeros" + $number = \ltrim($number, $alphabet[0]); + + if ($number === '') { + return '0'; + } + + // optimize for "one" + if ($number === $alphabet[1]) { + return '1'; + } + + $result = '0'; + $power = '1'; + + $base = (string) $base; + + for ($i = \strlen($number) - 1; $i >= 0; $i--) { + $index = \strpos($alphabet, $number[$i]); + + if ($index !== 0) { + $result = $this->add($result, ($index === 1) + ? $power + : $this->mul($power, (string) $index) + ); + } + + if ($i !== 0) { + $power = $this->mul($power, $base); + } + } + + return $result; + } + + /** + * Converts a non-negative number to an arbitrary base using a custom alphabet. + * + * @param string $number The number to convert, positive or zero, following the Calculator conventions. + * @param string $alphabet The alphabet that contains every digit, validated as 2 chars minimum. + * @param int $base The base to convert to, validated from 2 to alphabet length. + * + * @return string The converted number in the given alphabet. + */ + final public function toArbitraryBase(string $number, string $alphabet, int $base) : string + { + if ($number === '0') { + return $alphabet[0]; + } + + $base = (string) $base; + $result = ''; + + while ($number !== '0') { + [$number, $remainder] = $this->divQR($number, $base); + $remainder = (int) $remainder; + + $result .= $alphabet[$remainder]; + } + + return \strrev($result); + } + + /** + * Performs a rounded division. + * + * Rounding is performed when the remainder of the division is not zero. + * + * @param string $a The dividend. + * @param string $b The divisor, must not be zero. + * @param int $roundingMode The rounding mode. + * + * @return string + * + * @throws \InvalidArgumentException If the rounding mode is invalid. + * @throws RoundingNecessaryException If RoundingMode::UNNECESSARY is provided but rounding is necessary. + */ + final public function divRound(string $a, string $b, int $roundingMode) : string + { + [$quotient, $remainder] = $this->divQR($a, $b); + + $hasDiscardedFraction = ($remainder !== '0'); + $isPositiveOrZero = ($a[0] === '-') === ($b[0] === '-'); + + $discardedFractionSign = function() use ($remainder, $b) : int { + $r = $this->abs($this->mul($remainder, '2')); + $b = $this->abs($b); + + return $this->cmp($r, $b); + }; + + $increment = false; + + switch ($roundingMode) { + case RoundingMode::UNNECESSARY: + if ($hasDiscardedFraction) { + throw RoundingNecessaryException::roundingNecessary(); + } + break; + + case RoundingMode::UP: + $increment = $hasDiscardedFraction; + break; + + case RoundingMode::DOWN: + break; + + case RoundingMode::CEILING: + $increment = $hasDiscardedFraction && $isPositiveOrZero; + break; + + case RoundingMode::FLOOR: + $increment = $hasDiscardedFraction && ! $isPositiveOrZero; + break; + + case RoundingMode::HALF_UP: + $increment = $discardedFractionSign() >= 0; + break; + + case RoundingMode::HALF_DOWN: + $increment = $discardedFractionSign() > 0; + break; + + case RoundingMode::HALF_CEILING: + $increment = $isPositiveOrZero ? $discardedFractionSign() >= 0 : $discardedFractionSign() > 0; + break; + + case RoundingMode::HALF_FLOOR: + $increment = $isPositiveOrZero ? $discardedFractionSign() > 0 : $discardedFractionSign() >= 0; + break; + + case RoundingMode::HALF_EVEN: + $lastDigit = (int) $quotient[-1]; + $lastDigitIsEven = ($lastDigit % 2 === 0); + $increment = $lastDigitIsEven ? $discardedFractionSign() > 0 : $discardedFractionSign() >= 0; + break; + + default: + throw new \InvalidArgumentException('Invalid rounding mode.'); + } + + if ($increment) { + return $this->add($quotient, $isPositiveOrZero ? '1' : '-1'); + } + + return $quotient; + } + + /** + * Calculates bitwise AND of two numbers. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for bitwise operations. + * + * @param string $a + * @param string $b + * + * @return string + */ + public function and(string $a, string $b) : string + { + return $this->bitwise('and', $a, $b); + } + + /** + * Calculates bitwise OR of two numbers. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for bitwise operations. + * + * @param string $a + * @param string $b + * + * @return string + */ + public function or(string $a, string $b) : string + { + return $this->bitwise('or', $a, $b); + } + + /** + * Calculates bitwise XOR of two numbers. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for bitwise operations. + * + * @param string $a + * @param string $b + * + * @return string + */ + public function xor(string $a, string $b) : string + { + return $this->bitwise('xor', $a, $b); + } + + /** + * Performs a bitwise operation on a decimal number. + * + * @param string $operator The operator to use, must be "and", "or" or "xor". + * @param string $a The left operand. + * @param string $b The right operand. + * + * @return string + */ + private function bitwise(string $operator, string $a, string $b) : string + { + [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); + + $aBin = $this->toBinary($aDig); + $bBin = $this->toBinary($bDig); + + $aLen = \strlen($aBin); + $bLen = \strlen($bBin); + + if ($aLen > $bLen) { + $bBin = \str_repeat("\x00", $aLen - $bLen) . $bBin; + } elseif ($bLen > $aLen) { + $aBin = \str_repeat("\x00", $bLen - $aLen) . $aBin; + } + + if ($aNeg) { + $aBin = $this->twosComplement($aBin); + } + if ($bNeg) { + $bBin = $this->twosComplement($bBin); + } + + switch ($operator) { + case 'and': + $value = $aBin & $bBin; + $negative = ($aNeg and $bNeg); + break; + + case 'or': + $value = $aBin | $bBin; + $negative = ($aNeg or $bNeg); + break; + + case 'xor': + $value = $aBin ^ $bBin; + $negative = ($aNeg xor $bNeg); + break; + + // @codeCoverageIgnoreStart + default: + throw new \InvalidArgumentException('Invalid bitwise operator.'); + // @codeCoverageIgnoreEnd + } + + if ($negative) { + $value = $this->twosComplement($value); + } + + $result = $this->toDecimal($value); + + return $negative ? $this->neg($result) : $result; + } + + /** + * @param string $number A positive, binary number. + * + * @return string + */ + private function twosComplement(string $number) : string + { + $xor = \str_repeat("\xff", \strlen($number)); + + $number ^= $xor; + + for ($i = \strlen($number) - 1; $i >= 0; $i--) { + $byte = \ord($number[$i]); + + if (++$byte !== 256) { + $number[$i] = \chr($byte); + break; + } + + $number[$i] = "\x00"; + + if ($i === 0) { + $number = "\x01" . $number; + } + } + + return $number; + } + + /** + * Converts a decimal number to a binary string. + * + * @param string $number The number to convert, positive or zero, only digits. + * + * @return string + */ + private function toBinary(string $number) : string + { + $result = ''; + + while ($number !== '0') { + [$number, $remainder] = $this->divQR($number, '256'); + $result .= \chr((int) $remainder); + } + + return \strrev($result); + } + + /** + * Returns the positive decimal representation of a binary number. + * + * @param string $bytes The bytes representing the number. + * + * @return string + */ + private function toDecimal(string $bytes) : string + { + $result = '0'; + $power = '1'; + + for ($i = \strlen($bytes) - 1; $i >= 0; $i--) { + $index = \ord($bytes[$i]); + + if ($index !== 0) { + $result = $this->add($result, ($index === 1) + ? $power + : $this->mul($power, (string) $index) + ); + } + + if ($i !== 0) { + $power = $this->mul($power, '256'); + } + } + + return $result; + } +} diff --git a/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php b/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php new file mode 100644 index 00000000..6632b378 --- /dev/null +++ b/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php @@ -0,0 +1,116 @@ += 0) { + return \bcmod($a, $b, 0); + } + + return \bcmod($a, $b); + } + + /** + * {@inheritdoc} + */ + public function divQR(string $a, string $b) : array + { + $q = \bcdiv($a, $b, 0); + + if (version_compare(PHP_VERSION, '7.2') >= 0) { + $r = \bcmod($a, $b, 0); + } else { + $r = \bcmod($a, $b); + } + + assert($q !== null); + assert($r !== null); + + return [$q, $r]; + } + + /** + * {@inheritdoc} + */ + public function pow(string $a, int $e) : string + { + return \bcpow($a, (string) $e, 0); + } + + /** + * {@inheritdoc} + * + * @psalm-suppress InvalidNullableReturnType + * @psalm-suppress NullableReturnStatement + */ + public function modPow(string $base, string $exp, string $mod) : string + { + return \bcpowmod($base, $exp, $mod, 0); + } + + /** + * {@inheritDoc} + * + * @psalm-suppress NullableReturnStatement + * @psalm-suppress InvalidNullableReturnType + */ + public function sqrt(string $n) : string + { + return \bcsqrt($n, 0); + } +} diff --git a/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php b/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php new file mode 100644 index 00000000..52d18800 --- /dev/null +++ b/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php @@ -0,0 +1,156 @@ +maxDigits = 9; + break; + + case 8: + $this->maxDigits = 18; + break; + + default: + throw new \RuntimeException('The platform is not 32-bit or 64-bit as expected.'); + } + } + + /** + * {@inheritdoc} + */ + public function add(string $a, string $b) : string + { + /** + * @psalm-var numeric-string $a + * @psalm-var numeric-string $b + */ + $result = $a + $b; + + if (is_int($result)) { + return (string) $result; + } + + if ($a === '0') { + return $b; + } + + if ($b === '0') { + return $a; + } + + [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); + + $result = $aNeg === $bNeg ? $this->doAdd($aDig, $bDig) : $this->doSub($aDig, $bDig); + + if ($aNeg) { + $result = $this->neg($result); + } + + return $result; + } + + /** + * {@inheritdoc} + */ + public function sub(string $a, string $b) : string + { + return $this->add($a, $this->neg($b)); + } + + /** + * {@inheritdoc} + */ + public function mul(string $a, string $b) : string + { + /** + * @psalm-var numeric-string $a + * @psalm-var numeric-string $b + */ + $result = $a * $b; + + if (is_int($result)) { + return (string) $result; + } + + if ($a === '0' || $b === '0') { + return '0'; + } + + if ($a === '1') { + return $b; + } + + if ($b === '1') { + return $a; + } + + if ($a === '-1') { + return $this->neg($b); + } + + if ($b === '-1') { + return $this->neg($a); + } + + [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); + + $result = $this->doMul($aDig, $bDig); + + if ($aNeg !== $bNeg) { + $result = $this->neg($result); + } + + return $result; + } + + /** + * {@inheritdoc} + */ + public function divQ(string $a, string $b) : string + { + return $this->divQR($a, $b)[0]; + } + + /** + * {@inheritdoc} + */ + public function divR(string $a, string $b): string + { + return $this->divQR($a, $b)[1]; + } + + /** + * {@inheritdoc} + */ + public function divQR(string $a, string $b) : array + { + if ($a === '0') { + return ['0', '0']; + } + + if ($a === $b) { + return ['1', '0']; + } + + if ($b === '1') { + return [$a, '0']; + } + + if ($b === '-1') { + return [$this->neg($a), '0']; + } + + /** @psalm-var numeric-string $a */ + $na = $a * 1; // cast to number + + if (is_int($na)) { + /** @psalm-var numeric-string $b */ + $nb = $b * 1; + + if (is_int($nb)) { + // the only division that may overflow is PHP_INT_MIN / -1, + // which cannot happen here as we've already handled a divisor of -1 above. + $r = $na % $nb; + $q = ($na - $r) / $nb; + + assert(is_int($q)); + + return [ + (string) $q, + (string) $r + ]; + } + } + + [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); + + [$q, $r] = $this->doDiv($aDig, $bDig); + + if ($aNeg !== $bNeg) { + $q = $this->neg($q); + } + + if ($aNeg) { + $r = $this->neg($r); + } + + return [$q, $r]; + } + + /** + * {@inheritdoc} + */ + public function pow(string $a, int $e) : string + { + if ($e === 0) { + return '1'; + } + + if ($e === 1) { + return $a; + } + + $odd = $e % 2; + $e -= $odd; + + $aa = $this->mul($a, $a); + + /** @psalm-suppress PossiblyInvalidArgument We're sure that $e / 2 is an int now */ + $result = $this->pow($aa, $e / 2); + + if ($odd === 1) { + $result = $this->mul($result, $a); + } + + return $result; + } + + /** + * Algorithm from: https://www.geeksforgeeks.org/modular-exponentiation-power-in-modular-arithmetic/ + * + * {@inheritdoc} + */ + public function modPow(string $base, string $exp, string $mod) : string + { + // special case: the algorithm below fails with 0 power 0 mod 1 (returns 1 instead of 0) + if ($base === '0' && $exp === '0' && $mod === '1') { + return '0'; + } + + // special case: the algorithm below fails with power 0 mod 1 (returns 1 instead of 0) + if ($exp === '0' && $mod === '1') { + return '0'; + } + + $x = $base; + + $res = '1'; + + // numbers are positive, so we can use remainder instead of modulo + $x = $this->divR($x, $mod); + + while ($exp !== '0') { + if (in_array($exp[-1], ['1', '3', '5', '7', '9'])) { // odd + $res = $this->divR($this->mul($res, $x), $mod); + } + + $exp = $this->divQ($exp, '2'); + $x = $this->divR($this->mul($x, $x), $mod); + } + + return $res; + } + + /** + * Adapted from https://cp-algorithms.com/num_methods/roots_newton.html + * + * {@inheritDoc} + */ + public function sqrt(string $n) : string + { + if ($n === '0') { + return '0'; + } + + // initial approximation + $x = \str_repeat('9', \intdiv(\strlen($n), 2) ?: 1); + + $decreased = false; + + for (;;) { + $nx = $this->divQ($this->add($x, $this->divQ($n, $x)), '2'); + + if ($x === $nx || $this->cmp($nx, $x) > 0 && $decreased) { + break; + } + + $decreased = $this->cmp($nx, $x) < 0; + $x = $nx; + } + + return $x; + } + + /** + * Performs the addition of two non-signed large integers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return string + */ + private function doAdd(string $a, string $b) : string + { + [$a, $b, $length] = $this->pad($a, $b); + + $carry = 0; + $result = ''; + + for ($i = $length - $this->maxDigits;; $i -= $this->maxDigits) { + $blockLength = $this->maxDigits; + + if ($i < 0) { + $blockLength += $i; + /** @psalm-suppress LoopInvalidation */ + $i = 0; + } + + /** @psalm-var numeric-string $blockA */ + $blockA = \substr($a, $i, $blockLength); + + /** @psalm-var numeric-string $blockB */ + $blockB = \substr($b, $i, $blockLength); + + $sum = (string) ($blockA + $blockB + $carry); + $sumLength = \strlen($sum); + + if ($sumLength > $blockLength) { + $sum = \substr($sum, 1); + $carry = 1; + } else { + if ($sumLength < $blockLength) { + $sum = \str_repeat('0', $blockLength - $sumLength) . $sum; + } + $carry = 0; + } + + $result = $sum . $result; + + if ($i === 0) { + break; + } + } + + if ($carry === 1) { + $result = '1' . $result; + } + + return $result; + } + + /** + * Performs the subtraction of two non-signed large integers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return string + */ + private function doSub(string $a, string $b) : string + { + if ($a === $b) { + return '0'; + } + + // Ensure that we always subtract to a positive result: biggest minus smallest. + $cmp = $this->doCmp($a, $b); + + $invert = ($cmp === -1); + + if ($invert) { + $c = $a; + $a = $b; + $b = $c; + } + + [$a, $b, $length] = $this->pad($a, $b); + + $carry = 0; + $result = ''; + + $complement = 10 ** $this->maxDigits; + + for ($i = $length - $this->maxDigits;; $i -= $this->maxDigits) { + $blockLength = $this->maxDigits; + + if ($i < 0) { + $blockLength += $i; + /** @psalm-suppress LoopInvalidation */ + $i = 0; + } + + /** @psalm-var numeric-string $blockA */ + $blockA = \substr($a, $i, $blockLength); + + /** @psalm-var numeric-string $blockB */ + $blockB = \substr($b, $i, $blockLength); + + $sum = $blockA - $blockB - $carry; + + if ($sum < 0) { + $sum += $complement; + $carry = 1; + } else { + $carry = 0; + } + + $sum = (string) $sum; + $sumLength = \strlen($sum); + + if ($sumLength < $blockLength) { + $sum = \str_repeat('0', $blockLength - $sumLength) . $sum; + } + + $result = $sum . $result; + + if ($i === 0) { + break; + } + } + + // Carry cannot be 1 when the loop ends, as a > b + assert($carry === 0); + + $result = \ltrim($result, '0'); + + if ($invert) { + $result = $this->neg($result); + } + + return $result; + } + + /** + * Performs the multiplication of two non-signed large integers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return string + */ + private function doMul(string $a, string $b) : string + { + $x = \strlen($a); + $y = \strlen($b); + + $maxDigits = \intdiv($this->maxDigits, 2); + $complement = 10 ** $maxDigits; + + $result = '0'; + + for ($i = $x - $maxDigits;; $i -= $maxDigits) { + $blockALength = $maxDigits; + + if ($i < 0) { + $blockALength += $i; + /** @psalm-suppress LoopInvalidation */ + $i = 0; + } + + $blockA = (int) \substr($a, $i, $blockALength); + + $line = ''; + $carry = 0; + + for ($j = $y - $maxDigits;; $j -= $maxDigits) { + $blockBLength = $maxDigits; + + if ($j < 0) { + $blockBLength += $j; + /** @psalm-suppress LoopInvalidation */ + $j = 0; + } + + $blockB = (int) \substr($b, $j, $blockBLength); + + $mul = $blockA * $blockB + $carry; + $value = $mul % $complement; + $carry = ($mul - $value) / $complement; + + $value = (string) $value; + $value = \str_pad($value, $maxDigits, '0', STR_PAD_LEFT); + + $line = $value . $line; + + if ($j === 0) { + break; + } + } + + if ($carry !== 0) { + $line = $carry . $line; + } + + $line = \ltrim($line, '0'); + + if ($line !== '') { + $line .= \str_repeat('0', $x - $blockALength - $i); + $result = $this->add($result, $line); + } + + if ($i === 0) { + break; + } + } + + return $result; + } + + /** + * Performs the division of two non-signed large integers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return string[] The quotient and remainder. + */ + private function doDiv(string $a, string $b) : array + { + $cmp = $this->doCmp($a, $b); + + if ($cmp === -1) { + return ['0', $a]; + } + + $x = \strlen($a); + $y = \strlen($b); + + // we now know that a >= b && x >= y + + $q = '0'; // quotient + $r = $a; // remainder + $z = $y; // focus length, always $y or $y+1 + + for (;;) { + $focus = \substr($a, 0, $z); + + $cmp = $this->doCmp($focus, $b); + + if ($cmp === -1) { + if ($z === $x) { // remainder < dividend + break; + } + + $z++; + } + + $zeros = \str_repeat('0', $x - $z); + + $q = $this->add($q, '1' . $zeros); + $a = $this->sub($a, $b . $zeros); + + $r = $a; + + if ($r === '0') { // remainder == 0 + break; + } + + $x = \strlen($a); + + if ($x < $y) { // remainder < dividend + break; + } + + $z = $y; + } + + return [$q, $r]; + } + + /** + * Compares two non-signed large numbers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return int [-1, 0, 1] + */ + private function doCmp(string $a, string $b) : int + { + $x = \strlen($a); + $y = \strlen($b); + + $cmp = $x <=> $y; + + if ($cmp !== 0) { + return $cmp; + } + + return \strcmp($a, $b) <=> 0; // enforce [-1, 0, 1] + } + + /** + * Pads the left of one of the given numbers with zeros if necessary to make both numbers the same length. + * + * The numbers must only consist of digits, without leading minus sign. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return array{string, string, int} + */ + private function pad(string $a, string $b) : array + { + $x = \strlen($a); + $y = \strlen($b); + + if ($x > $y) { + $b = \str_repeat('0', $x - $y) . $b; + + return [$a, $b, $x]; + } + + if ($x < $y) { + $a = \str_repeat('0', $y - $x) . $a; + + return [$a, $b, $y]; + } + + return [$a, $b, $x]; + } +} diff --git a/vendor/brick/math/src/RoundingMode.php b/vendor/brick/math/src/RoundingMode.php new file mode 100644 index 00000000..06936d8d --- /dev/null +++ b/vendor/brick/math/src/RoundingMode.php @@ -0,0 +1,107 @@ += 0.5; otherwise, behaves as for DOWN. + * Note that this is the rounding mode commonly taught at school. + */ + public const HALF_UP = 5; + + /** + * Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round down. + * + * Behaves as for UP if the discarded fraction is > 0.5; otherwise, behaves as for DOWN. + */ + public const HALF_DOWN = 6; + + /** + * Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round towards positive infinity. + * + * If the result is positive, behaves as for HALF_UP; if negative, behaves as for HALF_DOWN. + */ + public const HALF_CEILING = 7; + + /** + * Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round towards negative infinity. + * + * If the result is positive, behaves as for HALF_DOWN; if negative, behaves as for HALF_UP. + */ + public const HALF_FLOOR = 8; + + /** + * Rounds towards the "nearest neighbor" unless both neighbors are equidistant, in which case rounds towards the even neighbor. + * + * Behaves as for HALF_UP if the digit to the left of the discarded fraction is odd; + * behaves as for HALF_DOWN if it's even. + * + * Note that this is the rounding mode that statistically minimizes + * cumulative error when applied repeatedly over a sequence of calculations. + * It is sometimes known as "Banker's rounding", and is chiefly used in the USA. + */ + public const HALF_EVEN = 9; +} diff --git a/vendor/clue/stream-filter/.github/FUNDING.yml b/vendor/clue/stream-filter/.github/FUNDING.yml new file mode 100644 index 00000000..9c09fb87 --- /dev/null +++ b/vendor/clue/stream-filter/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: clue +custom: https://clue.engineering/support diff --git a/vendor/clue/stream-filter/.gitignore b/vendor/clue/stream-filter/.gitignore deleted file mode 100644 index de4a392c..00000000 --- a/vendor/clue/stream-filter/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/vendor -/composer.lock diff --git a/vendor/clue/stream-filter/.travis.yml b/vendor/clue/stream-filter/.travis.yml deleted file mode 100644 index 398a5442..00000000 --- a/vendor/clue/stream-filter/.travis.yml +++ /dev/null @@ -1,27 +0,0 @@ -language: php - -php: -# - 5.3 # requires old distro, see below - - 5.4 - - 5.5 - - 5.6 - - 7.0 - - 7.1 - - 7.2 - - hhvm # ignore errors, see below - -# lock distro so new future defaults will not break the build -dist: trusty - -matrix: - include: - - php: 5.3 - dist: precise - allow_failures: - - php: hhvm - -install: - - composer install --no-interaction - -script: - - vendor/bin/phpunit --coverage-text diff --git a/vendor/clue/stream-filter/CHANGELOG.md b/vendor/clue/stream-filter/CHANGELOG.md index 563ba3f9..e6ae94b5 100644 --- a/vendor/clue/stream-filter/CHANGELOG.md +++ b/vendor/clue/stream-filter/CHANGELOG.md @@ -1,5 +1,28 @@ # Changelog +## 1.6.0 (2022-02-21) + +* Feature: Support PHP 8.1 release. + (#45 by @clue) + +* Improve documentation to use fully-qualified function names. + (#43 by @SimonFrings and #42 by @PaulRotmann) + +* Improve test suite and use GitHub actions for continuous integration (CI). + (#39 and #40 by @SimonFrings) + +## 1.5.0 (2020-10-02) + +* Feature: Improve performance by using global imports. + (#38 by @clue) + +* Improve API documentation and add support / sponsorship info. + (#30 by @clue and #35 by @SimonFrings) + +* Improve test suite and add `.gitattributes` to exclude dev files from exports. + Prepare PHP 8 support, update to PHPUnit 9 and simplify test matrix. + (#32 and #37 by @clue and #34 and #36 by @SimonFrings) + ## 1.4.1 (2019-04-09) * Fix: Check if the function is declared before declaring it. diff --git a/vendor/clue/stream-filter/README.md b/vendor/clue/stream-filter/README.md index e9c6fc9e..4196c2cc 100644 --- a/vendor/clue/stream-filter/README.md +++ b/vendor/clue/stream-filter/README.md @@ -1,15 +1,19 @@ -# clue/stream-filter [![Build Status](https://travis-ci.org/clue/php-stream-filter.svg?branch=master)](https://travis-ci.org/clue/php-stream-filter) +# clue/stream-filter + +[![CI status](https://github.com/clue/stream-filter/workflows/CI/badge.svg)](https://github.com/clue/stream-filter/actions) +[![installs on Packagist](https://img.shields.io/packagist/dt/clue/stream-filter?color=blue&label=installs%20on%20Packagist)](https://packagist.org/packages/clue/stream-filter) A simple and modern approach to stream filtering in PHP **Table of contents** * [Why?](#why) +* [Support us](#support-us) * [Usage](#usage) - * [append()](#append) - * [prepend()](#prepend) - * [fun()](#fun) - * [remove()](#remove) + * [append()](#append) + * [prepend()](#prepend) + * [fun()](#fun) + * [remove()](#remove) * [Install](#install) * [Tests](#tests) * [License](#license) @@ -39,12 +43,36 @@ This project aims to make these features more accessible to a broader audience. * **Good test coverage** - Comes with an automated tests suite and is regularly tested in the *real world* +## Support us + +We invest a lot of time developing, maintaining and updating our awesome +open-source projects. You can help us sustain this high-quality of our work by +[becoming a sponsor on GitHub](https://github.com/sponsors/clue). Sponsors get +numerous benefits in return, see our [sponsoring page](https://github.com/sponsors/clue) +for details. + +Let's take these projects to the next level together! 🚀 + ## Usage This lightweight library consists only of a few simple functions. All functions reside under the `Clue\StreamFilter` namespace. -The below examples assume you use an import statement similar to this: +The below examples refer to all functions with their fully-qualified names like this: + +```php +Clue\StreamFilter\append(…); +``` + +As of PHP 5.6+ you can also import each required function into your code like this: + +```php +use function Clue\StreamFilter\append; + +append(…); +``` + +Alternatively, you can also use an import statement similar to this: ```php use Clue\StreamFilter as Filter; @@ -52,21 +80,14 @@ use Clue\StreamFilter as Filter; Filter\append(…); ``` -Alternatively, you can also refer to them with their fully-qualified name: - -```php -\Clue\StreamFilter\append(…); -``` - ### append() -The `append($stream, $callback, $read_write = STREAM_FILTER_ALL)` function can be used to +The `append(resource $stream, callable $callback, int $read_write = STREAM_FILTER_ALL): resource` function can be used to append a filter callback to the given stream. Each stream can have a list of filters attached. This function appends a filter to the end of this list. -This function returns a filter resource which can be passed to [`remove()`](#remove). If the given filter can not be added, it throws an `Exception`. The `$stream` can be any valid stream resource, such as: @@ -75,11 +96,11 @@ The `$stream` can be any valid stream resource, such as: $stream = fopen('demo.txt', 'w+'); ``` -The `$callback` should be a valid callable function which accepts an individual chunk of data -and should return the updated chunk: +The `$callback` should be a valid callable function which accepts +an individual chunk of data and should return the updated chunk: ```php -$filter = Filter\append($stream, function ($chunk) { +$filter = Clue\StreamFilter\append($stream, function ($chunk) { // will be called each time you read or write a $chunk to/from the stream return $chunk; }); @@ -88,17 +109,17 @@ $filter = Filter\append($stream, function ($chunk) { As such, you can also use native PHP functions or any other `callable`: ```php -Filter\append($stream, 'strtoupper'); +Clue\StreamFilter\append($stream, 'strtoupper'); // will write "HELLO" to the underlying stream fwrite($stream, 'hello'); ``` -If the `$callback` accepts invocation without parameters, then this signature -will be invoked once ending (flushing) the filter: +If the `$callback` accepts invocation without parameters, +then this signature will be invoked once ending (flushing) the filter: ```php -Filter\append($stream, function ($chunk = null) { +Clue\StreamFilter\append($stream, function ($chunk = null) { if ($chunk === null) { // will be called once ending the filter return 'end'; @@ -114,11 +135,11 @@ fclose($stream); from the end signal handler if the stream is being closed. If your callback throws an `Exception`, then the filter process will be aborted. -In order to play nice with PHP's stream handling, the `Exception` will be -transformed to a PHP warning instead: +In order to play nice with PHP's stream handling, +the `Exception` will be transformed to a PHP warning instead: ```php -Filter\append($stream, function ($chunk) { +Clue\StreamFilter\append($stream, function ($chunk) { throw new \RuntimeException('Unexpected chunk'); }); @@ -126,20 +147,23 @@ Filter\append($stream, function ($chunk) { fwrite($stream, 'hello'); ``` -The optional `$read_write` parameter can be used to only invoke the `$callback` when either writing to the stream or only when reading from the stream: +The optional `$read_write` parameter can be used to only invoke the `$callback` +when either writing to the stream or only when reading from the stream: ```php -Filter\append($stream, function ($chunk) { +Clue\StreamFilter\append($stream, function ($chunk) { // will be called each time you write to the stream return $chunk; }, STREAM_FILTER_WRITE); -Filter\append($stream, function ($chunk) { +Clue\StreamFilter\append($stream, function ($chunk) { // will be called each time you read from the stream return $chunk; }, STREAM_FILTER_READ); ``` +This function returns a filter resource which can be passed to [`remove()`](#remove). + > Note that once a filter has been added to stream, the stream can no longer be passed to > [`stream_select()`](https://www.php.net/manual/en/function.stream-select.php) > (and family). @@ -153,29 +177,30 @@ Filter\append($stream, function ($chunk) { ### prepend() -The `prepend($stream, $callback, $read_write = STREAM_FILTER_ALL)` function can be used to +The `prepend(resource $stream, callable $callback, int $read_write = STREAM_FILTER_ALL): resource` function can be used to prepend a filter callback to the given stream. Each stream can have a list of filters attached. This function prepends a filter to the start of this list. -This function returns a filter resource which can be passed to [`remove()`](#remove). If the given filter can not be added, it throws an `Exception`. ```php -$filter = Filter\prepend($stream, function ($chunk) { +$filter = Clue\StreamFilter\prepend($stream, function ($chunk) { // will be called each time you read or write a $chunk to/from the stream return $chunk; }); ``` +This function returns a filter resource which can be passed to [`remove()`](#remove). + Except for the position in the list of filters, this function behaves exactly like the [`append()`](#append) function. For more details about its behavior, see also the [`append()`](#append) function. ### fun() -The `fun($filter, $parameters = null)` function can be used to +The `fun(string $filter, mixed $parameters = null): callable` function can be used to create a filter function which uses the given built-in `$filter`. PHP comes with a useful set of [built-in filters](https://www.php.net/manual/en/filters.php). @@ -183,20 +208,20 @@ Using `fun()` makes accessing these as easy as passing an input string to filter and getting the filtered output string. ```php -$fun = Filter\fun('string.rot13'); +$fun = Clue\StreamFilter\fun('string.rot13'); assert('grfg' === $fun('test')); assert('test' === $fun($fun('test')); ``` -Please note that not all filter functions may be available depending on installed -PHP extensions and the PHP version in use. +Please note that not all filter functions may be available depending +on installed PHP extensions and the PHP version in use. In particular, [HHVM](https://hhvm.com/) may not offer the same filter functions or parameters as Zend PHP. Accessing an unknown filter function will result in a `RuntimeException`: ```php -Filter\fun('unknown'); // throws RuntimeException +Clue\StreamFilter\fun('unknown'); // throws RuntimeException ``` Some filters may accept or require additional filter parameters – most @@ -209,7 +234,7 @@ Please refer to the individual filter definition for more details. For example, the `string.strip_tags` filter can be invoked like this: ```php -$fun = Filter\fun('string.strip_tags', ''); +$fun = Clue\StreamFilter\fun('string.strip_tags', ''); $ret = $fun('h
i
'); assert('hi' === $ret); @@ -223,7 +248,7 @@ may use internal buffers and may emit a final data chunk on close. The filter function can be closed by invoking without any arguments: ```php -$fun = Filter\fun('zlib.deflate'); +$fun = Clue\StreamFilter\fun('zlib.deflate'); $ret = $fun('hello') . $fun('world') . $fun(); assert('helloworld' === gzinflate($ret)); @@ -233,7 +258,7 @@ The filter function must not be used anymore after it has been closed. Doing so will result in a `RuntimeException`: ```php -$fun = Filter\fun('string.rot13'); +$fun = Clue\StreamFilter\fun('string.rot13'); $fun(); $fun('test'); // throws RuntimeException @@ -248,40 +273,40 @@ If you feel some test case is missing or outdated, we're happy to accept PRs! :) ### remove() -The `remove($filter)` function can be used to +The `remove(resource $filter): bool` function can be used to remove a filter previously added via [`append()`](#append) or [`prepend()`](#prepend). ```php -$filter = Filter\append($stream, function () { +$filter = Clue\StreamFilter\append($stream, function () { // … }); -Filter\remove($filter); +Clue\StreamFilter\remove($filter); ``` ## Install -The recommended way to install this library is [through Composer](https://getcomposer.org). +The recommended way to install this library is [through Composer](https://getcomposer.org/). [New to Composer?](https://getcomposer.org/doc/00-intro.md) This project follows [SemVer](https://semver.org/). This will install the latest supported version: ```bash -$ composer require clue/stream-filter:^1.4.1 +$ composer require clue/stream-filter:^1.6 ``` See also the [CHANGELOG](CHANGELOG.md) for details about version upgrades. This project aims to run on any platform and thus does not require any PHP -extensions and supports running on legacy PHP 5.3 through current PHP 7+ and +extensions and supports running on legacy PHP 5.3 through current PHP 8+ and HHVM. -It's *highly recommended to use PHP 7+* for this project. +It's *highly recommended to use the latest supported PHP version* for this project. Older PHP versions may suffer from a number of inconsistencies documented above. ## Tests To run the test suite, you first need to clone this repo and then install all -dependencies [through Composer](https://getcomposer.org): +dependencies [through Composer](https://getcomposer.org/): ```bash $ composer install @@ -290,7 +315,7 @@ $ composer install To run the test suite, go to the project root and run: ```bash -$ php vendor/bin/phpunit +$ vendor/bin/phpunit ``` ## License diff --git a/vendor/clue/stream-filter/composer.json b/vendor/clue/stream-filter/composer.json index 834f2d48..797fb536 100644 --- a/vendor/clue/stream-filter/composer.json +++ b/vendor/clue/stream-filter/composer.json @@ -7,17 +7,20 @@ "authors": [ { "name": "Christian Lück", - "email": "christian@lueck.tv" + "email": "christian@clue.engineering" } ], "require": { "php": ">=5.3" }, "require-dev": { - "phpunit/phpunit": "^5.0 || ^4.8" + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" }, "autoload": { "psr-4": { "Clue\\StreamFilter\\": "src/" }, "files": [ "src/functions_include.php" ] + }, + "autoload-dev": { + "psr-4": { "Clue\\Tests\\StreamFilter\\": "tests/" } } } diff --git a/vendor/clue/stream-filter/examples/base64_decode.php b/vendor/clue/stream-filter/examples/base64_decode.php deleted file mode 100644 index 2b49f102..00000000 --- a/vendor/clue/stream-filter/examples/base64_decode.php +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - ./tests/ - - - - - ./src/ - - - \ No newline at end of file diff --git a/vendor/clue/stream-filter/src/CallbackFilter.php b/vendor/clue/stream-filter/src/CallbackFilter.php index 710940b6..a667fe68 100644 --- a/vendor/clue/stream-filter/src/CallbackFilter.php +++ b/vendor/clue/stream-filter/src/CallbackFilter.php @@ -2,39 +2,37 @@ namespace Clue\StreamFilter; -use php_user_filter; -use InvalidArgumentException; -use ReflectionFunction; -use Exception; - /** - * * @internal * @see append() * @see prepend() */ -class CallbackFilter extends php_user_filter +class CallbackFilter extends \php_user_filter { private $callback; private $closed = true; private $supportsClose = false; + /** @return bool */ + #[\ReturnTypeWillChange] public function onCreate() { $this->closed = false; - if (!is_callable($this->params)) { - throw new InvalidArgumentException('No valid callback parameter given to stream_filter_(append|prepend)'); + if (!\is_callable($this->params)) { + throw new \InvalidArgumentException('No valid callback parameter given to stream_filter_(append|prepend)'); } $this->callback = $this->params; // callback supports end event if it accepts invocation without arguments - $ref = new ReflectionFunction($this->callback); + $ref = new \ReflectionFunction($this->callback); $this->supportsClose = ($ref->getNumberOfRequiredParameters() === 0); return true; } + /** @return void */ + #[\ReturnTypeWillChange] public function onClose() { $this->closed = true; @@ -44,8 +42,8 @@ class CallbackFilter extends php_user_filter $this->supportsClose = false; // invoke without argument to signal end and discard resulting buffer try { - call_user_func($this->callback); - } catch (Exception $ignored) { + \call_user_func($this->callback); + } catch (\Exception $ignored) { // this might be called during engine shutdown, so it's not safe // to raise any errors or exceptions here // trigger_error('Error closing filter: ' . $ignored->getMessage(), E_USER_WARNING); @@ -55,31 +53,33 @@ class CallbackFilter extends php_user_filter $this->callback = null; } + /** @return int */ + #[\ReturnTypeWillChange] public function filter($in, $out, &$consumed, $closing) { // concatenate whole buffer from input brigade $data = ''; - while ($bucket = stream_bucket_make_writeable($in)) { + while ($bucket = \stream_bucket_make_writeable($in)) { $consumed += $bucket->datalen; $data .= $bucket->data; } // skip processing callback that already ended if ($this->closed) { - return PSFS_FEED_ME; + return \PSFS_FEED_ME; } // only invoke filter function if buffer is not empty // this may skip flushing a closing filter if ($data !== '') { try { - $data = call_user_func($this->callback, $data); - } catch (Exception $e) { + $data = \call_user_func($this->callback, $data); + } catch (\Exception $e) { // exception should mark filter as closed $this->onClose(); - trigger_error('Error invoking filter: ' . $e->getMessage(), E_USER_WARNING); + \trigger_error('Error invoking filter: ' . $e->getMessage(), \E_USER_WARNING); - return PSFS_ERR_FATAL; + return \PSFS_ERR_FATAL; } } @@ -93,11 +93,11 @@ class CallbackFilter extends php_user_filter // invoke without argument to signal end and append resulting buffer try { - $data .= call_user_func($this->callback); - } catch (Exception $e) { - trigger_error('Error ending filter: ' . $e->getMessage(), E_USER_WARNING); + $data .= \call_user_func($this->callback); + } catch (\Exception $e) { + \trigger_error('Error ending filter: ' . $e->getMessage(), \E_USER_WARNING); - return PSFS_ERR_FATAL; + return \PSFS_ERR_FATAL; } } } @@ -105,16 +105,16 @@ class CallbackFilter extends php_user_filter if ($data !== '') { // create a new bucket for writing the resulting buffer to the output brigade // reusing an existing bucket turned out to be bugged in some environments (ancient PHP versions and HHVM) - $bucket = @stream_bucket_new($this->stream, $data); + $bucket = @\stream_bucket_new($this->stream, $data); // legacy PHP versions (PHP < 5.4) do not support passing data from the event signal handler // because closing the stream invalidates the stream and its stream bucket brigade before // invoking the filter close handler. if ($bucket !== false) { - stream_bucket_append($out, $bucket); + \stream_bucket_append($out, $bucket); } } - return PSFS_PASS_ON; + return \PSFS_PASS_ON; } } diff --git a/vendor/clue/stream-filter/src/functions.php b/vendor/clue/stream-filter/src/functions.php index d1ca9dc0..cad88a29 100644 --- a/vendor/clue/stream-filter/src/functions.php +++ b/vendor/clue/stream-filter/src/functions.php @@ -2,54 +2,187 @@ namespace Clue\StreamFilter; -use RuntimeException; - /** - * append a callback filter to the given stream + * Append a filter callback to the given stream. + * + * Each stream can have a list of filters attached. + * This function appends a filter to the end of this list. + * + * If the given filter can not be added, it throws an `Exception`. + * + * The `$stream` can be any valid stream resource, such as: + * + * ```php + * $stream = fopen('demo.txt', 'w+'); + * ``` + * + * The `$callback` should be a valid callable function which accepts + * an individual chunk of data and should return the updated chunk: + * + * ```php + * $filter = Clue\StreamFilter\append($stream, function ($chunk) { + * // will be called each time you read or write a $chunk to/from the stream + * return $chunk; + * }); + * ``` + * + * As such, you can also use native PHP functions or any other `callable`: + * + * ```php + * Clue\StreamFilter\append($stream, 'strtoupper'); + * + * // will write "HELLO" to the underlying stream + * fwrite($stream, 'hello'); + * ``` + * + * If the `$callback` accepts invocation without parameters, + * then this signature will be invoked once ending (flushing) the filter: + * + * ```php + * Clue\StreamFilter\append($stream, function ($chunk = null) { + * if ($chunk === null) { + * // will be called once ending the filter + * return 'end'; + * } + * // will be called each time you read or write a $chunk to/from the stream + * return $chunk; + * }); + * + * fclose($stream); + * ``` + * + * > Note: Legacy PHP versions (PHP < 5.4) do not support passing additional data + * from the end signal handler if the stream is being closed. + * + * If your callback throws an `Exception`, then the filter process will be aborted. + * In order to play nice with PHP's stream handling, + * the `Exception` will be transformed to a PHP warning instead: + * + * ```php + * Clue\StreamFilter\append($stream, function ($chunk) { + * throw new \RuntimeException('Unexpected chunk'); + * }); + * + * // raises an E_USER_WARNING with "Error invoking filter: Unexpected chunk" + * fwrite($stream, 'hello'); + * ``` + * + * The optional `$read_write` parameter can be used to only invoke the `$callback` + * when either writing to the stream or only when reading from the stream: + * + * ```php + * Clue\StreamFilter\append($stream, function ($chunk) { + * // will be called each time you write to the stream + * return $chunk; + * }, STREAM_FILTER_WRITE); + * + * Clue\StreamFilter\append($stream, function ($chunk) { + * // will be called each time you read from the stream + * return $chunk; + * }, STREAM_FILTER_READ); + * ``` + * + * This function returns a filter resource which can be passed to [`remove()`](#remove). + * + * > Note that once a filter has been added to stream, the stream can no longer be passed to + * > [`stream_select()`](https://www.php.net/manual/en/function.stream-select.php) + * > (and family). + * > + * > > Warning: stream_select(): cannot cast a filtered stream on this system in {file} on line {line} + * > + * > This is due to limitations of PHP's stream filter support, as it can no longer reliably + * > tell when the underlying stream resource is actually ready. + * > As an alternative, consider calling `stream_select()` on the unfiltered stream and + * > then pass the unfiltered data through the [`fun()`](#fun) function. * * @param resource $stream * @param callable $callback * @param int $read_write * @return resource filter resource which can be used for `remove()` - * @throws Exception on error + * @throws \Exception on error * @uses stream_filter_append() */ function append($stream, $callback, $read_write = STREAM_FILTER_ALL) { - $ret = @stream_filter_append($stream, register(), $read_write, $callback); + $ret = @\stream_filter_append($stream, register(), $read_write, $callback); + // PHP 8 throws above on type errors, older PHP and memory issues can throw here + // @codeCoverageIgnoreStart if ($ret === false) { - $error = error_get_last() + array('message' => ''); - throw new RuntimeException('Unable to append filter: ' . $error['message']); + $error = \error_get_last() + array('message' => ''); + throw new \RuntimeException('Unable to append filter: ' . $error['message']); } + // @codeCoverageIgnoreEnd return $ret; } /** - * prepend a callback filter to the given stream + * Prepend a filter callback to the given stream. + * + * Each stream can have a list of filters attached. + * This function prepends a filter to the start of this list. + * + * If the given filter can not be added, it throws an `Exception`. + * + * ```php + * $filter = Clue\StreamFilter\prepend($stream, function ($chunk) { + * // will be called each time you read or write a $chunk to/from the stream + * return $chunk; + * }); + * ``` + * + * This function returns a filter resource which can be passed to [`remove()`](#remove). + * + * Except for the position in the list of filters, this function behaves exactly + * like the [`append()`](#append) function. + * For more details about its behavior, see also the [`append()`](#append) function. * * @param resource $stream * @param callable $callback * @param int $read_write * @return resource filter resource which can be used for `remove()` - * @throws Exception on error + * @throws \Exception on error * @uses stream_filter_prepend() */ function prepend($stream, $callback, $read_write = STREAM_FILTER_ALL) { - $ret = @stream_filter_prepend($stream, register(), $read_write, $callback); + $ret = @\stream_filter_prepend($stream, register(), $read_write, $callback); + // PHP 8 throws above on type errors, older PHP and memory issues can throw here + // @codeCoverageIgnoreStart if ($ret === false) { - $error = error_get_last() + array('message' => ''); - throw new RuntimeException('Unable to prepend filter: ' . $error['message']); + $error = \error_get_last() + array('message' => ''); + throw new \RuntimeException('Unable to prepend filter: ' . $error['message']); } + // @codeCoverageIgnoreEnd return $ret; } /** - * Creates filter fun (function) which uses the given built-in $filter + * Create a filter function which uses the given built-in `$filter`. + * + * PHP comes with a useful set of [built-in filters](https://www.php.net/manual/en/filters.php). + * Using `fun()` makes accessing these as easy as passing an input string to filter + * and getting the filtered output string. + * + * ```php + * $fun = Clue\StreamFilter\fun('string.rot13'); + * + * assert('grfg' === $fun('test')); + * assert('test' === $fun($fun('test')); + * ``` + * + * Please note that not all filter functions may be available depending + * on installed PHP extensions and the PHP version in use. + * In particular, [HHVM](https://hhvm.com/) may not offer the same filter functions + * or parameters as Zend PHP. + * Accessing an unknown filter function will result in a `RuntimeException`: + * + * ```php + * Clue\StreamFilter\fun('unknown'); // throws RuntimeException + * ``` * * Some filters may accept or require additional filter parameters – most * filters do not require filter parameters. @@ -58,28 +191,67 @@ function prepend($stream, $callback, $read_write = STREAM_FILTER_ALL) * In particular, note how *not passing* this parameter at all differs from * explicitly passing a `null` value (which many filters do not accept). * Please refer to the individual filter definition for more details. + * For example, the `string.strip_tags` filter can be invoked like this: + * + * ```php + * $fun = Clue\StreamFilter\fun('string.strip_tags', '
'); + * + * $ret = $fun('h
i
'); + * assert('hi' === $ret); + * ``` + * + * Under the hood, this function allocates a temporary memory stream, so it's + * recommended to clean up the filter function after use. + * Also, some filter functions (in particular the + * [zlib compression filters](https://www.php.net/manual/en/filters.compression.php)) + * may use internal buffers and may emit a final data chunk on close. + * The filter function can be closed by invoking without any arguments: + * + * ```php + * $fun = Clue\StreamFilter\fun('zlib.deflate'); + * + * $ret = $fun('hello') . $fun('world') . $fun(); + * assert('helloworld' === gzinflate($ret)); + * ``` + * + * The filter function must not be used anymore after it has been closed. + * Doing so will result in a `RuntimeException`: + * + * ```php + * $fun = Clue\StreamFilter\fun('string.rot13'); + * $fun(); + * + * $fun('test'); // throws RuntimeException + * ``` + * + * > Note: If you're using the zlib compression filters, then you should be wary + * about engine inconsistencies between different PHP versions and HHVM. + * These inconsistencies exist in the underlying PHP engines and there's little we + * can do about this in this library. + * [Our test suite](tests/) contains several test cases that exhibit these issues. + * If you feel some test case is missing or outdated, we're happy to accept PRs! :) * * @param string $filter built-in filter name. See stream_get_filters() or http://php.net/manual/en/filters.php * @param mixed $parameters (optional) parameters to pass to the built-in filter as-is * @return callable a filter callback which can be append()'ed or prepend()'ed - * @throws RuntimeException on error + * @throws \RuntimeException on error * @link http://php.net/manual/en/filters.php * @see stream_get_filters() * @see append() */ function fun($filter, $parameters = null) { - $fp = fopen('php://memory', 'w'); - if (func_num_args() === 1) { - $filter = @stream_filter_append($fp, $filter, STREAM_FILTER_WRITE); + $fp = \fopen('php://memory', 'w'); + if (\func_num_args() === 1) { + $filter = @\stream_filter_append($fp, $filter, \STREAM_FILTER_WRITE); } else { - $filter = @stream_filter_append($fp, $filter, STREAM_FILTER_WRITE, $parameters); + $filter = @\stream_filter_append($fp, $filter, \STREAM_FILTER_WRITE, $parameters); } if ($filter === false) { - fclose($fp); - $error = error_get_last() + array('message' => ''); - throw new RuntimeException('Unable to access built-in filter: ' . $error['message']); + \fclose($fp); + $error = \error_get_last() + array('message' => ''); + throw new \RuntimeException('Unable to access built-in filter: ' . $error['message']); } // append filter function which buffers internally @@ -89,7 +261,7 @@ function fun($filter, $parameters = null) // always return empty string in order to skip actually writing to stream resource return ''; - }, STREAM_FILTER_WRITE); + }, \STREAM_FILTER_WRITE); $closed = false; @@ -100,12 +272,12 @@ function fun($filter, $parameters = null) if ($chunk === null) { $closed = true; $buffer = ''; - fclose($fp); + \fclose($fp); return $buffer; } // initialize buffer and invoke filters by attempting to write to stream $buffer = ''; - fwrite($fp, $chunk); + \fwrite($fp, $chunk); // buffer now contains everything the filter function returned return $buffer; @@ -113,22 +285,31 @@ function fun($filter, $parameters = null) } /** - * remove a callback filter from the given stream + * Remove a filter previously added via `append()` or `prepend()`. + * + * ```php + * $filter = Clue\StreamFilter\append($stream, function () { + * // … + * }); + * Clue\StreamFilter\remove($filter); + * ``` * * @param resource $filter - * @return boolean true on success or false on error - * @throws Exception on error + * @return bool true on success or false on error + * @throws \RuntimeException on error * @uses stream_filter_remove() */ function remove($filter) { - if (@stream_filter_remove($filter) === false) { - throw new RuntimeException('Unable to remove given filter'); + if (@\stream_filter_remove($filter) === false) { + // PHP 8 throws above on type errors, older PHP and memory issues can throw here + $error = \error_get_last(); + throw new \RuntimeException('Unable to remove filter: ' . $error['message']); } } /** - * registers the callback filter and returns the resulting filter name + * Registers the callback filter and returns the resulting filter name * * There should be little reason to call this function manually. * @@ -140,7 +321,7 @@ function register() static $registered = null; if ($registered === null) { $registered = 'stream-callback'; - stream_filter_register($registered, __NAMESPACE__ . '\CallbackFilter'); + \stream_filter_register($registered, __NAMESPACE__ . '\CallbackFilter'); } return $registered; } diff --git a/vendor/clue/stream-filter/src/functions_include.php b/vendor/clue/stream-filter/src/functions_include.php index 346a91bb..4b315ae8 100644 --- a/vendor/clue/stream-filter/src/functions_include.php +++ b/vendor/clue/stream-filter/src/functions_include.php @@ -1,5 +1,6 @@ createStream(); - - StreamFilter\append($stream, function ($chunk) { - return strtoupper($chunk); - }); - - fwrite($stream, 'hello'); - fwrite($stream, 'world'); - rewind($stream); - - $this->assertEquals('HELLOWORLD', stream_get_contents($stream)); - - fclose($stream); - } - - public function testAppendNativePhpFunction() - { - $stream = $this->createStream(); - - StreamFilter\append($stream, 'strtoupper'); - - fwrite($stream, 'hello'); - fwrite($stream, 'world'); - rewind($stream); - - $this->assertEquals('HELLOWORLD', stream_get_contents($stream)); - - fclose($stream); - } - - public function testAppendChangingChunkSize() - { - $stream = $this->createStream(); - - StreamFilter\append($stream, function ($chunk) { - return str_replace(array('a','e','i','o','u'), '', $chunk); - }); - - fwrite($stream, 'hello'); - fwrite($stream, 'world'); - rewind($stream); - - $this->assertEquals('hllwrld', stream_get_contents($stream)); - - fclose($stream); - } - - public function testAppendReturningEmptyStringWillNotPassThrough() - { - $stream = $this->createStream(); - - StreamFilter\append($stream, function ($chunk) { - return ''; - }); - - fwrite($stream, 'hello'); - fwrite($stream, 'world'); - rewind($stream); - - $this->assertEquals('', stream_get_contents($stream)); - - fclose($stream); - } - - public function testAppendEndEventCanBeBufferedOnClose() - { - if (PHP_VERSION < 5.4) $this->markTestSkipped('Not supported on legacy PHP'); - - $stream = $this->createStream(); - - StreamFilter\append($stream, function ($chunk = null) { - if ($chunk === null) { - // this signals the end event - return '!'; - } - return $chunk . ' '; - }, STREAM_FILTER_WRITE); - - $buffered = ''; - StreamFilter\append($stream, function ($chunk) use (&$buffered) { - $buffered .= $chunk; - return ''; - }); - - fwrite($stream, 'hello'); - fwrite($stream, 'world'); - - fclose($stream); - - $this->assertEquals('hello world !', $buffered); - } - - public function testAppendEndEventWillBeCalledOnRemove() - { - $stream = $this->createStream(); - - $ended = false; - $filter = StreamFilter\append($stream, function ($chunk = null) use (&$ended) { - if ($chunk === null) { - $ended = true; - } - return $chunk; - }, STREAM_FILTER_WRITE); - - $this->assertEquals(0, $ended); - StreamFilter\remove($filter); - $this->assertEquals(1, $ended); - } - - public function testAppendEndEventWillBeCalledOnClose() - { - $stream = $this->createStream(); - - $ended = false; - StreamFilter\append($stream, function ($chunk = null) use (&$ended) { - if ($chunk === null) { - $ended = true; - } - return $chunk; - }, STREAM_FILTER_WRITE); - - $this->assertEquals(0, $ended); - fclose($stream); - $this->assertEquals(1, $ended); - } - - public function testAppendWriteOnly() - { - $stream = $this->createStream(); - - $invoked = 0; - - StreamFilter\append($stream, function ($chunk) use (&$invoked) { - ++$invoked; - - return $chunk; - }, STREAM_FILTER_WRITE); - - fwrite($stream, 'a'); - fwrite($stream, 'b'); - fwrite($stream, 'c'); - rewind($stream); - - $this->assertEquals(3, $invoked); - $this->assertEquals('abc', stream_get_contents($stream)); - - fclose($stream); - } - - public function testAppendReadOnly() - { - $stream = $this->createStream(); - - $invoked = 0; - - StreamFilter\append($stream, function ($chunk) use (&$invoked) { - ++$invoked; - - return $chunk; - }, STREAM_FILTER_READ); - - fwrite($stream, 'a'); - fwrite($stream, 'b'); - fwrite($stream, 'c'); - rewind($stream); - - $this->assertEquals(0, $invoked); - $this->assertEquals('abc', stream_get_contents($stream)); - $this->assertEquals(1, $invoked); - - fclose($stream); - } - - public function testOrderCallingAppendAfterPrepend() - { - $stream = $this->createStream(); - - StreamFilter\append($stream, function ($chunk) { - return '[' . $chunk . ']'; - }, STREAM_FILTER_WRITE); - - StreamFilter\prepend($stream, function ($chunk) { - return '(' . $chunk . ')'; - }, STREAM_FILTER_WRITE); - - fwrite($stream, 'hello'); - rewind($stream); - - $this->assertEquals('[(hello)]', stream_get_contents($stream)); - - fclose($stream); - } - - public function testRemoveFilter() - { - $stream = $this->createStream(); - - $first = StreamFilter\append($stream, function ($chunk) { - return $chunk . '?'; - }, STREAM_FILTER_WRITE); - - StreamFilter\append($stream, function ($chunk) { - return $chunk . '!'; - }, STREAM_FILTER_WRITE); - - StreamFilter\remove($first); - - fwrite($stream, 'hello'); - rewind($stream); - - $this->assertEquals('hello!', stream_get_contents($stream)); - - fclose($stream); - } - - public function testAppendFunDechunk() - { - if (defined('HHVM_VERSION')) $this->markTestSkipped('Not supported on HHVM (dechunk filter does not exist)'); - - $stream = $this->createStream(); - - StreamFilter\append($stream, StreamFilter\fun('dechunk'), STREAM_FILTER_WRITE); - - fwrite($stream, "2\r\nhe\r\n"); - fwrite($stream, "3\r\nllo\r\n"); - fwrite($stream, "0\r\n\r\n"); - rewind($stream); - - $this->assertEquals('hello', stream_get_contents($stream)); - - fclose($stream); - } - - public function testAppendThrows() - { - $this->createErrorHandler($errors); - - $stream = $this->createStream(); - $this->createErrorHandler($errors); - - StreamFilter\append($stream, function ($chunk) { - throw new \DomainException($chunk); - }); - - fwrite($stream, 'test'); - - $this->removeErrorHandler(); - $this->assertCount(1, $errors); - $this->assertContains('test', $errors[0]); - } - - public function testAppendThrowsDuringEnd() - { - $stream = $this->createStream(); - $this->createErrorHandler($errors); - - StreamFilter\append($stream, function ($chunk = null) { - if ($chunk === null) { - throw new \DomainException('end'); - } - return $chunk; - }); - - fclose($stream); - - $this->removeErrorHandler(); - - // We can only assert we're not seeing an exception here… - // * php 5.3-5.6 sees one error here - // * php 7 does not see any error here - // * hhvm sees the same error twice - // - // If you're curious: - // - // var_dump($errors); - // $this->assertCount(1, $errors); - // $this->assertContains('end', $errors[0]); - } - - public function testAppendThrowsShouldTriggerEnd() - { - $stream = $this->createStream(); - $this->createErrorHandler($errors); - - $ended = false; - StreamFilter\append($stream, function ($chunk = null) use (&$ended) { - if ($chunk === null) { - $ended = true; - return ''; - } - throw new \DomainException($chunk); - }); - - $this->assertEquals(false, $ended); - fwrite($stream, 'test'); - $this->assertEquals(true, $ended); - - $this->removeErrorHandler(); - $this->assertCount(1, $errors); - $this->assertContains('test', $errors[0]); - } - - public function testAppendThrowsShouldTriggerEndButIgnoreExceptionDuringEnd() - { - //$this->markTestIncomplete(); - $stream = $this->createStream(); - $this->createErrorHandler($errors); - - StreamFilter\append($stream, function ($chunk = null) { - if ($chunk === null) { - $chunk = 'end'; - //return ''; - } - throw new \DomainException($chunk); - }); - - fwrite($stream, 'test'); - - $this->removeErrorHandler(); - $this->assertCount(1, $errors); - $this->assertContains('test', $errors[0]); - } - - /** - * @expectedException RuntimeException - */ - public function testAppendInvalidStreamIsRuntimeError() - { - if (defined('HHVM_VERSION')) $this->markTestSkipped('Not supported on HHVM (does not reject invalid stream)'); - StreamFilter\append(false, function () { }); - } - - /** - * @expectedException RuntimeException - */ - public function testPrependInvalidStreamIsRuntimeError() - { - if (defined('HHVM_VERSION')) $this->markTestSkipped('Not supported on HHVM (does not reject invalid stream)'); - StreamFilter\prepend(false, function () { }); - } - - /** - * @expectedException RuntimeException - */ - public function testRemoveInvalidFilterIsRuntimeError() - { - if (defined('HHVM_VERSION')) $this->markTestSkipped('Not supported on HHVM (does not reject invalid filters)'); - StreamFilter\remove(false); - } - - /** - * @expectedException InvalidArgumentException - */ - public function testInvalidCallbackIsInvalidArgument() - { - $stream = $this->createStream(); - - StreamFilter\append($stream, 'a-b-c'); - } - - private function createStream() - { - return fopen('php://memory', 'r+'); - } - - private function createErrorHandler(&$errors) - { - $errors = array(); - set_error_handler(function ($_, $message) use (&$errors) { - $errors []= $message; - }); - } - - private function removeErrorHandler() - { - restore_error_handler(); - } -} diff --git a/vendor/clue/stream-filter/tests/FunTest.php b/vendor/clue/stream-filter/tests/FunTest.php deleted file mode 100644 index d0812e86..00000000 --- a/vendor/clue/stream-filter/tests/FunTest.php +++ /dev/null @@ -1,61 +0,0 @@ -assertEquals('grfg', $rot('test')); - $this->assertEquals('test', $rot($rot('test'))); - $this->assertEquals(null, $rot()); - } - - public function testFunInQuotedPrintable() - { - $encode = Filter\fun('convert.quoted-printable-encode'); - $decode = Filter\fun('convert.quoted-printable-decode'); - - $this->assertEquals('t=C3=A4st', $encode('täst')); - $this->assertEquals('täst', $decode($encode('täst'))); - $this->assertEquals(null, $encode()); - } - - /** - * @expectedException RuntimeException - */ - public function testFunWriteAfterCloseRot13() - { - $rot = Filter\fun('string.rot13'); - - $this->assertEquals(null, $rot()); - $rot('test'); - } - - /** - * @expectedException RuntimeException - */ - public function testFunInvalid() - { - Filter\fun('unknown'); - } - - public function testFunInBase64() - { - $encode = Filter\fun('convert.base64-encode'); - $decode = Filter\fun('convert.base64-decode'); - - $string = 'test'; - $this->assertEquals(base64_encode($string), $encode($string) . $encode()); - $this->assertEquals($string, $decode(base64_encode($string))); - - $encode = Filter\fun('convert.base64-encode'); - $decode = Filter\fun('convert.base64-decode'); - $this->assertEquals($string, $decode($encode($string) . $encode())); - - $encode = Filter\fun('convert.base64-encode'); - $this->assertEquals(null, $encode()); - } -} diff --git a/vendor/clue/stream-filter/tests/FunZlibTest.php b/vendor/clue/stream-filter/tests/FunZlibTest.php deleted file mode 100644 index 752c8a2c..00000000 --- a/vendor/clue/stream-filter/tests/FunZlibTest.php +++ /dev/null @@ -1,79 +0,0 @@ -assertEquals(gzdeflate('hello world'), $data); - } - - public function testFunZlibDeflateEmpty() - { - if (PHP_VERSION >= 7) $this->markTestSkipped('Not supported on PHP7 (empty string does not invoke filter)'); - - $deflate = StreamFilter\fun('zlib.deflate'); - - //$data = gzdeflate(''); - $data = $deflate(); - - $this->assertEquals("\x03\x00", $data); - } - - public function testFunZlibDeflateBig() - { - $deflate = StreamFilter\fun('zlib.deflate'); - - $n = 1000; - $expected = str_repeat('hello', $n); - - $bytes = ''; - for ($i = 0; $i < $n; ++$i) { - $bytes .= $deflate('hello'); - } - $bytes .= $deflate(); - - $this->assertEquals($expected, gzinflate($bytes)); - } - - public function testFunZlibInflateHelloWorld() - { - $inflate = StreamFilter\fun('zlib.inflate'); - - $data = $inflate(gzdeflate('hello world')) . $inflate(); - - $this->assertEquals('hello world', $data); - } - - public function testFunZlibInflateEmpty() - { - $inflate = StreamFilter\fun('zlib.inflate'); - - $data = $inflate("\x03\x00") . $inflate(); - - $this->assertEquals('', $data); - } - - public function testFunZlibInflateBig() - { - if (defined('HHVM_VERSION')) $this->markTestSkipped('Not supported on HHVM (final chunk will not be emitted)'); - - $inflate = StreamFilter\fun('zlib.inflate'); - - $expected = str_repeat('hello', 10); - $bytes = gzdeflate($expected); - - $ret = ''; - foreach (str_split($bytes, 2) as $chunk) { - $ret .= $inflate($chunk); - } - $ret .= $inflate(); - - $this->assertEquals($expected, $ret); - } -} diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php index dc02dfb1..afef3fa2 100644 --- a/vendor/composer/ClassLoader.php +++ b/vendor/composer/ClassLoader.php @@ -37,57 +37,130 @@ namespace Composer\Autoload; * * @author Fabien Potencier * @author Jordi Boggiano - * @see http://www.php-fig.org/psr/psr-0/ - * @see http://www.php-fig.org/psr/psr-4/ + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ */ class ClassLoader { + /** @var ?string */ + private $vendorDir; + // PSR-4 + /** + * @var array[] + * @psalm-var array> + */ private $prefixLengthsPsr4 = array(); + /** + * @var array[] + * @psalm-var array> + */ private $prefixDirsPsr4 = array(); + /** + * @var array[] + * @psalm-var array + */ private $fallbackDirsPsr4 = array(); // PSR-0 + /** + * @var array[] + * @psalm-var array> + */ private $prefixesPsr0 = array(); + /** + * @var array[] + * @psalm-var array + */ private $fallbackDirsPsr0 = array(); + /** @var bool */ private $useIncludePath = false; + + /** + * @var string[] + * @psalm-var array + */ private $classMap = array(); + + /** @var bool */ private $classMapAuthoritative = false; + + /** + * @var bool[] + * @psalm-var array + */ private $missingClasses = array(); + + /** @var ?string */ private $apcuPrefix; + /** + * @var self[] + */ + private static $registeredLoaders = array(); + + /** + * @param ?string $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + } + + /** + * @return string[] + */ public function getPrefixes() { if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', $this->prefixesPsr0); + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); } return array(); } + /** + * @return array[] + * @psalm-return array> + */ public function getPrefixesPsr4() { return $this->prefixDirsPsr4; } + /** + * @return array[] + * @psalm-return array + */ public function getFallbackDirs() { return $this->fallbackDirsPsr0; } + /** + * @return array[] + * @psalm-return array + */ public function getFallbackDirsPsr4() { return $this->fallbackDirsPsr4; } + /** + * @return string[] Array of classname => path + * @psalm-return array + */ public function getClassMap() { return $this->classMap; } /** - * @param array $classMap Class to filename map + * @param string[] $classMap Class to filename map + * @psalm-param array $classMap + * + * @return void */ public function addClassMap(array $classMap) { @@ -102,9 +175,11 @@ class ClassLoader * 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 array|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix + * @param 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) { @@ -147,11 +222,13 @@ class ClassLoader * 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 array|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param 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) { @@ -195,8 +272,10 @@ class ClassLoader * 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 array|string $paths The PSR-0 base directories + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 base directories + * + * @return void */ public function set($prefix, $paths) { @@ -211,10 +290,12 @@ class ClassLoader * 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 array|string $paths The PSR-4 base directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories * * @throws \InvalidArgumentException + * + * @return void */ public function setPsr4($prefix, $paths) { @@ -234,6 +315,8 @@ class ClassLoader * Turns on searching the include path for class files. * * @param bool $useIncludePath + * + * @return void */ public function setUseIncludePath($useIncludePath) { @@ -256,6 +339,8 @@ class ClassLoader * that have not been registered with the class map. * * @param bool $classMapAuthoritative + * + * @return void */ public function setClassMapAuthoritative($classMapAuthoritative) { @@ -276,10 +361,12 @@ class ClassLoader * 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') && ini_get('apc.enabled') ? $apcuPrefix : null; + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; } /** @@ -296,25 +383,44 @@ class ClassLoader * 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 bool|null True if loaded, null otherwise + * @return true|null True if loaded, null otherwise */ public function loadClass($class) { @@ -323,6 +429,8 @@ class ClassLoader return true; } + + return null; } /** @@ -367,6 +475,21 @@ class ClassLoader return $file; } + /** + * Returns the currently registered loaders indexed by their corresponding vendor directories. + * + * @return 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 @@ -377,7 +500,7 @@ class ClassLoader $subPath = $class; while (false !== $lastPos = strrpos($subPath, '\\')) { $subPath = substr($subPath, 0, $lastPos); - $search = $subPath.'\\'; + $search = $subPath . '\\'; if (isset($this->prefixDirsPsr4[$search])) { $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); foreach ($this->prefixDirsPsr4[$search] as $dir) { @@ -438,6 +561,10 @@ class ClassLoader * Scope isolated include. * * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + * @private */ function includeFile($file) { diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php new file mode 100644 index 00000000..d50e0c9f --- /dev/null +++ b/vendor/composer/InstalledVersions.php @@ -0,0 +1,350 @@ + + * Jordi Boggiano + * + * 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` + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + 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 + */ + 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 + */ + 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 || empty($installed['versions'][$packageName]['dev_requirement']); + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints($constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @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, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} + */ + 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, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} + */ + 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}> + */ + 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, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + 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')) { + $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // 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 = require __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + $installed[] = self::$installed; + + return $installed; + } +} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE index f0157a6e..f27399a0 100644 --- a/vendor/composer/LICENSE +++ b/vendor/composer/LICENSE @@ -1,56 +1,21 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: Composer -Upstream-Contact: Jordi Boggiano -Source: https://github.com/composer/composer -Files: * -Copyright: 2016, Nils Adermann - 2016, Jordi Boggiano -License: Expat +Copyright (c) Nils Adermann, Jordi Boggiano -Files: src/Composer/Util/TlsHelper.php -Copyright: 2016, Nils Adermann - 2016, Jordi Boggiano - 2013, Evan Coury -License: Expat and BSD-2-Clause +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: -License: BSD-2-Clause - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: - . - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - . - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - . - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +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. -License: Expat - 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. diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index c56aa1d1..6a5891eb 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -30,6 +30,7 @@ return array( 'App\\Http\\Middleware\\TrustProxies' => $baseDir . '/app/Http/Middleware/TrustProxies.php', 'App\\Http\\Middleware\\VerifyCsrfToken' => $baseDir . '/app/Http/Middleware/VerifyCsrfToken.php', 'App\\Item' => $baseDir . '/app/Item.php', + 'App\\ItemTag' => $baseDir . '/app/ItemTag.php', 'App\\Jobs\\ProcessApps' => $baseDir . '/app/Jobs/ProcessApps.php', 'App\\Providers\\AppServiceProvider' => $baseDir . '/app/Providers/AppServiceProvider.php', 'App\\Providers\\AuthServiceProvider' => $baseDir . '/app/Providers/AuthServiceProvider.php', @@ -42,41 +43,73 @@ return array( 'App\\SettingGroup' => $baseDir . '/app/SettingGroup.php', 'App\\SettingUser' => $baseDir . '/app/SettingUser.php', 'App\\SupportedApps' => $baseDir . '/app/SupportedApps.php', + 'App\\SupportedApps\\AMP\\AMP' => $baseDir . '/app/SupportedApps/AMP/AMP.php', 'App\\SupportedApps\\AVMFritzbox\\AVMFritzbox' => $baseDir . '/app/SupportedApps/AVMFritzbox/AVMFritzbox.php', + 'App\\SupportedApps\\AWX\\AWX' => $baseDir . '/app/SupportedApps/AWX/AWX.php', + 'App\\SupportedApps\\AdGuardHome\\AdGuardHome' => $baseDir . '/app/SupportedApps/AdGuardHome/AdGuardHome.php', 'App\\SupportedApps\\Adminer\\Adminer' => $baseDir . '/app/SupportedApps/Adminer/Adminer.php', 'App\\SupportedApps\\Airsonic\\Airsonic' => $baseDir . '/app/SupportedApps/Airsonic/Airsonic.php', + 'App\\SupportedApps\\AlarmPI\\AlarmPI' => $baseDir . '/app/SupportedApps/AlarmPI/AlarmPI.php', 'App\\SupportedApps\\Alertmanager\\Alertmanager' => $baseDir . '/app/SupportedApps/Alertmanager/Alertmanager.php', + 'App\\SupportedApps\\ArchiSteamFarm\\ArchiSteamFarm' => $baseDir . '/app/SupportedApps/ArchiSteamFarm/ArchiSteamFarm.php', 'App\\SupportedApps\\ArchiveBox\\ArchiveBox' => $baseDir . '/app/SupportedApps/ArchiveBox/ArchiveBox.php', + 'App\\SupportedApps\\ArchiveTeamWarrior\\ArchiveTeamWarrior' => $baseDir . '/app/SupportedApps/ArchiveTeamWarrior/ArchiveTeamWarrior.php', + 'App\\SupportedApps\\AriaNg\\AriaNg' => $baseDir . '/app/SupportedApps/AriaNg/AriaNg.php', + 'App\\SupportedApps\\Artifactory\\Artifactory' => $baseDir . '/app/SupportedApps/Artifactory/Artifactory.php', + 'App\\SupportedApps\\AsrockRackIPMI\\AsrockRackIPMI' => $baseDir . '/app/SupportedApps/AsrockRackIPMI/AsrockRackIPMI.php', + 'App\\SupportedApps\\Bacula\\Bacula' => $baseDir . '/app/SupportedApps/Bacula/Bacula.php', + 'App\\SupportedApps\\Baikal\\Baikal' => $baseDir . '/app/SupportedApps/Baikal/Baikal.php', + 'App\\SupportedApps\\Bastillion\\Bastillion' => $baseDir . '/app/SupportedApps/Bastillion/Bastillion.php', 'App\\SupportedApps\\Bazarr\\Bazarr' => $baseDir . '/app/SupportedApps/Bazarr/Bazarr.php', 'App\\SupportedApps\\Bitwarden\\Bitwarden' => $baseDir . '/app/SupportedApps/Bitwarden/Bitwarden.php', 'App\\SupportedApps\\Booksonic\\Booksonic' => $baseDir . '/app/SupportedApps/Booksonic/Booksonic.php', 'App\\SupportedApps\\Bookstack\\Bookstack' => $baseDir . '/app/SupportedApps/Bookstack/Bookstack.php', + 'App\\SupportedApps\\Box\\Box' => $baseDir . '/app/SupportedApps/Box/Box.php', 'App\\SupportedApps\\Cabot\\Cabot' => $baseDir . '/app/SupportedApps/Cabot/Cabot.php', 'App\\SupportedApps\\CalibreWeb\\CalibreWeb' => $baseDir . '/app/SupportedApps/CalibreWeb/CalibreWeb.php', 'App\\SupportedApps\\Cardigann\\Cardigann' => $baseDir . '/app/SupportedApps/Cardigann/Cardigann.php', + 'App\\SupportedApps\\ChangeDetectionio\\ChangeDetectionio' => $baseDir . '/app/SupportedApps/ChangeDetectionio/ChangeDetectionio.php', 'App\\SupportedApps\\CheckMK\\CheckMK' => $baseDir . '/app/SupportedApps/CheckMK/CheckMK.php', + 'App\\SupportedApps\\Chevereto\\Chevereto' => $baseDir . '/app/SupportedApps/Chevereto/Chevereto.php', + 'App\\SupportedApps\\Chronograf\\Chronograf' => $baseDir . '/app/SupportedApps/Chronograf/Chronograf.php', + 'App\\SupportedApps\\Clarkson\\Clarkson' => $baseDir . '/app/SupportedApps/Clarkson/Clarkson.php', 'App\\SupportedApps\\CloudCMD\\CloudCMD' => $baseDir . '/app/SupportedApps/CloudCMD/CloudCMD.php', 'App\\SupportedApps\\CockpitCMS\\CockpitCMS' => $baseDir . '/app/SupportedApps/CockpitCMS/CockpitCMS.php', 'App\\SupportedApps\\Cockpit\\Cockpit' => $baseDir . '/app/SupportedApps/Cockpit/Cockpit.php', + 'App\\SupportedApps\\Codeserver\\Codeserver' => $baseDir . '/app/SupportedApps/Codeserver/Codeserver.php', + 'App\\SupportedApps\\CodiMD\\CodiMD' => $baseDir . '/app/SupportedApps/CodiMD/CodiMD.php', 'App\\SupportedApps\\Concourse\\Concourse' => $baseDir . '/app/SupportedApps/Concourse/Concourse.php', 'App\\SupportedApps\\Confluence\\Confluence' => $baseDir . '/app/SupportedApps/Confluence/Confluence.php', 'App\\SupportedApps\\CouchPotato\\CouchPotato' => $baseDir . '/app/SupportedApps/CouchPotato/CouchPotato.php', 'App\\SupportedApps\\CryptPad\\CryptPad' => $baseDir . '/app/SupportedApps/CryptPad/CryptPad.php', 'App\\SupportedApps\\Deluge\\Deluge' => $baseDir . '/app/SupportedApps/Deluge/Deluge.php', + 'App\\SupportedApps\\Dillinger\\Dillinger' => $baseDir . '/app/SupportedApps/Dillinger/Dillinger.php', 'App\\SupportedApps\\Directus\\Directus' => $baseDir . '/app/SupportedApps/Directus/Directus.php', 'App\\SupportedApps\\DokuWiki\\DokuWiki' => $baseDir . '/app/SupportedApps/DokuWiki/DokuWiki.php', 'App\\SupportedApps\\Domoticz\\Domoticz' => $baseDir . '/app/SupportedApps/Domoticz/Domoticz.php', + 'App\\SupportedApps\\Dozzle\\Dozzle' => $baseDir . '/app/SupportedApps/Dozzle/Dozzle.php', 'App\\SupportedApps\\Drone\\Drone' => $baseDir . '/app/SupportedApps/Drone/Drone.php', + 'App\\SupportedApps\\Droppy\\Droppy' => $baseDir . '/app/SupportedApps/Droppy/Droppy.php', 'App\\SupportedApps\\Duplicacy\\Duplicacy' => $baseDir . '/app/SupportedApps/Duplicacy/Duplicacy.php', 'App\\SupportedApps\\Duplicati\\Duplicati' => $baseDir . '/app/SupportedApps/Duplicati/Duplicati.php', + 'App\\SupportedApps\\ESPHome\\ESPHome' => $baseDir . '/app/SupportedApps/ESPHome/ESPHome.php', + 'App\\SupportedApps\\Element\\Element' => $baseDir . '/app/SupportedApps/Element/Element.php', + 'App\\SupportedApps\\EmbyStat\\EmbyStat' => $baseDir . '/app/SupportedApps/EmbyStat/EmbyStat.php', 'App\\SupportedApps\\Emby\\Emby' => $baseDir . '/app/SupportedApps/Emby/Emby.php', 'App\\SupportedApps\\FileBrowser\\FileBrowser' => $baseDir . '/app/SupportedApps/FileBrowser/FileBrowser.php', + 'App\\SupportedApps\\FileFlows\\FileFlows' => $baseDir . '/app/SupportedApps/FileFlows/FileFlows.php', + 'App\\SupportedApps\\FileRun\\FileRun' => $baseDir . '/app/SupportedApps/FileRun/FileRun.php', 'App\\SupportedApps\\Firefly\\Firefly' => $baseDir . '/app/SupportedApps/Firefly/Firefly.php', 'App\\SupportedApps\\FirefoxSend\\FirefoxSend' => $baseDir . '/app/SupportedApps/FirefoxSend/FirefoxSend.php', 'App\\SupportedApps\\FlexGet\\FlexGet' => $baseDir . '/app/SupportedApps/FlexGet/FlexGet.php', 'App\\SupportedApps\\Flood\\Flood' => $baseDir . '/app/SupportedApps/Flood/Flood.php', + 'App\\SupportedApps\\Focalboard\\Focalboard' => $baseDir . '/app/SupportedApps/Focalboard/Focalboard.php', + 'App\\SupportedApps\\FoldingHome\\FoldingHome' => $baseDir . '/app/SupportedApps/FoldingHome/FoldingHome.php', + 'App\\SupportedApps\\FortinetFortiMonitor\\FortinetFortiMonitor' => $baseDir . '/app/SupportedApps/FortinetFortiMonitor/FortinetFortiMonitor.php', 'App\\SupportedApps\\Freenas\\Freenas' => $baseDir . '/app/SupportedApps/Freenas/Freenas.php', 'App\\SupportedApps\\FreshRSS\\FreshRSS' => $baseDir . '/app/SupportedApps/FreshRSS/FreshRSS.php', + 'App\\SupportedApps\\Fronius\\Fronius' => $baseDir . '/app/SupportedApps/Fronius/Fronius.php', + 'App\\SupportedApps\\Funkwhale\\Funkwhale' => $baseDir . '/app/SupportedApps/Funkwhale/Funkwhale.php', 'App\\SupportedApps\\Ghost\\Ghost' => $baseDir . '/app/SupportedApps/Ghost/Ghost.php', 'App\\SupportedApps\\GitHub\\GitHub' => $baseDir . '/app/SupportedApps/GitHub/GitHub.php', 'App\\SupportedApps\\GitLab\\GitLab' => $baseDir . '/app/SupportedApps/GitLab/GitLab.php', @@ -87,71 +120,142 @@ return array( 'App\\SupportedApps\\Grafana\\Grafana' => $baseDir . '/app/SupportedApps/Grafana/Grafana.php', 'App\\SupportedApps\\Grav\\Grav' => $baseDir . '/app/SupportedApps/Grav/Grav.php', 'App\\SupportedApps\\Graylog\\Graylog' => $baseDir . '/app/SupportedApps/Graylog/Graylog.php', + 'App\\SupportedApps\\Grocy\\Grocy' => $baseDir . '/app/SupportedApps/Grocy/Grocy.php', 'App\\SupportedApps\\Guacamole\\Guacamole' => $baseDir . '/app/SupportedApps/Guacamole/Guacamole.php', 'App\\SupportedApps\\HAProxy\\HAProxy' => $baseDir . '/app/SupportedApps/HAProxy/HAProxy.php', + 'App\\SupportedApps\\HDHomeRun\\HDHomeRun' => $baseDir . '/app/SupportedApps/HDHomeRun/HDHomeRun.php', + 'App\\SupportedApps\\Handbrake\\Handbrake' => $baseDir . '/app/SupportedApps/Handbrake/Handbrake.php', + 'App\\SupportedApps\\Hasura\\Hasura' => $baseDir . '/app/SupportedApps/Hasura/Hasura.php', 'App\\SupportedApps\\Headphones\\Headphones' => $baseDir . '/app/SupportedApps/Headphones/Headphones.php', 'App\\SupportedApps\\Healthchecks\\Healthchecks' => $baseDir . '/app/SupportedApps/Healthchecks/Healthchecks.php', 'App\\SupportedApps\\HomeAssistant\\HomeAssistant' => $baseDir . '/app/SupportedApps/HomeAssistant/HomeAssistant.php', + 'App\\SupportedApps\\Homebridge\\Homebridge' => $baseDir . '/app/SupportedApps/Homebridge/Homebridge.php', + 'App\\SupportedApps\\Homer\\Homer' => $baseDir . '/app/SupportedApps/Homer/Homer.php', + 'App\\SupportedApps\\Hubitat\\Hubitat' => $baseDir . '/app/SupportedApps/Hubitat/Hubitat.php', 'App\\SupportedApps\\Huginn\\Huginn' => $baseDir . '/app/SupportedApps/Huginn/Huginn.php', + 'App\\SupportedApps\\Icecast\\Icecast' => $baseDir . '/app/SupportedApps/Icecast/Icecast.php', + 'App\\SupportedApps\\IcingaWeb\\IcingaWeb' => $baseDir . '/app/SupportedApps/IcingaWeb/IcingaWeb.php', + 'App\\SupportedApps\\InfluxDB\\InfluxDB' => $baseDir . '/app/SupportedApps/InfluxDB/InfluxDB.php', + 'App\\SupportedApps\\Infoblox\\Infoblox' => $baseDir . '/app/SupportedApps/Infoblox/Infoblox.php', + 'App\\SupportedApps\\Invidious\\Invidious' => $baseDir . '/app/SupportedApps/Invidious/Invidious.php', 'App\\SupportedApps\\InvoiceNinja\\InvoiceNinja' => $baseDir . '/app/SupportedApps/InvoiceNinja/InvoiceNinja.php', 'App\\SupportedApps\\JDownloader\\JDownloader' => $baseDir . '/app/SupportedApps/JDownloader/JDownloader.php', 'App\\SupportedApps\\Jackett\\Jackett' => $baseDir . '/app/SupportedApps/Jackett/Jackett.php', + 'App\\SupportedApps\\Jaeger\\Jaeger' => $baseDir . '/app/SupportedApps/Jaeger/Jaeger.php', 'App\\SupportedApps\\Jeedom\\Jeedom' => $baseDir . '/app/SupportedApps/Jeedom/Jeedom.php', 'App\\SupportedApps\\Jellyfin\\Jellyfin' => $baseDir . '/app/SupportedApps/Jellyfin/Jellyfin.php', 'App\\SupportedApps\\Jenkins\\Jenkins' => $baseDir . '/app/SupportedApps/Jenkins/Jenkins.php', 'App\\SupportedApps\\Jira\\Jira' => $baseDir . '/app/SupportedApps/Jira/Jira.php', + 'App\\SupportedApps\\Jitsi\\Jitsi' => $baseDir . '/app/SupportedApps/Jitsi/Jitsi.php', + 'App\\SupportedApps\\Joomla\\Joomla' => $baseDir . '/app/SupportedApps/Joomla/Joomla.php', 'App\\SupportedApps\\Jupyter\\Jupyter' => $baseDir . '/app/SupportedApps/Jupyter/Jupyter.php', + 'App\\SupportedApps\\Kanboard\\Kanboard' => $baseDir . '/app/SupportedApps/Kanboard/Kanboard.php', 'App\\SupportedApps\\Keycloak\\Keycloak' => $baseDir . '/app/SupportedApps/Keycloak/Keycloak.php', 'App\\SupportedApps\\Kibana\\Kibana' => $baseDir . '/app/SupportedApps/Kibana/Kibana.php', 'App\\SupportedApps\\Kimai\\Kimai' => $baseDir . '/app/SupportedApps/Kimai/Kimai.php', + 'App\\SupportedApps\\Kitana\\Kitana' => $baseDir . '/app/SupportedApps/Kitana/Kitana.php', + 'App\\SupportedApps\\Kodi\\Kodi' => $baseDir . '/app/SupportedApps/Kodi/Kodi.php', + 'App\\SupportedApps\\Komga\\Komga' => $baseDir . '/app/SupportedApps/Komga/Komga.php', + 'App\\SupportedApps\\Kopia\\Kopia' => $baseDir . '/app/SupportedApps/Kopia/Kopia.php', 'App\\SupportedApps\\Krusader\\Krusader' => $baseDir . '/app/SupportedApps/Krusader/Krusader.php', 'App\\SupportedApps\\KubernetesDashboard\\KubernetesDashboard' => $baseDir . '/app/SupportedApps/KubernetesDashboard/KubernetesDashboard.php', 'App\\SupportedApps\\LazyLibrarian\\LazyLibrarian' => $baseDir . '/app/SupportedApps/LazyLibrarian/LazyLibrarian.php', 'App\\SupportedApps\\LemonLDAPNG\\LemonLDAPNG' => $baseDir . '/app/SupportedApps/LemonLDAPNG/LemonLDAPNG.php', + 'App\\SupportedApps\\LibreNMS\\LibreNMS' => $baseDir . '/app/SupportedApps/LibreNMS/LibreNMS.php', + 'App\\SupportedApps\\LibreSpeed\\LibreSpeed' => $baseDir . '/app/SupportedApps/LibreSpeed/LibreSpeed.php', 'App\\SupportedApps\\Lidarr\\Lidarr' => $baseDir . '/app/SupportedApps/Lidarr/Lidarr.php', + 'App\\SupportedApps\\LinkAce\\LinkAce' => $baseDir . '/app/SupportedApps/LinkAce/LinkAce.php', + 'App\\SupportedApps\\Lychee\\Lychee' => $baseDir . '/app/SupportedApps/Lychee/Lychee.php', 'App\\SupportedApps\\MailcowSOGo\\MailcowSOGo' => $baseDir . '/app/SupportedApps/MailcowSOGo/MailcowSOGo.php', 'App\\SupportedApps\\Mailcow\\Mailcow' => $baseDir . '/app/SupportedApps/Mailcow/Mailcow.php', 'App\\SupportedApps\\Mailhog\\Mailhog' => $baseDir . '/app/SupportedApps/Mailhog/Mailhog.php', + 'App\\SupportedApps\\Mainsail\\Mainsail' => $baseDir . '/app/SupportedApps/Mainsail/Mainsail.php', + 'App\\SupportedApps\\Mastodon\\Mastodon' => $baseDir . '/app/SupportedApps/Mastodon/Mastodon.php', 'App\\SupportedApps\\Mattermost\\Mattermost' => $baseDir . '/app/SupportedApps/Mattermost/Mattermost.php', 'App\\SupportedApps\\MayanEDMS\\MayanEDMS' => $baseDir . '/app/SupportedApps/MayanEDMS/MayanEDMS.php', 'App\\SupportedApps\\McMyAdmin\\McMyAdmin' => $baseDir . '/app/SupportedApps/McMyAdmin/McMyAdmin.php', + 'App\\SupportedApps\\Mealie\\Mealie' => $baseDir . '/app/SupportedApps/Mealie/Mealie.php', + 'App\\SupportedApps\\MediaWiki\\MediaWiki' => $baseDir . '/app/SupportedApps/MediaWiki/MediaWiki.php', 'App\\SupportedApps\\Medusa\\Medusa' => $baseDir . '/app/SupportedApps/Medusa/Medusa.php', 'App\\SupportedApps\\Meraki\\Meraki' => $baseDir . '/app/SupportedApps/Meraki/Meraki.php', + 'App\\SupportedApps\\MineOS\\MineOS' => $baseDir . '/app/SupportedApps/MineOS/MineOS.php', 'App\\SupportedApps\\Miniflux\\Miniflux' => $baseDir . '/app/SupportedApps/Miniflux/Miniflux.php', 'App\\SupportedApps\\Minio\\Minio' => $baseDir . '/app/SupportedApps/Minio/Minio.php', 'App\\SupportedApps\\Monica\\Monica' => $baseDir . '/app/SupportedApps/Monica/Monica.php', + 'App\\SupportedApps\\Monit\\Monit' => $baseDir . '/app/SupportedApps/Monit/Monit.php', + 'App\\SupportedApps\\MotionEye\\MotionEye' => $baseDir . '/app/SupportedApps/MotionEye/MotionEye.php', 'App\\SupportedApps\\MusicBrainz\\MusicBrainz' => $baseDir . '/app/SupportedApps/MusicBrainz/MusicBrainz.php', 'App\\SupportedApps\\Mylar\\Mylar' => $baseDir . '/app/SupportedApps/Mylar/Mylar.php', 'App\\SupportedApps\\NZBHydra\\NZBHydra' => $baseDir . '/app/SupportedApps/NZBHydra/NZBHydra.php', + 'App\\SupportedApps\\Navidrome\\Navidrome' => $baseDir . '/app/SupportedApps/Navidrome/Navidrome.php', + 'App\\SupportedApps\\Nessus\\Nessus' => $baseDir . '/app/SupportedApps/Nessus/Nessus.php', + 'App\\SupportedApps\\NetBox\\NetBox' => $baseDir . '/app/SupportedApps/NetBox/NetBox.php', + 'App\\SupportedApps\\Netatmo\\Netatmo' => $baseDir . '/app/SupportedApps/Netatmo/Netatmo.php', + 'App\\SupportedApps\\Netboot\\Netboot' => $baseDir . '/app/SupportedApps/Netboot/Netboot.php', 'App\\SupportedApps\\Netdata\\Netdata' => $baseDir . '/app/SupportedApps/Netdata/Netdata.php', 'App\\SupportedApps\\Nextcloud\\Nextcloud' => $baseDir . '/app/SupportedApps/Nextcloud/Nextcloud.php', 'App\\SupportedApps\\NginxProxyManager\\NginxProxyManager' => $baseDir . '/app/SupportedApps/NginxProxyManager/NginxProxyManager.php', + 'App\\SupportedApps\\Nitter\\Nitter' => $baseDir . '/app/SupportedApps/Nitter/Nitter.php', 'App\\SupportedApps\\NodeRed\\NodeRed' => $baseDir . '/app/SupportedApps/NodeRed/NodeRed.php', 'App\\SupportedApps\\NowShowing\\NowShowing' => $baseDir . '/app/SupportedApps/NowShowing/NowShowing.php', + 'App\\SupportedApps\\NxFilter\\NxFilter' => $baseDir . '/app/SupportedApps/NxFilter/NxFilter.php', 'App\\SupportedApps\\Nzbget\\Nzbget' => $baseDir . '/app/SupportedApps/Nzbget/Nzbget.php', 'App\\SupportedApps\\OPNsense\\OPNsense' => $baseDir . '/app/SupportedApps/OPNsense/OPNsense.php', 'App\\SupportedApps\\Octoprint\\Octoprint' => $baseDir . '/app/SupportedApps/Octoprint/Octoprint.php', 'App\\SupportedApps\\Ombi\\Ombi' => $baseDir . '/app/SupportedApps/Ombi/Ombi.php', 'App\\SupportedApps\\OmniDB\\OmniDB' => $baseDir . '/app/SupportedApps/OmniDB/OmniDB.php', + 'App\\SupportedApps\\OnlyOffice\\OnlyOffice' => $baseDir . '/app/SupportedApps/OnlyOffice/OnlyOffice.php', + 'App\\SupportedApps\\OpenMapTiler\\OpenMapTiler' => $baseDir . '/app/SupportedApps/OpenMapTiler/OpenMapTiler.php', + 'App\\SupportedApps\\OpenSpeedTest\\OpenSpeedTest' => $baseDir . '/app/SupportedApps/OpenSpeedTest/OpenSpeedTest.php', + 'App\\SupportedApps\\OpenSprinkler\\OpenSprinkler' => $baseDir . '/app/SupportedApps/OpenSprinkler/OpenSprinkler.php', + 'App\\SupportedApps\\OpenWrt\\OpenWrt' => $baseDir . '/app/SupportedApps/OpenWrt/OpenWrt.php', 'App\\SupportedApps\\Oscarr\\Oscarr' => $baseDir . '/app/SupportedApps/Oscarr/Oscarr.php', + 'App\\SupportedApps\\Overseerr\\Overseerr' => $baseDir . '/app/SupportedApps/Overseerr/Overseerr.php', 'App\\SupportedApps\\OwnPhotos\\OwnPhotos' => $baseDir . '/app/SupportedApps/OwnPhotos/OwnPhotos.php', + 'App\\SupportedApps\\PRTG\\PRTG' => $baseDir . '/app/SupportedApps/PRTG/PRTG.php', + 'App\\SupportedApps\\PaloAltoNetworks\\PaloAltoNetworks' => $baseDir . '/app/SupportedApps/PaloAltoNetworks/PaloAltoNetworks.php', 'App\\SupportedApps\\Paperless\\Paperless' => $baseDir . '/app/SupportedApps/Paperless/Paperless.php', 'App\\SupportedApps\\PartKeepr\\PartKeepr' => $baseDir . '/app/SupportedApps/PartKeepr/PartKeepr.php', + 'App\\SupportedApps\\PeerTube\\PeerTube' => $baseDir . '/app/SupportedApps/PeerTube/PeerTube.php', + 'App\\SupportedApps\\PhotoPrism\\PhotoPrism' => $baseDir . '/app/SupportedApps/PhotoPrism/PhotoPrism.php', + 'App\\SupportedApps\\Photonix\\Photonix' => $baseDir . '/app/SupportedApps/Photonix/Photonix.php', + 'App\\SupportedApps\\PiAware\\PiAware' => $baseDir . '/app/SupportedApps/PiAware/PiAware.php', + 'App\\SupportedApps\\PiVPN\\PiVPN' => $baseDir . '/app/SupportedApps/PiVPN/PiVPN.php', 'App\\SupportedApps\\Pihole\\Pihole' => $baseDir . '/app/SupportedApps/Pihole/Pihole.php', + 'App\\SupportedApps\\Piwigo\\Piwigo' => $baseDir . '/app/SupportedApps/Piwigo/Piwigo.php', + 'App\\SupportedApps\\Pleroma\\Pleroma' => $baseDir . '/app/SupportedApps/Pleroma/Pleroma.php', + 'App\\SupportedApps\\Plesk\\Plesk' => $baseDir . '/app/SupportedApps/Plesk/Plesk.php', 'App\\SupportedApps\\PlexRequests\\PlexRequests' => $baseDir . '/app/SupportedApps/PlexRequests/PlexRequests.php', 'App\\SupportedApps\\Plex\\Plex' => $baseDir . '/app/SupportedApps/Plex/Plex.php', + 'App\\SupportedApps\\Plume\\Plume' => $baseDir . '/app/SupportedApps/Plume/Plume.php', 'App\\SupportedApps\\Portainer\\Portainer' => $baseDir . '/app/SupportedApps/Portainer/Portainer.php', + 'App\\SupportedApps\\Poste\\Poste' => $baseDir . '/app/SupportedApps/Poste/Poste.php', + 'App\\SupportedApps\\Printer\\Printer' => $baseDir . '/app/SupportedApps/Printer/Printer.php', 'App\\SupportedApps\\Privatebin\\Privatebin' => $baseDir . '/app/SupportedApps/Privatebin/Privatebin.php', 'App\\SupportedApps\\ProjectSend\\ProjectSend' => $baseDir . '/app/SupportedApps/ProjectSend/ProjectSend.php', 'App\\SupportedApps\\Prometheus\\Prometheus' => $baseDir . '/app/SupportedApps/Prometheus/Prometheus.php', + 'App\\SupportedApps\\Prowlarr\\Prowlarr' => $baseDir . '/app/SupportedApps/Prowlarr/Prowlarr.php', 'App\\SupportedApps\\Proxmox\\Proxmox' => $baseDir . '/app/SupportedApps/Proxmox/Proxmox.php', + 'App\\SupportedApps\\PsiTransfer\\PsiTransfer' => $baseDir . '/app/SupportedApps/PsiTransfer/PsiTransfer.php', + 'App\\SupportedApps\\Pterodactyl\\Pterodactyl' => $baseDir . '/app/SupportedApps/Pterodactyl/Pterodactyl.php', 'App\\SupportedApps\\QNAP\\QNAP' => $baseDir . '/app/SupportedApps/QNAP/QNAP.php', + 'App\\SupportedApps\\RStudioServer\\RStudioServer' => $baseDir . '/app/SupportedApps/RStudioServer/RStudioServer.php', 'App\\SupportedApps\\Radarr\\Radarr' => $baseDir . '/app/SupportedApps/Radarr/Radarr.php', + 'App\\SupportedApps\\Rainloop\\Rainloop' => $baseDir . '/app/SupportedApps/Rainloop/Rainloop.php', 'App\\SupportedApps\\Rancher\\Rancher' => $baseDir . '/app/SupportedApps/Rancher/Rancher.php', 'App\\SupportedApps\\Raneto\\Raneto' => $baseDir . '/app/SupportedApps/Raneto/Raneto.php', + 'App\\SupportedApps\\Rclone\\Rclone' => $baseDir . '/app/SupportedApps/Rclone/Rclone.php', + 'App\\SupportedApps\\Readarr\\Readarr' => $baseDir . '/app/SupportedApps/Readarr/Readarr.php', + 'App\\SupportedApps\\Recalbox\\Recalbox' => $baseDir . '/app/SupportedApps/Recalbox/Recalbox.php', + 'App\\SupportedApps\\Requestrr\\Requestrr' => $baseDir . '/app/SupportedApps/Requestrr/Requestrr.php', 'App\\SupportedApps\\ResilioSync\\ResilioSync' => $baseDir . '/app/SupportedApps/ResilioSync/ResilioSync.php', + 'App\\SupportedApps\\RiotWeb\\RiotWeb' => $baseDir . '/app/SupportedApps/RiotWeb/RiotWeb.php', 'App\\SupportedApps\\RocketChat\\RocketChat' => $baseDir . '/app/SupportedApps/RocketChat/RocketChat.php', + 'App\\SupportedApps\\RompЯ\\RompЯ' => $baseDir . '/app/SupportedApps/RompЯ/RompЯ.php', + 'App\\SupportedApps\\Roundcube\\Roundcube' => $baseDir . '/app/SupportedApps/Roundcube/Roundcube.php', + 'App\\SupportedApps\\Router\\Router' => $baseDir . '/app/SupportedApps/Router/Router.php', 'App\\SupportedApps\\Rspamd\\Rspamd' => $baseDir . '/app/SupportedApps/Rspamd/Rspamd.php', + 'App\\SupportedApps\\Rundeck\\Rundeck' => $baseDir . '/app/SupportedApps/Rundeck/Rundeck.php', 'App\\SupportedApps\\RuneAudio\\RuneAudio' => $baseDir . '/app/SupportedApps/RuneAudio/RuneAudio.php', 'App\\SupportedApps\\SABnzbd\\SABnzbd' => $baseDir . '/app/SupportedApps/SABnzbd/SABnzbd.php', 'App\\SupportedApps\\SOGo\\SOGo' => $baseDir . '/app/SupportedApps/SOGo/SOGo.php', @@ -161,58 +265,188 @@ return array( 'App\\SupportedApps\\Shaarli\\Shaarli' => $baseDir . '/app/SupportedApps/Shaarli/Shaarli.php', 'App\\SupportedApps\\Shinobi\\Shinobi' => $baseDir . '/app/SupportedApps/Shinobi/Shinobi.php', 'App\\SupportedApps\\SickBeard\\SickBeard' => $baseDir . '/app/SupportedApps/SickBeard/SickBeard.php', + 'App\\SupportedApps\\SickGear\\SickGear' => $baseDir . '/app/SupportedApps/SickGear/SickGear.php', 'App\\SupportedApps\\Sickchill\\Sickchill' => $baseDir . '/app/SupportedApps/Sickchill/Sickchill.php', 'App\\SupportedApps\\Slack\\Slack' => $baseDir . '/app/SupportedApps/Slack/Slack.php', 'App\\SupportedApps\\Snibox\\Snibox' => $baseDir . '/app/SupportedApps/Snibox/Snibox.php', + 'App\\SupportedApps\\SonarQube\\SonarQube' => $baseDir . '/app/SupportedApps/SonarQube/SonarQube.php', 'App\\SupportedApps\\Sonarr\\Sonarr' => $baseDir . '/app/SupportedApps/Sonarr/Sonarr.php', 'App\\SupportedApps\\Sourcegraph\\Sourcegraph' => $baseDir . '/app/SupportedApps/Sourcegraph/Sourcegraph.php', + 'App\\SupportedApps\\Splunk\\Splunk' => $baseDir . '/app/SupportedApps/Splunk/Splunk.php', + 'App\\SupportedApps\\Spotweb\\Spotweb' => $baseDir . '/app/SupportedApps/Spotweb/Spotweb.php', 'App\\SupportedApps\\Squidex\\Squidex' => $baseDir . '/app/SupportedApps/Squidex/Squidex.php', + 'App\\SupportedApps\\Stash\\Stash' => $baseDir . '/app/SupportedApps/Stash/Stash.php', + 'App\\SupportedApps\\Statping\\Statping' => $baseDir . '/app/SupportedApps/Statping/Statping.php', 'App\\SupportedApps\\Strapi\\Strapi' => $baseDir . '/app/SupportedApps/Strapi/Strapi.php', + 'App\\SupportedApps\\Streama\\Streama' => $baseDir . '/app/SupportedApps/Streama/Streama.php', + 'App\\SupportedApps\\Sympa\\Sympa' => $baseDir . '/app/SupportedApps/Sympa/Sympa.php', + 'App\\SupportedApps\\Synclounge\\Synclounge' => $baseDir . '/app/SupportedApps/Synclounge/Synclounge.php', 'App\\SupportedApps\\Syncthing\\Syncthing' => $baseDir . '/app/SupportedApps/Syncthing/Syncthing.php', 'App\\SupportedApps\\Synology\\Synology' => $baseDir . '/app/SupportedApps/Synology/Synology.php', 'App\\SupportedApps\\TVHeadend\\TVHeadend' => $baseDir . '/app/SupportedApps/TVHeadend/TVHeadend.php', + 'App\\SupportedApps\\TYPO\\TYPO' => $baseDir . '/app/SupportedApps/TYPO/TYPO.php', 'App\\SupportedApps\\Taiga\\Taiga' => $baseDir . '/app/SupportedApps/Taiga/Taiga.php', + 'App\\SupportedApps\\TandoorRecipes\\TandoorRecipes' => $baseDir . '/app/SupportedApps/TandoorRecipes/TandoorRecipes.php', + 'App\\SupportedApps\\TarTenNinety\\TarTenNinety' => $baseDir . '/app/SupportedApps/TarTenNinety/TarTenNinety.php', + 'App\\SupportedApps\\TasmoAdmin\\TasmoAdmin' => $baseDir . '/app/SupportedApps/TasmoAdmin/TasmoAdmin.php', + 'App\\SupportedApps\\Tasmota\\Tasmota' => $baseDir . '/app/SupportedApps/Tasmota/Tasmota.php', 'App\\SupportedApps\\Tautulli\\Tautulli' => $baseDir . '/app/SupportedApps/Tautulli/Tautulli.php', + 'App\\SupportedApps\\Tdarr\\Tdarr' => $baseDir . '/app/SupportedApps/Tdarr/Tdarr.php', + 'App\\SupportedApps\\Teedy\\Teedy' => $baseDir . '/app/SupportedApps/Teedy/Teedy.php', 'App\\SupportedApps\\TheLounge\\TheLounge' => $baseDir . '/app/SupportedApps/TheLounge/TheLounge.php', 'App\\SupportedApps\\TinyTinyRSS\\TinyTinyRSS' => $baseDir . '/app/SupportedApps/TinyTinyRSS/TinyTinyRSS.php', 'App\\SupportedApps\\Traccar\\Traccar' => $baseDir . '/app/SupportedApps/Traccar/Traccar.php', 'App\\SupportedApps\\Traefik\\Traefik' => $baseDir . '/app/SupportedApps/Traefik/Traefik.php', 'App\\SupportedApps\\Transmission\\Transmission' => $baseDir . '/app/SupportedApps/Transmission/Transmission.php', 'App\\SupportedApps\\Trilium\\Trilium' => $baseDir . '/app/SupportedApps/Trilium/Trilium.php', + 'App\\SupportedApps\\TrueNASCORE\\TrueNASCORE' => $baseDir . '/app/SupportedApps/TrueNASCORE/TrueNASCORE.php', + 'App\\SupportedApps\\TrueNAS\\TrueNAS' => $baseDir . '/app/SupportedApps/TrueNAS/TrueNAS.php', 'App\\SupportedApps\\Ubooquity\\Ubooquity' => $baseDir . '/app/SupportedApps/Ubooquity/Ubooquity.php', 'App\\SupportedApps\\UniFi\\UniFi' => $baseDir . '/app/SupportedApps/UniFi/UniFi.php', 'App\\SupportedApps\\Unraid\\Unraid' => $baseDir . '/app/SupportedApps/Unraid/Unraid.php', + 'App\\SupportedApps\\UrBackup\\UrBackup' => $baseDir . '/app/SupportedApps/UrBackup/UrBackup.php', + 'App\\SupportedApps\\VMwareESXi\\VMwareESXi' => $baseDir . '/app/SupportedApps/VMwareESXi/VMwareESXi.php', 'App\\SupportedApps\\VMwarevCenter\\VMwarevCenter' => $baseDir . '/app/SupportedApps/VMwarevCenter/VMwarevCenter.php', + 'App\\SupportedApps\\ViMbAdmin\\ViMbAdmin' => $baseDir . '/app/SupportedApps/ViMbAdmin/ViMbAdmin.php', + 'App\\SupportedApps\\VirtualRadarServer\\VirtualRadarServer' => $baseDir . '/app/SupportedApps/VirtualRadarServer/VirtualRadarServer.php', 'App\\SupportedApps\\Virtualmin\\Virtualmin' => $baseDir . '/app/SupportedApps/Virtualmin/Virtualmin.php', + 'App\\SupportedApps\\Volumio\\Volumio' => $baseDir . '/app/SupportedApps/Volumio/Volumio.php', + 'App\\SupportedApps\\VuPlus\\VuPlus' => $baseDir . '/app/SupportedApps/VuPlus/VuPlus.php', 'App\\SupportedApps\\Wallabag\\Wallabag' => $baseDir . '/app/SupportedApps/Wallabag/Wallabag.php', + 'App\\SupportedApps\\WaniKani\\WaniKani' => $baseDir . '/app/SupportedApps/WaniKani/WaniKani.php', 'App\\SupportedApps\\Watcher\\Watcher' => $baseDir . '/app/SupportedApps/Watcher/Watcher.php', 'App\\SupportedApps\\WebTools\\WebTools' => $baseDir . '/app/SupportedApps/WebTools/WebTools.php', 'App\\SupportedApps\\Webmin\\Webmin' => $baseDir . '/app/SupportedApps/Webmin/Webmin.php', 'App\\SupportedApps\\Wekan\\Wekan' => $baseDir . '/app/SupportedApps/Wekan/Wekan.php', 'App\\SupportedApps\\Wetty\\Wetty' => $baseDir . '/app/SupportedApps/Wetty/Wetty.php', + 'App\\SupportedApps\\WgGenWeb\\WgGenWeb' => $baseDir . '/app/SupportedApps/WgGenWeb/WgGenWeb.php', + 'App\\SupportedApps\\Wikijs\\Wikijs' => $baseDir . '/app/SupportedApps/Wikijs/Wikijs.php', + 'App\\SupportedApps\\WireGuard\\WireGuard' => $baseDir . '/app/SupportedApps/WireGuard/WireGuard.php', + 'App\\SupportedApps\\Wordpress\\Wordpress' => $baseDir . '/app/SupportedApps/Wordpress/Wordpress.php', 'App\\SupportedApps\\XWiki\\XWiki' => $baseDir . '/app/SupportedApps/XWiki/XWiki.php', + 'App\\SupportedApps\\XenOrchestra\\XenOrchestra' => $baseDir . '/app/SupportedApps/XenOrchestra/XenOrchestra.php', 'App\\SupportedApps\\Xigmanas\\Xigmanas' => $baseDir . '/app/SupportedApps/Xigmanas/Xigmanas.php', + 'App\\SupportedApps\\YNAB\\YNAB' => $baseDir . '/app/SupportedApps/YNAB/YNAB.php', 'App\\SupportedApps\\ZNC\\ZNC' => $baseDir . '/app/SupportedApps/ZNC/ZNC.php', + 'App\\SupportedApps\\Zabbix\\Zabbix' => $baseDir . '/app/SupportedApps/Zabbix/Zabbix.php', + 'App\\SupportedApps\\Zammad\\Zammad' => $baseDir . '/app/SupportedApps/Zammad/Zammad.php', 'App\\SupportedApps\\ZoneMinder\\ZoneMinder' => $baseDir . '/app/SupportedApps/ZoneMinder/ZoneMinder.php', 'App\\SupportedApps\\Zulip\\Zulip' => $baseDir . '/app/SupportedApps/Zulip/Zulip.php', + 'App\\SupportedApps\\cPanel\\cPanel' => $baseDir . '/app/SupportedApps/cPanel/cPanel.php', + 'App\\SupportedApps\\iDRAC\\iDRAC' => $baseDir . '/app/SupportedApps/iDRAC/iDRAC.php', + 'App\\SupportedApps\\iLO\\iLO' => $baseDir . '/app/SupportedApps/iLO/iLO.php', + 'App\\SupportedApps\\ioBroker\\ioBroker' => $baseDir . '/app/SupportedApps/ioBroker/ioBroker.php', + 'App\\SupportedApps\\neightn\\neightn' => $baseDir . '/app/SupportedApps/neightn/neightn.php', 'App\\SupportedApps\\openHAB\\openHAB' => $baseDir . '/app/SupportedApps/openHAB/openHAB.php', 'App\\SupportedApps\\openmediavault\\openmediavault' => $baseDir . '/app/SupportedApps/openmediavault/openmediavault.php', + 'App\\SupportedApps\\osTicket\\osTicket' => $baseDir . '/app/SupportedApps/osTicket/osTicket.php', 'App\\SupportedApps\\ownCloud\\ownCloud' => $baseDir . '/app/SupportedApps/ownCloud/ownCloud.php', 'App\\SupportedApps\\pfSense\\pfSense' => $baseDir . '/app/SupportedApps/pfSense/pfSense.php', 'App\\SupportedApps\\pgAdmin\\pgAdmin' => $baseDir . '/app/SupportedApps/pgAdmin/pgAdmin.php', + 'App\\SupportedApps\\phpIPAM\\phpIPAM' => $baseDir . '/app/SupportedApps/phpIPAM/phpIPAM.php', 'App\\SupportedApps\\phpLDAPadmin\\phpLDAPadmin' => $baseDir . '/app/SupportedApps/phpLDAPadmin/phpLDAPadmin.php', 'App\\SupportedApps\\phpMyAdmin\\phpMyAdmin' => $baseDir . '/app/SupportedApps/phpMyAdmin/phpMyAdmin.php', 'App\\SupportedApps\\pyLoad\\pyLoad' => $baseDir . '/app/SupportedApps/pyLoad/pyLoad.php', 'App\\SupportedApps\\qBittorrent\\qBittorrent' => $baseDir . '/app/SupportedApps/qBittorrent/qBittorrent.php', 'App\\SupportedApps\\ruTorrent\\ruTorrent' => $baseDir . '/app/SupportedApps/ruTorrent/ruTorrent.php', + 'App\\SupportedApps\\vmwarehorizon\\vmwarehorizon' => $baseDir . '/app/SupportedApps/vmwarehorizon/vmwarehorizon.php', + 'App\\SupportedApps\\xTeVe\\xTeVe' => $baseDir . '/app/SupportedApps/xTeVe/xTeVe.php', + 'App\\SupportedApps\\youtubedl\\youtubedl' => $baseDir . '/app/SupportedApps/youtubedl/youtubedl.php', 'App\\User' => $baseDir . '/app/User.php', + 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Brick\\Math\\BigDecimal' => $vendorDir . '/brick/math/src/BigDecimal.php', + 'Brick\\Math\\BigInteger' => $vendorDir . '/brick/math/src/BigInteger.php', + 'Brick\\Math\\BigNumber' => $vendorDir . '/brick/math/src/BigNumber.php', + 'Brick\\Math\\BigRational' => $vendorDir . '/brick/math/src/BigRational.php', + 'Brick\\Math\\Exception\\DivisionByZeroException' => $vendorDir . '/brick/math/src/Exception/DivisionByZeroException.php', + 'Brick\\Math\\Exception\\IntegerOverflowException' => $vendorDir . '/brick/math/src/Exception/IntegerOverflowException.php', + 'Brick\\Math\\Exception\\MathException' => $vendorDir . '/brick/math/src/Exception/MathException.php', + 'Brick\\Math\\Exception\\NegativeNumberException' => $vendorDir . '/brick/math/src/Exception/NegativeNumberException.php', + 'Brick\\Math\\Exception\\NumberFormatException' => $vendorDir . '/brick/math/src/Exception/NumberFormatException.php', + 'Brick\\Math\\Exception\\RoundingNecessaryException' => $vendorDir . '/brick/math/src/Exception/RoundingNecessaryException.php', + 'Brick\\Math\\Internal\\Calculator' => $vendorDir . '/brick/math/src/Internal/Calculator.php', + 'Brick\\Math\\Internal\\Calculator\\BcMathCalculator' => $vendorDir . '/brick/math/src/Internal/Calculator/BcMathCalculator.php', + 'Brick\\Math\\Internal\\Calculator\\GmpCalculator' => $vendorDir . '/brick/math/src/Internal/Calculator/GmpCalculator.php', + 'Brick\\Math\\Internal\\Calculator\\NativeCalculator' => $vendorDir . '/brick/math/src/Internal/Calculator/NativeCalculator.php', + 'Brick\\Math\\RoundingMode' => $vendorDir . '/brick/math/src/RoundingMode.php', + 'Carbon\\AbstractTranslator' => $vendorDir . '/nesbot/carbon/src/Carbon/AbstractTranslator.php', 'Carbon\\Carbon' => $vendorDir . '/nesbot/carbon/src/Carbon/Carbon.php', + 'Carbon\\CarbonConverterInterface' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonConverterInterface.php', + 'Carbon\\CarbonImmutable' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonImmutable.php', + 'Carbon\\CarbonInterface' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonInterface.php', 'Carbon\\CarbonInterval' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonInterval.php', 'Carbon\\CarbonPeriod' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonPeriod.php', + 'Carbon\\CarbonTimeZone' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonTimeZone.php', + 'Carbon\\Cli\\Invoker' => $vendorDir . '/nesbot/carbon/src/Carbon/Cli/Invoker.php', + 'Carbon\\Doctrine\\CarbonDoctrineType' => $vendorDir . '/nesbot/carbon/src/Carbon/Doctrine/CarbonDoctrineType.php', + 'Carbon\\Doctrine\\CarbonImmutableType' => $vendorDir . '/nesbot/carbon/src/Carbon/Doctrine/CarbonImmutableType.php', + 'Carbon\\Doctrine\\CarbonType' => $vendorDir . '/nesbot/carbon/src/Carbon/Doctrine/CarbonType.php', + 'Carbon\\Doctrine\\CarbonTypeConverter' => $vendorDir . '/nesbot/carbon/src/Carbon/Doctrine/CarbonTypeConverter.php', + 'Carbon\\Doctrine\\DateTimeDefaultPrecision' => $vendorDir . '/nesbot/carbon/src/Carbon/Doctrine/DateTimeDefaultPrecision.php', + 'Carbon\\Doctrine\\DateTimeImmutableType' => $vendorDir . '/nesbot/carbon/src/Carbon/Doctrine/DateTimeImmutableType.php', + 'Carbon\\Doctrine\\DateTimeType' => $vendorDir . '/nesbot/carbon/src/Carbon/Doctrine/DateTimeType.php', + 'Carbon\\Exceptions\\BadComparisonUnitException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/BadComparisonUnitException.php', + 'Carbon\\Exceptions\\BadFluentConstructorException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/BadFluentConstructorException.php', + 'Carbon\\Exceptions\\BadFluentSetterException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/BadFluentSetterException.php', + 'Carbon\\Exceptions\\BadMethodCallException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/BadMethodCallException.php', + 'Carbon\\Exceptions\\Exception' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/Exception.php', + 'Carbon\\Exceptions\\ImmutableException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/ImmutableException.php', + 'Carbon\\Exceptions\\InvalidArgumentException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/InvalidArgumentException.php', + 'Carbon\\Exceptions\\InvalidCastException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/InvalidCastException.php', 'Carbon\\Exceptions\\InvalidDateException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php', + 'Carbon\\Exceptions\\InvalidFormatException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/InvalidFormatException.php', + 'Carbon\\Exceptions\\InvalidIntervalException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/InvalidIntervalException.php', + 'Carbon\\Exceptions\\InvalidPeriodDateException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodDateException.php', + 'Carbon\\Exceptions\\InvalidPeriodParameterException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodParameterException.php', + 'Carbon\\Exceptions\\InvalidTimeZoneException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/InvalidTimeZoneException.php', + 'Carbon\\Exceptions\\InvalidTypeException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/InvalidTypeException.php', + 'Carbon\\Exceptions\\NotACarbonClassException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/NotACarbonClassException.php', + 'Carbon\\Exceptions\\NotAPeriodException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/NotAPeriodException.php', + 'Carbon\\Exceptions\\NotLocaleAwareException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/NotLocaleAwareException.php', + 'Carbon\\Exceptions\\OutOfRangeException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/OutOfRangeException.php', + 'Carbon\\Exceptions\\ParseErrorException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/ParseErrorException.php', + 'Carbon\\Exceptions\\RuntimeException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/RuntimeException.php', + 'Carbon\\Exceptions\\UnitException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/UnitException.php', + 'Carbon\\Exceptions\\UnitNotConfiguredException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/UnitNotConfiguredException.php', + 'Carbon\\Exceptions\\UnknownGetterException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/UnknownGetterException.php', + 'Carbon\\Exceptions\\UnknownMethodException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/UnknownMethodException.php', + 'Carbon\\Exceptions\\UnknownSetterException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/UnknownSetterException.php', + 'Carbon\\Exceptions\\UnknownUnitException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/UnknownUnitException.php', + 'Carbon\\Exceptions\\UnreachableException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/UnreachableException.php', + 'Carbon\\Factory' => $vendorDir . '/nesbot/carbon/src/Carbon/Factory.php', + 'Carbon\\FactoryImmutable' => $vendorDir . '/nesbot/carbon/src/Carbon/FactoryImmutable.php', + 'Carbon\\Language' => $vendorDir . '/nesbot/carbon/src/Carbon/Language.php', 'Carbon\\Laravel\\ServiceProvider' => $vendorDir . '/nesbot/carbon/src/Carbon/Laravel/ServiceProvider.php', + 'Carbon\\PHPStan\\AbstractMacro' => $vendorDir . '/nesbot/carbon/src/Carbon/PHPStan/AbstractMacro.php', + 'Carbon\\PHPStan\\Macro' => $vendorDir . '/nesbot/carbon/src/Carbon/PHPStan/Macro.php', + 'Carbon\\PHPStan\\MacroExtension' => $vendorDir . '/nesbot/carbon/src/Carbon/PHPStan/MacroExtension.php', + 'Carbon\\PHPStan\\MacroScanner' => $vendorDir . '/nesbot/carbon/src/Carbon/PHPStan/MacroScanner.php', + 'Carbon\\Traits\\Boundaries' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Boundaries.php', + 'Carbon\\Traits\\Cast' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Cast.php', + 'Carbon\\Traits\\Comparison' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Comparison.php', + 'Carbon\\Traits\\Converter' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Converter.php', + 'Carbon\\Traits\\Creator' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Creator.php', + 'Carbon\\Traits\\Date' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Date.php', + 'Carbon\\Traits\\DeprecatedProperties' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/DeprecatedProperties.php', + 'Carbon\\Traits\\Difference' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Difference.php', + 'Carbon\\Traits\\IntervalRounding' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/IntervalRounding.php', + 'Carbon\\Traits\\IntervalStep' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/IntervalStep.php', + 'Carbon\\Traits\\Localization' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Localization.php', + 'Carbon\\Traits\\Macro' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Macro.php', + 'Carbon\\Traits\\Mixin' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Mixin.php', + 'Carbon\\Traits\\Modifiers' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Modifiers.php', + 'Carbon\\Traits\\Mutability' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Mutability.php', + 'Carbon\\Traits\\ObjectInitialisation' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/ObjectInitialisation.php', + 'Carbon\\Traits\\Options' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Options.php', + 'Carbon\\Traits\\Rounding' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Rounding.php', + 'Carbon\\Traits\\Serialization' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Serialization.php', + 'Carbon\\Traits\\Test' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Test.php', + 'Carbon\\Traits\\Timestamp' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Timestamp.php', + 'Carbon\\Traits\\Units' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Units.php', + 'Carbon\\Traits\\Week' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Week.php', 'Carbon\\Translator' => $vendorDir . '/nesbot/carbon/src/Carbon/Translator.php', - 'Carbon\\Upgrade' => $vendorDir . '/nesbot/carbon/src/Carbon/Upgrade.php', + 'Carbon\\TranslatorImmutable' => $vendorDir . '/nesbot/carbon/src/Carbon/TranslatorImmutable.php', + 'Carbon\\TranslatorStrongTypeInterface' => $vendorDir . '/nesbot/carbon/src/Carbon/TranslatorStrongTypeInterface.php', 'Clue\\StreamFilter\\CallbackFilter' => $vendorDir . '/clue/stream-filter/src/CallbackFilter.php', 'Collective\\Html\\Componentable' => $vendorDir . '/laravelcollective/html/src/Componentable.php', 'Collective\\Html\\Eloquent\\FormAccessible' => $vendorDir . '/laravelcollective/html/src/Eloquent/FormAccessible.php', @@ -221,6 +455,7 @@ return array( 'Collective\\Html\\HtmlBuilder' => $vendorDir . '/laravelcollective/html/src/HtmlBuilder.php', 'Collective\\Html\\HtmlFacade' => $vendorDir . '/laravelcollective/html/src/HtmlFacade.php', 'Collective\\Html\\HtmlServiceProvider' => $vendorDir . '/laravelcollective/html/src/HtmlServiceProvider.php', + 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 'Cron\\AbstractField' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/AbstractField.php', 'Cron\\CronExpression' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/CronExpression.php', 'Cron\\DayOfMonthField' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php', @@ -250,12 +485,53 @@ return array( 'DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php', 'DeepCopy\\TypeFilter\\ReplaceFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php', 'DeepCopy\\TypeFilter\\ShallowCopyFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php', + 'DeepCopy\\TypeFilter\\Spl\\ArrayObjectFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php', 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedList' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php', 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php', 'DeepCopy\\TypeFilter\\TypeFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php', 'DeepCopy\\TypeMatcher\\TypeMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php', - 'Doctrine\\Common\\Inflector\\Inflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php', 'Doctrine\\Common\\Lexer\\AbstractLexer' => $vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php', + 'Doctrine\\Inflector\\CachedWordInflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php', + 'Doctrine\\Inflector\\GenericLanguageInflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php', + 'Doctrine\\Inflector\\Inflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php', + 'Doctrine\\Inflector\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php', + 'Doctrine\\Inflector\\Language' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Language.php', + 'Doctrine\\Inflector\\LanguageInflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/LanguageInflectorFactory.php', + 'Doctrine\\Inflector\\NoopWordInflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/NoopWordInflector.php', + 'Doctrine\\Inflector\\Rules\\English\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Inflectible.php', + 'Doctrine\\Inflector\\Rules\\English\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/InflectorFactory.php', + 'Doctrine\\Inflector\\Rules\\English\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Rules.php', + 'Doctrine\\Inflector\\Rules\\English\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php', + 'Doctrine\\Inflector\\Rules\\French\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Inflectible.php', + 'Doctrine\\Inflector\\Rules\\French\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/InflectorFactory.php', + 'Doctrine\\Inflector\\Rules\\French\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Rules.php', + 'Doctrine\\Inflector\\Rules\\French\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php', + 'Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Inflectible.php', + 'Doctrine\\Inflector\\Rules\\NorwegianBokmal\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/InflectorFactory.php', + 'Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Rules.php', + 'Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php', + 'Doctrine\\Inflector\\Rules\\Pattern' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Pattern.php', + 'Doctrine\\Inflector\\Rules\\Patterns' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php', + 'Doctrine\\Inflector\\Rules\\Portuguese\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php', + 'Doctrine\\Inflector\\Rules\\Portuguese\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/InflectorFactory.php', + 'Doctrine\\Inflector\\Rules\\Portuguese\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Rules.php', + 'Doctrine\\Inflector\\Rules\\Portuguese\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php', + 'Doctrine\\Inflector\\Rules\\Ruleset' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Ruleset.php', + 'Doctrine\\Inflector\\Rules\\Spanish\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php', + 'Doctrine\\Inflector\\Rules\\Spanish\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/InflectorFactory.php', + 'Doctrine\\Inflector\\Rules\\Spanish\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Rules.php', + 'Doctrine\\Inflector\\Rules\\Spanish\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php', + 'Doctrine\\Inflector\\Rules\\Substitution' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitution.php', + 'Doctrine\\Inflector\\Rules\\Substitutions' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php', + 'Doctrine\\Inflector\\Rules\\Transformation' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php', + 'Doctrine\\Inflector\\Rules\\Transformations' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php', + 'Doctrine\\Inflector\\Rules\\Turkish\\Inflectible' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php', + 'Doctrine\\Inflector\\Rules\\Turkish\\InflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/InflectorFactory.php', + 'Doctrine\\Inflector\\Rules\\Turkish\\Rules' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Rules.php', + 'Doctrine\\Inflector\\Rules\\Turkish\\Uninflected' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php', + 'Doctrine\\Inflector\\Rules\\Word' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Word.php', + 'Doctrine\\Inflector\\RulesetInflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php', + 'Doctrine\\Inflector\\WordInflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php', 'Doctrine\\Instantiator\\Exception\\ExceptionInterface' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php', 'Doctrine\\Instantiator\\Exception\\InvalidArgumentException' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php', 'Doctrine\\Instantiator\\Exception\\UnexpectedValueException' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php', @@ -263,76 +539,103 @@ return array( 'Doctrine\\Instantiator\\InstantiatorInterface' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php', 'Dotenv\\Dotenv' => $vendorDir . '/vlucas/phpdotenv/src/Dotenv.php', 'Dotenv\\Exception\\ExceptionInterface' => $vendorDir . '/vlucas/phpdotenv/src/Exception/ExceptionInterface.php', - 'Dotenv\\Exception\\InvalidCallbackException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidCallbackException.php', 'Dotenv\\Exception\\InvalidFileException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidFileException.php', 'Dotenv\\Exception\\InvalidPathException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidPathException.php', 'Dotenv\\Exception\\ValidationException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/ValidationException.php', - 'Dotenv\\Loader' => $vendorDir . '/vlucas/phpdotenv/src/Loader.php', - 'Dotenv\\Parser' => $vendorDir . '/vlucas/phpdotenv/src/Parser.php', + 'Dotenv\\Loader\\Lines' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Lines.php', + 'Dotenv\\Loader\\Loader' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Loader.php', + 'Dotenv\\Loader\\LoaderInterface' => $vendorDir . '/vlucas/phpdotenv/src/Loader/LoaderInterface.php', + 'Dotenv\\Loader\\Parser' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Parser.php', + 'Dotenv\\Loader\\Value' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Value.php', + 'Dotenv\\Regex\\Regex' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Regex.php', + 'Dotenv\\Repository\\AbstractRepository' => $vendorDir . '/vlucas/phpdotenv/src/Repository/AbstractRepository.php', + 'Dotenv\\Repository\\AdapterRepository' => $vendorDir . '/vlucas/phpdotenv/src/Repository/AdapterRepository.php', + 'Dotenv\\Repository\\Adapter\\ApacheAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php', + 'Dotenv\\Repository\\Adapter\\ArrayAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php', + 'Dotenv\\Repository\\Adapter\\AvailabilityInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php', + 'Dotenv\\Repository\\Adapter\\EnvConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php', + 'Dotenv\\Repository\\Adapter\\PutenvAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php', + 'Dotenv\\Repository\\Adapter\\ReaderInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php', + 'Dotenv\\Repository\\Adapter\\ServerConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php', + 'Dotenv\\Repository\\Adapter\\WriterInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php', + 'Dotenv\\Repository\\RepositoryBuilder' => $vendorDir . '/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php', + 'Dotenv\\Repository\\RepositoryInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/RepositoryInterface.php', + 'Dotenv\\Result\\Error' => $vendorDir . '/vlucas/phpdotenv/src/Result/Error.php', + 'Dotenv\\Result\\Result' => $vendorDir . '/vlucas/phpdotenv/src/Result/Result.php', + 'Dotenv\\Result\\Success' => $vendorDir . '/vlucas/phpdotenv/src/Result/Success.php', + 'Dotenv\\Store\\FileStore' => $vendorDir . '/vlucas/phpdotenv/src/Store/FileStore.php', + 'Dotenv\\Store\\File\\Paths' => $vendorDir . '/vlucas/phpdotenv/src/Store/File/Paths.php', + 'Dotenv\\Store\\File\\Reader' => $vendorDir . '/vlucas/phpdotenv/src/Store/File/Reader.php', + 'Dotenv\\Store\\StoreBuilder' => $vendorDir . '/vlucas/phpdotenv/src/Store/StoreBuilder.php', + 'Dotenv\\Store\\StoreInterface' => $vendorDir . '/vlucas/phpdotenv/src/Store/StoreInterface.php', + 'Dotenv\\Store\\StringStore' => $vendorDir . '/vlucas/phpdotenv/src/Store/StringStore.php', 'Dotenv\\Validator' => $vendorDir . '/vlucas/phpdotenv/src/Validator.php', - 'Egulias\\EmailValidator\\EmailLexer' => $vendorDir . '/egulias/email-validator/EmailValidator/EmailLexer.php', - 'Egulias\\EmailValidator\\EmailParser' => $vendorDir . '/egulias/email-validator/EmailValidator/EmailParser.php', - 'Egulias\\EmailValidator\\EmailValidator' => $vendorDir . '/egulias/email-validator/EmailValidator/EmailValidator.php', - 'Egulias\\EmailValidator\\Exception\\AtextAfterCFWS' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/AtextAfterCFWS.php', - 'Egulias\\EmailValidator\\Exception\\CRLFAtTheEnd' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/CRLFAtTheEnd.php', - 'Egulias\\EmailValidator\\Exception\\CRLFX2' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/CRLFX2.php', - 'Egulias\\EmailValidator\\Exception\\CRNoLF' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/CRNoLF.php', - 'Egulias\\EmailValidator\\Exception\\CharNotAllowed' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/CharNotAllowed.php', - 'Egulias\\EmailValidator\\Exception\\CommaInDomain' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/CommaInDomain.php', - 'Egulias\\EmailValidator\\Exception\\ConsecutiveAt' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/ConsecutiveAt.php', - 'Egulias\\EmailValidator\\Exception\\ConsecutiveDot' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/ConsecutiveDot.php', - 'Egulias\\EmailValidator\\Exception\\DomainHyphened' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/DomainHyphened.php', - 'Egulias\\EmailValidator\\Exception\\DotAtEnd' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/DotAtEnd.php', - 'Egulias\\EmailValidator\\Exception\\DotAtStart' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/DotAtStart.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingAT' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/ExpectingAT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingATEXT' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/ExpectingATEXT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingCTEXT' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/ExpectingCTEXT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingDTEXT' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/ExpectingDTEXT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingDomainLiteralClose' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/ExpectingDomainLiteralClose.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingQPair' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/ExpectingQPair.php', - 'Egulias\\EmailValidator\\Exception\\InvalidEmail' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/InvalidEmail.php', - 'Egulias\\EmailValidator\\Exception\\NoDNSRecord' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/NoDNSRecord.php', - 'Egulias\\EmailValidator\\Exception\\NoDomainPart' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/NoDomainPart.php', - 'Egulias\\EmailValidator\\Exception\\NoLocalPart' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/NoLocalPart.php', - 'Egulias\\EmailValidator\\Exception\\UnclosedComment' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php', - 'Egulias\\EmailValidator\\Exception\\UnclosedQuotedString' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/UnclosedQuotedString.php', - 'Egulias\\EmailValidator\\Exception\\UnopenedComment' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/UnopenedComment.php', - 'Egulias\\EmailValidator\\Parser\\DomainPart' => $vendorDir . '/egulias/email-validator/EmailValidator/Parser/DomainPart.php', - 'Egulias\\EmailValidator\\Parser\\LocalPart' => $vendorDir . '/egulias/email-validator/EmailValidator/Parser/LocalPart.php', - 'Egulias\\EmailValidator\\Parser\\Parser' => $vendorDir . '/egulias/email-validator/EmailValidator/Parser/Parser.php', - 'Egulias\\EmailValidator\\Validation\\DNSCheckValidation' => $vendorDir . '/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php', - 'Egulias\\EmailValidator\\Validation\\EmailValidation' => $vendorDir . '/egulias/email-validator/EmailValidator/Validation/EmailValidation.php', - 'Egulias\\EmailValidator\\Validation\\Error\\RFCWarnings' => $vendorDir . '/egulias/email-validator/EmailValidator/Validation/Error/RFCWarnings.php', - 'Egulias\\EmailValidator\\Validation\\Error\\SpoofEmail' => $vendorDir . '/egulias/email-validator/EmailValidator/Validation/Error/SpoofEmail.php', - 'Egulias\\EmailValidator\\Validation\\Exception\\EmptyValidationList' => $vendorDir . '/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php', - 'Egulias\\EmailValidator\\Validation\\MultipleErrors' => $vendorDir . '/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php', - 'Egulias\\EmailValidator\\Validation\\MultipleValidationWithAnd' => $vendorDir . '/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php', - 'Egulias\\EmailValidator\\Validation\\NoRFCWarningsValidation' => $vendorDir . '/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php', - 'Egulias\\EmailValidator\\Validation\\RFCValidation' => $vendorDir . '/egulias/email-validator/EmailValidator/Validation/RFCValidation.php', - 'Egulias\\EmailValidator\\Validation\\SpoofCheckValidation' => $vendorDir . '/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php', - 'Egulias\\EmailValidator\\Warning\\AddressLiteral' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/AddressLiteral.php', - 'Egulias\\EmailValidator\\Warning\\CFWSNearAt' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/CFWSNearAt.php', - 'Egulias\\EmailValidator\\Warning\\CFWSWithFWS' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/CFWSWithFWS.php', - 'Egulias\\EmailValidator\\Warning\\Comment' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/Comment.php', - 'Egulias\\EmailValidator\\Warning\\DeprecatedComment' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/DeprecatedComment.php', - 'Egulias\\EmailValidator\\Warning\\DomainLiteral' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/DomainLiteral.php', - 'Egulias\\EmailValidator\\Warning\\DomainTooLong' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/DomainTooLong.php', - 'Egulias\\EmailValidator\\Warning\\EmailTooLong' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/EmailTooLong.php', - 'Egulias\\EmailValidator\\Warning\\IPV6BadChar' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/IPV6BadChar.php', - 'Egulias\\EmailValidator\\Warning\\IPV6ColonEnd' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/IPV6ColonEnd.php', - 'Egulias\\EmailValidator\\Warning\\IPV6ColonStart' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/IPV6ColonStart.php', - 'Egulias\\EmailValidator\\Warning\\IPV6Deprecated' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/IPV6Deprecated.php', - 'Egulias\\EmailValidator\\Warning\\IPV6DoubleColon' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/IPV6DoubleColon.php', - 'Egulias\\EmailValidator\\Warning\\IPV6GroupCount' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/IPV6GroupCount.php', - 'Egulias\\EmailValidator\\Warning\\IPV6MaxGroups' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/IPV6MaxGroups.php', - 'Egulias\\EmailValidator\\Warning\\LabelTooLong' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/LabelTooLong.php', - 'Egulias\\EmailValidator\\Warning\\LocalTooLong' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/LocalTooLong.php', - 'Egulias\\EmailValidator\\Warning\\NoDNSMXRecord' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/NoDNSMXRecord.php', - 'Egulias\\EmailValidator\\Warning\\ObsoleteDTEXT' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/ObsoleteDTEXT.php', - 'Egulias\\EmailValidator\\Warning\\QuotedPart' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/QuotedPart.php', - 'Egulias\\EmailValidator\\Warning\\QuotedString' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/QuotedString.php', - 'Egulias\\EmailValidator\\Warning\\TLD' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/TLD.php', - 'Egulias\\EmailValidator\\Warning\\Warning' => $vendorDir . '/egulias/email-validator/EmailValidator/Warning/Warning.php', + 'Egulias\\EmailValidator\\EmailLexer' => $vendorDir . '/egulias/email-validator/src/EmailLexer.php', + 'Egulias\\EmailValidator\\EmailParser' => $vendorDir . '/egulias/email-validator/src/EmailParser.php', + 'Egulias\\EmailValidator\\EmailValidator' => $vendorDir . '/egulias/email-validator/src/EmailValidator.php', + 'Egulias\\EmailValidator\\Exception\\AtextAfterCFWS' => $vendorDir . '/egulias/email-validator/src/Exception/AtextAfterCFWS.php', + 'Egulias\\EmailValidator\\Exception\\CRLFAtTheEnd' => $vendorDir . '/egulias/email-validator/src/Exception/CRLFAtTheEnd.php', + 'Egulias\\EmailValidator\\Exception\\CRLFX2' => $vendorDir . '/egulias/email-validator/src/Exception/CRLFX2.php', + 'Egulias\\EmailValidator\\Exception\\CRNoLF' => $vendorDir . '/egulias/email-validator/src/Exception/CRNoLF.php', + 'Egulias\\EmailValidator\\Exception\\CharNotAllowed' => $vendorDir . '/egulias/email-validator/src/Exception/CharNotAllowed.php', + 'Egulias\\EmailValidator\\Exception\\CommaInDomain' => $vendorDir . '/egulias/email-validator/src/Exception/CommaInDomain.php', + 'Egulias\\EmailValidator\\Exception\\ConsecutiveAt' => $vendorDir . '/egulias/email-validator/src/Exception/ConsecutiveAt.php', + 'Egulias\\EmailValidator\\Exception\\ConsecutiveDot' => $vendorDir . '/egulias/email-validator/src/Exception/ConsecutiveDot.php', + 'Egulias\\EmailValidator\\Exception\\DomainAcceptsNoMail' => $vendorDir . '/egulias/email-validator/src/Exception/DomainAcceptsNoMail.php', + 'Egulias\\EmailValidator\\Exception\\DomainHyphened' => $vendorDir . '/egulias/email-validator/src/Exception/DomainHyphened.php', + 'Egulias\\EmailValidator\\Exception\\DotAtEnd' => $vendorDir . '/egulias/email-validator/src/Exception/DotAtEnd.php', + 'Egulias\\EmailValidator\\Exception\\DotAtStart' => $vendorDir . '/egulias/email-validator/src/Exception/DotAtStart.php', + 'Egulias\\EmailValidator\\Exception\\ExpectingAT' => $vendorDir . '/egulias/email-validator/src/Exception/ExpectingAT.php', + 'Egulias\\EmailValidator\\Exception\\ExpectingATEXT' => $vendorDir . '/egulias/email-validator/src/Exception/ExpectingATEXT.php', + 'Egulias\\EmailValidator\\Exception\\ExpectingCTEXT' => $vendorDir . '/egulias/email-validator/src/Exception/ExpectingCTEXT.php', + 'Egulias\\EmailValidator\\Exception\\ExpectingDTEXT' => $vendorDir . '/egulias/email-validator/src/Exception/ExpectingDTEXT.php', + 'Egulias\\EmailValidator\\Exception\\ExpectingDomainLiteralClose' => $vendorDir . '/egulias/email-validator/src/Exception/ExpectingDomainLiteralClose.php', + 'Egulias\\EmailValidator\\Exception\\ExpectingQPair' => $vendorDir . '/egulias/email-validator/src/Exception/ExpectingQPair.php', + 'Egulias\\EmailValidator\\Exception\\InvalidEmail' => $vendorDir . '/egulias/email-validator/src/Exception/InvalidEmail.php', + 'Egulias\\EmailValidator\\Exception\\LocalOrReservedDomain' => $vendorDir . '/egulias/email-validator/src/Exception/LocalOrReservedDomain.php', + 'Egulias\\EmailValidator\\Exception\\NoDNSRecord' => $vendorDir . '/egulias/email-validator/src/Exception/NoDNSRecord.php', + 'Egulias\\EmailValidator\\Exception\\NoDomainPart' => $vendorDir . '/egulias/email-validator/src/Exception/NoDomainPart.php', + 'Egulias\\EmailValidator\\Exception\\NoLocalPart' => $vendorDir . '/egulias/email-validator/src/Exception/NoLocalPart.php', + 'Egulias\\EmailValidator\\Exception\\UnclosedComment' => $vendorDir . '/egulias/email-validator/src/Exception/UnclosedComment.php', + 'Egulias\\EmailValidator\\Exception\\UnclosedQuotedString' => $vendorDir . '/egulias/email-validator/src/Exception/UnclosedQuotedString.php', + 'Egulias\\EmailValidator\\Exception\\UnopenedComment' => $vendorDir . '/egulias/email-validator/src/Exception/UnopenedComment.php', + 'Egulias\\EmailValidator\\Parser\\DomainPart' => $vendorDir . '/egulias/email-validator/src/Parser/DomainPart.php', + 'Egulias\\EmailValidator\\Parser\\LocalPart' => $vendorDir . '/egulias/email-validator/src/Parser/LocalPart.php', + 'Egulias\\EmailValidator\\Parser\\Parser' => $vendorDir . '/egulias/email-validator/src/Parser/Parser.php', + 'Egulias\\EmailValidator\\Validation\\DNSCheckValidation' => $vendorDir . '/egulias/email-validator/src/Validation/DNSCheckValidation.php', + 'Egulias\\EmailValidator\\Validation\\EmailValidation' => $vendorDir . '/egulias/email-validator/src/Validation/EmailValidation.php', + 'Egulias\\EmailValidator\\Validation\\Error\\RFCWarnings' => $vendorDir . '/egulias/email-validator/src/Validation/Error/RFCWarnings.php', + 'Egulias\\EmailValidator\\Validation\\Error\\SpoofEmail' => $vendorDir . '/egulias/email-validator/src/Validation/Error/SpoofEmail.php', + 'Egulias\\EmailValidator\\Validation\\Exception\\EmptyValidationList' => $vendorDir . '/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php', + 'Egulias\\EmailValidator\\Validation\\MultipleErrors' => $vendorDir . '/egulias/email-validator/src/Validation/MultipleErrors.php', + 'Egulias\\EmailValidator\\Validation\\MultipleValidationWithAnd' => $vendorDir . '/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php', + 'Egulias\\EmailValidator\\Validation\\NoRFCWarningsValidation' => $vendorDir . '/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php', + 'Egulias\\EmailValidator\\Validation\\RFCValidation' => $vendorDir . '/egulias/email-validator/src/Validation/RFCValidation.php', + 'Egulias\\EmailValidator\\Validation\\SpoofCheckValidation' => $vendorDir . '/egulias/email-validator/src/Validation/SpoofCheckValidation.php', + 'Egulias\\EmailValidator\\Warning\\AddressLiteral' => $vendorDir . '/egulias/email-validator/src/Warning/AddressLiteral.php', + 'Egulias\\EmailValidator\\Warning\\CFWSNearAt' => $vendorDir . '/egulias/email-validator/src/Warning/CFWSNearAt.php', + 'Egulias\\EmailValidator\\Warning\\CFWSWithFWS' => $vendorDir . '/egulias/email-validator/src/Warning/CFWSWithFWS.php', + 'Egulias\\EmailValidator\\Warning\\Comment' => $vendorDir . '/egulias/email-validator/src/Warning/Comment.php', + 'Egulias\\EmailValidator\\Warning\\DeprecatedComment' => $vendorDir . '/egulias/email-validator/src/Warning/DeprecatedComment.php', + 'Egulias\\EmailValidator\\Warning\\DomainLiteral' => $vendorDir . '/egulias/email-validator/src/Warning/DomainLiteral.php', + 'Egulias\\EmailValidator\\Warning\\DomainTooLong' => $vendorDir . '/egulias/email-validator/src/Warning/DomainTooLong.php', + 'Egulias\\EmailValidator\\Warning\\EmailTooLong' => $vendorDir . '/egulias/email-validator/src/Warning/EmailTooLong.php', + 'Egulias\\EmailValidator\\Warning\\IPV6BadChar' => $vendorDir . '/egulias/email-validator/src/Warning/IPV6BadChar.php', + 'Egulias\\EmailValidator\\Warning\\IPV6ColonEnd' => $vendorDir . '/egulias/email-validator/src/Warning/IPV6ColonEnd.php', + 'Egulias\\EmailValidator\\Warning\\IPV6ColonStart' => $vendorDir . '/egulias/email-validator/src/Warning/IPV6ColonStart.php', + 'Egulias\\EmailValidator\\Warning\\IPV6Deprecated' => $vendorDir . '/egulias/email-validator/src/Warning/IPV6Deprecated.php', + 'Egulias\\EmailValidator\\Warning\\IPV6DoubleColon' => $vendorDir . '/egulias/email-validator/src/Warning/IPV6DoubleColon.php', + 'Egulias\\EmailValidator\\Warning\\IPV6GroupCount' => $vendorDir . '/egulias/email-validator/src/Warning/IPV6GroupCount.php', + 'Egulias\\EmailValidator\\Warning\\IPV6MaxGroups' => $vendorDir . '/egulias/email-validator/src/Warning/IPV6MaxGroups.php', + 'Egulias\\EmailValidator\\Warning\\LabelTooLong' => $vendorDir . '/egulias/email-validator/src/Warning/LabelTooLong.php', + 'Egulias\\EmailValidator\\Warning\\LocalTooLong' => $vendorDir . '/egulias/email-validator/src/Warning/LocalTooLong.php', + 'Egulias\\EmailValidator\\Warning\\NoDNSMXRecord' => $vendorDir . '/egulias/email-validator/src/Warning/NoDNSMXRecord.php', + 'Egulias\\EmailValidator\\Warning\\ObsoleteDTEXT' => $vendorDir . '/egulias/email-validator/src/Warning/ObsoleteDTEXT.php', + 'Egulias\\EmailValidator\\Warning\\QuotedPart' => $vendorDir . '/egulias/email-validator/src/Warning/QuotedPart.php', + 'Egulias\\EmailValidator\\Warning\\QuotedString' => $vendorDir . '/egulias/email-validator/src/Warning/QuotedString.php', + 'Egulias\\EmailValidator\\Warning\\TLD' => $vendorDir . '/egulias/email-validator/src/Warning/TLD.php', + 'Egulias\\EmailValidator\\Warning\\Warning' => $vendorDir . '/egulias/email-validator/src/Warning/Warning.php', + 'Faker\\Calculator\\Ean' => $vendorDir . '/fzaninotto/faker/src/Faker/Calculator/Ean.php', 'Faker\\Calculator\\Iban' => $vendorDir . '/fzaninotto/faker/src/Faker/Calculator/Iban.php', 'Faker\\Calculator\\Inn' => $vendorDir . '/fzaninotto/faker/src/Faker/Calculator/Inn.php', 'Faker\\Calculator\\Luhn' => $vendorDir . '/fzaninotto/faker/src/Faker/Calculator/Luhn.php', @@ -496,6 +799,7 @@ return array( 'Faker\\Provider\\es_AR\\Person' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/es_AR/Person.php', 'Faker\\Provider\\es_AR\\PhoneNumber' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/es_AR/PhoneNumber.php', 'Faker\\Provider\\es_ES\\Address' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/es_ES/Address.php', + 'Faker\\Provider\\es_ES\\Color' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/es_ES/Color.php', 'Faker\\Provider\\es_ES\\Company' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/es_ES/Company.php', 'Faker\\Provider\\es_ES\\Internet' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/es_ES/Internet.php', 'Faker\\Provider\\es_ES\\Payment' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/es_ES/Payment.php', @@ -511,6 +815,7 @@ return array( 'Faker\\Provider\\es_VE\\Internet' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/es_VE/Internet.php', 'Faker\\Provider\\es_VE\\Person' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/es_VE/Person.php', 'Faker\\Provider\\es_VE\\PhoneNumber' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/es_VE/PhoneNumber.php', + 'Faker\\Provider\\et_EE\\Person' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/et_EE/Person.php', 'Faker\\Provider\\fa_IR\\Address' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/fa_IR/Address.php', 'Faker\\Provider\\fa_IR\\Company' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/fa_IR/Company.php', 'Faker\\Provider\\fa_IR\\Internet' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/fa_IR/Internet.php', @@ -532,6 +837,7 @@ return array( 'Faker\\Provider\\fr_CA\\Address' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/fr_CA/Address.php', 'Faker\\Provider\\fr_CA\\Company' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/fr_CA/Company.php', 'Faker\\Provider\\fr_CA\\Person' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/fr_CA/Person.php', + 'Faker\\Provider\\fr_CA\\Text' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/fr_CA/Text.php', 'Faker\\Provider\\fr_CH\\Address' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/fr_CH/Address.php', 'Faker\\Provider\\fr_CH\\Company' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/fr_CH/Company.php', 'Faker\\Provider\\fr_CH\\Internet' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/fr_CH/Internet.php', @@ -569,6 +875,7 @@ return array( 'Faker\\Provider\\hy_AM\\Person' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/hy_AM/Person.php', 'Faker\\Provider\\hy_AM\\PhoneNumber' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/hy_AM/PhoneNumber.php', 'Faker\\Provider\\id_ID\\Address' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/id_ID/Address.php', + 'Faker\\Provider\\id_ID\\Color' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/id_ID/Color.php', 'Faker\\Provider\\id_ID\\Company' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/id_ID/Company.php', 'Faker\\Provider\\id_ID\\Internet' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/id_ID/Internet.php', 'Faker\\Provider\\id_ID\\Person' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/id_ID/Person.php', @@ -662,6 +969,7 @@ return array( 'Faker\\Provider\\nl_BE\\Payment' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/nl_BE/Payment.php', 'Faker\\Provider\\nl_BE\\Person' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/nl_BE/Person.php', 'Faker\\Provider\\nl_BE\\PhoneNumber' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/nl_BE/PhoneNumber.php', + 'Faker\\Provider\\nl_BE\\Text' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/nl_BE/Text.php', 'Faker\\Provider\\nl_NL\\Address' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/nl_NL/Address.php', 'Faker\\Provider\\nl_NL\\Color' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/nl_NL/Color.php', 'Faker\\Provider\\nl_NL\\Company' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/nl_NL/Company.php', @@ -684,6 +992,8 @@ return array( 'Faker\\Provider\\pt_BR\\Person' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/pt_BR/Person.php', 'Faker\\Provider\\pt_BR\\PhoneNumber' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/pt_BR/PhoneNumber.php', 'Faker\\Provider\\pt_PT\\Address' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/pt_PT/Address.php', + 'Faker\\Provider\\pt_PT\\Company' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/pt_PT/Company.php', + 'Faker\\Provider\\pt_PT\\Internet' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/pt_PT/Internet.php', 'Faker\\Provider\\pt_PT\\Payment' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/pt_PT/Payment.php', 'Faker\\Provider\\pt_PT\\Person' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/pt_PT/Person.php', 'Faker\\Provider\\pt_PT\\PhoneNumber' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/pt_PT/PhoneNumber.php', @@ -736,6 +1046,7 @@ return array( 'Faker\\Provider\\th_TH\\Company' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/th_TH/Company.php', 'Faker\\Provider\\th_TH\\Internet' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/th_TH/Internet.php', 'Faker\\Provider\\th_TH\\Payment' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/th_TH/Payment.php', + 'Faker\\Provider\\th_TH\\Person' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/th_TH/Person.php', 'Faker\\Provider\\th_TH\\PhoneNumber' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/th_TH/PhoneNumber.php', 'Faker\\Provider\\tr_TR\\Address' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/tr_TR/Address.php', 'Faker\\Provider\\tr_TR\\Color' => $vendorDir . '/fzaninotto/faker/src/Faker/Provider/tr_TR/Color.php', @@ -784,7 +1095,6 @@ return array( 'File_Iterator_Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php', 'Github\\Api\\AbstractApi' => $vendorDir . '/knplabs/github-api/lib/Github/Api/AbstractApi.php', 'Github\\Api\\AcceptHeaderTrait' => $vendorDir . '/knplabs/github-api/lib/Github/Api/AcceptHeaderTrait.php', - 'Github\\Api\\ApiInterface' => $vendorDir . '/knplabs/github-api/lib/Github/Api/ApiInterface.php', 'Github\\Api\\Apps' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Apps.php', 'Github\\Api\\Authorizations' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Authorizations.php', 'Github\\Api\\CurrentUser' => $vendorDir . '/knplabs/github-api/lib/Github/Api/CurrentUser.php', @@ -810,7 +1120,6 @@ return array( 'Github\\Api\\GitData\\Tags' => $vendorDir . '/knplabs/github-api/lib/Github/Api/GitData/Tags.php', 'Github\\Api\\GitData\\Trees' => $vendorDir . '/knplabs/github-api/lib/Github/Api/GitData/Trees.php', 'Github\\Api\\GraphQL' => $vendorDir . '/knplabs/github-api/lib/Github/Api/GraphQL.php', - 'Github\\Api\\Integrations' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Integrations.php', 'Github\\Api\\Issue' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Issue.php', 'Github\\Api\\Issue\\Assignees' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Issue/Assignees.php', 'Github\\Api\\Issue\\Comments' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Issue/Comments.php', @@ -826,8 +1135,10 @@ return array( 'Github\\Api\\Miscellaneous\\Licenses' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Miscellaneous/Licenses.php', 'Github\\Api\\Notification' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Notification.php', 'Github\\Api\\Organization' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Organization.php', + 'Github\\Api\\Organization\\Actions\\Secrets' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Organization/Actions/Secrets.php', 'Github\\Api\\Organization\\Hooks' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Organization/Hooks.php', 'Github\\Api\\Organization\\Members' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Organization/Members.php', + 'Github\\Api\\Organization\\OutsideCollaborators' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Organization/OutsideCollaborators.php', 'Github\\Api\\Organization\\Projects' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Organization/Projects.php', 'Github\\Api\\Organization\\Teams' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Organization/Teams.php', 'Github\\Api\\Project\\AbstractProjectApi' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Project/AbstractProjectApi.php', @@ -840,7 +1151,15 @@ return array( 'Github\\Api\\RateLimit' => $vendorDir . '/knplabs/github-api/lib/Github/Api/RateLimit.php', 'Github\\Api\\RateLimit\\RateLimitResource' => $vendorDir . '/knplabs/github-api/lib/Github/Api/RateLimit/RateLimitResource.php', 'Github\\Api\\Repo' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repo.php', + 'Github\\Api\\Repository\\Actions\\Artifacts' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Actions/Artifacts.php', + 'Github\\Api\\Repository\\Actions\\Secrets' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Actions/Secrets.php', + 'Github\\Api\\Repository\\Actions\\SelfHostedRunners' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Actions/SelfHostedRunners.php', + 'Github\\Api\\Repository\\Actions\\WorkflowJobs' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Actions/WorkflowJobs.php', + 'Github\\Api\\Repository\\Actions\\WorkflowRuns' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Actions/WorkflowRuns.php', + 'Github\\Api\\Repository\\Actions\\Workflows' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Actions/Workflows.php', 'Github\\Api\\Repository\\Assets' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Assets.php', + 'Github\\Api\\Repository\\Checks\\CheckRuns' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Checks/CheckRuns.php', + 'Github\\Api\\Repository\\Checks\\CheckSuites' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Checks/CheckSuites.php', 'Github\\Api\\Repository\\Collaborators' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Collaborators.php', 'Github\\Api\\Repository\\Comments' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Comments.php', 'Github\\Api\\Repository\\Commits' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Commits.php', @@ -850,6 +1169,7 @@ return array( 'Github\\Api\\Repository\\Forks' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Forks.php', 'Github\\Api\\Repository\\Hooks' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Hooks.php', 'Github\\Api\\Repository\\Labels' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Labels.php', + 'Github\\Api\\Repository\\Pages' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Pages.php', 'Github\\Api\\Repository\\Projects' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Projects.php', 'Github\\Api\\Repository\\Protection' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Protection.php', 'Github\\Api\\Repository\\Releases' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Releases.php', @@ -858,6 +1178,7 @@ return array( 'Github\\Api\\Repository\\Traffic' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Traffic.php', 'Github\\Api\\Search' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Search.php', 'Github\\Api\\User' => $vendorDir . '/knplabs/github-api/lib/Github/Api/User.php', + 'Github\\AuthMethod' => $vendorDir . '/knplabs/github-api/lib/Github/AuthMethod.php', 'Github\\Client' => $vendorDir . '/knplabs/github-api/lib/Github/Client.php', 'Github\\Exception\\ApiLimitExceedException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/ApiLimitExceedException.php', 'Github\\Exception\\BadMethodCallException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/BadMethodCallException.php', @@ -866,6 +1187,7 @@ return array( 'Github\\Exception\\InvalidArgumentException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/InvalidArgumentException.php', 'Github\\Exception\\MissingArgumentException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/MissingArgumentException.php', 'Github\\Exception\\RuntimeException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/RuntimeException.php', + 'Github\\Exception\\SsoRequiredException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/SsoRequiredException.php', 'Github\\Exception\\TwoFactorAuthenticationRequiredException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/TwoFactorAuthenticationRequiredException.php', 'Github\\Exception\\ValidationFailedException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/ValidationFailedException.php', 'Github\\HttpClient\\Builder' => $vendorDir . '/knplabs/github-api/lib/Github/HttpClient/Builder.php', @@ -876,24 +1198,30 @@ return array( 'Github\\HttpClient\\Plugin\\PathPrepend' => $vendorDir . '/knplabs/github-api/lib/Github/HttpClient/Plugin/PathPrepend.php', 'Github\\ResultPager' => $vendorDir . '/knplabs/github-api/lib/Github/ResultPager.php', 'Github\\ResultPagerInterface' => $vendorDir . '/knplabs/github-api/lib/Github/ResultPagerInterface.php', - 'GrahamCampbell\\CachePlugin\\CachePlugin' => $vendorDir . '/graham-campbell/cache-plugin/src/CachePlugin.php', - 'GrahamCampbell\\GitHub\\Authenticators\\AbstractAuthenticator' => $vendorDir . '/graham-campbell/github/src/Authenticators/AbstractAuthenticator.php', - 'GrahamCampbell\\GitHub\\Authenticators\\ApplicationAuthenticator' => $vendorDir . '/graham-campbell/github/src/Authenticators/ApplicationAuthenticator.php', - 'GrahamCampbell\\GitHub\\Authenticators\\AuthenticatorFactory' => $vendorDir . '/graham-campbell/github/src/Authenticators/AuthenticatorFactory.php', - 'GrahamCampbell\\GitHub\\Authenticators\\AuthenticatorInterface' => $vendorDir . '/graham-campbell/github/src/Authenticators/AuthenticatorInterface.php', - 'GrahamCampbell\\GitHub\\Authenticators\\JwtAuthenticator' => $vendorDir . '/graham-campbell/github/src/Authenticators/JwtAuthenticator.php', - 'GrahamCampbell\\GitHub\\Authenticators\\PasswordAuthenticator' => $vendorDir . '/graham-campbell/github/src/Authenticators/PasswordAuthenticator.php', - 'GrahamCampbell\\GitHub\\Authenticators\\TokenAuthenticator' => $vendorDir . '/graham-campbell/github/src/Authenticators/TokenAuthenticator.php', + 'GrahamCampbell\\BoundedCache\\BoundedCache' => $vendorDir . '/graham-campbell/bounded-cache/src/BoundedCache.php', + 'GrahamCampbell\\BoundedCache\\BoundedCacheInterface' => $vendorDir . '/graham-campbell/bounded-cache/src/BoundedCacheInterface.php', + 'GrahamCampbell\\BoundedCache\\TtlHelper' => $vendorDir . '/graham-campbell/bounded-cache/src/TtlHelper.php', + 'GrahamCampbell\\GitHub\\Auth\\AuthenticatorFactory' => $vendorDir . '/graham-campbell/github/src/Auth/AuthenticatorFactory.php', + 'GrahamCampbell\\GitHub\\Auth\\Authenticator\\AbstractAuthenticator' => $vendorDir . '/graham-campbell/github/src/Auth/Authenticator/AbstractAuthenticator.php', + 'GrahamCampbell\\GitHub\\Auth\\Authenticator\\ApplicationAuthenticator' => $vendorDir . '/graham-campbell/github/src/Auth/Authenticator/ApplicationAuthenticator.php', + 'GrahamCampbell\\GitHub\\Auth\\Authenticator\\AuthenticatorInterface' => $vendorDir . '/graham-campbell/github/src/Auth/Authenticator/AuthenticatorInterface.php', + 'GrahamCampbell\\GitHub\\Auth\\Authenticator\\JwtAuthenticator' => $vendorDir . '/graham-campbell/github/src/Auth/Authenticator/JwtAuthenticator.php', + 'GrahamCampbell\\GitHub\\Auth\\Authenticator\\PrivateKeyAuthenticator' => $vendorDir . '/graham-campbell/github/src/Auth/Authenticator/PrivateKeyAuthenticator.php', + 'GrahamCampbell\\GitHub\\Auth\\Authenticator\\TokenAuthenticator' => $vendorDir . '/graham-campbell/github/src/Auth/Authenticator/TokenAuthenticator.php', + 'GrahamCampbell\\GitHub\\Cache\\ConnectionFactory' => $vendorDir . '/graham-campbell/github/src/Cache/ConnectionFactory.php', + 'GrahamCampbell\\GitHub\\Cache\\Connector\\IlluminateConnector' => $vendorDir . '/graham-campbell/github/src/Cache/Connector/IlluminateConnector.php', 'GrahamCampbell\\GitHub\\Facades\\GitHub' => $vendorDir . '/graham-campbell/github/src/Facades/GitHub.php', 'GrahamCampbell\\GitHub\\GitHubFactory' => $vendorDir . '/graham-campbell/github/src/GitHubFactory.php', 'GrahamCampbell\\GitHub\\GitHubManager' => $vendorDir . '/graham-campbell/github/src/GitHubManager.php', 'GrahamCampbell\\GitHub\\GitHubServiceProvider' => $vendorDir . '/graham-campbell/github/src/GitHubServiceProvider.php', - 'GrahamCampbell\\GitHub\\Http\\ClientBuilder' => $vendorDir . '/graham-campbell/github/src/Http/ClientBuilder.php', 'GrahamCampbell\\Manager\\AbstractManager' => $vendorDir . '/graham-campbell/manager/src/AbstractManager.php', 'GrahamCampbell\\Manager\\ConnectorInterface' => $vendorDir . '/graham-campbell/manager/src/ConnectorInterface.php', 'GrahamCampbell\\Manager\\ManagerInterface' => $vendorDir . '/graham-campbell/manager/src/ManagerInterface.php', + 'GuzzleHttp\\BodySummarizer' => $vendorDir . '/guzzlehttp/guzzle/src/BodySummarizer.php', + 'GuzzleHttp\\BodySummarizerInterface' => $vendorDir . '/guzzlehttp/guzzle/src/BodySummarizerInterface.php', 'GuzzleHttp\\Client' => $vendorDir . '/guzzlehttp/guzzle/src/Client.php', 'GuzzleHttp\\ClientInterface' => $vendorDir . '/guzzlehttp/guzzle/src/ClientInterface.php', + 'GuzzleHttp\\ClientTrait' => $vendorDir . '/guzzlehttp/guzzle/src/ClientTrait.php', 'GuzzleHttp\\Cookie\\CookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php', 'GuzzleHttp\\Cookie\\CookieJarInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php', 'GuzzleHttp\\Cookie\\FileCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php', @@ -903,8 +1231,8 @@ return array( 'GuzzleHttp\\Exception\\ClientException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ClientException.php', 'GuzzleHttp\\Exception\\ConnectException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ConnectException.php', 'GuzzleHttp\\Exception\\GuzzleException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php', + 'GuzzleHttp\\Exception\\InvalidArgumentException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php', 'GuzzleHttp\\Exception\\RequestException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/RequestException.php', - 'GuzzleHttp\\Exception\\SeekException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/SeekException.php', 'GuzzleHttp\\Exception\\ServerException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ServerException.php', 'GuzzleHttp\\Exception\\TooManyRedirectsException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php', 'GuzzleHttp\\Exception\\TransferException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TransferException.php', @@ -914,18 +1242,23 @@ return array( 'GuzzleHttp\\Handler\\CurlHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php', 'GuzzleHttp\\Handler\\CurlMultiHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php', 'GuzzleHttp\\Handler\\EasyHandle' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php', + 'GuzzleHttp\\Handler\\HeaderProcessor' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php', 'GuzzleHttp\\Handler\\MockHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/MockHandler.php', 'GuzzleHttp\\Handler\\Proxy' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/Proxy.php', 'GuzzleHttp\\Handler\\StreamHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php', 'GuzzleHttp\\MessageFormatter' => $vendorDir . '/guzzlehttp/guzzle/src/MessageFormatter.php', + 'GuzzleHttp\\MessageFormatterInterface' => $vendorDir . '/guzzlehttp/guzzle/src/MessageFormatterInterface.php', 'GuzzleHttp\\Middleware' => $vendorDir . '/guzzlehttp/guzzle/src/Middleware.php', 'GuzzleHttp\\Pool' => $vendorDir . '/guzzlehttp/guzzle/src/Pool.php', 'GuzzleHttp\\PrepareBodyMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php', 'GuzzleHttp\\Promise\\AggregateException' => $vendorDir . '/guzzlehttp/promises/src/AggregateException.php', 'GuzzleHttp\\Promise\\CancellationException' => $vendorDir . '/guzzlehttp/promises/src/CancellationException.php', 'GuzzleHttp\\Promise\\Coroutine' => $vendorDir . '/guzzlehttp/promises/src/Coroutine.php', + 'GuzzleHttp\\Promise\\Create' => $vendorDir . '/guzzlehttp/promises/src/Create.php', + 'GuzzleHttp\\Promise\\Each' => $vendorDir . '/guzzlehttp/promises/src/Each.php', 'GuzzleHttp\\Promise\\EachPromise' => $vendorDir . '/guzzlehttp/promises/src/EachPromise.php', 'GuzzleHttp\\Promise\\FulfilledPromise' => $vendorDir . '/guzzlehttp/promises/src/FulfilledPromise.php', + 'GuzzleHttp\\Promise\\Is' => $vendorDir . '/guzzlehttp/promises/src/Is.php', 'GuzzleHttp\\Promise\\Promise' => $vendorDir . '/guzzlehttp/promises/src/Promise.php', 'GuzzleHttp\\Promise\\PromiseInterface' => $vendorDir . '/guzzlehttp/promises/src/PromiseInterface.php', 'GuzzleHttp\\Promise\\PromisorInterface' => $vendorDir . '/guzzlehttp/promises/src/PromisorInterface.php', @@ -933,18 +1266,25 @@ return array( 'GuzzleHttp\\Promise\\RejectionException' => $vendorDir . '/guzzlehttp/promises/src/RejectionException.php', 'GuzzleHttp\\Promise\\TaskQueue' => $vendorDir . '/guzzlehttp/promises/src/TaskQueue.php', 'GuzzleHttp\\Promise\\TaskQueueInterface' => $vendorDir . '/guzzlehttp/promises/src/TaskQueueInterface.php', + 'GuzzleHttp\\Promise\\Utils' => $vendorDir . '/guzzlehttp/promises/src/Utils.php', 'GuzzleHttp\\Psr7\\AppendStream' => $vendorDir . '/guzzlehttp/psr7/src/AppendStream.php', 'GuzzleHttp\\Psr7\\BufferStream' => $vendorDir . '/guzzlehttp/psr7/src/BufferStream.php', 'GuzzleHttp\\Psr7\\CachingStream' => $vendorDir . '/guzzlehttp/psr7/src/CachingStream.php', 'GuzzleHttp\\Psr7\\DroppingStream' => $vendorDir . '/guzzlehttp/psr7/src/DroppingStream.php', + 'GuzzleHttp\\Psr7\\Exception\\MalformedUriException' => $vendorDir . '/guzzlehttp/psr7/src/Exception/MalformedUriException.php', 'GuzzleHttp\\Psr7\\FnStream' => $vendorDir . '/guzzlehttp/psr7/src/FnStream.php', + 'GuzzleHttp\\Psr7\\Header' => $vendorDir . '/guzzlehttp/psr7/src/Header.php', + 'GuzzleHttp\\Psr7\\HttpFactory' => $vendorDir . '/guzzlehttp/psr7/src/HttpFactory.php', 'GuzzleHttp\\Psr7\\InflateStream' => $vendorDir . '/guzzlehttp/psr7/src/InflateStream.php', 'GuzzleHttp\\Psr7\\LazyOpenStream' => $vendorDir . '/guzzlehttp/psr7/src/LazyOpenStream.php', 'GuzzleHttp\\Psr7\\LimitStream' => $vendorDir . '/guzzlehttp/psr7/src/LimitStream.php', + 'GuzzleHttp\\Psr7\\Message' => $vendorDir . '/guzzlehttp/psr7/src/Message.php', 'GuzzleHttp\\Psr7\\MessageTrait' => $vendorDir . '/guzzlehttp/psr7/src/MessageTrait.php', + 'GuzzleHttp\\Psr7\\MimeType' => $vendorDir . '/guzzlehttp/psr7/src/MimeType.php', 'GuzzleHttp\\Psr7\\MultipartStream' => $vendorDir . '/guzzlehttp/psr7/src/MultipartStream.php', 'GuzzleHttp\\Psr7\\NoSeekStream' => $vendorDir . '/guzzlehttp/psr7/src/NoSeekStream.php', 'GuzzleHttp\\Psr7\\PumpStream' => $vendorDir . '/guzzlehttp/psr7/src/PumpStream.php', + 'GuzzleHttp\\Psr7\\Query' => $vendorDir . '/guzzlehttp/psr7/src/Query.php', 'GuzzleHttp\\Psr7\\Request' => $vendorDir . '/guzzlehttp/psr7/src/Request.php', 'GuzzleHttp\\Psr7\\Response' => $vendorDir . '/guzzlehttp/psr7/src/Response.php', 'GuzzleHttp\\Psr7\\Rfc7230' => $vendorDir . '/guzzlehttp/psr7/src/Rfc7230.php', @@ -956,11 +1296,12 @@ return array( 'GuzzleHttp\\Psr7\\Uri' => $vendorDir . '/guzzlehttp/psr7/src/Uri.php', 'GuzzleHttp\\Psr7\\UriNormalizer' => $vendorDir . '/guzzlehttp/psr7/src/UriNormalizer.php', 'GuzzleHttp\\Psr7\\UriResolver' => $vendorDir . '/guzzlehttp/psr7/src/UriResolver.php', + 'GuzzleHttp\\Psr7\\Utils' => $vendorDir . '/guzzlehttp/psr7/src/Utils.php', 'GuzzleHttp\\RedirectMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RedirectMiddleware.php', 'GuzzleHttp\\RequestOptions' => $vendorDir . '/guzzlehttp/guzzle/src/RequestOptions.php', 'GuzzleHttp\\RetryMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RetryMiddleware.php', 'GuzzleHttp\\TransferStats' => $vendorDir . '/guzzlehttp/guzzle/src/TransferStats.php', - 'GuzzleHttp\\UriTemplate' => $vendorDir . '/guzzlehttp/guzzle/src/UriTemplate.php', + 'GuzzleHttp\\Utils' => $vendorDir . '/guzzlehttp/guzzle/src/Utils.php', 'Hamcrest\\Arrays\\IsArray' => $vendorDir . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArray.php', 'Hamcrest\\Arrays\\IsArrayContaining' => $vendorDir . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContaining.php', 'Hamcrest\\Arrays\\IsArrayContainingInAnyOrder' => $vendorDir . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContainingInAnyOrder.php', @@ -1029,9 +1370,8 @@ return array( 'Hamcrest\\Type\\IsString' => $vendorDir . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsString.php', 'Hamcrest\\Util' => $vendorDir . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Util.php', 'Hamcrest\\Xml\\HasXPath' => $vendorDir . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Xml/HasXPath.php', - 'Http\\Adapter\\Guzzle6\\Client' => $vendorDir . '/php-http/guzzle6-adapter/src/Client.php', - 'Http\\Adapter\\Guzzle6\\Promise' => $vendorDir . '/php-http/guzzle6-adapter/src/Promise.php', 'Http\\Client\\Common\\BatchClient' => $vendorDir . '/php-http/client-common/src/BatchClient.php', + 'Http\\Client\\Common\\BatchClientInterface' => $vendorDir . '/php-http/client-common/src/BatchClientInterface.php', 'Http\\Client\\Common\\BatchResult' => $vendorDir . '/php-http/client-common/src/BatchResult.php', 'Http\\Client\\Common\\Deferred' => $vendorDir . '/php-http/client-common/src/Deferred.php', 'Http\\Client\\Common\\EmulatedHttpAsyncClient' => $vendorDir . '/php-http/client-common/src/EmulatedHttpAsyncClient.php', @@ -1039,6 +1379,7 @@ return array( 'Http\\Client\\Common\\Exception\\BatchException' => $vendorDir . '/php-http/client-common/src/Exception/BatchException.php', 'Http\\Client\\Common\\Exception\\CircularRedirectionException' => $vendorDir . '/php-http/client-common/src/Exception/CircularRedirectionException.php', 'Http\\Client\\Common\\Exception\\ClientErrorException' => $vendorDir . '/php-http/client-common/src/Exception/ClientErrorException.php', + 'Http\\Client\\Common\\Exception\\HttpClientNoMatchException' => $vendorDir . '/php-http/client-common/src/Exception/HttpClientNoMatchException.php', 'Http\\Client\\Common\\Exception\\HttpClientNotFoundException' => $vendorDir . '/php-http/client-common/src/Exception/HttpClientNotFoundException.php', 'Http\\Client\\Common\\Exception\\LoopException' => $vendorDir . '/php-http/client-common/src/Exception/LoopException.php', 'Http\\Client\\Common\\Exception\\MultipleRedirectionException' => $vendorDir . '/php-http/client-common/src/Exception/MultipleRedirectionException.php', @@ -1049,14 +1390,19 @@ return array( 'Http\\Client\\Common\\HttpClientDecorator' => $vendorDir . '/php-http/client-common/src/HttpClientDecorator.php', 'Http\\Client\\Common\\HttpClientEmulator' => $vendorDir . '/php-http/client-common/src/HttpClientEmulator.php', 'Http\\Client\\Common\\HttpClientPool' => $vendorDir . '/php-http/client-common/src/HttpClientPool.php', - 'Http\\Client\\Common\\HttpClientPoolItem' => $vendorDir . '/php-http/client-common/src/HttpClientPoolItem.php', + 'Http\\Client\\Common\\HttpClientPool\\HttpClientPool' => $vendorDir . '/php-http/client-common/src/HttpClientPool/HttpClientPool.php', + 'Http\\Client\\Common\\HttpClientPool\\HttpClientPoolItem' => $vendorDir . '/php-http/client-common/src/HttpClientPool/HttpClientPoolItem.php', 'Http\\Client\\Common\\HttpClientPool\\LeastUsedClientPool' => $vendorDir . '/php-http/client-common/src/HttpClientPool/LeastUsedClientPool.php', 'Http\\Client\\Common\\HttpClientPool\\RandomClientPool' => $vendorDir . '/php-http/client-common/src/HttpClientPool/RandomClientPool.php', 'Http\\Client\\Common\\HttpClientPool\\RoundRobinClientPool' => $vendorDir . '/php-http/client-common/src/HttpClientPool/RoundRobinClientPool.php', 'Http\\Client\\Common\\HttpClientRouter' => $vendorDir . '/php-http/client-common/src/HttpClientRouter.php', + 'Http\\Client\\Common\\HttpClientRouterInterface' => $vendorDir . '/php-http/client-common/src/HttpClientRouterInterface.php', 'Http\\Client\\Common\\HttpMethodsClient' => $vendorDir . '/php-http/client-common/src/HttpMethodsClient.php', + 'Http\\Client\\Common\\HttpMethodsClientInterface' => $vendorDir . '/php-http/client-common/src/HttpMethodsClientInterface.php', 'Http\\Client\\Common\\Plugin' => $vendorDir . '/php-http/client-common/src/Plugin.php', + 'Http\\Client\\Common\\PluginChain' => $vendorDir . '/php-http/client-common/src/PluginChain.php', 'Http\\Client\\Common\\PluginClient' => $vendorDir . '/php-http/client-common/src/PluginClient.php', + 'Http\\Client\\Common\\PluginClientBuilder' => $vendorDir . '/php-http/client-common/src/PluginClientBuilder.php', 'Http\\Client\\Common\\PluginClientFactory' => $vendorDir . '/php-http/client-common/src/PluginClientFactory.php', 'Http\\Client\\Common\\Plugin\\AddHostPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/AddHostPlugin.php', 'Http\\Client\\Common\\Plugin\\AddPathPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/AddPathPlugin.php', @@ -1083,12 +1429,16 @@ return array( 'Http\\Client\\Common\\Plugin\\QueryDefaultsPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/QueryDefaultsPlugin.php', 'Http\\Client\\Common\\Plugin\\RedirectPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/RedirectPlugin.php', 'Http\\Client\\Common\\Plugin\\RequestMatcherPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/RequestMatcherPlugin.php', + 'Http\\Client\\Common\\Plugin\\RequestSeekableBodyPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/RequestSeekableBodyPlugin.php', + 'Http\\Client\\Common\\Plugin\\ResponseSeekableBodyPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/ResponseSeekableBodyPlugin.php', 'Http\\Client\\Common\\Plugin\\RetryPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/RetryPlugin.php', + 'Http\\Client\\Common\\Plugin\\SeekableBodyPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/SeekableBodyPlugin.php', 'Http\\Client\\Common\\Plugin\\VersionBridgePlugin' => $vendorDir . '/php-http/client-common/src/Plugin/VersionBridgePlugin.php', 'Http\\Client\\Common\\VersionBridgeClient' => $vendorDir . '/php-http/client-common/src/VersionBridgeClient.php', 'Http\\Client\\Exception' => $vendorDir . '/php-http/httplug/src/Exception.php', 'Http\\Client\\Exception\\HttpException' => $vendorDir . '/php-http/httplug/src/Exception/HttpException.php', 'Http\\Client\\Exception\\NetworkException' => $vendorDir . '/php-http/httplug/src/Exception/NetworkException.php', + 'Http\\Client\\Exception\\RequestAwareTrait' => $vendorDir . '/php-http/httplug/src/Exception/RequestAwareTrait.php', 'Http\\Client\\Exception\\RequestException' => $vendorDir . '/php-http/httplug/src/Exception/RequestException.php', 'Http\\Client\\Exception\\TransferException' => $vendorDir . '/php-http/httplug/src/Exception/TransferException.php', 'Http\\Client\\HttpAsyncClient' => $vendorDir . '/php-http/httplug/src/HttpAsyncClient.php', @@ -1121,6 +1471,7 @@ return array( 'Http\\Message\\Authentication\\BasicAuth' => $vendorDir . '/php-http/message/src/Authentication/BasicAuth.php', 'Http\\Message\\Authentication\\Bearer' => $vendorDir . '/php-http/message/src/Authentication/Bearer.php', 'Http\\Message\\Authentication\\Chain' => $vendorDir . '/php-http/message/src/Authentication/Chain.php', + 'Http\\Message\\Authentication\\Header' => $vendorDir . '/php-http/message/src/Authentication/Header.php', 'Http\\Message\\Authentication\\Matching' => $vendorDir . '/php-http/message/src/Authentication/Matching.php', 'Http\\Message\\Authentication\\QueryParam' => $vendorDir . '/php-http/message/src/Authentication/QueryParam.php', 'Http\\Message\\Authentication\\RequestConditional' => $vendorDir . '/php-http/message/src/Authentication/RequestConditional.php', @@ -1153,6 +1504,10 @@ return array( 'Http\\Message\\MessageFactory\\DiactorosMessageFactory' => $vendorDir . '/php-http/message/src/MessageFactory/DiactorosMessageFactory.php', 'Http\\Message\\MessageFactory\\GuzzleMessageFactory' => $vendorDir . '/php-http/message/src/MessageFactory/GuzzleMessageFactory.php', 'Http\\Message\\MessageFactory\\SlimMessageFactory' => $vendorDir . '/php-http/message/src/MessageFactory/SlimMessageFactory.php', + 'Http\\Message\\MultipartStream\\ApacheMimetypeHelper' => $vendorDir . '/php-http/multipart-stream-builder/src/ApacheMimetypeHelper.php', + 'Http\\Message\\MultipartStream\\CustomMimetypeHelper' => $vendorDir . '/php-http/multipart-stream-builder/src/CustomMimetypeHelper.php', + 'Http\\Message\\MultipartStream\\MimetypeHelper' => $vendorDir . '/php-http/multipart-stream-builder/src/MimetypeHelper.php', + 'Http\\Message\\MultipartStream\\MultipartStreamBuilder' => $vendorDir . '/php-http/multipart-stream-builder/src/MultipartStreamBuilder.php', 'Http\\Message\\RequestFactory' => $vendorDir . '/php-http/message-factory/src/RequestFactory.php', 'Http\\Message\\RequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher.php', 'Http\\Message\\RequestMatcher\\CallbackRequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher/CallbackRequestMatcher.php', @@ -1179,19 +1534,21 @@ return array( 'Illuminate\\Auth\\AuthServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php', 'Illuminate\\Auth\\Authenticatable' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Authenticatable.php', 'Illuminate\\Auth\\AuthenticationException' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/AuthenticationException.php', - 'Illuminate\\Auth\\Console\\AuthMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Console/AuthMakeCommand.php', 'Illuminate\\Auth\\Console\\ClearResetsCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Console/ClearResetsCommand.php', 'Illuminate\\Auth\\CreatesUserProviders' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/CreatesUserProviders.php', 'Illuminate\\Auth\\DatabaseUserProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php', 'Illuminate\\Auth\\EloquentUserProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php', 'Illuminate\\Auth\\Events\\Attempting' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Attempting.php', 'Illuminate\\Auth\\Events\\Authenticated' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Authenticated.php', + 'Illuminate\\Auth\\Events\\CurrentDeviceLogout' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/CurrentDeviceLogout.php', 'Illuminate\\Auth\\Events\\Failed' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Failed.php', 'Illuminate\\Auth\\Events\\Lockout' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Lockout.php', 'Illuminate\\Auth\\Events\\Login' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Login.php', 'Illuminate\\Auth\\Events\\Logout' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Logout.php', + 'Illuminate\\Auth\\Events\\OtherDeviceLogout' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/OtherDeviceLogout.php', 'Illuminate\\Auth\\Events\\PasswordReset' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/PasswordReset.php', 'Illuminate\\Auth\\Events\\Registered' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Registered.php', + 'Illuminate\\Auth\\Events\\Validated' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Validated.php', 'Illuminate\\Auth\\Events\\Verified' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Verified.php', 'Illuminate\\Auth\\GenericUser' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/GenericUser.php', 'Illuminate\\Auth\\GuardHelpers' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/GuardHelpers.php', @@ -1200,6 +1557,7 @@ return array( 'Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Middleware/AuthenticateWithBasicAuth.php', 'Illuminate\\Auth\\Middleware\\Authorize' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php', 'Illuminate\\Auth\\Middleware\\EnsureEmailIsVerified' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php', + 'Illuminate\\Auth\\Middleware\\RequirePassword' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Middleware/RequirePassword.php', 'Illuminate\\Auth\\MustVerifyEmail' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php', 'Illuminate\\Auth\\Notifications\\ResetPassword' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php', 'Illuminate\\Auth\\Notifications\\VerifyEmail' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Notifications/VerifyEmail.php', @@ -1223,7 +1581,9 @@ return array( 'Illuminate\\Broadcasting\\Broadcasters\\NullBroadcaster' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/NullBroadcaster.php', 'Illuminate\\Broadcasting\\Broadcasters\\PusherBroadcaster' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php', 'Illuminate\\Broadcasting\\Broadcasters\\RedisBroadcaster' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php', + 'Illuminate\\Broadcasting\\Broadcasters\\UsePusherChannelConventions' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/UsePusherChannelConventions.php', 'Illuminate\\Broadcasting\\Channel' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/Channel.php', + 'Illuminate\\Broadcasting\\EncryptedPrivateChannel' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/EncryptedPrivateChannel.php', 'Illuminate\\Broadcasting\\InteractsWithSockets' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/InteractsWithSockets.php', 'Illuminate\\Broadcasting\\PendingBroadcast' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/PendingBroadcast.php', 'Illuminate\\Broadcasting\\PresenceChannel' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/PresenceChannel.php', @@ -1233,13 +1593,17 @@ return array( 'Illuminate\\Bus\\Queueable' => $vendorDir . '/laravel/framework/src/Illuminate/Bus/Queueable.php', 'Illuminate\\Cache\\ApcStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ApcStore.php', 'Illuminate\\Cache\\ApcWrapper' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ApcWrapper.php', + 'Illuminate\\Cache\\ArrayLock' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ArrayLock.php', 'Illuminate\\Cache\\ArrayStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ArrayStore.php', 'Illuminate\\Cache\\CacheManager' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/CacheManager.php', 'Illuminate\\Cache\\CacheServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php', 'Illuminate\\Cache\\Console\\CacheTableCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php', 'Illuminate\\Cache\\Console\\ClearCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php', 'Illuminate\\Cache\\Console\\ForgetCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Console/ForgetCommand.php', + 'Illuminate\\Cache\\DatabaseLock' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/DatabaseLock.php', 'Illuminate\\Cache\\DatabaseStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/DatabaseStore.php', + 'Illuminate\\Cache\\DynamoDbLock' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/DynamoDbLock.php', + 'Illuminate\\Cache\\DynamoDbStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/DynamoDbStore.php', 'Illuminate\\Cache\\Events\\CacheEvent' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Events/CacheEvent.php', 'Illuminate\\Cache\\Events\\CacheHit' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Events/CacheHit.php', 'Illuminate\\Cache\\Events\\CacheMissed' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Events/CacheMissed.php', @@ -1247,6 +1611,7 @@ return array( 'Illuminate\\Cache\\Events\\KeyWritten' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Events/KeyWritten.php', 'Illuminate\\Cache\\FileStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/FileStore.php', 'Illuminate\\Cache\\Lock' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Lock.php', + 'Illuminate\\Cache\\LuaScripts' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/LuaScripts.php', 'Illuminate\\Cache\\MemcachedConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/MemcachedConnector.php', 'Illuminate\\Cache\\MemcachedLock' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/MemcachedLock.php', 'Illuminate\\Cache\\MemcachedStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/MemcachedStore.php', @@ -1263,14 +1628,21 @@ return array( 'Illuminate\\Config\\Repository' => $vendorDir . '/laravel/framework/src/Illuminate/Config/Repository.php', 'Illuminate\\Console\\Application' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Application.php', 'Illuminate\\Console\\Command' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Command.php', + 'Illuminate\\Console\\Concerns\\CallsCommands' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Concerns/CallsCommands.php', + 'Illuminate\\Console\\Concerns\\HasParameters' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Concerns/HasParameters.php', + 'Illuminate\\Console\\Concerns\\InteractsWithIO' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Concerns/InteractsWithIO.php', 'Illuminate\\Console\\ConfirmableTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php', - 'Illuminate\\Console\\DetectsApplicationNamespace' => $vendorDir . '/laravel/framework/src/Illuminate/Console/DetectsApplicationNamespace.php', 'Illuminate\\Console\\Events\\ArtisanStarting' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/ArtisanStarting.php', 'Illuminate\\Console\\Events\\CommandFinished' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/CommandFinished.php', 'Illuminate\\Console\\Events\\CommandStarting' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/CommandStarting.php', + 'Illuminate\\Console\\Events\\ScheduledTaskFailed' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFailed.php', + 'Illuminate\\Console\\Events\\ScheduledTaskFinished' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFinished.php', + 'Illuminate\\Console\\Events\\ScheduledTaskSkipped' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskSkipped.php', + 'Illuminate\\Console\\Events\\ScheduledTaskStarting' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskStarting.php', 'Illuminate\\Console\\GeneratorCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Console/GeneratorCommand.php', 'Illuminate\\Console\\OutputStyle' => $vendorDir . '/laravel/framework/src/Illuminate/Console/OutputStyle.php', 'Illuminate\\Console\\Parser' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Parser.php', + 'Illuminate\\Console\\Scheduling\\CacheAware' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Scheduling/CacheAware.php', 'Illuminate\\Console\\Scheduling\\CacheEventMutex' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Scheduling/CacheEventMutex.php', 'Illuminate\\Console\\Scheduling\\CacheSchedulingMutex' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Scheduling/CacheSchedulingMutex.php', 'Illuminate\\Console\\Scheduling\\CallbackEvent' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Scheduling/CallbackEvent.php', @@ -1286,12 +1658,15 @@ return array( 'Illuminate\\Container\\Container' => $vendorDir . '/laravel/framework/src/Illuminate/Container/Container.php', 'Illuminate\\Container\\ContextualBindingBuilder' => $vendorDir . '/laravel/framework/src/Illuminate/Container/ContextualBindingBuilder.php', 'Illuminate\\Container\\EntryNotFoundException' => $vendorDir . '/laravel/framework/src/Illuminate/Container/EntryNotFoundException.php', + 'Illuminate\\Container\\RewindableGenerator' => $vendorDir . '/laravel/framework/src/Illuminate/Container/RewindableGenerator.php', + 'Illuminate\\Container\\Util' => $vendorDir . '/laravel/framework/src/Illuminate/Container/Util.php', 'Illuminate\\Contracts\\Auth\\Access\\Authorizable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/Access/Authorizable.php', 'Illuminate\\Contracts\\Auth\\Access\\Gate' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/Access/Gate.php', 'Illuminate\\Contracts\\Auth\\Authenticatable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/Authenticatable.php', 'Illuminate\\Contracts\\Auth\\CanResetPassword' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/CanResetPassword.php', 'Illuminate\\Contracts\\Auth\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/Factory.php', 'Illuminate\\Contracts\\Auth\\Guard' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/Guard.php', + 'Illuminate\\Contracts\\Auth\\Middleware\\AuthenticatesRequests' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/Middleware/AuthenticatesRequests.php', 'Illuminate\\Contracts\\Auth\\MustVerifyEmail' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/MustVerifyEmail.php', 'Illuminate\\Contracts\\Auth\\PasswordBroker' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/PasswordBroker.php', 'Illuminate\\Contracts\\Auth\\PasswordBrokerFactory' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/PasswordBrokerFactory.php', @@ -1318,6 +1693,10 @@ return array( 'Illuminate\\Contracts\\Container\\ContextualBindingBuilder' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Container/ContextualBindingBuilder.php', 'Illuminate\\Contracts\\Cookie\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Cookie/Factory.php', 'Illuminate\\Contracts\\Cookie\\QueueingFactory' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Cookie/QueueingFactory.php', + 'Illuminate\\Contracts\\Database\\Eloquent\\Castable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/Castable.php', + 'Illuminate\\Contracts\\Database\\Eloquent\\CastsAttributes' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsAttributes.php', + 'Illuminate\\Contracts\\Database\\Eloquent\\CastsInboundAttributes' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsInboundAttributes.php', + 'Illuminate\\Contracts\\Database\\Events\\MigrationEvent' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Database/Events/MigrationEvent.php', 'Illuminate\\Contracts\\Database\\ModelIdentifier' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Database/ModelIdentifier.php', 'Illuminate\\Contracts\\Debug\\ExceptionHandler' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Debug/ExceptionHandler.php', 'Illuminate\\Contracts\\Encryption\\DecryptException' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Encryption/DecryptException.php', @@ -1330,8 +1709,11 @@ return array( 'Illuminate\\Contracts\\Filesystem\\FileNotFoundException' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Filesystem/FileNotFoundException.php', 'Illuminate\\Contracts\\Filesystem\\Filesystem' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Filesystem/Filesystem.php', 'Illuminate\\Contracts\\Foundation\\Application' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Foundation/Application.php', + 'Illuminate\\Contracts\\Foundation\\CachesConfiguration' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Foundation/CachesConfiguration.php', + 'Illuminate\\Contracts\\Foundation\\CachesRoutes' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Foundation/CachesRoutes.php', 'Illuminate\\Contracts\\Hashing\\Hasher' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Hashing/Hasher.php', 'Illuminate\\Contracts\\Http\\Kernel' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Http/Kernel.php', + 'Illuminate\\Contracts\\Mail\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Mail/Factory.php', 'Illuminate\\Contracts\\Mail\\MailQueue' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Mail/MailQueue.php', 'Illuminate\\Contracts\\Mail\\Mailable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Mail/Mailable.php', 'Illuminate\\Contracts\\Mail\\Mailer' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Mail/Mailer.php', @@ -1351,6 +1733,7 @@ return array( 'Illuminate\\Contracts\\Queue\\QueueableEntity' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Queue/QueueableEntity.php', 'Illuminate\\Contracts\\Queue\\ShouldQueue' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Queue/ShouldQueue.php', 'Illuminate\\Contracts\\Redis\\Connection' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Redis/Connection.php', + 'Illuminate\\Contracts\\Redis\\Connector' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Redis/Connector.php', 'Illuminate\\Contracts\\Redis\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Redis/Factory.php', 'Illuminate\\Contracts\\Redis\\LimiterTimeoutException' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Redis/LimiterTimeoutException.php', 'Illuminate\\Contracts\\Routing\\BindingRegistrar' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Routing/BindingRegistrar.php', @@ -1360,6 +1743,8 @@ return array( 'Illuminate\\Contracts\\Routing\\UrlRoutable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Routing/UrlRoutable.php', 'Illuminate\\Contracts\\Session\\Session' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Session/Session.php', 'Illuminate\\Contracts\\Support\\Arrayable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Support/Arrayable.php', + 'Illuminate\\Contracts\\Support\\DeferrableProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Support/DeferrableProvider.php', + 'Illuminate\\Contracts\\Support\\DeferringDisplayableValue' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Support/DeferringDisplayableValue.php', 'Illuminate\\Contracts\\Support\\Htmlable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Support/Htmlable.php', 'Illuminate\\Contracts\\Support\\Jsonable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Support/Jsonable.php', 'Illuminate\\Contracts\\Support\\MessageBag' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Support/MessageBag.php', @@ -1379,11 +1764,13 @@ return array( 'Illuminate\\Contracts\\View\\View' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/View/View.php', 'Illuminate\\Cookie\\CookieJar' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/CookieJar.php', 'Illuminate\\Cookie\\CookieServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/CookieServiceProvider.php', + 'Illuminate\\Cookie\\CookieValuePrefix' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/CookieValuePrefix.php', 'Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php', 'Illuminate\\Cookie\\Middleware\\EncryptCookies' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php', 'Illuminate\\Database\\Capsule\\Manager' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Capsule/Manager.php', 'Illuminate\\Database\\Concerns\\BuildsQueries' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php', 'Illuminate\\Database\\Concerns\\ManagesTransactions' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php', + 'Illuminate\\Database\\ConfigurationUrlParser' => $vendorDir . '/laravel/framework/src/Illuminate/Database/ConfigurationUrlParser.php', 'Illuminate\\Database\\Connection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connection.php', 'Illuminate\\Database\\ConnectionInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Database/ConnectionInterface.php', 'Illuminate\\Database\\ConnectionResolver' => $vendorDir . '/laravel/framework/src/Illuminate/Database/ConnectionResolver.php', @@ -1408,9 +1795,10 @@ return array( 'Illuminate\\Database\\Console\\Migrations\\TableGuesser' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/TableGuesser.php', 'Illuminate\\Database\\Console\\Seeds\\SeedCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php', 'Illuminate\\Database\\Console\\Seeds\\SeederMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Seeds/SeederMakeCommand.php', + 'Illuminate\\Database\\Console\\WipeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/WipeCommand.php', 'Illuminate\\Database\\DatabaseManager' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DatabaseManager.php', 'Illuminate\\Database\\DatabaseServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php', - 'Illuminate\\Database\\DetectsDeadlocks' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DetectsDeadlocks.php', + 'Illuminate\\Database\\DetectsConcurrencyErrors' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DetectsConcurrencyErrors.php', 'Illuminate\\Database\\DetectsLostConnections' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DetectsLostConnections.php', 'Illuminate\\Database\\Eloquent\\Builder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php', 'Illuminate\\Database\\Eloquent\\Collection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php', @@ -1440,6 +1828,7 @@ return array( 'Illuminate\\Database\\Eloquent\\Relations\\HasManyThrough' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php', 'Illuminate\\Database\\Eloquent\\Relations\\HasOne' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOne.php', 'Illuminate\\Database\\Eloquent\\Relations\\HasOneOrMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php', + 'Illuminate\\Database\\Eloquent\\Relations\\HasOneThrough' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneThrough.php', 'Illuminate\\Database\\Eloquent\\Relations\\MorphMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphMany.php', 'Illuminate\\Database\\Eloquent\\Relations\\MorphOne' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOne.php', 'Illuminate\\Database\\Eloquent\\Relations\\MorphOneOrMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOneOrMany.php', @@ -1452,6 +1841,12 @@ return array( 'Illuminate\\Database\\Eloquent\\SoftDeletes' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletes.php', 'Illuminate\\Database\\Eloquent\\SoftDeletingScope' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php', 'Illuminate\\Database\\Events\\ConnectionEvent' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/ConnectionEvent.php', + 'Illuminate\\Database\\Events\\MigrationEnded' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/MigrationEnded.php', + 'Illuminate\\Database\\Events\\MigrationEvent' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/MigrationEvent.php', + 'Illuminate\\Database\\Events\\MigrationStarted' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/MigrationStarted.php', + 'Illuminate\\Database\\Events\\MigrationsEnded' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/MigrationsEnded.php', + 'Illuminate\\Database\\Events\\MigrationsStarted' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/MigrationsStarted.php', + 'Illuminate\\Database\\Events\\NoPendingMigrations' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/NoPendingMigrations.php', 'Illuminate\\Database\\Events\\QueryExecuted' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/QueryExecuted.php', 'Illuminate\\Database\\Events\\StatementPrepared' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/StatementPrepared.php', 'Illuminate\\Database\\Events\\TransactionBeginning' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/TransactionBeginning.php', @@ -1475,7 +1870,6 @@ return array( 'Illuminate\\Database\\Query\\Grammars\\SQLiteGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php', 'Illuminate\\Database\\Query\\Grammars\\SqlServerGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php', 'Illuminate\\Database\\Query\\JoinClause' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/JoinClause.php', - 'Illuminate\\Database\\Query\\JsonExpression' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/JsonExpression.php', 'Illuminate\\Database\\Query\\Processors\\MySqlProcessor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php', 'Illuminate\\Database\\Query\\Processors\\PostgresProcessor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php', 'Illuminate\\Database\\Query\\Processors\\Processor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php', @@ -1485,6 +1879,8 @@ return array( 'Illuminate\\Database\\Schema\\Blueprint' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php', 'Illuminate\\Database\\Schema\\Builder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Builder.php', 'Illuminate\\Database\\Schema\\ColumnDefinition' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/ColumnDefinition.php', + 'Illuminate\\Database\\Schema\\ForeignIdColumnDefinition' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php', + 'Illuminate\\Database\\Schema\\ForeignKeyDefinition' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/ForeignKeyDefinition.php', 'Illuminate\\Database\\Schema\\Grammars\\ChangeColumn' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php', 'Illuminate\\Database\\Schema\\Grammars\\Grammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php', 'Illuminate\\Database\\Schema\\Grammars\\MySqlGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php', @@ -1503,6 +1899,7 @@ return array( 'Illuminate\\Events\\CallQueuedListener' => $vendorDir . '/laravel/framework/src/Illuminate/Events/CallQueuedListener.php', 'Illuminate\\Events\\Dispatcher' => $vendorDir . '/laravel/framework/src/Illuminate/Events/Dispatcher.php', 'Illuminate\\Events\\EventServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Events/EventServiceProvider.php', + 'Illuminate\\Events\\NullDispatcher' => $vendorDir . '/laravel/framework/src/Illuminate/Events/NullDispatcher.php', 'Illuminate\\Filesystem\\Cache' => $vendorDir . '/laravel/framework/src/Illuminate/Filesystem/Cache.php', 'Illuminate\\Filesystem\\Filesystem' => $vendorDir . '/laravel/framework/src/Illuminate/Filesystem/Filesystem.php', 'Illuminate\\Filesystem\\FilesystemAdapter' => $vendorDir . '/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php', @@ -1512,14 +1909,15 @@ return array( 'Illuminate\\Foundation\\Application' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Application.php', 'Illuminate\\Foundation\\Auth\\Access\\Authorizable' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/Access/Authorizable.php', 'Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/Access/AuthorizesRequests.php', - 'Illuminate\\Foundation\\Auth\\AuthenticatesUsers' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php', - 'Illuminate\\Foundation\\Auth\\RedirectsUsers' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/RedirectsUsers.php', - 'Illuminate\\Foundation\\Auth\\RegistersUsers' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php', - 'Illuminate\\Foundation\\Auth\\ResetsPasswords' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswords.php', - 'Illuminate\\Foundation\\Auth\\SendsPasswordResetEmails' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/SendsPasswordResetEmails.php', - 'Illuminate\\Foundation\\Auth\\ThrottlesLogins' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/ThrottlesLogins.php', + 'Illuminate\\Foundation\\Auth\\AuthenticatesUsers' => $vendorDir . '/laravel/ui/auth-backend/AuthenticatesUsers.php', + 'Illuminate\\Foundation\\Auth\\ConfirmsPasswords' => $vendorDir . '/laravel/ui/auth-backend/ConfirmsPasswords.php', + 'Illuminate\\Foundation\\Auth\\RedirectsUsers' => $vendorDir . '/laravel/ui/auth-backend/RedirectsUsers.php', + 'Illuminate\\Foundation\\Auth\\RegistersUsers' => $vendorDir . '/laravel/ui/auth-backend/RegistersUsers.php', + 'Illuminate\\Foundation\\Auth\\ResetsPasswords' => $vendorDir . '/laravel/ui/auth-backend/ResetsPasswords.php', + 'Illuminate\\Foundation\\Auth\\SendsPasswordResetEmails' => $vendorDir . '/laravel/ui/auth-backend/SendsPasswordResetEmails.php', + 'Illuminate\\Foundation\\Auth\\ThrottlesLogins' => $vendorDir . '/laravel/ui/auth-backend/ThrottlesLogins.php', 'Illuminate\\Foundation\\Auth\\User' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/User.php', - 'Illuminate\\Foundation\\Auth\\VerifiesEmails' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/VerifiesEmails.php', + 'Illuminate\\Foundation\\Auth\\VerifiesEmails' => $vendorDir . '/laravel/ui/auth-backend/VerifiesEmails.php', 'Illuminate\\Foundation\\Bootstrap\\BootProviders' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Bootstrap/BootProviders.php', 'Illuminate\\Foundation\\Bootstrap\\HandleExceptions' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php', 'Illuminate\\Foundation\\Bootstrap\\LoadConfiguration' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php', @@ -1532,16 +1930,20 @@ return array( 'Illuminate\\Foundation\\Bus\\PendingChain' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Bus/PendingChain.php', 'Illuminate\\Foundation\\Bus\\PendingDispatch' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Bus/PendingDispatch.php', 'Illuminate\\Foundation\\ComposerScripts' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/ComposerScripts.php', - 'Illuminate\\Foundation\\Console\\AppNameCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/AppNameCommand.php', + 'Illuminate\\Foundation\\Console\\CastMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/CastMakeCommand.php', 'Illuminate\\Foundation\\Console\\ChannelMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ChannelMakeCommand.php', 'Illuminate\\Foundation\\Console\\ClearCompiledCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ClearCompiledCommand.php', 'Illuminate\\Foundation\\Console\\ClosureCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ClosureCommand.php', + 'Illuminate\\Foundation\\Console\\ComponentMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ComponentMakeCommand.php', 'Illuminate\\Foundation\\Console\\ConfigCacheCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ConfigCacheCommand.php', 'Illuminate\\Foundation\\Console\\ConfigClearCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ConfigClearCommand.php', 'Illuminate\\Foundation\\Console\\ConsoleMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ConsoleMakeCommand.php', 'Illuminate\\Foundation\\Console\\DownCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/DownCommand.php', 'Illuminate\\Foundation\\Console\\EnvironmentCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/EnvironmentCommand.php', + 'Illuminate\\Foundation\\Console\\EventCacheCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/EventCacheCommand.php', + 'Illuminate\\Foundation\\Console\\EventClearCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/EventClearCommand.php', 'Illuminate\\Foundation\\Console\\EventGenerateCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/EventGenerateCommand.php', + 'Illuminate\\Foundation\\Console\\EventListCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/EventListCommand.php', 'Illuminate\\Foundation\\Console\\EventMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/EventMakeCommand.php', 'Illuminate\\Foundation\\Console\\ExceptionMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ExceptionMakeCommand.php', 'Illuminate\\Foundation\\Console\\JobMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/JobMakeCommand.php', @@ -1556,12 +1958,6 @@ return array( 'Illuminate\\Foundation\\Console\\OptimizeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/OptimizeCommand.php', 'Illuminate\\Foundation\\Console\\PackageDiscoverCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/PackageDiscoverCommand.php', 'Illuminate\\Foundation\\Console\\PolicyMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/PolicyMakeCommand.php', - 'Illuminate\\Foundation\\Console\\PresetCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/PresetCommand.php', - 'Illuminate\\Foundation\\Console\\Presets\\Bootstrap' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/Bootstrap.php', - 'Illuminate\\Foundation\\Console\\Presets\\None' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/None.php', - 'Illuminate\\Foundation\\Console\\Presets\\Preset' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/Preset.php', - 'Illuminate\\Foundation\\Console\\Presets\\React' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/React.php', - 'Illuminate\\Foundation\\Console\\Presets\\Vue' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/Vue.php', 'Illuminate\\Foundation\\Console\\ProviderMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ProviderMakeCommand.php', 'Illuminate\\Foundation\\Console\\QueuedCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/QueuedCommand.php', 'Illuminate\\Foundation\\Console\\RequestMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/RequestMakeCommand.php', @@ -1572,12 +1968,14 @@ return array( 'Illuminate\\Foundation\\Console\\RuleMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/RuleMakeCommand.php', 'Illuminate\\Foundation\\Console\\ServeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php', 'Illuminate\\Foundation\\Console\\StorageLinkCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/StorageLinkCommand.php', + 'Illuminate\\Foundation\\Console\\StubPublishCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/StubPublishCommand.php', 'Illuminate\\Foundation\\Console\\TestMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/TestMakeCommand.php', 'Illuminate\\Foundation\\Console\\UpCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/UpCommand.php', 'Illuminate\\Foundation\\Console\\VendorPublishCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/VendorPublishCommand.php', 'Illuminate\\Foundation\\Console\\ViewCacheCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ViewCacheCommand.php', 'Illuminate\\Foundation\\Console\\ViewClearCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ViewClearCommand.php', 'Illuminate\\Foundation\\EnvironmentDetector' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/EnvironmentDetector.php', + 'Illuminate\\Foundation\\Events\\DiscoverEvents' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Events/DiscoverEvents.php', 'Illuminate\\Foundation\\Events\\Dispatchable' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Events/Dispatchable.php', 'Illuminate\\Foundation\\Events\\LocaleUpdated' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Events/LocaleUpdated.php', 'Illuminate\\Foundation\\Exceptions\\Handler' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php', @@ -1593,6 +1991,7 @@ return array( 'Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php', 'Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php', 'Illuminate\\Foundation\\Inspiring' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Inspiring.php', + 'Illuminate\\Foundation\\Mix' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Mix.php', 'Illuminate\\Foundation\\PackageManifest' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/PackageManifest.php', 'Illuminate\\Foundation\\ProviderRepository' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php', 'Illuminate\\Foundation\\Providers\\ArtisanServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php', @@ -1612,17 +2011,11 @@ return array( 'Illuminate\\Foundation\\Testing\\Concerns\\InteractsWithSession' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithSession.php', 'Illuminate\\Foundation\\Testing\\Concerns\\MakesHttpRequests' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php', 'Illuminate\\Foundation\\Testing\\Concerns\\MocksApplicationServices' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MocksApplicationServices.php', - 'Illuminate\\Foundation\\Testing\\Constraints\\HasInDatabase' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/HasInDatabase.php', - 'Illuminate\\Foundation\\Testing\\Constraints\\SeeInOrder' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SeeInOrder.php', - 'Illuminate\\Foundation\\Testing\\Constraints\\SoftDeletedInDatabase' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SoftDeletedInDatabase.php', 'Illuminate\\Foundation\\Testing\\DatabaseMigrations' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/DatabaseMigrations.php', 'Illuminate\\Foundation\\Testing\\DatabaseTransactions' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/DatabaseTransactions.php', - 'Illuminate\\Foundation\\Testing\\HttpException' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/HttpException.php', - 'Illuminate\\Foundation\\Testing\\PendingCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/PendingCommand.php', 'Illuminate\\Foundation\\Testing\\RefreshDatabase' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php', 'Illuminate\\Foundation\\Testing\\RefreshDatabaseState' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabaseState.php', 'Illuminate\\Foundation\\Testing\\TestCase' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php', - 'Illuminate\\Foundation\\Testing\\TestResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php', 'Illuminate\\Foundation\\Testing\\WithFaker' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/WithFaker.php', 'Illuminate\\Foundation\\Testing\\WithoutEvents' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/WithoutEvents.php', 'Illuminate\\Foundation\\Testing\\WithoutMiddleware' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/WithoutMiddleware.php', @@ -1633,6 +2026,14 @@ return array( 'Illuminate\\Hashing\\BcryptHasher' => $vendorDir . '/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php', 'Illuminate\\Hashing\\HashManager' => $vendorDir . '/laravel/framework/src/Illuminate/Hashing/HashManager.php', 'Illuminate\\Hashing\\HashServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php', + 'Illuminate\\Http\\Client\\ConnectionException' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/ConnectionException.php', + 'Illuminate\\Http\\Client\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/Factory.php', + 'Illuminate\\Http\\Client\\HttpClientException' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/HttpClientException.php', + 'Illuminate\\Http\\Client\\PendingRequest' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/PendingRequest.php', + 'Illuminate\\Http\\Client\\Request' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/Request.php', + 'Illuminate\\Http\\Client\\RequestException' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/RequestException.php', + 'Illuminate\\Http\\Client\\Response' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/Response.php', + 'Illuminate\\Http\\Client\\ResponseSequence' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/ResponseSequence.php', 'Illuminate\\Http\\Concerns\\InteractsWithContentTypes' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithContentTypes.php', 'Illuminate\\Http\\Concerns\\InteractsWithFlashData' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithFlashData.php', 'Illuminate\\Http\\Concerns\\InteractsWithInput' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithInput.php', @@ -1645,6 +2046,7 @@ return array( 'Illuminate\\Http\\Middleware\\CheckResponseForModifications' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Middleware/CheckResponseForModifications.php', 'Illuminate\\Http\\Middleware\\FrameGuard' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Middleware/FrameGuard.php', 'Illuminate\\Http\\Middleware\\SetCacheHeaders' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Middleware/SetCacheHeaders.php', + 'Illuminate\\Http\\Middleware\\TrustHosts' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Middleware/TrustHosts.php', 'Illuminate\\Http\\RedirectResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Http/RedirectResponse.php', 'Illuminate\\Http\\Request' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Request.php', 'Illuminate\\Http\\Resources\\CollectsResources' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/CollectsResources.php', @@ -1653,7 +2055,6 @@ return array( 'Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/Json/AnonymousResourceCollection.php', 'Illuminate\\Http\\Resources\\Json\\JsonResource' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/Json/JsonResource.php', 'Illuminate\\Http\\Resources\\Json\\PaginatedResourceResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/Json/PaginatedResourceResponse.php', - 'Illuminate\\Http\\Resources\\Json\\Resource' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/Json/Resource.php', 'Illuminate\\Http\\Resources\\Json\\ResourceCollection' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceCollection.php', 'Illuminate\\Http\\Resources\\Json\\ResourceResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceResponse.php', 'Illuminate\\Http\\Resources\\MergeValue' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/MergeValue.php', @@ -1672,6 +2073,7 @@ return array( 'Illuminate\\Log\\ParsesLogConfiguration' => $vendorDir . '/laravel/framework/src/Illuminate/Log/ParsesLogConfiguration.php', 'Illuminate\\Mail\\Events\\MessageSending' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Events/MessageSending.php', 'Illuminate\\Mail\\Events\\MessageSent' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Events/MessageSent.php', + 'Illuminate\\Mail\\MailManager' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/MailManager.php', 'Illuminate\\Mail\\MailServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php', 'Illuminate\\Mail\\Mailable' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Mailable.php', 'Illuminate\\Mail\\Mailer' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Mailer.php', @@ -1679,13 +2081,10 @@ return array( 'Illuminate\\Mail\\Message' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Message.php', 'Illuminate\\Mail\\PendingMail' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/PendingMail.php', 'Illuminate\\Mail\\SendQueuedMailable' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php', - 'Illuminate\\Mail\\TransportManager' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/TransportManager.php', 'Illuminate\\Mail\\Transport\\ArrayTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/ArrayTransport.php', 'Illuminate\\Mail\\Transport\\LogTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php', 'Illuminate\\Mail\\Transport\\MailgunTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php', - 'Illuminate\\Mail\\Transport\\MandrillTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php', 'Illuminate\\Mail\\Transport\\SesTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/SesTransport.php', - 'Illuminate\\Mail\\Transport\\SparkPostTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/SparkPostTransport.php', 'Illuminate\\Mail\\Transport\\Transport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/Transport.php', 'Illuminate\\Notifications\\Action' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/Action.php', 'Illuminate\\Notifications\\AnonymousNotifiable' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/AnonymousNotifiable.php', @@ -1693,8 +2092,6 @@ return array( 'Illuminate\\Notifications\\Channels\\BroadcastChannel' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/Channels/BroadcastChannel.php', 'Illuminate\\Notifications\\Channels\\DatabaseChannel' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/Channels/DatabaseChannel.php', 'Illuminate\\Notifications\\Channels\\MailChannel' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/Channels/MailChannel.php', - 'Illuminate\\Notifications\\Channels\\NexmoSmsChannel' => $vendorDir . '/laravel/nexmo-notification-channel/src/Channels/NexmoSmsChannel.php', - 'Illuminate\\Notifications\\Channels\\SlackWebhookChannel' => $vendorDir . '/laravel/slack-notification-channel/src/Channels/SlackWebhookChannel.php', 'Illuminate\\Notifications\\Console\\NotificationTableCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/Console/NotificationTableCommand.php', 'Illuminate\\Notifications\\DatabaseNotification' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/DatabaseNotification.php', 'Illuminate\\Notifications\\DatabaseNotificationCollection' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/DatabaseNotificationCollection.php', @@ -1706,19 +2103,13 @@ return array( 'Illuminate\\Notifications\\Messages\\BroadcastMessage' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/Messages/BroadcastMessage.php', 'Illuminate\\Notifications\\Messages\\DatabaseMessage' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/Messages/DatabaseMessage.php', 'Illuminate\\Notifications\\Messages\\MailMessage' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/Messages/MailMessage.php', - 'Illuminate\\Notifications\\Messages\\NexmoMessage' => $vendorDir . '/laravel/nexmo-notification-channel/src/Messages/NexmoMessage.php', 'Illuminate\\Notifications\\Messages\\SimpleMessage' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/Messages/SimpleMessage.php', - 'Illuminate\\Notifications\\Messages\\SlackAttachment' => $vendorDir . '/laravel/slack-notification-channel/src/Messages/SlackAttachment.php', - 'Illuminate\\Notifications\\Messages\\SlackAttachmentField' => $vendorDir . '/laravel/slack-notification-channel/src/Messages/SlackAttachmentField.php', - 'Illuminate\\Notifications\\Messages\\SlackMessage' => $vendorDir . '/laravel/slack-notification-channel/src/Messages/SlackMessage.php', - 'Illuminate\\Notifications\\NexmoChannelServiceProvider' => $vendorDir . '/laravel/nexmo-notification-channel/src/NexmoChannelServiceProvider.php', 'Illuminate\\Notifications\\Notifiable' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/Notifiable.php', 'Illuminate\\Notifications\\Notification' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/Notification.php', 'Illuminate\\Notifications\\NotificationSender' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/NotificationSender.php', 'Illuminate\\Notifications\\NotificationServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/NotificationServiceProvider.php', 'Illuminate\\Notifications\\RoutesNotifications' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/RoutesNotifications.php', 'Illuminate\\Notifications\\SendQueuedNotifications' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/SendQueuedNotifications.php', - 'Illuminate\\Notifications\\SlackChannelServiceProvider' => $vendorDir . '/laravel/slack-notification-channel/src/SlackChannelServiceProvider.php', 'Illuminate\\Pagination\\AbstractPaginator' => $vendorDir . '/laravel/framework/src/Illuminate/Pagination/AbstractPaginator.php', 'Illuminate\\Pagination\\LengthAwarePaginator' => $vendorDir . '/laravel/framework/src/Illuminate/Pagination/LengthAwarePaginator.php', 'Illuminate\\Pagination\\PaginationServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Pagination/PaginationServiceProvider.php', @@ -1755,9 +2146,9 @@ return array( 'Illuminate\\Queue\\Events\\Looping' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Events/Looping.php', 'Illuminate\\Queue\\Events\\WorkerStopping' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Events/WorkerStopping.php', 'Illuminate\\Queue\\Failed\\DatabaseFailedJobProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php', + 'Illuminate\\Queue\\Failed\\DynamoDbFailedJobProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php', 'Illuminate\\Queue\\Failed\\FailedJobProviderInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php', 'Illuminate\\Queue\\Failed\\NullFailedJobProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Failed/NullFailedJobProvider.php', - 'Illuminate\\Queue\\FailingJob' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/FailingJob.php', 'Illuminate\\Queue\\InteractsWithQueue' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/InteractsWithQueue.php', 'Illuminate\\Queue\\InvalidPayloadException' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/InvalidPayloadException.php', 'Illuminate\\Queue\\Jobs\\BeanstalkdJob' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php', @@ -1799,6 +2190,8 @@ return array( 'Illuminate\\Redis\\Limiters\\DurationLimiterBuilder' => $vendorDir . '/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiterBuilder.php', 'Illuminate\\Redis\\RedisManager' => $vendorDir . '/laravel/framework/src/Illuminate/Redis/RedisManager.php', 'Illuminate\\Redis\\RedisServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php', + 'Illuminate\\Routing\\AbstractRouteCollection' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php', + 'Illuminate\\Routing\\CompiledRouteCollection' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/CompiledRouteCollection.php', 'Illuminate\\Routing\\Console\\ControllerMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php', 'Illuminate\\Routing\\Console\\MiddlewareMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/Console/MiddlewareMakeCommand.php', 'Illuminate\\Routing\\Contracts\\ControllerDispatcher' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/Contracts/ControllerDispatcher.php', @@ -1829,18 +2222,21 @@ return array( 'Illuminate\\Routing\\RouteAction' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteAction.php', 'Illuminate\\Routing\\RouteBinding' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteBinding.php', 'Illuminate\\Routing\\RouteCollection' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteCollection.php', - 'Illuminate\\Routing\\RouteCompiler' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteCompiler.php', + 'Illuminate\\Routing\\RouteCollectionInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteCollectionInterface.php', 'Illuminate\\Routing\\RouteDependencyResolverTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php', + 'Illuminate\\Routing\\RouteFileRegistrar' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteFileRegistrar.php', 'Illuminate\\Routing\\RouteGroup' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteGroup.php', 'Illuminate\\Routing\\RouteParameterBinder' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php', 'Illuminate\\Routing\\RouteRegistrar' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php', 'Illuminate\\Routing\\RouteSignatureParameters' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php', + 'Illuminate\\Routing\\RouteUri' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteUri.php', 'Illuminate\\Routing\\RouteUrlGenerator' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteUrlGenerator.php', 'Illuminate\\Routing\\Router' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/Router.php', 'Illuminate\\Routing\\RoutingServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php', 'Illuminate\\Routing\\SortedMiddleware' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/SortedMiddleware.php', 'Illuminate\\Routing\\UrlGenerator' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/UrlGenerator.php', 'Illuminate\\Routing\\ViewController' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/ViewController.php', + 'Illuminate\\Session\\ArraySessionHandler' => $vendorDir . '/laravel/framework/src/Illuminate/Session/ArraySessionHandler.php', 'Illuminate\\Session\\CacheBasedSessionHandler' => $vendorDir . '/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php', 'Illuminate\\Session\\Console\\SessionTableCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php', 'Illuminate\\Session\\CookieSessionHandler' => $vendorDir . '/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php', @@ -1860,6 +2256,10 @@ return array( 'Illuminate\\Support\\Carbon' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Carbon.php', 'Illuminate\\Support\\Collection' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Collection.php', 'Illuminate\\Support\\Composer' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Composer.php', + 'Illuminate\\Support\\ConfigurationUrlParser' => $vendorDir . '/laravel/framework/src/Illuminate/Support/ConfigurationUrlParser.php', + 'Illuminate\\Support\\DateFactory' => $vendorDir . '/laravel/framework/src/Illuminate/Support/DateFactory.php', + 'Illuminate\\Support\\Enumerable' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Enumerable.php', + 'Illuminate\\Support\\Env' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Env.php', 'Illuminate\\Support\\Facades\\App' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/App.php', 'Illuminate\\Support\\Facades\\Artisan' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Artisan.php', 'Illuminate\\Support\\Facades\\Auth' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Auth.php', @@ -1871,12 +2271,13 @@ return array( 'Illuminate\\Support\\Facades\\Cookie' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Cookie.php', 'Illuminate\\Support\\Facades\\Crypt' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Crypt.php', 'Illuminate\\Support\\Facades\\DB' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/DB.php', + 'Illuminate\\Support\\Facades\\Date' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Date.php', 'Illuminate\\Support\\Facades\\Event' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Event.php', 'Illuminate\\Support\\Facades\\Facade' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Facade.php', 'Illuminate\\Support\\Facades\\File' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/File.php', 'Illuminate\\Support\\Facades\\Gate' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Gate.php', 'Illuminate\\Support\\Facades\\Hash' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Hash.php', - 'Illuminate\\Support\\Facades\\Input' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Input.php', + 'Illuminate\\Support\\Facades\\Http' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Http.php', 'Illuminate\\Support\\Facades\\Lang' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Lang.php', 'Illuminate\\Support\\Facades\\Log' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Log.php', 'Illuminate\\Support\\Facades\\Mail' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Mail.php', @@ -1897,16 +2298,20 @@ return array( 'Illuminate\\Support\\Fluent' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Fluent.php', 'Illuminate\\Support\\HigherOrderCollectionProxy' => $vendorDir . '/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php', 'Illuminate\\Support\\HigherOrderTapProxy' => $vendorDir . '/laravel/framework/src/Illuminate/Support/HigherOrderTapProxy.php', + 'Illuminate\\Support\\HigherOrderWhenProxy' => $vendorDir . '/laravel/framework/src/Illuminate/Support/HigherOrderWhenProxy.php', 'Illuminate\\Support\\HtmlString' => $vendorDir . '/laravel/framework/src/Illuminate/Support/HtmlString.php', 'Illuminate\\Support\\InteractsWithTime' => $vendorDir . '/laravel/framework/src/Illuminate/Support/InteractsWithTime.php', + 'Illuminate\\Support\\LazyCollection' => $vendorDir . '/laravel/framework/src/Illuminate/Support/LazyCollection.php', 'Illuminate\\Support\\Manager' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Manager.php', 'Illuminate\\Support\\MessageBag' => $vendorDir . '/laravel/framework/src/Illuminate/Support/MessageBag.php', 'Illuminate\\Support\\NamespacedItemResolver' => $vendorDir . '/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php', 'Illuminate\\Support\\Optional' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Optional.php', 'Illuminate\\Support\\Pluralizer' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Pluralizer.php', 'Illuminate\\Support\\ProcessUtils' => $vendorDir . '/laravel/framework/src/Illuminate/Support/ProcessUtils.php', + 'Illuminate\\Support\\Reflector' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Reflector.php', 'Illuminate\\Support\\ServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Support/ServiceProvider.php', 'Illuminate\\Support\\Str' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Str.php', + 'Illuminate\\Support\\Stringable' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Stringable.php', 'Illuminate\\Support\\Testing\\Fakes\\BusFake' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php', 'Illuminate\\Support\\Testing\\Fakes\\EventFake' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php', 'Illuminate\\Support\\Testing\\Fakes\\MailFake' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php', @@ -1914,20 +2319,33 @@ return array( 'Illuminate\\Support\\Testing\\Fakes\\PendingMailFake' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/PendingMailFake.php', 'Illuminate\\Support\\Testing\\Fakes\\QueueFake' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/QueueFake.php', 'Illuminate\\Support\\Traits\\CapsuleManagerTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php', + 'Illuminate\\Support\\Traits\\EnumeratesValues' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php', 'Illuminate\\Support\\Traits\\ForwardsCalls' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php', 'Illuminate\\Support\\Traits\\Localizable' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/Localizable.php', 'Illuminate\\Support\\Traits\\Macroable' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/Macroable.php', + 'Illuminate\\Support\\Traits\\ReflectsClosures' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/ReflectsClosures.php', + 'Illuminate\\Support\\Traits\\Tappable' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/Tappable.php', 'Illuminate\\Support\\ViewErrorBag' => $vendorDir . '/laravel/framework/src/Illuminate/Support/ViewErrorBag.php', + 'Illuminate\\Testing\\Assert' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/Assert.php', + 'Illuminate\\Testing\\Constraints\\ArraySubset' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/Constraints/ArraySubset.php', + 'Illuminate\\Testing\\Constraints\\CountInDatabase' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/Constraints/CountInDatabase.php', + 'Illuminate\\Testing\\Constraints\\HasInDatabase' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/Constraints/HasInDatabase.php', + 'Illuminate\\Testing\\Constraints\\SeeInOrder' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/Constraints/SeeInOrder.php', + 'Illuminate\\Testing\\Constraints\\SoftDeletedInDatabase' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/Constraints/SoftDeletedInDatabase.php', + 'Illuminate\\Testing\\PendingCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/PendingCommand.php', + 'Illuminate\\Testing\\TestResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/TestResponse.php', 'Illuminate\\Translation\\ArrayLoader' => $vendorDir . '/laravel/framework/src/Illuminate/Translation/ArrayLoader.php', 'Illuminate\\Translation\\FileLoader' => $vendorDir . '/laravel/framework/src/Illuminate/Translation/FileLoader.php', 'Illuminate\\Translation\\MessageSelector' => $vendorDir . '/laravel/framework/src/Illuminate/Translation/MessageSelector.php', 'Illuminate\\Translation\\TranslationServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php', 'Illuminate\\Translation\\Translator' => $vendorDir . '/laravel/framework/src/Illuminate/Translation/Translator.php', 'Illuminate\\Validation\\ClosureValidationRule' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/ClosureValidationRule.php', + 'Illuminate\\Validation\\Concerns\\FilterEmailValidation' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/Concerns/FilterEmailValidation.php', 'Illuminate\\Validation\\Concerns\\FormatsMessages' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/Concerns/FormatsMessages.php', 'Illuminate\\Validation\\Concerns\\ReplacesAttributes' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php', 'Illuminate\\Validation\\Concerns\\ValidatesAttributes' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php', 'Illuminate\\Validation\\DatabasePresenceVerifier' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php', + 'Illuminate\\Validation\\DatabasePresenceVerifierInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifierInterface.php', 'Illuminate\\Validation\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/Factory.php', 'Illuminate\\Validation\\PresenceVerifierInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/PresenceVerifierInterface.php', 'Illuminate\\Validation\\Rule' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/Rule.php', @@ -1945,14 +2363,17 @@ return array( 'Illuminate\\Validation\\ValidationRuleParser' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/ValidationRuleParser.php', 'Illuminate\\Validation\\ValidationServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php', 'Illuminate\\Validation\\Validator' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/Validator.php', + 'Illuminate\\View\\AnonymousComponent' => $vendorDir . '/laravel/framework/src/Illuminate/View/AnonymousComponent.php', 'Illuminate\\View\\Compilers\\BladeCompiler' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php', 'Illuminate\\View\\Compilers\\Compiler' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Compiler.php', 'Illuminate\\View\\Compilers\\CompilerInterface' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/CompilerInterface.php', + 'Illuminate\\View\\Compilers\\ComponentTagCompiler' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesAuthorizations' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesAuthorizations.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesComments' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComments.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesComponents' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComponents.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesConditionals' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesConditionals.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesEchos' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesEchos.php', + 'Illuminate\\View\\Compilers\\Concerns\\CompilesErrors' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesErrors.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesHelpers' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesHelpers.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesIncludes' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesIncludes.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesInjections' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesInjections.php', @@ -1962,6 +2383,8 @@ return array( 'Illuminate\\View\\Compilers\\Concerns\\CompilesRawPhp' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesRawPhp.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesStacks' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesStacks.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesTranslations' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesTranslations.php', + 'Illuminate\\View\\Component' => $vendorDir . '/laravel/framework/src/Illuminate/View/Component.php', + 'Illuminate\\View\\ComponentAttributeBag' => $vendorDir . '/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php', 'Illuminate\\View\\Concerns\\ManagesComponents' => $vendorDir . '/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php', 'Illuminate\\View\\Concerns\\ManagesEvents' => $vendorDir . '/laravel/framework/src/Illuminate/View/Concerns/ManagesEvents.php', 'Illuminate\\View\\Concerns\\ManagesLayouts' => $vendorDir . '/laravel/framework/src/Illuminate/View/Concerns/ManagesLayouts.php', @@ -1975,53 +2398,237 @@ return array( 'Illuminate\\View\\Engines\\PhpEngine' => $vendorDir . '/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php', 'Illuminate\\View\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/View/Factory.php', 'Illuminate\\View\\FileViewFinder' => $vendorDir . '/laravel/framework/src/Illuminate/View/FileViewFinder.php', + 'Illuminate\\View\\InvokableComponentVariable' => $vendorDir . '/laravel/framework/src/Illuminate/View/InvokableComponentVariable.php', 'Illuminate\\View\\Middleware\\ShareErrorsFromSession' => $vendorDir . '/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php', 'Illuminate\\View\\View' => $vendorDir . '/laravel/framework/src/Illuminate/View/View.php', + 'Illuminate\\View\\ViewException' => $vendorDir . '/laravel/framework/src/Illuminate/View/ViewException.php', 'Illuminate\\View\\ViewFinderInterface' => $vendorDir . '/laravel/framework/src/Illuminate/View/ViewFinderInterface.php', 'Illuminate\\View\\ViewName' => $vendorDir . '/laravel/framework/src/Illuminate/View/ViewName.php', 'Illuminate\\View\\ViewServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/View/ViewServiceProvider.php', - 'JakubOnderka\\PhpConsoleColor\\ConsoleColor' => $vendorDir . '/jakub-onderka/php-console-color/src/ConsoleColor.php', - 'JakubOnderka\\PhpConsoleColor\\InvalidStyleException' => $vendorDir . '/jakub-onderka/php-console-color/src/InvalidStyleException.php', - 'JakubOnderka\\PhpConsoleHighlighter\\Highlighter' => $vendorDir . '/jakub-onderka/php-console-highlighter/src/Highlighter.php', 'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', - 'JsonSerializable' => $vendorDir . '/nesbot/carbon/src/JsonSerializable.php', 'Laravel\\Tinker\\ClassAliasAutoloader' => $vendorDir . '/laravel/tinker/src/ClassAliasAutoloader.php', 'Laravel\\Tinker\\Console\\TinkerCommand' => $vendorDir . '/laravel/tinker/src/Console/TinkerCommand.php', 'Laravel\\Tinker\\TinkerCaster' => $vendorDir . '/laravel/tinker/src/TinkerCaster.php', 'Laravel\\Tinker\\TinkerServiceProvider' => $vendorDir . '/laravel/tinker/src/TinkerServiceProvider.php', - 'Lcobucci\\JWT\\Builder' => $vendorDir . '/lcobucci/jwt/src/Builder.php', - 'Lcobucci\\JWT\\Claim' => $vendorDir . '/lcobucci/jwt/src/Claim.php', - 'Lcobucci\\JWT\\Claim\\Basic' => $vendorDir . '/lcobucci/jwt/src/Claim/Basic.php', - 'Lcobucci\\JWT\\Claim\\EqualsTo' => $vendorDir . '/lcobucci/jwt/src/Claim/EqualsTo.php', - 'Lcobucci\\JWT\\Claim\\Factory' => $vendorDir . '/lcobucci/jwt/src/Claim/Factory.php', - 'Lcobucci\\JWT\\Claim\\GreaterOrEqualsTo' => $vendorDir . '/lcobucci/jwt/src/Claim/GreaterOrEqualsTo.php', - 'Lcobucci\\JWT\\Claim\\LesserOrEqualsTo' => $vendorDir . '/lcobucci/jwt/src/Claim/LesserOrEqualsTo.php', - 'Lcobucci\\JWT\\Claim\\Validatable' => $vendorDir . '/lcobucci/jwt/src/Claim/Validatable.php', - 'Lcobucci\\JWT\\Parser' => $vendorDir . '/lcobucci/jwt/src/Parser.php', - 'Lcobucci\\JWT\\Parsing\\Decoder' => $vendorDir . '/lcobucci/jwt/src/Parsing/Decoder.php', - 'Lcobucci\\JWT\\Parsing\\Encoder' => $vendorDir . '/lcobucci/jwt/src/Parsing/Encoder.php', - 'Lcobucci\\JWT\\Signature' => $vendorDir . '/lcobucci/jwt/src/Signature.php', - 'Lcobucci\\JWT\\Signer' => $vendorDir . '/lcobucci/jwt/src/Signer.php', - 'Lcobucci\\JWT\\Signer\\BaseSigner' => $vendorDir . '/lcobucci/jwt/src/Signer/BaseSigner.php', - 'Lcobucci\\JWT\\Signer\\Ecdsa' => $vendorDir . '/lcobucci/jwt/src/Signer/Ecdsa.php', - 'Lcobucci\\JWT\\Signer\\Ecdsa\\MultibyteStringConverter' => $vendorDir . '/lcobucci/jwt/src/Signer/Ecdsa/MultibyteStringConverter.php', - 'Lcobucci\\JWT\\Signer\\Ecdsa\\Sha256' => $vendorDir . '/lcobucci/jwt/src/Signer/Ecdsa/Sha256.php', - 'Lcobucci\\JWT\\Signer\\Ecdsa\\Sha384' => $vendorDir . '/lcobucci/jwt/src/Signer/Ecdsa/Sha384.php', - 'Lcobucci\\JWT\\Signer\\Ecdsa\\Sha512' => $vendorDir . '/lcobucci/jwt/src/Signer/Ecdsa/Sha512.php', - 'Lcobucci\\JWT\\Signer\\Ecdsa\\SignatureConverter' => $vendorDir . '/lcobucci/jwt/src/Signer/Ecdsa/SignatureConverter.php', - 'Lcobucci\\JWT\\Signer\\Hmac' => $vendorDir . '/lcobucci/jwt/src/Signer/Hmac.php', - 'Lcobucci\\JWT\\Signer\\Hmac\\Sha256' => $vendorDir . '/lcobucci/jwt/src/Signer/Hmac/Sha256.php', - 'Lcobucci\\JWT\\Signer\\Hmac\\Sha384' => $vendorDir . '/lcobucci/jwt/src/Signer/Hmac/Sha384.php', - 'Lcobucci\\JWT\\Signer\\Hmac\\Sha512' => $vendorDir . '/lcobucci/jwt/src/Signer/Hmac/Sha512.php', - 'Lcobucci\\JWT\\Signer\\Key' => $vendorDir . '/lcobucci/jwt/src/Signer/Key.php', - 'Lcobucci\\JWT\\Signer\\Keychain' => $vendorDir . '/lcobucci/jwt/src/Signer/Keychain.php', - 'Lcobucci\\JWT\\Signer\\OpenSSL' => $vendorDir . '/lcobucci/jwt/src/Signer/OpenSSL.php', - 'Lcobucci\\JWT\\Signer\\Rsa' => $vendorDir . '/lcobucci/jwt/src/Signer/Rsa.php', - 'Lcobucci\\JWT\\Signer\\Rsa\\Sha256' => $vendorDir . '/lcobucci/jwt/src/Signer/Rsa/Sha256.php', - 'Lcobucci\\JWT\\Signer\\Rsa\\Sha384' => $vendorDir . '/lcobucci/jwt/src/Signer/Rsa/Sha384.php', - 'Lcobucci\\JWT\\Signer\\Rsa\\Sha512' => $vendorDir . '/lcobucci/jwt/src/Signer/Rsa/Sha512.php', - 'Lcobucci\\JWT\\Token' => $vendorDir . '/lcobucci/jwt/src/Token.php', - 'Lcobucci\\JWT\\ValidationData' => $vendorDir . '/lcobucci/jwt/src/ValidationData.php', + 'Laravel\\Ui\\AuthCommand' => $vendorDir . '/laravel/ui/src/AuthCommand.php', + 'Laravel\\Ui\\AuthRouteMethods' => $vendorDir . '/laravel/ui/src/AuthRouteMethods.php', + 'Laravel\\Ui\\ControllersCommand' => $vendorDir . '/laravel/ui/src/ControllersCommand.php', + 'Laravel\\Ui\\Presets\\Bootstrap' => $vendorDir . '/laravel/ui/src/Presets/Bootstrap.php', + 'Laravel\\Ui\\Presets\\Preset' => $vendorDir . '/laravel/ui/src/Presets/Preset.php', + 'Laravel\\Ui\\Presets\\React' => $vendorDir . '/laravel/ui/src/Presets/React.php', + 'Laravel\\Ui\\Presets\\Vue' => $vendorDir . '/laravel/ui/src/Presets/Vue.php', + 'Laravel\\Ui\\UiCommand' => $vendorDir . '/laravel/ui/src/UiCommand.php', + 'Laravel\\Ui\\UiServiceProvider' => $vendorDir . '/laravel/ui/src/UiServiceProvider.php', + 'League\\CommonMark\\Block\\Element\\AbstractBlock' => $vendorDir . '/league/commonmark/src/Block/Element/AbstractBlock.php', + 'League\\CommonMark\\Block\\Element\\AbstractStringContainerBlock' => $vendorDir . '/league/commonmark/src/Block/Element/AbstractStringContainerBlock.php', + 'League\\CommonMark\\Block\\Element\\BlockQuote' => $vendorDir . '/league/commonmark/src/Block/Element/BlockQuote.php', + 'League\\CommonMark\\Block\\Element\\Document' => $vendorDir . '/league/commonmark/src/Block/Element/Document.php', + 'League\\CommonMark\\Block\\Element\\FencedCode' => $vendorDir . '/league/commonmark/src/Block/Element/FencedCode.php', + 'League\\CommonMark\\Block\\Element\\Heading' => $vendorDir . '/league/commonmark/src/Block/Element/Heading.php', + 'League\\CommonMark\\Block\\Element\\HtmlBlock' => $vendorDir . '/league/commonmark/src/Block/Element/HtmlBlock.php', + 'League\\CommonMark\\Block\\Element\\IndentedCode' => $vendorDir . '/league/commonmark/src/Block/Element/IndentedCode.php', + 'League\\CommonMark\\Block\\Element\\InlineContainerInterface' => $vendorDir . '/league/commonmark/src/Block/Element/InlineContainerInterface.php', + 'League\\CommonMark\\Block\\Element\\ListBlock' => $vendorDir . '/league/commonmark/src/Block/Element/ListBlock.php', + 'League\\CommonMark\\Block\\Element\\ListData' => $vendorDir . '/league/commonmark/src/Block/Element/ListData.php', + 'League\\CommonMark\\Block\\Element\\ListItem' => $vendorDir . '/league/commonmark/src/Block/Element/ListItem.php', + 'League\\CommonMark\\Block\\Element\\Paragraph' => $vendorDir . '/league/commonmark/src/Block/Element/Paragraph.php', + 'League\\CommonMark\\Block\\Element\\StringContainerInterface' => $vendorDir . '/league/commonmark/src/Block/Element/StringContainerInterface.php', + 'League\\CommonMark\\Block\\Element\\ThematicBreak' => $vendorDir . '/league/commonmark/src/Block/Element/ThematicBreak.php', + 'League\\CommonMark\\Block\\Parser\\ATXHeadingParser' => $vendorDir . '/league/commonmark/src/Block/Parser/ATXHeadingParser.php', + 'League\\CommonMark\\Block\\Parser\\BlockParserInterface' => $vendorDir . '/league/commonmark/src/Block/Parser/BlockParserInterface.php', + 'League\\CommonMark\\Block\\Parser\\BlockQuoteParser' => $vendorDir . '/league/commonmark/src/Block/Parser/BlockQuoteParser.php', + 'League\\CommonMark\\Block\\Parser\\FencedCodeParser' => $vendorDir . '/league/commonmark/src/Block/Parser/FencedCodeParser.php', + 'League\\CommonMark\\Block\\Parser\\HtmlBlockParser' => $vendorDir . '/league/commonmark/src/Block/Parser/HtmlBlockParser.php', + 'League\\CommonMark\\Block\\Parser\\IndentedCodeParser' => $vendorDir . '/league/commonmark/src/Block/Parser/IndentedCodeParser.php', + 'League\\CommonMark\\Block\\Parser\\LazyParagraphParser' => $vendorDir . '/league/commonmark/src/Block/Parser/LazyParagraphParser.php', + 'League\\CommonMark\\Block\\Parser\\ListParser' => $vendorDir . '/league/commonmark/src/Block/Parser/ListParser.php', + 'League\\CommonMark\\Block\\Parser\\SetExtHeadingParser' => $vendorDir . '/league/commonmark/src/Block/Parser/SetExtHeadingParser.php', + 'League\\CommonMark\\Block\\Parser\\ThematicBreakParser' => $vendorDir . '/league/commonmark/src/Block/Parser/ThematicBreakParser.php', + 'League\\CommonMark\\Block\\Renderer\\BlockQuoteRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/BlockQuoteRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\BlockRendererInterface' => $vendorDir . '/league/commonmark/src/Block/Renderer/BlockRendererInterface.php', + 'League\\CommonMark\\Block\\Renderer\\DocumentRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/DocumentRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\FencedCodeRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/FencedCodeRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\HeadingRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/HeadingRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\HtmlBlockRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/HtmlBlockRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\IndentedCodeRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/IndentedCodeRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ListBlockRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/ListBlockRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ListItemRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/ListItemRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ParagraphRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/ParagraphRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ThematicBreakRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/ThematicBreakRenderer.php', + 'League\\CommonMark\\CommonMarkConverter' => $vendorDir . '/league/commonmark/src/CommonMarkConverter.php', + 'League\\CommonMark\\ConfigurableEnvironmentInterface' => $vendorDir . '/league/commonmark/src/ConfigurableEnvironmentInterface.php', + 'League\\CommonMark\\Context' => $vendorDir . '/league/commonmark/src/Context.php', + 'League\\CommonMark\\ContextInterface' => $vendorDir . '/league/commonmark/src/ContextInterface.php', + 'League\\CommonMark\\Converter' => $vendorDir . '/league/commonmark/src/Converter.php', + 'League\\CommonMark\\ConverterInterface' => $vendorDir . '/league/commonmark/src/ConverterInterface.php', + 'League\\CommonMark\\Cursor' => $vendorDir . '/league/commonmark/src/Cursor.php', + 'League\\CommonMark\\Delimiter\\Delimiter' => $vendorDir . '/league/commonmark/src/Delimiter/Delimiter.php', + 'League\\CommonMark\\Delimiter\\DelimiterInterface' => $vendorDir . '/league/commonmark/src/Delimiter/DelimiterInterface.php', + 'League\\CommonMark\\Delimiter\\DelimiterStack' => $vendorDir . '/league/commonmark/src/Delimiter/DelimiterStack.php', + 'League\\CommonMark\\Delimiter\\Processor\\DelimiterProcessorCollection' => $vendorDir . '/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollection.php', + 'League\\CommonMark\\Delimiter\\Processor\\DelimiterProcessorCollectionInterface' => $vendorDir . '/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollectionInterface.php', + 'League\\CommonMark\\Delimiter\\Processor\\DelimiterProcessorInterface' => $vendorDir . '/league/commonmark/src/Delimiter/Processor/DelimiterProcessorInterface.php', + 'League\\CommonMark\\Delimiter\\Processor\\EmphasisDelimiterProcessor' => $vendorDir . '/league/commonmark/src/Delimiter/Processor/EmphasisDelimiterProcessor.php', + 'League\\CommonMark\\Delimiter\\Processor\\StaggeredDelimiterProcessor' => $vendorDir . '/league/commonmark/src/Delimiter/Processor/StaggeredDelimiterProcessor.php', + 'League\\CommonMark\\DocParser' => $vendorDir . '/league/commonmark/src/DocParser.php', + 'League\\CommonMark\\DocParserInterface' => $vendorDir . '/league/commonmark/src/DocParserInterface.php', + 'League\\CommonMark\\ElementRendererInterface' => $vendorDir . '/league/commonmark/src/ElementRendererInterface.php', + 'League\\CommonMark\\Environment' => $vendorDir . '/league/commonmark/src/Environment.php', + 'League\\CommonMark\\EnvironmentAwareInterface' => $vendorDir . '/league/commonmark/src/EnvironmentAwareInterface.php', + 'League\\CommonMark\\EnvironmentInterface' => $vendorDir . '/league/commonmark/src/EnvironmentInterface.php', + 'League\\CommonMark\\Event\\AbstractEvent' => $vendorDir . '/league/commonmark/src/Event/AbstractEvent.php', + 'League\\CommonMark\\Event\\DocumentParsedEvent' => $vendorDir . '/league/commonmark/src/Event/DocumentParsedEvent.php', + 'League\\CommonMark\\Event\\DocumentPreParsedEvent' => $vendorDir . '/league/commonmark/src/Event/DocumentPreParsedEvent.php', + 'League\\CommonMark\\Exception\\InvalidOptionException' => $vendorDir . '/league/commonmark/src/Exception/InvalidOptionException.php', + 'League\\CommonMark\\Exception\\UnexpectedEncodingException' => $vendorDir . '/league/commonmark/src/Exception/UnexpectedEncodingException.php', + 'League\\CommonMark\\Extension\\Attributes\\AttributesExtension' => $vendorDir . '/league/commonmark/src/Extension/Attributes/AttributesExtension.php', + 'League\\CommonMark\\Extension\\Attributes\\Event\\AttributesListener' => $vendorDir . '/league/commonmark/src/Extension/Attributes/Event/AttributesListener.php', + 'League\\CommonMark\\Extension\\Attributes\\Node\\Attributes' => $vendorDir . '/league/commonmark/src/Extension/Attributes/Node/Attributes.php', + 'League\\CommonMark\\Extension\\Attributes\\Node\\AttributesInline' => $vendorDir . '/league/commonmark/src/Extension/Attributes/Node/AttributesInline.php', + 'League\\CommonMark\\Extension\\Attributes\\Parser\\AttributesBlockParser' => $vendorDir . '/league/commonmark/src/Extension/Attributes/Parser/AttributesBlockParser.php', + 'League\\CommonMark\\Extension\\Attributes\\Parser\\AttributesInlineParser' => $vendorDir . '/league/commonmark/src/Extension/Attributes/Parser/AttributesInlineParser.php', + 'League\\CommonMark\\Extension\\Attributes\\Util\\AttributesHelper' => $vendorDir . '/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php', + 'League\\CommonMark\\Extension\\Autolink\\AutolinkExtension' => $vendorDir . '/league/commonmark/src/Extension/Autolink/AutolinkExtension.php', + 'League\\CommonMark\\Extension\\Autolink\\EmailAutolinkProcessor' => $vendorDir . '/league/commonmark/src/Extension/Autolink/EmailAutolinkProcessor.php', + 'League\\CommonMark\\Extension\\Autolink\\InlineMentionParser' => $vendorDir . '/league/commonmark/src/Extension/Autolink/InlineMentionParser.php', + 'League\\CommonMark\\Extension\\Autolink\\UrlAutolinkProcessor' => $vendorDir . '/league/commonmark/src/Extension/Autolink/UrlAutolinkProcessor.php', + 'League\\CommonMark\\Extension\\CommonMarkCoreExtension' => $vendorDir . '/league/commonmark/src/Extension/CommonMarkCoreExtension.php', + 'League\\CommonMark\\Extension\\DisallowedRawHtml\\DisallowedRawHtmlBlockRenderer' => $vendorDir . '/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlBlockRenderer.php', + 'League\\CommonMark\\Extension\\DisallowedRawHtml\\DisallowedRawHtmlExtension' => $vendorDir . '/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlExtension.php', + 'League\\CommonMark\\Extension\\DisallowedRawHtml\\DisallowedRawHtmlInlineRenderer' => $vendorDir . '/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlInlineRenderer.php', + 'League\\CommonMark\\Extension\\ExtensionInterface' => $vendorDir . '/league/commonmark/src/Extension/ExtensionInterface.php', + 'League\\CommonMark\\Extension\\ExternalLink\\ExternalLinkExtension' => $vendorDir . '/league/commonmark/src/Extension/ExternalLink/ExternalLinkExtension.php', + 'League\\CommonMark\\Extension\\ExternalLink\\ExternalLinkProcessor' => $vendorDir . '/league/commonmark/src/Extension/ExternalLink/ExternalLinkProcessor.php', + 'League\\CommonMark\\Extension\\Footnote\\Event\\AnonymousFootnotesListener' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Event/AnonymousFootnotesListener.php', + 'League\\CommonMark\\Extension\\Footnote\\Event\\GatherFootnotesListener' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Event/GatherFootnotesListener.php', + 'League\\CommonMark\\Extension\\Footnote\\Event\\NumberFootnotesListener' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Event/NumberFootnotesListener.php', + 'League\\CommonMark\\Extension\\Footnote\\FootnoteExtension' => $vendorDir . '/league/commonmark/src/Extension/Footnote/FootnoteExtension.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\Footnote' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Node/Footnote.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\FootnoteBackref' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Node/FootnoteBackref.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\FootnoteContainer' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Node/FootnoteContainer.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\FootnoteRef' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Node/FootnoteRef.php', + 'League\\CommonMark\\Extension\\Footnote\\Parser\\AnonymousFootnoteRefParser' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Parser/AnonymousFootnoteRefParser.php', + 'League\\CommonMark\\Extension\\Footnote\\Parser\\FootnoteParser' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Parser/FootnoteParser.php', + 'League\\CommonMark\\Extension\\Footnote\\Parser\\FootnoteRefParser' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Parser/FootnoteRefParser.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteBackrefRenderer' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteBackrefRenderer.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteContainerRenderer' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteContainerRenderer.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteRefRenderer' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRefRenderer.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteRenderer' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRenderer.php', + 'League\\CommonMark\\Extension\\GithubFlavoredMarkdownExtension' => $vendorDir . '/league/commonmark/src/Extension/GithubFlavoredMarkdownExtension.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalink' => $vendorDir . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalink.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkExtension' => $vendorDir . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkExtension.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkProcessor' => $vendorDir . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkProcessor.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkRenderer' => $vendorDir . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkRenderer.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\Slug\\DefaultSlugGenerator' => $vendorDir . '/league/commonmark/src/Extension/HeadingPermalink/Slug/DefaultSlugGenerator.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\Slug\\SlugGeneratorInterface' => $vendorDir . '/league/commonmark/src/Extension/HeadingPermalink/Slug/SlugGeneratorInterface.php', + 'League\\CommonMark\\Extension\\InlinesOnly\\ChildRenderer' => $vendorDir . '/league/commonmark/src/Extension/InlinesOnly/ChildRenderer.php', + 'League\\CommonMark\\Extension\\InlinesOnly\\InlinesOnlyExtension' => $vendorDir . '/league/commonmark/src/Extension/InlinesOnly/InlinesOnlyExtension.php', + 'League\\CommonMark\\Extension\\Mention\\Generator\\CallbackGenerator' => $vendorDir . '/league/commonmark/src/Extension/Mention/Generator/CallbackGenerator.php', + 'League\\CommonMark\\Extension\\Mention\\Generator\\MentionGeneratorInterface' => $vendorDir . '/league/commonmark/src/Extension/Mention/Generator/MentionGeneratorInterface.php', + 'League\\CommonMark\\Extension\\Mention\\Generator\\StringTemplateLinkGenerator' => $vendorDir . '/league/commonmark/src/Extension/Mention/Generator/StringTemplateLinkGenerator.php', + 'League\\CommonMark\\Extension\\Mention\\Mention' => $vendorDir . '/league/commonmark/src/Extension/Mention/Mention.php', + 'League\\CommonMark\\Extension\\Mention\\MentionExtension' => $vendorDir . '/league/commonmark/src/Extension/Mention/MentionExtension.php', + 'League\\CommonMark\\Extension\\Mention\\MentionParser' => $vendorDir . '/league/commonmark/src/Extension/Mention/MentionParser.php', + 'League\\CommonMark\\Extension\\SmartPunct\\PunctuationParser' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/PunctuationParser.php', + 'League\\CommonMark\\Extension\\SmartPunct\\Quote' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/Quote.php', + 'League\\CommonMark\\Extension\\SmartPunct\\QuoteParser' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/QuoteParser.php', + 'League\\CommonMark\\Extension\\SmartPunct\\QuoteProcessor' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/QuoteProcessor.php', + 'League\\CommonMark\\Extension\\SmartPunct\\QuoteRenderer' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/QuoteRenderer.php', + 'League\\CommonMark\\Extension\\SmartPunct\\SmartPunctExtension' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/SmartPunctExtension.php', + 'League\\CommonMark\\Extension\\Strikethrough\\Strikethrough' => $vendorDir . '/league/commonmark/src/Extension/Strikethrough/Strikethrough.php', + 'League\\CommonMark\\Extension\\Strikethrough\\StrikethroughDelimiterProcessor' => $vendorDir . '/league/commonmark/src/Extension/Strikethrough/StrikethroughDelimiterProcessor.php', + 'League\\CommonMark\\Extension\\Strikethrough\\StrikethroughExtension' => $vendorDir . '/league/commonmark/src/Extension/Strikethrough/StrikethroughExtension.php', + 'League\\CommonMark\\Extension\\Strikethrough\\StrikethroughRenderer' => $vendorDir . '/league/commonmark/src/Extension/Strikethrough/StrikethroughRenderer.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContents' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContents.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContentsPlaceholder' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsPlaceholder.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\AsIsNormalizerStrategy' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Normalizer/AsIsNormalizerStrategy.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\FlatNormalizerStrategy' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Normalizer/FlatNormalizerStrategy.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\NormalizerStrategyInterface' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Normalizer/NormalizerStrategyInterface.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\RelativeNormalizerStrategy' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Normalizer/RelativeNormalizerStrategy.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContents' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContents.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsBuilder' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsBuilder.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsExtension' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsExtension.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsGenerator' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsGenerator.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsGeneratorInterface' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsGeneratorInterface.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderParser' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderRenderer' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderRenderer.php', + 'League\\CommonMark\\Extension\\Table\\Table' => $vendorDir . '/league/commonmark/src/Extension/Table/Table.php', + 'League\\CommonMark\\Extension\\Table\\TableCell' => $vendorDir . '/league/commonmark/src/Extension/Table/TableCell.php', + 'League\\CommonMark\\Extension\\Table\\TableCellRenderer' => $vendorDir . '/league/commonmark/src/Extension/Table/TableCellRenderer.php', + 'League\\CommonMark\\Extension\\Table\\TableExtension' => $vendorDir . '/league/commonmark/src/Extension/Table/TableExtension.php', + 'League\\CommonMark\\Extension\\Table\\TableParser' => $vendorDir . '/league/commonmark/src/Extension/Table/TableParser.php', + 'League\\CommonMark\\Extension\\Table\\TableRenderer' => $vendorDir . '/league/commonmark/src/Extension/Table/TableRenderer.php', + 'League\\CommonMark\\Extension\\Table\\TableRow' => $vendorDir . '/league/commonmark/src/Extension/Table/TableRow.php', + 'League\\CommonMark\\Extension\\Table\\TableRowRenderer' => $vendorDir . '/league/commonmark/src/Extension/Table/TableRowRenderer.php', + 'League\\CommonMark\\Extension\\Table\\TableSection' => $vendorDir . '/league/commonmark/src/Extension/Table/TableSection.php', + 'League\\CommonMark\\Extension\\Table\\TableSectionRenderer' => $vendorDir . '/league/commonmark/src/Extension/Table/TableSectionRenderer.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListExtension' => $vendorDir . '/league/commonmark/src/Extension/TaskList/TaskListExtension.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListItemMarker' => $vendorDir . '/league/commonmark/src/Extension/TaskList/TaskListItemMarker.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListItemMarkerParser' => $vendorDir . '/league/commonmark/src/Extension/TaskList/TaskListItemMarkerParser.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListItemMarkerRenderer' => $vendorDir . '/league/commonmark/src/Extension/TaskList/TaskListItemMarkerRenderer.php', + 'League\\CommonMark\\GithubFlavoredMarkdownConverter' => $vendorDir . '/league/commonmark/src/GithubFlavoredMarkdownConverter.php', + 'League\\CommonMark\\HtmlElement' => $vendorDir . '/league/commonmark/src/HtmlElement.php', + 'League\\CommonMark\\HtmlRenderer' => $vendorDir . '/league/commonmark/src/HtmlRenderer.php', + 'League\\CommonMark\\InlineParserContext' => $vendorDir . '/league/commonmark/src/InlineParserContext.php', + 'League\\CommonMark\\InlineParserEngine' => $vendorDir . '/league/commonmark/src/InlineParserEngine.php', + 'League\\CommonMark\\Inline\\AdjacentTextMerger' => $vendorDir . '/league/commonmark/src/Inline/AdjacentTextMerger.php', + 'League\\CommonMark\\Inline\\Element\\AbstractInline' => $vendorDir . '/league/commonmark/src/Inline/Element/AbstractInline.php', + 'League\\CommonMark\\Inline\\Element\\AbstractStringContainer' => $vendorDir . '/league/commonmark/src/Inline/Element/AbstractStringContainer.php', + 'League\\CommonMark\\Inline\\Element\\AbstractWebResource' => $vendorDir . '/league/commonmark/src/Inline/Element/AbstractWebResource.php', + 'League\\CommonMark\\Inline\\Element\\Code' => $vendorDir . '/league/commonmark/src/Inline/Element/Code.php', + 'League\\CommonMark\\Inline\\Element\\Emphasis' => $vendorDir . '/league/commonmark/src/Inline/Element/Emphasis.php', + 'League\\CommonMark\\Inline\\Element\\HtmlInline' => $vendorDir . '/league/commonmark/src/Inline/Element/HtmlInline.php', + 'League\\CommonMark\\Inline\\Element\\Image' => $vendorDir . '/league/commonmark/src/Inline/Element/Image.php', + 'League\\CommonMark\\Inline\\Element\\Link' => $vendorDir . '/league/commonmark/src/Inline/Element/Link.php', + 'League\\CommonMark\\Inline\\Element\\Newline' => $vendorDir . '/league/commonmark/src/Inline/Element/Newline.php', + 'League\\CommonMark\\Inline\\Element\\Strong' => $vendorDir . '/league/commonmark/src/Inline/Element/Strong.php', + 'League\\CommonMark\\Inline\\Element\\Text' => $vendorDir . '/league/commonmark/src/Inline/Element/Text.php', + 'League\\CommonMark\\Inline\\Parser\\AutolinkParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/AutolinkParser.php', + 'League\\CommonMark\\Inline\\Parser\\BacktickParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/BacktickParser.php', + 'League\\CommonMark\\Inline\\Parser\\BangParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/BangParser.php', + 'League\\CommonMark\\Inline\\Parser\\CloseBracketParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/CloseBracketParser.php', + 'League\\CommonMark\\Inline\\Parser\\EntityParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/EntityParser.php', + 'League\\CommonMark\\Inline\\Parser\\EscapableParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/EscapableParser.php', + 'League\\CommonMark\\Inline\\Parser\\HtmlInlineParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/HtmlInlineParser.php', + 'League\\CommonMark\\Inline\\Parser\\InlineParserInterface' => $vendorDir . '/league/commonmark/src/Inline/Parser/InlineParserInterface.php', + 'League\\CommonMark\\Inline\\Parser\\NewlineParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/NewlineParser.php', + 'League\\CommonMark\\Inline\\Parser\\OpenBracketParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/OpenBracketParser.php', + 'League\\CommonMark\\Inline\\Renderer\\CodeRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/CodeRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\EmphasisRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/EmphasisRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\HtmlInlineRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/HtmlInlineRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\ImageRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/ImageRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\InlineRendererInterface' => $vendorDir . '/league/commonmark/src/Inline/Renderer/InlineRendererInterface.php', + 'League\\CommonMark\\Inline\\Renderer\\LinkRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/LinkRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\NewlineRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/NewlineRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\StrongRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/StrongRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\TextRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/TextRenderer.php', + 'League\\CommonMark\\Input\\MarkdownInput' => $vendorDir . '/league/commonmark/src/Input/MarkdownInput.php', + 'League\\CommonMark\\Input\\MarkdownInputInterface' => $vendorDir . '/league/commonmark/src/Input/MarkdownInputInterface.php', + 'League\\CommonMark\\MarkdownConverter' => $vendorDir . '/league/commonmark/src/MarkdownConverter.php', + 'League\\CommonMark\\MarkdownConverterInterface' => $vendorDir . '/league/commonmark/src/MarkdownConverterInterface.php', + 'League\\CommonMark\\Node\\Node' => $vendorDir . '/league/commonmark/src/Node/Node.php', + 'League\\CommonMark\\Node\\NodeWalker' => $vendorDir . '/league/commonmark/src/Node/NodeWalker.php', + 'League\\CommonMark\\Node\\NodeWalkerEvent' => $vendorDir . '/league/commonmark/src/Node/NodeWalkerEvent.php', + 'League\\CommonMark\\Normalizer\\SlugNormalizer' => $vendorDir . '/league/commonmark/src/Normalizer/SlugNormalizer.php', + 'League\\CommonMark\\Normalizer\\TextNormalizer' => $vendorDir . '/league/commonmark/src/Normalizer/TextNormalizer.php', + 'League\\CommonMark\\Normalizer\\TextNormalizerInterface' => $vendorDir . '/league/commonmark/src/Normalizer/TextNormalizerInterface.php', + 'League\\CommonMark\\Reference\\Reference' => $vendorDir . '/league/commonmark/src/Reference/Reference.php', + 'League\\CommonMark\\Reference\\ReferenceInterface' => $vendorDir . '/league/commonmark/src/Reference/ReferenceInterface.php', + 'League\\CommonMark\\Reference\\ReferenceMap' => $vendorDir . '/league/commonmark/src/Reference/ReferenceMap.php', + 'League\\CommonMark\\Reference\\ReferenceMapInterface' => $vendorDir . '/league/commonmark/src/Reference/ReferenceMapInterface.php', + 'League\\CommonMark\\Reference\\ReferenceParser' => $vendorDir . '/league/commonmark/src/Reference/ReferenceParser.php', + 'League\\CommonMark\\UnmatchedBlockCloser' => $vendorDir . '/league/commonmark/src/UnmatchedBlockCloser.php', + 'League\\CommonMark\\Util\\ArrayCollection' => $vendorDir . '/league/commonmark/src/Util/ArrayCollection.php', + 'League\\CommonMark\\Util\\Configuration' => $vendorDir . '/league/commonmark/src/Util/Configuration.php', + 'League\\CommonMark\\Util\\ConfigurationAwareInterface' => $vendorDir . '/league/commonmark/src/Util/ConfigurationAwareInterface.php', + 'League\\CommonMark\\Util\\ConfigurationInterface' => $vendorDir . '/league/commonmark/src/Util/ConfigurationInterface.php', + 'League\\CommonMark\\Util\\Html5Entities' => $vendorDir . '/league/commonmark/src/Util/Html5Entities.php', + 'League\\CommonMark\\Util\\Html5EntityDecoder' => $vendorDir . '/league/commonmark/src/Util/Html5EntityDecoder.php', + 'League\\CommonMark\\Util\\LinkParserHelper' => $vendorDir . '/league/commonmark/src/Util/LinkParserHelper.php', + 'League\\CommonMark\\Util\\PrioritizedList' => $vendorDir . '/league/commonmark/src/Util/PrioritizedList.php', + 'League\\CommonMark\\Util\\RegexHelper' => $vendorDir . '/league/commonmark/src/Util/RegexHelper.php', + 'League\\CommonMark\\Util\\UrlEncoder' => $vendorDir . '/league/commonmark/src/Util/UrlEncoder.php', + 'League\\CommonMark\\Util\\Xml' => $vendorDir . '/league/commonmark/src/Util/Xml.php', 'League\\Flysystem\\AdapterInterface' => $vendorDir . '/league/flysystem/src/AdapterInterface.php', 'League\\Flysystem\\Adapter\\AbstractAdapter' => $vendorDir . '/league/flysystem/src/Adapter/AbstractAdapter.php', 'League\\Flysystem\\Adapter\\AbstractFtpAdapter' => $vendorDir . '/league/flysystem/src/Adapter/AbstractFtpAdapter.php', @@ -2038,15 +2645,20 @@ return array( 'League\\Flysystem\\Adapter\\SynologyFtp' => $vendorDir . '/league/flysystem/src/Adapter/SynologyFtp.php', 'League\\Flysystem\\Config' => $vendorDir . '/league/flysystem/src/Config.php', 'League\\Flysystem\\ConfigAwareTrait' => $vendorDir . '/league/flysystem/src/ConfigAwareTrait.php', + 'League\\Flysystem\\ConnectionErrorException' => $vendorDir . '/league/flysystem/src/ConnectionErrorException.php', + 'League\\Flysystem\\ConnectionRuntimeException' => $vendorDir . '/league/flysystem/src/ConnectionRuntimeException.php', + 'League\\Flysystem\\CorruptedPathDetected' => $vendorDir . '/league/flysystem/src/CorruptedPathDetected.php', 'League\\Flysystem\\Directory' => $vendorDir . '/league/flysystem/src/Directory.php', 'League\\Flysystem\\Exception' => $vendorDir . '/league/flysystem/src/Exception.php', 'League\\Flysystem\\File' => $vendorDir . '/league/flysystem/src/File.php', 'League\\Flysystem\\FileExistsException' => $vendorDir . '/league/flysystem/src/FileExistsException.php', 'League\\Flysystem\\FileNotFoundException' => $vendorDir . '/league/flysystem/src/FileNotFoundException.php', 'League\\Flysystem\\Filesystem' => $vendorDir . '/league/flysystem/src/Filesystem.php', + 'League\\Flysystem\\FilesystemException' => $vendorDir . '/league/flysystem/src/FilesystemException.php', 'League\\Flysystem\\FilesystemInterface' => $vendorDir . '/league/flysystem/src/FilesystemInterface.php', 'League\\Flysystem\\FilesystemNotFoundException' => $vendorDir . '/league/flysystem/src/FilesystemNotFoundException.php', 'League\\Flysystem\\Handler' => $vendorDir . '/league/flysystem/src/Handler.php', + 'League\\Flysystem\\InvalidRootException' => $vendorDir . '/league/flysystem/src/InvalidRootException.php', 'League\\Flysystem\\MountManager' => $vendorDir . '/league/flysystem/src/MountManager.php', 'League\\Flysystem\\NotSupportedException' => $vendorDir . '/league/flysystem/src/NotSupportedException.php', 'League\\Flysystem\\PluginInterface' => $vendorDir . '/league/flysystem/src/PluginInterface.php', @@ -2068,6 +2680,13 @@ return array( 'League\\Flysystem\\Util\\ContentListingFormatter' => $vendorDir . '/league/flysystem/src/Util/ContentListingFormatter.php', 'League\\Flysystem\\Util\\MimeType' => $vendorDir . '/league/flysystem/src/Util/MimeType.php', 'League\\Flysystem\\Util\\StreamHasher' => $vendorDir . '/league/flysystem/src/Util/StreamHasher.php', + 'League\\MimeTypeDetection\\EmptyExtensionToMimeTypeMap' => $vendorDir . '/league/mime-type-detection/src/EmptyExtensionToMimeTypeMap.php', + 'League\\MimeTypeDetection\\ExtensionMimeTypeDetector' => $vendorDir . '/league/mime-type-detection/src/ExtensionMimeTypeDetector.php', + 'League\\MimeTypeDetection\\ExtensionToMimeTypeMap' => $vendorDir . '/league/mime-type-detection/src/ExtensionToMimeTypeMap.php', + 'League\\MimeTypeDetection\\FinfoMimeTypeDetector' => $vendorDir . '/league/mime-type-detection/src/FinfoMimeTypeDetector.php', + 'League\\MimeTypeDetection\\GeneratedExtensionToMimeTypeMap' => $vendorDir . '/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php', + 'League\\MimeTypeDetection\\MimeTypeDetector' => $vendorDir . '/league/mime-type-detection/src/MimeTypeDetector.php', + 'League\\MimeTypeDetection\\OverridingExtensionToMimeTypeMap' => $vendorDir . '/league/mime-type-detection/src/OverridingExtensionToMimeTypeMap.php', 'Mockery' => $vendorDir . '/mockery/mockery/library/Mockery.php', 'Mockery\\Adapter\\Phpunit\\Legacy\\TestListenerForV5' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerForV5.php', 'Mockery\\Adapter\\Phpunit\\Legacy\\TestListenerForV6' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerForV6.php', @@ -2107,8 +2726,10 @@ return array( 'Mockery\\Generator\\MockConfiguration' => $vendorDir . '/mockery/mockery/library/Mockery/Generator/MockConfiguration.php', 'Mockery\\Generator\\MockConfigurationBuilder' => $vendorDir . '/mockery/mockery/library/Mockery/Generator/MockConfigurationBuilder.php', 'Mockery\\Generator\\MockDefinition' => $vendorDir . '/mockery/mockery/library/Mockery/Generator/MockDefinition.php', + 'Mockery\\Generator\\MockNameBuilder' => $vendorDir . '/mockery/mockery/library/Mockery/Generator/MockNameBuilder.php', 'Mockery\\Generator\\Parameter' => $vendorDir . '/mockery/mockery/library/Mockery/Generator/Parameter.php', 'Mockery\\Generator\\StringManipulationGenerator' => $vendorDir . '/mockery/mockery/library/Mockery/Generator/StringManipulationGenerator.php', + 'Mockery\\Generator\\StringManipulation\\Pass\\AvoidMethodClashPass' => $vendorDir . '/mockery/mockery/library/Mockery/Generator/StringManipulation/Pass/AvoidMethodClashPass.php', 'Mockery\\Generator\\StringManipulation\\Pass\\CallTypeHintPass' => $vendorDir . '/mockery/mockery/library/Mockery/Generator/StringManipulation/Pass/CallTypeHintPass.php', 'Mockery\\Generator\\StringManipulation\\Pass\\ClassNamePass' => $vendorDir . '/mockery/mockery/library/Mockery/Generator/StringManipulation/Pass/ClassNamePass.php', 'Mockery\\Generator\\StringManipulation\\Pass\\ClassPass' => $vendorDir . '/mockery/mockery/library/Mockery/Generator/StringManipulation/Pass/ClassPass.php', @@ -2126,6 +2747,7 @@ return array( 'Mockery\\Generator\\UndefinedTargetClass' => $vendorDir . '/mockery/mockery/library/Mockery/Generator/UndefinedTargetClass.php', 'Mockery\\HigherOrderMessage' => $vendorDir . '/mockery/mockery/library/Mockery/HigherOrderMessage.php', 'Mockery\\Instantiator' => $vendorDir . '/mockery/mockery/library/Mockery/Instantiator.php', + 'Mockery\\LegacyMockInterface' => $vendorDir . '/mockery/mockery/library/Mockery/LegacyMockInterface.php', 'Mockery\\Loader\\EvalLoader' => $vendorDir . '/mockery/mockery/library/Mockery/Loader/EvalLoader.php', 'Mockery\\Loader\\Loader' => $vendorDir . '/mockery/mockery/library/Mockery/Loader/Loader.php', 'Mockery\\Loader\\RequireLoader' => $vendorDir . '/mockery/mockery/library/Mockery/Loader/RequireLoader.php', @@ -2153,12 +2775,15 @@ return array( 'Mockery\\Mock' => $vendorDir . '/mockery/mockery/library/Mockery/Mock.php', 'Mockery\\MockInterface' => $vendorDir . '/mockery/mockery/library/Mockery/MockInterface.php', 'Mockery\\ReceivedMethodCalls' => $vendorDir . '/mockery/mockery/library/Mockery/ReceivedMethodCalls.php', + 'Mockery\\Reflector' => $vendorDir . '/mockery/mockery/library/Mockery/Reflector.php', 'Mockery\\Undefined' => $vendorDir . '/mockery/mockery/library/Mockery/Undefined.php', 'Mockery\\VerificationDirector' => $vendorDir . '/mockery/mockery/library/Mockery/VerificationDirector.php', 'Mockery\\VerificationExpectation' => $vendorDir . '/mockery/mockery/library/Mockery/VerificationExpectation.php', + 'Monolog\\DateTimeImmutable' => $vendorDir . '/monolog/monolog/src/Monolog/DateTimeImmutable.php', 'Monolog\\ErrorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/ErrorHandler.php', 'Monolog\\Formatter\\ChromePHPFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php', 'Monolog\\Formatter\\ElasticaFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php', + 'Monolog\\Formatter\\ElasticsearchFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php', 'Monolog\\Formatter\\FlowdockFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php', 'Monolog\\Formatter\\FluentdFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php', 'Monolog\\Formatter\\FormatterInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php', @@ -2167,6 +2792,7 @@ return array( 'Monolog\\Formatter\\JsonFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php', 'Monolog\\Formatter\\LineFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LineFormatter.php', 'Monolog\\Formatter\\LogglyFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php', + 'Monolog\\Formatter\\LogmaticFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php', 'Monolog\\Formatter\\LogstashFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php', 'Monolog\\Formatter\\MongoDBFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php', 'Monolog\\Formatter\\NormalizerFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php', @@ -2185,8 +2811,10 @@ return array( 'Monolog\\Handler\\DeduplicationHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php', 'Monolog\\Handler\\DoctrineCouchDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php', 'Monolog\\Handler\\DynamoDbHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php', - 'Monolog\\Handler\\ElasticSearchHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php', + 'Monolog\\Handler\\ElasticaHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php', + 'Monolog\\Handler\\ElasticsearchHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php', 'Monolog\\Handler\\ErrorLogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php', + 'Monolog\\Handler\\FallbackGroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php', 'Monolog\\Handler\\FilterHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php', 'Monolog\\Handler\\FingersCrossedHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php', 'Monolog\\Handler\\FingersCrossed\\ActivationStrategyInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php', @@ -2195,45 +2823,57 @@ return array( 'Monolog\\Handler\\FirePHPHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php', 'Monolog\\Handler\\FleepHookHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php', 'Monolog\\Handler\\FlowdockHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php', + 'Monolog\\Handler\\FormattableHandlerInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php', + 'Monolog\\Handler\\FormattableHandlerTrait' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php', 'Monolog\\Handler\\GelfHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/GelfHandler.php', 'Monolog\\Handler\\GroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/GroupHandler.php', + 'Monolog\\Handler\\Handler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/Handler.php', 'Monolog\\Handler\\HandlerInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HandlerInterface.php', 'Monolog\\Handler\\HandlerWrapper' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php', - 'Monolog\\Handler\\HipChatHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HipChatHandler.php', 'Monolog\\Handler\\IFTTTHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php', 'Monolog\\Handler\\InsightOpsHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php', 'Monolog\\Handler\\LogEntriesHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php', 'Monolog\\Handler\\LogglyHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogglyHandler.php', + 'Monolog\\Handler\\LogmaticHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php', 'Monolog\\Handler\\MailHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MailHandler.php', 'Monolog\\Handler\\MandrillHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MandrillHandler.php', 'Monolog\\Handler\\MissingExtensionException' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php', 'Monolog\\Handler\\MongoDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php', 'Monolog\\Handler\\NativeMailerHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php', 'Monolog\\Handler\\NewRelicHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php', + 'Monolog\\Handler\\NoopHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NoopHandler.php', 'Monolog\\Handler\\NullHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NullHandler.php', + 'Monolog\\Handler\\OverflowHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/OverflowHandler.php', 'Monolog\\Handler\\PHPConsoleHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php', + 'Monolog\\Handler\\ProcessHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ProcessHandler.php', + 'Monolog\\Handler\\ProcessableHandlerInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php', + 'Monolog\\Handler\\ProcessableHandlerTrait' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php', 'Monolog\\Handler\\PsrHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PsrHandler.php', 'Monolog\\Handler\\PushoverHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PushoverHandler.php', - 'Monolog\\Handler\\RavenHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RavenHandler.php', 'Monolog\\Handler\\RedisHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RedisHandler.php', + 'Monolog\\Handler\\RedisPubSubHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php', 'Monolog\\Handler\\RollbarHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RollbarHandler.php', 'Monolog\\Handler\\RotatingFileHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php', 'Monolog\\Handler\\SamplingHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SamplingHandler.php', + 'Monolog\\Handler\\SendGridHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SendGridHandler.php', 'Monolog\\Handler\\SlackHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackHandler.php', 'Monolog\\Handler\\SlackWebhookHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php', 'Monolog\\Handler\\Slack\\SlackRecord' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php', - 'Monolog\\Handler\\SlackbotHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php', 'Monolog\\Handler\\SocketHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SocketHandler.php', + 'Monolog\\Handler\\SqsHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SqsHandler.php', 'Monolog\\Handler\\StreamHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/StreamHandler.php', 'Monolog\\Handler\\SwiftMailerHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php', 'Monolog\\Handler\\SyslogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogHandler.php', 'Monolog\\Handler\\SyslogUdpHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php', 'Monolog\\Handler\\SyslogUdp\\UdpSocket' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php', + 'Monolog\\Handler\\TelegramBotHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php', 'Monolog\\Handler\\TestHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/TestHandler.php', + 'Monolog\\Handler\\WebRequestRecognizerTrait' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php', 'Monolog\\Handler\\WhatFailureGroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php', 'Monolog\\Handler\\ZendMonitorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php', 'Monolog\\Logger' => $vendorDir . '/monolog/monolog/src/Monolog/Logger.php', 'Monolog\\Processor\\GitProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/GitProcessor.php', + 'Monolog\\Processor\\HostnameProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php', 'Monolog\\Processor\\IntrospectionProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php', 'Monolog\\Processor\\MemoryPeakUsageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php', 'Monolog\\Processor\\MemoryProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php', @@ -2248,136 +2888,9 @@ return array( 'Monolog\\Registry' => $vendorDir . '/monolog/monolog/src/Monolog/Registry.php', 'Monolog\\ResettableInterface' => $vendorDir . '/monolog/monolog/src/Monolog/ResettableInterface.php', 'Monolog\\SignalHandler' => $vendorDir . '/monolog/monolog/src/Monolog/SignalHandler.php', + 'Monolog\\Test\\TestCase' => $vendorDir . '/monolog/monolog/src/Monolog/Test/TestCase.php', 'Monolog\\Utils' => $vendorDir . '/monolog/monolog/src/Monolog/Utils.php', - 'Nexmo\\Account\\Balance' => $vendorDir . '/nexmo/client/src/Account/Balance.php', - 'Nexmo\\Account\\Client' => $vendorDir . '/nexmo/client/src/Account/Client.php', - 'Nexmo\\Account\\Config' => $vendorDir . '/nexmo/client/src/Account/Config.php', - 'Nexmo\\Account\\PrefixPrice' => $vendorDir . '/nexmo/client/src/Account/PrefixPrice.php', - 'Nexmo\\Account\\Price' => $vendorDir . '/nexmo/client/src/Account/Price.php', - 'Nexmo\\Account\\Secret' => $vendorDir . '/nexmo/client/src/Account/Secret.php', - 'Nexmo\\Account\\SecretCollection' => $vendorDir . '/nexmo/client/src/Account/SecretCollection.php', - 'Nexmo\\Account\\SmsPrice' => $vendorDir . '/nexmo/client/src/Account/SmsPrice.php', - 'Nexmo\\Account\\VoicePrice' => $vendorDir . '/nexmo/client/src/Account/VoicePrice.php', - 'Nexmo\\ApiErrorHandler' => $vendorDir . '/nexmo/client/src/ApiErrorHandler.php', - 'Nexmo\\Application\\Application' => $vendorDir . '/nexmo/client/src/Application/Application.php', - 'Nexmo\\Application\\ApplicationInterface' => $vendorDir . '/nexmo/client/src/Application/ApplicationInterface.php', - 'Nexmo\\Application\\Client' => $vendorDir . '/nexmo/client/src/Application/Client.php', - 'Nexmo\\Application\\Filter' => $vendorDir . '/nexmo/client/src/Application/Filter.php', - 'Nexmo\\Application\\MessagesConfig' => $vendorDir . '/nexmo/client/src/Application/MessagesConfig.php', - 'Nexmo\\Application\\RtcConfig' => $vendorDir . '/nexmo/client/src/Application/RtcConfig.php', - 'Nexmo\\Application\\VbcConfig' => $vendorDir . '/nexmo/client/src/Application/VbcConfig.php', - 'Nexmo\\Application\\VoiceConfig' => $vendorDir . '/nexmo/client/src/Application/VoiceConfig.php', - 'Nexmo\\Application\\Webhook' => $vendorDir . '/nexmo/client/src/Application/Webhook.php', - 'Nexmo\\Call\\Call' => $vendorDir . '/nexmo/client/src/Call/Call.php', - 'Nexmo\\Call\\Collection' => $vendorDir . '/nexmo/client/src/Call/Collection.php', - 'Nexmo\\Call\\Dtmf' => $vendorDir . '/nexmo/client/src/Call/Dtmf.php', - 'Nexmo\\Call\\Earmuff' => $vendorDir . '/nexmo/client/src/Call/Earmuff.php', - 'Nexmo\\Call\\Endpoint' => $vendorDir . '/nexmo/client/src/Call/Endpoint.php', - 'Nexmo\\Call\\Event' => $vendorDir . '/nexmo/client/src/Call/Event.php', - 'Nexmo\\Call\\Filter' => $vendorDir . '/nexmo/client/src/Call/Filter.php', - 'Nexmo\\Call\\Hangup' => $vendorDir . '/nexmo/client/src/Call/Hangup.php', - 'Nexmo\\Call\\Mute' => $vendorDir . '/nexmo/client/src/Call/Mute.php', - 'Nexmo\\Call\\Stream' => $vendorDir . '/nexmo/client/src/Call/Stream.php', - 'Nexmo\\Call\\Talk' => $vendorDir . '/nexmo/client/src/Call/Talk.php', - 'Nexmo\\Call\\Transfer' => $vendorDir . '/nexmo/client/src/Call/Transfer.php', - 'Nexmo\\Call\\Unearmuff' => $vendorDir . '/nexmo/client/src/Call/Unearmuff.php', - 'Nexmo\\Call\\Unmute' => $vendorDir . '/nexmo/client/src/Call/Unmute.php', - 'Nexmo\\Call\\Webhook' => $vendorDir . '/nexmo/client/src/Call/Webhook.php', - 'Nexmo\\Client' => $vendorDir . '/nexmo/client/src/Client.php', - 'Nexmo\\Client\\Callback\\Callback' => $vendorDir . '/nexmo/client/src/Client/Callback/Callback.php', - 'Nexmo\\Client\\Callback\\CallbackInterface' => $vendorDir . '/nexmo/client/src/Client/Callback/CallbackInterface.php', - 'Nexmo\\Client\\ClientAwareInterface' => $vendorDir . '/nexmo/client/src/Client/ClientAwareInterface.php', - 'Nexmo\\Client\\ClientAwareTrait' => $vendorDir . '/nexmo/client/src/Client/ClientAwareTrait.php', - 'Nexmo\\Client\\Credentials\\AbstractCredentials' => $vendorDir . '/nexmo/client/src/Client/Credentials/AbstractCredentials.php', - 'Nexmo\\Client\\Credentials\\Basic' => $vendorDir . '/nexmo/client/src/Client/Credentials/Basic.php', - 'Nexmo\\Client\\Credentials\\Container' => $vendorDir . '/nexmo/client/src/Client/Credentials/Container.php', - 'Nexmo\\Client\\Credentials\\CredentialsInterface' => $vendorDir . '/nexmo/client/src/Client/Credentials/CredentialsInterface.php', - 'Nexmo\\Client\\Credentials\\Keypair' => $vendorDir . '/nexmo/client/src/Client/Credentials/Keypair.php', - 'Nexmo\\Client\\Credentials\\OAuth' => $vendorDir . '/nexmo/client/src/Client/Credentials/OAuth.php', - 'Nexmo\\Client\\Credentials\\SignatureSecret' => $vendorDir . '/nexmo/client/src/Client/Credentials/SignatureSecret.php', - 'Nexmo\\Client\\Exception\\Exception' => $vendorDir . '/nexmo/client/src/Client/Exception/Exception.php', - 'Nexmo\\Client\\Exception\\Request' => $vendorDir . '/nexmo/client/src/Client/Exception/Request.php', - 'Nexmo\\Client\\Exception\\Server' => $vendorDir . '/nexmo/client/src/Client/Exception/Server.php', - 'Nexmo\\Client\\Exception\\Transport' => $vendorDir . '/nexmo/client/src/Client/Exception/Transport.php', - 'Nexmo\\Client\\Exception\\Validation' => $vendorDir . '/nexmo/client/src/Client/Exception/Validation.php', - 'Nexmo\\Client\\Factory\\FactoryInterface' => $vendorDir . '/nexmo/client/src/Client/Factory/FactoryInterface.php', - 'Nexmo\\Client\\Factory\\MapFactory' => $vendorDir . '/nexmo/client/src/Client/Factory/MapFactory.php', - 'Nexmo\\Client\\Request\\AbstractRequest' => $vendorDir . '/nexmo/client/src/Client/Request/AbstractRequest.php', - 'Nexmo\\Client\\Request\\RequestInterface' => $vendorDir . '/nexmo/client/src/Client/Request/RequestInterface.php', - 'Nexmo\\Client\\Request\\WrapResponseInterface' => $vendorDir . '/nexmo/client/src/Client/Request/WrapResponseInterface.php', - 'Nexmo\\Client\\Response\\AbstractResponse' => $vendorDir . '/nexmo/client/src/Client/Response/AbstractResponse.php', - 'Nexmo\\Client\\Response\\Error' => $vendorDir . '/nexmo/client/src/Client/Response/Error.php', - 'Nexmo\\Client\\Response\\Response' => $vendorDir . '/nexmo/client/src/Client/Response/Response.php', - 'Nexmo\\Client\\Response\\ResponseInterface' => $vendorDir . '/nexmo/client/src/Client/Response/ResponseInterface.php', - 'Nexmo\\Client\\Signature' => $vendorDir . '/nexmo/client/src/Client/Signature.php', - 'Nexmo\\Conversations\\Collection' => $vendorDir . '/nexmo/client/src/Conversations/Collection.php', - 'Nexmo\\Conversations\\Conversation' => $vendorDir . '/nexmo/client/src/Conversations/Conversation.php', - 'Nexmo\\Conversion\\Client' => $vendorDir . '/nexmo/client/src/Conversion/Client.php', - 'Nexmo\\Entity\\ArrayAccessTrait' => $vendorDir . '/nexmo/client/src/Entity/ArrayAccessTrait.php', - 'Nexmo\\Entity\\CollectionAwareInterface' => $vendorDir . '/nexmo/client/src/Entity/CollectionAwareInterface.php', - 'Nexmo\\Entity\\CollectionAwareTrait' => $vendorDir . '/nexmo/client/src/Entity/CollectionAwareTrait.php', - 'Nexmo\\Entity\\CollectionInterface' => $vendorDir . '/nexmo/client/src/Entity/CollectionInterface.php', - 'Nexmo\\Entity\\CollectionTrait' => $vendorDir . '/nexmo/client/src/Entity/CollectionTrait.php', - 'Nexmo\\Entity\\EmptyFilter' => $vendorDir . '/nexmo/client/src/Entity/EmptyFilter.php', - 'Nexmo\\Entity\\EntityInterface' => $vendorDir . '/nexmo/client/src/Entity/EntityInterface.php', - 'Nexmo\\Entity\\FilterInterface' => $vendorDir . '/nexmo/client/src/Entity/FilterInterface.php', - 'Nexmo\\Entity\\HasEntityTrait' => $vendorDir . '/nexmo/client/src/Entity/HasEntityTrait.php', - 'Nexmo\\Entity\\JsonResponseTrait' => $vendorDir . '/nexmo/client/src/Entity/JsonResponseTrait.php', - 'Nexmo\\Entity\\JsonSerializableInterface' => $vendorDir . '/nexmo/client/src/Entity/JsonSerializableInterface.php', - 'Nexmo\\Entity\\JsonSerializableTrait' => $vendorDir . '/nexmo/client/src/Entity/JsonSerializableTrait.php', - 'Nexmo\\Entity\\JsonUnserializableInterface' => $vendorDir . '/nexmo/client/src/Entity/JsonUnserializableInterface.php', - 'Nexmo\\Entity\\ModernCollectionTrait' => $vendorDir . '/nexmo/client/src/Entity/ModernCollectionTrait.php', - 'Nexmo\\Entity\\NoRequestResponseTrait' => $vendorDir . '/nexmo/client/src/Entity/NoRequestResponseTrait.php', - 'Nexmo\\Entity\\Psr7Trait' => $vendorDir . '/nexmo/client/src/Entity/Psr7Trait.php', - 'Nexmo\\Entity\\RequestArrayTrait' => $vendorDir . '/nexmo/client/src/Entity/RequestArrayTrait.php', - 'Nexmo\\Insights\\Advanced' => $vendorDir . '/nexmo/client/src/Insights/Advanced.php', - 'Nexmo\\Insights\\AdvancedCnam' => $vendorDir . '/nexmo/client/src/Insights/AdvancedCnam.php', - 'Nexmo\\Insights\\Basic' => $vendorDir . '/nexmo/client/src/Insights/Basic.php', - 'Nexmo\\Insights\\Client' => $vendorDir . '/nexmo/client/src/Insights/Client.php', - 'Nexmo\\Insights\\CnamTrait' => $vendorDir . '/nexmo/client/src/Insights/CnamTrait.php', - 'Nexmo\\Insights\\Standard' => $vendorDir . '/nexmo/client/src/Insights/Standard.php', - 'Nexmo\\Insights\\StandardCnam' => $vendorDir . '/nexmo/client/src/Insights/StandardCnam.php', - 'Nexmo\\InvalidResponseException' => $vendorDir . '/nexmo/client/src/InvalidResponseException.php', - 'Nexmo\\Message\\AutoDetect' => $vendorDir . '/nexmo/client/src/Message/AutoDetect.php', - 'Nexmo\\Message\\Binary' => $vendorDir . '/nexmo/client/src/Message/Binary.php', - 'Nexmo\\Message\\Callback\\Receipt' => $vendorDir . '/nexmo/client/src/Message/Callback/Receipt.php', - 'Nexmo\\Message\\Client' => $vendorDir . '/nexmo/client/src/Message/Client.php', - 'Nexmo\\Message\\CollectionTrait' => $vendorDir . '/nexmo/client/src/Message/CollectionTrait.php', - 'Nexmo\\Message\\EncodingDetector' => $vendorDir . '/nexmo/client/src/Message/EncodingDetector.php', - 'Nexmo\\Message\\InboundMessage' => $vendorDir . '/nexmo/client/src/Message/InboundMessage.php', - 'Nexmo\\Message\\Message' => $vendorDir . '/nexmo/client/src/Message/Message.php', - 'Nexmo\\Message\\MessageInterface' => $vendorDir . '/nexmo/client/src/Message/MessageInterface.php', - 'Nexmo\\Message\\Query' => $vendorDir . '/nexmo/client/src/Message/Query.php', - 'Nexmo\\Message\\Response\\Collection' => $vendorDir . '/nexmo/client/src/Message/Response/Collection.php', - 'Nexmo\\Message\\Response\\Message' => $vendorDir . '/nexmo/client/src/Message/Response/Message.php', - 'Nexmo\\Message\\Shortcode' => $vendorDir . '/nexmo/client/src/Message/Shortcode.php', - 'Nexmo\\Message\\Shortcode\\Alert' => $vendorDir . '/nexmo/client/src/Message/Shortcode/Alert.php', - 'Nexmo\\Message\\Shortcode\\Marketing' => $vendorDir . '/nexmo/client/src/Message/Shortcode/Marketing.php', - 'Nexmo\\Message\\Shortcode\\TwoFactor' => $vendorDir . '/nexmo/client/src/Message/Shortcode/TwoFactor.php', - 'Nexmo\\Message\\Text' => $vendorDir . '/nexmo/client/src/Message/Text.php', - 'Nexmo\\Message\\Unicode' => $vendorDir . '/nexmo/client/src/Message/Unicode.php', - 'Nexmo\\Message\\Vcal' => $vendorDir . '/nexmo/client/src/Message/Vcal.php', - 'Nexmo\\Message\\Vcard' => $vendorDir . '/nexmo/client/src/Message/Vcard.php', - 'Nexmo\\Message\\Wap' => $vendorDir . '/nexmo/client/src/Message/Wap.php', - 'Nexmo\\Network' => $vendorDir . '/nexmo/client/src/Network.php', - 'Nexmo\\Network\\Number\\Callback' => $vendorDir . '/nexmo/client/src/Network/Number/Callback.php', - 'Nexmo\\Network\\Number\\Request' => $vendorDir . '/nexmo/client/src/Network/Number/Request.php', - 'Nexmo\\Network\\Number\\Response' => $vendorDir . '/nexmo/client/src/Network/Number/Response.php', - 'Nexmo\\Numbers\\Client' => $vendorDir . '/nexmo/client/src/Numbers/Client.php', - 'Nexmo\\Numbers\\Number' => $vendorDir . '/nexmo/client/src/Numbers/Number.php', - 'Nexmo\\Redact\\Client' => $vendorDir . '/nexmo/client/src/Redact/Client.php', - 'Nexmo\\Response' => $vendorDir . '/nexmo/client/src/Response.php', - 'Nexmo\\Response\\Message' => $vendorDir . '/nexmo/client/src/Response/Message.php', - 'Nexmo\\User\\Collection' => $vendorDir . '/nexmo/client/src/User/Collection.php', - 'Nexmo\\User\\User' => $vendorDir . '/nexmo/client/src/User/User.php', - 'Nexmo\\Verify\\Check' => $vendorDir . '/nexmo/client/src/Verify/Check.php', - 'Nexmo\\Verify\\Client' => $vendorDir . '/nexmo/client/src/Verify/Client.php', - 'Nexmo\\Verify\\Verification' => $vendorDir . '/nexmo/client/src/Verify/Verification.php', - 'Nexmo\\Verify\\VerificationInterface' => $vendorDir . '/nexmo/client/src/Verify/VerificationInterface.php', - 'Nexmo\\Voice\\Call\\Call' => $vendorDir . '/nexmo/client/src/Voice/Call/Call.php', - 'Nexmo\\Voice\\Call\\Inbound' => $vendorDir . '/nexmo/client/src/Voice/Call/Inbound.php', - 'Nexmo\\Voice\\Message\\Callback' => $vendorDir . '/nexmo/client/src/Voice/Message/Callback.php', - 'Nexmo\\Voice\\Message\\Message' => $vendorDir . '/nexmo/client/src/Voice/Message/Message.php', + 'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', 'Opis\\Closure\\Analyzer' => $vendorDir . '/opis/closure/src/Analyzer.php', 'Opis\\Closure\\ClosureContext' => $vendorDir . '/opis/closure/src/ClosureContext.php', 'Opis\\Closure\\ClosureScope' => $vendorDir . '/opis/closure/src/ClosureScope.php', @@ -2760,7 +3273,6 @@ return array( 'PHP_Token_XOR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_YIELD' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_YIELD_FROM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'Parsedown' => $vendorDir . '/erusev/parsedown/Parsedown.php', 'PharIo\\Manifest\\Application' => $vendorDir . '/phar-io/manifest/src/values/Application.php', 'PharIo\\Manifest\\ApplicationName' => $vendorDir . '/phar-io/manifest/src/values/ApplicationName.php', 'PharIo\\Manifest\\Author' => $vendorDir . '/phar-io/manifest/src/values/Author.php', @@ -2827,11 +3339,18 @@ return array( 'PharIo\\Version\\VersionConstraintParser' => $vendorDir . '/phar-io/version/src/VersionConstraintParser.php', 'PharIo\\Version\\VersionConstraintValue' => $vendorDir . '/phar-io/version/src/VersionConstraintValue.php', 'PharIo\\Version\\VersionNumber' => $vendorDir . '/phar-io/version/src/VersionNumber.php', + 'PhpOption\\LazyOption' => $vendorDir . '/phpoption/phpoption/src/PhpOption/LazyOption.php', + 'PhpOption\\None' => $vendorDir . '/phpoption/phpoption/src/PhpOption/None.php', + 'PhpOption\\Option' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Option.php', + 'PhpOption\\Some' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Some.php', 'PhpParser\\Builder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder.php', 'PhpParser\\BuilderFactory' => $vendorDir . '/nikic/php-parser/lib/PhpParser/BuilderFactory.php', 'PhpParser\\BuilderHelpers' => $vendorDir . '/nikic/php-parser/lib/PhpParser/BuilderHelpers.php', + 'PhpParser\\Builder\\ClassConst' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php', 'PhpParser\\Builder\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Class_.php', 'PhpParser\\Builder\\Declaration' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Declaration.php', + 'PhpParser\\Builder\\EnumCase' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php', + 'PhpParser\\Builder\\Enum_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Enum_.php', 'PhpParser\\Builder\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php', 'PhpParser\\Builder\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Function_.php', 'PhpParser\\Builder\\Interface_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Interface_.php', @@ -2858,9 +3377,19 @@ return array( 'PhpParser\\JsonDecoder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php', 'PhpParser\\Lexer' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer.php', 'PhpParser\\Lexer\\Emulative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php', + 'PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php', 'PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\EnumTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\ExplicitOctalEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\FlexibleDocStringEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php', 'PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\TokenEmulatorInterface' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php', + 'PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\ReadonlyTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php', 'PhpParser\\NameContext' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NameContext.php', 'PhpParser\\Node' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node.php', 'PhpParser\\NodeAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php', @@ -2874,7 +3403,12 @@ return array( 'PhpParser\\NodeVisitor\\FindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php', 'PhpParser\\NodeVisitor\\FirstFindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php', 'PhpParser\\NodeVisitor\\NameResolver' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php', + 'PhpParser\\NodeVisitor\\NodeConnectingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php', + 'PhpParser\\NodeVisitor\\ParentConnectingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php', 'PhpParser\\Node\\Arg' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Arg.php', + 'PhpParser\\Node\\Attribute' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Attribute.php', + 'PhpParser\\Node\\AttributeGroup' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php', + 'PhpParser\\Node\\ComplexType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/ComplexType.php', 'PhpParser\\Node\\Const_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Const_.php', 'PhpParser\\Node\\Expr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr.php', 'PhpParser\\Node\\Expr\\ArrayDimFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php', @@ -2927,6 +3461,7 @@ return array( 'PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php', 'PhpParser\\Node\\Expr\\BitwiseNot' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php', 'PhpParser\\Node\\Expr\\BooleanNot' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php', + 'PhpParser\\Node\\Expr\\CallLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php', 'PhpParser\\Node\\Expr\\Cast' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php', 'PhpParser\\Node\\Expr\\Cast\\Array_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php', 'PhpParser\\Node\\Expr\\Cast\\Bool_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php', @@ -2950,8 +3485,11 @@ return array( 'PhpParser\\Node\\Expr\\Instanceof_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php', 'PhpParser\\Node\\Expr\\Isset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php', 'PhpParser\\Node\\Expr\\List_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php', + 'PhpParser\\Node\\Expr\\Match_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php', 'PhpParser\\Node\\Expr\\MethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php', 'PhpParser\\Node\\Expr\\New_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php', + 'PhpParser\\Node\\Expr\\NullsafeMethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php', + 'PhpParser\\Node\\Expr\\NullsafePropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php', 'PhpParser\\Node\\Expr\\PostDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php', 'PhpParser\\Node\\Expr\\PostInc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php', 'PhpParser\\Node\\Expr\\PreDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php', @@ -2962,6 +3500,7 @@ return array( 'PhpParser\\Node\\Expr\\StaticCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php', 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php', 'PhpParser\\Node\\Expr\\Ternary' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php', + 'PhpParser\\Node\\Expr\\Throw_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php', 'PhpParser\\Node\\Expr\\UnaryMinus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php', 'PhpParser\\Node\\Expr\\UnaryPlus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php', 'PhpParser\\Node\\Expr\\Variable' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php', @@ -2969,6 +3508,8 @@ return array( 'PhpParser\\Node\\Expr\\Yield_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php', 'PhpParser\\Node\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php', 'PhpParser\\Node\\Identifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php', + 'PhpParser\\Node\\IntersectionType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php', + 'PhpParser\\Node\\MatchArm' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/MatchArm.php', 'PhpParser\\Node\\Name' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name.php', 'PhpParser\\Node\\Name\\FullyQualified' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php', 'PhpParser\\Node\\Name\\Relative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php', @@ -3005,6 +3546,8 @@ return array( 'PhpParser\\Node\\Stmt\\Echo_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php', 'PhpParser\\Node\\Stmt\\ElseIf_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php', 'PhpParser\\Node\\Stmt\\Else_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php', + 'PhpParser\\Node\\Stmt\\EnumCase' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php', + 'PhpParser\\Node\\Stmt\\Enum_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php', 'PhpParser\\Node\\Stmt\\Expression' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php', 'PhpParser\\Node\\Stmt\\Finally_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php', 'PhpParser\\Node\\Stmt\\For_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php', @@ -3037,7 +3580,9 @@ return array( 'PhpParser\\Node\\Stmt\\UseUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php', 'PhpParser\\Node\\Stmt\\Use_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php', 'PhpParser\\Node\\Stmt\\While_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php', + 'PhpParser\\Node\\UnionType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php', 'PhpParser\\Node\\VarLikeIdentifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php', + 'PhpParser\\Node\\VariadicPlaceholder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php', 'PhpParser\\Parser' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser.php', 'PhpParser\\ParserAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php', 'PhpParser\\ParserFactory' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ParserFactory.php', @@ -3047,6 +3592,7 @@ return array( 'PhpParser\\Parser\\Tokens' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Tokens.php', 'PhpParser\\PrettyPrinterAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php', 'PhpParser\\PrettyPrinter\\Standard' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php', + 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'Prophecy\\Argument' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument.php', 'Prophecy\\Argument\\ArgumentsWildcard' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/ArgumentsWildcard.php', 'Prophecy\\Argument\\Token\\AnyValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValueToken.php', @@ -3143,6 +3689,13 @@ return array( 'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php', 'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php', 'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php', + 'Psr\\EventDispatcher\\EventDispatcherInterface' => $vendorDir . '/psr/event-dispatcher/src/EventDispatcherInterface.php', + 'Psr\\EventDispatcher\\ListenerProviderInterface' => $vendorDir . '/psr/event-dispatcher/src/ListenerProviderInterface.php', + 'Psr\\EventDispatcher\\StoppableEventInterface' => $vendorDir . '/psr/event-dispatcher/src/StoppableEventInterface.php', + 'Psr\\Http\\Client\\ClientExceptionInterface' => $vendorDir . '/psr/http-client/src/ClientExceptionInterface.php', + 'Psr\\Http\\Client\\ClientInterface' => $vendorDir . '/psr/http-client/src/ClientInterface.php', + 'Psr\\Http\\Client\\NetworkExceptionInterface' => $vendorDir . '/psr/http-client/src/NetworkExceptionInterface.php', + 'Psr\\Http\\Client\\RequestExceptionInterface' => $vendorDir . '/psr/http-client/src/RequestExceptionInterface.php', 'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php', 'Psr\\Http\\Message\\RequestFactoryInterface' => $vendorDir . '/psr/http-factory/src/RequestFactoryInterface.php', 'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php', @@ -3164,7 +3717,7 @@ return array( 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php', 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php', 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php', - 'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/DummyTest.php', 'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', 'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php', 'Psr\\SimpleCache\\CacheException' => $vendorDir . '/psr/simple-cache/src/CacheException.php', @@ -3176,14 +3729,16 @@ return array( 'Psy\\CodeCleaner\\CallTimePassByReferencePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php', 'Psy\\CodeCleaner\\CalledClassPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/CalledClassPass.php', 'Psy\\CodeCleaner\\CodeCleanerPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/CodeCleanerPass.php', + 'Psy\\CodeCleaner\\EmptyArrayDimFetchPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php', 'Psy\\CodeCleaner\\ExitPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ExitPass.php', 'Psy\\CodeCleaner\\FinalClassPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/FinalClassPass.php', 'Psy\\CodeCleaner\\FunctionContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/FunctionContextPass.php', 'Psy\\CodeCleaner\\FunctionReturnInWriteContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php', 'Psy\\CodeCleaner\\ImplicitReturnPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php', 'Psy\\CodeCleaner\\InstanceOfPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/InstanceOfPass.php', + 'Psy\\CodeCleaner\\IssetPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/IssetPass.php', + 'Psy\\CodeCleaner\\LabelContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LabelContextPass.php', 'Psy\\CodeCleaner\\LeavePsyshAlonePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php', - 'Psy\\CodeCleaner\\LegacyEmptyPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php', 'Psy\\CodeCleaner\\ListPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ListPass.php', 'Psy\\CodeCleaner\\LoopContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LoopContextPass.php', 'Psy\\CodeCleaner\\MagicConstantsPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/MagicConstantsPass.php', @@ -3192,10 +3747,10 @@ return array( 'Psy\\CodeCleaner\\NoReturnValue' => $vendorDir . '/psy/psysh/src/CodeCleaner/NoReturnValue.php', 'Psy\\CodeCleaner\\PassableByReferencePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/PassableByReferencePass.php', 'Psy\\CodeCleaner\\RequirePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/RequirePass.php', + 'Psy\\CodeCleaner\\ReturnTypePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ReturnTypePass.php', 'Psy\\CodeCleaner\\StrictTypesPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/StrictTypesPass.php', 'Psy\\CodeCleaner\\UseStatementPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/UseStatementPass.php', 'Psy\\CodeCleaner\\ValidClassNamePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ValidClassNamePass.php', - 'Psy\\CodeCleaner\\ValidConstantPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ValidConstantPass.php', 'Psy\\CodeCleaner\\ValidConstructorPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ValidConstructorPass.php', 'Psy\\CodeCleaner\\ValidFunctionNamePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php', 'Psy\\Command\\BufferCommand' => $vendorDir . '/psy/psysh/src/Command/BufferCommand.php', @@ -3214,10 +3769,8 @@ return array( 'Psy\\Command\\ListCommand\\Enumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/Enumerator.php', 'Psy\\Command\\ListCommand\\FunctionEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php', 'Psy\\Command\\ListCommand\\GlobalVariableEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php', - 'Psy\\Command\\ListCommand\\InterfaceEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php', 'Psy\\Command\\ListCommand\\MethodEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/MethodEnumerator.php', 'Psy\\Command\\ListCommand\\PropertyEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php', - 'Psy\\Command\\ListCommand\\TraitEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/TraitEnumerator.php', 'Psy\\Command\\ListCommand\\VariableEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/VariableEnumerator.php', 'Psy\\Command\\ParseCommand' => $vendorDir . '/psy/psysh/src/Command/ParseCommand.php', 'Psy\\Command\\PsyVersionCommand' => $vendorDir . '/psy/psysh/src/Command/PsyVersionCommand.php', @@ -3235,6 +3788,7 @@ return array( 'Psy\\ConsoleColorFactory' => $vendorDir . '/psy/psysh/src/ConsoleColorFactory.php', 'Psy\\Context' => $vendorDir . '/psy/psysh/src/Context.php', 'Psy\\ContextAware' => $vendorDir . '/psy/psysh/src/ContextAware.php', + 'Psy\\EnvInterface' => $vendorDir . '/psy/psysh/src/EnvInterface.php', 'Psy\\Exception\\BreakException' => $vendorDir . '/psy/psysh/src/Exception/BreakException.php', 'Psy\\Exception\\DeprecatedException' => $vendorDir . '/psy/psysh/src/Exception/DeprecatedException.php', 'Psy\\Exception\\ErrorException' => $vendorDir . '/psy/psysh/src/Exception/ErrorException.php', @@ -3244,8 +3798,8 @@ return array( 'Psy\\Exception\\RuntimeException' => $vendorDir . '/psy/psysh/src/Exception/RuntimeException.php', 'Psy\\Exception\\ThrowUpException' => $vendorDir . '/psy/psysh/src/Exception/ThrowUpException.php', 'Psy\\Exception\\TypeErrorException' => $vendorDir . '/psy/psysh/src/Exception/TypeErrorException.php', + 'Psy\\Exception\\UnexpectedTargetException' => $vendorDir . '/psy/psysh/src/Exception/UnexpectedTargetException.php', 'Psy\\ExecutionClosure' => $vendorDir . '/psy/psysh/src/ExecutionClosure.php', - 'Psy\\ExecutionLoop' => $vendorDir . '/psy/psysh/src/ExecutionLoop.php', 'Psy\\ExecutionLoopClosure' => $vendorDir . '/psy/psysh/src/ExecutionLoopClosure.php', 'Psy\\ExecutionLoop\\AbstractListener' => $vendorDir . '/psy/psysh/src/ExecutionLoop/AbstractListener.php', 'Psy\\ExecutionLoop\\Listener' => $vendorDir . '/psy/psysh/src/ExecutionLoop/Listener.php', @@ -3254,7 +3808,9 @@ return array( 'Psy\\Formatter\\CodeFormatter' => $vendorDir . '/psy/psysh/src/Formatter/CodeFormatter.php', 'Psy\\Formatter\\DocblockFormatter' => $vendorDir . '/psy/psysh/src/Formatter/DocblockFormatter.php', 'Psy\\Formatter\\Formatter' => $vendorDir . '/psy/psysh/src/Formatter/Formatter.php', + 'Psy\\Formatter\\ReflectorFormatter' => $vendorDir . '/psy/psysh/src/Formatter/ReflectorFormatter.php', 'Psy\\Formatter\\SignatureFormatter' => $vendorDir . '/psy/psysh/src/Formatter/SignatureFormatter.php', + 'Psy\\Formatter\\TraceFormatter' => $vendorDir . '/psy/psysh/src/Formatter/TraceFormatter.php', 'Psy\\Input\\CodeArgument' => $vendorDir . '/psy/psysh/src/Input/CodeArgument.php', 'Psy\\Input\\FilterOptions' => $vendorDir . '/psy/psysh/src/Input/FilterOptions.php', 'Psy\\Input\\ShellInput' => $vendorDir . '/psy/psysh/src/Input/ShellInput.php', @@ -3274,9 +3830,11 @@ return array( 'Psy\\Reflection\\ReflectionConstant_' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionConstant_.php', 'Psy\\Reflection\\ReflectionLanguageConstruct' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php', 'Psy\\Reflection\\ReflectionLanguageConstructParameter' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php', + 'Psy\\Reflection\\ReflectionNamespace' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionNamespace.php', 'Psy\\Shell' => $vendorDir . '/psy/psysh/src/Shell.php', 'Psy\\Sudo' => $vendorDir . '/psy/psysh/src/Sudo.php', 'Psy\\Sudo\\SudoVisitor' => $vendorDir . '/psy/psysh/src/Sudo/SudoVisitor.php', + 'Psy\\SuperglobalsEnv' => $vendorDir . '/psy/psysh/src/SuperglobalsEnv.php', 'Psy\\TabCompletion\\AutoCompleter' => $vendorDir . '/psy/psysh/src/TabCompletion/AutoCompleter.php', 'Psy\\TabCompletion\\Matcher\\AbstractContextAwareMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php', 'Psy\\TabCompletion\\Matcher\\AbstractDefaultParametersMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php', @@ -3308,9 +3866,40 @@ return array( 'Psy\\VersionUpdater\\GitHubChecker' => $vendorDir . '/psy/psysh/src/VersionUpdater/GitHubChecker.php', 'Psy\\VersionUpdater\\IntervalChecker' => $vendorDir . '/psy/psysh/src/VersionUpdater/IntervalChecker.php', 'Psy\\VersionUpdater\\NoopChecker' => $vendorDir . '/psy/psysh/src/VersionUpdater/NoopChecker.php', + 'Ramsey\\Collection\\AbstractArray' => $vendorDir . '/ramsey/collection/src/AbstractArray.php', + 'Ramsey\\Collection\\AbstractCollection' => $vendorDir . '/ramsey/collection/src/AbstractCollection.php', + 'Ramsey\\Collection\\AbstractSet' => $vendorDir . '/ramsey/collection/src/AbstractSet.php', + 'Ramsey\\Collection\\ArrayInterface' => $vendorDir . '/ramsey/collection/src/ArrayInterface.php', + 'Ramsey\\Collection\\Collection' => $vendorDir . '/ramsey/collection/src/Collection.php', + 'Ramsey\\Collection\\CollectionInterface' => $vendorDir . '/ramsey/collection/src/CollectionInterface.php', + 'Ramsey\\Collection\\DoubleEndedQueue' => $vendorDir . '/ramsey/collection/src/DoubleEndedQueue.php', + 'Ramsey\\Collection\\DoubleEndedQueueInterface' => $vendorDir . '/ramsey/collection/src/DoubleEndedQueueInterface.php', + 'Ramsey\\Collection\\Exception\\CollectionMismatchException' => $vendorDir . '/ramsey/collection/src/Exception/CollectionMismatchException.php', + 'Ramsey\\Collection\\Exception\\InvalidArgumentException' => $vendorDir . '/ramsey/collection/src/Exception/InvalidArgumentException.php', + 'Ramsey\\Collection\\Exception\\InvalidSortOrderException' => $vendorDir . '/ramsey/collection/src/Exception/InvalidSortOrderException.php', + 'Ramsey\\Collection\\Exception\\NoSuchElementException' => $vendorDir . '/ramsey/collection/src/Exception/NoSuchElementException.php', + 'Ramsey\\Collection\\Exception\\OutOfBoundsException' => $vendorDir . '/ramsey/collection/src/Exception/OutOfBoundsException.php', + 'Ramsey\\Collection\\Exception\\UnsupportedOperationException' => $vendorDir . '/ramsey/collection/src/Exception/UnsupportedOperationException.php', + 'Ramsey\\Collection\\Exception\\ValueExtractionException' => $vendorDir . '/ramsey/collection/src/Exception/ValueExtractionException.php', + 'Ramsey\\Collection\\GenericArray' => $vendorDir . '/ramsey/collection/src/GenericArray.php', + 'Ramsey\\Collection\\Map\\AbstractMap' => $vendorDir . '/ramsey/collection/src/Map/AbstractMap.php', + 'Ramsey\\Collection\\Map\\AbstractTypedMap' => $vendorDir . '/ramsey/collection/src/Map/AbstractTypedMap.php', + 'Ramsey\\Collection\\Map\\AssociativeArrayMap' => $vendorDir . '/ramsey/collection/src/Map/AssociativeArrayMap.php', + 'Ramsey\\Collection\\Map\\MapInterface' => $vendorDir . '/ramsey/collection/src/Map/MapInterface.php', + 'Ramsey\\Collection\\Map\\NamedParameterMap' => $vendorDir . '/ramsey/collection/src/Map/NamedParameterMap.php', + 'Ramsey\\Collection\\Map\\TypedMap' => $vendorDir . '/ramsey/collection/src/Map/TypedMap.php', + 'Ramsey\\Collection\\Map\\TypedMapInterface' => $vendorDir . '/ramsey/collection/src/Map/TypedMapInterface.php', + 'Ramsey\\Collection\\Queue' => $vendorDir . '/ramsey/collection/src/Queue.php', + 'Ramsey\\Collection\\QueueInterface' => $vendorDir . '/ramsey/collection/src/QueueInterface.php', + 'Ramsey\\Collection\\Set' => $vendorDir . '/ramsey/collection/src/Set.php', + 'Ramsey\\Collection\\Tool\\TypeTrait' => $vendorDir . '/ramsey/collection/src/Tool/TypeTrait.php', + 'Ramsey\\Collection\\Tool\\ValueExtractorTrait' => $vendorDir . '/ramsey/collection/src/Tool/ValueExtractorTrait.php', + 'Ramsey\\Collection\\Tool\\ValueToStringTrait' => $vendorDir . '/ramsey/collection/src/Tool/ValueToStringTrait.php', 'Ramsey\\Uuid\\BinaryUtils' => $vendorDir . '/ramsey/uuid/src/BinaryUtils.php', + 'Ramsey\\Uuid\\Builder\\BuilderCollection' => $vendorDir . '/ramsey/uuid/src/Builder/BuilderCollection.php', 'Ramsey\\Uuid\\Builder\\DefaultUuidBuilder' => $vendorDir . '/ramsey/uuid/src/Builder/DefaultUuidBuilder.php', 'Ramsey\\Uuid\\Builder\\DegradedUuidBuilder' => $vendorDir . '/ramsey/uuid/src/Builder/DegradedUuidBuilder.php', + 'Ramsey\\Uuid\\Builder\\FallbackBuilder' => $vendorDir . '/ramsey/uuid/src/Builder/FallbackBuilder.php', 'Ramsey\\Uuid\\Builder\\UuidBuilderInterface' => $vendorDir . '/ramsey/uuid/src/Builder/UuidBuilderInterface.php', 'Ramsey\\Uuid\\Codec\\CodecInterface' => $vendorDir . '/ramsey/uuid/src/Codec/CodecInterface.php', 'Ramsey\\Uuid\\Codec\\GuidStringCodec' => $vendorDir . '/ramsey/uuid/src/Codec/GuidStringCodec.php', @@ -3321,39 +3910,96 @@ return array( 'Ramsey\\Uuid\\Converter\\NumberConverterInterface' => $vendorDir . '/ramsey/uuid/src/Converter/NumberConverterInterface.php', 'Ramsey\\Uuid\\Converter\\Number\\BigNumberConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Number/BigNumberConverter.php', 'Ramsey\\Uuid\\Converter\\Number\\DegradedNumberConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php', + 'Ramsey\\Uuid\\Converter\\Number\\GenericNumberConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Number/GenericNumberConverter.php', 'Ramsey\\Uuid\\Converter\\TimeConverterInterface' => $vendorDir . '/ramsey/uuid/src/Converter/TimeConverterInterface.php', 'Ramsey\\Uuid\\Converter\\Time\\BigNumberTimeConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php', 'Ramsey\\Uuid\\Converter\\Time\\DegradedTimeConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php', + 'Ramsey\\Uuid\\Converter\\Time\\GenericTimeConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Time/GenericTimeConverter.php', 'Ramsey\\Uuid\\Converter\\Time\\PhpTimeConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php', 'Ramsey\\Uuid\\DegradedUuid' => $vendorDir . '/ramsey/uuid/src/DegradedUuid.php', + 'Ramsey\\Uuid\\DeprecatedUuidInterface' => $vendorDir . '/ramsey/uuid/src/DeprecatedUuidInterface.php', + 'Ramsey\\Uuid\\DeprecatedUuidMethodsTrait' => $vendorDir . '/ramsey/uuid/src/DeprecatedUuidMethodsTrait.php', + 'Ramsey\\Uuid\\Exception\\BuilderNotFoundException' => $vendorDir . '/ramsey/uuid/src/Exception/BuilderNotFoundException.php', + 'Ramsey\\Uuid\\Exception\\DateTimeException' => $vendorDir . '/ramsey/uuid/src/Exception/DateTimeException.php', + 'Ramsey\\Uuid\\Exception\\DceSecurityException' => $vendorDir . '/ramsey/uuid/src/Exception/DceSecurityException.php', + 'Ramsey\\Uuid\\Exception\\InvalidArgumentException' => $vendorDir . '/ramsey/uuid/src/Exception/InvalidArgumentException.php', + 'Ramsey\\Uuid\\Exception\\InvalidBytesException' => $vendorDir . '/ramsey/uuid/src/Exception/InvalidBytesException.php', 'Ramsey\\Uuid\\Exception\\InvalidUuidStringException' => $vendorDir . '/ramsey/uuid/src/Exception/InvalidUuidStringException.php', - 'Ramsey\\Uuid\\Exception\\UnsatisfiedDependencyException' => $vendorDir . '/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php', + 'Ramsey\\Uuid\\Exception\\NameException' => $vendorDir . '/ramsey/uuid/src/Exception/NameException.php', + 'Ramsey\\Uuid\\Exception\\NodeException' => $vendorDir . '/ramsey/uuid/src/Exception/NodeException.php', + 'Ramsey\\Uuid\\Exception\\RandomSourceException' => $vendorDir . '/ramsey/uuid/src/Exception/RandomSourceException.php', + 'Ramsey\\Uuid\\Exception\\TimeSourceException' => $vendorDir . '/ramsey/uuid/src/Exception/TimeSourceException.php', + 'Ramsey\\Uuid\\Exception\\UnableToBuildUuidException' => $vendorDir . '/ramsey/uuid/src/Exception/UnableToBuildUuidException.php', 'Ramsey\\Uuid\\Exception\\UnsupportedOperationException' => $vendorDir . '/ramsey/uuid/src/Exception/UnsupportedOperationException.php', + 'Ramsey\\Uuid\\Exception\\UuidExceptionInterface' => $vendorDir . '/ramsey/uuid/src/Exception/UuidExceptionInterface.php', 'Ramsey\\Uuid\\FeatureSet' => $vendorDir . '/ramsey/uuid/src/FeatureSet.php', + 'Ramsey\\Uuid\\Fields\\FieldsInterface' => $vendorDir . '/ramsey/uuid/src/Fields/FieldsInterface.php', + 'Ramsey\\Uuid\\Fields\\SerializableFieldsTrait' => $vendorDir . '/ramsey/uuid/src/Fields/SerializableFieldsTrait.php', 'Ramsey\\Uuid\\Generator\\CombGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/CombGenerator.php', + 'Ramsey\\Uuid\\Generator\\DceSecurityGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/DceSecurityGenerator.php', + 'Ramsey\\Uuid\\Generator\\DceSecurityGeneratorInterface' => $vendorDir . '/ramsey/uuid/src/Generator/DceSecurityGeneratorInterface.php', + 'Ramsey\\Uuid\\Generator\\DefaultNameGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/DefaultNameGenerator.php', 'Ramsey\\Uuid\\Generator\\DefaultTimeGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/DefaultTimeGenerator.php', - 'Ramsey\\Uuid\\Generator\\MtRandGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/MtRandGenerator.php', - 'Ramsey\\Uuid\\Generator\\OpenSslGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/OpenSslGenerator.php', + 'Ramsey\\Uuid\\Generator\\NameGeneratorFactory' => $vendorDir . '/ramsey/uuid/src/Generator/NameGeneratorFactory.php', + 'Ramsey\\Uuid\\Generator\\NameGeneratorInterface' => $vendorDir . '/ramsey/uuid/src/Generator/NameGeneratorInterface.php', + 'Ramsey\\Uuid\\Generator\\PeclUuidNameGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/PeclUuidNameGenerator.php', 'Ramsey\\Uuid\\Generator\\PeclUuidRandomGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php', 'Ramsey\\Uuid\\Generator\\PeclUuidTimeGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php', 'Ramsey\\Uuid\\Generator\\RandomBytesGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/RandomBytesGenerator.php', 'Ramsey\\Uuid\\Generator\\RandomGeneratorFactory' => $vendorDir . '/ramsey/uuid/src/Generator/RandomGeneratorFactory.php', 'Ramsey\\Uuid\\Generator\\RandomGeneratorInterface' => $vendorDir . '/ramsey/uuid/src/Generator/RandomGeneratorInterface.php', 'Ramsey\\Uuid\\Generator\\RandomLibAdapter' => $vendorDir . '/ramsey/uuid/src/Generator/RandomLibAdapter.php', - 'Ramsey\\Uuid\\Generator\\SodiumRandomGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/SodiumRandomGenerator.php', 'Ramsey\\Uuid\\Generator\\TimeGeneratorFactory' => $vendorDir . '/ramsey/uuid/src/Generator/TimeGeneratorFactory.php', 'Ramsey\\Uuid\\Generator\\TimeGeneratorInterface' => $vendorDir . '/ramsey/uuid/src/Generator/TimeGeneratorInterface.php', + 'Ramsey\\Uuid\\Guid\\Fields' => $vendorDir . '/ramsey/uuid/src/Guid/Fields.php', + 'Ramsey\\Uuid\\Guid\\Guid' => $vendorDir . '/ramsey/uuid/src/Guid/Guid.php', + 'Ramsey\\Uuid\\Guid\\GuidBuilder' => $vendorDir . '/ramsey/uuid/src/Guid/GuidBuilder.php', + 'Ramsey\\Uuid\\Lazy\\LazyUuidFromString' => $vendorDir . '/ramsey/uuid/src/Lazy/LazyUuidFromString.php', + 'Ramsey\\Uuid\\Math\\BrickMathCalculator' => $vendorDir . '/ramsey/uuid/src/Math/BrickMathCalculator.php', + 'Ramsey\\Uuid\\Math\\CalculatorInterface' => $vendorDir . '/ramsey/uuid/src/Math/CalculatorInterface.php', + 'Ramsey\\Uuid\\Math\\RoundingMode' => $vendorDir . '/ramsey/uuid/src/Math/RoundingMode.php', + 'Ramsey\\Uuid\\Nonstandard\\Fields' => $vendorDir . '/ramsey/uuid/src/Nonstandard/Fields.php', + 'Ramsey\\Uuid\\Nonstandard\\Uuid' => $vendorDir . '/ramsey/uuid/src/Nonstandard/Uuid.php', + 'Ramsey\\Uuid\\Nonstandard\\UuidBuilder' => $vendorDir . '/ramsey/uuid/src/Nonstandard/UuidBuilder.php', + 'Ramsey\\Uuid\\Nonstandard\\UuidV6' => $vendorDir . '/ramsey/uuid/src/Nonstandard/UuidV6.php', + 'Ramsey\\Uuid\\Provider\\DceSecurityProviderInterface' => $vendorDir . '/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php', + 'Ramsey\\Uuid\\Provider\\Dce\\SystemDceSecurityProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php', 'Ramsey\\Uuid\\Provider\\NodeProviderInterface' => $vendorDir . '/ramsey/uuid/src/Provider/NodeProviderInterface.php', 'Ramsey\\Uuid\\Provider\\Node\\FallbackNodeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\Node\\NodeProviderCollection' => $vendorDir . '/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php', 'Ramsey\\Uuid\\Provider\\Node\\RandomNodeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\Node\\StaticNodeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php', 'Ramsey\\Uuid\\Provider\\Node\\SystemNodeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php', 'Ramsey\\Uuid\\Provider\\TimeProviderInterface' => $vendorDir . '/ramsey/uuid/src/Provider/TimeProviderInterface.php', 'Ramsey\\Uuid\\Provider\\Time\\FixedTimeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php', 'Ramsey\\Uuid\\Provider\\Time\\SystemTimeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php', + 'Ramsey\\Uuid\\Rfc4122\\Fields' => $vendorDir . '/ramsey/uuid/src/Rfc4122/Fields.php', + 'Ramsey\\Uuid\\Rfc4122\\FieldsInterface' => $vendorDir . '/ramsey/uuid/src/Rfc4122/FieldsInterface.php', + 'Ramsey\\Uuid\\Rfc4122\\NilTrait' => $vendorDir . '/ramsey/uuid/src/Rfc4122/NilTrait.php', + 'Ramsey\\Uuid\\Rfc4122\\NilUuid' => $vendorDir . '/ramsey/uuid/src/Rfc4122/NilUuid.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidBuilder' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidBuilder.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidInterface' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidInterface.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV1' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidV1.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV2' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidV2.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV3' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidV3.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV4' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidV4.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV5' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidV5.php', + 'Ramsey\\Uuid\\Rfc4122\\Validator' => $vendorDir . '/ramsey/uuid/src/Rfc4122/Validator.php', + 'Ramsey\\Uuid\\Rfc4122\\VariantTrait' => $vendorDir . '/ramsey/uuid/src/Rfc4122/VariantTrait.php', + 'Ramsey\\Uuid\\Rfc4122\\VersionTrait' => $vendorDir . '/ramsey/uuid/src/Rfc4122/VersionTrait.php', + 'Ramsey\\Uuid\\Type\\Decimal' => $vendorDir . '/ramsey/uuid/src/Type/Decimal.php', + 'Ramsey\\Uuid\\Type\\Hexadecimal' => $vendorDir . '/ramsey/uuid/src/Type/Hexadecimal.php', + 'Ramsey\\Uuid\\Type\\Integer' => $vendorDir . '/ramsey/uuid/src/Type/Integer.php', + 'Ramsey\\Uuid\\Type\\NumberInterface' => $vendorDir . '/ramsey/uuid/src/Type/NumberInterface.php', + 'Ramsey\\Uuid\\Type\\Time' => $vendorDir . '/ramsey/uuid/src/Type/Time.php', + 'Ramsey\\Uuid\\Type\\TypeInterface' => $vendorDir . '/ramsey/uuid/src/Type/TypeInterface.php', 'Ramsey\\Uuid\\Uuid' => $vendorDir . '/ramsey/uuid/src/Uuid.php', 'Ramsey\\Uuid\\UuidFactory' => $vendorDir . '/ramsey/uuid/src/UuidFactory.php', 'Ramsey\\Uuid\\UuidFactoryInterface' => $vendorDir . '/ramsey/uuid/src/UuidFactoryInterface.php', 'Ramsey\\Uuid\\UuidInterface' => $vendorDir . '/ramsey/uuid/src/UuidInterface.php', + 'Ramsey\\Uuid\\Validator\\GenericValidator' => $vendorDir . '/ramsey/uuid/src/Validator/GenericValidator.php', + 'Ramsey\\Uuid\\Validator\\ValidatorInterface' => $vendorDir . '/ramsey/uuid/src/Validator/ValidatorInterface.php', + 'ReturnTypeWillChange' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php', 'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php', @@ -3447,15 +4093,86 @@ return array( 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => $vendorDir . '/sebastian/resource-operations/src/ResourceOperations.php', 'SebastianBergmann\\Version' => $vendorDir . '/sebastian/version/src/Version.php', 'SettingsSeeder' => $baseDir . '/database/seeds/SettingsSeeder.php', + 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', + 'Symfony\\Component\\Cache\\Adapter\\AbstractAdapter' => $vendorDir . '/symfony/cache/Adapter/AbstractAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\AbstractTagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/AbstractTagAwareAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\AdapterInterface' => $vendorDir . '/symfony/cache/Adapter/AdapterInterface.php', + 'Symfony\\Component\\Cache\\Adapter\\ApcuAdapter' => $vendorDir . '/symfony/cache/Adapter/ApcuAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\ArrayAdapter' => $vendorDir . '/symfony/cache/Adapter/ArrayAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\ChainAdapter' => $vendorDir . '/symfony/cache/Adapter/ChainAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\CouchbaseBucketAdapter' => $vendorDir . '/symfony/cache/Adapter/CouchbaseBucketAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\CouchbaseCollectionAdapter' => $vendorDir . '/symfony/cache/Adapter/CouchbaseCollectionAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\DoctrineAdapter' => $vendorDir . '/symfony/cache/Adapter/DoctrineAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\DoctrineDbalAdapter' => $vendorDir . '/symfony/cache/Adapter/DoctrineDbalAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\FilesystemAdapter' => $vendorDir . '/symfony/cache/Adapter/FilesystemAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\FilesystemTagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/FilesystemTagAwareAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\MemcachedAdapter' => $vendorDir . '/symfony/cache/Adapter/MemcachedAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\NullAdapter' => $vendorDir . '/symfony/cache/Adapter/NullAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\ParameterNormalizer' => $vendorDir . '/symfony/cache/Adapter/ParameterNormalizer.php', + 'Symfony\\Component\\Cache\\Adapter\\PdoAdapter' => $vendorDir . '/symfony/cache/Adapter/PdoAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\PhpArrayAdapter' => $vendorDir . '/symfony/cache/Adapter/PhpArrayAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\PhpFilesAdapter' => $vendorDir . '/symfony/cache/Adapter/PhpFilesAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\ProxyAdapter' => $vendorDir . '/symfony/cache/Adapter/ProxyAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\Psr16Adapter' => $vendorDir . '/symfony/cache/Adapter/Psr16Adapter.php', + 'Symfony\\Component\\Cache\\Adapter\\RedisAdapter' => $vendorDir . '/symfony/cache/Adapter/RedisAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\RedisTagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/RedisTagAwareAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/TagAwareAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapterInterface' => $vendorDir . '/symfony/cache/Adapter/TagAwareAdapterInterface.php', + 'Symfony\\Component\\Cache\\Adapter\\TraceableAdapter' => $vendorDir . '/symfony/cache/Adapter/TraceableAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\TraceableTagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/TraceableTagAwareAdapter.php', + 'Symfony\\Component\\Cache\\CacheItem' => $vendorDir . '/symfony/cache/CacheItem.php', + 'Symfony\\Component\\Cache\\DataCollector\\CacheDataCollector' => $vendorDir . '/symfony/cache/DataCollector/CacheDataCollector.php', + 'Symfony\\Component\\Cache\\DependencyInjection\\CacheCollectorPass' => $vendorDir . '/symfony/cache/DependencyInjection/CacheCollectorPass.php', + 'Symfony\\Component\\Cache\\DependencyInjection\\CachePoolClearerPass' => $vendorDir . '/symfony/cache/DependencyInjection/CachePoolClearerPass.php', + 'Symfony\\Component\\Cache\\DependencyInjection\\CachePoolPass' => $vendorDir . '/symfony/cache/DependencyInjection/CachePoolPass.php', + 'Symfony\\Component\\Cache\\DependencyInjection\\CachePoolPrunerPass' => $vendorDir . '/symfony/cache/DependencyInjection/CachePoolPrunerPass.php', + 'Symfony\\Component\\Cache\\DoctrineProvider' => $vendorDir . '/symfony/cache/DoctrineProvider.php', + 'Symfony\\Component\\Cache\\Exception\\CacheException' => $vendorDir . '/symfony/cache/Exception/CacheException.php', + 'Symfony\\Component\\Cache\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/cache/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\Cache\\Exception\\LogicException' => $vendorDir . '/symfony/cache/Exception/LogicException.php', + 'Symfony\\Component\\Cache\\LockRegistry' => $vendorDir . '/symfony/cache/LockRegistry.php', + 'Symfony\\Component\\Cache\\Marshaller\\DefaultMarshaller' => $vendorDir . '/symfony/cache/Marshaller/DefaultMarshaller.php', + 'Symfony\\Component\\Cache\\Marshaller\\DeflateMarshaller' => $vendorDir . '/symfony/cache/Marshaller/DeflateMarshaller.php', + 'Symfony\\Component\\Cache\\Marshaller\\MarshallerInterface' => $vendorDir . '/symfony/cache/Marshaller/MarshallerInterface.php', + 'Symfony\\Component\\Cache\\Marshaller\\SodiumMarshaller' => $vendorDir . '/symfony/cache/Marshaller/SodiumMarshaller.php', + 'Symfony\\Component\\Cache\\Marshaller\\TagAwareMarshaller' => $vendorDir . '/symfony/cache/Marshaller/TagAwareMarshaller.php', + 'Symfony\\Component\\Cache\\Messenger\\EarlyExpirationDispatcher' => $vendorDir . '/symfony/cache/Messenger/EarlyExpirationDispatcher.php', + 'Symfony\\Component\\Cache\\Messenger\\EarlyExpirationHandler' => $vendorDir . '/symfony/cache/Messenger/EarlyExpirationHandler.php', + 'Symfony\\Component\\Cache\\Messenger\\EarlyExpirationMessage' => $vendorDir . '/symfony/cache/Messenger/EarlyExpirationMessage.php', + 'Symfony\\Component\\Cache\\PruneableInterface' => $vendorDir . '/symfony/cache/PruneableInterface.php', + 'Symfony\\Component\\Cache\\Psr16Cache' => $vendorDir . '/symfony/cache/Psr16Cache.php', + 'Symfony\\Component\\Cache\\ResettableInterface' => $vendorDir . '/symfony/cache/ResettableInterface.php', + 'Symfony\\Component\\Cache\\Traits\\AbstractAdapterTrait' => $vendorDir . '/symfony/cache/Traits/AbstractAdapterTrait.php', + 'Symfony\\Component\\Cache\\Traits\\ContractsTrait' => $vendorDir . '/symfony/cache/Traits/ContractsTrait.php', + 'Symfony\\Component\\Cache\\Traits\\FilesystemCommonTrait' => $vendorDir . '/symfony/cache/Traits/FilesystemCommonTrait.php', + 'Symfony\\Component\\Cache\\Traits\\FilesystemTrait' => $vendorDir . '/symfony/cache/Traits/FilesystemTrait.php', + 'Symfony\\Component\\Cache\\Traits\\ProxyTrait' => $vendorDir . '/symfony/cache/Traits/ProxyTrait.php', + 'Symfony\\Component\\Cache\\Traits\\RedisClusterNodeProxy' => $vendorDir . '/symfony/cache/Traits/RedisClusterNodeProxy.php', + 'Symfony\\Component\\Cache\\Traits\\RedisClusterProxy' => $vendorDir . '/symfony/cache/Traits/RedisClusterProxy.php', + 'Symfony\\Component\\Cache\\Traits\\RedisProxy' => $vendorDir . '/symfony/cache/Traits/RedisProxy.php', + 'Symfony\\Component\\Cache\\Traits\\RedisTrait' => $vendorDir . '/symfony/cache/Traits/RedisTrait.php', 'Symfony\\Component\\Console\\Application' => $vendorDir . '/symfony/console/Application.php', + 'Symfony\\Component\\Console\\Attribute\\AsCommand' => $vendorDir . '/symfony/console/Attribute/AsCommand.php', + 'Symfony\\Component\\Console\\CI\\GithubActionReporter' => $vendorDir . '/symfony/console/CI/GithubActionReporter.php', + 'Symfony\\Component\\Console\\Color' => $vendorDir . '/symfony/console/Color.php', 'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => $vendorDir . '/symfony/console/CommandLoader/CommandLoaderInterface.php', 'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/ContainerCommandLoader.php', 'Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/FactoryCommandLoader.php', 'Symfony\\Component\\Console\\Command\\Command' => $vendorDir . '/symfony/console/Command/Command.php', + 'Symfony\\Component\\Console\\Command\\CompleteCommand' => $vendorDir . '/symfony/console/Command/CompleteCommand.php', + 'Symfony\\Component\\Console\\Command\\DumpCompletionCommand' => $vendorDir . '/symfony/console/Command/DumpCompletionCommand.php', 'Symfony\\Component\\Console\\Command\\HelpCommand' => $vendorDir . '/symfony/console/Command/HelpCommand.php', + 'Symfony\\Component\\Console\\Command\\LazyCommand' => $vendorDir . '/symfony/console/Command/LazyCommand.php', 'Symfony\\Component\\Console\\Command\\ListCommand' => $vendorDir . '/symfony/console/Command/ListCommand.php', 'Symfony\\Component\\Console\\Command\\LockableTrait' => $vendorDir . '/symfony/console/Command/LockableTrait.php', + 'Symfony\\Component\\Console\\Command\\SignalableCommandInterface' => $vendorDir . '/symfony/console/Command/SignalableCommandInterface.php', + 'Symfony\\Component\\Console\\Completion\\CompletionInput' => $vendorDir . '/symfony/console/Completion/CompletionInput.php', + 'Symfony\\Component\\Console\\Completion\\CompletionSuggestions' => $vendorDir . '/symfony/console/Completion/CompletionSuggestions.php', + 'Symfony\\Component\\Console\\Completion\\Output\\BashCompletionOutput' => $vendorDir . '/symfony/console/Completion/Output/BashCompletionOutput.php', + 'Symfony\\Component\\Console\\Completion\\Output\\CompletionOutputInterface' => $vendorDir . '/symfony/console/Completion/Output/CompletionOutputInterface.php', + 'Symfony\\Component\\Console\\Completion\\Suggestion' => $vendorDir . '/symfony/console/Completion/Suggestion.php', 'Symfony\\Component\\Console\\ConsoleEvents' => $vendorDir . '/symfony/console/ConsoleEvents.php', + 'Symfony\\Component\\Console\\Cursor' => $vendorDir . '/symfony/console/Cursor.php', 'Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => $vendorDir . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', 'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => $vendorDir . '/symfony/console/Descriptor/ApplicationDescription.php', 'Symfony\\Component\\Console\\Descriptor\\Descriptor' => $vendorDir . '/symfony/console/Descriptor/Descriptor.php', @@ -3468,14 +4185,18 @@ return array( 'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => $vendorDir . '/symfony/console/Event/ConsoleCommandEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleErrorEvent' => $vendorDir . '/symfony/console/Event/ConsoleErrorEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleEvent' => $vendorDir . '/symfony/console/Event/ConsoleEvent.php', + 'Symfony\\Component\\Console\\Event\\ConsoleSignalEvent' => $vendorDir . '/symfony/console/Event/ConsoleSignalEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => $vendorDir . '/symfony/console/Event/ConsoleTerminateEvent.php', 'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => $vendorDir . '/symfony/console/Exception/CommandNotFoundException.php', 'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/console/Exception/ExceptionInterface.php', 'Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/console/Exception/InvalidArgumentException.php', 'Symfony\\Component\\Console\\Exception\\InvalidOptionException' => $vendorDir . '/symfony/console/Exception/InvalidOptionException.php', 'Symfony\\Component\\Console\\Exception\\LogicException' => $vendorDir . '/symfony/console/Exception/LogicException.php', + 'Symfony\\Component\\Console\\Exception\\MissingInputException' => $vendorDir . '/symfony/console/Exception/MissingInputException.php', 'Symfony\\Component\\Console\\Exception\\NamespaceNotFoundException' => $vendorDir . '/symfony/console/Exception/NamespaceNotFoundException.php', 'Symfony\\Component\\Console\\Exception\\RuntimeException' => $vendorDir . '/symfony/console/Exception/RuntimeException.php', + 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatter' => $vendorDir . '/symfony/console/Formatter/NullOutputFormatter.php', + 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/NullOutputFormatterStyle.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => $vendorDir . '/symfony/console/Formatter/OutputFormatter.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterInterface.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyle.php', @@ -3497,6 +4218,7 @@ return array( 'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => $vendorDir . '/symfony/console/Helper/SymfonyQuestionHelper.php', 'Symfony\\Component\\Console\\Helper\\Table' => $vendorDir . '/symfony/console/Helper/Table.php', 'Symfony\\Component\\Console\\Helper\\TableCell' => $vendorDir . '/symfony/console/Helper/TableCell.php', + 'Symfony\\Component\\Console\\Helper\\TableCellStyle' => $vendorDir . '/symfony/console/Helper/TableCellStyle.php', 'Symfony\\Component\\Console\\Helper\\TableRows' => $vendorDir . '/symfony/console/Helper/TableRows.php', 'Symfony\\Component\\Console\\Helper\\TableSeparator' => $vendorDir . '/symfony/console/Helper/TableSeparator.php', 'Symfony\\Component\\Console\\Helper\\TableStyle' => $vendorDir . '/symfony/console/Helper/TableStyle.php', @@ -3519,15 +4241,20 @@ return array( 'Symfony\\Component\\Console\\Output\\Output' => $vendorDir . '/symfony/console/Output/Output.php', 'Symfony\\Component\\Console\\Output\\OutputInterface' => $vendorDir . '/symfony/console/Output/OutputInterface.php', 'Symfony\\Component\\Console\\Output\\StreamOutput' => $vendorDir . '/symfony/console/Output/StreamOutput.php', + 'Symfony\\Component\\Console\\Output\\TrimmedBufferOutput' => $vendorDir . '/symfony/console/Output/TrimmedBufferOutput.php', 'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => $vendorDir . '/symfony/console/Question/ChoiceQuestion.php', 'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => $vendorDir . '/symfony/console/Question/ConfirmationQuestion.php', 'Symfony\\Component\\Console\\Question\\Question' => $vendorDir . '/symfony/console/Question/Question.php', + 'Symfony\\Component\\Console\\SignalRegistry\\SignalRegistry' => $vendorDir . '/symfony/console/SignalRegistry/SignalRegistry.php', + 'Symfony\\Component\\Console\\SingleCommandApplication' => $vendorDir . '/symfony/console/SingleCommandApplication.php', 'Symfony\\Component\\Console\\Style\\OutputStyle' => $vendorDir . '/symfony/console/Style/OutputStyle.php', 'Symfony\\Component\\Console\\Style\\StyleInterface' => $vendorDir . '/symfony/console/Style/StyleInterface.php', 'Symfony\\Component\\Console\\Style\\SymfonyStyle' => $vendorDir . '/symfony/console/Style/SymfonyStyle.php', 'Symfony\\Component\\Console\\Terminal' => $vendorDir . '/symfony/console/Terminal.php', 'Symfony\\Component\\Console\\Tester\\ApplicationTester' => $vendorDir . '/symfony/console/Tester/ApplicationTester.php', + 'Symfony\\Component\\Console\\Tester\\CommandCompletionTester' => $vendorDir . '/symfony/console/Tester/CommandCompletionTester.php', 'Symfony\\Component\\Console\\Tester\\CommandTester' => $vendorDir . '/symfony/console/Tester/CommandTester.php', + 'Symfony\\Component\\Console\\Tester\\Constraint\\CommandIsSuccessful' => $vendorDir . '/symfony/console/Tester/Constraint/CommandIsSuccessful.php', 'Symfony\\Component\\Console\\Tester\\TesterTrait' => $vendorDir . '/symfony/console/Tester/TesterTrait.php', 'Symfony\\Component\\CssSelector\\CssSelectorConverter' => $vendorDir . '/symfony/css-selector/CssSelectorConverter.php', 'Symfony\\Component\\CssSelector\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/css-selector/Exception/ExceptionInterface.php', @@ -3577,36 +4304,38 @@ return array( 'Symfony\\Component\\CssSelector\\XPath\\Translator' => $vendorDir . '/symfony/css-selector/XPath/Translator.php', 'Symfony\\Component\\CssSelector\\XPath\\TranslatorInterface' => $vendorDir . '/symfony/css-selector/XPath/TranslatorInterface.php', 'Symfony\\Component\\CssSelector\\XPath\\XPathExpr' => $vendorDir . '/symfony/css-selector/XPath/XPathExpr.php', - 'Symfony\\Component\\Debug\\BufferingLogger' => $vendorDir . '/symfony/debug/BufferingLogger.php', - 'Symfony\\Component\\Debug\\Debug' => $vendorDir . '/symfony/debug/Debug.php', - 'Symfony\\Component\\Debug\\DebugClassLoader' => $vendorDir . '/symfony/debug/DebugClassLoader.php', - 'Symfony\\Component\\Debug\\ErrorHandler' => $vendorDir . '/symfony/debug/ErrorHandler.php', - 'Symfony\\Component\\Debug\\ExceptionHandler' => $vendorDir . '/symfony/debug/ExceptionHandler.php', - 'Symfony\\Component\\Debug\\Exception\\ClassNotFoundException' => $vendorDir . '/symfony/debug/Exception/ClassNotFoundException.php', - 'Symfony\\Component\\Debug\\Exception\\FatalErrorException' => $vendorDir . '/symfony/debug/Exception/FatalErrorException.php', - 'Symfony\\Component\\Debug\\Exception\\FatalThrowableError' => $vendorDir . '/symfony/debug/Exception/FatalThrowableError.php', - 'Symfony\\Component\\Debug\\Exception\\FlattenException' => $vendorDir . '/symfony/debug/Exception/FlattenException.php', - 'Symfony\\Component\\Debug\\Exception\\OutOfMemoryException' => $vendorDir . '/symfony/debug/Exception/OutOfMemoryException.php', - 'Symfony\\Component\\Debug\\Exception\\SilencedErrorContext' => $vendorDir . '/symfony/debug/Exception/SilencedErrorContext.php', - 'Symfony\\Component\\Debug\\Exception\\UndefinedFunctionException' => $vendorDir . '/symfony/debug/Exception/UndefinedFunctionException.php', - 'Symfony\\Component\\Debug\\Exception\\UndefinedMethodException' => $vendorDir . '/symfony/debug/Exception/UndefinedMethodException.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\ClassNotFoundFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\FatalErrorHandlerInterface' => $vendorDir . '/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedFunctionFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedMethodFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php', + 'Symfony\\Component\\ErrorHandler\\BufferingLogger' => $vendorDir . '/symfony/error-handler/BufferingLogger.php', + 'Symfony\\Component\\ErrorHandler\\Debug' => $vendorDir . '/symfony/error-handler/Debug.php', + 'Symfony\\Component\\ErrorHandler\\DebugClassLoader' => $vendorDir . '/symfony/error-handler/DebugClassLoader.php', + 'Symfony\\Component\\ErrorHandler\\ErrorEnhancer\\ClassNotFoundErrorEnhancer' => $vendorDir . '/symfony/error-handler/ErrorEnhancer/ClassNotFoundErrorEnhancer.php', + 'Symfony\\Component\\ErrorHandler\\ErrorEnhancer\\ErrorEnhancerInterface' => $vendorDir . '/symfony/error-handler/ErrorEnhancer/ErrorEnhancerInterface.php', + 'Symfony\\Component\\ErrorHandler\\ErrorEnhancer\\UndefinedFunctionErrorEnhancer' => $vendorDir . '/symfony/error-handler/ErrorEnhancer/UndefinedFunctionErrorEnhancer.php', + 'Symfony\\Component\\ErrorHandler\\ErrorEnhancer\\UndefinedMethodErrorEnhancer' => $vendorDir . '/symfony/error-handler/ErrorEnhancer/UndefinedMethodErrorEnhancer.php', + 'Symfony\\Component\\ErrorHandler\\ErrorHandler' => $vendorDir . '/symfony/error-handler/ErrorHandler.php', + 'Symfony\\Component\\ErrorHandler\\ErrorRenderer\\CliErrorRenderer' => $vendorDir . '/symfony/error-handler/ErrorRenderer/CliErrorRenderer.php', + 'Symfony\\Component\\ErrorHandler\\ErrorRenderer\\ErrorRendererInterface' => $vendorDir . '/symfony/error-handler/ErrorRenderer/ErrorRendererInterface.php', + 'Symfony\\Component\\ErrorHandler\\ErrorRenderer\\HtmlErrorRenderer' => $vendorDir . '/symfony/error-handler/ErrorRenderer/HtmlErrorRenderer.php', + 'Symfony\\Component\\ErrorHandler\\ErrorRenderer\\SerializerErrorRenderer' => $vendorDir . '/symfony/error-handler/ErrorRenderer/SerializerErrorRenderer.php', + 'Symfony\\Component\\ErrorHandler\\Error\\ClassNotFoundError' => $vendorDir . '/symfony/error-handler/Error/ClassNotFoundError.php', + 'Symfony\\Component\\ErrorHandler\\Error\\FatalError' => $vendorDir . '/symfony/error-handler/Error/FatalError.php', + 'Symfony\\Component\\ErrorHandler\\Error\\OutOfMemoryError' => $vendorDir . '/symfony/error-handler/Error/OutOfMemoryError.php', + 'Symfony\\Component\\ErrorHandler\\Error\\UndefinedFunctionError' => $vendorDir . '/symfony/error-handler/Error/UndefinedFunctionError.php', + 'Symfony\\Component\\ErrorHandler\\Error\\UndefinedMethodError' => $vendorDir . '/symfony/error-handler/Error/UndefinedMethodError.php', + 'Symfony\\Component\\ErrorHandler\\Exception\\FlattenException' => $vendorDir . '/symfony/error-handler/Exception/FlattenException.php', + 'Symfony\\Component\\ErrorHandler\\Exception\\SilencedErrorContext' => $vendorDir . '/symfony/error-handler/Exception/SilencedErrorContext.php', + 'Symfony\\Component\\ErrorHandler\\Internal\\TentativeTypes' => $vendorDir . '/symfony/error-handler/Internal/TentativeTypes.php', + 'Symfony\\Component\\ErrorHandler\\ThrowableUtils' => $vendorDir . '/symfony/error-handler/ThrowableUtils.php', + 'Symfony\\Component\\EventDispatcher\\Attribute\\AsEventListener' => $vendorDir . '/symfony/event-dispatcher/Attribute/AsEventListener.php', 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php', - 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php', 'Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener' => $vendorDir . '/symfony/event-dispatcher/Debug/WrappedListener.php', - 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\ExtractingEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php', + 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\AddEventAliasesPass' => $vendorDir . '/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php', 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\RegisterListenersPass' => $vendorDir . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php', - 'Symfony\\Component\\EventDispatcher\\Event' => $vendorDir . '/symfony/event-dispatcher/Event.php', 'Symfony\\Component\\EventDispatcher\\EventDispatcher' => $vendorDir . '/symfony/event-dispatcher/EventDispatcher.php', 'Symfony\\Component\\EventDispatcher\\EventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher/EventDispatcherInterface.php', 'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface' => $vendorDir . '/symfony/event-dispatcher/EventSubscriberInterface.php', 'Symfony\\Component\\EventDispatcher\\GenericEvent' => $vendorDir . '/symfony/event-dispatcher/GenericEvent.php', 'Symfony\\Component\\EventDispatcher\\ImmutableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/ImmutableEventDispatcher.php', 'Symfony\\Component\\EventDispatcher\\LegacyEventDispatcherProxy' => $vendorDir . '/symfony/event-dispatcher/LegacyEventDispatcherProxy.php', - 'Symfony\\Component\\EventDispatcher\\LegacyEventProxy' => $vendorDir . '/symfony/event-dispatcher/LegacyEventProxy.php', 'Symfony\\Component\\Finder\\Comparator\\Comparator' => $vendorDir . '/symfony/finder/Comparator/Comparator.php', 'Symfony\\Component\\Finder\\Comparator\\DateComparator' => $vendorDir . '/symfony/finder/Comparator/DateComparator.php', 'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $vendorDir . '/symfony/finder/Comparator/NumberComparator.php', @@ -3622,19 +4351,23 @@ return array( 'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FileTypeFilterIterator.php', 'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilecontentFilterIterator.php', 'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilenameFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\LazyIterator' => $vendorDir . '/symfony/finder/Iterator/LazyIterator.php', 'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => $vendorDir . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', 'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => $vendorDir . '/symfony/finder/Iterator/PathFilterIterator.php', 'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => $vendorDir . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', 'Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', 'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => $vendorDir . '/symfony/finder/Iterator/SortableIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\VcsIgnoredFilterIterator' => $vendorDir . '/symfony/finder/Iterator/VcsIgnoredFilterIterator.php', 'Symfony\\Component\\Finder\\SplFileInfo' => $vendorDir . '/symfony/finder/SplFileInfo.php', 'Symfony\\Component\\HttpFoundation\\AcceptHeader' => $vendorDir . '/symfony/http-foundation/AcceptHeader.php', 'Symfony\\Component\\HttpFoundation\\AcceptHeaderItem' => $vendorDir . '/symfony/http-foundation/AcceptHeaderItem.php', - 'Symfony\\Component\\HttpFoundation\\ApacheRequest' => $vendorDir . '/symfony/http-foundation/ApacheRequest.php', 'Symfony\\Component\\HttpFoundation\\BinaryFileResponse' => $vendorDir . '/symfony/http-foundation/BinaryFileResponse.php', 'Symfony\\Component\\HttpFoundation\\Cookie' => $vendorDir . '/symfony/http-foundation/Cookie.php', + 'Symfony\\Component\\HttpFoundation\\Exception\\BadRequestException' => $vendorDir . '/symfony/http-foundation/Exception/BadRequestException.php', 'Symfony\\Component\\HttpFoundation\\Exception\\ConflictingHeadersException' => $vendorDir . '/symfony/http-foundation/Exception/ConflictingHeadersException.php', + 'Symfony\\Component\\HttpFoundation\\Exception\\JsonException' => $vendorDir . '/symfony/http-foundation/Exception/JsonException.php', 'Symfony\\Component\\HttpFoundation\\Exception\\RequestExceptionInterface' => $vendorDir . '/symfony/http-foundation/Exception/RequestExceptionInterface.php', + 'Symfony\\Component\\HttpFoundation\\Exception\\SessionNotFoundException' => $vendorDir . '/symfony/http-foundation/Exception/SessionNotFoundException.php', 'Symfony\\Component\\HttpFoundation\\Exception\\SuspiciousOperationException' => $vendorDir . '/symfony/http-foundation/Exception/SuspiciousOperationException.php', 'Symfony\\Component\\HttpFoundation\\ExpressionRequestMatcher' => $vendorDir . '/symfony/http-foundation/ExpressionRequestMatcher.php', 'Symfony\\Component\\HttpFoundation\\FileBag' => $vendorDir . '/symfony/http-foundation/FileBag.php', @@ -3651,20 +4384,16 @@ return array( 'Symfony\\Component\\HttpFoundation\\File\\Exception\\UnexpectedTypeException' => $vendorDir . '/symfony/http-foundation/File/Exception/UnexpectedTypeException.php', 'Symfony\\Component\\HttpFoundation\\File\\Exception\\UploadException' => $vendorDir . '/symfony/http-foundation/File/Exception/UploadException.php', 'Symfony\\Component\\HttpFoundation\\File\\File' => $vendorDir . '/symfony/http-foundation/File/File.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\ExtensionGuesser' => $vendorDir . '/symfony/http-foundation/File/MimeType/ExtensionGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\ExtensionGuesserInterface' => $vendorDir . '/symfony/http-foundation/File/MimeType/ExtensionGuesserInterface.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\FileBinaryMimeTypeGuesser' => $vendorDir . '/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\FileinfoMimeTypeGuesser' => $vendorDir . '/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\MimeTypeExtensionGuesser' => $vendorDir . '/symfony/http-foundation/File/MimeType/MimeTypeExtensionGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\MimeTypeGuesser' => $vendorDir . '/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\MimeTypeGuesserInterface' => $vendorDir . '/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php', 'Symfony\\Component\\HttpFoundation\\File\\Stream' => $vendorDir . '/symfony/http-foundation/File/Stream.php', 'Symfony\\Component\\HttpFoundation\\File\\UploadedFile' => $vendorDir . '/symfony/http-foundation/File/UploadedFile.php', 'Symfony\\Component\\HttpFoundation\\HeaderBag' => $vendorDir . '/symfony/http-foundation/HeaderBag.php', 'Symfony\\Component\\HttpFoundation\\HeaderUtils' => $vendorDir . '/symfony/http-foundation/HeaderUtils.php', + 'Symfony\\Component\\HttpFoundation\\InputBag' => $vendorDir . '/symfony/http-foundation/InputBag.php', 'Symfony\\Component\\HttpFoundation\\IpUtils' => $vendorDir . '/symfony/http-foundation/IpUtils.php', 'Symfony\\Component\\HttpFoundation\\JsonResponse' => $vendorDir . '/symfony/http-foundation/JsonResponse.php', 'Symfony\\Component\\HttpFoundation\\ParameterBag' => $vendorDir . '/symfony/http-foundation/ParameterBag.php', + 'Symfony\\Component\\HttpFoundation\\RateLimiter\\AbstractRequestRateLimiter' => $vendorDir . '/symfony/http-foundation/RateLimiter/AbstractRequestRateLimiter.php', + 'Symfony\\Component\\HttpFoundation\\RateLimiter\\RequestRateLimiterInterface' => $vendorDir . '/symfony/http-foundation/RateLimiter/RequestRateLimiterInterface.php', 'Symfony\\Component\\HttpFoundation\\RedirectResponse' => $vendorDir . '/symfony/http-foundation/RedirectResponse.php', 'Symfony\\Component\\HttpFoundation\\Request' => $vendorDir . '/symfony/http-foundation/Request.php', 'Symfony\\Component\\HttpFoundation\\RequestMatcher' => $vendorDir . '/symfony/http-foundation/RequestMatcher.php', @@ -3682,9 +4411,13 @@ return array( 'Symfony\\Component\\HttpFoundation\\Session\\Session' => $vendorDir . '/symfony/http-foundation/Session/Session.php', 'Symfony\\Component\\HttpFoundation\\Session\\SessionBagInterface' => $vendorDir . '/symfony/http-foundation/Session/SessionBagInterface.php', 'Symfony\\Component\\HttpFoundation\\Session\\SessionBagProxy' => $vendorDir . '/symfony/http-foundation/Session/SessionBagProxy.php', + 'Symfony\\Component\\HttpFoundation\\Session\\SessionFactory' => $vendorDir . '/symfony/http-foundation/Session/SessionFactory.php', + 'Symfony\\Component\\HttpFoundation\\Session\\SessionFactoryInterface' => $vendorDir . '/symfony/http-foundation/Session/SessionFactoryInterface.php', 'Symfony\\Component\\HttpFoundation\\Session\\SessionInterface' => $vendorDir . '/symfony/http-foundation/Session/SessionInterface.php', 'Symfony\\Component\\HttpFoundation\\Session\\SessionUtils' => $vendorDir . '/symfony/http-foundation/Session/SessionUtils.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\AbstractSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\IdentityMarshaller' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/IdentityMarshaller.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MarshallingSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MemcachedSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MigratingSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/MigratingSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MongoDbSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php', @@ -3692,25 +4425,35 @@ return array( 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\NullSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\PdoSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\RedisSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/RedisSessionHandler.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\SessionHandlerFactory' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\StrictSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\MetadataBag' => $vendorDir . '/symfony/http-foundation/Session/Storage/MetadataBag.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\MockArraySessionStorage' => $vendorDir . '/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\MockFileSessionStorage' => $vendorDir . '/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\MockFileSessionStorageFactory' => $vendorDir . '/symfony/http-foundation/Session/Storage/MockFileSessionStorageFactory.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\NativeSessionStorage' => $vendorDir . '/symfony/http-foundation/Session/Storage/NativeSessionStorage.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\NativeSessionStorageFactory' => $vendorDir . '/symfony/http-foundation/Session/Storage/NativeSessionStorageFactory.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\PhpBridgeSessionStorage' => $vendorDir . '/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\PhpBridgeSessionStorageFactory' => $vendorDir . '/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorageFactory.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Proxy\\AbstractProxy' => $vendorDir . '/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Proxy\\SessionHandlerProxy' => $vendorDir . '/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\ServiceSessionFactory' => $vendorDir . '/symfony/http-foundation/Session/Storage/ServiceSessionFactory.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\SessionStorageFactoryInterface' => $vendorDir . '/symfony/http-foundation/Session/Storage/SessionStorageFactoryInterface.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\SessionStorageInterface' => $vendorDir . '/symfony/http-foundation/Session/Storage/SessionStorageInterface.php', 'Symfony\\Component\\HttpFoundation\\StreamedResponse' => $vendorDir . '/symfony/http-foundation/StreamedResponse.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\RequestAttributeValueSame' => $vendorDir . '/symfony/http-foundation/Test/Constraint/RequestAttributeValueSame.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseCookieValueSame' => $vendorDir . '/symfony/http-foundation/Test/Constraint/ResponseCookieValueSame.php', + 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseFormatSame' => $vendorDir . '/symfony/http-foundation/Test/Constraint/ResponseFormatSame.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseHasCookie' => $vendorDir . '/symfony/http-foundation/Test/Constraint/ResponseHasCookie.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseHasHeader' => $vendorDir . '/symfony/http-foundation/Test/Constraint/ResponseHasHeader.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseHeaderSame' => $vendorDir . '/symfony/http-foundation/Test/Constraint/ResponseHeaderSame.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseIsRedirected' => $vendorDir . '/symfony/http-foundation/Test/Constraint/ResponseIsRedirected.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseIsSuccessful' => $vendorDir . '/symfony/http-foundation/Test/Constraint/ResponseIsSuccessful.php', + 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseIsUnprocessable' => $vendorDir . '/symfony/http-foundation/Test/Constraint/ResponseIsUnprocessable.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseStatusCodeSame' => $vendorDir . '/symfony/http-foundation/Test/Constraint/ResponseStatusCodeSame.php', 'Symfony\\Component\\HttpFoundation\\UrlHelper' => $vendorDir . '/symfony/http-foundation/UrlHelper.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\ArgumentInterface' => $vendorDir . '/symfony/http-kernel/Attribute/ArgumentInterface.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\AsController' => $vendorDir . '/symfony/http-kernel/Attribute/AsController.php', 'Symfony\\Component\\HttpKernel\\Bundle\\Bundle' => $vendorDir . '/symfony/http-kernel/Bundle/Bundle.php', 'Symfony\\Component\\HttpKernel\\Bundle\\BundleInterface' => $vendorDir . '/symfony/http-kernel/Bundle/BundleInterface.php', 'Symfony\\Component\\HttpKernel\\CacheClearer\\CacheClearerInterface' => $vendorDir . '/symfony/http-kernel/CacheClearer/CacheClearerInterface.php', @@ -3720,7 +4463,6 @@ return array( 'Symfony\\Component\\HttpKernel\\CacheWarmer\\CacheWarmerAggregate' => $vendorDir . '/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php', 'Symfony\\Component\\HttpKernel\\CacheWarmer\\CacheWarmerInterface' => $vendorDir . '/symfony/http-kernel/CacheWarmer/CacheWarmerInterface.php', 'Symfony\\Component\\HttpKernel\\CacheWarmer\\WarmableInterface' => $vendorDir . '/symfony/http-kernel/CacheWarmer/WarmableInterface.php', - 'Symfony\\Component\\HttpKernel\\Client' => $vendorDir . '/symfony/http-kernel/Client.php', 'Symfony\\Component\\HttpKernel\\Config\\FileLocator' => $vendorDir . '/symfony/http-kernel/Config/FileLocator.php', 'Symfony\\Component\\HttpKernel\\ControllerMetadata\\ArgumentMetadata' => $vendorDir . '/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php', 'Symfony\\Component\\HttpKernel\\ControllerMetadata\\ArgumentMetadataFactory' => $vendorDir . '/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php', @@ -3740,6 +4482,7 @@ return array( 'Symfony\\Component\\HttpKernel\\Controller\\ControllerReference' => $vendorDir . '/symfony/http-kernel/Controller/ControllerReference.php', 'Symfony\\Component\\HttpKernel\\Controller\\ControllerResolver' => $vendorDir . '/symfony/http-kernel/Controller/ControllerResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface' => $vendorDir . '/symfony/http-kernel/Controller/ControllerResolverInterface.php', + 'Symfony\\Component\\HttpKernel\\Controller\\ErrorController' => $vendorDir . '/symfony/http-kernel/Controller/ErrorController.php', 'Symfony\\Component\\HttpKernel\\Controller\\TraceableArgumentResolver' => $vendorDir . '/symfony/http-kernel/Controller/TraceableArgumentResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\TraceableControllerResolver' => $vendorDir . '/symfony/http-kernel/Controller/TraceableControllerResolver.php', 'Symfony\\Component\\HttpKernel\\DataCollector\\AjaxDataCollector' => $vendorDir . '/symfony/http-kernel/DataCollector/AjaxDataCollector.php', @@ -3776,32 +4519,23 @@ return array( 'Symfony\\Component\\HttpKernel\\EventListener\\DebugHandlersListener' => $vendorDir . '/symfony/http-kernel/EventListener/DebugHandlersListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\DisallowRobotsIndexingListener' => $vendorDir . '/symfony/http-kernel/EventListener/DisallowRobotsIndexingListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\DumpListener' => $vendorDir . '/symfony/http-kernel/EventListener/DumpListener.php', - 'Symfony\\Component\\HttpKernel\\EventListener\\ExceptionListener' => $vendorDir . '/symfony/http-kernel/EventListener/ExceptionListener.php', + 'Symfony\\Component\\HttpKernel\\EventListener\\ErrorListener' => $vendorDir . '/symfony/http-kernel/EventListener/ErrorListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\FragmentListener' => $vendorDir . '/symfony/http-kernel/EventListener/FragmentListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\LocaleAwareListener' => $vendorDir . '/symfony/http-kernel/EventListener/LocaleAwareListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener' => $vendorDir . '/symfony/http-kernel/EventListener/LocaleListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ProfilerListener' => $vendorDir . '/symfony/http-kernel/EventListener/ProfilerListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ResponseListener' => $vendorDir . '/symfony/http-kernel/EventListener/ResponseListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\RouterListener' => $vendorDir . '/symfony/http-kernel/EventListener/RouterListener.php', - 'Symfony\\Component\\HttpKernel\\EventListener\\SaveSessionListener' => $vendorDir . '/symfony/http-kernel/EventListener/SaveSessionListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\SessionListener' => $vendorDir . '/symfony/http-kernel/EventListener/SessionListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\StreamedResponseListener' => $vendorDir . '/symfony/http-kernel/EventListener/StreamedResponseListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\SurrogateListener' => $vendorDir . '/symfony/http-kernel/EventListener/SurrogateListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\TestSessionListener' => $vendorDir . '/symfony/http-kernel/EventListener/TestSessionListener.php', - 'Symfony\\Component\\HttpKernel\\EventListener\\TranslatorListener' => $vendorDir . '/symfony/http-kernel/EventListener/TranslatorListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ValidateRequestListener' => $vendorDir . '/symfony/http-kernel/EventListener/ValidateRequestListener.php', 'Symfony\\Component\\HttpKernel\\Event\\ControllerArgumentsEvent' => $vendorDir . '/symfony/http-kernel/Event/ControllerArgumentsEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\ControllerEvent' => $vendorDir . '/symfony/http-kernel/Event/ControllerEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\ExceptionEvent' => $vendorDir . '/symfony/http-kernel/Event/ExceptionEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\FilterControllerArgumentsEvent' => $vendorDir . '/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\FilterControllerEvent' => $vendorDir . '/symfony/http-kernel/Event/FilterControllerEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\FilterResponseEvent' => $vendorDir . '/symfony/http-kernel/Event/FilterResponseEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\FinishRequestEvent' => $vendorDir . '/symfony/http-kernel/Event/FinishRequestEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\GetResponseEvent' => $vendorDir . '/symfony/http-kernel/Event/GetResponseEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\GetResponseForControllerResultEvent' => $vendorDir . '/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\GetResponseForExceptionEvent' => $vendorDir . '/symfony/http-kernel/Event/GetResponseForExceptionEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\KernelEvent' => $vendorDir . '/symfony/http-kernel/Event/KernelEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\PostResponseEvent' => $vendorDir . '/symfony/http-kernel/Event/PostResponseEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\RequestEvent' => $vendorDir . '/symfony/http-kernel/Event/RequestEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\ResponseEvent' => $vendorDir . '/symfony/http-kernel/Event/ResponseEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\TerminateEvent' => $vendorDir . '/symfony/http-kernel/Event/TerminateEvent.php', @@ -3813,6 +4547,7 @@ return array( 'Symfony\\Component\\HttpKernel\\Exception\\GoneHttpException' => $vendorDir . '/symfony/http-kernel/Exception/GoneHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\HttpException' => $vendorDir . '/symfony/http-kernel/Exception/HttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\HttpExceptionInterface' => $vendorDir . '/symfony/http-kernel/Exception/HttpExceptionInterface.php', + 'Symfony\\Component\\HttpKernel\\Exception\\InvalidMetadataException' => $vendorDir . '/symfony/http-kernel/Exception/InvalidMetadataException.php', 'Symfony\\Component\\HttpKernel\\Exception\\LengthRequiredHttpException' => $vendorDir . '/symfony/http-kernel/Exception/LengthRequiredHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException' => $vendorDir . '/symfony/http-kernel/Exception/MethodNotAllowedHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\NotAcceptableHttpException' => $vendorDir . '/symfony/http-kernel/Exception/NotAcceptableHttpException.php', @@ -3822,12 +4557,15 @@ return array( 'Symfony\\Component\\HttpKernel\\Exception\\ServiceUnavailableHttpException' => $vendorDir . '/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\TooManyRequestsHttpException' => $vendorDir . '/symfony/http-kernel/Exception/TooManyRequestsHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException' => $vendorDir . '/symfony/http-kernel/Exception/UnauthorizedHttpException.php', + 'Symfony\\Component\\HttpKernel\\Exception\\UnexpectedSessionUsageException' => $vendorDir . '/symfony/http-kernel/Exception/UnexpectedSessionUsageException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnprocessableEntityHttpException' => $vendorDir . '/symfony/http-kernel/Exception/UnprocessableEntityHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnsupportedMediaTypeHttpException' => $vendorDir . '/symfony/http-kernel/Exception/UnsupportedMediaTypeHttpException.php', 'Symfony\\Component\\HttpKernel\\Fragment\\AbstractSurrogateFragmentRenderer' => $vendorDir . '/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php', 'Symfony\\Component\\HttpKernel\\Fragment\\EsiFragmentRenderer' => $vendorDir . '/symfony/http-kernel/Fragment/EsiFragmentRenderer.php', 'Symfony\\Component\\HttpKernel\\Fragment\\FragmentHandler' => $vendorDir . '/symfony/http-kernel/Fragment/FragmentHandler.php', 'Symfony\\Component\\HttpKernel\\Fragment\\FragmentRendererInterface' => $vendorDir . '/symfony/http-kernel/Fragment/FragmentRendererInterface.php', + 'Symfony\\Component\\HttpKernel\\Fragment\\FragmentUriGenerator' => $vendorDir . '/symfony/http-kernel/Fragment/FragmentUriGenerator.php', + 'Symfony\\Component\\HttpKernel\\Fragment\\FragmentUriGeneratorInterface' => $vendorDir . '/symfony/http-kernel/Fragment/FragmentUriGeneratorInterface.php', 'Symfony\\Component\\HttpKernel\\Fragment\\HIncludeFragmentRenderer' => $vendorDir . '/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php', 'Symfony\\Component\\HttpKernel\\Fragment\\InlineFragmentRenderer' => $vendorDir . '/symfony/http-kernel/Fragment/InlineFragmentRenderer.php', 'Symfony\\Component\\HttpKernel\\Fragment\\RoutableFragmentRenderer' => $vendorDir . '/symfony/http-kernel/Fragment/RoutableFragmentRenderer.php', @@ -3861,6 +4599,11 @@ return array( 'Symfony\\Component\\Mime\\Address' => $vendorDir . '/symfony/mime/Address.php', 'Symfony\\Component\\Mime\\BodyRendererInterface' => $vendorDir . '/symfony/mime/BodyRendererInterface.php', 'Symfony\\Component\\Mime\\CharacterStream' => $vendorDir . '/symfony/mime/CharacterStream.php', + 'Symfony\\Component\\Mime\\Crypto\\DkimOptions' => $vendorDir . '/symfony/mime/Crypto/DkimOptions.php', + 'Symfony\\Component\\Mime\\Crypto\\DkimSigner' => $vendorDir . '/symfony/mime/Crypto/DkimSigner.php', + 'Symfony\\Component\\Mime\\Crypto\\SMime' => $vendorDir . '/symfony/mime/Crypto/SMime.php', + 'Symfony\\Component\\Mime\\Crypto\\SMimeEncrypter' => $vendorDir . '/symfony/mime/Crypto/SMimeEncrypter.php', + 'Symfony\\Component\\Mime\\Crypto\\SMimeSigner' => $vendorDir . '/symfony/mime/Crypto/SMimeSigner.php', 'Symfony\\Component\\Mime\\DependencyInjection\\AddMimeTypeGuesserPass' => $vendorDir . '/symfony/mime/DependencyInjection/AddMimeTypeGuesserPass.php', 'Symfony\\Component\\Mime\\Email' => $vendorDir . '/symfony/mime/Email.php', 'Symfony\\Component\\Mime\\Encoder\\AddressEncoderInterface' => $vendorDir . '/symfony/mime/Encoder/AddressEncoderInterface.php', @@ -3899,7 +4642,6 @@ return array( 'Symfony\\Component\\Mime\\MimeTypeGuesserInterface' => $vendorDir . '/symfony/mime/MimeTypeGuesserInterface.php', 'Symfony\\Component\\Mime\\MimeTypes' => $vendorDir . '/symfony/mime/MimeTypes.php', 'Symfony\\Component\\Mime\\MimeTypesInterface' => $vendorDir . '/symfony/mime/MimeTypesInterface.php', - 'Symfony\\Component\\Mime\\NamedAddress' => $vendorDir . '/symfony/mime/NamedAddress.php', 'Symfony\\Component\\Mime\\Part\\AbstractMultipartPart' => $vendorDir . '/symfony/mime/Part/AbstractMultipartPart.php', 'Symfony\\Component\\Mime\\Part\\AbstractPart' => $vendorDir . '/symfony/mime/Part/AbstractPart.php', 'Symfony\\Component\\Mime\\Part\\DataPart' => $vendorDir . '/symfony/mime/Part/DataPart.php', @@ -3909,8 +4651,15 @@ return array( 'Symfony\\Component\\Mime\\Part\\Multipart\\FormDataPart' => $vendorDir . '/symfony/mime/Part/Multipart/FormDataPart.php', 'Symfony\\Component\\Mime\\Part\\Multipart\\MixedPart' => $vendorDir . '/symfony/mime/Part/Multipart/MixedPart.php', 'Symfony\\Component\\Mime\\Part\\Multipart\\RelatedPart' => $vendorDir . '/symfony/mime/Part/Multipart/RelatedPart.php', + 'Symfony\\Component\\Mime\\Part\\SMimePart' => $vendorDir . '/symfony/mime/Part/SMimePart.php', 'Symfony\\Component\\Mime\\Part\\TextPart' => $vendorDir . '/symfony/mime/Part/TextPart.php', 'Symfony\\Component\\Mime\\RawMessage' => $vendorDir . '/symfony/mime/RawMessage.php', + 'Symfony\\Component\\Mime\\Test\\Constraint\\EmailAddressContains' => $vendorDir . '/symfony/mime/Test/Constraint/EmailAddressContains.php', + 'Symfony\\Component\\Mime\\Test\\Constraint\\EmailAttachmentCount' => $vendorDir . '/symfony/mime/Test/Constraint/EmailAttachmentCount.php', + 'Symfony\\Component\\Mime\\Test\\Constraint\\EmailHasHeader' => $vendorDir . '/symfony/mime/Test/Constraint/EmailHasHeader.php', + 'Symfony\\Component\\Mime\\Test\\Constraint\\EmailHeaderSame' => $vendorDir . '/symfony/mime/Test/Constraint/EmailHeaderSame.php', + 'Symfony\\Component\\Mime\\Test\\Constraint\\EmailHtmlBodyContains' => $vendorDir . '/symfony/mime/Test/Constraint/EmailHtmlBodyContains.php', + 'Symfony\\Component\\Mime\\Test\\Constraint\\EmailTextBodyContains' => $vendorDir . '/symfony/mime/Test/Constraint/EmailTextBodyContains.php', 'Symfony\\Component\\OptionsResolver\\Debug\\OptionsResolverIntrospector' => $vendorDir . '/symfony/options-resolver/Debug/OptionsResolverIntrospector.php', 'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => $vendorDir . '/symfony/options-resolver/Exception/AccessException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/options-resolver/Exception/ExceptionInterface.php', @@ -3921,6 +4670,7 @@ return array( 'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => $vendorDir . '/symfony/options-resolver/Exception/NoSuchOptionException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => $vendorDir . '/symfony/options-resolver/Exception/OptionDefinitionException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/UndefinedOptionsException.php', + 'Symfony\\Component\\OptionsResolver\\OptionConfigurator' => $vendorDir . '/symfony/options-resolver/OptionConfigurator.php', 'Symfony\\Component\\OptionsResolver\\Options' => $vendorDir . '/symfony/options-resolver/Options.php', 'Symfony\\Component\\OptionsResolver\\OptionsResolver' => $vendorDir . '/symfony/options-resolver/OptionsResolver.php', 'Symfony\\Component\\Process\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/process/Exception/ExceptionInterface.php', @@ -3940,40 +4690,46 @@ return array( 'Symfony\\Component\\Process\\Pipes\\WindowsPipes' => $vendorDir . '/symfony/process/Pipes/WindowsPipes.php', 'Symfony\\Component\\Process\\Process' => $vendorDir . '/symfony/process/Process.php', 'Symfony\\Component\\Process\\ProcessUtils' => $vendorDir . '/symfony/process/ProcessUtils.php', + 'Symfony\\Component\\Routing\\Alias' => $vendorDir . '/symfony/routing/Alias.php', 'Symfony\\Component\\Routing\\Annotation\\Route' => $vendorDir . '/symfony/routing/Annotation/Route.php', 'Symfony\\Component\\Routing\\CompiledRoute' => $vendorDir . '/symfony/routing/CompiledRoute.php', 'Symfony\\Component\\Routing\\DependencyInjection\\RoutingResolverPass' => $vendorDir . '/symfony/routing/DependencyInjection/RoutingResolverPass.php', 'Symfony\\Component\\Routing\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/routing/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Routing\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/routing/Exception/InvalidArgumentException.php', 'Symfony\\Component\\Routing\\Exception\\InvalidParameterException' => $vendorDir . '/symfony/routing/Exception/InvalidParameterException.php', 'Symfony\\Component\\Routing\\Exception\\MethodNotAllowedException' => $vendorDir . '/symfony/routing/Exception/MethodNotAllowedException.php', 'Symfony\\Component\\Routing\\Exception\\MissingMandatoryParametersException' => $vendorDir . '/symfony/routing/Exception/MissingMandatoryParametersException.php', 'Symfony\\Component\\Routing\\Exception\\NoConfigurationException' => $vendorDir . '/symfony/routing/Exception/NoConfigurationException.php', 'Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException' => $vendorDir . '/symfony/routing/Exception/ResourceNotFoundException.php', + 'Symfony\\Component\\Routing\\Exception\\RouteCircularReferenceException' => $vendorDir . '/symfony/routing/Exception/RouteCircularReferenceException.php', 'Symfony\\Component\\Routing\\Exception\\RouteNotFoundException' => $vendorDir . '/symfony/routing/Exception/RouteNotFoundException.php', + 'Symfony\\Component\\Routing\\Exception\\RuntimeException' => $vendorDir . '/symfony/routing/Exception/RuntimeException.php', 'Symfony\\Component\\Routing\\Generator\\CompiledUrlGenerator' => $vendorDir . '/symfony/routing/Generator/CompiledUrlGenerator.php', 'Symfony\\Component\\Routing\\Generator\\ConfigurableRequirementsInterface' => $vendorDir . '/symfony/routing/Generator/ConfigurableRequirementsInterface.php', 'Symfony\\Component\\Routing\\Generator\\Dumper\\CompiledUrlGeneratorDumper' => $vendorDir . '/symfony/routing/Generator/Dumper/CompiledUrlGeneratorDumper.php', 'Symfony\\Component\\Routing\\Generator\\Dumper\\GeneratorDumper' => $vendorDir . '/symfony/routing/Generator/Dumper/GeneratorDumper.php', 'Symfony\\Component\\Routing\\Generator\\Dumper\\GeneratorDumperInterface' => $vendorDir . '/symfony/routing/Generator/Dumper/GeneratorDumperInterface.php', - 'Symfony\\Component\\Routing\\Generator\\Dumper\\PhpGeneratorDumper' => $vendorDir . '/symfony/routing/Generator/Dumper/PhpGeneratorDumper.php', 'Symfony\\Component\\Routing\\Generator\\UrlGenerator' => $vendorDir . '/symfony/routing/Generator/UrlGenerator.php', 'Symfony\\Component\\Routing\\Generator\\UrlGeneratorInterface' => $vendorDir . '/symfony/routing/Generator/UrlGeneratorInterface.php', 'Symfony\\Component\\Routing\\Loader\\AnnotationClassLoader' => $vendorDir . '/symfony/routing/Loader/AnnotationClassLoader.php', 'Symfony\\Component\\Routing\\Loader\\AnnotationDirectoryLoader' => $vendorDir . '/symfony/routing/Loader/AnnotationDirectoryLoader.php', 'Symfony\\Component\\Routing\\Loader\\AnnotationFileLoader' => $vendorDir . '/symfony/routing/Loader/AnnotationFileLoader.php', 'Symfony\\Component\\Routing\\Loader\\ClosureLoader' => $vendorDir . '/symfony/routing/Loader/ClosureLoader.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\AliasConfigurator' => $vendorDir . '/symfony/routing/Loader/Configurator/AliasConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\CollectionConfigurator' => $vendorDir . '/symfony/routing/Loader/Configurator/CollectionConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\ImportConfigurator' => $vendorDir . '/symfony/routing/Loader/Configurator/ImportConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\RouteConfigurator' => $vendorDir . '/symfony/routing/Loader/Configurator/RouteConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\RoutingConfigurator' => $vendorDir . '/symfony/routing/Loader/Configurator/RoutingConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\AddTrait' => $vendorDir . '/symfony/routing/Loader/Configurator/Traits/AddTrait.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\HostTrait' => $vendorDir . '/symfony/routing/Loader/Configurator/Traits/HostTrait.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\LocalizedRouteTrait' => $vendorDir . '/symfony/routing/Loader/Configurator/Traits/LocalizedRouteTrait.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\PrefixTrait' => $vendorDir . '/symfony/routing/Loader/Configurator/Traits/PrefixTrait.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\RouteTrait' => $vendorDir . '/symfony/routing/Loader/Configurator/Traits/RouteTrait.php', - 'Symfony\\Component\\Routing\\Loader\\DependencyInjection\\ServiceRouterLoader' => $vendorDir . '/symfony/routing/Loader/DependencyInjection/ServiceRouterLoader.php', + 'Symfony\\Component\\Routing\\Loader\\ContainerLoader' => $vendorDir . '/symfony/routing/Loader/ContainerLoader.php', 'Symfony\\Component\\Routing\\Loader\\DirectoryLoader' => $vendorDir . '/symfony/routing/Loader/DirectoryLoader.php', 'Symfony\\Component\\Routing\\Loader\\GlobFileLoader' => $vendorDir . '/symfony/routing/Loader/GlobFileLoader.php', - 'Symfony\\Component\\Routing\\Loader\\ObjectRouteLoader' => $vendorDir . '/symfony/routing/Loader/ObjectRouteLoader.php', + 'Symfony\\Component\\Routing\\Loader\\ObjectLoader' => $vendorDir . '/symfony/routing/Loader/ObjectLoader.php', 'Symfony\\Component\\Routing\\Loader\\PhpFileLoader' => $vendorDir . '/symfony/routing/Loader/PhpFileLoader.php', - 'Symfony\\Component\\Routing\\Loader\\ProtectedPhpFileLoader' => $vendorDir . '/symfony/routing/Loader/PhpFileLoader.php', 'Symfony\\Component\\Routing\\Loader\\XmlFileLoader' => $vendorDir . '/symfony/routing/Loader/XmlFileLoader.php', 'Symfony\\Component\\Routing\\Loader\\YamlFileLoader' => $vendorDir . '/symfony/routing/Loader/YamlFileLoader.php', 'Symfony\\Component\\Routing\\Matcher\\CompiledUrlMatcher' => $vendorDir . '/symfony/routing/Matcher/CompiledUrlMatcher.php', @@ -3981,8 +4737,8 @@ return array( 'Symfony\\Component\\Routing\\Matcher\\Dumper\\CompiledUrlMatcherTrait' => $vendorDir . '/symfony/routing/Matcher/Dumper/CompiledUrlMatcherTrait.php', 'Symfony\\Component\\Routing\\Matcher\\Dumper\\MatcherDumper' => $vendorDir . '/symfony/routing/Matcher/Dumper/MatcherDumper.php', 'Symfony\\Component\\Routing\\Matcher\\Dumper\\MatcherDumperInterface' => $vendorDir . '/symfony/routing/Matcher/Dumper/MatcherDumperInterface.php', - 'Symfony\\Component\\Routing\\Matcher\\Dumper\\PhpMatcherDumper' => $vendorDir . '/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php', 'Symfony\\Component\\Routing\\Matcher\\Dumper\\StaticPrefixCollection' => $vendorDir . '/symfony/routing/Matcher/Dumper/StaticPrefixCollection.php', + 'Symfony\\Component\\Routing\\Matcher\\ExpressionLanguageProvider' => $vendorDir . '/symfony/routing/Matcher/ExpressionLanguageProvider.php', 'Symfony\\Component\\Routing\\Matcher\\RedirectableUrlMatcher' => $vendorDir . '/symfony/routing/Matcher/RedirectableUrlMatcher.php', 'Symfony\\Component\\Routing\\Matcher\\RedirectableUrlMatcherInterface' => $vendorDir . '/symfony/routing/Matcher/RedirectableUrlMatcherInterface.php', 'Symfony\\Component\\Routing\\Matcher\\RequestMatcherInterface' => $vendorDir . '/symfony/routing/Matcher/RequestMatcherInterface.php', @@ -3998,10 +4754,27 @@ return array( 'Symfony\\Component\\Routing\\RouteCompilerInterface' => $vendorDir . '/symfony/routing/RouteCompilerInterface.php', 'Symfony\\Component\\Routing\\Router' => $vendorDir . '/symfony/routing/Router.php', 'Symfony\\Component\\Routing\\RouterInterface' => $vendorDir . '/symfony/routing/RouterInterface.php', + 'Symfony\\Component\\String\\AbstractString' => $vendorDir . '/symfony/string/AbstractString.php', + 'Symfony\\Component\\String\\AbstractUnicodeString' => $vendorDir . '/symfony/string/AbstractUnicodeString.php', + 'Symfony\\Component\\String\\ByteString' => $vendorDir . '/symfony/string/ByteString.php', + 'Symfony\\Component\\String\\CodePointString' => $vendorDir . '/symfony/string/CodePointString.php', + 'Symfony\\Component\\String\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/string/Exception/ExceptionInterface.php', + 'Symfony\\Component\\String\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/string/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\String\\Exception\\RuntimeException' => $vendorDir . '/symfony/string/Exception/RuntimeException.php', + 'Symfony\\Component\\String\\Inflector\\EnglishInflector' => $vendorDir . '/symfony/string/Inflector/EnglishInflector.php', + 'Symfony\\Component\\String\\Inflector\\FrenchInflector' => $vendorDir . '/symfony/string/Inflector/FrenchInflector.php', + 'Symfony\\Component\\String\\Inflector\\InflectorInterface' => $vendorDir . '/symfony/string/Inflector/InflectorInterface.php', + 'Symfony\\Component\\String\\LazyString' => $vendorDir . '/symfony/string/LazyString.php', + 'Symfony\\Component\\String\\Slugger\\AsciiSlugger' => $vendorDir . '/symfony/string/Slugger/AsciiSlugger.php', + 'Symfony\\Component\\String\\Slugger\\SluggerInterface' => $vendorDir . '/symfony/string/Slugger/SluggerInterface.php', + 'Symfony\\Component\\String\\UnicodeString' => $vendorDir . '/symfony/string/UnicodeString.php', 'Symfony\\Component\\Translation\\Catalogue\\AbstractOperation' => $vendorDir . '/symfony/translation/Catalogue/AbstractOperation.php', 'Symfony\\Component\\Translation\\Catalogue\\MergeOperation' => $vendorDir . '/symfony/translation/Catalogue/MergeOperation.php', 'Symfony\\Component\\Translation\\Catalogue\\OperationInterface' => $vendorDir . '/symfony/translation/Catalogue/OperationInterface.php', 'Symfony\\Component\\Translation\\Catalogue\\TargetOperation' => $vendorDir . '/symfony/translation/Catalogue/TargetOperation.php', + 'Symfony\\Component\\Translation\\Command\\TranslationPullCommand' => $vendorDir . '/symfony/translation/Command/TranslationPullCommand.php', + 'Symfony\\Component\\Translation\\Command\\TranslationPushCommand' => $vendorDir . '/symfony/translation/Command/TranslationPushCommand.php', + 'Symfony\\Component\\Translation\\Command\\TranslationTrait' => $vendorDir . '/symfony/translation/Command/TranslationTrait.php', 'Symfony\\Component\\Translation\\Command\\XliffLintCommand' => $vendorDir . '/symfony/translation/Command/XliffLintCommand.php', 'Symfony\\Component\\Translation\\DataCollectorTranslator' => $vendorDir . '/symfony/translation/DataCollectorTranslator.php', 'Symfony\\Component\\Translation\\DataCollector\\TranslationDataCollector' => $vendorDir . '/symfony/translation/DataCollector/TranslationDataCollector.php', @@ -4022,23 +4795,26 @@ return array( 'Symfony\\Component\\Translation\\Dumper\\XliffFileDumper' => $vendorDir . '/symfony/translation/Dumper/XliffFileDumper.php', 'Symfony\\Component\\Translation\\Dumper\\YamlFileDumper' => $vendorDir . '/symfony/translation/Dumper/YamlFileDumper.php', 'Symfony\\Component\\Translation\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/translation/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Translation\\Exception\\IncompleteDsnException' => $vendorDir . '/symfony/translation/Exception/IncompleteDsnException.php', 'Symfony\\Component\\Translation\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/translation/Exception/InvalidArgumentException.php', 'Symfony\\Component\\Translation\\Exception\\InvalidResourceException' => $vendorDir . '/symfony/translation/Exception/InvalidResourceException.php', 'Symfony\\Component\\Translation\\Exception\\LogicException' => $vendorDir . '/symfony/translation/Exception/LogicException.php', + 'Symfony\\Component\\Translation\\Exception\\MissingRequiredOptionException' => $vendorDir . '/symfony/translation/Exception/MissingRequiredOptionException.php', 'Symfony\\Component\\Translation\\Exception\\NotFoundResourceException' => $vendorDir . '/symfony/translation/Exception/NotFoundResourceException.php', + 'Symfony\\Component\\Translation\\Exception\\ProviderException' => $vendorDir . '/symfony/translation/Exception/ProviderException.php', + 'Symfony\\Component\\Translation\\Exception\\ProviderExceptionInterface' => $vendorDir . '/symfony/translation/Exception/ProviderExceptionInterface.php', 'Symfony\\Component\\Translation\\Exception\\RuntimeException' => $vendorDir . '/symfony/translation/Exception/RuntimeException.php', + 'Symfony\\Component\\Translation\\Exception\\UnsupportedSchemeException' => $vendorDir . '/symfony/translation/Exception/UnsupportedSchemeException.php', 'Symfony\\Component\\Translation\\Extractor\\AbstractFileExtractor' => $vendorDir . '/symfony/translation/Extractor/AbstractFileExtractor.php', 'Symfony\\Component\\Translation\\Extractor\\ChainExtractor' => $vendorDir . '/symfony/translation/Extractor/ChainExtractor.php', 'Symfony\\Component\\Translation\\Extractor\\ExtractorInterface' => $vendorDir . '/symfony/translation/Extractor/ExtractorInterface.php', 'Symfony\\Component\\Translation\\Extractor\\PhpExtractor' => $vendorDir . '/symfony/translation/Extractor/PhpExtractor.php', 'Symfony\\Component\\Translation\\Extractor\\PhpStringTokenParser' => $vendorDir . '/symfony/translation/Extractor/PhpStringTokenParser.php', - 'Symfony\\Component\\Translation\\Formatter\\ChoiceMessageFormatterInterface' => $vendorDir . '/symfony/translation/Formatter/ChoiceMessageFormatterInterface.php', 'Symfony\\Component\\Translation\\Formatter\\IntlFormatter' => $vendorDir . '/symfony/translation/Formatter/IntlFormatter.php', 'Symfony\\Component\\Translation\\Formatter\\IntlFormatterInterface' => $vendorDir . '/symfony/translation/Formatter/IntlFormatterInterface.php', 'Symfony\\Component\\Translation\\Formatter\\MessageFormatter' => $vendorDir . '/symfony/translation/Formatter/MessageFormatter.php', 'Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface' => $vendorDir . '/symfony/translation/Formatter/MessageFormatterInterface.php', 'Symfony\\Component\\Translation\\IdentityTranslator' => $vendorDir . '/symfony/translation/IdentityTranslator.php', - 'Symfony\\Component\\Translation\\Interval' => $vendorDir . '/symfony/translation/Interval.php', 'Symfony\\Component\\Translation\\Loader\\ArrayLoader' => $vendorDir . '/symfony/translation/Loader/ArrayLoader.php', 'Symfony\\Component\\Translation\\Loader\\CsvFileLoader' => $vendorDir . '/symfony/translation/Loader/CsvFileLoader.php', 'Symfony\\Component\\Translation\\Loader\\FileLoader' => $vendorDir . '/symfony/translation/Loader/FileLoader.php', @@ -4056,14 +4832,25 @@ return array( 'Symfony\\Component\\Translation\\LoggingTranslator' => $vendorDir . '/symfony/translation/LoggingTranslator.php', 'Symfony\\Component\\Translation\\MessageCatalogue' => $vendorDir . '/symfony/translation/MessageCatalogue.php', 'Symfony\\Component\\Translation\\MessageCatalogueInterface' => $vendorDir . '/symfony/translation/MessageCatalogueInterface.php', - 'Symfony\\Component\\Translation\\MessageSelector' => $vendorDir . '/symfony/translation/MessageSelector.php', 'Symfony\\Component\\Translation\\MetadataAwareInterface' => $vendorDir . '/symfony/translation/MetadataAwareInterface.php', - 'Symfony\\Component\\Translation\\PluralizationRules' => $vendorDir . '/symfony/translation/PluralizationRules.php', + 'Symfony\\Component\\Translation\\Provider\\AbstractProviderFactory' => $vendorDir . '/symfony/translation/Provider/AbstractProviderFactory.php', + 'Symfony\\Component\\Translation\\Provider\\Dsn' => $vendorDir . '/symfony/translation/Provider/Dsn.php', + 'Symfony\\Component\\Translation\\Provider\\FilteringProvider' => $vendorDir . '/symfony/translation/Provider/FilteringProvider.php', + 'Symfony\\Component\\Translation\\Provider\\NullProvider' => $vendorDir . '/symfony/translation/Provider/NullProvider.php', + 'Symfony\\Component\\Translation\\Provider\\NullProviderFactory' => $vendorDir . '/symfony/translation/Provider/NullProviderFactory.php', + 'Symfony\\Component\\Translation\\Provider\\ProviderFactoryInterface' => $vendorDir . '/symfony/translation/Provider/ProviderFactoryInterface.php', + 'Symfony\\Component\\Translation\\Provider\\ProviderInterface' => $vendorDir . '/symfony/translation/Provider/ProviderInterface.php', + 'Symfony\\Component\\Translation\\Provider\\TranslationProviderCollection' => $vendorDir . '/symfony/translation/Provider/TranslationProviderCollection.php', + 'Symfony\\Component\\Translation\\Provider\\TranslationProviderCollectionFactory' => $vendorDir . '/symfony/translation/Provider/TranslationProviderCollectionFactory.php', + 'Symfony\\Component\\Translation\\PseudoLocalizationTranslator' => $vendorDir . '/symfony/translation/PseudoLocalizationTranslator.php', 'Symfony\\Component\\Translation\\Reader\\TranslationReader' => $vendorDir . '/symfony/translation/Reader/TranslationReader.php', 'Symfony\\Component\\Translation\\Reader\\TranslationReaderInterface' => $vendorDir . '/symfony/translation/Reader/TranslationReaderInterface.php', + 'Symfony\\Component\\Translation\\Test\\ProviderFactoryTestCase' => $vendorDir . '/symfony/translation/Test/ProviderFactoryTestCase.php', + 'Symfony\\Component\\Translation\\Test\\ProviderTestCase' => $vendorDir . '/symfony/translation/Test/ProviderTestCase.php', + 'Symfony\\Component\\Translation\\TranslatableMessage' => $vendorDir . '/symfony/translation/TranslatableMessage.php', 'Symfony\\Component\\Translation\\Translator' => $vendorDir . '/symfony/translation/Translator.php', + 'Symfony\\Component\\Translation\\TranslatorBag' => $vendorDir . '/symfony/translation/TranslatorBag.php', 'Symfony\\Component\\Translation\\TranslatorBagInterface' => $vendorDir . '/symfony/translation/TranslatorBagInterface.php', - 'Symfony\\Component\\Translation\\TranslatorInterface' => $vendorDir . '/symfony/translation/TranslatorInterface.php', 'Symfony\\Component\\Translation\\Util\\ArrayConverter' => $vendorDir . '/symfony/translation/Util/ArrayConverter.php', 'Symfony\\Component\\Translation\\Util\\XliffUtils' => $vendorDir . '/symfony/translation/Util/XliffUtils.php', 'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => $vendorDir . '/symfony/translation/Writer/TranslationWriter.php', @@ -4082,14 +4869,19 @@ return array( 'Symfony\\Component\\VarDumper\\Caster\\DsPairStub' => $vendorDir . '/symfony/var-dumper/Caster/DsPairStub.php', 'Symfony\\Component\\VarDumper\\Caster\\EnumStub' => $vendorDir . '/symfony/var-dumper/Caster/EnumStub.php', 'Symfony\\Component\\VarDumper\\Caster\\ExceptionCaster' => $vendorDir . '/symfony/var-dumper/Caster/ExceptionCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\FiberCaster' => $vendorDir . '/symfony/var-dumper/Caster/FiberCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\FrameStub' => $vendorDir . '/symfony/var-dumper/Caster/FrameStub.php', 'Symfony\\Component\\VarDumper\\Caster\\GmpCaster' => $vendorDir . '/symfony/var-dumper/Caster/GmpCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ImagineCaster' => $vendorDir . '/symfony/var-dumper/Caster/ImagineCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ImgStub' => $vendorDir . '/symfony/var-dumper/Caster/ImgStub.php', 'Symfony\\Component\\VarDumper\\Caster\\IntlCaster' => $vendorDir . '/symfony/var-dumper/Caster/IntlCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\LinkStub' => $vendorDir . '/symfony/var-dumper/Caster/LinkStub.php', 'Symfony\\Component\\VarDumper\\Caster\\MemcachedCaster' => $vendorDir . '/symfony/var-dumper/Caster/MemcachedCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\MysqliCaster' => $vendorDir . '/symfony/var-dumper/Caster/MysqliCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\PdoCaster' => $vendorDir . '/symfony/var-dumper/Caster/PdoCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\PgSqlCaster' => $vendorDir . '/symfony/var-dumper/Caster/PgSqlCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ProxyManagerCaster' => $vendorDir . '/symfony/var-dumper/Caster/ProxyManagerCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster' => $vendorDir . '/symfony/var-dumper/Caster/RdKafkaCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\RedisCaster' => $vendorDir . '/symfony/var-dumper/Caster/RedisCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster' => $vendorDir . '/symfony/var-dumper/Caster/ReflectionCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster' => $vendorDir . '/symfony/var-dumper/Caster/ResourceCaster.php', @@ -4097,6 +4889,7 @@ return array( 'Symfony\\Component\\VarDumper\\Caster\\StubCaster' => $vendorDir . '/symfony/var-dumper/Caster/StubCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster' => $vendorDir . '/symfony/var-dumper/Caster/SymfonyCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\TraceStub' => $vendorDir . '/symfony/var-dumper/Caster/TraceStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\UuidCaster' => $vendorDir . '/symfony/var-dumper/Caster/UuidCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\XmlReaderCaster' => $vendorDir . '/symfony/var-dumper/Caster/XmlReaderCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\XmlResourceCaster' => $vendorDir . '/symfony/var-dumper/Caster/XmlResourceCaster.php', 'Symfony\\Component\\VarDumper\\Cloner\\AbstractCloner' => $vendorDir . '/symfony/var-dumper/Cloner/AbstractCloner.php', @@ -4116,6 +4909,7 @@ return array( 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\ContextProviderInterface' => $vendorDir . '/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php', 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\RequestContextProvider' => $vendorDir . '/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php', 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\SourceContextProvider' => $vendorDir . '/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ContextualizedDumper' => $vendorDir . '/symfony/var-dumper/Dumper/ContextualizedDumper.php', 'Symfony\\Component\\VarDumper\\Dumper\\DataDumperInterface' => $vendorDir . '/symfony/var-dumper/Dumper/DataDumperInterface.php', 'Symfony\\Component\\VarDumper\\Dumper\\HtmlDumper' => $vendorDir . '/symfony/var-dumper/Dumper/HtmlDumper.php', 'Symfony\\Component\\VarDumper\\Dumper\\ServerDumper' => $vendorDir . '/symfony/var-dumper/Dumper/ServerDumper.php', @@ -4124,8 +4918,25 @@ return array( 'Symfony\\Component\\VarDumper\\Server\\DumpServer' => $vendorDir . '/symfony/var-dumper/Server/DumpServer.php', 'Symfony\\Component\\VarDumper\\Test\\VarDumperTestTrait' => $vendorDir . '/symfony/var-dumper/Test/VarDumperTestTrait.php', 'Symfony\\Component\\VarDumper\\VarDumper' => $vendorDir . '/symfony/var-dumper/VarDumper.php', + 'Symfony\\Component\\VarExporter\\Exception\\ClassNotFoundException' => $vendorDir . '/symfony/var-exporter/Exception/ClassNotFoundException.php', + 'Symfony\\Component\\VarExporter\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/var-exporter/Exception/ExceptionInterface.php', + 'Symfony\\Component\\VarExporter\\Exception\\NotInstantiableTypeException' => $vendorDir . '/symfony/var-exporter/Exception/NotInstantiableTypeException.php', + 'Symfony\\Component\\VarExporter\\Instantiator' => $vendorDir . '/symfony/var-exporter/Instantiator.php', + 'Symfony\\Component\\VarExporter\\Internal\\Exporter' => $vendorDir . '/symfony/var-exporter/Internal/Exporter.php', + 'Symfony\\Component\\VarExporter\\Internal\\Hydrator' => $vendorDir . '/symfony/var-exporter/Internal/Hydrator.php', + 'Symfony\\Component\\VarExporter\\Internal\\Reference' => $vendorDir . '/symfony/var-exporter/Internal/Reference.php', + 'Symfony\\Component\\VarExporter\\Internal\\Registry' => $vendorDir . '/symfony/var-exporter/Internal/Registry.php', + 'Symfony\\Component\\VarExporter\\Internal\\Values' => $vendorDir . '/symfony/var-exporter/Internal/Values.php', + 'Symfony\\Component\\VarExporter\\VarExporter' => $vendorDir . '/symfony/var-exporter/VarExporter.php', + 'Symfony\\Contracts\\Cache\\CacheInterface' => $vendorDir . '/symfony/cache-contracts/CacheInterface.php', + 'Symfony\\Contracts\\Cache\\CacheTrait' => $vendorDir . '/symfony/cache-contracts/CacheTrait.php', + 'Symfony\\Contracts\\Cache\\CallbackInterface' => $vendorDir . '/symfony/cache-contracts/CallbackInterface.php', + 'Symfony\\Contracts\\Cache\\ItemInterface' => $vendorDir . '/symfony/cache-contracts/ItemInterface.php', + 'Symfony\\Contracts\\Cache\\TagAwareCacheInterface' => $vendorDir . '/symfony/cache-contracts/TagAwareCacheInterface.php', 'Symfony\\Contracts\\EventDispatcher\\Event' => $vendorDir . '/symfony/event-dispatcher-contracts/Event.php', 'Symfony\\Contracts\\EventDispatcher\\EventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher-contracts/EventDispatcherInterface.php', + 'Symfony\\Contracts\\Service\\Attribute\\Required' => $vendorDir . '/symfony/service-contracts/Attribute/Required.php', + 'Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => $vendorDir . '/symfony/service-contracts/Attribute/SubscribedService.php', 'Symfony\\Contracts\\Service\\ResetInterface' => $vendorDir . '/symfony/service-contracts/ResetInterface.php', 'Symfony\\Contracts\\Service\\ServiceLocatorTrait' => $vendorDir . '/symfony/service-contracts/ServiceLocatorTrait.php', 'Symfony\\Contracts\\Service\\ServiceProviderInterface' => $vendorDir . '/symfony/service-contracts/ServiceProviderInterface.php', @@ -4134,14 +4945,24 @@ return array( 'Symfony\\Contracts\\Service\\Test\\ServiceLocatorTest' => $vendorDir . '/symfony/service-contracts/Test/ServiceLocatorTest.php', 'Symfony\\Contracts\\Translation\\LocaleAwareInterface' => $vendorDir . '/symfony/translation-contracts/LocaleAwareInterface.php', 'Symfony\\Contracts\\Translation\\Test\\TranslatorTest' => $vendorDir . '/symfony/translation-contracts/Test/TranslatorTest.php', + 'Symfony\\Contracts\\Translation\\TranslatableInterface' => $vendorDir . '/symfony/translation-contracts/TranslatableInterface.php', 'Symfony\\Contracts\\Translation\\TranslatorInterface' => $vendorDir . '/symfony/translation-contracts/TranslatorInterface.php', 'Symfony\\Contracts\\Translation\\TranslatorTrait' => $vendorDir . '/symfony/translation-contracts/TranslatorTrait.php', 'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php', 'Symfony\\Polyfill\\Iconv\\Iconv' => $vendorDir . '/symfony/polyfill-iconv/Iconv.php', + 'Symfony\\Polyfill\\Intl\\Grapheme\\Grapheme' => $vendorDir . '/symfony/polyfill-intl-grapheme/Grapheme.php', 'Symfony\\Polyfill\\Intl\\Idn\\Idn' => $vendorDir . '/symfony/polyfill-intl-idn/Idn.php', + 'Symfony\\Polyfill\\Intl\\Idn\\Info' => $vendorDir . '/symfony/polyfill-intl-idn/Info.php', + 'Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\DisallowedRanges' => $vendorDir . '/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php', + 'Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\Regex' => $vendorDir . '/symfony/polyfill-intl-idn/Resources/unidata/Regex.php', + 'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Normalizer.php', 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php', 'Symfony\\Polyfill\\Php72\\Php72' => $vendorDir . '/symfony/polyfill-php72/Php72.php', 'Symfony\\Polyfill\\Php73\\Php73' => $vendorDir . '/symfony/polyfill-php73/Php73.php', + 'Symfony\\Polyfill\\Php80\\Php80' => $vendorDir . '/symfony/polyfill-php80/Php80.php', + 'Symfony\\Polyfill\\Php80\\PhpToken' => $vendorDir . '/symfony/polyfill-php80/PhpToken.php', + 'Symfony\\Polyfill\\Php81\\Php81' => $vendorDir . '/symfony/polyfill-php81/Php81.php', + 'Symfony\\Thanks\\Command\\FundCommand' => $vendorDir . '/symfony/thanks/src/Command/FundCommand.php', 'Symfony\\Thanks\\Command\\ThanksCommand' => $vendorDir . '/symfony/thanks/src/Command/ThanksCommand.php', 'Symfony\\Thanks\\GitHubClient' => $vendorDir . '/symfony/thanks/src/GitHubClient.php', 'Symfony\\Thanks\\Thanks' => $vendorDir . '/symfony/thanks/src/Thanks.php', @@ -4164,11 +4985,12 @@ return array( 'TijsVerkoyen\\CssToInlineStyles\\Css\\Property\\Property' => $vendorDir . '/tijsverkoyen/css-to-inline-styles/src/Css/Property/Property.php', 'TijsVerkoyen\\CssToInlineStyles\\Css\\Rule\\Processor' => $vendorDir . '/tijsverkoyen/css-to-inline-styles/src/Css/Rule/Processor.php', 'TijsVerkoyen\\CssToInlineStyles\\Css\\Rule\\Rule' => $vendorDir . '/tijsverkoyen/css-to-inline-styles/src/Css/Rule/Rule.php', - 'UpdateHelper\\ComposerPlugin' => $vendorDir . '/kylekatarnls/update-helper/src/UpdateHelper/ComposerPlugin.php', - 'UpdateHelper\\UpdateHelper' => $vendorDir . '/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelper.php', - 'UpdateHelper\\UpdateHelperInterface' => $vendorDir . '/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelperInterface.php', + 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', 'UsersSeeder' => $baseDir . '/database/seeds/UsersSeeder.php', + 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', 'Webmozart\\Assert\\Assert' => $vendorDir . '/webmozart/assert/src/Assert.php', + 'Webmozart\\Assert\\InvalidArgumentException' => $vendorDir . '/webmozart/assert/src/InvalidArgumentException.php', + 'Webmozart\\Assert\\Mixin' => $vendorDir . '/webmozart/assert/src/Mixin.php', 'Whoops\\Exception\\ErrorException' => $vendorDir . '/filp/whoops/src/Whoops/Exception/ErrorException.php', 'Whoops\\Exception\\Formatter' => $vendorDir . '/filp/whoops/src/Whoops/Exception/Formatter.php', 'Whoops\\Exception\\Frame' => $vendorDir . '/filp/whoops/src/Whoops/Exception/Frame.php', @@ -4187,50 +5009,6 @@ return array( 'Whoops\\Util\\Misc' => $vendorDir . '/filp/whoops/src/Whoops/Util/Misc.php', 'Whoops\\Util\\SystemFacade' => $vendorDir . '/filp/whoops/src/Whoops/Util/SystemFacade.php', 'Whoops\\Util\\TemplateHelper' => $vendorDir . '/filp/whoops/src/Whoops/Util/TemplateHelper.php', - 'XdgBaseDir\\Xdg' => $vendorDir . '/dnoegel/php-xdg-base-dir/src/Xdg.php', - 'Zend\\Diactoros\\AbstractSerializer' => $vendorDir . '/zendframework/zend-diactoros/src/AbstractSerializer.php', - 'Zend\\Diactoros\\CallbackStream' => $vendorDir . '/zendframework/zend-diactoros/src/CallbackStream.php', - 'Zend\\Diactoros\\Exception\\DeserializationException' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/DeserializationException.php', - 'Zend\\Diactoros\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/ExceptionInterface.php', - 'Zend\\Diactoros\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/InvalidArgumentException.php', - 'Zend\\Diactoros\\Exception\\InvalidStreamPointerPositionException' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/InvalidStreamPointerPositionException.php', - 'Zend\\Diactoros\\Exception\\SerializationException' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/SerializationException.php', - 'Zend\\Diactoros\\Exception\\UnreadableStreamException' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/UnreadableStreamException.php', - 'Zend\\Diactoros\\Exception\\UnrecognizedProtocolVersionException' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/UnrecognizedProtocolVersionException.php', - 'Zend\\Diactoros\\Exception\\UnrewindableStreamException' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/UnrewindableStreamException.php', - 'Zend\\Diactoros\\Exception\\UnseekableStreamException' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/UnseekableStreamException.php', - 'Zend\\Diactoros\\Exception\\UntellableStreamException' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/UntellableStreamException.php', - 'Zend\\Diactoros\\Exception\\UnwritableStreamException' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/UnwritableStreamException.php', - 'Zend\\Diactoros\\Exception\\UploadedFileAlreadyMovedException' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/UploadedFileAlreadyMovedException.php', - 'Zend\\Diactoros\\Exception\\UploadedFileErrorException' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/UploadedFileErrorException.php', - 'Zend\\Diactoros\\HeaderSecurity' => $vendorDir . '/zendframework/zend-diactoros/src/HeaderSecurity.php', - 'Zend\\Diactoros\\MessageTrait' => $vendorDir . '/zendframework/zend-diactoros/src/MessageTrait.php', - 'Zend\\Diactoros\\PhpInputStream' => $vendorDir . '/zendframework/zend-diactoros/src/PhpInputStream.php', - 'Zend\\Diactoros\\RelativeStream' => $vendorDir . '/zendframework/zend-diactoros/src/RelativeStream.php', - 'Zend\\Diactoros\\Request' => $vendorDir . '/zendframework/zend-diactoros/src/Request.php', - 'Zend\\Diactoros\\RequestFactory' => $vendorDir . '/zendframework/zend-diactoros/src/RequestFactory.php', - 'Zend\\Diactoros\\RequestTrait' => $vendorDir . '/zendframework/zend-diactoros/src/RequestTrait.php', - 'Zend\\Diactoros\\Request\\ArraySerializer' => $vendorDir . '/zendframework/zend-diactoros/src/Request/ArraySerializer.php', - 'Zend\\Diactoros\\Request\\Serializer' => $vendorDir . '/zendframework/zend-diactoros/src/Request/Serializer.php', - 'Zend\\Diactoros\\Response' => $vendorDir . '/zendframework/zend-diactoros/src/Response.php', - 'Zend\\Diactoros\\ResponseFactory' => $vendorDir . '/zendframework/zend-diactoros/src/ResponseFactory.php', - 'Zend\\Diactoros\\Response\\ArraySerializer' => $vendorDir . '/zendframework/zend-diactoros/src/Response/ArraySerializer.php', - 'Zend\\Diactoros\\Response\\EmptyResponse' => $vendorDir . '/zendframework/zend-diactoros/src/Response/EmptyResponse.php', - 'Zend\\Diactoros\\Response\\HtmlResponse' => $vendorDir . '/zendframework/zend-diactoros/src/Response/HtmlResponse.php', - 'Zend\\Diactoros\\Response\\InjectContentTypeTrait' => $vendorDir . '/zendframework/zend-diactoros/src/Response/InjectContentTypeTrait.php', - 'Zend\\Diactoros\\Response\\JsonResponse' => $vendorDir . '/zendframework/zend-diactoros/src/Response/JsonResponse.php', - 'Zend\\Diactoros\\Response\\RedirectResponse' => $vendorDir . '/zendframework/zend-diactoros/src/Response/RedirectResponse.php', - 'Zend\\Diactoros\\Response\\Serializer' => $vendorDir . '/zendframework/zend-diactoros/src/Response/Serializer.php', - 'Zend\\Diactoros\\Response\\TextResponse' => $vendorDir . '/zendframework/zend-diactoros/src/Response/TextResponse.php', - 'Zend\\Diactoros\\Response\\XmlResponse' => $vendorDir . '/zendframework/zend-diactoros/src/Response/XmlResponse.php', - 'Zend\\Diactoros\\ServerRequest' => $vendorDir . '/zendframework/zend-diactoros/src/ServerRequest.php', - 'Zend\\Diactoros\\ServerRequestFactory' => $vendorDir . '/zendframework/zend-diactoros/src/ServerRequestFactory.php', - 'Zend\\Diactoros\\Stream' => $vendorDir . '/zendframework/zend-diactoros/src/Stream.php', - 'Zend\\Diactoros\\StreamFactory' => $vendorDir . '/zendframework/zend-diactoros/src/StreamFactory.php', - 'Zend\\Diactoros\\UploadedFile' => $vendorDir . '/zendframework/zend-diactoros/src/UploadedFile.php', - 'Zend\\Diactoros\\UploadedFileFactory' => $vendorDir . '/zendframework/zend-diactoros/src/UploadedFileFactory.php', - 'Zend\\Diactoros\\Uri' => $vendorDir . '/zendframework/zend-diactoros/src/Uri.php', - 'Zend\\Diactoros\\UriFactory' => $vendorDir . '/zendframework/zend-diactoros/src/UriFactory.php', 'phpDocumentor\\Reflection\\DocBlock' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock.php', 'phpDocumentor\\Reflection\\DocBlockFactory' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlockFactory.php', 'phpDocumentor\\Reflection\\DocBlockFactoryInterface' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php', @@ -4247,11 +5025,11 @@ return array( 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Deprecated' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Example' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Factory\\StaticMethod' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php', - 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Factory\\Strategy' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Strategy.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Formatter' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Formatter\\AlignFormatter' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Formatter\\PassthroughFormatter' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Generic' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tags\\InvalidTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/InvalidTag.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Link' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Method' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Param' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php', @@ -4265,29 +5043,56 @@ return array( 'phpDocumentor\\Reflection\\DocBlock\\Tags\\See' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Since' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Source' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tags\\TagWithType' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/TagWithType.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Throws' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Uses' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Var_' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Version' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php', 'phpDocumentor\\Reflection\\Element' => $vendorDir . '/phpdocumentor/reflection-common/src/Element.php', + 'phpDocumentor\\Reflection\\Exception\\PcreException' => $vendorDir . '/phpdocumentor/reflection-docblock/src/Exception/PcreException.php', 'phpDocumentor\\Reflection\\File' => $vendorDir . '/phpdocumentor/reflection-common/src/File.php', 'phpDocumentor\\Reflection\\Fqsen' => $vendorDir . '/phpdocumentor/reflection-common/src/Fqsen.php', 'phpDocumentor\\Reflection\\FqsenResolver' => $vendorDir . '/phpdocumentor/type-resolver/src/FqsenResolver.php', 'phpDocumentor\\Reflection\\Location' => $vendorDir . '/phpdocumentor/reflection-common/src/Location.php', 'phpDocumentor\\Reflection\\Project' => $vendorDir . '/phpdocumentor/reflection-common/src/Project.php', 'phpDocumentor\\Reflection\\ProjectFactory' => $vendorDir . '/phpdocumentor/reflection-common/src/ProjectFactory.php', + 'phpDocumentor\\Reflection\\PseudoType' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoType.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\CallableString' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/CallableString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\False_' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/False_.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\HtmlEscapedString' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/HtmlEscapedString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\IntegerRange' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/IntegerRange.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\List_' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/List_.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\LiteralString' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/LiteralString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\LowercaseString' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/LowercaseString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\NegativeInteger' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/NegativeInteger.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\NonEmptyLowercaseString' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyLowercaseString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\NonEmptyString' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\NumericString' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/NumericString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\Numeric_' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/Numeric_.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\PositiveInteger' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/PositiveInteger.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\TraitString' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/TraitString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\True_' => $vendorDir . '/phpdocumentor/type-resolver/src/PseudoTypes/True_.php', 'phpDocumentor\\Reflection\\Type' => $vendorDir . '/phpdocumentor/type-resolver/src/Type.php', 'phpDocumentor\\Reflection\\TypeResolver' => $vendorDir . '/phpdocumentor/type-resolver/src/TypeResolver.php', + 'phpDocumentor\\Reflection\\Types\\AbstractList' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/AbstractList.php', + 'phpDocumentor\\Reflection\\Types\\AggregatedType' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/AggregatedType.php', + 'phpDocumentor\\Reflection\\Types\\ArrayKey' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/ArrayKey.php', 'phpDocumentor\\Reflection\\Types\\Array_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Array_.php', 'phpDocumentor\\Reflection\\Types\\Boolean' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Boolean.php', 'phpDocumentor\\Reflection\\Types\\Callable_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Callable_.php', + 'phpDocumentor\\Reflection\\Types\\ClassString' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/ClassString.php', + 'phpDocumentor\\Reflection\\Types\\Collection' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Collection.php', 'phpDocumentor\\Reflection\\Types\\Compound' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Compound.php', 'phpDocumentor\\Reflection\\Types\\Context' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Context.php', 'phpDocumentor\\Reflection\\Types\\ContextFactory' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/ContextFactory.php', + 'phpDocumentor\\Reflection\\Types\\Expression' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Expression.php', 'phpDocumentor\\Reflection\\Types\\Float_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Float_.php', 'phpDocumentor\\Reflection\\Types\\Integer' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Integer.php', + 'phpDocumentor\\Reflection\\Types\\InterfaceString' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/InterfaceString.php', + 'phpDocumentor\\Reflection\\Types\\Intersection' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Intersection.php', 'phpDocumentor\\Reflection\\Types\\Iterable_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Iterable_.php', 'phpDocumentor\\Reflection\\Types\\Mixed_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Mixed_.php', + 'phpDocumentor\\Reflection\\Types\\Never_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Never_.php', 'phpDocumentor\\Reflection\\Types\\Null_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Null_.php', 'phpDocumentor\\Reflection\\Types\\Nullable' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Nullable.php', 'phpDocumentor\\Reflection\\Types\\Object_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Object_.php', @@ -4299,4 +5104,6 @@ return array( 'phpDocumentor\\Reflection\\Types\\String_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/String_.php', 'phpDocumentor\\Reflection\\Types\\This' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/This.php', 'phpDocumentor\\Reflection\\Types\\Void_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Void_.php', + 'phpDocumentor\\Reflection\\Utils' => $vendorDir . '/phpdocumentor/reflection-docblock/src/Utils.php', + 'voku\\helper\\ASCII' => $vendorDir . '/voku/portable-ascii/src/voku/helper/ASCII.php', ); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index 07ee10eb..00b4b5fb 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -6,31 +6,30 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( + 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', + '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', + 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', '25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php', 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', - '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php', - '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', - 'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php', - '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', - 'cf97c57bfe0f23854afd2f3818abb7a0' => $vendorDir . '/zendframework/zend-diactoros/src/functions/create_uploaded_file.php', - '9bf37a3d0dad93e29cb4e1b1bfab04e9' => $vendorDir . '/zendframework/zend-diactoros/src/functions/marshal_headers_from_sapi.php', - 'ce70dccb4bcc2efc6e94d2ee526e6972' => $vendorDir . '/zendframework/zend-diactoros/src/functions/marshal_method_from_sapi.php', - 'f86420df471f14d568bfcb71e271b523' => $vendorDir . '/zendframework/zend-diactoros/src/functions/marshal_protocol_version_from_sapi.php', - 'b87481e008a3700344428ae089e7f9e5' => $vendorDir . '/zendframework/zend-diactoros/src/functions/marshal_uri_from_sapi.php', - '0b0974a5566a1077e4f2e111341112c1' => $vendorDir . '/zendframework/zend-diactoros/src/functions/normalize_server.php', - '1ca3bc274755662169f9629d5412a1da' => $vendorDir . '/zendframework/zend-diactoros/src/functions/normalize_uploaded_files.php', - '40360c0b9b437e69bcbb7f1349ce029e' => $vendorDir . '/zendframework/zend-diactoros/src/functions/parse_cookie_header.php', + '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php', + '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', + '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', '9c67151ae59aff4788964ce8eb2a0f43' => $vendorDir . '/clue/stream-filter/src/functions_include.php', + '8cff32064859f4559445b89279f3199c' => $vendorDir . '/php-http/message/src/filters.php', 'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php', - '8cff32064859f4559445b89279f3199c' => $vendorDir . '/php-http/message/src/filters.php', + '801c31d8ed748cfa537fa45402288c95' => $vendorDir . '/psy/psysh/src/functions.php', 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php', '2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php', + '23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php', + 'a1105708a18b76903365ca1c4aa61b02' => $vendorDir . '/symfony/translation/Resources/functions.php', + '8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php', '6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', '538ca81a9a966a6716601ecf48f4eaef' => $vendorDir . '/opis/closure/functions.php', - '801c31d8ed748cfa537fa45402288c95' => $vendorDir . '/psy/psysh/src/functions.php', + 'e39a8b23c42d4e1452234d762b03835a' => $vendorDir . '/ramsey/uuid/src/functions.php', + 'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php', 'f0906e6318348a765ffb6eb24e0d0938' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/helpers.php', '58571171fd5812e6e447dce228f52f4d' => $vendorDir . '/laravel/framework/src/Illuminate/Support/helpers.php', 'f18cc91337d49233e5754e93f3ed9ec3' => $vendorDir . '/laravelcollective/html/src/helpers.php', diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php index 7ae47477..631bf71b 100644 --- a/vendor/composer/autoload_namespaces.php +++ b/vendor/composer/autoload_namespaces.php @@ -6,8 +6,5 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - 'UpdateHelper\\' => array($vendorDir . '/kylekatarnls/update-helper/src'), - 'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src'), - 'Parsedown' => array($vendorDir . '/erusev/parsedown'), 'Mockery' => array($vendorDir . '/mockery/mockery/library'), ); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index f0e88c05..0e0a7d32 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -6,25 +6,31 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( + 'voku\\' => array($vendorDir . '/voku/portable-ascii/src/voku'), 'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/type-resolver/src'), - 'Zend\\Diactoros\\' => array($vendorDir . '/zendframework/zend-diactoros/src'), - 'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'), 'Whoops\\' => array($vendorDir . '/filp/whoops/src/Whoops'), 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), 'TijsVerkoyen\\CssToInlineStyles\\' => array($vendorDir . '/tijsverkoyen/css-to-inline-styles/src'), 'Tests\\' => array($baseDir . '/tests'), 'Symfony\\Thanks\\' => array($vendorDir . '/symfony/thanks/src'), + 'Symfony\\Polyfill\\Php81\\' => array($vendorDir . '/symfony/polyfill-php81'), + 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), 'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'), 'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'), 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), + 'Symfony\\Polyfill\\Intl\\Normalizer\\' => array($vendorDir . '/symfony/polyfill-intl-normalizer'), 'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'), + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => array($vendorDir . '/symfony/polyfill-intl-grapheme'), 'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'), 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), 'Symfony\\Contracts\\Translation\\' => array($vendorDir . '/symfony/translation-contracts'), 'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'), 'Symfony\\Contracts\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher-contracts'), + 'Symfony\\Contracts\\Cache\\' => array($vendorDir . '/symfony/cache-contracts'), + 'Symfony\\Component\\VarExporter\\' => array($vendorDir . '/symfony/var-exporter'), 'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'), 'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'), + 'Symfony\\Component\\String\\' => array($vendorDir . '/symfony/string'), 'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'), 'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'), 'Symfony\\Component\\OptionsResolver\\' => array($vendorDir . '/symfony/options-resolver'), @@ -33,52 +39,58 @@ return array( 'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'), 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), 'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'), - 'Symfony\\Component\\Debug\\' => array($vendorDir . '/symfony/debug'), + 'Symfony\\Component\\ErrorHandler\\' => array($vendorDir . '/symfony/error-handler'), 'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'), 'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), + 'Symfony\\Component\\Cache\\' => array($vendorDir . '/symfony/cache'), 'Ramsey\\Uuid\\' => array($vendorDir . '/ramsey/uuid/src'), + 'Ramsey\\Collection\\' => array($vendorDir . '/ramsey/collection/src'), 'Psy\\' => array($vendorDir . '/psy/psysh/src'), 'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'), + 'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'), + 'Psr\\EventDispatcher\\' => array($vendorDir . '/psr/event-dispatcher/src'), 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), + 'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src/Prophecy'), 'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'), + 'PhpOption\\' => array($vendorDir . '/phpoption/phpoption/src/PhpOption'), 'Opis\\Closure\\' => array($vendorDir . '/opis/closure/src'), - 'Nexmo\\' => array($vendorDir . '/nexmo/client/src'), 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), + 'League\\MimeTypeDetection\\' => array($vendorDir . '/league/mime-type-detection/src'), 'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'), - 'Lcobucci\\JWT\\' => array($vendorDir . '/lcobucci/jwt/src'), + 'League\\CommonMark\\' => array($vendorDir . '/league/commonmark/src'), + 'Laravel\\Ui\\' => array($vendorDir . '/laravel/ui/src'), 'Laravel\\Tinker\\' => array($vendorDir . '/laravel/tinker/src'), - 'JakubOnderka\\PhpConsoleHighlighter\\' => array($vendorDir . '/jakub-onderka/php-console-highlighter/src'), - 'JakubOnderka\\PhpConsoleColor\\' => array($vendorDir . '/jakub-onderka/php-console-color/src'), - 'Illuminate\\Notifications\\' => array($vendorDir . '/laravel/nexmo-notification-channel/src', $vendorDir . '/laravel/slack-notification-channel/src'), + 'Illuminate\\Foundation\\Auth\\' => array($vendorDir . '/laravel/ui/auth-backend'), 'Illuminate\\' => array($vendorDir . '/laravel/framework/src/Illuminate'), 'Http\\Promise\\' => array($vendorDir . '/php-http/promise/src'), + 'Http\\Message\\MultipartStream\\' => array($vendorDir . '/php-http/multipart-stream-builder/src'), 'Http\\Message\\' => array($vendorDir . '/php-http/message/src', $vendorDir . '/php-http/message-factory/src'), 'Http\\Discovery\\' => array($vendorDir . '/php-http/discovery/src'), 'Http\\Client\\Common\\Plugin\\' => array($vendorDir . '/php-http/cache-plugin/src'), 'Http\\Client\\Common\\' => array($vendorDir . '/php-http/client-common/src'), 'Http\\Client\\' => array($vendorDir . '/php-http/httplug/src'), - 'Http\\Adapter\\Guzzle6\\' => array($vendorDir . '/php-http/guzzle6-adapter/src'), 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), 'GrahamCampbell\\Manager\\' => array($vendorDir . '/graham-campbell/manager/src'), 'GrahamCampbell\\GitHub\\' => array($vendorDir . '/graham-campbell/github/src'), - 'GrahamCampbell\\CachePlugin\\' => array($vendorDir . '/graham-campbell/cache-plugin/src'), + 'GrahamCampbell\\BoundedCache\\' => array($vendorDir . '/graham-campbell/bounded-cache/src'), 'Github\\' => array($vendorDir . '/knplabs/github-api/lib/Github'), 'Fideloper\\Proxy\\' => array($vendorDir . '/fideloper/proxy/src'), 'Faker\\' => array($vendorDir . '/fzaninotto/faker/src/Faker'), - 'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/EmailValidator'), + 'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/src'), 'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'), 'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'), + 'Doctrine\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector'), 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer'), - 'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector'), 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'), 'Cron\\' => array($vendorDir . '/dragonmantank/cron-expression/src/Cron'), 'Collective\\Html\\' => array($vendorDir . '/laravelcollective/html/src'), 'Clue\\StreamFilter\\' => array($vendorDir . '/clue/stream-filter/src'), + 'Carbon\\' => array($vendorDir . '/nesbot/carbon/src/Carbon'), + 'Brick\\Math\\' => array($vendorDir . '/brick/math/src'), 'App\\' => array($baseDir . '/app'), - '' => array($vendorDir . '/nesbot/carbon/src'), ); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 04d92ec8..8309daae 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -13,19 +13,24 @@ class ComposerAutoloaderInit4b6fb9210a1ea37c2db27b8ff53a1ecf } } + /** + * @return \Composer\Autoload\ClassLoader + */ public static function getLoader() { if (null !== self::$loader) { return self::$loader; } + require __DIR__ . '/platform_check.php'; + spl_autoload_register(array('ComposerAutoloaderInit4b6fb9210a1ea37c2db27b8ff53a1ecf', 'loadClassLoader'), true, true); - self::$loader = $loader = new \Composer\Autoload\ClassLoader(); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); spl_autoload_unregister(array('ComposerAutoloaderInit4b6fb9210a1ea37c2db27b8ff53a1ecf', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { - require_once __DIR__ . '/autoload_static.php'; + require __DIR__ . '/autoload_static.php'; call_user_func(\Composer\Autoload\ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf::getInitializer($loader)); } else { @@ -60,11 +65,16 @@ class ComposerAutoloaderInit4b6fb9210a1ea37c2db27b8ff53a1ecf } } +/** + * @param string $fileIdentifier + * @param string $file + * @return void + */ function composerRequire4b6fb9210a1ea37c2db27b8ff53a1ecf($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - require $file; - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; } } diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 53944c15..dfe33592 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -7,31 +7,30 @@ namespace Composer\Autoload; class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf { public static $files = array ( + 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', + '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', + 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php', 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', - '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php', - '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', - 'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php', - '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', - 'cf97c57bfe0f23854afd2f3818abb7a0' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/functions/create_uploaded_file.php', - '9bf37a3d0dad93e29cb4e1b1bfab04e9' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/functions/marshal_headers_from_sapi.php', - 'ce70dccb4bcc2efc6e94d2ee526e6972' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/functions/marshal_method_from_sapi.php', - 'f86420df471f14d568bfcb71e271b523' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/functions/marshal_protocol_version_from_sapi.php', - 'b87481e008a3700344428ae089e7f9e5' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/functions/marshal_uri_from_sapi.php', - '0b0974a5566a1077e4f2e111341112c1' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/functions/normalize_server.php', - '1ca3bc274755662169f9629d5412a1da' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/functions/normalize_uploaded_files.php', - '40360c0b9b437e69bcbb7f1349ce029e' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/functions/parse_cookie_header.php', + '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php', + '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', + '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', '9c67151ae59aff4788964ce8eb2a0f43' => __DIR__ . '/..' . '/clue/stream-filter/src/functions_include.php', + '8cff32064859f4559445b89279f3199c' => __DIR__ . '/..' . '/php-http/message/src/filters.php', 'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php', - '8cff32064859f4559445b89279f3199c' => __DIR__ . '/..' . '/php-http/message/src/filters.php', + '801c31d8ed748cfa537fa45402288c95' => __DIR__ . '/..' . '/psy/psysh/src/functions.php', 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php', '2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php', + '23c18046f52bef3eea034657bafda50f' => __DIR__ . '/..' . '/symfony/polyfill-php81/bootstrap.php', + 'a1105708a18b76903365ca1c4aa61b02' => __DIR__ . '/..' . '/symfony/translation/Resources/functions.php', + '8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php', '6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', '538ca81a9a966a6716601ecf48f4eaef' => __DIR__ . '/..' . '/opis/closure/functions.php', - '801c31d8ed748cfa537fa45402288c95' => __DIR__ . '/..' . '/psy/psysh/src/functions.php', + 'e39a8b23c42d4e1452234d762b03835a' => __DIR__ . '/..' . '/ramsey/uuid/src/functions.php', + 'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php', 'f0906e6318348a765ffb6eb24e0d0938' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/helpers.php', '58571171fd5812e6e447dce228f52f4d' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/helpers.php', 'f18cc91337d49233e5754e93f3ed9ec3' => __DIR__ . '/..' . '/laravelcollective/html/src/helpers.php', @@ -39,18 +38,14 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf ); public static $prefixLengthsPsr4 = array ( + 'v' => + array ( + 'voku\\' => 5, + ), 'p' => array ( 'phpDocumentor\\Reflection\\' => 25, ), - 'Z' => - array ( - 'Zend\\Diactoros\\' => 15, - ), - 'X' => - array ( - 'XdgBaseDir\\' => 11, - ), 'W' => array ( 'Whoops\\' => 7, @@ -64,17 +59,24 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'S' => array ( 'Symfony\\Thanks\\' => 15, + 'Symfony\\Polyfill\\Php81\\' => 23, + 'Symfony\\Polyfill\\Php80\\' => 23, 'Symfony\\Polyfill\\Php73\\' => 23, 'Symfony\\Polyfill\\Php72\\' => 23, 'Symfony\\Polyfill\\Mbstring\\' => 26, + 'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33, 'Symfony\\Polyfill\\Intl\\Idn\\' => 26, + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => 31, 'Symfony\\Polyfill\\Iconv\\' => 23, 'Symfony\\Polyfill\\Ctype\\' => 23, 'Symfony\\Contracts\\Translation\\' => 30, 'Symfony\\Contracts\\Service\\' => 26, 'Symfony\\Contracts\\EventDispatcher\\' => 34, + 'Symfony\\Contracts\\Cache\\' => 24, + 'Symfony\\Component\\VarExporter\\' => 30, 'Symfony\\Component\\VarDumper\\' => 28, 'Symfony\\Component\\Translation\\' => 30, + 'Symfony\\Component\\String\\' => 25, 'Symfony\\Component\\Routing\\' => 26, 'Symfony\\Component\\Process\\' => 26, 'Symfony\\Component\\OptionsResolver\\' => 34, @@ -83,13 +85,15 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\HttpFoundation\\' => 33, 'Symfony\\Component\\Finder\\' => 25, 'Symfony\\Component\\EventDispatcher\\' => 34, - 'Symfony\\Component\\Debug\\' => 24, + 'Symfony\\Component\\ErrorHandler\\' => 31, 'Symfony\\Component\\CssSelector\\' => 30, 'Symfony\\Component\\Console\\' => 26, + 'Symfony\\Component\\Cache\\' => 24, ), 'R' => array ( 'Ramsey\\Uuid\\' => 12, + 'Ramsey\\Collection\\' => 18, ), 'P' => array ( @@ -97,47 +101,44 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Psr\\SimpleCache\\' => 16, 'Psr\\Log\\' => 8, 'Psr\\Http\\Message\\' => 17, + 'Psr\\Http\\Client\\' => 16, + 'Psr\\EventDispatcher\\' => 20, 'Psr\\Container\\' => 14, 'Psr\\Cache\\' => 10, + 'Prophecy\\' => 9, 'PhpParser\\' => 10, + 'PhpOption\\' => 10, ), 'O' => array ( 'Opis\\Closure\\' => 13, ), - 'N' => - array ( - 'Nexmo\\' => 6, - ), 'M' => array ( 'Monolog\\' => 8, ), 'L' => array ( + 'League\\MimeTypeDetection\\' => 25, 'League\\Flysystem\\' => 17, - 'Lcobucci\\JWT\\' => 13, + 'League\\CommonMark\\' => 18, + 'Laravel\\Ui\\' => 11, 'Laravel\\Tinker\\' => 15, ), - 'J' => - array ( - 'JakubOnderka\\PhpConsoleHighlighter\\' => 35, - 'JakubOnderka\\PhpConsoleColor\\' => 29, - ), 'I' => array ( - 'Illuminate\\Notifications\\' => 25, + 'Illuminate\\Foundation\\Auth\\' => 27, 'Illuminate\\' => 11, ), 'H' => array ( 'Http\\Promise\\' => 13, + 'Http\\Message\\MultipartStream\\' => 29, 'Http\\Message\\' => 13, 'Http\\Discovery\\' => 15, 'Http\\Client\\Common\\Plugin\\' => 26, 'Http\\Client\\Common\\' => 19, 'Http\\Client\\' => 12, - 'Http\\Adapter\\Guzzle6\\' => 21, ), 'G' => array ( @@ -146,7 +147,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'GuzzleHttp\\' => 11, 'GrahamCampbell\\Manager\\' => 23, 'GrahamCampbell\\GitHub\\' => 22, - 'GrahamCampbell\\CachePlugin\\' => 27, + 'GrahamCampbell\\BoundedCache\\' => 28, 'Github\\' => 7, ), 'F' => @@ -162,8 +163,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf array ( 'Dotenv\\' => 7, 'Doctrine\\Instantiator\\' => 22, + 'Doctrine\\Inflector\\' => 19, 'Doctrine\\Common\\Lexer\\' => 22, - 'Doctrine\\Common\\Inflector\\' => 26, 'DeepCopy\\' => 9, ), 'C' => @@ -171,6 +172,11 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Cron\\' => 5, 'Collective\\Html\\' => 16, 'Clue\\StreamFilter\\' => 18, + 'Carbon\\' => 7, + ), + 'B' => + array ( + 'Brick\\Math\\' => 11, ), 'A' => array ( @@ -179,20 +185,16 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf ); public static $prefixDirsPsr4 = array ( + 'voku\\' => + array ( + 0 => __DIR__ . '/..' . '/voku/portable-ascii/src/voku', + ), 'phpDocumentor\\Reflection\\' => array ( 0 => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src', 1 => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src', 2 => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src', ), - 'Zend\\Diactoros\\' => - array ( - 0 => __DIR__ . '/..' . '/zendframework/zend-diactoros/src', - ), - 'XdgBaseDir\\' => - array ( - 0 => __DIR__ . '/..' . '/dnoegel/php-xdg-base-dir/src', - ), 'Whoops\\' => array ( 0 => __DIR__ . '/..' . '/filp/whoops/src/Whoops', @@ -213,6 +215,14 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf array ( 0 => __DIR__ . '/..' . '/symfony/thanks/src', ), + 'Symfony\\Polyfill\\Php81\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php81', + ), + 'Symfony\\Polyfill\\Php80\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php80', + ), 'Symfony\\Polyfill\\Php73\\' => array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-php73', @@ -225,10 +235,18 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', ), + 'Symfony\\Polyfill\\Intl\\Normalizer\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer', + ), 'Symfony\\Polyfill\\Intl\\Idn\\' => array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-idn', ), + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme', + ), 'Symfony\\Polyfill\\Iconv\\' => array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-iconv', @@ -249,6 +267,14 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf array ( 0 => __DIR__ . '/..' . '/symfony/event-dispatcher-contracts', ), + 'Symfony\\Contracts\\Cache\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/cache-contracts', + ), + 'Symfony\\Component\\VarExporter\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/var-exporter', + ), 'Symfony\\Component\\VarDumper\\' => array ( 0 => __DIR__ . '/..' . '/symfony/var-dumper', @@ -257,6 +283,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf array ( 0 => __DIR__ . '/..' . '/symfony/translation', ), + 'Symfony\\Component\\String\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/string', + ), 'Symfony\\Component\\Routing\\' => array ( 0 => __DIR__ . '/..' . '/symfony/routing', @@ -289,9 +319,9 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf array ( 0 => __DIR__ . '/..' . '/symfony/event-dispatcher', ), - 'Symfony\\Component\\Debug\\' => + 'Symfony\\Component\\ErrorHandler\\' => array ( - 0 => __DIR__ . '/..' . '/symfony/debug', + 0 => __DIR__ . '/..' . '/symfony/error-handler', ), 'Symfony\\Component\\CssSelector\\' => array ( @@ -301,10 +331,18 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf array ( 0 => __DIR__ . '/..' . '/symfony/console', ), + 'Symfony\\Component\\Cache\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/cache', + ), 'Ramsey\\Uuid\\' => array ( 0 => __DIR__ . '/..' . '/ramsey/uuid/src', ), + 'Ramsey\\Collection\\' => + array ( + 0 => __DIR__ . '/..' . '/ramsey/collection/src', + ), 'Psy\\' => array ( 0 => __DIR__ . '/..' . '/psy/psysh/src', @@ -322,6 +360,14 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 0 => __DIR__ . '/..' . '/psr/http-factory/src', 1 => __DIR__ . '/..' . '/psr/http-message/src', ), + 'Psr\\Http\\Client\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/http-client/src', + ), + 'Psr\\EventDispatcher\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/event-dispatcher/src', + ), 'Psr\\Container\\' => array ( 0 => __DIR__ . '/..' . '/psr/container/src', @@ -330,46 +376,49 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf array ( 0 => __DIR__ . '/..' . '/psr/cache/src', ), + 'Prophecy\\' => + array ( + 0 => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy', + ), 'PhpParser\\' => array ( 0 => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser', ), + 'PhpOption\\' => + array ( + 0 => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption', + ), 'Opis\\Closure\\' => array ( 0 => __DIR__ . '/..' . '/opis/closure/src', ), - 'Nexmo\\' => - array ( - 0 => __DIR__ . '/..' . '/nexmo/client/src', - ), 'Monolog\\' => array ( 0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog', ), + 'League\\MimeTypeDetection\\' => + array ( + 0 => __DIR__ . '/..' . '/league/mime-type-detection/src', + ), 'League\\Flysystem\\' => array ( 0 => __DIR__ . '/..' . '/league/flysystem/src', ), - 'Lcobucci\\JWT\\' => + 'League\\CommonMark\\' => array ( - 0 => __DIR__ . '/..' . '/lcobucci/jwt/src', + 0 => __DIR__ . '/..' . '/league/commonmark/src', + ), + 'Laravel\\Ui\\' => + array ( + 0 => __DIR__ . '/..' . '/laravel/ui/src', ), 'Laravel\\Tinker\\' => array ( 0 => __DIR__ . '/..' . '/laravel/tinker/src', ), - 'JakubOnderka\\PhpConsoleHighlighter\\' => + 'Illuminate\\Foundation\\Auth\\' => array ( - 0 => __DIR__ . '/..' . '/jakub-onderka/php-console-highlighter/src', - ), - 'JakubOnderka\\PhpConsoleColor\\' => - array ( - 0 => __DIR__ . '/..' . '/jakub-onderka/php-console-color/src', - ), - 'Illuminate\\Notifications\\' => - array ( - 0 => __DIR__ . '/..' . '/laravel/nexmo-notification-channel/src', - 1 => __DIR__ . '/..' . '/laravel/slack-notification-channel/src', + 0 => __DIR__ . '/..' . '/laravel/ui/auth-backend', ), 'Illuminate\\' => array ( @@ -379,6 +428,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf array ( 0 => __DIR__ . '/..' . '/php-http/promise/src', ), + 'Http\\Message\\MultipartStream\\' => + array ( + 0 => __DIR__ . '/..' . '/php-http/multipart-stream-builder/src', + ), 'Http\\Message\\' => array ( 0 => __DIR__ . '/..' . '/php-http/message/src', @@ -400,10 +453,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf array ( 0 => __DIR__ . '/..' . '/php-http/httplug/src', ), - 'Http\\Adapter\\Guzzle6\\' => - array ( - 0 => __DIR__ . '/..' . '/php-http/guzzle6-adapter/src', - ), 'GuzzleHttp\\Psr7\\' => array ( 0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src', @@ -424,9 +473,9 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf array ( 0 => __DIR__ . '/..' . '/graham-campbell/github/src', ), - 'GrahamCampbell\\CachePlugin\\' => + 'GrahamCampbell\\BoundedCache\\' => array ( - 0 => __DIR__ . '/..' . '/graham-campbell/cache-plugin/src', + 0 => __DIR__ . '/..' . '/graham-campbell/bounded-cache/src', ), 'Github\\' => array ( @@ -442,7 +491,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf ), 'Egulias\\EmailValidator\\' => array ( - 0 => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator', + 0 => __DIR__ . '/..' . '/egulias/email-validator/src', ), 'Dotenv\\' => array ( @@ -452,14 +501,14 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf array ( 0 => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator', ), + 'Doctrine\\Inflector\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector', + ), 'Doctrine\\Common\\Lexer\\' => array ( 0 => __DIR__ . '/..' . '/doctrine/lexer/lib/Doctrine/Common/Lexer', ), - 'Doctrine\\Common\\Inflector\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Common/Inflector', - ), 'DeepCopy\\' => array ( 0 => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy', @@ -476,35 +525,21 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf array ( 0 => __DIR__ . '/..' . '/clue/stream-filter/src', ), + 'Carbon\\' => + array ( + 0 => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon', + ), + 'Brick\\Math\\' => + array ( + 0 => __DIR__ . '/..' . '/brick/math/src', + ), 'App\\' => array ( 0 => __DIR__ . '/../..' . '/app', ), ); - public static $fallbackDirsPsr4 = array ( - 0 => __DIR__ . '/..' . '/nesbot/carbon/src', - ); - public static $prefixesPsr0 = array ( - 'U' => - array ( - 'UpdateHelper\\' => - array ( - 0 => __DIR__ . '/..' . '/kylekatarnls/update-helper/src', - ), - ), - 'P' => - array ( - 'Prophecy\\' => - array ( - 0 => __DIR__ . '/..' . '/phpspec/prophecy/src', - ), - 'Parsedown' => - array ( - 0 => __DIR__ . '/..' . '/erusev/parsedown', - ), - ), 'M' => array ( 'Mockery' => @@ -539,6 +574,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'App\\Http\\Middleware\\TrustProxies' => __DIR__ . '/../..' . '/app/Http/Middleware/TrustProxies.php', 'App\\Http\\Middleware\\VerifyCsrfToken' => __DIR__ . '/../..' . '/app/Http/Middleware/VerifyCsrfToken.php', 'App\\Item' => __DIR__ . '/../..' . '/app/Item.php', + 'App\\ItemTag' => __DIR__ . '/../..' . '/app/ItemTag.php', 'App\\Jobs\\ProcessApps' => __DIR__ . '/../..' . '/app/Jobs/ProcessApps.php', 'App\\Providers\\AppServiceProvider' => __DIR__ . '/../..' . '/app/Providers/AppServiceProvider.php', 'App\\Providers\\AuthServiceProvider' => __DIR__ . '/../..' . '/app/Providers/AuthServiceProvider.php', @@ -551,41 +587,73 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'App\\SettingGroup' => __DIR__ . '/../..' . '/app/SettingGroup.php', 'App\\SettingUser' => __DIR__ . '/../..' . '/app/SettingUser.php', 'App\\SupportedApps' => __DIR__ . '/../..' . '/app/SupportedApps.php', + 'App\\SupportedApps\\AMP\\AMP' => __DIR__ . '/../..' . '/app/SupportedApps/AMP/AMP.php', 'App\\SupportedApps\\AVMFritzbox\\AVMFritzbox' => __DIR__ . '/../..' . '/app/SupportedApps/AVMFritzbox/AVMFritzbox.php', + 'App\\SupportedApps\\AWX\\AWX' => __DIR__ . '/../..' . '/app/SupportedApps/AWX/AWX.php', + 'App\\SupportedApps\\AdGuardHome\\AdGuardHome' => __DIR__ . '/../..' . '/app/SupportedApps/AdGuardHome/AdGuardHome.php', 'App\\SupportedApps\\Adminer\\Adminer' => __DIR__ . '/../..' . '/app/SupportedApps/Adminer/Adminer.php', 'App\\SupportedApps\\Airsonic\\Airsonic' => __DIR__ . '/../..' . '/app/SupportedApps/Airsonic/Airsonic.php', + 'App\\SupportedApps\\AlarmPI\\AlarmPI' => __DIR__ . '/../..' . '/app/SupportedApps/AlarmPI/AlarmPI.php', 'App\\SupportedApps\\Alertmanager\\Alertmanager' => __DIR__ . '/../..' . '/app/SupportedApps/Alertmanager/Alertmanager.php', + 'App\\SupportedApps\\ArchiSteamFarm\\ArchiSteamFarm' => __DIR__ . '/../..' . '/app/SupportedApps/ArchiSteamFarm/ArchiSteamFarm.php', 'App\\SupportedApps\\ArchiveBox\\ArchiveBox' => __DIR__ . '/../..' . '/app/SupportedApps/ArchiveBox/ArchiveBox.php', + 'App\\SupportedApps\\ArchiveTeamWarrior\\ArchiveTeamWarrior' => __DIR__ . '/../..' . '/app/SupportedApps/ArchiveTeamWarrior/ArchiveTeamWarrior.php', + 'App\\SupportedApps\\AriaNg\\AriaNg' => __DIR__ . '/../..' . '/app/SupportedApps/AriaNg/AriaNg.php', + 'App\\SupportedApps\\Artifactory\\Artifactory' => __DIR__ . '/../..' . '/app/SupportedApps/Artifactory/Artifactory.php', + 'App\\SupportedApps\\AsrockRackIPMI\\AsrockRackIPMI' => __DIR__ . '/../..' . '/app/SupportedApps/AsrockRackIPMI/AsrockRackIPMI.php', + 'App\\SupportedApps\\Bacula\\Bacula' => __DIR__ . '/../..' . '/app/SupportedApps/Bacula/Bacula.php', + 'App\\SupportedApps\\Baikal\\Baikal' => __DIR__ . '/../..' . '/app/SupportedApps/Baikal/Baikal.php', + 'App\\SupportedApps\\Bastillion\\Bastillion' => __DIR__ . '/../..' . '/app/SupportedApps/Bastillion/Bastillion.php', 'App\\SupportedApps\\Bazarr\\Bazarr' => __DIR__ . '/../..' . '/app/SupportedApps/Bazarr/Bazarr.php', 'App\\SupportedApps\\Bitwarden\\Bitwarden' => __DIR__ . '/../..' . '/app/SupportedApps/Bitwarden/Bitwarden.php', 'App\\SupportedApps\\Booksonic\\Booksonic' => __DIR__ . '/../..' . '/app/SupportedApps/Booksonic/Booksonic.php', 'App\\SupportedApps\\Bookstack\\Bookstack' => __DIR__ . '/../..' . '/app/SupportedApps/Bookstack/Bookstack.php', + 'App\\SupportedApps\\Box\\Box' => __DIR__ . '/../..' . '/app/SupportedApps/Box/Box.php', 'App\\SupportedApps\\Cabot\\Cabot' => __DIR__ . '/../..' . '/app/SupportedApps/Cabot/Cabot.php', 'App\\SupportedApps\\CalibreWeb\\CalibreWeb' => __DIR__ . '/../..' . '/app/SupportedApps/CalibreWeb/CalibreWeb.php', 'App\\SupportedApps\\Cardigann\\Cardigann' => __DIR__ . '/../..' . '/app/SupportedApps/Cardigann/Cardigann.php', + 'App\\SupportedApps\\ChangeDetectionio\\ChangeDetectionio' => __DIR__ . '/../..' . '/app/SupportedApps/ChangeDetectionio/ChangeDetectionio.php', 'App\\SupportedApps\\CheckMK\\CheckMK' => __DIR__ . '/../..' . '/app/SupportedApps/CheckMK/CheckMK.php', + 'App\\SupportedApps\\Chevereto\\Chevereto' => __DIR__ . '/../..' . '/app/SupportedApps/Chevereto/Chevereto.php', + 'App\\SupportedApps\\Chronograf\\Chronograf' => __DIR__ . '/../..' . '/app/SupportedApps/Chronograf/Chronograf.php', + 'App\\SupportedApps\\Clarkson\\Clarkson' => __DIR__ . '/../..' . '/app/SupportedApps/Clarkson/Clarkson.php', 'App\\SupportedApps\\CloudCMD\\CloudCMD' => __DIR__ . '/../..' . '/app/SupportedApps/CloudCMD/CloudCMD.php', 'App\\SupportedApps\\CockpitCMS\\CockpitCMS' => __DIR__ . '/../..' . '/app/SupportedApps/CockpitCMS/CockpitCMS.php', 'App\\SupportedApps\\Cockpit\\Cockpit' => __DIR__ . '/../..' . '/app/SupportedApps/Cockpit/Cockpit.php', + 'App\\SupportedApps\\Codeserver\\Codeserver' => __DIR__ . '/../..' . '/app/SupportedApps/Codeserver/Codeserver.php', + 'App\\SupportedApps\\CodiMD\\CodiMD' => __DIR__ . '/../..' . '/app/SupportedApps/CodiMD/CodiMD.php', 'App\\SupportedApps\\Concourse\\Concourse' => __DIR__ . '/../..' . '/app/SupportedApps/Concourse/Concourse.php', 'App\\SupportedApps\\Confluence\\Confluence' => __DIR__ . '/../..' . '/app/SupportedApps/Confluence/Confluence.php', 'App\\SupportedApps\\CouchPotato\\CouchPotato' => __DIR__ . '/../..' . '/app/SupportedApps/CouchPotato/CouchPotato.php', 'App\\SupportedApps\\CryptPad\\CryptPad' => __DIR__ . '/../..' . '/app/SupportedApps/CryptPad/CryptPad.php', 'App\\SupportedApps\\Deluge\\Deluge' => __DIR__ . '/../..' . '/app/SupportedApps/Deluge/Deluge.php', + 'App\\SupportedApps\\Dillinger\\Dillinger' => __DIR__ . '/../..' . '/app/SupportedApps/Dillinger/Dillinger.php', 'App\\SupportedApps\\Directus\\Directus' => __DIR__ . '/../..' . '/app/SupportedApps/Directus/Directus.php', 'App\\SupportedApps\\DokuWiki\\DokuWiki' => __DIR__ . '/../..' . '/app/SupportedApps/DokuWiki/DokuWiki.php', 'App\\SupportedApps\\Domoticz\\Domoticz' => __DIR__ . '/../..' . '/app/SupportedApps/Domoticz/Domoticz.php', + 'App\\SupportedApps\\Dozzle\\Dozzle' => __DIR__ . '/../..' . '/app/SupportedApps/Dozzle/Dozzle.php', 'App\\SupportedApps\\Drone\\Drone' => __DIR__ . '/../..' . '/app/SupportedApps/Drone/Drone.php', + 'App\\SupportedApps\\Droppy\\Droppy' => __DIR__ . '/../..' . '/app/SupportedApps/Droppy/Droppy.php', 'App\\SupportedApps\\Duplicacy\\Duplicacy' => __DIR__ . '/../..' . '/app/SupportedApps/Duplicacy/Duplicacy.php', 'App\\SupportedApps\\Duplicati\\Duplicati' => __DIR__ . '/../..' . '/app/SupportedApps/Duplicati/Duplicati.php', + 'App\\SupportedApps\\ESPHome\\ESPHome' => __DIR__ . '/../..' . '/app/SupportedApps/ESPHome/ESPHome.php', + 'App\\SupportedApps\\Element\\Element' => __DIR__ . '/../..' . '/app/SupportedApps/Element/Element.php', + 'App\\SupportedApps\\EmbyStat\\EmbyStat' => __DIR__ . '/../..' . '/app/SupportedApps/EmbyStat/EmbyStat.php', 'App\\SupportedApps\\Emby\\Emby' => __DIR__ . '/../..' . '/app/SupportedApps/Emby/Emby.php', 'App\\SupportedApps\\FileBrowser\\FileBrowser' => __DIR__ . '/../..' . '/app/SupportedApps/FileBrowser/FileBrowser.php', + 'App\\SupportedApps\\FileFlows\\FileFlows' => __DIR__ . '/../..' . '/app/SupportedApps/FileFlows/FileFlows.php', + 'App\\SupportedApps\\FileRun\\FileRun' => __DIR__ . '/../..' . '/app/SupportedApps/FileRun/FileRun.php', 'App\\SupportedApps\\Firefly\\Firefly' => __DIR__ . '/../..' . '/app/SupportedApps/Firefly/Firefly.php', 'App\\SupportedApps\\FirefoxSend\\FirefoxSend' => __DIR__ . '/../..' . '/app/SupportedApps/FirefoxSend/FirefoxSend.php', 'App\\SupportedApps\\FlexGet\\FlexGet' => __DIR__ . '/../..' . '/app/SupportedApps/FlexGet/FlexGet.php', 'App\\SupportedApps\\Flood\\Flood' => __DIR__ . '/../..' . '/app/SupportedApps/Flood/Flood.php', + 'App\\SupportedApps\\Focalboard\\Focalboard' => __DIR__ . '/../..' . '/app/SupportedApps/Focalboard/Focalboard.php', + 'App\\SupportedApps\\FoldingHome\\FoldingHome' => __DIR__ . '/../..' . '/app/SupportedApps/FoldingHome/FoldingHome.php', + 'App\\SupportedApps\\FortinetFortiMonitor\\FortinetFortiMonitor' => __DIR__ . '/../..' . '/app/SupportedApps/FortinetFortiMonitor/FortinetFortiMonitor.php', 'App\\SupportedApps\\Freenas\\Freenas' => __DIR__ . '/../..' . '/app/SupportedApps/Freenas/Freenas.php', 'App\\SupportedApps\\FreshRSS\\FreshRSS' => __DIR__ . '/../..' . '/app/SupportedApps/FreshRSS/FreshRSS.php', + 'App\\SupportedApps\\Fronius\\Fronius' => __DIR__ . '/../..' . '/app/SupportedApps/Fronius/Fronius.php', + 'App\\SupportedApps\\Funkwhale\\Funkwhale' => __DIR__ . '/../..' . '/app/SupportedApps/Funkwhale/Funkwhale.php', 'App\\SupportedApps\\Ghost\\Ghost' => __DIR__ . '/../..' . '/app/SupportedApps/Ghost/Ghost.php', 'App\\SupportedApps\\GitHub\\GitHub' => __DIR__ . '/../..' . '/app/SupportedApps/GitHub/GitHub.php', 'App\\SupportedApps\\GitLab\\GitLab' => __DIR__ . '/../..' . '/app/SupportedApps/GitLab/GitLab.php', @@ -596,71 +664,142 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'App\\SupportedApps\\Grafana\\Grafana' => __DIR__ . '/../..' . '/app/SupportedApps/Grafana/Grafana.php', 'App\\SupportedApps\\Grav\\Grav' => __DIR__ . '/../..' . '/app/SupportedApps/Grav/Grav.php', 'App\\SupportedApps\\Graylog\\Graylog' => __DIR__ . '/../..' . '/app/SupportedApps/Graylog/Graylog.php', + 'App\\SupportedApps\\Grocy\\Grocy' => __DIR__ . '/../..' . '/app/SupportedApps/Grocy/Grocy.php', 'App\\SupportedApps\\Guacamole\\Guacamole' => __DIR__ . '/../..' . '/app/SupportedApps/Guacamole/Guacamole.php', 'App\\SupportedApps\\HAProxy\\HAProxy' => __DIR__ . '/../..' . '/app/SupportedApps/HAProxy/HAProxy.php', + 'App\\SupportedApps\\HDHomeRun\\HDHomeRun' => __DIR__ . '/../..' . '/app/SupportedApps/HDHomeRun/HDHomeRun.php', + 'App\\SupportedApps\\Handbrake\\Handbrake' => __DIR__ . '/../..' . '/app/SupportedApps/Handbrake/Handbrake.php', + 'App\\SupportedApps\\Hasura\\Hasura' => __DIR__ . '/../..' . '/app/SupportedApps/Hasura/Hasura.php', 'App\\SupportedApps\\Headphones\\Headphones' => __DIR__ . '/../..' . '/app/SupportedApps/Headphones/Headphones.php', 'App\\SupportedApps\\Healthchecks\\Healthchecks' => __DIR__ . '/../..' . '/app/SupportedApps/Healthchecks/Healthchecks.php', 'App\\SupportedApps\\HomeAssistant\\HomeAssistant' => __DIR__ . '/../..' . '/app/SupportedApps/HomeAssistant/HomeAssistant.php', + 'App\\SupportedApps\\Homebridge\\Homebridge' => __DIR__ . '/../..' . '/app/SupportedApps/Homebridge/Homebridge.php', + 'App\\SupportedApps\\Homer\\Homer' => __DIR__ . '/../..' . '/app/SupportedApps/Homer/Homer.php', + 'App\\SupportedApps\\Hubitat\\Hubitat' => __DIR__ . '/../..' . '/app/SupportedApps/Hubitat/Hubitat.php', 'App\\SupportedApps\\Huginn\\Huginn' => __DIR__ . '/../..' . '/app/SupportedApps/Huginn/Huginn.php', + 'App\\SupportedApps\\Icecast\\Icecast' => __DIR__ . '/../..' . '/app/SupportedApps/Icecast/Icecast.php', + 'App\\SupportedApps\\IcingaWeb\\IcingaWeb' => __DIR__ . '/../..' . '/app/SupportedApps/IcingaWeb/IcingaWeb.php', + 'App\\SupportedApps\\InfluxDB\\InfluxDB' => __DIR__ . '/../..' . '/app/SupportedApps/InfluxDB/InfluxDB.php', + 'App\\SupportedApps\\Infoblox\\Infoblox' => __DIR__ . '/../..' . '/app/SupportedApps/Infoblox/Infoblox.php', + 'App\\SupportedApps\\Invidious\\Invidious' => __DIR__ . '/../..' . '/app/SupportedApps/Invidious/Invidious.php', 'App\\SupportedApps\\InvoiceNinja\\InvoiceNinja' => __DIR__ . '/../..' . '/app/SupportedApps/InvoiceNinja/InvoiceNinja.php', 'App\\SupportedApps\\JDownloader\\JDownloader' => __DIR__ . '/../..' . '/app/SupportedApps/JDownloader/JDownloader.php', 'App\\SupportedApps\\Jackett\\Jackett' => __DIR__ . '/../..' . '/app/SupportedApps/Jackett/Jackett.php', + 'App\\SupportedApps\\Jaeger\\Jaeger' => __DIR__ . '/../..' . '/app/SupportedApps/Jaeger/Jaeger.php', 'App\\SupportedApps\\Jeedom\\Jeedom' => __DIR__ . '/../..' . '/app/SupportedApps/Jeedom/Jeedom.php', 'App\\SupportedApps\\Jellyfin\\Jellyfin' => __DIR__ . '/../..' . '/app/SupportedApps/Jellyfin/Jellyfin.php', 'App\\SupportedApps\\Jenkins\\Jenkins' => __DIR__ . '/../..' . '/app/SupportedApps/Jenkins/Jenkins.php', 'App\\SupportedApps\\Jira\\Jira' => __DIR__ . '/../..' . '/app/SupportedApps/Jira/Jira.php', + 'App\\SupportedApps\\Jitsi\\Jitsi' => __DIR__ . '/../..' . '/app/SupportedApps/Jitsi/Jitsi.php', + 'App\\SupportedApps\\Joomla\\Joomla' => __DIR__ . '/../..' . '/app/SupportedApps/Joomla/Joomla.php', 'App\\SupportedApps\\Jupyter\\Jupyter' => __DIR__ . '/../..' . '/app/SupportedApps/Jupyter/Jupyter.php', + 'App\\SupportedApps\\Kanboard\\Kanboard' => __DIR__ . '/../..' . '/app/SupportedApps/Kanboard/Kanboard.php', 'App\\SupportedApps\\Keycloak\\Keycloak' => __DIR__ . '/../..' . '/app/SupportedApps/Keycloak/Keycloak.php', 'App\\SupportedApps\\Kibana\\Kibana' => __DIR__ . '/../..' . '/app/SupportedApps/Kibana/Kibana.php', 'App\\SupportedApps\\Kimai\\Kimai' => __DIR__ . '/../..' . '/app/SupportedApps/Kimai/Kimai.php', + 'App\\SupportedApps\\Kitana\\Kitana' => __DIR__ . '/../..' . '/app/SupportedApps/Kitana/Kitana.php', + 'App\\SupportedApps\\Kodi\\Kodi' => __DIR__ . '/../..' . '/app/SupportedApps/Kodi/Kodi.php', + 'App\\SupportedApps\\Komga\\Komga' => __DIR__ . '/../..' . '/app/SupportedApps/Komga/Komga.php', + 'App\\SupportedApps\\Kopia\\Kopia' => __DIR__ . '/../..' . '/app/SupportedApps/Kopia/Kopia.php', 'App\\SupportedApps\\Krusader\\Krusader' => __DIR__ . '/../..' . '/app/SupportedApps/Krusader/Krusader.php', 'App\\SupportedApps\\KubernetesDashboard\\KubernetesDashboard' => __DIR__ . '/../..' . '/app/SupportedApps/KubernetesDashboard/KubernetesDashboard.php', 'App\\SupportedApps\\LazyLibrarian\\LazyLibrarian' => __DIR__ . '/../..' . '/app/SupportedApps/LazyLibrarian/LazyLibrarian.php', 'App\\SupportedApps\\LemonLDAPNG\\LemonLDAPNG' => __DIR__ . '/../..' . '/app/SupportedApps/LemonLDAPNG/LemonLDAPNG.php', + 'App\\SupportedApps\\LibreNMS\\LibreNMS' => __DIR__ . '/../..' . '/app/SupportedApps/LibreNMS/LibreNMS.php', + 'App\\SupportedApps\\LibreSpeed\\LibreSpeed' => __DIR__ . '/../..' . '/app/SupportedApps/LibreSpeed/LibreSpeed.php', 'App\\SupportedApps\\Lidarr\\Lidarr' => __DIR__ . '/../..' . '/app/SupportedApps/Lidarr/Lidarr.php', + 'App\\SupportedApps\\LinkAce\\LinkAce' => __DIR__ . '/../..' . '/app/SupportedApps/LinkAce/LinkAce.php', + 'App\\SupportedApps\\Lychee\\Lychee' => __DIR__ . '/../..' . '/app/SupportedApps/Lychee/Lychee.php', 'App\\SupportedApps\\MailcowSOGo\\MailcowSOGo' => __DIR__ . '/../..' . '/app/SupportedApps/MailcowSOGo/MailcowSOGo.php', 'App\\SupportedApps\\Mailcow\\Mailcow' => __DIR__ . '/../..' . '/app/SupportedApps/Mailcow/Mailcow.php', 'App\\SupportedApps\\Mailhog\\Mailhog' => __DIR__ . '/../..' . '/app/SupportedApps/Mailhog/Mailhog.php', + 'App\\SupportedApps\\Mainsail\\Mainsail' => __DIR__ . '/../..' . '/app/SupportedApps/Mainsail/Mainsail.php', + 'App\\SupportedApps\\Mastodon\\Mastodon' => __DIR__ . '/../..' . '/app/SupportedApps/Mastodon/Mastodon.php', 'App\\SupportedApps\\Mattermost\\Mattermost' => __DIR__ . '/../..' . '/app/SupportedApps/Mattermost/Mattermost.php', 'App\\SupportedApps\\MayanEDMS\\MayanEDMS' => __DIR__ . '/../..' . '/app/SupportedApps/MayanEDMS/MayanEDMS.php', 'App\\SupportedApps\\McMyAdmin\\McMyAdmin' => __DIR__ . '/../..' . '/app/SupportedApps/McMyAdmin/McMyAdmin.php', + 'App\\SupportedApps\\Mealie\\Mealie' => __DIR__ . '/../..' . '/app/SupportedApps/Mealie/Mealie.php', + 'App\\SupportedApps\\MediaWiki\\MediaWiki' => __DIR__ . '/../..' . '/app/SupportedApps/MediaWiki/MediaWiki.php', 'App\\SupportedApps\\Medusa\\Medusa' => __DIR__ . '/../..' . '/app/SupportedApps/Medusa/Medusa.php', 'App\\SupportedApps\\Meraki\\Meraki' => __DIR__ . '/../..' . '/app/SupportedApps/Meraki/Meraki.php', + 'App\\SupportedApps\\MineOS\\MineOS' => __DIR__ . '/../..' . '/app/SupportedApps/MineOS/MineOS.php', 'App\\SupportedApps\\Miniflux\\Miniflux' => __DIR__ . '/../..' . '/app/SupportedApps/Miniflux/Miniflux.php', 'App\\SupportedApps\\Minio\\Minio' => __DIR__ . '/../..' . '/app/SupportedApps/Minio/Minio.php', 'App\\SupportedApps\\Monica\\Monica' => __DIR__ . '/../..' . '/app/SupportedApps/Monica/Monica.php', + 'App\\SupportedApps\\Monit\\Monit' => __DIR__ . '/../..' . '/app/SupportedApps/Monit/Monit.php', + 'App\\SupportedApps\\MotionEye\\MotionEye' => __DIR__ . '/../..' . '/app/SupportedApps/MotionEye/MotionEye.php', 'App\\SupportedApps\\MusicBrainz\\MusicBrainz' => __DIR__ . '/../..' . '/app/SupportedApps/MusicBrainz/MusicBrainz.php', 'App\\SupportedApps\\Mylar\\Mylar' => __DIR__ . '/../..' . '/app/SupportedApps/Mylar/Mylar.php', 'App\\SupportedApps\\NZBHydra\\NZBHydra' => __DIR__ . '/../..' . '/app/SupportedApps/NZBHydra/NZBHydra.php', + 'App\\SupportedApps\\Navidrome\\Navidrome' => __DIR__ . '/../..' . '/app/SupportedApps/Navidrome/Navidrome.php', + 'App\\SupportedApps\\Nessus\\Nessus' => __DIR__ . '/../..' . '/app/SupportedApps/Nessus/Nessus.php', + 'App\\SupportedApps\\NetBox\\NetBox' => __DIR__ . '/../..' . '/app/SupportedApps/NetBox/NetBox.php', + 'App\\SupportedApps\\Netatmo\\Netatmo' => __DIR__ . '/../..' . '/app/SupportedApps/Netatmo/Netatmo.php', + 'App\\SupportedApps\\Netboot\\Netboot' => __DIR__ . '/../..' . '/app/SupportedApps/Netboot/Netboot.php', 'App\\SupportedApps\\Netdata\\Netdata' => __DIR__ . '/../..' . '/app/SupportedApps/Netdata/Netdata.php', 'App\\SupportedApps\\Nextcloud\\Nextcloud' => __DIR__ . '/../..' . '/app/SupportedApps/Nextcloud/Nextcloud.php', 'App\\SupportedApps\\NginxProxyManager\\NginxProxyManager' => __DIR__ . '/../..' . '/app/SupportedApps/NginxProxyManager/NginxProxyManager.php', + 'App\\SupportedApps\\Nitter\\Nitter' => __DIR__ . '/../..' . '/app/SupportedApps/Nitter/Nitter.php', 'App\\SupportedApps\\NodeRed\\NodeRed' => __DIR__ . '/../..' . '/app/SupportedApps/NodeRed/NodeRed.php', 'App\\SupportedApps\\NowShowing\\NowShowing' => __DIR__ . '/../..' . '/app/SupportedApps/NowShowing/NowShowing.php', + 'App\\SupportedApps\\NxFilter\\NxFilter' => __DIR__ . '/../..' . '/app/SupportedApps/NxFilter/NxFilter.php', 'App\\SupportedApps\\Nzbget\\Nzbget' => __DIR__ . '/../..' . '/app/SupportedApps/Nzbget/Nzbget.php', 'App\\SupportedApps\\OPNsense\\OPNsense' => __DIR__ . '/../..' . '/app/SupportedApps/OPNsense/OPNsense.php', 'App\\SupportedApps\\Octoprint\\Octoprint' => __DIR__ . '/../..' . '/app/SupportedApps/Octoprint/Octoprint.php', 'App\\SupportedApps\\Ombi\\Ombi' => __DIR__ . '/../..' . '/app/SupportedApps/Ombi/Ombi.php', 'App\\SupportedApps\\OmniDB\\OmniDB' => __DIR__ . '/../..' . '/app/SupportedApps/OmniDB/OmniDB.php', + 'App\\SupportedApps\\OnlyOffice\\OnlyOffice' => __DIR__ . '/../..' . '/app/SupportedApps/OnlyOffice/OnlyOffice.php', + 'App\\SupportedApps\\OpenMapTiler\\OpenMapTiler' => __DIR__ . '/../..' . '/app/SupportedApps/OpenMapTiler/OpenMapTiler.php', + 'App\\SupportedApps\\OpenSpeedTest\\OpenSpeedTest' => __DIR__ . '/../..' . '/app/SupportedApps/OpenSpeedTest/OpenSpeedTest.php', + 'App\\SupportedApps\\OpenSprinkler\\OpenSprinkler' => __DIR__ . '/../..' . '/app/SupportedApps/OpenSprinkler/OpenSprinkler.php', + 'App\\SupportedApps\\OpenWrt\\OpenWrt' => __DIR__ . '/../..' . '/app/SupportedApps/OpenWrt/OpenWrt.php', 'App\\SupportedApps\\Oscarr\\Oscarr' => __DIR__ . '/../..' . '/app/SupportedApps/Oscarr/Oscarr.php', + 'App\\SupportedApps\\Overseerr\\Overseerr' => __DIR__ . '/../..' . '/app/SupportedApps/Overseerr/Overseerr.php', 'App\\SupportedApps\\OwnPhotos\\OwnPhotos' => __DIR__ . '/../..' . '/app/SupportedApps/OwnPhotos/OwnPhotos.php', + 'App\\SupportedApps\\PRTG\\PRTG' => __DIR__ . '/../..' . '/app/SupportedApps/PRTG/PRTG.php', + 'App\\SupportedApps\\PaloAltoNetworks\\PaloAltoNetworks' => __DIR__ . '/../..' . '/app/SupportedApps/PaloAltoNetworks/PaloAltoNetworks.php', 'App\\SupportedApps\\Paperless\\Paperless' => __DIR__ . '/../..' . '/app/SupportedApps/Paperless/Paperless.php', 'App\\SupportedApps\\PartKeepr\\PartKeepr' => __DIR__ . '/../..' . '/app/SupportedApps/PartKeepr/PartKeepr.php', + 'App\\SupportedApps\\PeerTube\\PeerTube' => __DIR__ . '/../..' . '/app/SupportedApps/PeerTube/PeerTube.php', + 'App\\SupportedApps\\PhotoPrism\\PhotoPrism' => __DIR__ . '/../..' . '/app/SupportedApps/PhotoPrism/PhotoPrism.php', + 'App\\SupportedApps\\Photonix\\Photonix' => __DIR__ . '/../..' . '/app/SupportedApps/Photonix/Photonix.php', + 'App\\SupportedApps\\PiAware\\PiAware' => __DIR__ . '/../..' . '/app/SupportedApps/PiAware/PiAware.php', + 'App\\SupportedApps\\PiVPN\\PiVPN' => __DIR__ . '/../..' . '/app/SupportedApps/PiVPN/PiVPN.php', 'App\\SupportedApps\\Pihole\\Pihole' => __DIR__ . '/../..' . '/app/SupportedApps/Pihole/Pihole.php', + 'App\\SupportedApps\\Piwigo\\Piwigo' => __DIR__ . '/../..' . '/app/SupportedApps/Piwigo/Piwigo.php', + 'App\\SupportedApps\\Pleroma\\Pleroma' => __DIR__ . '/../..' . '/app/SupportedApps/Pleroma/Pleroma.php', + 'App\\SupportedApps\\Plesk\\Plesk' => __DIR__ . '/../..' . '/app/SupportedApps/Plesk/Plesk.php', 'App\\SupportedApps\\PlexRequests\\PlexRequests' => __DIR__ . '/../..' . '/app/SupportedApps/PlexRequests/PlexRequests.php', 'App\\SupportedApps\\Plex\\Plex' => __DIR__ . '/../..' . '/app/SupportedApps/Plex/Plex.php', + 'App\\SupportedApps\\Plume\\Plume' => __DIR__ . '/../..' . '/app/SupportedApps/Plume/Plume.php', 'App\\SupportedApps\\Portainer\\Portainer' => __DIR__ . '/../..' . '/app/SupportedApps/Portainer/Portainer.php', + 'App\\SupportedApps\\Poste\\Poste' => __DIR__ . '/../..' . '/app/SupportedApps/Poste/Poste.php', + 'App\\SupportedApps\\Printer\\Printer' => __DIR__ . '/../..' . '/app/SupportedApps/Printer/Printer.php', 'App\\SupportedApps\\Privatebin\\Privatebin' => __DIR__ . '/../..' . '/app/SupportedApps/Privatebin/Privatebin.php', 'App\\SupportedApps\\ProjectSend\\ProjectSend' => __DIR__ . '/../..' . '/app/SupportedApps/ProjectSend/ProjectSend.php', 'App\\SupportedApps\\Prometheus\\Prometheus' => __DIR__ . '/../..' . '/app/SupportedApps/Prometheus/Prometheus.php', + 'App\\SupportedApps\\Prowlarr\\Prowlarr' => __DIR__ . '/../..' . '/app/SupportedApps/Prowlarr/Prowlarr.php', 'App\\SupportedApps\\Proxmox\\Proxmox' => __DIR__ . '/../..' . '/app/SupportedApps/Proxmox/Proxmox.php', + 'App\\SupportedApps\\PsiTransfer\\PsiTransfer' => __DIR__ . '/../..' . '/app/SupportedApps/PsiTransfer/PsiTransfer.php', + 'App\\SupportedApps\\Pterodactyl\\Pterodactyl' => __DIR__ . '/../..' . '/app/SupportedApps/Pterodactyl/Pterodactyl.php', 'App\\SupportedApps\\QNAP\\QNAP' => __DIR__ . '/../..' . '/app/SupportedApps/QNAP/QNAP.php', + 'App\\SupportedApps\\RStudioServer\\RStudioServer' => __DIR__ . '/../..' . '/app/SupportedApps/RStudioServer/RStudioServer.php', 'App\\SupportedApps\\Radarr\\Radarr' => __DIR__ . '/../..' . '/app/SupportedApps/Radarr/Radarr.php', + 'App\\SupportedApps\\Rainloop\\Rainloop' => __DIR__ . '/../..' . '/app/SupportedApps/Rainloop/Rainloop.php', 'App\\SupportedApps\\Rancher\\Rancher' => __DIR__ . '/../..' . '/app/SupportedApps/Rancher/Rancher.php', 'App\\SupportedApps\\Raneto\\Raneto' => __DIR__ . '/../..' . '/app/SupportedApps/Raneto/Raneto.php', + 'App\\SupportedApps\\Rclone\\Rclone' => __DIR__ . '/../..' . '/app/SupportedApps/Rclone/Rclone.php', + 'App\\SupportedApps\\Readarr\\Readarr' => __DIR__ . '/../..' . '/app/SupportedApps/Readarr/Readarr.php', + 'App\\SupportedApps\\Recalbox\\Recalbox' => __DIR__ . '/../..' . '/app/SupportedApps/Recalbox/Recalbox.php', + 'App\\SupportedApps\\Requestrr\\Requestrr' => __DIR__ . '/../..' . '/app/SupportedApps/Requestrr/Requestrr.php', 'App\\SupportedApps\\ResilioSync\\ResilioSync' => __DIR__ . '/../..' . '/app/SupportedApps/ResilioSync/ResilioSync.php', + 'App\\SupportedApps\\RiotWeb\\RiotWeb' => __DIR__ . '/../..' . '/app/SupportedApps/RiotWeb/RiotWeb.php', 'App\\SupportedApps\\RocketChat\\RocketChat' => __DIR__ . '/../..' . '/app/SupportedApps/RocketChat/RocketChat.php', + 'App\\SupportedApps\\RompЯ\\RompЯ' => __DIR__ . '/../..' . '/app/SupportedApps/RompЯ/RompЯ.php', + 'App\\SupportedApps\\Roundcube\\Roundcube' => __DIR__ . '/../..' . '/app/SupportedApps/Roundcube/Roundcube.php', + 'App\\SupportedApps\\Router\\Router' => __DIR__ . '/../..' . '/app/SupportedApps/Router/Router.php', 'App\\SupportedApps\\Rspamd\\Rspamd' => __DIR__ . '/../..' . '/app/SupportedApps/Rspamd/Rspamd.php', + 'App\\SupportedApps\\Rundeck\\Rundeck' => __DIR__ . '/../..' . '/app/SupportedApps/Rundeck/Rundeck.php', 'App\\SupportedApps\\RuneAudio\\RuneAudio' => __DIR__ . '/../..' . '/app/SupportedApps/RuneAudio/RuneAudio.php', 'App\\SupportedApps\\SABnzbd\\SABnzbd' => __DIR__ . '/../..' . '/app/SupportedApps/SABnzbd/SABnzbd.php', 'App\\SupportedApps\\SOGo\\SOGo' => __DIR__ . '/../..' . '/app/SupportedApps/SOGo/SOGo.php', @@ -670,58 +809,188 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'App\\SupportedApps\\Shaarli\\Shaarli' => __DIR__ . '/../..' . '/app/SupportedApps/Shaarli/Shaarli.php', 'App\\SupportedApps\\Shinobi\\Shinobi' => __DIR__ . '/../..' . '/app/SupportedApps/Shinobi/Shinobi.php', 'App\\SupportedApps\\SickBeard\\SickBeard' => __DIR__ . '/../..' . '/app/SupportedApps/SickBeard/SickBeard.php', + 'App\\SupportedApps\\SickGear\\SickGear' => __DIR__ . '/../..' . '/app/SupportedApps/SickGear/SickGear.php', 'App\\SupportedApps\\Sickchill\\Sickchill' => __DIR__ . '/../..' . '/app/SupportedApps/Sickchill/Sickchill.php', 'App\\SupportedApps\\Slack\\Slack' => __DIR__ . '/../..' . '/app/SupportedApps/Slack/Slack.php', 'App\\SupportedApps\\Snibox\\Snibox' => __DIR__ . '/../..' . '/app/SupportedApps/Snibox/Snibox.php', + 'App\\SupportedApps\\SonarQube\\SonarQube' => __DIR__ . '/../..' . '/app/SupportedApps/SonarQube/SonarQube.php', 'App\\SupportedApps\\Sonarr\\Sonarr' => __DIR__ . '/../..' . '/app/SupportedApps/Sonarr/Sonarr.php', 'App\\SupportedApps\\Sourcegraph\\Sourcegraph' => __DIR__ . '/../..' . '/app/SupportedApps/Sourcegraph/Sourcegraph.php', + 'App\\SupportedApps\\Splunk\\Splunk' => __DIR__ . '/../..' . '/app/SupportedApps/Splunk/Splunk.php', + 'App\\SupportedApps\\Spotweb\\Spotweb' => __DIR__ . '/../..' . '/app/SupportedApps/Spotweb/Spotweb.php', 'App\\SupportedApps\\Squidex\\Squidex' => __DIR__ . '/../..' . '/app/SupportedApps/Squidex/Squidex.php', + 'App\\SupportedApps\\Stash\\Stash' => __DIR__ . '/../..' . '/app/SupportedApps/Stash/Stash.php', + 'App\\SupportedApps\\Statping\\Statping' => __DIR__ . '/../..' . '/app/SupportedApps/Statping/Statping.php', 'App\\SupportedApps\\Strapi\\Strapi' => __DIR__ . '/../..' . '/app/SupportedApps/Strapi/Strapi.php', + 'App\\SupportedApps\\Streama\\Streama' => __DIR__ . '/../..' . '/app/SupportedApps/Streama/Streama.php', + 'App\\SupportedApps\\Sympa\\Sympa' => __DIR__ . '/../..' . '/app/SupportedApps/Sympa/Sympa.php', + 'App\\SupportedApps\\Synclounge\\Synclounge' => __DIR__ . '/../..' . '/app/SupportedApps/Synclounge/Synclounge.php', 'App\\SupportedApps\\Syncthing\\Syncthing' => __DIR__ . '/../..' . '/app/SupportedApps/Syncthing/Syncthing.php', 'App\\SupportedApps\\Synology\\Synology' => __DIR__ . '/../..' . '/app/SupportedApps/Synology/Synology.php', 'App\\SupportedApps\\TVHeadend\\TVHeadend' => __DIR__ . '/../..' . '/app/SupportedApps/TVHeadend/TVHeadend.php', + 'App\\SupportedApps\\TYPO\\TYPO' => __DIR__ . '/../..' . '/app/SupportedApps/TYPO/TYPO.php', 'App\\SupportedApps\\Taiga\\Taiga' => __DIR__ . '/../..' . '/app/SupportedApps/Taiga/Taiga.php', + 'App\\SupportedApps\\TandoorRecipes\\TandoorRecipes' => __DIR__ . '/../..' . '/app/SupportedApps/TandoorRecipes/TandoorRecipes.php', + 'App\\SupportedApps\\TarTenNinety\\TarTenNinety' => __DIR__ . '/../..' . '/app/SupportedApps/TarTenNinety/TarTenNinety.php', + 'App\\SupportedApps\\TasmoAdmin\\TasmoAdmin' => __DIR__ . '/../..' . '/app/SupportedApps/TasmoAdmin/TasmoAdmin.php', + 'App\\SupportedApps\\Tasmota\\Tasmota' => __DIR__ . '/../..' . '/app/SupportedApps/Tasmota/Tasmota.php', 'App\\SupportedApps\\Tautulli\\Tautulli' => __DIR__ . '/../..' . '/app/SupportedApps/Tautulli/Tautulli.php', + 'App\\SupportedApps\\Tdarr\\Tdarr' => __DIR__ . '/../..' . '/app/SupportedApps/Tdarr/Tdarr.php', + 'App\\SupportedApps\\Teedy\\Teedy' => __DIR__ . '/../..' . '/app/SupportedApps/Teedy/Teedy.php', 'App\\SupportedApps\\TheLounge\\TheLounge' => __DIR__ . '/../..' . '/app/SupportedApps/TheLounge/TheLounge.php', 'App\\SupportedApps\\TinyTinyRSS\\TinyTinyRSS' => __DIR__ . '/../..' . '/app/SupportedApps/TinyTinyRSS/TinyTinyRSS.php', 'App\\SupportedApps\\Traccar\\Traccar' => __DIR__ . '/../..' . '/app/SupportedApps/Traccar/Traccar.php', 'App\\SupportedApps\\Traefik\\Traefik' => __DIR__ . '/../..' . '/app/SupportedApps/Traefik/Traefik.php', 'App\\SupportedApps\\Transmission\\Transmission' => __DIR__ . '/../..' . '/app/SupportedApps/Transmission/Transmission.php', 'App\\SupportedApps\\Trilium\\Trilium' => __DIR__ . '/../..' . '/app/SupportedApps/Trilium/Trilium.php', + 'App\\SupportedApps\\TrueNASCORE\\TrueNASCORE' => __DIR__ . '/../..' . '/app/SupportedApps/TrueNASCORE/TrueNASCORE.php', + 'App\\SupportedApps\\TrueNAS\\TrueNAS' => __DIR__ . '/../..' . '/app/SupportedApps/TrueNAS/TrueNAS.php', 'App\\SupportedApps\\Ubooquity\\Ubooquity' => __DIR__ . '/../..' . '/app/SupportedApps/Ubooquity/Ubooquity.php', 'App\\SupportedApps\\UniFi\\UniFi' => __DIR__ . '/../..' . '/app/SupportedApps/UniFi/UniFi.php', 'App\\SupportedApps\\Unraid\\Unraid' => __DIR__ . '/../..' . '/app/SupportedApps/Unraid/Unraid.php', + 'App\\SupportedApps\\UrBackup\\UrBackup' => __DIR__ . '/../..' . '/app/SupportedApps/UrBackup/UrBackup.php', + 'App\\SupportedApps\\VMwareESXi\\VMwareESXi' => __DIR__ . '/../..' . '/app/SupportedApps/VMwareESXi/VMwareESXi.php', 'App\\SupportedApps\\VMwarevCenter\\VMwarevCenter' => __DIR__ . '/../..' . '/app/SupportedApps/VMwarevCenter/VMwarevCenter.php', + 'App\\SupportedApps\\ViMbAdmin\\ViMbAdmin' => __DIR__ . '/../..' . '/app/SupportedApps/ViMbAdmin/ViMbAdmin.php', + 'App\\SupportedApps\\VirtualRadarServer\\VirtualRadarServer' => __DIR__ . '/../..' . '/app/SupportedApps/VirtualRadarServer/VirtualRadarServer.php', 'App\\SupportedApps\\Virtualmin\\Virtualmin' => __DIR__ . '/../..' . '/app/SupportedApps/Virtualmin/Virtualmin.php', + 'App\\SupportedApps\\Volumio\\Volumio' => __DIR__ . '/../..' . '/app/SupportedApps/Volumio/Volumio.php', + 'App\\SupportedApps\\VuPlus\\VuPlus' => __DIR__ . '/../..' . '/app/SupportedApps/VuPlus/VuPlus.php', 'App\\SupportedApps\\Wallabag\\Wallabag' => __DIR__ . '/../..' . '/app/SupportedApps/Wallabag/Wallabag.php', + 'App\\SupportedApps\\WaniKani\\WaniKani' => __DIR__ . '/../..' . '/app/SupportedApps/WaniKani/WaniKani.php', 'App\\SupportedApps\\Watcher\\Watcher' => __DIR__ . '/../..' . '/app/SupportedApps/Watcher/Watcher.php', 'App\\SupportedApps\\WebTools\\WebTools' => __DIR__ . '/../..' . '/app/SupportedApps/WebTools/WebTools.php', 'App\\SupportedApps\\Webmin\\Webmin' => __DIR__ . '/../..' . '/app/SupportedApps/Webmin/Webmin.php', 'App\\SupportedApps\\Wekan\\Wekan' => __DIR__ . '/../..' . '/app/SupportedApps/Wekan/Wekan.php', 'App\\SupportedApps\\Wetty\\Wetty' => __DIR__ . '/../..' . '/app/SupportedApps/Wetty/Wetty.php', + 'App\\SupportedApps\\WgGenWeb\\WgGenWeb' => __DIR__ . '/../..' . '/app/SupportedApps/WgGenWeb/WgGenWeb.php', + 'App\\SupportedApps\\Wikijs\\Wikijs' => __DIR__ . '/../..' . '/app/SupportedApps/Wikijs/Wikijs.php', + 'App\\SupportedApps\\WireGuard\\WireGuard' => __DIR__ . '/../..' . '/app/SupportedApps/WireGuard/WireGuard.php', + 'App\\SupportedApps\\Wordpress\\Wordpress' => __DIR__ . '/../..' . '/app/SupportedApps/Wordpress/Wordpress.php', 'App\\SupportedApps\\XWiki\\XWiki' => __DIR__ . '/../..' . '/app/SupportedApps/XWiki/XWiki.php', + 'App\\SupportedApps\\XenOrchestra\\XenOrchestra' => __DIR__ . '/../..' . '/app/SupportedApps/XenOrchestra/XenOrchestra.php', 'App\\SupportedApps\\Xigmanas\\Xigmanas' => __DIR__ . '/../..' . '/app/SupportedApps/Xigmanas/Xigmanas.php', + 'App\\SupportedApps\\YNAB\\YNAB' => __DIR__ . '/../..' . '/app/SupportedApps/YNAB/YNAB.php', 'App\\SupportedApps\\ZNC\\ZNC' => __DIR__ . '/../..' . '/app/SupportedApps/ZNC/ZNC.php', + 'App\\SupportedApps\\Zabbix\\Zabbix' => __DIR__ . '/../..' . '/app/SupportedApps/Zabbix/Zabbix.php', + 'App\\SupportedApps\\Zammad\\Zammad' => __DIR__ . '/../..' . '/app/SupportedApps/Zammad/Zammad.php', 'App\\SupportedApps\\ZoneMinder\\ZoneMinder' => __DIR__ . '/../..' . '/app/SupportedApps/ZoneMinder/ZoneMinder.php', 'App\\SupportedApps\\Zulip\\Zulip' => __DIR__ . '/../..' . '/app/SupportedApps/Zulip/Zulip.php', + 'App\\SupportedApps\\cPanel\\cPanel' => __DIR__ . '/../..' . '/app/SupportedApps/cPanel/cPanel.php', + 'App\\SupportedApps\\iDRAC\\iDRAC' => __DIR__ . '/../..' . '/app/SupportedApps/iDRAC/iDRAC.php', + 'App\\SupportedApps\\iLO\\iLO' => __DIR__ . '/../..' . '/app/SupportedApps/iLO/iLO.php', + 'App\\SupportedApps\\ioBroker\\ioBroker' => __DIR__ . '/../..' . '/app/SupportedApps/ioBroker/ioBroker.php', + 'App\\SupportedApps\\neightn\\neightn' => __DIR__ . '/../..' . '/app/SupportedApps/neightn/neightn.php', 'App\\SupportedApps\\openHAB\\openHAB' => __DIR__ . '/../..' . '/app/SupportedApps/openHAB/openHAB.php', 'App\\SupportedApps\\openmediavault\\openmediavault' => __DIR__ . '/../..' . '/app/SupportedApps/openmediavault/openmediavault.php', + 'App\\SupportedApps\\osTicket\\osTicket' => __DIR__ . '/../..' . '/app/SupportedApps/osTicket/osTicket.php', 'App\\SupportedApps\\ownCloud\\ownCloud' => __DIR__ . '/../..' . '/app/SupportedApps/ownCloud/ownCloud.php', 'App\\SupportedApps\\pfSense\\pfSense' => __DIR__ . '/../..' . '/app/SupportedApps/pfSense/pfSense.php', 'App\\SupportedApps\\pgAdmin\\pgAdmin' => __DIR__ . '/../..' . '/app/SupportedApps/pgAdmin/pgAdmin.php', + 'App\\SupportedApps\\phpIPAM\\phpIPAM' => __DIR__ . '/../..' . '/app/SupportedApps/phpIPAM/phpIPAM.php', 'App\\SupportedApps\\phpLDAPadmin\\phpLDAPadmin' => __DIR__ . '/../..' . '/app/SupportedApps/phpLDAPadmin/phpLDAPadmin.php', 'App\\SupportedApps\\phpMyAdmin\\phpMyAdmin' => __DIR__ . '/../..' . '/app/SupportedApps/phpMyAdmin/phpMyAdmin.php', 'App\\SupportedApps\\pyLoad\\pyLoad' => __DIR__ . '/../..' . '/app/SupportedApps/pyLoad/pyLoad.php', 'App\\SupportedApps\\qBittorrent\\qBittorrent' => __DIR__ . '/../..' . '/app/SupportedApps/qBittorrent/qBittorrent.php', 'App\\SupportedApps\\ruTorrent\\ruTorrent' => __DIR__ . '/../..' . '/app/SupportedApps/ruTorrent/ruTorrent.php', + 'App\\SupportedApps\\vmwarehorizon\\vmwarehorizon' => __DIR__ . '/../..' . '/app/SupportedApps/vmwarehorizon/vmwarehorizon.php', + 'App\\SupportedApps\\xTeVe\\xTeVe' => __DIR__ . '/../..' . '/app/SupportedApps/xTeVe/xTeVe.php', + 'App\\SupportedApps\\youtubedl\\youtubedl' => __DIR__ . '/../..' . '/app/SupportedApps/youtubedl/youtubedl.php', 'App\\User' => __DIR__ . '/../..' . '/app/User.php', + 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Brick\\Math\\BigDecimal' => __DIR__ . '/..' . '/brick/math/src/BigDecimal.php', + 'Brick\\Math\\BigInteger' => __DIR__ . '/..' . '/brick/math/src/BigInteger.php', + 'Brick\\Math\\BigNumber' => __DIR__ . '/..' . '/brick/math/src/BigNumber.php', + 'Brick\\Math\\BigRational' => __DIR__ . '/..' . '/brick/math/src/BigRational.php', + 'Brick\\Math\\Exception\\DivisionByZeroException' => __DIR__ . '/..' . '/brick/math/src/Exception/DivisionByZeroException.php', + 'Brick\\Math\\Exception\\IntegerOverflowException' => __DIR__ . '/..' . '/brick/math/src/Exception/IntegerOverflowException.php', + 'Brick\\Math\\Exception\\MathException' => __DIR__ . '/..' . '/brick/math/src/Exception/MathException.php', + 'Brick\\Math\\Exception\\NegativeNumberException' => __DIR__ . '/..' . '/brick/math/src/Exception/NegativeNumberException.php', + 'Brick\\Math\\Exception\\NumberFormatException' => __DIR__ . '/..' . '/brick/math/src/Exception/NumberFormatException.php', + 'Brick\\Math\\Exception\\RoundingNecessaryException' => __DIR__ . '/..' . '/brick/math/src/Exception/RoundingNecessaryException.php', + 'Brick\\Math\\Internal\\Calculator' => __DIR__ . '/..' . '/brick/math/src/Internal/Calculator.php', + 'Brick\\Math\\Internal\\Calculator\\BcMathCalculator' => __DIR__ . '/..' . '/brick/math/src/Internal/Calculator/BcMathCalculator.php', + 'Brick\\Math\\Internal\\Calculator\\GmpCalculator' => __DIR__ . '/..' . '/brick/math/src/Internal/Calculator/GmpCalculator.php', + 'Brick\\Math\\Internal\\Calculator\\NativeCalculator' => __DIR__ . '/..' . '/brick/math/src/Internal/Calculator/NativeCalculator.php', + 'Brick\\Math\\RoundingMode' => __DIR__ . '/..' . '/brick/math/src/RoundingMode.php', + 'Carbon\\AbstractTranslator' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/AbstractTranslator.php', 'Carbon\\Carbon' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Carbon.php', + 'Carbon\\CarbonConverterInterface' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/CarbonConverterInterface.php', + 'Carbon\\CarbonImmutable' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/CarbonImmutable.php', + 'Carbon\\CarbonInterface' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/CarbonInterface.php', 'Carbon\\CarbonInterval' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/CarbonInterval.php', 'Carbon\\CarbonPeriod' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/CarbonPeriod.php', + 'Carbon\\CarbonTimeZone' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/CarbonTimeZone.php', + 'Carbon\\Cli\\Invoker' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Cli/Invoker.php', + 'Carbon\\Doctrine\\CarbonDoctrineType' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Doctrine/CarbonDoctrineType.php', + 'Carbon\\Doctrine\\CarbonImmutableType' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Doctrine/CarbonImmutableType.php', + 'Carbon\\Doctrine\\CarbonType' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Doctrine/CarbonType.php', + 'Carbon\\Doctrine\\CarbonTypeConverter' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Doctrine/CarbonTypeConverter.php', + 'Carbon\\Doctrine\\DateTimeDefaultPrecision' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Doctrine/DateTimeDefaultPrecision.php', + 'Carbon\\Doctrine\\DateTimeImmutableType' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Doctrine/DateTimeImmutableType.php', + 'Carbon\\Doctrine\\DateTimeType' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Doctrine/DateTimeType.php', + 'Carbon\\Exceptions\\BadComparisonUnitException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/BadComparisonUnitException.php', + 'Carbon\\Exceptions\\BadFluentConstructorException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/BadFluentConstructorException.php', + 'Carbon\\Exceptions\\BadFluentSetterException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/BadFluentSetterException.php', + 'Carbon\\Exceptions\\BadMethodCallException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/BadMethodCallException.php', + 'Carbon\\Exceptions\\Exception' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/Exception.php', + 'Carbon\\Exceptions\\ImmutableException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/ImmutableException.php', + 'Carbon\\Exceptions\\InvalidArgumentException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/InvalidArgumentException.php', + 'Carbon\\Exceptions\\InvalidCastException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/InvalidCastException.php', 'Carbon\\Exceptions\\InvalidDateException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php', + 'Carbon\\Exceptions\\InvalidFormatException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/InvalidFormatException.php', + 'Carbon\\Exceptions\\InvalidIntervalException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/InvalidIntervalException.php', + 'Carbon\\Exceptions\\InvalidPeriodDateException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodDateException.php', + 'Carbon\\Exceptions\\InvalidPeriodParameterException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodParameterException.php', + 'Carbon\\Exceptions\\InvalidTimeZoneException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/InvalidTimeZoneException.php', + 'Carbon\\Exceptions\\InvalidTypeException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/InvalidTypeException.php', + 'Carbon\\Exceptions\\NotACarbonClassException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/NotACarbonClassException.php', + 'Carbon\\Exceptions\\NotAPeriodException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/NotAPeriodException.php', + 'Carbon\\Exceptions\\NotLocaleAwareException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/NotLocaleAwareException.php', + 'Carbon\\Exceptions\\OutOfRangeException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/OutOfRangeException.php', + 'Carbon\\Exceptions\\ParseErrorException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/ParseErrorException.php', + 'Carbon\\Exceptions\\RuntimeException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/RuntimeException.php', + 'Carbon\\Exceptions\\UnitException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/UnitException.php', + 'Carbon\\Exceptions\\UnitNotConfiguredException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/UnitNotConfiguredException.php', + 'Carbon\\Exceptions\\UnknownGetterException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/UnknownGetterException.php', + 'Carbon\\Exceptions\\UnknownMethodException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/UnknownMethodException.php', + 'Carbon\\Exceptions\\UnknownSetterException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/UnknownSetterException.php', + 'Carbon\\Exceptions\\UnknownUnitException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/UnknownUnitException.php', + 'Carbon\\Exceptions\\UnreachableException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/UnreachableException.php', + 'Carbon\\Factory' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Factory.php', + 'Carbon\\FactoryImmutable' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/FactoryImmutable.php', + 'Carbon\\Language' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Language.php', 'Carbon\\Laravel\\ServiceProvider' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Laravel/ServiceProvider.php', + 'Carbon\\PHPStan\\AbstractMacro' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/PHPStan/AbstractMacro.php', + 'Carbon\\PHPStan\\Macro' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/PHPStan/Macro.php', + 'Carbon\\PHPStan\\MacroExtension' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/PHPStan/MacroExtension.php', + 'Carbon\\PHPStan\\MacroScanner' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/PHPStan/MacroScanner.php', + 'Carbon\\Traits\\Boundaries' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Boundaries.php', + 'Carbon\\Traits\\Cast' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Cast.php', + 'Carbon\\Traits\\Comparison' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Comparison.php', + 'Carbon\\Traits\\Converter' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Converter.php', + 'Carbon\\Traits\\Creator' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Creator.php', + 'Carbon\\Traits\\Date' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Date.php', + 'Carbon\\Traits\\DeprecatedProperties' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/DeprecatedProperties.php', + 'Carbon\\Traits\\Difference' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Difference.php', + 'Carbon\\Traits\\IntervalRounding' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/IntervalRounding.php', + 'Carbon\\Traits\\IntervalStep' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/IntervalStep.php', + 'Carbon\\Traits\\Localization' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Localization.php', + 'Carbon\\Traits\\Macro' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Macro.php', + 'Carbon\\Traits\\Mixin' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Mixin.php', + 'Carbon\\Traits\\Modifiers' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Modifiers.php', + 'Carbon\\Traits\\Mutability' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Mutability.php', + 'Carbon\\Traits\\ObjectInitialisation' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/ObjectInitialisation.php', + 'Carbon\\Traits\\Options' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Options.php', + 'Carbon\\Traits\\Rounding' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Rounding.php', + 'Carbon\\Traits\\Serialization' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Serialization.php', + 'Carbon\\Traits\\Test' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Test.php', + 'Carbon\\Traits\\Timestamp' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Timestamp.php', + 'Carbon\\Traits\\Units' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Units.php', + 'Carbon\\Traits\\Week' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Traits/Week.php', 'Carbon\\Translator' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Translator.php', - 'Carbon\\Upgrade' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Upgrade.php', + 'Carbon\\TranslatorImmutable' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/TranslatorImmutable.php', + 'Carbon\\TranslatorStrongTypeInterface' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/TranslatorStrongTypeInterface.php', 'Clue\\StreamFilter\\CallbackFilter' => __DIR__ . '/..' . '/clue/stream-filter/src/CallbackFilter.php', 'Collective\\Html\\Componentable' => __DIR__ . '/..' . '/laravelcollective/html/src/Componentable.php', 'Collective\\Html\\Eloquent\\FormAccessible' => __DIR__ . '/..' . '/laravelcollective/html/src/Eloquent/FormAccessible.php', @@ -730,6 +999,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Collective\\Html\\HtmlBuilder' => __DIR__ . '/..' . '/laravelcollective/html/src/HtmlBuilder.php', 'Collective\\Html\\HtmlFacade' => __DIR__ . '/..' . '/laravelcollective/html/src/HtmlFacade.php', 'Collective\\Html\\HtmlServiceProvider' => __DIR__ . '/..' . '/laravelcollective/html/src/HtmlServiceProvider.php', + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 'Cron\\AbstractField' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/AbstractField.php', 'Cron\\CronExpression' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/CronExpression.php', 'Cron\\DayOfMonthField' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php', @@ -759,12 +1029,53 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php', 'DeepCopy\\TypeFilter\\ReplaceFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php', 'DeepCopy\\TypeFilter\\ShallowCopyFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php', + 'DeepCopy\\TypeFilter\\Spl\\ArrayObjectFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php', 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedList' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php', 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php', 'DeepCopy\\TypeFilter\\TypeFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php', 'DeepCopy\\TypeMatcher\\TypeMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php', - 'Doctrine\\Common\\Inflector\\Inflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php', 'Doctrine\\Common\\Lexer\\AbstractLexer' => __DIR__ . '/..' . '/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php', + 'Doctrine\\Inflector\\CachedWordInflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php', + 'Doctrine\\Inflector\\GenericLanguageInflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php', + 'Doctrine\\Inflector\\Inflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php', + 'Doctrine\\Inflector\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php', + 'Doctrine\\Inflector\\Language' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Language.php', + 'Doctrine\\Inflector\\LanguageInflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/LanguageInflectorFactory.php', + 'Doctrine\\Inflector\\NoopWordInflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/NoopWordInflector.php', + 'Doctrine\\Inflector\\Rules\\English\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Inflectible.php', + 'Doctrine\\Inflector\\Rules\\English\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/InflectorFactory.php', + 'Doctrine\\Inflector\\Rules\\English\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Rules.php', + 'Doctrine\\Inflector\\Rules\\English\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php', + 'Doctrine\\Inflector\\Rules\\French\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Inflectible.php', + 'Doctrine\\Inflector\\Rules\\French\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/InflectorFactory.php', + 'Doctrine\\Inflector\\Rules\\French\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Rules.php', + 'Doctrine\\Inflector\\Rules\\French\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php', + 'Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Inflectible.php', + 'Doctrine\\Inflector\\Rules\\NorwegianBokmal\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/InflectorFactory.php', + 'Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Rules.php', + 'Doctrine\\Inflector\\Rules\\NorwegianBokmal\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php', + 'Doctrine\\Inflector\\Rules\\Pattern' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Pattern.php', + 'Doctrine\\Inflector\\Rules\\Patterns' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php', + 'Doctrine\\Inflector\\Rules\\Portuguese\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php', + 'Doctrine\\Inflector\\Rules\\Portuguese\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/InflectorFactory.php', + 'Doctrine\\Inflector\\Rules\\Portuguese\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Rules.php', + 'Doctrine\\Inflector\\Rules\\Portuguese\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php', + 'Doctrine\\Inflector\\Rules\\Ruleset' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Ruleset.php', + 'Doctrine\\Inflector\\Rules\\Spanish\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php', + 'Doctrine\\Inflector\\Rules\\Spanish\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/InflectorFactory.php', + 'Doctrine\\Inflector\\Rules\\Spanish\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Rules.php', + 'Doctrine\\Inflector\\Rules\\Spanish\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php', + 'Doctrine\\Inflector\\Rules\\Substitution' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitution.php', + 'Doctrine\\Inflector\\Rules\\Substitutions' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php', + 'Doctrine\\Inflector\\Rules\\Transformation' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php', + 'Doctrine\\Inflector\\Rules\\Transformations' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php', + 'Doctrine\\Inflector\\Rules\\Turkish\\Inflectible' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php', + 'Doctrine\\Inflector\\Rules\\Turkish\\InflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/InflectorFactory.php', + 'Doctrine\\Inflector\\Rules\\Turkish\\Rules' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Rules.php', + 'Doctrine\\Inflector\\Rules\\Turkish\\Uninflected' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php', + 'Doctrine\\Inflector\\Rules\\Word' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/Rules/Word.php', + 'Doctrine\\Inflector\\RulesetInflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php', + 'Doctrine\\Inflector\\WordInflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php', 'Doctrine\\Instantiator\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php', 'Doctrine\\Instantiator\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php', 'Doctrine\\Instantiator\\Exception\\UnexpectedValueException' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php', @@ -772,76 +1083,103 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Doctrine\\Instantiator\\InstantiatorInterface' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php', 'Dotenv\\Dotenv' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Dotenv.php', 'Dotenv\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/ExceptionInterface.php', - 'Dotenv\\Exception\\InvalidCallbackException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/InvalidCallbackException.php', 'Dotenv\\Exception\\InvalidFileException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/InvalidFileException.php', 'Dotenv\\Exception\\InvalidPathException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/InvalidPathException.php', 'Dotenv\\Exception\\ValidationException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/ValidationException.php', - 'Dotenv\\Loader' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader.php', - 'Dotenv\\Parser' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Parser.php', + 'Dotenv\\Loader\\Lines' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Lines.php', + 'Dotenv\\Loader\\Loader' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Loader.php', + 'Dotenv\\Loader\\LoaderInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/LoaderInterface.php', + 'Dotenv\\Loader\\Parser' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Parser.php', + 'Dotenv\\Loader\\Value' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Value.php', + 'Dotenv\\Regex\\Regex' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Regex/Regex.php', + 'Dotenv\\Repository\\AbstractRepository' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/AbstractRepository.php', + 'Dotenv\\Repository\\AdapterRepository' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/AdapterRepository.php', + 'Dotenv\\Repository\\Adapter\\ApacheAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php', + 'Dotenv\\Repository\\Adapter\\ArrayAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php', + 'Dotenv\\Repository\\Adapter\\AvailabilityInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php', + 'Dotenv\\Repository\\Adapter\\EnvConstAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php', + 'Dotenv\\Repository\\Adapter\\PutenvAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php', + 'Dotenv\\Repository\\Adapter\\ReaderInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php', + 'Dotenv\\Repository\\Adapter\\ServerConstAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php', + 'Dotenv\\Repository\\Adapter\\WriterInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php', + 'Dotenv\\Repository\\RepositoryBuilder' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php', + 'Dotenv\\Repository\\RepositoryInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/RepositoryInterface.php', + 'Dotenv\\Result\\Error' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Result/Error.php', + 'Dotenv\\Result\\Result' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Result/Result.php', + 'Dotenv\\Result\\Success' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Result/Success.php', + 'Dotenv\\Store\\FileStore' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/FileStore.php', + 'Dotenv\\Store\\File\\Paths' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/File/Paths.php', + 'Dotenv\\Store\\File\\Reader' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/File/Reader.php', + 'Dotenv\\Store\\StoreBuilder' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/StoreBuilder.php', + 'Dotenv\\Store\\StoreInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/StoreInterface.php', + 'Dotenv\\Store\\StringStore' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/StringStore.php', 'Dotenv\\Validator' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Validator.php', - 'Egulias\\EmailValidator\\EmailLexer' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/EmailLexer.php', - 'Egulias\\EmailValidator\\EmailParser' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/EmailParser.php', - 'Egulias\\EmailValidator\\EmailValidator' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/EmailValidator.php', - 'Egulias\\EmailValidator\\Exception\\AtextAfterCFWS' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/AtextAfterCFWS.php', - 'Egulias\\EmailValidator\\Exception\\CRLFAtTheEnd' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/CRLFAtTheEnd.php', - 'Egulias\\EmailValidator\\Exception\\CRLFX2' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/CRLFX2.php', - 'Egulias\\EmailValidator\\Exception\\CRNoLF' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/CRNoLF.php', - 'Egulias\\EmailValidator\\Exception\\CharNotAllowed' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/CharNotAllowed.php', - 'Egulias\\EmailValidator\\Exception\\CommaInDomain' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/CommaInDomain.php', - 'Egulias\\EmailValidator\\Exception\\ConsecutiveAt' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/ConsecutiveAt.php', - 'Egulias\\EmailValidator\\Exception\\ConsecutiveDot' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/ConsecutiveDot.php', - 'Egulias\\EmailValidator\\Exception\\DomainHyphened' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/DomainHyphened.php', - 'Egulias\\EmailValidator\\Exception\\DotAtEnd' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/DotAtEnd.php', - 'Egulias\\EmailValidator\\Exception\\DotAtStart' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/DotAtStart.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingAT' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/ExpectingAT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingATEXT' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/ExpectingATEXT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingCTEXT' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/ExpectingCTEXT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingDTEXT' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/ExpectingDTEXT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingDomainLiteralClose' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/ExpectingDomainLiteralClose.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingQPair' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/ExpectingQPair.php', - 'Egulias\\EmailValidator\\Exception\\InvalidEmail' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/InvalidEmail.php', - 'Egulias\\EmailValidator\\Exception\\NoDNSRecord' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/NoDNSRecord.php', - 'Egulias\\EmailValidator\\Exception\\NoDomainPart' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/NoDomainPart.php', - 'Egulias\\EmailValidator\\Exception\\NoLocalPart' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/NoLocalPart.php', - 'Egulias\\EmailValidator\\Exception\\UnclosedComment' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php', - 'Egulias\\EmailValidator\\Exception\\UnclosedQuotedString' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/UnclosedQuotedString.php', - 'Egulias\\EmailValidator\\Exception\\UnopenedComment' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/UnopenedComment.php', - 'Egulias\\EmailValidator\\Parser\\DomainPart' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Parser/DomainPart.php', - 'Egulias\\EmailValidator\\Parser\\LocalPart' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Parser/LocalPart.php', - 'Egulias\\EmailValidator\\Parser\\Parser' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Parser/Parser.php', - 'Egulias\\EmailValidator\\Validation\\DNSCheckValidation' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php', - 'Egulias\\EmailValidator\\Validation\\EmailValidation' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Validation/EmailValidation.php', - 'Egulias\\EmailValidator\\Validation\\Error\\RFCWarnings' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Validation/Error/RFCWarnings.php', - 'Egulias\\EmailValidator\\Validation\\Error\\SpoofEmail' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Validation/Error/SpoofEmail.php', - 'Egulias\\EmailValidator\\Validation\\Exception\\EmptyValidationList' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php', - 'Egulias\\EmailValidator\\Validation\\MultipleErrors' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php', - 'Egulias\\EmailValidator\\Validation\\MultipleValidationWithAnd' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php', - 'Egulias\\EmailValidator\\Validation\\NoRFCWarningsValidation' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php', - 'Egulias\\EmailValidator\\Validation\\RFCValidation' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Validation/RFCValidation.php', - 'Egulias\\EmailValidator\\Validation\\SpoofCheckValidation' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php', - 'Egulias\\EmailValidator\\Warning\\AddressLiteral' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/AddressLiteral.php', - 'Egulias\\EmailValidator\\Warning\\CFWSNearAt' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/CFWSNearAt.php', - 'Egulias\\EmailValidator\\Warning\\CFWSWithFWS' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/CFWSWithFWS.php', - 'Egulias\\EmailValidator\\Warning\\Comment' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/Comment.php', - 'Egulias\\EmailValidator\\Warning\\DeprecatedComment' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/DeprecatedComment.php', - 'Egulias\\EmailValidator\\Warning\\DomainLiteral' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/DomainLiteral.php', - 'Egulias\\EmailValidator\\Warning\\DomainTooLong' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/DomainTooLong.php', - 'Egulias\\EmailValidator\\Warning\\EmailTooLong' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/EmailTooLong.php', - 'Egulias\\EmailValidator\\Warning\\IPV6BadChar' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/IPV6BadChar.php', - 'Egulias\\EmailValidator\\Warning\\IPV6ColonEnd' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/IPV6ColonEnd.php', - 'Egulias\\EmailValidator\\Warning\\IPV6ColonStart' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/IPV6ColonStart.php', - 'Egulias\\EmailValidator\\Warning\\IPV6Deprecated' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/IPV6Deprecated.php', - 'Egulias\\EmailValidator\\Warning\\IPV6DoubleColon' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/IPV6DoubleColon.php', - 'Egulias\\EmailValidator\\Warning\\IPV6GroupCount' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/IPV6GroupCount.php', - 'Egulias\\EmailValidator\\Warning\\IPV6MaxGroups' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/IPV6MaxGroups.php', - 'Egulias\\EmailValidator\\Warning\\LabelTooLong' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/LabelTooLong.php', - 'Egulias\\EmailValidator\\Warning\\LocalTooLong' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/LocalTooLong.php', - 'Egulias\\EmailValidator\\Warning\\NoDNSMXRecord' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/NoDNSMXRecord.php', - 'Egulias\\EmailValidator\\Warning\\ObsoleteDTEXT' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/ObsoleteDTEXT.php', - 'Egulias\\EmailValidator\\Warning\\QuotedPart' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/QuotedPart.php', - 'Egulias\\EmailValidator\\Warning\\QuotedString' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/QuotedString.php', - 'Egulias\\EmailValidator\\Warning\\TLD' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/TLD.php', - 'Egulias\\EmailValidator\\Warning\\Warning' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Warning/Warning.php', + 'Egulias\\EmailValidator\\EmailLexer' => __DIR__ . '/..' . '/egulias/email-validator/src/EmailLexer.php', + 'Egulias\\EmailValidator\\EmailParser' => __DIR__ . '/..' . '/egulias/email-validator/src/EmailParser.php', + 'Egulias\\EmailValidator\\EmailValidator' => __DIR__ . '/..' . '/egulias/email-validator/src/EmailValidator.php', + 'Egulias\\EmailValidator\\Exception\\AtextAfterCFWS' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/AtextAfterCFWS.php', + 'Egulias\\EmailValidator\\Exception\\CRLFAtTheEnd' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/CRLFAtTheEnd.php', + 'Egulias\\EmailValidator\\Exception\\CRLFX2' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/CRLFX2.php', + 'Egulias\\EmailValidator\\Exception\\CRNoLF' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/CRNoLF.php', + 'Egulias\\EmailValidator\\Exception\\CharNotAllowed' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/CharNotAllowed.php', + 'Egulias\\EmailValidator\\Exception\\CommaInDomain' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/CommaInDomain.php', + 'Egulias\\EmailValidator\\Exception\\ConsecutiveAt' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ConsecutiveAt.php', + 'Egulias\\EmailValidator\\Exception\\ConsecutiveDot' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ConsecutiveDot.php', + 'Egulias\\EmailValidator\\Exception\\DomainAcceptsNoMail' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/DomainAcceptsNoMail.php', + 'Egulias\\EmailValidator\\Exception\\DomainHyphened' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/DomainHyphened.php', + 'Egulias\\EmailValidator\\Exception\\DotAtEnd' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/DotAtEnd.php', + 'Egulias\\EmailValidator\\Exception\\DotAtStart' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/DotAtStart.php', + 'Egulias\\EmailValidator\\Exception\\ExpectingAT' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ExpectingAT.php', + 'Egulias\\EmailValidator\\Exception\\ExpectingATEXT' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ExpectingATEXT.php', + 'Egulias\\EmailValidator\\Exception\\ExpectingCTEXT' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ExpectingCTEXT.php', + 'Egulias\\EmailValidator\\Exception\\ExpectingDTEXT' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ExpectingDTEXT.php', + 'Egulias\\EmailValidator\\Exception\\ExpectingDomainLiteralClose' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ExpectingDomainLiteralClose.php', + 'Egulias\\EmailValidator\\Exception\\ExpectingQPair' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ExpectingQPair.php', + 'Egulias\\EmailValidator\\Exception\\InvalidEmail' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/InvalidEmail.php', + 'Egulias\\EmailValidator\\Exception\\LocalOrReservedDomain' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/LocalOrReservedDomain.php', + 'Egulias\\EmailValidator\\Exception\\NoDNSRecord' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/NoDNSRecord.php', + 'Egulias\\EmailValidator\\Exception\\NoDomainPart' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/NoDomainPart.php', + 'Egulias\\EmailValidator\\Exception\\NoLocalPart' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/NoLocalPart.php', + 'Egulias\\EmailValidator\\Exception\\UnclosedComment' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/UnclosedComment.php', + 'Egulias\\EmailValidator\\Exception\\UnclosedQuotedString' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/UnclosedQuotedString.php', + 'Egulias\\EmailValidator\\Exception\\UnopenedComment' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/UnopenedComment.php', + 'Egulias\\EmailValidator\\Parser\\DomainPart' => __DIR__ . '/..' . '/egulias/email-validator/src/Parser/DomainPart.php', + 'Egulias\\EmailValidator\\Parser\\LocalPart' => __DIR__ . '/..' . '/egulias/email-validator/src/Parser/LocalPart.php', + 'Egulias\\EmailValidator\\Parser\\Parser' => __DIR__ . '/..' . '/egulias/email-validator/src/Parser/Parser.php', + 'Egulias\\EmailValidator\\Validation\\DNSCheckValidation' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/DNSCheckValidation.php', + 'Egulias\\EmailValidator\\Validation\\EmailValidation' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/EmailValidation.php', + 'Egulias\\EmailValidator\\Validation\\Error\\RFCWarnings' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/Error/RFCWarnings.php', + 'Egulias\\EmailValidator\\Validation\\Error\\SpoofEmail' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/Error/SpoofEmail.php', + 'Egulias\\EmailValidator\\Validation\\Exception\\EmptyValidationList' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php', + 'Egulias\\EmailValidator\\Validation\\MultipleErrors' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/MultipleErrors.php', + 'Egulias\\EmailValidator\\Validation\\MultipleValidationWithAnd' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php', + 'Egulias\\EmailValidator\\Validation\\NoRFCWarningsValidation' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php', + 'Egulias\\EmailValidator\\Validation\\RFCValidation' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/RFCValidation.php', + 'Egulias\\EmailValidator\\Validation\\SpoofCheckValidation' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/SpoofCheckValidation.php', + 'Egulias\\EmailValidator\\Warning\\AddressLiteral' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/AddressLiteral.php', + 'Egulias\\EmailValidator\\Warning\\CFWSNearAt' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/CFWSNearAt.php', + 'Egulias\\EmailValidator\\Warning\\CFWSWithFWS' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/CFWSWithFWS.php', + 'Egulias\\EmailValidator\\Warning\\Comment' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/Comment.php', + 'Egulias\\EmailValidator\\Warning\\DeprecatedComment' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/DeprecatedComment.php', + 'Egulias\\EmailValidator\\Warning\\DomainLiteral' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/DomainLiteral.php', + 'Egulias\\EmailValidator\\Warning\\DomainTooLong' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/DomainTooLong.php', + 'Egulias\\EmailValidator\\Warning\\EmailTooLong' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/EmailTooLong.php', + 'Egulias\\EmailValidator\\Warning\\IPV6BadChar' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/IPV6BadChar.php', + 'Egulias\\EmailValidator\\Warning\\IPV6ColonEnd' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/IPV6ColonEnd.php', + 'Egulias\\EmailValidator\\Warning\\IPV6ColonStart' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/IPV6ColonStart.php', + 'Egulias\\EmailValidator\\Warning\\IPV6Deprecated' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/IPV6Deprecated.php', + 'Egulias\\EmailValidator\\Warning\\IPV6DoubleColon' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/IPV6DoubleColon.php', + 'Egulias\\EmailValidator\\Warning\\IPV6GroupCount' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/IPV6GroupCount.php', + 'Egulias\\EmailValidator\\Warning\\IPV6MaxGroups' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/IPV6MaxGroups.php', + 'Egulias\\EmailValidator\\Warning\\LabelTooLong' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/LabelTooLong.php', + 'Egulias\\EmailValidator\\Warning\\LocalTooLong' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/LocalTooLong.php', + 'Egulias\\EmailValidator\\Warning\\NoDNSMXRecord' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/NoDNSMXRecord.php', + 'Egulias\\EmailValidator\\Warning\\ObsoleteDTEXT' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/ObsoleteDTEXT.php', + 'Egulias\\EmailValidator\\Warning\\QuotedPart' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/QuotedPart.php', + 'Egulias\\EmailValidator\\Warning\\QuotedString' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/QuotedString.php', + 'Egulias\\EmailValidator\\Warning\\TLD' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/TLD.php', + 'Egulias\\EmailValidator\\Warning\\Warning' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/Warning.php', + 'Faker\\Calculator\\Ean' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Calculator/Ean.php', 'Faker\\Calculator\\Iban' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Calculator/Iban.php', 'Faker\\Calculator\\Inn' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Calculator/Inn.php', 'Faker\\Calculator\\Luhn' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Calculator/Luhn.php', @@ -1005,6 +1343,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Faker\\Provider\\es_AR\\Person' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/es_AR/Person.php', 'Faker\\Provider\\es_AR\\PhoneNumber' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/es_AR/PhoneNumber.php', 'Faker\\Provider\\es_ES\\Address' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/es_ES/Address.php', + 'Faker\\Provider\\es_ES\\Color' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/es_ES/Color.php', 'Faker\\Provider\\es_ES\\Company' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/es_ES/Company.php', 'Faker\\Provider\\es_ES\\Internet' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/es_ES/Internet.php', 'Faker\\Provider\\es_ES\\Payment' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/es_ES/Payment.php', @@ -1020,6 +1359,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Faker\\Provider\\es_VE\\Internet' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/es_VE/Internet.php', 'Faker\\Provider\\es_VE\\Person' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/es_VE/Person.php', 'Faker\\Provider\\es_VE\\PhoneNumber' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/es_VE/PhoneNumber.php', + 'Faker\\Provider\\et_EE\\Person' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/et_EE/Person.php', 'Faker\\Provider\\fa_IR\\Address' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/fa_IR/Address.php', 'Faker\\Provider\\fa_IR\\Company' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/fa_IR/Company.php', 'Faker\\Provider\\fa_IR\\Internet' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/fa_IR/Internet.php', @@ -1041,6 +1381,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Faker\\Provider\\fr_CA\\Address' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/fr_CA/Address.php', 'Faker\\Provider\\fr_CA\\Company' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/fr_CA/Company.php', 'Faker\\Provider\\fr_CA\\Person' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/fr_CA/Person.php', + 'Faker\\Provider\\fr_CA\\Text' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/fr_CA/Text.php', 'Faker\\Provider\\fr_CH\\Address' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/fr_CH/Address.php', 'Faker\\Provider\\fr_CH\\Company' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/fr_CH/Company.php', 'Faker\\Provider\\fr_CH\\Internet' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/fr_CH/Internet.php', @@ -1078,6 +1419,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Faker\\Provider\\hy_AM\\Person' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/hy_AM/Person.php', 'Faker\\Provider\\hy_AM\\PhoneNumber' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/hy_AM/PhoneNumber.php', 'Faker\\Provider\\id_ID\\Address' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/id_ID/Address.php', + 'Faker\\Provider\\id_ID\\Color' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/id_ID/Color.php', 'Faker\\Provider\\id_ID\\Company' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/id_ID/Company.php', 'Faker\\Provider\\id_ID\\Internet' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/id_ID/Internet.php', 'Faker\\Provider\\id_ID\\Person' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/id_ID/Person.php', @@ -1171,6 +1513,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Faker\\Provider\\nl_BE\\Payment' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/nl_BE/Payment.php', 'Faker\\Provider\\nl_BE\\Person' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/nl_BE/Person.php', 'Faker\\Provider\\nl_BE\\PhoneNumber' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/nl_BE/PhoneNumber.php', + 'Faker\\Provider\\nl_BE\\Text' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/nl_BE/Text.php', 'Faker\\Provider\\nl_NL\\Address' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/nl_NL/Address.php', 'Faker\\Provider\\nl_NL\\Color' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/nl_NL/Color.php', 'Faker\\Provider\\nl_NL\\Company' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/nl_NL/Company.php', @@ -1193,6 +1536,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Faker\\Provider\\pt_BR\\Person' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/pt_BR/Person.php', 'Faker\\Provider\\pt_BR\\PhoneNumber' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/pt_BR/PhoneNumber.php', 'Faker\\Provider\\pt_PT\\Address' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/pt_PT/Address.php', + 'Faker\\Provider\\pt_PT\\Company' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/pt_PT/Company.php', + 'Faker\\Provider\\pt_PT\\Internet' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/pt_PT/Internet.php', 'Faker\\Provider\\pt_PT\\Payment' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/pt_PT/Payment.php', 'Faker\\Provider\\pt_PT\\Person' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/pt_PT/Person.php', 'Faker\\Provider\\pt_PT\\PhoneNumber' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/pt_PT/PhoneNumber.php', @@ -1245,6 +1590,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Faker\\Provider\\th_TH\\Company' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/th_TH/Company.php', 'Faker\\Provider\\th_TH\\Internet' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/th_TH/Internet.php', 'Faker\\Provider\\th_TH\\Payment' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/th_TH/Payment.php', + 'Faker\\Provider\\th_TH\\Person' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/th_TH/Person.php', 'Faker\\Provider\\th_TH\\PhoneNumber' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/th_TH/PhoneNumber.php', 'Faker\\Provider\\tr_TR\\Address' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/tr_TR/Address.php', 'Faker\\Provider\\tr_TR\\Color' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Provider/tr_TR/Color.php', @@ -1293,7 +1639,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'File_Iterator_Factory' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Factory.php', 'Github\\Api\\AbstractApi' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/AbstractApi.php', 'Github\\Api\\AcceptHeaderTrait' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/AcceptHeaderTrait.php', - 'Github\\Api\\ApiInterface' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/ApiInterface.php', 'Github\\Api\\Apps' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Apps.php', 'Github\\Api\\Authorizations' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Authorizations.php', 'Github\\Api\\CurrentUser' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/CurrentUser.php', @@ -1319,7 +1664,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Github\\Api\\GitData\\Tags' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/GitData/Tags.php', 'Github\\Api\\GitData\\Trees' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/GitData/Trees.php', 'Github\\Api\\GraphQL' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/GraphQL.php', - 'Github\\Api\\Integrations' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Integrations.php', 'Github\\Api\\Issue' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Issue.php', 'Github\\Api\\Issue\\Assignees' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Issue/Assignees.php', 'Github\\Api\\Issue\\Comments' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Issue/Comments.php', @@ -1335,8 +1679,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Github\\Api\\Miscellaneous\\Licenses' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Miscellaneous/Licenses.php', 'Github\\Api\\Notification' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Notification.php', 'Github\\Api\\Organization' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Organization.php', + 'Github\\Api\\Organization\\Actions\\Secrets' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Organization/Actions/Secrets.php', 'Github\\Api\\Organization\\Hooks' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Organization/Hooks.php', 'Github\\Api\\Organization\\Members' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Organization/Members.php', + 'Github\\Api\\Organization\\OutsideCollaborators' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Organization/OutsideCollaborators.php', 'Github\\Api\\Organization\\Projects' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Organization/Projects.php', 'Github\\Api\\Organization\\Teams' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Organization/Teams.php', 'Github\\Api\\Project\\AbstractProjectApi' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Project/AbstractProjectApi.php', @@ -1349,7 +1695,15 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Github\\Api\\RateLimit' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/RateLimit.php', 'Github\\Api\\RateLimit\\RateLimitResource' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/RateLimit/RateLimitResource.php', 'Github\\Api\\Repo' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repo.php', + 'Github\\Api\\Repository\\Actions\\Artifacts' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Actions/Artifacts.php', + 'Github\\Api\\Repository\\Actions\\Secrets' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Actions/Secrets.php', + 'Github\\Api\\Repository\\Actions\\SelfHostedRunners' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Actions/SelfHostedRunners.php', + 'Github\\Api\\Repository\\Actions\\WorkflowJobs' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Actions/WorkflowJobs.php', + 'Github\\Api\\Repository\\Actions\\WorkflowRuns' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Actions/WorkflowRuns.php', + 'Github\\Api\\Repository\\Actions\\Workflows' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Actions/Workflows.php', 'Github\\Api\\Repository\\Assets' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Assets.php', + 'Github\\Api\\Repository\\Checks\\CheckRuns' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Checks/CheckRuns.php', + 'Github\\Api\\Repository\\Checks\\CheckSuites' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Checks/CheckSuites.php', 'Github\\Api\\Repository\\Collaborators' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Collaborators.php', 'Github\\Api\\Repository\\Comments' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Comments.php', 'Github\\Api\\Repository\\Commits' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Commits.php', @@ -1359,6 +1713,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Github\\Api\\Repository\\Forks' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Forks.php', 'Github\\Api\\Repository\\Hooks' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Hooks.php', 'Github\\Api\\Repository\\Labels' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Labels.php', + 'Github\\Api\\Repository\\Pages' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Pages.php', 'Github\\Api\\Repository\\Projects' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Projects.php', 'Github\\Api\\Repository\\Protection' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Protection.php', 'Github\\Api\\Repository\\Releases' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Releases.php', @@ -1367,6 +1722,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Github\\Api\\Repository\\Traffic' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Traffic.php', 'Github\\Api\\Search' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Search.php', 'Github\\Api\\User' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/User.php', + 'Github\\AuthMethod' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/AuthMethod.php', 'Github\\Client' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Client.php', 'Github\\Exception\\ApiLimitExceedException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/ApiLimitExceedException.php', 'Github\\Exception\\BadMethodCallException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/BadMethodCallException.php', @@ -1375,6 +1731,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Github\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/InvalidArgumentException.php', 'Github\\Exception\\MissingArgumentException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/MissingArgumentException.php', 'Github\\Exception\\RuntimeException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/RuntimeException.php', + 'Github\\Exception\\SsoRequiredException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/SsoRequiredException.php', 'Github\\Exception\\TwoFactorAuthenticationRequiredException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/TwoFactorAuthenticationRequiredException.php', 'Github\\Exception\\ValidationFailedException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/ValidationFailedException.php', 'Github\\HttpClient\\Builder' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/HttpClient/Builder.php', @@ -1385,24 +1742,30 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Github\\HttpClient\\Plugin\\PathPrepend' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/HttpClient/Plugin/PathPrepend.php', 'Github\\ResultPager' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/ResultPager.php', 'Github\\ResultPagerInterface' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/ResultPagerInterface.php', - 'GrahamCampbell\\CachePlugin\\CachePlugin' => __DIR__ . '/..' . '/graham-campbell/cache-plugin/src/CachePlugin.php', - 'GrahamCampbell\\GitHub\\Authenticators\\AbstractAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/AbstractAuthenticator.php', - 'GrahamCampbell\\GitHub\\Authenticators\\ApplicationAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/ApplicationAuthenticator.php', - 'GrahamCampbell\\GitHub\\Authenticators\\AuthenticatorFactory' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/AuthenticatorFactory.php', - 'GrahamCampbell\\GitHub\\Authenticators\\AuthenticatorInterface' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/AuthenticatorInterface.php', - 'GrahamCampbell\\GitHub\\Authenticators\\JwtAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/JwtAuthenticator.php', - 'GrahamCampbell\\GitHub\\Authenticators\\PasswordAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/PasswordAuthenticator.php', - 'GrahamCampbell\\GitHub\\Authenticators\\TokenAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/TokenAuthenticator.php', + 'GrahamCampbell\\BoundedCache\\BoundedCache' => __DIR__ . '/..' . '/graham-campbell/bounded-cache/src/BoundedCache.php', + 'GrahamCampbell\\BoundedCache\\BoundedCacheInterface' => __DIR__ . '/..' . '/graham-campbell/bounded-cache/src/BoundedCacheInterface.php', + 'GrahamCampbell\\BoundedCache\\TtlHelper' => __DIR__ . '/..' . '/graham-campbell/bounded-cache/src/TtlHelper.php', + 'GrahamCampbell\\GitHub\\Auth\\AuthenticatorFactory' => __DIR__ . '/..' . '/graham-campbell/github/src/Auth/AuthenticatorFactory.php', + 'GrahamCampbell\\GitHub\\Auth\\Authenticator\\AbstractAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Auth/Authenticator/AbstractAuthenticator.php', + 'GrahamCampbell\\GitHub\\Auth\\Authenticator\\ApplicationAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Auth/Authenticator/ApplicationAuthenticator.php', + 'GrahamCampbell\\GitHub\\Auth\\Authenticator\\AuthenticatorInterface' => __DIR__ . '/..' . '/graham-campbell/github/src/Auth/Authenticator/AuthenticatorInterface.php', + 'GrahamCampbell\\GitHub\\Auth\\Authenticator\\JwtAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Auth/Authenticator/JwtAuthenticator.php', + 'GrahamCampbell\\GitHub\\Auth\\Authenticator\\PrivateKeyAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Auth/Authenticator/PrivateKeyAuthenticator.php', + 'GrahamCampbell\\GitHub\\Auth\\Authenticator\\TokenAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Auth/Authenticator/TokenAuthenticator.php', + 'GrahamCampbell\\GitHub\\Cache\\ConnectionFactory' => __DIR__ . '/..' . '/graham-campbell/github/src/Cache/ConnectionFactory.php', + 'GrahamCampbell\\GitHub\\Cache\\Connector\\IlluminateConnector' => __DIR__ . '/..' . '/graham-campbell/github/src/Cache/Connector/IlluminateConnector.php', 'GrahamCampbell\\GitHub\\Facades\\GitHub' => __DIR__ . '/..' . '/graham-campbell/github/src/Facades/GitHub.php', 'GrahamCampbell\\GitHub\\GitHubFactory' => __DIR__ . '/..' . '/graham-campbell/github/src/GitHubFactory.php', 'GrahamCampbell\\GitHub\\GitHubManager' => __DIR__ . '/..' . '/graham-campbell/github/src/GitHubManager.php', 'GrahamCampbell\\GitHub\\GitHubServiceProvider' => __DIR__ . '/..' . '/graham-campbell/github/src/GitHubServiceProvider.php', - 'GrahamCampbell\\GitHub\\Http\\ClientBuilder' => __DIR__ . '/..' . '/graham-campbell/github/src/Http/ClientBuilder.php', 'GrahamCampbell\\Manager\\AbstractManager' => __DIR__ . '/..' . '/graham-campbell/manager/src/AbstractManager.php', 'GrahamCampbell\\Manager\\ConnectorInterface' => __DIR__ . '/..' . '/graham-campbell/manager/src/ConnectorInterface.php', 'GrahamCampbell\\Manager\\ManagerInterface' => __DIR__ . '/..' . '/graham-campbell/manager/src/ManagerInterface.php', + 'GuzzleHttp\\BodySummarizer' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/BodySummarizer.php', + 'GuzzleHttp\\BodySummarizerInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/BodySummarizerInterface.php', 'GuzzleHttp\\Client' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Client.php', 'GuzzleHttp\\ClientInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/ClientInterface.php', + 'GuzzleHttp\\ClientTrait' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/ClientTrait.php', 'GuzzleHttp\\Cookie\\CookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php', 'GuzzleHttp\\Cookie\\CookieJarInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php', 'GuzzleHttp\\Cookie\\FileCookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php', @@ -1412,8 +1775,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'GuzzleHttp\\Exception\\ClientException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ClientException.php', 'GuzzleHttp\\Exception\\ConnectException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ConnectException.php', 'GuzzleHttp\\Exception\\GuzzleException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php', + 'GuzzleHttp\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php', 'GuzzleHttp\\Exception\\RequestException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/RequestException.php', - 'GuzzleHttp\\Exception\\SeekException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/SeekException.php', 'GuzzleHttp\\Exception\\ServerException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ServerException.php', 'GuzzleHttp\\Exception\\TooManyRedirectsException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php', 'GuzzleHttp\\Exception\\TransferException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/TransferException.php', @@ -1423,18 +1786,23 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'GuzzleHttp\\Handler\\CurlHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php', 'GuzzleHttp\\Handler\\CurlMultiHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php', 'GuzzleHttp\\Handler\\EasyHandle' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php', + 'GuzzleHttp\\Handler\\HeaderProcessor' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php', 'GuzzleHttp\\Handler\\MockHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/MockHandler.php', 'GuzzleHttp\\Handler\\Proxy' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/Proxy.php', 'GuzzleHttp\\Handler\\StreamHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php', 'GuzzleHttp\\MessageFormatter' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/MessageFormatter.php', + 'GuzzleHttp\\MessageFormatterInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/MessageFormatterInterface.php', 'GuzzleHttp\\Middleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Middleware.php', 'GuzzleHttp\\Pool' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Pool.php', 'GuzzleHttp\\PrepareBodyMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php', 'GuzzleHttp\\Promise\\AggregateException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/AggregateException.php', 'GuzzleHttp\\Promise\\CancellationException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/CancellationException.php', 'GuzzleHttp\\Promise\\Coroutine' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Coroutine.php', + 'GuzzleHttp\\Promise\\Create' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Create.php', + 'GuzzleHttp\\Promise\\Each' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Each.php', 'GuzzleHttp\\Promise\\EachPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/EachPromise.php', 'GuzzleHttp\\Promise\\FulfilledPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/FulfilledPromise.php', + 'GuzzleHttp\\Promise\\Is' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Is.php', 'GuzzleHttp\\Promise\\Promise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Promise.php', 'GuzzleHttp\\Promise\\PromiseInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/PromiseInterface.php', 'GuzzleHttp\\Promise\\PromisorInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/PromisorInterface.php', @@ -1442,18 +1810,25 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'GuzzleHttp\\Promise\\RejectionException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/RejectionException.php', 'GuzzleHttp\\Promise\\TaskQueue' => __DIR__ . '/..' . '/guzzlehttp/promises/src/TaskQueue.php', 'GuzzleHttp\\Promise\\TaskQueueInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/TaskQueueInterface.php', + 'GuzzleHttp\\Promise\\Utils' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Utils.php', 'GuzzleHttp\\Psr7\\AppendStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/AppendStream.php', 'GuzzleHttp\\Psr7\\BufferStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/BufferStream.php', 'GuzzleHttp\\Psr7\\CachingStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/CachingStream.php', 'GuzzleHttp\\Psr7\\DroppingStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/DroppingStream.php', + 'GuzzleHttp\\Psr7\\Exception\\MalformedUriException' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Exception/MalformedUriException.php', 'GuzzleHttp\\Psr7\\FnStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/FnStream.php', + 'GuzzleHttp\\Psr7\\Header' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Header.php', + 'GuzzleHttp\\Psr7\\HttpFactory' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/HttpFactory.php', 'GuzzleHttp\\Psr7\\InflateStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/InflateStream.php', 'GuzzleHttp\\Psr7\\LazyOpenStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/LazyOpenStream.php', 'GuzzleHttp\\Psr7\\LimitStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/LimitStream.php', + 'GuzzleHttp\\Psr7\\Message' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Message.php', 'GuzzleHttp\\Psr7\\MessageTrait' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MessageTrait.php', + 'GuzzleHttp\\Psr7\\MimeType' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MimeType.php', 'GuzzleHttp\\Psr7\\MultipartStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MultipartStream.php', 'GuzzleHttp\\Psr7\\NoSeekStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/NoSeekStream.php', 'GuzzleHttp\\Psr7\\PumpStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/PumpStream.php', + 'GuzzleHttp\\Psr7\\Query' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Query.php', 'GuzzleHttp\\Psr7\\Request' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Request.php', 'GuzzleHttp\\Psr7\\Response' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Response.php', 'GuzzleHttp\\Psr7\\Rfc7230' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Rfc7230.php', @@ -1465,11 +1840,12 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'GuzzleHttp\\Psr7\\Uri' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Uri.php', 'GuzzleHttp\\Psr7\\UriNormalizer' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriNormalizer.php', 'GuzzleHttp\\Psr7\\UriResolver' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriResolver.php', + 'GuzzleHttp\\Psr7\\Utils' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Utils.php', 'GuzzleHttp\\RedirectMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RedirectMiddleware.php', 'GuzzleHttp\\RequestOptions' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RequestOptions.php', 'GuzzleHttp\\RetryMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RetryMiddleware.php', 'GuzzleHttp\\TransferStats' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/TransferStats.php', - 'GuzzleHttp\\UriTemplate' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/UriTemplate.php', + 'GuzzleHttp\\Utils' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Utils.php', 'Hamcrest\\Arrays\\IsArray' => __DIR__ . '/..' . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArray.php', 'Hamcrest\\Arrays\\IsArrayContaining' => __DIR__ . '/..' . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContaining.php', 'Hamcrest\\Arrays\\IsArrayContainingInAnyOrder' => __DIR__ . '/..' . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContainingInAnyOrder.php', @@ -1538,9 +1914,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Hamcrest\\Type\\IsString' => __DIR__ . '/..' . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsString.php', 'Hamcrest\\Util' => __DIR__ . '/..' . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Util.php', 'Hamcrest\\Xml\\HasXPath' => __DIR__ . '/..' . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Xml/HasXPath.php', - 'Http\\Adapter\\Guzzle6\\Client' => __DIR__ . '/..' . '/php-http/guzzle6-adapter/src/Client.php', - 'Http\\Adapter\\Guzzle6\\Promise' => __DIR__ . '/..' . '/php-http/guzzle6-adapter/src/Promise.php', 'Http\\Client\\Common\\BatchClient' => __DIR__ . '/..' . '/php-http/client-common/src/BatchClient.php', + 'Http\\Client\\Common\\BatchClientInterface' => __DIR__ . '/..' . '/php-http/client-common/src/BatchClientInterface.php', 'Http\\Client\\Common\\BatchResult' => __DIR__ . '/..' . '/php-http/client-common/src/BatchResult.php', 'Http\\Client\\Common\\Deferred' => __DIR__ . '/..' . '/php-http/client-common/src/Deferred.php', 'Http\\Client\\Common\\EmulatedHttpAsyncClient' => __DIR__ . '/..' . '/php-http/client-common/src/EmulatedHttpAsyncClient.php', @@ -1548,6 +1923,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Http\\Client\\Common\\Exception\\BatchException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/BatchException.php', 'Http\\Client\\Common\\Exception\\CircularRedirectionException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/CircularRedirectionException.php', 'Http\\Client\\Common\\Exception\\ClientErrorException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/ClientErrorException.php', + 'Http\\Client\\Common\\Exception\\HttpClientNoMatchException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/HttpClientNoMatchException.php', 'Http\\Client\\Common\\Exception\\HttpClientNotFoundException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/HttpClientNotFoundException.php', 'Http\\Client\\Common\\Exception\\LoopException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/LoopException.php', 'Http\\Client\\Common\\Exception\\MultipleRedirectionException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/MultipleRedirectionException.php', @@ -1558,14 +1934,19 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Http\\Client\\Common\\HttpClientDecorator' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientDecorator.php', 'Http\\Client\\Common\\HttpClientEmulator' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientEmulator.php', 'Http\\Client\\Common\\HttpClientPool' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientPool.php', - 'Http\\Client\\Common\\HttpClientPoolItem' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientPoolItem.php', + 'Http\\Client\\Common\\HttpClientPool\\HttpClientPool' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientPool/HttpClientPool.php', + 'Http\\Client\\Common\\HttpClientPool\\HttpClientPoolItem' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientPool/HttpClientPoolItem.php', 'Http\\Client\\Common\\HttpClientPool\\LeastUsedClientPool' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientPool/LeastUsedClientPool.php', 'Http\\Client\\Common\\HttpClientPool\\RandomClientPool' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientPool/RandomClientPool.php', 'Http\\Client\\Common\\HttpClientPool\\RoundRobinClientPool' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientPool/RoundRobinClientPool.php', 'Http\\Client\\Common\\HttpClientRouter' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientRouter.php', + 'Http\\Client\\Common\\HttpClientRouterInterface' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientRouterInterface.php', 'Http\\Client\\Common\\HttpMethodsClient' => __DIR__ . '/..' . '/php-http/client-common/src/HttpMethodsClient.php', + 'Http\\Client\\Common\\HttpMethodsClientInterface' => __DIR__ . '/..' . '/php-http/client-common/src/HttpMethodsClientInterface.php', 'Http\\Client\\Common\\Plugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin.php', + 'Http\\Client\\Common\\PluginChain' => __DIR__ . '/..' . '/php-http/client-common/src/PluginChain.php', 'Http\\Client\\Common\\PluginClient' => __DIR__ . '/..' . '/php-http/client-common/src/PluginClient.php', + 'Http\\Client\\Common\\PluginClientBuilder' => __DIR__ . '/..' . '/php-http/client-common/src/PluginClientBuilder.php', 'Http\\Client\\Common\\PluginClientFactory' => __DIR__ . '/..' . '/php-http/client-common/src/PluginClientFactory.php', 'Http\\Client\\Common\\Plugin\\AddHostPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/AddHostPlugin.php', 'Http\\Client\\Common\\Plugin\\AddPathPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/AddPathPlugin.php', @@ -1592,12 +1973,16 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Http\\Client\\Common\\Plugin\\QueryDefaultsPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/QueryDefaultsPlugin.php', 'Http\\Client\\Common\\Plugin\\RedirectPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/RedirectPlugin.php', 'Http\\Client\\Common\\Plugin\\RequestMatcherPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/RequestMatcherPlugin.php', + 'Http\\Client\\Common\\Plugin\\RequestSeekableBodyPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/RequestSeekableBodyPlugin.php', + 'Http\\Client\\Common\\Plugin\\ResponseSeekableBodyPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/ResponseSeekableBodyPlugin.php', 'Http\\Client\\Common\\Plugin\\RetryPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/RetryPlugin.php', + 'Http\\Client\\Common\\Plugin\\SeekableBodyPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/SeekableBodyPlugin.php', 'Http\\Client\\Common\\Plugin\\VersionBridgePlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/VersionBridgePlugin.php', 'Http\\Client\\Common\\VersionBridgeClient' => __DIR__ . '/..' . '/php-http/client-common/src/VersionBridgeClient.php', 'Http\\Client\\Exception' => __DIR__ . '/..' . '/php-http/httplug/src/Exception.php', 'Http\\Client\\Exception\\HttpException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/HttpException.php', 'Http\\Client\\Exception\\NetworkException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/NetworkException.php', + 'Http\\Client\\Exception\\RequestAwareTrait' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/RequestAwareTrait.php', 'Http\\Client\\Exception\\RequestException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/RequestException.php', 'Http\\Client\\Exception\\TransferException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/TransferException.php', 'Http\\Client\\HttpAsyncClient' => __DIR__ . '/..' . '/php-http/httplug/src/HttpAsyncClient.php', @@ -1630,6 +2015,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Http\\Message\\Authentication\\BasicAuth' => __DIR__ . '/..' . '/php-http/message/src/Authentication/BasicAuth.php', 'Http\\Message\\Authentication\\Bearer' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Bearer.php', 'Http\\Message\\Authentication\\Chain' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Chain.php', + 'Http\\Message\\Authentication\\Header' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Header.php', 'Http\\Message\\Authentication\\Matching' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Matching.php', 'Http\\Message\\Authentication\\QueryParam' => __DIR__ . '/..' . '/php-http/message/src/Authentication/QueryParam.php', 'Http\\Message\\Authentication\\RequestConditional' => __DIR__ . '/..' . '/php-http/message/src/Authentication/RequestConditional.php', @@ -1662,6 +2048,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Http\\Message\\MessageFactory\\DiactorosMessageFactory' => __DIR__ . '/..' . '/php-http/message/src/MessageFactory/DiactorosMessageFactory.php', 'Http\\Message\\MessageFactory\\GuzzleMessageFactory' => __DIR__ . '/..' . '/php-http/message/src/MessageFactory/GuzzleMessageFactory.php', 'Http\\Message\\MessageFactory\\SlimMessageFactory' => __DIR__ . '/..' . '/php-http/message/src/MessageFactory/SlimMessageFactory.php', + 'Http\\Message\\MultipartStream\\ApacheMimetypeHelper' => __DIR__ . '/..' . '/php-http/multipart-stream-builder/src/ApacheMimetypeHelper.php', + 'Http\\Message\\MultipartStream\\CustomMimetypeHelper' => __DIR__ . '/..' . '/php-http/multipart-stream-builder/src/CustomMimetypeHelper.php', + 'Http\\Message\\MultipartStream\\MimetypeHelper' => __DIR__ . '/..' . '/php-http/multipart-stream-builder/src/MimetypeHelper.php', + 'Http\\Message\\MultipartStream\\MultipartStreamBuilder' => __DIR__ . '/..' . '/php-http/multipart-stream-builder/src/MultipartStreamBuilder.php', 'Http\\Message\\RequestFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/RequestFactory.php', 'Http\\Message\\RequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher.php', 'Http\\Message\\RequestMatcher\\CallbackRequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher/CallbackRequestMatcher.php', @@ -1688,19 +2078,21 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Auth\\AuthServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php', 'Illuminate\\Auth\\Authenticatable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Authenticatable.php', 'Illuminate\\Auth\\AuthenticationException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/AuthenticationException.php', - 'Illuminate\\Auth\\Console\\AuthMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Console/AuthMakeCommand.php', 'Illuminate\\Auth\\Console\\ClearResetsCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Console/ClearResetsCommand.php', 'Illuminate\\Auth\\CreatesUserProviders' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/CreatesUserProviders.php', 'Illuminate\\Auth\\DatabaseUserProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php', 'Illuminate\\Auth\\EloquentUserProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php', 'Illuminate\\Auth\\Events\\Attempting' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Attempting.php', 'Illuminate\\Auth\\Events\\Authenticated' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Authenticated.php', + 'Illuminate\\Auth\\Events\\CurrentDeviceLogout' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/CurrentDeviceLogout.php', 'Illuminate\\Auth\\Events\\Failed' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Failed.php', 'Illuminate\\Auth\\Events\\Lockout' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Lockout.php', 'Illuminate\\Auth\\Events\\Login' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Login.php', 'Illuminate\\Auth\\Events\\Logout' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Logout.php', + 'Illuminate\\Auth\\Events\\OtherDeviceLogout' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/OtherDeviceLogout.php', 'Illuminate\\Auth\\Events\\PasswordReset' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/PasswordReset.php', 'Illuminate\\Auth\\Events\\Registered' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Registered.php', + 'Illuminate\\Auth\\Events\\Validated' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Validated.php', 'Illuminate\\Auth\\Events\\Verified' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Verified.php', 'Illuminate\\Auth\\GenericUser' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/GenericUser.php', 'Illuminate\\Auth\\GuardHelpers' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/GuardHelpers.php', @@ -1709,6 +2101,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Middleware/AuthenticateWithBasicAuth.php', 'Illuminate\\Auth\\Middleware\\Authorize' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php', 'Illuminate\\Auth\\Middleware\\EnsureEmailIsVerified' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php', + 'Illuminate\\Auth\\Middleware\\RequirePassword' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Middleware/RequirePassword.php', 'Illuminate\\Auth\\MustVerifyEmail' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php', 'Illuminate\\Auth\\Notifications\\ResetPassword' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php', 'Illuminate\\Auth\\Notifications\\VerifyEmail' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Notifications/VerifyEmail.php', @@ -1732,7 +2125,9 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Broadcasting\\Broadcasters\\NullBroadcaster' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/NullBroadcaster.php', 'Illuminate\\Broadcasting\\Broadcasters\\PusherBroadcaster' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php', 'Illuminate\\Broadcasting\\Broadcasters\\RedisBroadcaster' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php', + 'Illuminate\\Broadcasting\\Broadcasters\\UsePusherChannelConventions' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/UsePusherChannelConventions.php', 'Illuminate\\Broadcasting\\Channel' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/Channel.php', + 'Illuminate\\Broadcasting\\EncryptedPrivateChannel' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/EncryptedPrivateChannel.php', 'Illuminate\\Broadcasting\\InteractsWithSockets' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/InteractsWithSockets.php', 'Illuminate\\Broadcasting\\PendingBroadcast' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/PendingBroadcast.php', 'Illuminate\\Broadcasting\\PresenceChannel' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/PresenceChannel.php', @@ -1742,13 +2137,17 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Bus\\Queueable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Bus/Queueable.php', 'Illuminate\\Cache\\ApcStore' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/ApcStore.php', 'Illuminate\\Cache\\ApcWrapper' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/ApcWrapper.php', + 'Illuminate\\Cache\\ArrayLock' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/ArrayLock.php', 'Illuminate\\Cache\\ArrayStore' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/ArrayStore.php', 'Illuminate\\Cache\\CacheManager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/CacheManager.php', 'Illuminate\\Cache\\CacheServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php', 'Illuminate\\Cache\\Console\\CacheTableCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php', 'Illuminate\\Cache\\Console\\ClearCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php', 'Illuminate\\Cache\\Console\\ForgetCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/Console/ForgetCommand.php', + 'Illuminate\\Cache\\DatabaseLock' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/DatabaseLock.php', 'Illuminate\\Cache\\DatabaseStore' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/DatabaseStore.php', + 'Illuminate\\Cache\\DynamoDbLock' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/DynamoDbLock.php', + 'Illuminate\\Cache\\DynamoDbStore' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/DynamoDbStore.php', 'Illuminate\\Cache\\Events\\CacheEvent' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/Events/CacheEvent.php', 'Illuminate\\Cache\\Events\\CacheHit' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/Events/CacheHit.php', 'Illuminate\\Cache\\Events\\CacheMissed' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/Events/CacheMissed.php', @@ -1756,6 +2155,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Cache\\Events\\KeyWritten' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/Events/KeyWritten.php', 'Illuminate\\Cache\\FileStore' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/FileStore.php', 'Illuminate\\Cache\\Lock' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/Lock.php', + 'Illuminate\\Cache\\LuaScripts' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/LuaScripts.php', 'Illuminate\\Cache\\MemcachedConnector' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/MemcachedConnector.php', 'Illuminate\\Cache\\MemcachedLock' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/MemcachedLock.php', 'Illuminate\\Cache\\MemcachedStore' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/MemcachedStore.php', @@ -1772,14 +2172,21 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Config\\Repository' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Config/Repository.php', 'Illuminate\\Console\\Application' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Application.php', 'Illuminate\\Console\\Command' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Command.php', + 'Illuminate\\Console\\Concerns\\CallsCommands' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Concerns/CallsCommands.php', + 'Illuminate\\Console\\Concerns\\HasParameters' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Concerns/HasParameters.php', + 'Illuminate\\Console\\Concerns\\InteractsWithIO' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Concerns/InteractsWithIO.php', 'Illuminate\\Console\\ConfirmableTrait' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php', - 'Illuminate\\Console\\DetectsApplicationNamespace' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/DetectsApplicationNamespace.php', 'Illuminate\\Console\\Events\\ArtisanStarting' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/ArtisanStarting.php', 'Illuminate\\Console\\Events\\CommandFinished' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/CommandFinished.php', 'Illuminate\\Console\\Events\\CommandStarting' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/CommandStarting.php', + 'Illuminate\\Console\\Events\\ScheduledTaskFailed' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFailed.php', + 'Illuminate\\Console\\Events\\ScheduledTaskFinished' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFinished.php', + 'Illuminate\\Console\\Events\\ScheduledTaskSkipped' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskSkipped.php', + 'Illuminate\\Console\\Events\\ScheduledTaskStarting' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskStarting.php', 'Illuminate\\Console\\GeneratorCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/GeneratorCommand.php', 'Illuminate\\Console\\OutputStyle' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/OutputStyle.php', 'Illuminate\\Console\\Parser' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Parser.php', + 'Illuminate\\Console\\Scheduling\\CacheAware' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Scheduling/CacheAware.php', 'Illuminate\\Console\\Scheduling\\CacheEventMutex' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Scheduling/CacheEventMutex.php', 'Illuminate\\Console\\Scheduling\\CacheSchedulingMutex' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Scheduling/CacheSchedulingMutex.php', 'Illuminate\\Console\\Scheduling\\CallbackEvent' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Scheduling/CallbackEvent.php', @@ -1795,12 +2202,15 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Container\\Container' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Container/Container.php', 'Illuminate\\Container\\ContextualBindingBuilder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Container/ContextualBindingBuilder.php', 'Illuminate\\Container\\EntryNotFoundException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Container/EntryNotFoundException.php', + 'Illuminate\\Container\\RewindableGenerator' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Container/RewindableGenerator.php', + 'Illuminate\\Container\\Util' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Container/Util.php', 'Illuminate\\Contracts\\Auth\\Access\\Authorizable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/Access/Authorizable.php', 'Illuminate\\Contracts\\Auth\\Access\\Gate' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/Access/Gate.php', 'Illuminate\\Contracts\\Auth\\Authenticatable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/Authenticatable.php', 'Illuminate\\Contracts\\Auth\\CanResetPassword' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/CanResetPassword.php', 'Illuminate\\Contracts\\Auth\\Factory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/Factory.php', 'Illuminate\\Contracts\\Auth\\Guard' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/Guard.php', + 'Illuminate\\Contracts\\Auth\\Middleware\\AuthenticatesRequests' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/Middleware/AuthenticatesRequests.php', 'Illuminate\\Contracts\\Auth\\MustVerifyEmail' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/MustVerifyEmail.php', 'Illuminate\\Contracts\\Auth\\PasswordBroker' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/PasswordBroker.php', 'Illuminate\\Contracts\\Auth\\PasswordBrokerFactory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/PasswordBrokerFactory.php', @@ -1827,6 +2237,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Contracts\\Container\\ContextualBindingBuilder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Container/ContextualBindingBuilder.php', 'Illuminate\\Contracts\\Cookie\\Factory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Cookie/Factory.php', 'Illuminate\\Contracts\\Cookie\\QueueingFactory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Cookie/QueueingFactory.php', + 'Illuminate\\Contracts\\Database\\Eloquent\\Castable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/Castable.php', + 'Illuminate\\Contracts\\Database\\Eloquent\\CastsAttributes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsAttributes.php', + 'Illuminate\\Contracts\\Database\\Eloquent\\CastsInboundAttributes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsInboundAttributes.php', + 'Illuminate\\Contracts\\Database\\Events\\MigrationEvent' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Database/Events/MigrationEvent.php', 'Illuminate\\Contracts\\Database\\ModelIdentifier' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Database/ModelIdentifier.php', 'Illuminate\\Contracts\\Debug\\ExceptionHandler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Debug/ExceptionHandler.php', 'Illuminate\\Contracts\\Encryption\\DecryptException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Encryption/DecryptException.php', @@ -1839,8 +2253,11 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Contracts\\Filesystem\\FileNotFoundException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Filesystem/FileNotFoundException.php', 'Illuminate\\Contracts\\Filesystem\\Filesystem' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Filesystem/Filesystem.php', 'Illuminate\\Contracts\\Foundation\\Application' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Foundation/Application.php', + 'Illuminate\\Contracts\\Foundation\\CachesConfiguration' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Foundation/CachesConfiguration.php', + 'Illuminate\\Contracts\\Foundation\\CachesRoutes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Foundation/CachesRoutes.php', 'Illuminate\\Contracts\\Hashing\\Hasher' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Hashing/Hasher.php', 'Illuminate\\Contracts\\Http\\Kernel' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Http/Kernel.php', + 'Illuminate\\Contracts\\Mail\\Factory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Mail/Factory.php', 'Illuminate\\Contracts\\Mail\\MailQueue' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Mail/MailQueue.php', 'Illuminate\\Contracts\\Mail\\Mailable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Mail/Mailable.php', 'Illuminate\\Contracts\\Mail\\Mailer' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Mail/Mailer.php', @@ -1860,6 +2277,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Contracts\\Queue\\QueueableEntity' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Queue/QueueableEntity.php', 'Illuminate\\Contracts\\Queue\\ShouldQueue' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Queue/ShouldQueue.php', 'Illuminate\\Contracts\\Redis\\Connection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Redis/Connection.php', + 'Illuminate\\Contracts\\Redis\\Connector' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Redis/Connector.php', 'Illuminate\\Contracts\\Redis\\Factory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Redis/Factory.php', 'Illuminate\\Contracts\\Redis\\LimiterTimeoutException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Redis/LimiterTimeoutException.php', 'Illuminate\\Contracts\\Routing\\BindingRegistrar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Routing/BindingRegistrar.php', @@ -1869,6 +2287,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Contracts\\Routing\\UrlRoutable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Routing/UrlRoutable.php', 'Illuminate\\Contracts\\Session\\Session' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Session/Session.php', 'Illuminate\\Contracts\\Support\\Arrayable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Support/Arrayable.php', + 'Illuminate\\Contracts\\Support\\DeferrableProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Support/DeferrableProvider.php', + 'Illuminate\\Contracts\\Support\\DeferringDisplayableValue' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Support/DeferringDisplayableValue.php', 'Illuminate\\Contracts\\Support\\Htmlable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Support/Htmlable.php', 'Illuminate\\Contracts\\Support\\Jsonable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Support/Jsonable.php', 'Illuminate\\Contracts\\Support\\MessageBag' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Support/MessageBag.php', @@ -1888,11 +2308,13 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Contracts\\View\\View' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/View/View.php', 'Illuminate\\Cookie\\CookieJar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cookie/CookieJar.php', 'Illuminate\\Cookie\\CookieServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cookie/CookieServiceProvider.php', + 'Illuminate\\Cookie\\CookieValuePrefix' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cookie/CookieValuePrefix.php', 'Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php', 'Illuminate\\Cookie\\Middleware\\EncryptCookies' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php', 'Illuminate\\Database\\Capsule\\Manager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Capsule/Manager.php', 'Illuminate\\Database\\Concerns\\BuildsQueries' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php', 'Illuminate\\Database\\Concerns\\ManagesTransactions' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php', + 'Illuminate\\Database\\ConfigurationUrlParser' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/ConfigurationUrlParser.php', 'Illuminate\\Database\\Connection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Connection.php', 'Illuminate\\Database\\ConnectionInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/ConnectionInterface.php', 'Illuminate\\Database\\ConnectionResolver' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/ConnectionResolver.php', @@ -1917,9 +2339,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Database\\Console\\Migrations\\TableGuesser' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Console/Migrations/TableGuesser.php', 'Illuminate\\Database\\Console\\Seeds\\SeedCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php', 'Illuminate\\Database\\Console\\Seeds\\SeederMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Console/Seeds/SeederMakeCommand.php', + 'Illuminate\\Database\\Console\\WipeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Console/WipeCommand.php', 'Illuminate\\Database\\DatabaseManager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/DatabaseManager.php', 'Illuminate\\Database\\DatabaseServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php', - 'Illuminate\\Database\\DetectsDeadlocks' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/DetectsDeadlocks.php', + 'Illuminate\\Database\\DetectsConcurrencyErrors' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/DetectsConcurrencyErrors.php', 'Illuminate\\Database\\DetectsLostConnections' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/DetectsLostConnections.php', 'Illuminate\\Database\\Eloquent\\Builder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php', 'Illuminate\\Database\\Eloquent\\Collection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php', @@ -1949,6 +2372,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Database\\Eloquent\\Relations\\HasManyThrough' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php', 'Illuminate\\Database\\Eloquent\\Relations\\HasOne' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOne.php', 'Illuminate\\Database\\Eloquent\\Relations\\HasOneOrMany' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php', + 'Illuminate\\Database\\Eloquent\\Relations\\HasOneThrough' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneThrough.php', 'Illuminate\\Database\\Eloquent\\Relations\\MorphMany' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphMany.php', 'Illuminate\\Database\\Eloquent\\Relations\\MorphOne' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOne.php', 'Illuminate\\Database\\Eloquent\\Relations\\MorphOneOrMany' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOneOrMany.php', @@ -1961,6 +2385,12 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Database\\Eloquent\\SoftDeletes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletes.php', 'Illuminate\\Database\\Eloquent\\SoftDeletingScope' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php', 'Illuminate\\Database\\Events\\ConnectionEvent' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/ConnectionEvent.php', + 'Illuminate\\Database\\Events\\MigrationEnded' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/MigrationEnded.php', + 'Illuminate\\Database\\Events\\MigrationEvent' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/MigrationEvent.php', + 'Illuminate\\Database\\Events\\MigrationStarted' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/MigrationStarted.php', + 'Illuminate\\Database\\Events\\MigrationsEnded' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/MigrationsEnded.php', + 'Illuminate\\Database\\Events\\MigrationsStarted' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/MigrationsStarted.php', + 'Illuminate\\Database\\Events\\NoPendingMigrations' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/NoPendingMigrations.php', 'Illuminate\\Database\\Events\\QueryExecuted' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/QueryExecuted.php', 'Illuminate\\Database\\Events\\StatementPrepared' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/StatementPrepared.php', 'Illuminate\\Database\\Events\\TransactionBeginning' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/TransactionBeginning.php', @@ -1984,7 +2414,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Database\\Query\\Grammars\\SQLiteGrammar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php', 'Illuminate\\Database\\Query\\Grammars\\SqlServerGrammar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php', 'Illuminate\\Database\\Query\\JoinClause' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/JoinClause.php', - 'Illuminate\\Database\\Query\\JsonExpression' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/JsonExpression.php', 'Illuminate\\Database\\Query\\Processors\\MySqlProcessor' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php', 'Illuminate\\Database\\Query\\Processors\\PostgresProcessor' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php', 'Illuminate\\Database\\Query\\Processors\\Processor' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php', @@ -1994,6 +2423,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Database\\Schema\\Blueprint' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php', 'Illuminate\\Database\\Schema\\Builder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/Builder.php', 'Illuminate\\Database\\Schema\\ColumnDefinition' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/ColumnDefinition.php', + 'Illuminate\\Database\\Schema\\ForeignIdColumnDefinition' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php', + 'Illuminate\\Database\\Schema\\ForeignKeyDefinition' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/ForeignKeyDefinition.php', 'Illuminate\\Database\\Schema\\Grammars\\ChangeColumn' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php', 'Illuminate\\Database\\Schema\\Grammars\\Grammar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php', 'Illuminate\\Database\\Schema\\Grammars\\MySqlGrammar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php', @@ -2012,6 +2443,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Events\\CallQueuedListener' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Events/CallQueuedListener.php', 'Illuminate\\Events\\Dispatcher' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Events/Dispatcher.php', 'Illuminate\\Events\\EventServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Events/EventServiceProvider.php', + 'Illuminate\\Events\\NullDispatcher' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Events/NullDispatcher.php', 'Illuminate\\Filesystem\\Cache' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Filesystem/Cache.php', 'Illuminate\\Filesystem\\Filesystem' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Filesystem/Filesystem.php', 'Illuminate\\Filesystem\\FilesystemAdapter' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php', @@ -2021,14 +2453,15 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Foundation\\Application' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Application.php', 'Illuminate\\Foundation\\Auth\\Access\\Authorizable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/Access/Authorizable.php', 'Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/Access/AuthorizesRequests.php', - 'Illuminate\\Foundation\\Auth\\AuthenticatesUsers' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php', - 'Illuminate\\Foundation\\Auth\\RedirectsUsers' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/RedirectsUsers.php', - 'Illuminate\\Foundation\\Auth\\RegistersUsers' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php', - 'Illuminate\\Foundation\\Auth\\ResetsPasswords' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswords.php', - 'Illuminate\\Foundation\\Auth\\SendsPasswordResetEmails' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/SendsPasswordResetEmails.php', - 'Illuminate\\Foundation\\Auth\\ThrottlesLogins' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/ThrottlesLogins.php', + 'Illuminate\\Foundation\\Auth\\AuthenticatesUsers' => __DIR__ . '/..' . '/laravel/ui/auth-backend/AuthenticatesUsers.php', + 'Illuminate\\Foundation\\Auth\\ConfirmsPasswords' => __DIR__ . '/..' . '/laravel/ui/auth-backend/ConfirmsPasswords.php', + 'Illuminate\\Foundation\\Auth\\RedirectsUsers' => __DIR__ . '/..' . '/laravel/ui/auth-backend/RedirectsUsers.php', + 'Illuminate\\Foundation\\Auth\\RegistersUsers' => __DIR__ . '/..' . '/laravel/ui/auth-backend/RegistersUsers.php', + 'Illuminate\\Foundation\\Auth\\ResetsPasswords' => __DIR__ . '/..' . '/laravel/ui/auth-backend/ResetsPasswords.php', + 'Illuminate\\Foundation\\Auth\\SendsPasswordResetEmails' => __DIR__ . '/..' . '/laravel/ui/auth-backend/SendsPasswordResetEmails.php', + 'Illuminate\\Foundation\\Auth\\ThrottlesLogins' => __DIR__ . '/..' . '/laravel/ui/auth-backend/ThrottlesLogins.php', 'Illuminate\\Foundation\\Auth\\User' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/User.php', - 'Illuminate\\Foundation\\Auth\\VerifiesEmails' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/VerifiesEmails.php', + 'Illuminate\\Foundation\\Auth\\VerifiesEmails' => __DIR__ . '/..' . '/laravel/ui/auth-backend/VerifiesEmails.php', 'Illuminate\\Foundation\\Bootstrap\\BootProviders' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Bootstrap/BootProviders.php', 'Illuminate\\Foundation\\Bootstrap\\HandleExceptions' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php', 'Illuminate\\Foundation\\Bootstrap\\LoadConfiguration' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php', @@ -2041,16 +2474,20 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Foundation\\Bus\\PendingChain' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Bus/PendingChain.php', 'Illuminate\\Foundation\\Bus\\PendingDispatch' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Bus/PendingDispatch.php', 'Illuminate\\Foundation\\ComposerScripts' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/ComposerScripts.php', - 'Illuminate\\Foundation\\Console\\AppNameCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/AppNameCommand.php', + 'Illuminate\\Foundation\\Console\\CastMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/CastMakeCommand.php', 'Illuminate\\Foundation\\Console\\ChannelMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ChannelMakeCommand.php', 'Illuminate\\Foundation\\Console\\ClearCompiledCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ClearCompiledCommand.php', 'Illuminate\\Foundation\\Console\\ClosureCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ClosureCommand.php', + 'Illuminate\\Foundation\\Console\\ComponentMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ComponentMakeCommand.php', 'Illuminate\\Foundation\\Console\\ConfigCacheCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ConfigCacheCommand.php', 'Illuminate\\Foundation\\Console\\ConfigClearCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ConfigClearCommand.php', 'Illuminate\\Foundation\\Console\\ConsoleMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ConsoleMakeCommand.php', 'Illuminate\\Foundation\\Console\\DownCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/DownCommand.php', 'Illuminate\\Foundation\\Console\\EnvironmentCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/EnvironmentCommand.php', + 'Illuminate\\Foundation\\Console\\EventCacheCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/EventCacheCommand.php', + 'Illuminate\\Foundation\\Console\\EventClearCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/EventClearCommand.php', 'Illuminate\\Foundation\\Console\\EventGenerateCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/EventGenerateCommand.php', + 'Illuminate\\Foundation\\Console\\EventListCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/EventListCommand.php', 'Illuminate\\Foundation\\Console\\EventMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/EventMakeCommand.php', 'Illuminate\\Foundation\\Console\\ExceptionMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ExceptionMakeCommand.php', 'Illuminate\\Foundation\\Console\\JobMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/JobMakeCommand.php', @@ -2065,12 +2502,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Foundation\\Console\\OptimizeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/OptimizeCommand.php', 'Illuminate\\Foundation\\Console\\PackageDiscoverCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/PackageDiscoverCommand.php', 'Illuminate\\Foundation\\Console\\PolicyMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/PolicyMakeCommand.php', - 'Illuminate\\Foundation\\Console\\PresetCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/PresetCommand.php', - 'Illuminate\\Foundation\\Console\\Presets\\Bootstrap' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/Bootstrap.php', - 'Illuminate\\Foundation\\Console\\Presets\\None' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/None.php', - 'Illuminate\\Foundation\\Console\\Presets\\Preset' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/Preset.php', - 'Illuminate\\Foundation\\Console\\Presets\\React' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/React.php', - 'Illuminate\\Foundation\\Console\\Presets\\Vue' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/Vue.php', 'Illuminate\\Foundation\\Console\\ProviderMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ProviderMakeCommand.php', 'Illuminate\\Foundation\\Console\\QueuedCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/QueuedCommand.php', 'Illuminate\\Foundation\\Console\\RequestMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/RequestMakeCommand.php', @@ -2081,12 +2512,14 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Foundation\\Console\\RuleMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/RuleMakeCommand.php', 'Illuminate\\Foundation\\Console\\ServeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php', 'Illuminate\\Foundation\\Console\\StorageLinkCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/StorageLinkCommand.php', + 'Illuminate\\Foundation\\Console\\StubPublishCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/StubPublishCommand.php', 'Illuminate\\Foundation\\Console\\TestMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/TestMakeCommand.php', 'Illuminate\\Foundation\\Console\\UpCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/UpCommand.php', 'Illuminate\\Foundation\\Console\\VendorPublishCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/VendorPublishCommand.php', 'Illuminate\\Foundation\\Console\\ViewCacheCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ViewCacheCommand.php', 'Illuminate\\Foundation\\Console\\ViewClearCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ViewClearCommand.php', 'Illuminate\\Foundation\\EnvironmentDetector' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/EnvironmentDetector.php', + 'Illuminate\\Foundation\\Events\\DiscoverEvents' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Events/DiscoverEvents.php', 'Illuminate\\Foundation\\Events\\Dispatchable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Events/Dispatchable.php', 'Illuminate\\Foundation\\Events\\LocaleUpdated' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Events/LocaleUpdated.php', 'Illuminate\\Foundation\\Exceptions\\Handler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php', @@ -2102,6 +2535,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php', 'Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php', 'Illuminate\\Foundation\\Inspiring' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Inspiring.php', + 'Illuminate\\Foundation\\Mix' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Mix.php', 'Illuminate\\Foundation\\PackageManifest' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/PackageManifest.php', 'Illuminate\\Foundation\\ProviderRepository' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php', 'Illuminate\\Foundation\\Providers\\ArtisanServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php', @@ -2121,17 +2555,11 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Foundation\\Testing\\Concerns\\InteractsWithSession' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithSession.php', 'Illuminate\\Foundation\\Testing\\Concerns\\MakesHttpRequests' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php', 'Illuminate\\Foundation\\Testing\\Concerns\\MocksApplicationServices' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MocksApplicationServices.php', - 'Illuminate\\Foundation\\Testing\\Constraints\\HasInDatabase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/HasInDatabase.php', - 'Illuminate\\Foundation\\Testing\\Constraints\\SeeInOrder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SeeInOrder.php', - 'Illuminate\\Foundation\\Testing\\Constraints\\SoftDeletedInDatabase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SoftDeletedInDatabase.php', 'Illuminate\\Foundation\\Testing\\DatabaseMigrations' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/DatabaseMigrations.php', 'Illuminate\\Foundation\\Testing\\DatabaseTransactions' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/DatabaseTransactions.php', - 'Illuminate\\Foundation\\Testing\\HttpException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/HttpException.php', - 'Illuminate\\Foundation\\Testing\\PendingCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/PendingCommand.php', 'Illuminate\\Foundation\\Testing\\RefreshDatabase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php', 'Illuminate\\Foundation\\Testing\\RefreshDatabaseState' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabaseState.php', 'Illuminate\\Foundation\\Testing\\TestCase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php', - 'Illuminate\\Foundation\\Testing\\TestResponse' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php', 'Illuminate\\Foundation\\Testing\\WithFaker' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/WithFaker.php', 'Illuminate\\Foundation\\Testing\\WithoutEvents' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/WithoutEvents.php', 'Illuminate\\Foundation\\Testing\\WithoutMiddleware' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/WithoutMiddleware.php', @@ -2142,6 +2570,14 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Hashing\\BcryptHasher' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php', 'Illuminate\\Hashing\\HashManager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Hashing/HashManager.php', 'Illuminate\\Hashing\\HashServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php', + 'Illuminate\\Http\\Client\\ConnectionException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/ConnectionException.php', + 'Illuminate\\Http\\Client\\Factory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/Factory.php', + 'Illuminate\\Http\\Client\\HttpClientException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/HttpClientException.php', + 'Illuminate\\Http\\Client\\PendingRequest' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/PendingRequest.php', + 'Illuminate\\Http\\Client\\Request' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/Request.php', + 'Illuminate\\Http\\Client\\RequestException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/RequestException.php', + 'Illuminate\\Http\\Client\\Response' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/Response.php', + 'Illuminate\\Http\\Client\\ResponseSequence' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/ResponseSequence.php', 'Illuminate\\Http\\Concerns\\InteractsWithContentTypes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithContentTypes.php', 'Illuminate\\Http\\Concerns\\InteractsWithFlashData' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithFlashData.php', 'Illuminate\\Http\\Concerns\\InteractsWithInput' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithInput.php', @@ -2154,6 +2590,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Http\\Middleware\\CheckResponseForModifications' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Middleware/CheckResponseForModifications.php', 'Illuminate\\Http\\Middleware\\FrameGuard' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Middleware/FrameGuard.php', 'Illuminate\\Http\\Middleware\\SetCacheHeaders' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Middleware/SetCacheHeaders.php', + 'Illuminate\\Http\\Middleware\\TrustHosts' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Middleware/TrustHosts.php', 'Illuminate\\Http\\RedirectResponse' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/RedirectResponse.php', 'Illuminate\\Http\\Request' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Request.php', 'Illuminate\\Http\\Resources\\CollectsResources' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/CollectsResources.php', @@ -2162,7 +2599,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/Json/AnonymousResourceCollection.php', 'Illuminate\\Http\\Resources\\Json\\JsonResource' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/Json/JsonResource.php', 'Illuminate\\Http\\Resources\\Json\\PaginatedResourceResponse' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/Json/PaginatedResourceResponse.php', - 'Illuminate\\Http\\Resources\\Json\\Resource' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/Json/Resource.php', 'Illuminate\\Http\\Resources\\Json\\ResourceCollection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceCollection.php', 'Illuminate\\Http\\Resources\\Json\\ResourceResponse' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceResponse.php', 'Illuminate\\Http\\Resources\\MergeValue' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/MergeValue.php', @@ -2181,6 +2617,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Log\\ParsesLogConfiguration' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Log/ParsesLogConfiguration.php', 'Illuminate\\Mail\\Events\\MessageSending' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Events/MessageSending.php', 'Illuminate\\Mail\\Events\\MessageSent' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Events/MessageSent.php', + 'Illuminate\\Mail\\MailManager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/MailManager.php', 'Illuminate\\Mail\\MailServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php', 'Illuminate\\Mail\\Mailable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Mailable.php', 'Illuminate\\Mail\\Mailer' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Mailer.php', @@ -2188,13 +2625,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Mail\\Message' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Message.php', 'Illuminate\\Mail\\PendingMail' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/PendingMail.php', 'Illuminate\\Mail\\SendQueuedMailable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php', - 'Illuminate\\Mail\\TransportManager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/TransportManager.php', 'Illuminate\\Mail\\Transport\\ArrayTransport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/ArrayTransport.php', 'Illuminate\\Mail\\Transport\\LogTransport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php', 'Illuminate\\Mail\\Transport\\MailgunTransport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php', - 'Illuminate\\Mail\\Transport\\MandrillTransport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php', 'Illuminate\\Mail\\Transport\\SesTransport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/SesTransport.php', - 'Illuminate\\Mail\\Transport\\SparkPostTransport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/SparkPostTransport.php', 'Illuminate\\Mail\\Transport\\Transport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/Transport.php', 'Illuminate\\Notifications\\Action' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/Action.php', 'Illuminate\\Notifications\\AnonymousNotifiable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/AnonymousNotifiable.php', @@ -2202,8 +2636,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Notifications\\Channels\\BroadcastChannel' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/Channels/BroadcastChannel.php', 'Illuminate\\Notifications\\Channels\\DatabaseChannel' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/Channels/DatabaseChannel.php', 'Illuminate\\Notifications\\Channels\\MailChannel' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/Channels/MailChannel.php', - 'Illuminate\\Notifications\\Channels\\NexmoSmsChannel' => __DIR__ . '/..' . '/laravel/nexmo-notification-channel/src/Channels/NexmoSmsChannel.php', - 'Illuminate\\Notifications\\Channels\\SlackWebhookChannel' => __DIR__ . '/..' . '/laravel/slack-notification-channel/src/Channels/SlackWebhookChannel.php', 'Illuminate\\Notifications\\Console\\NotificationTableCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/Console/NotificationTableCommand.php', 'Illuminate\\Notifications\\DatabaseNotification' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/DatabaseNotification.php', 'Illuminate\\Notifications\\DatabaseNotificationCollection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/DatabaseNotificationCollection.php', @@ -2215,19 +2647,13 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Notifications\\Messages\\BroadcastMessage' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/Messages/BroadcastMessage.php', 'Illuminate\\Notifications\\Messages\\DatabaseMessage' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/Messages/DatabaseMessage.php', 'Illuminate\\Notifications\\Messages\\MailMessage' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/Messages/MailMessage.php', - 'Illuminate\\Notifications\\Messages\\NexmoMessage' => __DIR__ . '/..' . '/laravel/nexmo-notification-channel/src/Messages/NexmoMessage.php', 'Illuminate\\Notifications\\Messages\\SimpleMessage' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/Messages/SimpleMessage.php', - 'Illuminate\\Notifications\\Messages\\SlackAttachment' => __DIR__ . '/..' . '/laravel/slack-notification-channel/src/Messages/SlackAttachment.php', - 'Illuminate\\Notifications\\Messages\\SlackAttachmentField' => __DIR__ . '/..' . '/laravel/slack-notification-channel/src/Messages/SlackAttachmentField.php', - 'Illuminate\\Notifications\\Messages\\SlackMessage' => __DIR__ . '/..' . '/laravel/slack-notification-channel/src/Messages/SlackMessage.php', - 'Illuminate\\Notifications\\NexmoChannelServiceProvider' => __DIR__ . '/..' . '/laravel/nexmo-notification-channel/src/NexmoChannelServiceProvider.php', 'Illuminate\\Notifications\\Notifiable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/Notifiable.php', 'Illuminate\\Notifications\\Notification' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/Notification.php', 'Illuminate\\Notifications\\NotificationSender' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/NotificationSender.php', 'Illuminate\\Notifications\\NotificationServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/NotificationServiceProvider.php', 'Illuminate\\Notifications\\RoutesNotifications' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/RoutesNotifications.php', 'Illuminate\\Notifications\\SendQueuedNotifications' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/SendQueuedNotifications.php', - 'Illuminate\\Notifications\\SlackChannelServiceProvider' => __DIR__ . '/..' . '/laravel/slack-notification-channel/src/SlackChannelServiceProvider.php', 'Illuminate\\Pagination\\AbstractPaginator' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Pagination/AbstractPaginator.php', 'Illuminate\\Pagination\\LengthAwarePaginator' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Pagination/LengthAwarePaginator.php', 'Illuminate\\Pagination\\PaginationServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Pagination/PaginationServiceProvider.php', @@ -2264,9 +2690,9 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Queue\\Events\\Looping' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/Events/Looping.php', 'Illuminate\\Queue\\Events\\WorkerStopping' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/Events/WorkerStopping.php', 'Illuminate\\Queue\\Failed\\DatabaseFailedJobProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php', + 'Illuminate\\Queue\\Failed\\DynamoDbFailedJobProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php', 'Illuminate\\Queue\\Failed\\FailedJobProviderInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php', 'Illuminate\\Queue\\Failed\\NullFailedJobProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/Failed/NullFailedJobProvider.php', - 'Illuminate\\Queue\\FailingJob' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/FailingJob.php', 'Illuminate\\Queue\\InteractsWithQueue' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/InteractsWithQueue.php', 'Illuminate\\Queue\\InvalidPayloadException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/InvalidPayloadException.php', 'Illuminate\\Queue\\Jobs\\BeanstalkdJob' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php', @@ -2308,6 +2734,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Redis\\Limiters\\DurationLimiterBuilder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiterBuilder.php', 'Illuminate\\Redis\\RedisManager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Redis/RedisManager.php', 'Illuminate\\Redis\\RedisServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php', + 'Illuminate\\Routing\\AbstractRouteCollection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php', + 'Illuminate\\Routing\\CompiledRouteCollection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/CompiledRouteCollection.php', 'Illuminate\\Routing\\Console\\ControllerMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php', 'Illuminate\\Routing\\Console\\MiddlewareMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/Console/MiddlewareMakeCommand.php', 'Illuminate\\Routing\\Contracts\\ControllerDispatcher' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/Contracts/ControllerDispatcher.php', @@ -2338,18 +2766,21 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Routing\\RouteAction' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteAction.php', 'Illuminate\\Routing\\RouteBinding' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteBinding.php', 'Illuminate\\Routing\\RouteCollection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteCollection.php', - 'Illuminate\\Routing\\RouteCompiler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteCompiler.php', + 'Illuminate\\Routing\\RouteCollectionInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteCollectionInterface.php', 'Illuminate\\Routing\\RouteDependencyResolverTrait' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php', + 'Illuminate\\Routing\\RouteFileRegistrar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteFileRegistrar.php', 'Illuminate\\Routing\\RouteGroup' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteGroup.php', 'Illuminate\\Routing\\RouteParameterBinder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php', 'Illuminate\\Routing\\RouteRegistrar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php', 'Illuminate\\Routing\\RouteSignatureParameters' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php', + 'Illuminate\\Routing\\RouteUri' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteUri.php', 'Illuminate\\Routing\\RouteUrlGenerator' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteUrlGenerator.php', 'Illuminate\\Routing\\Router' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/Router.php', 'Illuminate\\Routing\\RoutingServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php', 'Illuminate\\Routing\\SortedMiddleware' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/SortedMiddleware.php', 'Illuminate\\Routing\\UrlGenerator' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/UrlGenerator.php', 'Illuminate\\Routing\\ViewController' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/ViewController.php', + 'Illuminate\\Session\\ArraySessionHandler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Session/ArraySessionHandler.php', 'Illuminate\\Session\\CacheBasedSessionHandler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php', 'Illuminate\\Session\\Console\\SessionTableCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php', 'Illuminate\\Session\\CookieSessionHandler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php', @@ -2369,6 +2800,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Support\\Carbon' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Carbon.php', 'Illuminate\\Support\\Collection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Collection.php', 'Illuminate\\Support\\Composer' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Composer.php', + 'Illuminate\\Support\\ConfigurationUrlParser' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/ConfigurationUrlParser.php', + 'Illuminate\\Support\\DateFactory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/DateFactory.php', + 'Illuminate\\Support\\Enumerable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Enumerable.php', + 'Illuminate\\Support\\Env' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Env.php', 'Illuminate\\Support\\Facades\\App' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/App.php', 'Illuminate\\Support\\Facades\\Artisan' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Artisan.php', 'Illuminate\\Support\\Facades\\Auth' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Auth.php', @@ -2380,12 +2815,13 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Support\\Facades\\Cookie' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Cookie.php', 'Illuminate\\Support\\Facades\\Crypt' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Crypt.php', 'Illuminate\\Support\\Facades\\DB' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/DB.php', + 'Illuminate\\Support\\Facades\\Date' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Date.php', 'Illuminate\\Support\\Facades\\Event' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Event.php', 'Illuminate\\Support\\Facades\\Facade' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Facade.php', 'Illuminate\\Support\\Facades\\File' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/File.php', 'Illuminate\\Support\\Facades\\Gate' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Gate.php', 'Illuminate\\Support\\Facades\\Hash' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Hash.php', - 'Illuminate\\Support\\Facades\\Input' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Input.php', + 'Illuminate\\Support\\Facades\\Http' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Http.php', 'Illuminate\\Support\\Facades\\Lang' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Lang.php', 'Illuminate\\Support\\Facades\\Log' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Log.php', 'Illuminate\\Support\\Facades\\Mail' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Mail.php', @@ -2406,16 +2842,20 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Support\\Fluent' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Fluent.php', 'Illuminate\\Support\\HigherOrderCollectionProxy' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php', 'Illuminate\\Support\\HigherOrderTapProxy' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/HigherOrderTapProxy.php', + 'Illuminate\\Support\\HigherOrderWhenProxy' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/HigherOrderWhenProxy.php', 'Illuminate\\Support\\HtmlString' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/HtmlString.php', 'Illuminate\\Support\\InteractsWithTime' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/InteractsWithTime.php', + 'Illuminate\\Support\\LazyCollection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/LazyCollection.php', 'Illuminate\\Support\\Manager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Manager.php', 'Illuminate\\Support\\MessageBag' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/MessageBag.php', 'Illuminate\\Support\\NamespacedItemResolver' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php', 'Illuminate\\Support\\Optional' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Optional.php', 'Illuminate\\Support\\Pluralizer' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Pluralizer.php', 'Illuminate\\Support\\ProcessUtils' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/ProcessUtils.php', + 'Illuminate\\Support\\Reflector' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Reflector.php', 'Illuminate\\Support\\ServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/ServiceProvider.php', 'Illuminate\\Support\\Str' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Str.php', + 'Illuminate\\Support\\Stringable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Stringable.php', 'Illuminate\\Support\\Testing\\Fakes\\BusFake' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php', 'Illuminate\\Support\\Testing\\Fakes\\EventFake' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php', 'Illuminate\\Support\\Testing\\Fakes\\MailFake' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php', @@ -2423,20 +2863,33 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Support\\Testing\\Fakes\\PendingMailFake' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/PendingMailFake.php', 'Illuminate\\Support\\Testing\\Fakes\\QueueFake' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/QueueFake.php', 'Illuminate\\Support\\Traits\\CapsuleManagerTrait' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php', + 'Illuminate\\Support\\Traits\\EnumeratesValues' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php', 'Illuminate\\Support\\Traits\\ForwardsCalls' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php', 'Illuminate\\Support\\Traits\\Localizable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/Localizable.php', 'Illuminate\\Support\\Traits\\Macroable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/Macroable.php', + 'Illuminate\\Support\\Traits\\ReflectsClosures' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/ReflectsClosures.php', + 'Illuminate\\Support\\Traits\\Tappable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/Tappable.php', 'Illuminate\\Support\\ViewErrorBag' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/ViewErrorBag.php', + 'Illuminate\\Testing\\Assert' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/Assert.php', + 'Illuminate\\Testing\\Constraints\\ArraySubset' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/Constraints/ArraySubset.php', + 'Illuminate\\Testing\\Constraints\\CountInDatabase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/Constraints/CountInDatabase.php', + 'Illuminate\\Testing\\Constraints\\HasInDatabase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/Constraints/HasInDatabase.php', + 'Illuminate\\Testing\\Constraints\\SeeInOrder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/Constraints/SeeInOrder.php', + 'Illuminate\\Testing\\Constraints\\SoftDeletedInDatabase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/Constraints/SoftDeletedInDatabase.php', + 'Illuminate\\Testing\\PendingCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/PendingCommand.php', + 'Illuminate\\Testing\\TestResponse' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/TestResponse.php', 'Illuminate\\Translation\\ArrayLoader' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Translation/ArrayLoader.php', 'Illuminate\\Translation\\FileLoader' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Translation/FileLoader.php', 'Illuminate\\Translation\\MessageSelector' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Translation/MessageSelector.php', 'Illuminate\\Translation\\TranslationServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php', 'Illuminate\\Translation\\Translator' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Translation/Translator.php', 'Illuminate\\Validation\\ClosureValidationRule' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/ClosureValidationRule.php', + 'Illuminate\\Validation\\Concerns\\FilterEmailValidation' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/Concerns/FilterEmailValidation.php', 'Illuminate\\Validation\\Concerns\\FormatsMessages' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/Concerns/FormatsMessages.php', 'Illuminate\\Validation\\Concerns\\ReplacesAttributes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php', 'Illuminate\\Validation\\Concerns\\ValidatesAttributes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php', 'Illuminate\\Validation\\DatabasePresenceVerifier' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php', + 'Illuminate\\Validation\\DatabasePresenceVerifierInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifierInterface.php', 'Illuminate\\Validation\\Factory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/Factory.php', 'Illuminate\\Validation\\PresenceVerifierInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/PresenceVerifierInterface.php', 'Illuminate\\Validation\\Rule' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/Rule.php', @@ -2454,14 +2907,17 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\Validation\\ValidationRuleParser' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/ValidationRuleParser.php', 'Illuminate\\Validation\\ValidationServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php', 'Illuminate\\Validation\\Validator' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/Validator.php', + 'Illuminate\\View\\AnonymousComponent' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/AnonymousComponent.php', 'Illuminate\\View\\Compilers\\BladeCompiler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php', 'Illuminate\\View\\Compilers\\Compiler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Compiler.php', 'Illuminate\\View\\Compilers\\CompilerInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/CompilerInterface.php', + 'Illuminate\\View\\Compilers\\ComponentTagCompiler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesAuthorizations' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesAuthorizations.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesComments' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComments.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesComponents' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComponents.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesConditionals' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesConditionals.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesEchos' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesEchos.php', + 'Illuminate\\View\\Compilers\\Concerns\\CompilesErrors' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesErrors.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesHelpers' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesHelpers.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesIncludes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesIncludes.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesInjections' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesInjections.php', @@ -2471,6 +2927,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\View\\Compilers\\Concerns\\CompilesRawPhp' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesRawPhp.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesStacks' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesStacks.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesTranslations' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesTranslations.php', + 'Illuminate\\View\\Component' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Component.php', + 'Illuminate\\View\\ComponentAttributeBag' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php', 'Illuminate\\View\\Concerns\\ManagesComponents' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php', 'Illuminate\\View\\Concerns\\ManagesEvents' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Concerns/ManagesEvents.php', 'Illuminate\\View\\Concerns\\ManagesLayouts' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Concerns/ManagesLayouts.php', @@ -2484,53 +2942,237 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Illuminate\\View\\Engines\\PhpEngine' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php', 'Illuminate\\View\\Factory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Factory.php', 'Illuminate\\View\\FileViewFinder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/FileViewFinder.php', + 'Illuminate\\View\\InvokableComponentVariable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/InvokableComponentVariable.php', 'Illuminate\\View\\Middleware\\ShareErrorsFromSession' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php', 'Illuminate\\View\\View' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/View.php', + 'Illuminate\\View\\ViewException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/ViewException.php', 'Illuminate\\View\\ViewFinderInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/ViewFinderInterface.php', 'Illuminate\\View\\ViewName' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/ViewName.php', 'Illuminate\\View\\ViewServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/ViewServiceProvider.php', - 'JakubOnderka\\PhpConsoleColor\\ConsoleColor' => __DIR__ . '/..' . '/jakub-onderka/php-console-color/src/ConsoleColor.php', - 'JakubOnderka\\PhpConsoleColor\\InvalidStyleException' => __DIR__ . '/..' . '/jakub-onderka/php-console-color/src/InvalidStyleException.php', - 'JakubOnderka\\PhpConsoleHighlighter\\Highlighter' => __DIR__ . '/..' . '/jakub-onderka/php-console-highlighter/src/Highlighter.php', 'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', - 'JsonSerializable' => __DIR__ . '/..' . '/nesbot/carbon/src/JsonSerializable.php', 'Laravel\\Tinker\\ClassAliasAutoloader' => __DIR__ . '/..' . '/laravel/tinker/src/ClassAliasAutoloader.php', 'Laravel\\Tinker\\Console\\TinkerCommand' => __DIR__ . '/..' . '/laravel/tinker/src/Console/TinkerCommand.php', 'Laravel\\Tinker\\TinkerCaster' => __DIR__ . '/..' . '/laravel/tinker/src/TinkerCaster.php', 'Laravel\\Tinker\\TinkerServiceProvider' => __DIR__ . '/..' . '/laravel/tinker/src/TinkerServiceProvider.php', - 'Lcobucci\\JWT\\Builder' => __DIR__ . '/..' . '/lcobucci/jwt/src/Builder.php', - 'Lcobucci\\JWT\\Claim' => __DIR__ . '/..' . '/lcobucci/jwt/src/Claim.php', - 'Lcobucci\\JWT\\Claim\\Basic' => __DIR__ . '/..' . '/lcobucci/jwt/src/Claim/Basic.php', - 'Lcobucci\\JWT\\Claim\\EqualsTo' => __DIR__ . '/..' . '/lcobucci/jwt/src/Claim/EqualsTo.php', - 'Lcobucci\\JWT\\Claim\\Factory' => __DIR__ . '/..' . '/lcobucci/jwt/src/Claim/Factory.php', - 'Lcobucci\\JWT\\Claim\\GreaterOrEqualsTo' => __DIR__ . '/..' . '/lcobucci/jwt/src/Claim/GreaterOrEqualsTo.php', - 'Lcobucci\\JWT\\Claim\\LesserOrEqualsTo' => __DIR__ . '/..' . '/lcobucci/jwt/src/Claim/LesserOrEqualsTo.php', - 'Lcobucci\\JWT\\Claim\\Validatable' => __DIR__ . '/..' . '/lcobucci/jwt/src/Claim/Validatable.php', - 'Lcobucci\\JWT\\Parser' => __DIR__ . '/..' . '/lcobucci/jwt/src/Parser.php', - 'Lcobucci\\JWT\\Parsing\\Decoder' => __DIR__ . '/..' . '/lcobucci/jwt/src/Parsing/Decoder.php', - 'Lcobucci\\JWT\\Parsing\\Encoder' => __DIR__ . '/..' . '/lcobucci/jwt/src/Parsing/Encoder.php', - 'Lcobucci\\JWT\\Signature' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signature.php', - 'Lcobucci\\JWT\\Signer' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer.php', - 'Lcobucci\\JWT\\Signer\\BaseSigner' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/BaseSigner.php', - 'Lcobucci\\JWT\\Signer\\Ecdsa' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Ecdsa.php', - 'Lcobucci\\JWT\\Signer\\Ecdsa\\MultibyteStringConverter' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Ecdsa/MultibyteStringConverter.php', - 'Lcobucci\\JWT\\Signer\\Ecdsa\\Sha256' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Ecdsa/Sha256.php', - 'Lcobucci\\JWT\\Signer\\Ecdsa\\Sha384' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Ecdsa/Sha384.php', - 'Lcobucci\\JWT\\Signer\\Ecdsa\\Sha512' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Ecdsa/Sha512.php', - 'Lcobucci\\JWT\\Signer\\Ecdsa\\SignatureConverter' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Ecdsa/SignatureConverter.php', - 'Lcobucci\\JWT\\Signer\\Hmac' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Hmac.php', - 'Lcobucci\\JWT\\Signer\\Hmac\\Sha256' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Hmac/Sha256.php', - 'Lcobucci\\JWT\\Signer\\Hmac\\Sha384' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Hmac/Sha384.php', - 'Lcobucci\\JWT\\Signer\\Hmac\\Sha512' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Hmac/Sha512.php', - 'Lcobucci\\JWT\\Signer\\Key' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Key.php', - 'Lcobucci\\JWT\\Signer\\Keychain' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Keychain.php', - 'Lcobucci\\JWT\\Signer\\OpenSSL' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/OpenSSL.php', - 'Lcobucci\\JWT\\Signer\\Rsa' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Rsa.php', - 'Lcobucci\\JWT\\Signer\\Rsa\\Sha256' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Rsa/Sha256.php', - 'Lcobucci\\JWT\\Signer\\Rsa\\Sha384' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Rsa/Sha384.php', - 'Lcobucci\\JWT\\Signer\\Rsa\\Sha512' => __DIR__ . '/..' . '/lcobucci/jwt/src/Signer/Rsa/Sha512.php', - 'Lcobucci\\JWT\\Token' => __DIR__ . '/..' . '/lcobucci/jwt/src/Token.php', - 'Lcobucci\\JWT\\ValidationData' => __DIR__ . '/..' . '/lcobucci/jwt/src/ValidationData.php', + 'Laravel\\Ui\\AuthCommand' => __DIR__ . '/..' . '/laravel/ui/src/AuthCommand.php', + 'Laravel\\Ui\\AuthRouteMethods' => __DIR__ . '/..' . '/laravel/ui/src/AuthRouteMethods.php', + 'Laravel\\Ui\\ControllersCommand' => __DIR__ . '/..' . '/laravel/ui/src/ControllersCommand.php', + 'Laravel\\Ui\\Presets\\Bootstrap' => __DIR__ . '/..' . '/laravel/ui/src/Presets/Bootstrap.php', + 'Laravel\\Ui\\Presets\\Preset' => __DIR__ . '/..' . '/laravel/ui/src/Presets/Preset.php', + 'Laravel\\Ui\\Presets\\React' => __DIR__ . '/..' . '/laravel/ui/src/Presets/React.php', + 'Laravel\\Ui\\Presets\\Vue' => __DIR__ . '/..' . '/laravel/ui/src/Presets/Vue.php', + 'Laravel\\Ui\\UiCommand' => __DIR__ . '/..' . '/laravel/ui/src/UiCommand.php', + 'Laravel\\Ui\\UiServiceProvider' => __DIR__ . '/..' . '/laravel/ui/src/UiServiceProvider.php', + 'League\\CommonMark\\Block\\Element\\AbstractBlock' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/AbstractBlock.php', + 'League\\CommonMark\\Block\\Element\\AbstractStringContainerBlock' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/AbstractStringContainerBlock.php', + 'League\\CommonMark\\Block\\Element\\BlockQuote' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/BlockQuote.php', + 'League\\CommonMark\\Block\\Element\\Document' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/Document.php', + 'League\\CommonMark\\Block\\Element\\FencedCode' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/FencedCode.php', + 'League\\CommonMark\\Block\\Element\\Heading' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/Heading.php', + 'League\\CommonMark\\Block\\Element\\HtmlBlock' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/HtmlBlock.php', + 'League\\CommonMark\\Block\\Element\\IndentedCode' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/IndentedCode.php', + 'League\\CommonMark\\Block\\Element\\InlineContainerInterface' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/InlineContainerInterface.php', + 'League\\CommonMark\\Block\\Element\\ListBlock' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/ListBlock.php', + 'League\\CommonMark\\Block\\Element\\ListData' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/ListData.php', + 'League\\CommonMark\\Block\\Element\\ListItem' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/ListItem.php', + 'League\\CommonMark\\Block\\Element\\Paragraph' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/Paragraph.php', + 'League\\CommonMark\\Block\\Element\\StringContainerInterface' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/StringContainerInterface.php', + 'League\\CommonMark\\Block\\Element\\ThematicBreak' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/ThematicBreak.php', + 'League\\CommonMark\\Block\\Parser\\ATXHeadingParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/ATXHeadingParser.php', + 'League\\CommonMark\\Block\\Parser\\BlockParserInterface' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/BlockParserInterface.php', + 'League\\CommonMark\\Block\\Parser\\BlockQuoteParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/BlockQuoteParser.php', + 'League\\CommonMark\\Block\\Parser\\FencedCodeParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/FencedCodeParser.php', + 'League\\CommonMark\\Block\\Parser\\HtmlBlockParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/HtmlBlockParser.php', + 'League\\CommonMark\\Block\\Parser\\IndentedCodeParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/IndentedCodeParser.php', + 'League\\CommonMark\\Block\\Parser\\LazyParagraphParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/LazyParagraphParser.php', + 'League\\CommonMark\\Block\\Parser\\ListParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/ListParser.php', + 'League\\CommonMark\\Block\\Parser\\SetExtHeadingParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/SetExtHeadingParser.php', + 'League\\CommonMark\\Block\\Parser\\ThematicBreakParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/ThematicBreakParser.php', + 'League\\CommonMark\\Block\\Renderer\\BlockQuoteRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/BlockQuoteRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\BlockRendererInterface' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/BlockRendererInterface.php', + 'League\\CommonMark\\Block\\Renderer\\DocumentRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/DocumentRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\FencedCodeRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/FencedCodeRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\HeadingRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/HeadingRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\HtmlBlockRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/HtmlBlockRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\IndentedCodeRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/IndentedCodeRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ListBlockRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/ListBlockRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ListItemRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/ListItemRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ParagraphRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/ParagraphRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ThematicBreakRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/ThematicBreakRenderer.php', + 'League\\CommonMark\\CommonMarkConverter' => __DIR__ . '/..' . '/league/commonmark/src/CommonMarkConverter.php', + 'League\\CommonMark\\ConfigurableEnvironmentInterface' => __DIR__ . '/..' . '/league/commonmark/src/ConfigurableEnvironmentInterface.php', + 'League\\CommonMark\\Context' => __DIR__ . '/..' . '/league/commonmark/src/Context.php', + 'League\\CommonMark\\ContextInterface' => __DIR__ . '/..' . '/league/commonmark/src/ContextInterface.php', + 'League\\CommonMark\\Converter' => __DIR__ . '/..' . '/league/commonmark/src/Converter.php', + 'League\\CommonMark\\ConverterInterface' => __DIR__ . '/..' . '/league/commonmark/src/ConverterInterface.php', + 'League\\CommonMark\\Cursor' => __DIR__ . '/..' . '/league/commonmark/src/Cursor.php', + 'League\\CommonMark\\Delimiter\\Delimiter' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/Delimiter.php', + 'League\\CommonMark\\Delimiter\\DelimiterInterface' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/DelimiterInterface.php', + 'League\\CommonMark\\Delimiter\\DelimiterStack' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/DelimiterStack.php', + 'League\\CommonMark\\Delimiter\\Processor\\DelimiterProcessorCollection' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollection.php', + 'League\\CommonMark\\Delimiter\\Processor\\DelimiterProcessorCollectionInterface' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollectionInterface.php', + 'League\\CommonMark\\Delimiter\\Processor\\DelimiterProcessorInterface' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/Processor/DelimiterProcessorInterface.php', + 'League\\CommonMark\\Delimiter\\Processor\\EmphasisDelimiterProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/Processor/EmphasisDelimiterProcessor.php', + 'League\\CommonMark\\Delimiter\\Processor\\StaggeredDelimiterProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/Processor/StaggeredDelimiterProcessor.php', + 'League\\CommonMark\\DocParser' => __DIR__ . '/..' . '/league/commonmark/src/DocParser.php', + 'League\\CommonMark\\DocParserInterface' => __DIR__ . '/..' . '/league/commonmark/src/DocParserInterface.php', + 'League\\CommonMark\\ElementRendererInterface' => __DIR__ . '/..' . '/league/commonmark/src/ElementRendererInterface.php', + 'League\\CommonMark\\Environment' => __DIR__ . '/..' . '/league/commonmark/src/Environment.php', + 'League\\CommonMark\\EnvironmentAwareInterface' => __DIR__ . '/..' . '/league/commonmark/src/EnvironmentAwareInterface.php', + 'League\\CommonMark\\EnvironmentInterface' => __DIR__ . '/..' . '/league/commonmark/src/EnvironmentInterface.php', + 'League\\CommonMark\\Event\\AbstractEvent' => __DIR__ . '/..' . '/league/commonmark/src/Event/AbstractEvent.php', + 'League\\CommonMark\\Event\\DocumentParsedEvent' => __DIR__ . '/..' . '/league/commonmark/src/Event/DocumentParsedEvent.php', + 'League\\CommonMark\\Event\\DocumentPreParsedEvent' => __DIR__ . '/..' . '/league/commonmark/src/Event/DocumentPreParsedEvent.php', + 'League\\CommonMark\\Exception\\InvalidOptionException' => __DIR__ . '/..' . '/league/commonmark/src/Exception/InvalidOptionException.php', + 'League\\CommonMark\\Exception\\UnexpectedEncodingException' => __DIR__ . '/..' . '/league/commonmark/src/Exception/UnexpectedEncodingException.php', + 'League\\CommonMark\\Extension\\Attributes\\AttributesExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/AttributesExtension.php', + 'League\\CommonMark\\Extension\\Attributes\\Event\\AttributesListener' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/Event/AttributesListener.php', + 'League\\CommonMark\\Extension\\Attributes\\Node\\Attributes' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/Node/Attributes.php', + 'League\\CommonMark\\Extension\\Attributes\\Node\\AttributesInline' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/Node/AttributesInline.php', + 'League\\CommonMark\\Extension\\Attributes\\Parser\\AttributesBlockParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/Parser/AttributesBlockParser.php', + 'League\\CommonMark\\Extension\\Attributes\\Parser\\AttributesInlineParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/Parser/AttributesInlineParser.php', + 'League\\CommonMark\\Extension\\Attributes\\Util\\AttributesHelper' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php', + 'League\\CommonMark\\Extension\\Autolink\\AutolinkExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Autolink/AutolinkExtension.php', + 'League\\CommonMark\\Extension\\Autolink\\EmailAutolinkProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Autolink/EmailAutolinkProcessor.php', + 'League\\CommonMark\\Extension\\Autolink\\InlineMentionParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Autolink/InlineMentionParser.php', + 'League\\CommonMark\\Extension\\Autolink\\UrlAutolinkProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Autolink/UrlAutolinkProcessor.php', + 'League\\CommonMark\\Extension\\CommonMarkCoreExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/CommonMarkCoreExtension.php', + 'League\\CommonMark\\Extension\\DisallowedRawHtml\\DisallowedRawHtmlBlockRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlBlockRenderer.php', + 'League\\CommonMark\\Extension\\DisallowedRawHtml\\DisallowedRawHtmlExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlExtension.php', + 'League\\CommonMark\\Extension\\DisallowedRawHtml\\DisallowedRawHtmlInlineRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlInlineRenderer.php', + 'League\\CommonMark\\Extension\\ExtensionInterface' => __DIR__ . '/..' . '/league/commonmark/src/Extension/ExtensionInterface.php', + 'League\\CommonMark\\Extension\\ExternalLink\\ExternalLinkExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/ExternalLink/ExternalLinkExtension.php', + 'League\\CommonMark\\Extension\\ExternalLink\\ExternalLinkProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Extension/ExternalLink/ExternalLinkProcessor.php', + 'League\\CommonMark\\Extension\\Footnote\\Event\\AnonymousFootnotesListener' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Event/AnonymousFootnotesListener.php', + 'League\\CommonMark\\Extension\\Footnote\\Event\\GatherFootnotesListener' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Event/GatherFootnotesListener.php', + 'League\\CommonMark\\Extension\\Footnote\\Event\\NumberFootnotesListener' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Event/NumberFootnotesListener.php', + 'League\\CommonMark\\Extension\\Footnote\\FootnoteExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/FootnoteExtension.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\Footnote' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Node/Footnote.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\FootnoteBackref' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Node/FootnoteBackref.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\FootnoteContainer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Node/FootnoteContainer.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\FootnoteRef' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Node/FootnoteRef.php', + 'League\\CommonMark\\Extension\\Footnote\\Parser\\AnonymousFootnoteRefParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Parser/AnonymousFootnoteRefParser.php', + 'League\\CommonMark\\Extension\\Footnote\\Parser\\FootnoteParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Parser/FootnoteParser.php', + 'League\\CommonMark\\Extension\\Footnote\\Parser\\FootnoteRefParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Parser/FootnoteRefParser.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteBackrefRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteBackrefRenderer.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteContainerRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteContainerRenderer.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteRefRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRefRenderer.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRenderer.php', + 'League\\CommonMark\\Extension\\GithubFlavoredMarkdownExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/GithubFlavoredMarkdownExtension.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalink' => __DIR__ . '/..' . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalink.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkExtension.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkProcessor.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkRenderer.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\Slug\\DefaultSlugGenerator' => __DIR__ . '/..' . '/league/commonmark/src/Extension/HeadingPermalink/Slug/DefaultSlugGenerator.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\Slug\\SlugGeneratorInterface' => __DIR__ . '/..' . '/league/commonmark/src/Extension/HeadingPermalink/Slug/SlugGeneratorInterface.php', + 'League\\CommonMark\\Extension\\InlinesOnly\\ChildRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/InlinesOnly/ChildRenderer.php', + 'League\\CommonMark\\Extension\\InlinesOnly\\InlinesOnlyExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/InlinesOnly/InlinesOnlyExtension.php', + 'League\\CommonMark\\Extension\\Mention\\Generator\\CallbackGenerator' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/Generator/CallbackGenerator.php', + 'League\\CommonMark\\Extension\\Mention\\Generator\\MentionGeneratorInterface' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/Generator/MentionGeneratorInterface.php', + 'League\\CommonMark\\Extension\\Mention\\Generator\\StringTemplateLinkGenerator' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/Generator/StringTemplateLinkGenerator.php', + 'League\\CommonMark\\Extension\\Mention\\Mention' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/Mention.php', + 'League\\CommonMark\\Extension\\Mention\\MentionExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/MentionExtension.php', + 'League\\CommonMark\\Extension\\Mention\\MentionParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/MentionParser.php', + 'League\\CommonMark\\Extension\\SmartPunct\\PunctuationParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/PunctuationParser.php', + 'League\\CommonMark\\Extension\\SmartPunct\\Quote' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/Quote.php', + 'League\\CommonMark\\Extension\\SmartPunct\\QuoteParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/QuoteParser.php', + 'League\\CommonMark\\Extension\\SmartPunct\\QuoteProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/QuoteProcessor.php', + 'League\\CommonMark\\Extension\\SmartPunct\\QuoteRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/QuoteRenderer.php', + 'League\\CommonMark\\Extension\\SmartPunct\\SmartPunctExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/SmartPunctExtension.php', + 'League\\CommonMark\\Extension\\Strikethrough\\Strikethrough' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Strikethrough/Strikethrough.php', + 'League\\CommonMark\\Extension\\Strikethrough\\StrikethroughDelimiterProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Strikethrough/StrikethroughDelimiterProcessor.php', + 'League\\CommonMark\\Extension\\Strikethrough\\StrikethroughExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Strikethrough/StrikethroughExtension.php', + 'League\\CommonMark\\Extension\\Strikethrough\\StrikethroughRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Strikethrough/StrikethroughRenderer.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContents' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContents.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContentsPlaceholder' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsPlaceholder.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\AsIsNormalizerStrategy' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Normalizer/AsIsNormalizerStrategy.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\FlatNormalizerStrategy' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Normalizer/FlatNormalizerStrategy.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\NormalizerStrategyInterface' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Normalizer/NormalizerStrategyInterface.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\RelativeNormalizerStrategy' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Normalizer/RelativeNormalizerStrategy.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContents' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContents.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsBuilder' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsBuilder.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsExtension.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsGenerator' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsGenerator.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsGeneratorInterface' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsGeneratorInterface.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderRenderer.php', + 'League\\CommonMark\\Extension\\Table\\Table' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/Table.php', + 'League\\CommonMark\\Extension\\Table\\TableCell' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableCell.php', + 'League\\CommonMark\\Extension\\Table\\TableCellRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableCellRenderer.php', + 'League\\CommonMark\\Extension\\Table\\TableExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableExtension.php', + 'League\\CommonMark\\Extension\\Table\\TableParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableParser.php', + 'League\\CommonMark\\Extension\\Table\\TableRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableRenderer.php', + 'League\\CommonMark\\Extension\\Table\\TableRow' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableRow.php', + 'League\\CommonMark\\Extension\\Table\\TableRowRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableRowRenderer.php', + 'League\\CommonMark\\Extension\\Table\\TableSection' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableSection.php', + 'League\\CommonMark\\Extension\\Table\\TableSectionRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableSectionRenderer.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TaskList/TaskListExtension.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListItemMarker' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TaskList/TaskListItemMarker.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListItemMarkerParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TaskList/TaskListItemMarkerParser.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListItemMarkerRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TaskList/TaskListItemMarkerRenderer.php', + 'League\\CommonMark\\GithubFlavoredMarkdownConverter' => __DIR__ . '/..' . '/league/commonmark/src/GithubFlavoredMarkdownConverter.php', + 'League\\CommonMark\\HtmlElement' => __DIR__ . '/..' . '/league/commonmark/src/HtmlElement.php', + 'League\\CommonMark\\HtmlRenderer' => __DIR__ . '/..' . '/league/commonmark/src/HtmlRenderer.php', + 'League\\CommonMark\\InlineParserContext' => __DIR__ . '/..' . '/league/commonmark/src/InlineParserContext.php', + 'League\\CommonMark\\InlineParserEngine' => __DIR__ . '/..' . '/league/commonmark/src/InlineParserEngine.php', + 'League\\CommonMark\\Inline\\AdjacentTextMerger' => __DIR__ . '/..' . '/league/commonmark/src/Inline/AdjacentTextMerger.php', + 'League\\CommonMark\\Inline\\Element\\AbstractInline' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/AbstractInline.php', + 'League\\CommonMark\\Inline\\Element\\AbstractStringContainer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/AbstractStringContainer.php', + 'League\\CommonMark\\Inline\\Element\\AbstractWebResource' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/AbstractWebResource.php', + 'League\\CommonMark\\Inline\\Element\\Code' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Code.php', + 'League\\CommonMark\\Inline\\Element\\Emphasis' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Emphasis.php', + 'League\\CommonMark\\Inline\\Element\\HtmlInline' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/HtmlInline.php', + 'League\\CommonMark\\Inline\\Element\\Image' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Image.php', + 'League\\CommonMark\\Inline\\Element\\Link' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Link.php', + 'League\\CommonMark\\Inline\\Element\\Newline' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Newline.php', + 'League\\CommonMark\\Inline\\Element\\Strong' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Strong.php', + 'League\\CommonMark\\Inline\\Element\\Text' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Text.php', + 'League\\CommonMark\\Inline\\Parser\\AutolinkParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/AutolinkParser.php', + 'League\\CommonMark\\Inline\\Parser\\BacktickParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/BacktickParser.php', + 'League\\CommonMark\\Inline\\Parser\\BangParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/BangParser.php', + 'League\\CommonMark\\Inline\\Parser\\CloseBracketParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/CloseBracketParser.php', + 'League\\CommonMark\\Inline\\Parser\\EntityParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/EntityParser.php', + 'League\\CommonMark\\Inline\\Parser\\EscapableParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/EscapableParser.php', + 'League\\CommonMark\\Inline\\Parser\\HtmlInlineParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/HtmlInlineParser.php', + 'League\\CommonMark\\Inline\\Parser\\InlineParserInterface' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/InlineParserInterface.php', + 'League\\CommonMark\\Inline\\Parser\\NewlineParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/NewlineParser.php', + 'League\\CommonMark\\Inline\\Parser\\OpenBracketParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/OpenBracketParser.php', + 'League\\CommonMark\\Inline\\Renderer\\CodeRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/CodeRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\EmphasisRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/EmphasisRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\HtmlInlineRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/HtmlInlineRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\ImageRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/ImageRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\InlineRendererInterface' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/InlineRendererInterface.php', + 'League\\CommonMark\\Inline\\Renderer\\LinkRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/LinkRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\NewlineRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/NewlineRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\StrongRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/StrongRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\TextRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/TextRenderer.php', + 'League\\CommonMark\\Input\\MarkdownInput' => __DIR__ . '/..' . '/league/commonmark/src/Input/MarkdownInput.php', + 'League\\CommonMark\\Input\\MarkdownInputInterface' => __DIR__ . '/..' . '/league/commonmark/src/Input/MarkdownInputInterface.php', + 'League\\CommonMark\\MarkdownConverter' => __DIR__ . '/..' . '/league/commonmark/src/MarkdownConverter.php', + 'League\\CommonMark\\MarkdownConverterInterface' => __DIR__ . '/..' . '/league/commonmark/src/MarkdownConverterInterface.php', + 'League\\CommonMark\\Node\\Node' => __DIR__ . '/..' . '/league/commonmark/src/Node/Node.php', + 'League\\CommonMark\\Node\\NodeWalker' => __DIR__ . '/..' . '/league/commonmark/src/Node/NodeWalker.php', + 'League\\CommonMark\\Node\\NodeWalkerEvent' => __DIR__ . '/..' . '/league/commonmark/src/Node/NodeWalkerEvent.php', + 'League\\CommonMark\\Normalizer\\SlugNormalizer' => __DIR__ . '/..' . '/league/commonmark/src/Normalizer/SlugNormalizer.php', + 'League\\CommonMark\\Normalizer\\TextNormalizer' => __DIR__ . '/..' . '/league/commonmark/src/Normalizer/TextNormalizer.php', + 'League\\CommonMark\\Normalizer\\TextNormalizerInterface' => __DIR__ . '/..' . '/league/commonmark/src/Normalizer/TextNormalizerInterface.php', + 'League\\CommonMark\\Reference\\Reference' => __DIR__ . '/..' . '/league/commonmark/src/Reference/Reference.php', + 'League\\CommonMark\\Reference\\ReferenceInterface' => __DIR__ . '/..' . '/league/commonmark/src/Reference/ReferenceInterface.php', + 'League\\CommonMark\\Reference\\ReferenceMap' => __DIR__ . '/..' . '/league/commonmark/src/Reference/ReferenceMap.php', + 'League\\CommonMark\\Reference\\ReferenceMapInterface' => __DIR__ . '/..' . '/league/commonmark/src/Reference/ReferenceMapInterface.php', + 'League\\CommonMark\\Reference\\ReferenceParser' => __DIR__ . '/..' . '/league/commonmark/src/Reference/ReferenceParser.php', + 'League\\CommonMark\\UnmatchedBlockCloser' => __DIR__ . '/..' . '/league/commonmark/src/UnmatchedBlockCloser.php', + 'League\\CommonMark\\Util\\ArrayCollection' => __DIR__ . '/..' . '/league/commonmark/src/Util/ArrayCollection.php', + 'League\\CommonMark\\Util\\Configuration' => __DIR__ . '/..' . '/league/commonmark/src/Util/Configuration.php', + 'League\\CommonMark\\Util\\ConfigurationAwareInterface' => __DIR__ . '/..' . '/league/commonmark/src/Util/ConfigurationAwareInterface.php', + 'League\\CommonMark\\Util\\ConfigurationInterface' => __DIR__ . '/..' . '/league/commonmark/src/Util/ConfigurationInterface.php', + 'League\\CommonMark\\Util\\Html5Entities' => __DIR__ . '/..' . '/league/commonmark/src/Util/Html5Entities.php', + 'League\\CommonMark\\Util\\Html5EntityDecoder' => __DIR__ . '/..' . '/league/commonmark/src/Util/Html5EntityDecoder.php', + 'League\\CommonMark\\Util\\LinkParserHelper' => __DIR__ . '/..' . '/league/commonmark/src/Util/LinkParserHelper.php', + 'League\\CommonMark\\Util\\PrioritizedList' => __DIR__ . '/..' . '/league/commonmark/src/Util/PrioritizedList.php', + 'League\\CommonMark\\Util\\RegexHelper' => __DIR__ . '/..' . '/league/commonmark/src/Util/RegexHelper.php', + 'League\\CommonMark\\Util\\UrlEncoder' => __DIR__ . '/..' . '/league/commonmark/src/Util/UrlEncoder.php', + 'League\\CommonMark\\Util\\Xml' => __DIR__ . '/..' . '/league/commonmark/src/Util/Xml.php', 'League\\Flysystem\\AdapterInterface' => __DIR__ . '/..' . '/league/flysystem/src/AdapterInterface.php', 'League\\Flysystem\\Adapter\\AbstractAdapter' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/AbstractAdapter.php', 'League\\Flysystem\\Adapter\\AbstractFtpAdapter' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/AbstractFtpAdapter.php', @@ -2547,15 +3189,20 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'League\\Flysystem\\Adapter\\SynologyFtp' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/SynologyFtp.php', 'League\\Flysystem\\Config' => __DIR__ . '/..' . '/league/flysystem/src/Config.php', 'League\\Flysystem\\ConfigAwareTrait' => __DIR__ . '/..' . '/league/flysystem/src/ConfigAwareTrait.php', + 'League\\Flysystem\\ConnectionErrorException' => __DIR__ . '/..' . '/league/flysystem/src/ConnectionErrorException.php', + 'League\\Flysystem\\ConnectionRuntimeException' => __DIR__ . '/..' . '/league/flysystem/src/ConnectionRuntimeException.php', + 'League\\Flysystem\\CorruptedPathDetected' => __DIR__ . '/..' . '/league/flysystem/src/CorruptedPathDetected.php', 'League\\Flysystem\\Directory' => __DIR__ . '/..' . '/league/flysystem/src/Directory.php', 'League\\Flysystem\\Exception' => __DIR__ . '/..' . '/league/flysystem/src/Exception.php', 'League\\Flysystem\\File' => __DIR__ . '/..' . '/league/flysystem/src/File.php', 'League\\Flysystem\\FileExistsException' => __DIR__ . '/..' . '/league/flysystem/src/FileExistsException.php', 'League\\Flysystem\\FileNotFoundException' => __DIR__ . '/..' . '/league/flysystem/src/FileNotFoundException.php', 'League\\Flysystem\\Filesystem' => __DIR__ . '/..' . '/league/flysystem/src/Filesystem.php', + 'League\\Flysystem\\FilesystemException' => __DIR__ . '/..' . '/league/flysystem/src/FilesystemException.php', 'League\\Flysystem\\FilesystemInterface' => __DIR__ . '/..' . '/league/flysystem/src/FilesystemInterface.php', 'League\\Flysystem\\FilesystemNotFoundException' => __DIR__ . '/..' . '/league/flysystem/src/FilesystemNotFoundException.php', 'League\\Flysystem\\Handler' => __DIR__ . '/..' . '/league/flysystem/src/Handler.php', + 'League\\Flysystem\\InvalidRootException' => __DIR__ . '/..' . '/league/flysystem/src/InvalidRootException.php', 'League\\Flysystem\\MountManager' => __DIR__ . '/..' . '/league/flysystem/src/MountManager.php', 'League\\Flysystem\\NotSupportedException' => __DIR__ . '/..' . '/league/flysystem/src/NotSupportedException.php', 'League\\Flysystem\\PluginInterface' => __DIR__ . '/..' . '/league/flysystem/src/PluginInterface.php', @@ -2577,6 +3224,13 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'League\\Flysystem\\Util\\ContentListingFormatter' => __DIR__ . '/..' . '/league/flysystem/src/Util/ContentListingFormatter.php', 'League\\Flysystem\\Util\\MimeType' => __DIR__ . '/..' . '/league/flysystem/src/Util/MimeType.php', 'League\\Flysystem\\Util\\StreamHasher' => __DIR__ . '/..' . '/league/flysystem/src/Util/StreamHasher.php', + 'League\\MimeTypeDetection\\EmptyExtensionToMimeTypeMap' => __DIR__ . '/..' . '/league/mime-type-detection/src/EmptyExtensionToMimeTypeMap.php', + 'League\\MimeTypeDetection\\ExtensionMimeTypeDetector' => __DIR__ . '/..' . '/league/mime-type-detection/src/ExtensionMimeTypeDetector.php', + 'League\\MimeTypeDetection\\ExtensionToMimeTypeMap' => __DIR__ . '/..' . '/league/mime-type-detection/src/ExtensionToMimeTypeMap.php', + 'League\\MimeTypeDetection\\FinfoMimeTypeDetector' => __DIR__ . '/..' . '/league/mime-type-detection/src/FinfoMimeTypeDetector.php', + 'League\\MimeTypeDetection\\GeneratedExtensionToMimeTypeMap' => __DIR__ . '/..' . '/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php', + 'League\\MimeTypeDetection\\MimeTypeDetector' => __DIR__ . '/..' . '/league/mime-type-detection/src/MimeTypeDetector.php', + 'League\\MimeTypeDetection\\OverridingExtensionToMimeTypeMap' => __DIR__ . '/..' . '/league/mime-type-detection/src/OverridingExtensionToMimeTypeMap.php', 'Mockery' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery.php', 'Mockery\\Adapter\\Phpunit\\Legacy\\TestListenerForV5' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerForV5.php', 'Mockery\\Adapter\\Phpunit\\Legacy\\TestListenerForV6' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerForV6.php', @@ -2616,8 +3270,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Mockery\\Generator\\MockConfiguration' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Generator/MockConfiguration.php', 'Mockery\\Generator\\MockConfigurationBuilder' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Generator/MockConfigurationBuilder.php', 'Mockery\\Generator\\MockDefinition' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Generator/MockDefinition.php', + 'Mockery\\Generator\\MockNameBuilder' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Generator/MockNameBuilder.php', 'Mockery\\Generator\\Parameter' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Generator/Parameter.php', 'Mockery\\Generator\\StringManipulationGenerator' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Generator/StringManipulationGenerator.php', + 'Mockery\\Generator\\StringManipulation\\Pass\\AvoidMethodClashPass' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Generator/StringManipulation/Pass/AvoidMethodClashPass.php', 'Mockery\\Generator\\StringManipulation\\Pass\\CallTypeHintPass' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Generator/StringManipulation/Pass/CallTypeHintPass.php', 'Mockery\\Generator\\StringManipulation\\Pass\\ClassNamePass' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Generator/StringManipulation/Pass/ClassNamePass.php', 'Mockery\\Generator\\StringManipulation\\Pass\\ClassPass' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Generator/StringManipulation/Pass/ClassPass.php', @@ -2635,6 +3291,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Mockery\\Generator\\UndefinedTargetClass' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Generator/UndefinedTargetClass.php', 'Mockery\\HigherOrderMessage' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/HigherOrderMessage.php', 'Mockery\\Instantiator' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Instantiator.php', + 'Mockery\\LegacyMockInterface' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/LegacyMockInterface.php', 'Mockery\\Loader\\EvalLoader' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Loader/EvalLoader.php', 'Mockery\\Loader\\Loader' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Loader/Loader.php', 'Mockery\\Loader\\RequireLoader' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Loader/RequireLoader.php', @@ -2662,12 +3319,15 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Mockery\\Mock' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Mock.php', 'Mockery\\MockInterface' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/MockInterface.php', 'Mockery\\ReceivedMethodCalls' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/ReceivedMethodCalls.php', + 'Mockery\\Reflector' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Reflector.php', 'Mockery\\Undefined' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Undefined.php', 'Mockery\\VerificationDirector' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/VerificationDirector.php', 'Mockery\\VerificationExpectation' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/VerificationExpectation.php', + 'Monolog\\DateTimeImmutable' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/DateTimeImmutable.php', 'Monolog\\ErrorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ErrorHandler.php', 'Monolog\\Formatter\\ChromePHPFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php', 'Monolog\\Formatter\\ElasticaFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php', + 'Monolog\\Formatter\\ElasticsearchFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php', 'Monolog\\Formatter\\FlowdockFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php', 'Monolog\\Formatter\\FluentdFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php', 'Monolog\\Formatter\\FormatterInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php', @@ -2676,6 +3336,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Monolog\\Formatter\\JsonFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php', 'Monolog\\Formatter\\LineFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LineFormatter.php', 'Monolog\\Formatter\\LogglyFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php', + 'Monolog\\Formatter\\LogmaticFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php', 'Monolog\\Formatter\\LogstashFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php', 'Monolog\\Formatter\\MongoDBFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php', 'Monolog\\Formatter\\NormalizerFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php', @@ -2694,8 +3355,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Monolog\\Handler\\DeduplicationHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php', 'Monolog\\Handler\\DoctrineCouchDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php', 'Monolog\\Handler\\DynamoDbHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php', - 'Monolog\\Handler\\ElasticSearchHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php', + 'Monolog\\Handler\\ElasticaHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php', + 'Monolog\\Handler\\ElasticsearchHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php', 'Monolog\\Handler\\ErrorLogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php', + 'Monolog\\Handler\\FallbackGroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php', 'Monolog\\Handler\\FilterHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php', 'Monolog\\Handler\\FingersCrossedHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php', 'Monolog\\Handler\\FingersCrossed\\ActivationStrategyInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php', @@ -2704,45 +3367,57 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Monolog\\Handler\\FirePHPHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php', 'Monolog\\Handler\\FleepHookHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php', 'Monolog\\Handler\\FlowdockHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php', + 'Monolog\\Handler\\FormattableHandlerInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php', + 'Monolog\\Handler\\FormattableHandlerTrait' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php', 'Monolog\\Handler\\GelfHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/GelfHandler.php', 'Monolog\\Handler\\GroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/GroupHandler.php', + 'Monolog\\Handler\\Handler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/Handler.php', 'Monolog\\Handler\\HandlerInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HandlerInterface.php', 'Monolog\\Handler\\HandlerWrapper' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php', - 'Monolog\\Handler\\HipChatHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HipChatHandler.php', 'Monolog\\Handler\\IFTTTHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php', 'Monolog\\Handler\\InsightOpsHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php', 'Monolog\\Handler\\LogEntriesHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php', 'Monolog\\Handler\\LogglyHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogglyHandler.php', + 'Monolog\\Handler\\LogmaticHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php', 'Monolog\\Handler\\MailHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MailHandler.php', 'Monolog\\Handler\\MandrillHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MandrillHandler.php', 'Monolog\\Handler\\MissingExtensionException' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php', 'Monolog\\Handler\\MongoDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php', 'Monolog\\Handler\\NativeMailerHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php', 'Monolog\\Handler\\NewRelicHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php', + 'Monolog\\Handler\\NoopHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NoopHandler.php', 'Monolog\\Handler\\NullHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NullHandler.php', + 'Monolog\\Handler\\OverflowHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/OverflowHandler.php', 'Monolog\\Handler\\PHPConsoleHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php', + 'Monolog\\Handler\\ProcessHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ProcessHandler.php', + 'Monolog\\Handler\\ProcessableHandlerInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php', + 'Monolog\\Handler\\ProcessableHandlerTrait' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php', 'Monolog\\Handler\\PsrHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PsrHandler.php', 'Monolog\\Handler\\PushoverHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PushoverHandler.php', - 'Monolog\\Handler\\RavenHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RavenHandler.php', 'Monolog\\Handler\\RedisHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RedisHandler.php', + 'Monolog\\Handler\\RedisPubSubHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php', 'Monolog\\Handler\\RollbarHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RollbarHandler.php', 'Monolog\\Handler\\RotatingFileHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php', 'Monolog\\Handler\\SamplingHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SamplingHandler.php', + 'Monolog\\Handler\\SendGridHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SendGridHandler.php', 'Monolog\\Handler\\SlackHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackHandler.php', 'Monolog\\Handler\\SlackWebhookHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php', 'Monolog\\Handler\\Slack\\SlackRecord' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php', - 'Monolog\\Handler\\SlackbotHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php', 'Monolog\\Handler\\SocketHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SocketHandler.php', + 'Monolog\\Handler\\SqsHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SqsHandler.php', 'Monolog\\Handler\\StreamHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/StreamHandler.php', 'Monolog\\Handler\\SwiftMailerHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php', 'Monolog\\Handler\\SyslogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogHandler.php', 'Monolog\\Handler\\SyslogUdpHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php', 'Monolog\\Handler\\SyslogUdp\\UdpSocket' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php', + 'Monolog\\Handler\\TelegramBotHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php', 'Monolog\\Handler\\TestHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/TestHandler.php', + 'Monolog\\Handler\\WebRequestRecognizerTrait' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php', 'Monolog\\Handler\\WhatFailureGroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php', 'Monolog\\Handler\\ZendMonitorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php', 'Monolog\\Logger' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Logger.php', 'Monolog\\Processor\\GitProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/GitProcessor.php', + 'Monolog\\Processor\\HostnameProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php', 'Monolog\\Processor\\IntrospectionProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php', 'Monolog\\Processor\\MemoryPeakUsageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php', 'Monolog\\Processor\\MemoryProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php', @@ -2757,136 +3432,9 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Monolog\\Registry' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Registry.php', 'Monolog\\ResettableInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ResettableInterface.php', 'Monolog\\SignalHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/SignalHandler.php', + 'Monolog\\Test\\TestCase' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Test/TestCase.php', 'Monolog\\Utils' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Utils.php', - 'Nexmo\\Account\\Balance' => __DIR__ . '/..' . '/nexmo/client/src/Account/Balance.php', - 'Nexmo\\Account\\Client' => __DIR__ . '/..' . '/nexmo/client/src/Account/Client.php', - 'Nexmo\\Account\\Config' => __DIR__ . '/..' . '/nexmo/client/src/Account/Config.php', - 'Nexmo\\Account\\PrefixPrice' => __DIR__ . '/..' . '/nexmo/client/src/Account/PrefixPrice.php', - 'Nexmo\\Account\\Price' => __DIR__ . '/..' . '/nexmo/client/src/Account/Price.php', - 'Nexmo\\Account\\Secret' => __DIR__ . '/..' . '/nexmo/client/src/Account/Secret.php', - 'Nexmo\\Account\\SecretCollection' => __DIR__ . '/..' . '/nexmo/client/src/Account/SecretCollection.php', - 'Nexmo\\Account\\SmsPrice' => __DIR__ . '/..' . '/nexmo/client/src/Account/SmsPrice.php', - 'Nexmo\\Account\\VoicePrice' => __DIR__ . '/..' . '/nexmo/client/src/Account/VoicePrice.php', - 'Nexmo\\ApiErrorHandler' => __DIR__ . '/..' . '/nexmo/client/src/ApiErrorHandler.php', - 'Nexmo\\Application\\Application' => __DIR__ . '/..' . '/nexmo/client/src/Application/Application.php', - 'Nexmo\\Application\\ApplicationInterface' => __DIR__ . '/..' . '/nexmo/client/src/Application/ApplicationInterface.php', - 'Nexmo\\Application\\Client' => __DIR__ . '/..' . '/nexmo/client/src/Application/Client.php', - 'Nexmo\\Application\\Filter' => __DIR__ . '/..' . '/nexmo/client/src/Application/Filter.php', - 'Nexmo\\Application\\MessagesConfig' => __DIR__ . '/..' . '/nexmo/client/src/Application/MessagesConfig.php', - 'Nexmo\\Application\\RtcConfig' => __DIR__ . '/..' . '/nexmo/client/src/Application/RtcConfig.php', - 'Nexmo\\Application\\VbcConfig' => __DIR__ . '/..' . '/nexmo/client/src/Application/VbcConfig.php', - 'Nexmo\\Application\\VoiceConfig' => __DIR__ . '/..' . '/nexmo/client/src/Application/VoiceConfig.php', - 'Nexmo\\Application\\Webhook' => __DIR__ . '/..' . '/nexmo/client/src/Application/Webhook.php', - 'Nexmo\\Call\\Call' => __DIR__ . '/..' . '/nexmo/client/src/Call/Call.php', - 'Nexmo\\Call\\Collection' => __DIR__ . '/..' . '/nexmo/client/src/Call/Collection.php', - 'Nexmo\\Call\\Dtmf' => __DIR__ . '/..' . '/nexmo/client/src/Call/Dtmf.php', - 'Nexmo\\Call\\Earmuff' => __DIR__ . '/..' . '/nexmo/client/src/Call/Earmuff.php', - 'Nexmo\\Call\\Endpoint' => __DIR__ . '/..' . '/nexmo/client/src/Call/Endpoint.php', - 'Nexmo\\Call\\Event' => __DIR__ . '/..' . '/nexmo/client/src/Call/Event.php', - 'Nexmo\\Call\\Filter' => __DIR__ . '/..' . '/nexmo/client/src/Call/Filter.php', - 'Nexmo\\Call\\Hangup' => __DIR__ . '/..' . '/nexmo/client/src/Call/Hangup.php', - 'Nexmo\\Call\\Mute' => __DIR__ . '/..' . '/nexmo/client/src/Call/Mute.php', - 'Nexmo\\Call\\Stream' => __DIR__ . '/..' . '/nexmo/client/src/Call/Stream.php', - 'Nexmo\\Call\\Talk' => __DIR__ . '/..' . '/nexmo/client/src/Call/Talk.php', - 'Nexmo\\Call\\Transfer' => __DIR__ . '/..' . '/nexmo/client/src/Call/Transfer.php', - 'Nexmo\\Call\\Unearmuff' => __DIR__ . '/..' . '/nexmo/client/src/Call/Unearmuff.php', - 'Nexmo\\Call\\Unmute' => __DIR__ . '/..' . '/nexmo/client/src/Call/Unmute.php', - 'Nexmo\\Call\\Webhook' => __DIR__ . '/..' . '/nexmo/client/src/Call/Webhook.php', - 'Nexmo\\Client' => __DIR__ . '/..' . '/nexmo/client/src/Client.php', - 'Nexmo\\Client\\Callback\\Callback' => __DIR__ . '/..' . '/nexmo/client/src/Client/Callback/Callback.php', - 'Nexmo\\Client\\Callback\\CallbackInterface' => __DIR__ . '/..' . '/nexmo/client/src/Client/Callback/CallbackInterface.php', - 'Nexmo\\Client\\ClientAwareInterface' => __DIR__ . '/..' . '/nexmo/client/src/Client/ClientAwareInterface.php', - 'Nexmo\\Client\\ClientAwareTrait' => __DIR__ . '/..' . '/nexmo/client/src/Client/ClientAwareTrait.php', - 'Nexmo\\Client\\Credentials\\AbstractCredentials' => __DIR__ . '/..' . '/nexmo/client/src/Client/Credentials/AbstractCredentials.php', - 'Nexmo\\Client\\Credentials\\Basic' => __DIR__ . '/..' . '/nexmo/client/src/Client/Credentials/Basic.php', - 'Nexmo\\Client\\Credentials\\Container' => __DIR__ . '/..' . '/nexmo/client/src/Client/Credentials/Container.php', - 'Nexmo\\Client\\Credentials\\CredentialsInterface' => __DIR__ . '/..' . '/nexmo/client/src/Client/Credentials/CredentialsInterface.php', - 'Nexmo\\Client\\Credentials\\Keypair' => __DIR__ . '/..' . '/nexmo/client/src/Client/Credentials/Keypair.php', - 'Nexmo\\Client\\Credentials\\OAuth' => __DIR__ . '/..' . '/nexmo/client/src/Client/Credentials/OAuth.php', - 'Nexmo\\Client\\Credentials\\SignatureSecret' => __DIR__ . '/..' . '/nexmo/client/src/Client/Credentials/SignatureSecret.php', - 'Nexmo\\Client\\Exception\\Exception' => __DIR__ . '/..' . '/nexmo/client/src/Client/Exception/Exception.php', - 'Nexmo\\Client\\Exception\\Request' => __DIR__ . '/..' . '/nexmo/client/src/Client/Exception/Request.php', - 'Nexmo\\Client\\Exception\\Server' => __DIR__ . '/..' . '/nexmo/client/src/Client/Exception/Server.php', - 'Nexmo\\Client\\Exception\\Transport' => __DIR__ . '/..' . '/nexmo/client/src/Client/Exception/Transport.php', - 'Nexmo\\Client\\Exception\\Validation' => __DIR__ . '/..' . '/nexmo/client/src/Client/Exception/Validation.php', - 'Nexmo\\Client\\Factory\\FactoryInterface' => __DIR__ . '/..' . '/nexmo/client/src/Client/Factory/FactoryInterface.php', - 'Nexmo\\Client\\Factory\\MapFactory' => __DIR__ . '/..' . '/nexmo/client/src/Client/Factory/MapFactory.php', - 'Nexmo\\Client\\Request\\AbstractRequest' => __DIR__ . '/..' . '/nexmo/client/src/Client/Request/AbstractRequest.php', - 'Nexmo\\Client\\Request\\RequestInterface' => __DIR__ . '/..' . '/nexmo/client/src/Client/Request/RequestInterface.php', - 'Nexmo\\Client\\Request\\WrapResponseInterface' => __DIR__ . '/..' . '/nexmo/client/src/Client/Request/WrapResponseInterface.php', - 'Nexmo\\Client\\Response\\AbstractResponse' => __DIR__ . '/..' . '/nexmo/client/src/Client/Response/AbstractResponse.php', - 'Nexmo\\Client\\Response\\Error' => __DIR__ . '/..' . '/nexmo/client/src/Client/Response/Error.php', - 'Nexmo\\Client\\Response\\Response' => __DIR__ . '/..' . '/nexmo/client/src/Client/Response/Response.php', - 'Nexmo\\Client\\Response\\ResponseInterface' => __DIR__ . '/..' . '/nexmo/client/src/Client/Response/ResponseInterface.php', - 'Nexmo\\Client\\Signature' => __DIR__ . '/..' . '/nexmo/client/src/Client/Signature.php', - 'Nexmo\\Conversations\\Collection' => __DIR__ . '/..' . '/nexmo/client/src/Conversations/Collection.php', - 'Nexmo\\Conversations\\Conversation' => __DIR__ . '/..' . '/nexmo/client/src/Conversations/Conversation.php', - 'Nexmo\\Conversion\\Client' => __DIR__ . '/..' . '/nexmo/client/src/Conversion/Client.php', - 'Nexmo\\Entity\\ArrayAccessTrait' => __DIR__ . '/..' . '/nexmo/client/src/Entity/ArrayAccessTrait.php', - 'Nexmo\\Entity\\CollectionAwareInterface' => __DIR__ . '/..' . '/nexmo/client/src/Entity/CollectionAwareInterface.php', - 'Nexmo\\Entity\\CollectionAwareTrait' => __DIR__ . '/..' . '/nexmo/client/src/Entity/CollectionAwareTrait.php', - 'Nexmo\\Entity\\CollectionInterface' => __DIR__ . '/..' . '/nexmo/client/src/Entity/CollectionInterface.php', - 'Nexmo\\Entity\\CollectionTrait' => __DIR__ . '/..' . '/nexmo/client/src/Entity/CollectionTrait.php', - 'Nexmo\\Entity\\EmptyFilter' => __DIR__ . '/..' . '/nexmo/client/src/Entity/EmptyFilter.php', - 'Nexmo\\Entity\\EntityInterface' => __DIR__ . '/..' . '/nexmo/client/src/Entity/EntityInterface.php', - 'Nexmo\\Entity\\FilterInterface' => __DIR__ . '/..' . '/nexmo/client/src/Entity/FilterInterface.php', - 'Nexmo\\Entity\\HasEntityTrait' => __DIR__ . '/..' . '/nexmo/client/src/Entity/HasEntityTrait.php', - 'Nexmo\\Entity\\JsonResponseTrait' => __DIR__ . '/..' . '/nexmo/client/src/Entity/JsonResponseTrait.php', - 'Nexmo\\Entity\\JsonSerializableInterface' => __DIR__ . '/..' . '/nexmo/client/src/Entity/JsonSerializableInterface.php', - 'Nexmo\\Entity\\JsonSerializableTrait' => __DIR__ . '/..' . '/nexmo/client/src/Entity/JsonSerializableTrait.php', - 'Nexmo\\Entity\\JsonUnserializableInterface' => __DIR__ . '/..' . '/nexmo/client/src/Entity/JsonUnserializableInterface.php', - 'Nexmo\\Entity\\ModernCollectionTrait' => __DIR__ . '/..' . '/nexmo/client/src/Entity/ModernCollectionTrait.php', - 'Nexmo\\Entity\\NoRequestResponseTrait' => __DIR__ . '/..' . '/nexmo/client/src/Entity/NoRequestResponseTrait.php', - 'Nexmo\\Entity\\Psr7Trait' => __DIR__ . '/..' . '/nexmo/client/src/Entity/Psr7Trait.php', - 'Nexmo\\Entity\\RequestArrayTrait' => __DIR__ . '/..' . '/nexmo/client/src/Entity/RequestArrayTrait.php', - 'Nexmo\\Insights\\Advanced' => __DIR__ . '/..' . '/nexmo/client/src/Insights/Advanced.php', - 'Nexmo\\Insights\\AdvancedCnam' => __DIR__ . '/..' . '/nexmo/client/src/Insights/AdvancedCnam.php', - 'Nexmo\\Insights\\Basic' => __DIR__ . '/..' . '/nexmo/client/src/Insights/Basic.php', - 'Nexmo\\Insights\\Client' => __DIR__ . '/..' . '/nexmo/client/src/Insights/Client.php', - 'Nexmo\\Insights\\CnamTrait' => __DIR__ . '/..' . '/nexmo/client/src/Insights/CnamTrait.php', - 'Nexmo\\Insights\\Standard' => __DIR__ . '/..' . '/nexmo/client/src/Insights/Standard.php', - 'Nexmo\\Insights\\StandardCnam' => __DIR__ . '/..' . '/nexmo/client/src/Insights/StandardCnam.php', - 'Nexmo\\InvalidResponseException' => __DIR__ . '/..' . '/nexmo/client/src/InvalidResponseException.php', - 'Nexmo\\Message\\AutoDetect' => __DIR__ . '/..' . '/nexmo/client/src/Message/AutoDetect.php', - 'Nexmo\\Message\\Binary' => __DIR__ . '/..' . '/nexmo/client/src/Message/Binary.php', - 'Nexmo\\Message\\Callback\\Receipt' => __DIR__ . '/..' . '/nexmo/client/src/Message/Callback/Receipt.php', - 'Nexmo\\Message\\Client' => __DIR__ . '/..' . '/nexmo/client/src/Message/Client.php', - 'Nexmo\\Message\\CollectionTrait' => __DIR__ . '/..' . '/nexmo/client/src/Message/CollectionTrait.php', - 'Nexmo\\Message\\EncodingDetector' => __DIR__ . '/..' . '/nexmo/client/src/Message/EncodingDetector.php', - 'Nexmo\\Message\\InboundMessage' => __DIR__ . '/..' . '/nexmo/client/src/Message/InboundMessage.php', - 'Nexmo\\Message\\Message' => __DIR__ . '/..' . '/nexmo/client/src/Message/Message.php', - 'Nexmo\\Message\\MessageInterface' => __DIR__ . '/..' . '/nexmo/client/src/Message/MessageInterface.php', - 'Nexmo\\Message\\Query' => __DIR__ . '/..' . '/nexmo/client/src/Message/Query.php', - 'Nexmo\\Message\\Response\\Collection' => __DIR__ . '/..' . '/nexmo/client/src/Message/Response/Collection.php', - 'Nexmo\\Message\\Response\\Message' => __DIR__ . '/..' . '/nexmo/client/src/Message/Response/Message.php', - 'Nexmo\\Message\\Shortcode' => __DIR__ . '/..' . '/nexmo/client/src/Message/Shortcode.php', - 'Nexmo\\Message\\Shortcode\\Alert' => __DIR__ . '/..' . '/nexmo/client/src/Message/Shortcode/Alert.php', - 'Nexmo\\Message\\Shortcode\\Marketing' => __DIR__ . '/..' . '/nexmo/client/src/Message/Shortcode/Marketing.php', - 'Nexmo\\Message\\Shortcode\\TwoFactor' => __DIR__ . '/..' . '/nexmo/client/src/Message/Shortcode/TwoFactor.php', - 'Nexmo\\Message\\Text' => __DIR__ . '/..' . '/nexmo/client/src/Message/Text.php', - 'Nexmo\\Message\\Unicode' => __DIR__ . '/..' . '/nexmo/client/src/Message/Unicode.php', - 'Nexmo\\Message\\Vcal' => __DIR__ . '/..' . '/nexmo/client/src/Message/Vcal.php', - 'Nexmo\\Message\\Vcard' => __DIR__ . '/..' . '/nexmo/client/src/Message/Vcard.php', - 'Nexmo\\Message\\Wap' => __DIR__ . '/..' . '/nexmo/client/src/Message/Wap.php', - 'Nexmo\\Network' => __DIR__ . '/..' . '/nexmo/client/src/Network.php', - 'Nexmo\\Network\\Number\\Callback' => __DIR__ . '/..' . '/nexmo/client/src/Network/Number/Callback.php', - 'Nexmo\\Network\\Number\\Request' => __DIR__ . '/..' . '/nexmo/client/src/Network/Number/Request.php', - 'Nexmo\\Network\\Number\\Response' => __DIR__ . '/..' . '/nexmo/client/src/Network/Number/Response.php', - 'Nexmo\\Numbers\\Client' => __DIR__ . '/..' . '/nexmo/client/src/Numbers/Client.php', - 'Nexmo\\Numbers\\Number' => __DIR__ . '/..' . '/nexmo/client/src/Numbers/Number.php', - 'Nexmo\\Redact\\Client' => __DIR__ . '/..' . '/nexmo/client/src/Redact/Client.php', - 'Nexmo\\Response' => __DIR__ . '/..' . '/nexmo/client/src/Response.php', - 'Nexmo\\Response\\Message' => __DIR__ . '/..' . '/nexmo/client/src/Response/Message.php', - 'Nexmo\\User\\Collection' => __DIR__ . '/..' . '/nexmo/client/src/User/Collection.php', - 'Nexmo\\User\\User' => __DIR__ . '/..' . '/nexmo/client/src/User/User.php', - 'Nexmo\\Verify\\Check' => __DIR__ . '/..' . '/nexmo/client/src/Verify/Check.php', - 'Nexmo\\Verify\\Client' => __DIR__ . '/..' . '/nexmo/client/src/Verify/Client.php', - 'Nexmo\\Verify\\Verification' => __DIR__ . '/..' . '/nexmo/client/src/Verify/Verification.php', - 'Nexmo\\Verify\\VerificationInterface' => __DIR__ . '/..' . '/nexmo/client/src/Verify/VerificationInterface.php', - 'Nexmo\\Voice\\Call\\Call' => __DIR__ . '/..' . '/nexmo/client/src/Voice/Call/Call.php', - 'Nexmo\\Voice\\Call\\Inbound' => __DIR__ . '/..' . '/nexmo/client/src/Voice/Call/Inbound.php', - 'Nexmo\\Voice\\Message\\Callback' => __DIR__ . '/..' . '/nexmo/client/src/Voice/Message/Callback.php', - 'Nexmo\\Voice\\Message\\Message' => __DIR__ . '/..' . '/nexmo/client/src/Voice/Message/Message.php', + 'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', 'Opis\\Closure\\Analyzer' => __DIR__ . '/..' . '/opis/closure/src/Analyzer.php', 'Opis\\Closure\\ClosureContext' => __DIR__ . '/..' . '/opis/closure/src/ClosureContext.php', 'Opis\\Closure\\ClosureScope' => __DIR__ . '/..' . '/opis/closure/src/ClosureScope.php', @@ -3269,7 +3817,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'PHP_Token_XOR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_YIELD' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_YIELD_FROM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'Parsedown' => __DIR__ . '/..' . '/erusev/parsedown/Parsedown.php', 'PharIo\\Manifest\\Application' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Application.php', 'PharIo\\Manifest\\ApplicationName' => __DIR__ . '/..' . '/phar-io/manifest/src/values/ApplicationName.php', 'PharIo\\Manifest\\Author' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Author.php', @@ -3336,11 +3883,18 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'PharIo\\Version\\VersionConstraintParser' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintParser.php', 'PharIo\\Version\\VersionConstraintValue' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintValue.php', 'PharIo\\Version\\VersionNumber' => __DIR__ . '/..' . '/phar-io/version/src/VersionNumber.php', + 'PhpOption\\LazyOption' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/LazyOption.php', + 'PhpOption\\None' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/None.php', + 'PhpOption\\Option' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/Option.php', + 'PhpOption\\Some' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/Some.php', 'PhpParser\\Builder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder.php', 'PhpParser\\BuilderFactory' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/BuilderFactory.php', 'PhpParser\\BuilderHelpers' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/BuilderHelpers.php', + 'PhpParser\\Builder\\ClassConst' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php', 'PhpParser\\Builder\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Class_.php', 'PhpParser\\Builder\\Declaration' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Declaration.php', + 'PhpParser\\Builder\\EnumCase' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php', + 'PhpParser\\Builder\\Enum_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Enum_.php', 'PhpParser\\Builder\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php', 'PhpParser\\Builder\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Function_.php', 'PhpParser\\Builder\\Interface_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Interface_.php', @@ -3367,9 +3921,19 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'PhpParser\\JsonDecoder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php', 'PhpParser\\Lexer' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer.php', 'PhpParser\\Lexer\\Emulative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php', + 'PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php', 'PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\EnumTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\ExplicitOctalEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\FlexibleDocStringEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php', 'PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\TokenEmulatorInterface' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php', + 'PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\ReadonlyTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php', 'PhpParser\\NameContext' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NameContext.php', 'PhpParser\\Node' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node.php', 'PhpParser\\NodeAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php', @@ -3383,7 +3947,12 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'PhpParser\\NodeVisitor\\FindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php', 'PhpParser\\NodeVisitor\\FirstFindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php', 'PhpParser\\NodeVisitor\\NameResolver' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php', + 'PhpParser\\NodeVisitor\\NodeConnectingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php', + 'PhpParser\\NodeVisitor\\ParentConnectingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php', 'PhpParser\\Node\\Arg' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Arg.php', + 'PhpParser\\Node\\Attribute' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Attribute.php', + 'PhpParser\\Node\\AttributeGroup' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php', + 'PhpParser\\Node\\ComplexType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/ComplexType.php', 'PhpParser\\Node\\Const_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Const_.php', 'PhpParser\\Node\\Expr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr.php', 'PhpParser\\Node\\Expr\\ArrayDimFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php', @@ -3436,6 +4005,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php', 'PhpParser\\Node\\Expr\\BitwiseNot' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php', 'PhpParser\\Node\\Expr\\BooleanNot' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php', + 'PhpParser\\Node\\Expr\\CallLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php', 'PhpParser\\Node\\Expr\\Cast' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php', 'PhpParser\\Node\\Expr\\Cast\\Array_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php', 'PhpParser\\Node\\Expr\\Cast\\Bool_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php', @@ -3459,8 +4029,11 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'PhpParser\\Node\\Expr\\Instanceof_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php', 'PhpParser\\Node\\Expr\\Isset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php', 'PhpParser\\Node\\Expr\\List_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php', + 'PhpParser\\Node\\Expr\\Match_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php', 'PhpParser\\Node\\Expr\\MethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php', 'PhpParser\\Node\\Expr\\New_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php', + 'PhpParser\\Node\\Expr\\NullsafeMethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php', + 'PhpParser\\Node\\Expr\\NullsafePropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php', 'PhpParser\\Node\\Expr\\PostDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php', 'PhpParser\\Node\\Expr\\PostInc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php', 'PhpParser\\Node\\Expr\\PreDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php', @@ -3471,6 +4044,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'PhpParser\\Node\\Expr\\StaticCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php', 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php', 'PhpParser\\Node\\Expr\\Ternary' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php', + 'PhpParser\\Node\\Expr\\Throw_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php', 'PhpParser\\Node\\Expr\\UnaryMinus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php', 'PhpParser\\Node\\Expr\\UnaryPlus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php', 'PhpParser\\Node\\Expr\\Variable' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php', @@ -3478,6 +4052,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'PhpParser\\Node\\Expr\\Yield_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php', 'PhpParser\\Node\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php', 'PhpParser\\Node\\Identifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php', + 'PhpParser\\Node\\IntersectionType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php', + 'PhpParser\\Node\\MatchArm' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/MatchArm.php', 'PhpParser\\Node\\Name' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name.php', 'PhpParser\\Node\\Name\\FullyQualified' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php', 'PhpParser\\Node\\Name\\Relative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php', @@ -3514,6 +4090,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'PhpParser\\Node\\Stmt\\Echo_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php', 'PhpParser\\Node\\Stmt\\ElseIf_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php', 'PhpParser\\Node\\Stmt\\Else_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php', + 'PhpParser\\Node\\Stmt\\EnumCase' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php', + 'PhpParser\\Node\\Stmt\\Enum_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php', 'PhpParser\\Node\\Stmt\\Expression' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php', 'PhpParser\\Node\\Stmt\\Finally_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php', 'PhpParser\\Node\\Stmt\\For_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php', @@ -3546,7 +4124,9 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'PhpParser\\Node\\Stmt\\UseUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php', 'PhpParser\\Node\\Stmt\\Use_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php', 'PhpParser\\Node\\Stmt\\While_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php', + 'PhpParser\\Node\\UnionType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php', 'PhpParser\\Node\\VarLikeIdentifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php', + 'PhpParser\\Node\\VariadicPlaceholder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php', 'PhpParser\\Parser' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser.php', 'PhpParser\\ParserAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php', 'PhpParser\\ParserFactory' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ParserFactory.php', @@ -3556,6 +4136,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'PhpParser\\Parser\\Tokens' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Tokens.php', 'PhpParser\\PrettyPrinterAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php', 'PhpParser\\PrettyPrinter\\Standard' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php', + 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'Prophecy\\Argument' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument.php', 'Prophecy\\Argument\\ArgumentsWildcard' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/ArgumentsWildcard.php', 'Prophecy\\Argument\\Token\\AnyValueToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValueToken.php', @@ -3652,6 +4233,13 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php', 'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php', 'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php', + 'Psr\\EventDispatcher\\EventDispatcherInterface' => __DIR__ . '/..' . '/psr/event-dispatcher/src/EventDispatcherInterface.php', + 'Psr\\EventDispatcher\\ListenerProviderInterface' => __DIR__ . '/..' . '/psr/event-dispatcher/src/ListenerProviderInterface.php', + 'Psr\\EventDispatcher\\StoppableEventInterface' => __DIR__ . '/..' . '/psr/event-dispatcher/src/StoppableEventInterface.php', + 'Psr\\Http\\Client\\ClientExceptionInterface' => __DIR__ . '/..' . '/psr/http-client/src/ClientExceptionInterface.php', + 'Psr\\Http\\Client\\ClientInterface' => __DIR__ . '/..' . '/psr/http-client/src/ClientInterface.php', + 'Psr\\Http\\Client\\NetworkExceptionInterface' => __DIR__ . '/..' . '/psr/http-client/src/NetworkExceptionInterface.php', + 'Psr\\Http\\Client\\RequestExceptionInterface' => __DIR__ . '/..' . '/psr/http-client/src/RequestExceptionInterface.php', 'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php', 'Psr\\Http\\Message\\RequestFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/RequestFactoryInterface.php', 'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php', @@ -3673,7 +4261,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php', 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php', 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php', - 'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/DummyTest.php', 'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', 'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php', 'Psr\\SimpleCache\\CacheException' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheException.php', @@ -3685,14 +4273,16 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Psy\\CodeCleaner\\CallTimePassByReferencePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php', 'Psy\\CodeCleaner\\CalledClassPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/CalledClassPass.php', 'Psy\\CodeCleaner\\CodeCleanerPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/CodeCleanerPass.php', + 'Psy\\CodeCleaner\\EmptyArrayDimFetchPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php', 'Psy\\CodeCleaner\\ExitPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ExitPass.php', 'Psy\\CodeCleaner\\FinalClassPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/FinalClassPass.php', 'Psy\\CodeCleaner\\FunctionContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/FunctionContextPass.php', 'Psy\\CodeCleaner\\FunctionReturnInWriteContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php', 'Psy\\CodeCleaner\\ImplicitReturnPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php', 'Psy\\CodeCleaner\\InstanceOfPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/InstanceOfPass.php', + 'Psy\\CodeCleaner\\IssetPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/IssetPass.php', + 'Psy\\CodeCleaner\\LabelContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LabelContextPass.php', 'Psy\\CodeCleaner\\LeavePsyshAlonePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php', - 'Psy\\CodeCleaner\\LegacyEmptyPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php', 'Psy\\CodeCleaner\\ListPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ListPass.php', 'Psy\\CodeCleaner\\LoopContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LoopContextPass.php', 'Psy\\CodeCleaner\\MagicConstantsPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/MagicConstantsPass.php', @@ -3701,10 +4291,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Psy\\CodeCleaner\\NoReturnValue' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/NoReturnValue.php', 'Psy\\CodeCleaner\\PassableByReferencePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/PassableByReferencePass.php', 'Psy\\CodeCleaner\\RequirePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/RequirePass.php', + 'Psy\\CodeCleaner\\ReturnTypePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ReturnTypePass.php', 'Psy\\CodeCleaner\\StrictTypesPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/StrictTypesPass.php', 'Psy\\CodeCleaner\\UseStatementPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/UseStatementPass.php', 'Psy\\CodeCleaner\\ValidClassNamePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ValidClassNamePass.php', - 'Psy\\CodeCleaner\\ValidConstantPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ValidConstantPass.php', 'Psy\\CodeCleaner\\ValidConstructorPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ValidConstructorPass.php', 'Psy\\CodeCleaner\\ValidFunctionNamePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php', 'Psy\\Command\\BufferCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/BufferCommand.php', @@ -3723,10 +4313,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Psy\\Command\\ListCommand\\Enumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/Enumerator.php', 'Psy\\Command\\ListCommand\\FunctionEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php', 'Psy\\Command\\ListCommand\\GlobalVariableEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php', - 'Psy\\Command\\ListCommand\\InterfaceEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php', 'Psy\\Command\\ListCommand\\MethodEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/MethodEnumerator.php', 'Psy\\Command\\ListCommand\\PropertyEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php', - 'Psy\\Command\\ListCommand\\TraitEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/TraitEnumerator.php', 'Psy\\Command\\ListCommand\\VariableEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/VariableEnumerator.php', 'Psy\\Command\\ParseCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/ParseCommand.php', 'Psy\\Command\\PsyVersionCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/PsyVersionCommand.php', @@ -3744,6 +4332,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Psy\\ConsoleColorFactory' => __DIR__ . '/..' . '/psy/psysh/src/ConsoleColorFactory.php', 'Psy\\Context' => __DIR__ . '/..' . '/psy/psysh/src/Context.php', 'Psy\\ContextAware' => __DIR__ . '/..' . '/psy/psysh/src/ContextAware.php', + 'Psy\\EnvInterface' => __DIR__ . '/..' . '/psy/psysh/src/EnvInterface.php', 'Psy\\Exception\\BreakException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/BreakException.php', 'Psy\\Exception\\DeprecatedException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/DeprecatedException.php', 'Psy\\Exception\\ErrorException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/ErrorException.php', @@ -3753,8 +4342,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Psy\\Exception\\RuntimeException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/RuntimeException.php', 'Psy\\Exception\\ThrowUpException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/ThrowUpException.php', 'Psy\\Exception\\TypeErrorException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/TypeErrorException.php', + 'Psy\\Exception\\UnexpectedTargetException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/UnexpectedTargetException.php', 'Psy\\ExecutionClosure' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionClosure.php', - 'Psy\\ExecutionLoop' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop.php', 'Psy\\ExecutionLoopClosure' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoopClosure.php', 'Psy\\ExecutionLoop\\AbstractListener' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop/AbstractListener.php', 'Psy\\ExecutionLoop\\Listener' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop/Listener.php', @@ -3763,7 +4352,9 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Psy\\Formatter\\CodeFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/CodeFormatter.php', 'Psy\\Formatter\\DocblockFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/DocblockFormatter.php', 'Psy\\Formatter\\Formatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/Formatter.php', + 'Psy\\Formatter\\ReflectorFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/ReflectorFormatter.php', 'Psy\\Formatter\\SignatureFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/SignatureFormatter.php', + 'Psy\\Formatter\\TraceFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/TraceFormatter.php', 'Psy\\Input\\CodeArgument' => __DIR__ . '/..' . '/psy/psysh/src/Input/CodeArgument.php', 'Psy\\Input\\FilterOptions' => __DIR__ . '/..' . '/psy/psysh/src/Input/FilterOptions.php', 'Psy\\Input\\ShellInput' => __DIR__ . '/..' . '/psy/psysh/src/Input/ShellInput.php', @@ -3783,9 +4374,11 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Psy\\Reflection\\ReflectionConstant_' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionConstant_.php', 'Psy\\Reflection\\ReflectionLanguageConstruct' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php', 'Psy\\Reflection\\ReflectionLanguageConstructParameter' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php', + 'Psy\\Reflection\\ReflectionNamespace' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionNamespace.php', 'Psy\\Shell' => __DIR__ . '/..' . '/psy/psysh/src/Shell.php', 'Psy\\Sudo' => __DIR__ . '/..' . '/psy/psysh/src/Sudo.php', 'Psy\\Sudo\\SudoVisitor' => __DIR__ . '/..' . '/psy/psysh/src/Sudo/SudoVisitor.php', + 'Psy\\SuperglobalsEnv' => __DIR__ . '/..' . '/psy/psysh/src/SuperglobalsEnv.php', 'Psy\\TabCompletion\\AutoCompleter' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/AutoCompleter.php', 'Psy\\TabCompletion\\Matcher\\AbstractContextAwareMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php', 'Psy\\TabCompletion\\Matcher\\AbstractDefaultParametersMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php', @@ -3817,9 +4410,40 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Psy\\VersionUpdater\\GitHubChecker' => __DIR__ . '/..' . '/psy/psysh/src/VersionUpdater/GitHubChecker.php', 'Psy\\VersionUpdater\\IntervalChecker' => __DIR__ . '/..' . '/psy/psysh/src/VersionUpdater/IntervalChecker.php', 'Psy\\VersionUpdater\\NoopChecker' => __DIR__ . '/..' . '/psy/psysh/src/VersionUpdater/NoopChecker.php', + 'Ramsey\\Collection\\AbstractArray' => __DIR__ . '/..' . '/ramsey/collection/src/AbstractArray.php', + 'Ramsey\\Collection\\AbstractCollection' => __DIR__ . '/..' . '/ramsey/collection/src/AbstractCollection.php', + 'Ramsey\\Collection\\AbstractSet' => __DIR__ . '/..' . '/ramsey/collection/src/AbstractSet.php', + 'Ramsey\\Collection\\ArrayInterface' => __DIR__ . '/..' . '/ramsey/collection/src/ArrayInterface.php', + 'Ramsey\\Collection\\Collection' => __DIR__ . '/..' . '/ramsey/collection/src/Collection.php', + 'Ramsey\\Collection\\CollectionInterface' => __DIR__ . '/..' . '/ramsey/collection/src/CollectionInterface.php', + 'Ramsey\\Collection\\DoubleEndedQueue' => __DIR__ . '/..' . '/ramsey/collection/src/DoubleEndedQueue.php', + 'Ramsey\\Collection\\DoubleEndedQueueInterface' => __DIR__ . '/..' . '/ramsey/collection/src/DoubleEndedQueueInterface.php', + 'Ramsey\\Collection\\Exception\\CollectionMismatchException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/CollectionMismatchException.php', + 'Ramsey\\Collection\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/InvalidArgumentException.php', + 'Ramsey\\Collection\\Exception\\InvalidSortOrderException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/InvalidSortOrderException.php', + 'Ramsey\\Collection\\Exception\\NoSuchElementException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/NoSuchElementException.php', + 'Ramsey\\Collection\\Exception\\OutOfBoundsException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/OutOfBoundsException.php', + 'Ramsey\\Collection\\Exception\\UnsupportedOperationException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/UnsupportedOperationException.php', + 'Ramsey\\Collection\\Exception\\ValueExtractionException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/ValueExtractionException.php', + 'Ramsey\\Collection\\GenericArray' => __DIR__ . '/..' . '/ramsey/collection/src/GenericArray.php', + 'Ramsey\\Collection\\Map\\AbstractMap' => __DIR__ . '/..' . '/ramsey/collection/src/Map/AbstractMap.php', + 'Ramsey\\Collection\\Map\\AbstractTypedMap' => __DIR__ . '/..' . '/ramsey/collection/src/Map/AbstractTypedMap.php', + 'Ramsey\\Collection\\Map\\AssociativeArrayMap' => __DIR__ . '/..' . '/ramsey/collection/src/Map/AssociativeArrayMap.php', + 'Ramsey\\Collection\\Map\\MapInterface' => __DIR__ . '/..' . '/ramsey/collection/src/Map/MapInterface.php', + 'Ramsey\\Collection\\Map\\NamedParameterMap' => __DIR__ . '/..' . '/ramsey/collection/src/Map/NamedParameterMap.php', + 'Ramsey\\Collection\\Map\\TypedMap' => __DIR__ . '/..' . '/ramsey/collection/src/Map/TypedMap.php', + 'Ramsey\\Collection\\Map\\TypedMapInterface' => __DIR__ . '/..' . '/ramsey/collection/src/Map/TypedMapInterface.php', + 'Ramsey\\Collection\\Queue' => __DIR__ . '/..' . '/ramsey/collection/src/Queue.php', + 'Ramsey\\Collection\\QueueInterface' => __DIR__ . '/..' . '/ramsey/collection/src/QueueInterface.php', + 'Ramsey\\Collection\\Set' => __DIR__ . '/..' . '/ramsey/collection/src/Set.php', + 'Ramsey\\Collection\\Tool\\TypeTrait' => __DIR__ . '/..' . '/ramsey/collection/src/Tool/TypeTrait.php', + 'Ramsey\\Collection\\Tool\\ValueExtractorTrait' => __DIR__ . '/..' . '/ramsey/collection/src/Tool/ValueExtractorTrait.php', + 'Ramsey\\Collection\\Tool\\ValueToStringTrait' => __DIR__ . '/..' . '/ramsey/collection/src/Tool/ValueToStringTrait.php', 'Ramsey\\Uuid\\BinaryUtils' => __DIR__ . '/..' . '/ramsey/uuid/src/BinaryUtils.php', + 'Ramsey\\Uuid\\Builder\\BuilderCollection' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/BuilderCollection.php', 'Ramsey\\Uuid\\Builder\\DefaultUuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/DefaultUuidBuilder.php', 'Ramsey\\Uuid\\Builder\\DegradedUuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/DegradedUuidBuilder.php', + 'Ramsey\\Uuid\\Builder\\FallbackBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/FallbackBuilder.php', 'Ramsey\\Uuid\\Builder\\UuidBuilderInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/UuidBuilderInterface.php', 'Ramsey\\Uuid\\Codec\\CodecInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Codec/CodecInterface.php', 'Ramsey\\Uuid\\Codec\\GuidStringCodec' => __DIR__ . '/..' . '/ramsey/uuid/src/Codec/GuidStringCodec.php', @@ -3830,39 +4454,96 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Ramsey\\Uuid\\Converter\\NumberConverterInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/NumberConverterInterface.php', 'Ramsey\\Uuid\\Converter\\Number\\BigNumberConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Number/BigNumberConverter.php', 'Ramsey\\Uuid\\Converter\\Number\\DegradedNumberConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php', + 'Ramsey\\Uuid\\Converter\\Number\\GenericNumberConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Number/GenericNumberConverter.php', 'Ramsey\\Uuid\\Converter\\TimeConverterInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/TimeConverterInterface.php', 'Ramsey\\Uuid\\Converter\\Time\\BigNumberTimeConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php', 'Ramsey\\Uuid\\Converter\\Time\\DegradedTimeConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php', + 'Ramsey\\Uuid\\Converter\\Time\\GenericTimeConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Time/GenericTimeConverter.php', 'Ramsey\\Uuid\\Converter\\Time\\PhpTimeConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php', 'Ramsey\\Uuid\\DegradedUuid' => __DIR__ . '/..' . '/ramsey/uuid/src/DegradedUuid.php', + 'Ramsey\\Uuid\\DeprecatedUuidInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/DeprecatedUuidInterface.php', + 'Ramsey\\Uuid\\DeprecatedUuidMethodsTrait' => __DIR__ . '/..' . '/ramsey/uuid/src/DeprecatedUuidMethodsTrait.php', + 'Ramsey\\Uuid\\Exception\\BuilderNotFoundException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/BuilderNotFoundException.php', + 'Ramsey\\Uuid\\Exception\\DateTimeException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/DateTimeException.php', + 'Ramsey\\Uuid\\Exception\\DceSecurityException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/DceSecurityException.php', + 'Ramsey\\Uuid\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/InvalidArgumentException.php', + 'Ramsey\\Uuid\\Exception\\InvalidBytesException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/InvalidBytesException.php', 'Ramsey\\Uuid\\Exception\\InvalidUuidStringException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/InvalidUuidStringException.php', - 'Ramsey\\Uuid\\Exception\\UnsatisfiedDependencyException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php', + 'Ramsey\\Uuid\\Exception\\NameException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/NameException.php', + 'Ramsey\\Uuid\\Exception\\NodeException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/NodeException.php', + 'Ramsey\\Uuid\\Exception\\RandomSourceException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/RandomSourceException.php', + 'Ramsey\\Uuid\\Exception\\TimeSourceException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/TimeSourceException.php', + 'Ramsey\\Uuid\\Exception\\UnableToBuildUuidException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/UnableToBuildUuidException.php', 'Ramsey\\Uuid\\Exception\\UnsupportedOperationException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/UnsupportedOperationException.php', + 'Ramsey\\Uuid\\Exception\\UuidExceptionInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/UuidExceptionInterface.php', 'Ramsey\\Uuid\\FeatureSet' => __DIR__ . '/..' . '/ramsey/uuid/src/FeatureSet.php', + 'Ramsey\\Uuid\\Fields\\FieldsInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Fields/FieldsInterface.php', + 'Ramsey\\Uuid\\Fields\\SerializableFieldsTrait' => __DIR__ . '/..' . '/ramsey/uuid/src/Fields/SerializableFieldsTrait.php', 'Ramsey\\Uuid\\Generator\\CombGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/CombGenerator.php', + 'Ramsey\\Uuid\\Generator\\DceSecurityGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/DceSecurityGenerator.php', + 'Ramsey\\Uuid\\Generator\\DceSecurityGeneratorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/DceSecurityGeneratorInterface.php', + 'Ramsey\\Uuid\\Generator\\DefaultNameGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/DefaultNameGenerator.php', 'Ramsey\\Uuid\\Generator\\DefaultTimeGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/DefaultTimeGenerator.php', - 'Ramsey\\Uuid\\Generator\\MtRandGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/MtRandGenerator.php', - 'Ramsey\\Uuid\\Generator\\OpenSslGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/OpenSslGenerator.php', + 'Ramsey\\Uuid\\Generator\\NameGeneratorFactory' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/NameGeneratorFactory.php', + 'Ramsey\\Uuid\\Generator\\NameGeneratorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/NameGeneratorInterface.php', + 'Ramsey\\Uuid\\Generator\\PeclUuidNameGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/PeclUuidNameGenerator.php', 'Ramsey\\Uuid\\Generator\\PeclUuidRandomGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php', 'Ramsey\\Uuid\\Generator\\PeclUuidTimeGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php', 'Ramsey\\Uuid\\Generator\\RandomBytesGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/RandomBytesGenerator.php', 'Ramsey\\Uuid\\Generator\\RandomGeneratorFactory' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/RandomGeneratorFactory.php', 'Ramsey\\Uuid\\Generator\\RandomGeneratorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/RandomGeneratorInterface.php', 'Ramsey\\Uuid\\Generator\\RandomLibAdapter' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/RandomLibAdapter.php', - 'Ramsey\\Uuid\\Generator\\SodiumRandomGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/SodiumRandomGenerator.php', 'Ramsey\\Uuid\\Generator\\TimeGeneratorFactory' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/TimeGeneratorFactory.php', 'Ramsey\\Uuid\\Generator\\TimeGeneratorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/TimeGeneratorInterface.php', + 'Ramsey\\Uuid\\Guid\\Fields' => __DIR__ . '/..' . '/ramsey/uuid/src/Guid/Fields.php', + 'Ramsey\\Uuid\\Guid\\Guid' => __DIR__ . '/..' . '/ramsey/uuid/src/Guid/Guid.php', + 'Ramsey\\Uuid\\Guid\\GuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Guid/GuidBuilder.php', + 'Ramsey\\Uuid\\Lazy\\LazyUuidFromString' => __DIR__ . '/..' . '/ramsey/uuid/src/Lazy/LazyUuidFromString.php', + 'Ramsey\\Uuid\\Math\\BrickMathCalculator' => __DIR__ . '/..' . '/ramsey/uuid/src/Math/BrickMathCalculator.php', + 'Ramsey\\Uuid\\Math\\CalculatorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Math/CalculatorInterface.php', + 'Ramsey\\Uuid\\Math\\RoundingMode' => __DIR__ . '/..' . '/ramsey/uuid/src/Math/RoundingMode.php', + 'Ramsey\\Uuid\\Nonstandard\\Fields' => __DIR__ . '/..' . '/ramsey/uuid/src/Nonstandard/Fields.php', + 'Ramsey\\Uuid\\Nonstandard\\Uuid' => __DIR__ . '/..' . '/ramsey/uuid/src/Nonstandard/Uuid.php', + 'Ramsey\\Uuid\\Nonstandard\\UuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Nonstandard/UuidBuilder.php', + 'Ramsey\\Uuid\\Nonstandard\\UuidV6' => __DIR__ . '/..' . '/ramsey/uuid/src/Nonstandard/UuidV6.php', + 'Ramsey\\Uuid\\Provider\\DceSecurityProviderInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php', + 'Ramsey\\Uuid\\Provider\\Dce\\SystemDceSecurityProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php', 'Ramsey\\Uuid\\Provider\\NodeProviderInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/NodeProviderInterface.php', 'Ramsey\\Uuid\\Provider\\Node\\FallbackNodeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\Node\\NodeProviderCollection' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php', 'Ramsey\\Uuid\\Provider\\Node\\RandomNodeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\Node\\StaticNodeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php', 'Ramsey\\Uuid\\Provider\\Node\\SystemNodeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php', 'Ramsey\\Uuid\\Provider\\TimeProviderInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/TimeProviderInterface.php', 'Ramsey\\Uuid\\Provider\\Time\\FixedTimeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php', 'Ramsey\\Uuid\\Provider\\Time\\SystemTimeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php', + 'Ramsey\\Uuid\\Rfc4122\\Fields' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/Fields.php', + 'Ramsey\\Uuid\\Rfc4122\\FieldsInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/FieldsInterface.php', + 'Ramsey\\Uuid\\Rfc4122\\NilTrait' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/NilTrait.php', + 'Ramsey\\Uuid\\Rfc4122\\NilUuid' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/NilUuid.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidBuilder.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidInterface.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV1' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidV1.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV2' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidV2.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV3' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidV3.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV4' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidV4.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV5' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidV5.php', + 'Ramsey\\Uuid\\Rfc4122\\Validator' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/Validator.php', + 'Ramsey\\Uuid\\Rfc4122\\VariantTrait' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/VariantTrait.php', + 'Ramsey\\Uuid\\Rfc4122\\VersionTrait' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/VersionTrait.php', + 'Ramsey\\Uuid\\Type\\Decimal' => __DIR__ . '/..' . '/ramsey/uuid/src/Type/Decimal.php', + 'Ramsey\\Uuid\\Type\\Hexadecimal' => __DIR__ . '/..' . '/ramsey/uuid/src/Type/Hexadecimal.php', + 'Ramsey\\Uuid\\Type\\Integer' => __DIR__ . '/..' . '/ramsey/uuid/src/Type/Integer.php', + 'Ramsey\\Uuid\\Type\\NumberInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Type/NumberInterface.php', + 'Ramsey\\Uuid\\Type\\Time' => __DIR__ . '/..' . '/ramsey/uuid/src/Type/Time.php', + 'Ramsey\\Uuid\\Type\\TypeInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Type/TypeInterface.php', 'Ramsey\\Uuid\\Uuid' => __DIR__ . '/..' . '/ramsey/uuid/src/Uuid.php', 'Ramsey\\Uuid\\UuidFactory' => __DIR__ . '/..' . '/ramsey/uuid/src/UuidFactory.php', 'Ramsey\\Uuid\\UuidFactoryInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/UuidFactoryInterface.php', 'Ramsey\\Uuid\\UuidInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/UuidInterface.php', + 'Ramsey\\Uuid\\Validator\\GenericValidator' => __DIR__ . '/..' . '/ramsey/uuid/src/Validator/GenericValidator.php', + 'Ramsey\\Uuid\\Validator\\ValidatorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Validator/ValidatorInterface.php', + 'ReturnTypeWillChange' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CodeCoverage.php', 'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Driver.php', @@ -3956,15 +4637,86 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => __DIR__ . '/..' . '/sebastian/resource-operations/src/ResourceOperations.php', 'SebastianBergmann\\Version' => __DIR__ . '/..' . '/sebastian/version/src/Version.php', 'SettingsSeeder' => __DIR__ . '/../..' . '/database/seeds/SettingsSeeder.php', + 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', + 'Symfony\\Component\\Cache\\Adapter\\AbstractAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/AbstractAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\AbstractTagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/AbstractTagAwareAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\AdapterInterface' => __DIR__ . '/..' . '/symfony/cache/Adapter/AdapterInterface.php', + 'Symfony\\Component\\Cache\\Adapter\\ApcuAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/ApcuAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\ArrayAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/ArrayAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\ChainAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/ChainAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\CouchbaseBucketAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/CouchbaseBucketAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\CouchbaseCollectionAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/CouchbaseCollectionAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\DoctrineAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/DoctrineAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\DoctrineDbalAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/DoctrineDbalAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\FilesystemAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/FilesystemAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\FilesystemTagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/FilesystemTagAwareAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\MemcachedAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/MemcachedAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\NullAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/NullAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\ParameterNormalizer' => __DIR__ . '/..' . '/symfony/cache/Adapter/ParameterNormalizer.php', + 'Symfony\\Component\\Cache\\Adapter\\PdoAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/PdoAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\PhpArrayAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/PhpArrayAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\PhpFilesAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/PhpFilesAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\ProxyAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/ProxyAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\Psr16Adapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/Psr16Adapter.php', + 'Symfony\\Component\\Cache\\Adapter\\RedisAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/RedisAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\RedisTagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/RedisTagAwareAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/TagAwareAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapterInterface' => __DIR__ . '/..' . '/symfony/cache/Adapter/TagAwareAdapterInterface.php', + 'Symfony\\Component\\Cache\\Adapter\\TraceableAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/TraceableAdapter.php', + 'Symfony\\Component\\Cache\\Adapter\\TraceableTagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/TraceableTagAwareAdapter.php', + 'Symfony\\Component\\Cache\\CacheItem' => __DIR__ . '/..' . '/symfony/cache/CacheItem.php', + 'Symfony\\Component\\Cache\\DataCollector\\CacheDataCollector' => __DIR__ . '/..' . '/symfony/cache/DataCollector/CacheDataCollector.php', + 'Symfony\\Component\\Cache\\DependencyInjection\\CacheCollectorPass' => __DIR__ . '/..' . '/symfony/cache/DependencyInjection/CacheCollectorPass.php', + 'Symfony\\Component\\Cache\\DependencyInjection\\CachePoolClearerPass' => __DIR__ . '/..' . '/symfony/cache/DependencyInjection/CachePoolClearerPass.php', + 'Symfony\\Component\\Cache\\DependencyInjection\\CachePoolPass' => __DIR__ . '/..' . '/symfony/cache/DependencyInjection/CachePoolPass.php', + 'Symfony\\Component\\Cache\\DependencyInjection\\CachePoolPrunerPass' => __DIR__ . '/..' . '/symfony/cache/DependencyInjection/CachePoolPrunerPass.php', + 'Symfony\\Component\\Cache\\DoctrineProvider' => __DIR__ . '/..' . '/symfony/cache/DoctrineProvider.php', + 'Symfony\\Component\\Cache\\Exception\\CacheException' => __DIR__ . '/..' . '/symfony/cache/Exception/CacheException.php', + 'Symfony\\Component\\Cache\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/cache/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\Cache\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/cache/Exception/LogicException.php', + 'Symfony\\Component\\Cache\\LockRegistry' => __DIR__ . '/..' . '/symfony/cache/LockRegistry.php', + 'Symfony\\Component\\Cache\\Marshaller\\DefaultMarshaller' => __DIR__ . '/..' . '/symfony/cache/Marshaller/DefaultMarshaller.php', + 'Symfony\\Component\\Cache\\Marshaller\\DeflateMarshaller' => __DIR__ . '/..' . '/symfony/cache/Marshaller/DeflateMarshaller.php', + 'Symfony\\Component\\Cache\\Marshaller\\MarshallerInterface' => __DIR__ . '/..' . '/symfony/cache/Marshaller/MarshallerInterface.php', + 'Symfony\\Component\\Cache\\Marshaller\\SodiumMarshaller' => __DIR__ . '/..' . '/symfony/cache/Marshaller/SodiumMarshaller.php', + 'Symfony\\Component\\Cache\\Marshaller\\TagAwareMarshaller' => __DIR__ . '/..' . '/symfony/cache/Marshaller/TagAwareMarshaller.php', + 'Symfony\\Component\\Cache\\Messenger\\EarlyExpirationDispatcher' => __DIR__ . '/..' . '/symfony/cache/Messenger/EarlyExpirationDispatcher.php', + 'Symfony\\Component\\Cache\\Messenger\\EarlyExpirationHandler' => __DIR__ . '/..' . '/symfony/cache/Messenger/EarlyExpirationHandler.php', + 'Symfony\\Component\\Cache\\Messenger\\EarlyExpirationMessage' => __DIR__ . '/..' . '/symfony/cache/Messenger/EarlyExpirationMessage.php', + 'Symfony\\Component\\Cache\\PruneableInterface' => __DIR__ . '/..' . '/symfony/cache/PruneableInterface.php', + 'Symfony\\Component\\Cache\\Psr16Cache' => __DIR__ . '/..' . '/symfony/cache/Psr16Cache.php', + 'Symfony\\Component\\Cache\\ResettableInterface' => __DIR__ . '/..' . '/symfony/cache/ResettableInterface.php', + 'Symfony\\Component\\Cache\\Traits\\AbstractAdapterTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/AbstractAdapterTrait.php', + 'Symfony\\Component\\Cache\\Traits\\ContractsTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/ContractsTrait.php', + 'Symfony\\Component\\Cache\\Traits\\FilesystemCommonTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/FilesystemCommonTrait.php', + 'Symfony\\Component\\Cache\\Traits\\FilesystemTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/FilesystemTrait.php', + 'Symfony\\Component\\Cache\\Traits\\ProxyTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/ProxyTrait.php', + 'Symfony\\Component\\Cache\\Traits\\RedisClusterNodeProxy' => __DIR__ . '/..' . '/symfony/cache/Traits/RedisClusterNodeProxy.php', + 'Symfony\\Component\\Cache\\Traits\\RedisClusterProxy' => __DIR__ . '/..' . '/symfony/cache/Traits/RedisClusterProxy.php', + 'Symfony\\Component\\Cache\\Traits\\RedisProxy' => __DIR__ . '/..' . '/symfony/cache/Traits/RedisProxy.php', + 'Symfony\\Component\\Cache\\Traits\\RedisTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/RedisTrait.php', 'Symfony\\Component\\Console\\Application' => __DIR__ . '/..' . '/symfony/console/Application.php', + 'Symfony\\Component\\Console\\Attribute\\AsCommand' => __DIR__ . '/..' . '/symfony/console/Attribute/AsCommand.php', + 'Symfony\\Component\\Console\\CI\\GithubActionReporter' => __DIR__ . '/..' . '/symfony/console/CI/GithubActionReporter.php', + 'Symfony\\Component\\Console\\Color' => __DIR__ . '/..' . '/symfony/console/Color.php', 'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => __DIR__ . '/..' . '/symfony/console/CommandLoader/CommandLoaderInterface.php', 'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/ContainerCommandLoader.php', 'Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/FactoryCommandLoader.php', 'Symfony\\Component\\Console\\Command\\Command' => __DIR__ . '/..' . '/symfony/console/Command/Command.php', + 'Symfony\\Component\\Console\\Command\\CompleteCommand' => __DIR__ . '/..' . '/symfony/console/Command/CompleteCommand.php', + 'Symfony\\Component\\Console\\Command\\DumpCompletionCommand' => __DIR__ . '/..' . '/symfony/console/Command/DumpCompletionCommand.php', 'Symfony\\Component\\Console\\Command\\HelpCommand' => __DIR__ . '/..' . '/symfony/console/Command/HelpCommand.php', + 'Symfony\\Component\\Console\\Command\\LazyCommand' => __DIR__ . '/..' . '/symfony/console/Command/LazyCommand.php', 'Symfony\\Component\\Console\\Command\\ListCommand' => __DIR__ . '/..' . '/symfony/console/Command/ListCommand.php', 'Symfony\\Component\\Console\\Command\\LockableTrait' => __DIR__ . '/..' . '/symfony/console/Command/LockableTrait.php', + 'Symfony\\Component\\Console\\Command\\SignalableCommandInterface' => __DIR__ . '/..' . '/symfony/console/Command/SignalableCommandInterface.php', + 'Symfony\\Component\\Console\\Completion\\CompletionInput' => __DIR__ . '/..' . '/symfony/console/Completion/CompletionInput.php', + 'Symfony\\Component\\Console\\Completion\\CompletionSuggestions' => __DIR__ . '/..' . '/symfony/console/Completion/CompletionSuggestions.php', + 'Symfony\\Component\\Console\\Completion\\Output\\BashCompletionOutput' => __DIR__ . '/..' . '/symfony/console/Completion/Output/BashCompletionOutput.php', + 'Symfony\\Component\\Console\\Completion\\Output\\CompletionOutputInterface' => __DIR__ . '/..' . '/symfony/console/Completion/Output/CompletionOutputInterface.php', + 'Symfony\\Component\\Console\\Completion\\Suggestion' => __DIR__ . '/..' . '/symfony/console/Completion/Suggestion.php', 'Symfony\\Component\\Console\\ConsoleEvents' => __DIR__ . '/..' . '/symfony/console/ConsoleEvents.php', + 'Symfony\\Component\\Console\\Cursor' => __DIR__ . '/..' . '/symfony/console/Cursor.php', 'Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => __DIR__ . '/..' . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', 'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => __DIR__ . '/..' . '/symfony/console/Descriptor/ApplicationDescription.php', 'Symfony\\Component\\Console\\Descriptor\\Descriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/Descriptor.php', @@ -3977,14 +4729,18 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleCommandEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleErrorEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleErrorEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleEvent.php', + 'Symfony\\Component\\Console\\Event\\ConsoleSignalEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleSignalEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleTerminateEvent.php', 'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/CommandNotFoundException.php', 'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/console/Exception/ExceptionInterface.php', 'Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/console/Exception/InvalidArgumentException.php', 'Symfony\\Component\\Console\\Exception\\InvalidOptionException' => __DIR__ . '/..' . '/symfony/console/Exception/InvalidOptionException.php', 'Symfony\\Component\\Console\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/console/Exception/LogicException.php', + 'Symfony\\Component\\Console\\Exception\\MissingInputException' => __DIR__ . '/..' . '/symfony/console/Exception/MissingInputException.php', 'Symfony\\Component\\Console\\Exception\\NamespaceNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/NamespaceNotFoundException.php', 'Symfony\\Component\\Console\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/console/Exception/RuntimeException.php', + 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/NullOutputFormatter.php', + 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/NullOutputFormatterStyle.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatter.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterInterface.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyle.php', @@ -4006,6 +4762,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/SymfonyQuestionHelper.php', 'Symfony\\Component\\Console\\Helper\\Table' => __DIR__ . '/..' . '/symfony/console/Helper/Table.php', 'Symfony\\Component\\Console\\Helper\\TableCell' => __DIR__ . '/..' . '/symfony/console/Helper/TableCell.php', + 'Symfony\\Component\\Console\\Helper\\TableCellStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableCellStyle.php', 'Symfony\\Component\\Console\\Helper\\TableRows' => __DIR__ . '/..' . '/symfony/console/Helper/TableRows.php', 'Symfony\\Component\\Console\\Helper\\TableSeparator' => __DIR__ . '/..' . '/symfony/console/Helper/TableSeparator.php', 'Symfony\\Component\\Console\\Helper\\TableStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableStyle.php', @@ -4028,15 +4785,20 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\Console\\Output\\Output' => __DIR__ . '/..' . '/symfony/console/Output/Output.php', 'Symfony\\Component\\Console\\Output\\OutputInterface' => __DIR__ . '/..' . '/symfony/console/Output/OutputInterface.php', 'Symfony\\Component\\Console\\Output\\StreamOutput' => __DIR__ . '/..' . '/symfony/console/Output/StreamOutput.php', + 'Symfony\\Component\\Console\\Output\\TrimmedBufferOutput' => __DIR__ . '/..' . '/symfony/console/Output/TrimmedBufferOutput.php', 'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ChoiceQuestion.php', 'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ConfirmationQuestion.php', 'Symfony\\Component\\Console\\Question\\Question' => __DIR__ . '/..' . '/symfony/console/Question/Question.php', + 'Symfony\\Component\\Console\\SignalRegistry\\SignalRegistry' => __DIR__ . '/..' . '/symfony/console/SignalRegistry/SignalRegistry.php', + 'Symfony\\Component\\Console\\SingleCommandApplication' => __DIR__ . '/..' . '/symfony/console/SingleCommandApplication.php', 'Symfony\\Component\\Console\\Style\\OutputStyle' => __DIR__ . '/..' . '/symfony/console/Style/OutputStyle.php', 'Symfony\\Component\\Console\\Style\\StyleInterface' => __DIR__ . '/..' . '/symfony/console/Style/StyleInterface.php', 'Symfony\\Component\\Console\\Style\\SymfonyStyle' => __DIR__ . '/..' . '/symfony/console/Style/SymfonyStyle.php', 'Symfony\\Component\\Console\\Terminal' => __DIR__ . '/..' . '/symfony/console/Terminal.php', 'Symfony\\Component\\Console\\Tester\\ApplicationTester' => __DIR__ . '/..' . '/symfony/console/Tester/ApplicationTester.php', + 'Symfony\\Component\\Console\\Tester\\CommandCompletionTester' => __DIR__ . '/..' . '/symfony/console/Tester/CommandCompletionTester.php', 'Symfony\\Component\\Console\\Tester\\CommandTester' => __DIR__ . '/..' . '/symfony/console/Tester/CommandTester.php', + 'Symfony\\Component\\Console\\Tester\\Constraint\\CommandIsSuccessful' => __DIR__ . '/..' . '/symfony/console/Tester/Constraint/CommandIsSuccessful.php', 'Symfony\\Component\\Console\\Tester\\TesterTrait' => __DIR__ . '/..' . '/symfony/console/Tester/TesterTrait.php', 'Symfony\\Component\\CssSelector\\CssSelectorConverter' => __DIR__ . '/..' . '/symfony/css-selector/CssSelectorConverter.php', 'Symfony\\Component\\CssSelector\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/css-selector/Exception/ExceptionInterface.php', @@ -4086,36 +4848,38 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\CssSelector\\XPath\\Translator' => __DIR__ . '/..' . '/symfony/css-selector/XPath/Translator.php', 'Symfony\\Component\\CssSelector\\XPath\\TranslatorInterface' => __DIR__ . '/..' . '/symfony/css-selector/XPath/TranslatorInterface.php', 'Symfony\\Component\\CssSelector\\XPath\\XPathExpr' => __DIR__ . '/..' . '/symfony/css-selector/XPath/XPathExpr.php', - 'Symfony\\Component\\Debug\\BufferingLogger' => __DIR__ . '/..' . '/symfony/debug/BufferingLogger.php', - 'Symfony\\Component\\Debug\\Debug' => __DIR__ . '/..' . '/symfony/debug/Debug.php', - 'Symfony\\Component\\Debug\\DebugClassLoader' => __DIR__ . '/..' . '/symfony/debug/DebugClassLoader.php', - 'Symfony\\Component\\Debug\\ErrorHandler' => __DIR__ . '/..' . '/symfony/debug/ErrorHandler.php', - 'Symfony\\Component\\Debug\\ExceptionHandler' => __DIR__ . '/..' . '/symfony/debug/ExceptionHandler.php', - 'Symfony\\Component\\Debug\\Exception\\ClassNotFoundException' => __DIR__ . '/..' . '/symfony/debug/Exception/ClassNotFoundException.php', - 'Symfony\\Component\\Debug\\Exception\\FatalErrorException' => __DIR__ . '/..' . '/symfony/debug/Exception/FatalErrorException.php', - 'Symfony\\Component\\Debug\\Exception\\FatalThrowableError' => __DIR__ . '/..' . '/symfony/debug/Exception/FatalThrowableError.php', - 'Symfony\\Component\\Debug\\Exception\\FlattenException' => __DIR__ . '/..' . '/symfony/debug/Exception/FlattenException.php', - 'Symfony\\Component\\Debug\\Exception\\OutOfMemoryException' => __DIR__ . '/..' . '/symfony/debug/Exception/OutOfMemoryException.php', - 'Symfony\\Component\\Debug\\Exception\\SilencedErrorContext' => __DIR__ . '/..' . '/symfony/debug/Exception/SilencedErrorContext.php', - 'Symfony\\Component\\Debug\\Exception\\UndefinedFunctionException' => __DIR__ . '/..' . '/symfony/debug/Exception/UndefinedFunctionException.php', - 'Symfony\\Component\\Debug\\Exception\\UndefinedMethodException' => __DIR__ . '/..' . '/symfony/debug/Exception/UndefinedMethodException.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\ClassNotFoundFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\FatalErrorHandlerInterface' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedFunctionFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedMethodFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php', + 'Symfony\\Component\\ErrorHandler\\BufferingLogger' => __DIR__ . '/..' . '/symfony/error-handler/BufferingLogger.php', + 'Symfony\\Component\\ErrorHandler\\Debug' => __DIR__ . '/..' . '/symfony/error-handler/Debug.php', + 'Symfony\\Component\\ErrorHandler\\DebugClassLoader' => __DIR__ . '/..' . '/symfony/error-handler/DebugClassLoader.php', + 'Symfony\\Component\\ErrorHandler\\ErrorEnhancer\\ClassNotFoundErrorEnhancer' => __DIR__ . '/..' . '/symfony/error-handler/ErrorEnhancer/ClassNotFoundErrorEnhancer.php', + 'Symfony\\Component\\ErrorHandler\\ErrorEnhancer\\ErrorEnhancerInterface' => __DIR__ . '/..' . '/symfony/error-handler/ErrorEnhancer/ErrorEnhancerInterface.php', + 'Symfony\\Component\\ErrorHandler\\ErrorEnhancer\\UndefinedFunctionErrorEnhancer' => __DIR__ . '/..' . '/symfony/error-handler/ErrorEnhancer/UndefinedFunctionErrorEnhancer.php', + 'Symfony\\Component\\ErrorHandler\\ErrorEnhancer\\UndefinedMethodErrorEnhancer' => __DIR__ . '/..' . '/symfony/error-handler/ErrorEnhancer/UndefinedMethodErrorEnhancer.php', + 'Symfony\\Component\\ErrorHandler\\ErrorHandler' => __DIR__ . '/..' . '/symfony/error-handler/ErrorHandler.php', + 'Symfony\\Component\\ErrorHandler\\ErrorRenderer\\CliErrorRenderer' => __DIR__ . '/..' . '/symfony/error-handler/ErrorRenderer/CliErrorRenderer.php', + 'Symfony\\Component\\ErrorHandler\\ErrorRenderer\\ErrorRendererInterface' => __DIR__ . '/..' . '/symfony/error-handler/ErrorRenderer/ErrorRendererInterface.php', + 'Symfony\\Component\\ErrorHandler\\ErrorRenderer\\HtmlErrorRenderer' => __DIR__ . '/..' . '/symfony/error-handler/ErrorRenderer/HtmlErrorRenderer.php', + 'Symfony\\Component\\ErrorHandler\\ErrorRenderer\\SerializerErrorRenderer' => __DIR__ . '/..' . '/symfony/error-handler/ErrorRenderer/SerializerErrorRenderer.php', + 'Symfony\\Component\\ErrorHandler\\Error\\ClassNotFoundError' => __DIR__ . '/..' . '/symfony/error-handler/Error/ClassNotFoundError.php', + 'Symfony\\Component\\ErrorHandler\\Error\\FatalError' => __DIR__ . '/..' . '/symfony/error-handler/Error/FatalError.php', + 'Symfony\\Component\\ErrorHandler\\Error\\OutOfMemoryError' => __DIR__ . '/..' . '/symfony/error-handler/Error/OutOfMemoryError.php', + 'Symfony\\Component\\ErrorHandler\\Error\\UndefinedFunctionError' => __DIR__ . '/..' . '/symfony/error-handler/Error/UndefinedFunctionError.php', + 'Symfony\\Component\\ErrorHandler\\Error\\UndefinedMethodError' => __DIR__ . '/..' . '/symfony/error-handler/Error/UndefinedMethodError.php', + 'Symfony\\Component\\ErrorHandler\\Exception\\FlattenException' => __DIR__ . '/..' . '/symfony/error-handler/Exception/FlattenException.php', + 'Symfony\\Component\\ErrorHandler\\Exception\\SilencedErrorContext' => __DIR__ . '/..' . '/symfony/error-handler/Exception/SilencedErrorContext.php', + 'Symfony\\Component\\ErrorHandler\\Internal\\TentativeTypes' => __DIR__ . '/..' . '/symfony/error-handler/Internal/TentativeTypes.php', + 'Symfony\\Component\\ErrorHandler\\ThrowableUtils' => __DIR__ . '/..' . '/symfony/error-handler/ThrowableUtils.php', + 'Symfony\\Component\\EventDispatcher\\Attribute\\AsEventListener' => __DIR__ . '/..' . '/symfony/event-dispatcher/Attribute/AsEventListener.php', 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php', - 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcherInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php', 'Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/WrappedListener.php', - 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\ExtractingEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php', + 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\AddEventAliasesPass' => __DIR__ . '/..' . '/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php', 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\RegisterListenersPass' => __DIR__ . '/..' . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php', - 'Symfony\\Component\\EventDispatcher\\Event' => __DIR__ . '/..' . '/symfony/event-dispatcher/Event.php', 'Symfony\\Component\\EventDispatcher\\EventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/EventDispatcher.php', 'Symfony\\Component\\EventDispatcher\\EventDispatcherInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher/EventDispatcherInterface.php', 'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher/EventSubscriberInterface.php', 'Symfony\\Component\\EventDispatcher\\GenericEvent' => __DIR__ . '/..' . '/symfony/event-dispatcher/GenericEvent.php', 'Symfony\\Component\\EventDispatcher\\ImmutableEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/ImmutableEventDispatcher.php', 'Symfony\\Component\\EventDispatcher\\LegacyEventDispatcherProxy' => __DIR__ . '/..' . '/symfony/event-dispatcher/LegacyEventDispatcherProxy.php', - 'Symfony\\Component\\EventDispatcher\\LegacyEventProxy' => __DIR__ . '/..' . '/symfony/event-dispatcher/LegacyEventProxy.php', 'Symfony\\Component\\Finder\\Comparator\\Comparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/Comparator.php', 'Symfony\\Component\\Finder\\Comparator\\DateComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/DateComparator.php', 'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/NumberComparator.php', @@ -4131,19 +4895,23 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FileTypeFilterIterator.php', 'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilecontentFilterIterator.php', 'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilenameFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\LazyIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/LazyIterator.php', 'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', 'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/PathFilterIterator.php', 'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', 'Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', 'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SortableIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\VcsIgnoredFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/VcsIgnoredFilterIterator.php', 'Symfony\\Component\\Finder\\SplFileInfo' => __DIR__ . '/..' . '/symfony/finder/SplFileInfo.php', 'Symfony\\Component\\HttpFoundation\\AcceptHeader' => __DIR__ . '/..' . '/symfony/http-foundation/AcceptHeader.php', 'Symfony\\Component\\HttpFoundation\\AcceptHeaderItem' => __DIR__ . '/..' . '/symfony/http-foundation/AcceptHeaderItem.php', - 'Symfony\\Component\\HttpFoundation\\ApacheRequest' => __DIR__ . '/..' . '/symfony/http-foundation/ApacheRequest.php', 'Symfony\\Component\\HttpFoundation\\BinaryFileResponse' => __DIR__ . '/..' . '/symfony/http-foundation/BinaryFileResponse.php', 'Symfony\\Component\\HttpFoundation\\Cookie' => __DIR__ . '/..' . '/symfony/http-foundation/Cookie.php', + 'Symfony\\Component\\HttpFoundation\\Exception\\BadRequestException' => __DIR__ . '/..' . '/symfony/http-foundation/Exception/BadRequestException.php', 'Symfony\\Component\\HttpFoundation\\Exception\\ConflictingHeadersException' => __DIR__ . '/..' . '/symfony/http-foundation/Exception/ConflictingHeadersException.php', + 'Symfony\\Component\\HttpFoundation\\Exception\\JsonException' => __DIR__ . '/..' . '/symfony/http-foundation/Exception/JsonException.php', 'Symfony\\Component\\HttpFoundation\\Exception\\RequestExceptionInterface' => __DIR__ . '/..' . '/symfony/http-foundation/Exception/RequestExceptionInterface.php', + 'Symfony\\Component\\HttpFoundation\\Exception\\SessionNotFoundException' => __DIR__ . '/..' . '/symfony/http-foundation/Exception/SessionNotFoundException.php', 'Symfony\\Component\\HttpFoundation\\Exception\\SuspiciousOperationException' => __DIR__ . '/..' . '/symfony/http-foundation/Exception/SuspiciousOperationException.php', 'Symfony\\Component\\HttpFoundation\\ExpressionRequestMatcher' => __DIR__ . '/..' . '/symfony/http-foundation/ExpressionRequestMatcher.php', 'Symfony\\Component\\HttpFoundation\\FileBag' => __DIR__ . '/..' . '/symfony/http-foundation/FileBag.php', @@ -4160,20 +4928,16 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\HttpFoundation\\File\\Exception\\UnexpectedTypeException' => __DIR__ . '/..' . '/symfony/http-foundation/File/Exception/UnexpectedTypeException.php', 'Symfony\\Component\\HttpFoundation\\File\\Exception\\UploadException' => __DIR__ . '/..' . '/symfony/http-foundation/File/Exception/UploadException.php', 'Symfony\\Component\\HttpFoundation\\File\\File' => __DIR__ . '/..' . '/symfony/http-foundation/File/File.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\ExtensionGuesser' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/ExtensionGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\ExtensionGuesserInterface' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/ExtensionGuesserInterface.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\FileBinaryMimeTypeGuesser' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\FileinfoMimeTypeGuesser' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\MimeTypeExtensionGuesser' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/MimeTypeExtensionGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\MimeTypeGuesser' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\MimeTypeGuesserInterface' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php', 'Symfony\\Component\\HttpFoundation\\File\\Stream' => __DIR__ . '/..' . '/symfony/http-foundation/File/Stream.php', 'Symfony\\Component\\HttpFoundation\\File\\UploadedFile' => __DIR__ . '/..' . '/symfony/http-foundation/File/UploadedFile.php', 'Symfony\\Component\\HttpFoundation\\HeaderBag' => __DIR__ . '/..' . '/symfony/http-foundation/HeaderBag.php', 'Symfony\\Component\\HttpFoundation\\HeaderUtils' => __DIR__ . '/..' . '/symfony/http-foundation/HeaderUtils.php', + 'Symfony\\Component\\HttpFoundation\\InputBag' => __DIR__ . '/..' . '/symfony/http-foundation/InputBag.php', 'Symfony\\Component\\HttpFoundation\\IpUtils' => __DIR__ . '/..' . '/symfony/http-foundation/IpUtils.php', 'Symfony\\Component\\HttpFoundation\\JsonResponse' => __DIR__ . '/..' . '/symfony/http-foundation/JsonResponse.php', 'Symfony\\Component\\HttpFoundation\\ParameterBag' => __DIR__ . '/..' . '/symfony/http-foundation/ParameterBag.php', + 'Symfony\\Component\\HttpFoundation\\RateLimiter\\AbstractRequestRateLimiter' => __DIR__ . '/..' . '/symfony/http-foundation/RateLimiter/AbstractRequestRateLimiter.php', + 'Symfony\\Component\\HttpFoundation\\RateLimiter\\RequestRateLimiterInterface' => __DIR__ . '/..' . '/symfony/http-foundation/RateLimiter/RequestRateLimiterInterface.php', 'Symfony\\Component\\HttpFoundation\\RedirectResponse' => __DIR__ . '/..' . '/symfony/http-foundation/RedirectResponse.php', 'Symfony\\Component\\HttpFoundation\\Request' => __DIR__ . '/..' . '/symfony/http-foundation/Request.php', 'Symfony\\Component\\HttpFoundation\\RequestMatcher' => __DIR__ . '/..' . '/symfony/http-foundation/RequestMatcher.php', @@ -4191,9 +4955,13 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\HttpFoundation\\Session\\Session' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Session.php', 'Symfony\\Component\\HttpFoundation\\Session\\SessionBagInterface' => __DIR__ . '/..' . '/symfony/http-foundation/Session/SessionBagInterface.php', 'Symfony\\Component\\HttpFoundation\\Session\\SessionBagProxy' => __DIR__ . '/..' . '/symfony/http-foundation/Session/SessionBagProxy.php', + 'Symfony\\Component\\HttpFoundation\\Session\\SessionFactory' => __DIR__ . '/..' . '/symfony/http-foundation/Session/SessionFactory.php', + 'Symfony\\Component\\HttpFoundation\\Session\\SessionFactoryInterface' => __DIR__ . '/..' . '/symfony/http-foundation/Session/SessionFactoryInterface.php', 'Symfony\\Component\\HttpFoundation\\Session\\SessionInterface' => __DIR__ . '/..' . '/symfony/http-foundation/Session/SessionInterface.php', 'Symfony\\Component\\HttpFoundation\\Session\\SessionUtils' => __DIR__ . '/..' . '/symfony/http-foundation/Session/SessionUtils.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\AbstractSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\IdentityMarshaller' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/IdentityMarshaller.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MarshallingSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MemcachedSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MigratingSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/MigratingSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MongoDbSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php', @@ -4201,25 +4969,35 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\NullSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\PdoSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\RedisSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/RedisSessionHandler.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\SessionHandlerFactory' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\StrictSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\MetadataBag' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/MetadataBag.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\MockArraySessionStorage' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\MockFileSessionStorage' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\MockFileSessionStorageFactory' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/MockFileSessionStorageFactory.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\NativeSessionStorage' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/NativeSessionStorage.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\NativeSessionStorageFactory' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/NativeSessionStorageFactory.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\PhpBridgeSessionStorage' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\PhpBridgeSessionStorageFactory' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorageFactory.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Proxy\\AbstractProxy' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Proxy\\SessionHandlerProxy' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\ServiceSessionFactory' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/ServiceSessionFactory.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\SessionStorageFactoryInterface' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/SessionStorageFactoryInterface.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\SessionStorageInterface' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/SessionStorageInterface.php', 'Symfony\\Component\\HttpFoundation\\StreamedResponse' => __DIR__ . '/..' . '/symfony/http-foundation/StreamedResponse.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\RequestAttributeValueSame' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/RequestAttributeValueSame.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseCookieValueSame' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/ResponseCookieValueSame.php', + 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseFormatSame' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/ResponseFormatSame.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseHasCookie' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/ResponseHasCookie.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseHasHeader' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/ResponseHasHeader.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseHeaderSame' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/ResponseHeaderSame.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseIsRedirected' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/ResponseIsRedirected.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseIsSuccessful' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/ResponseIsSuccessful.php', + 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseIsUnprocessable' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/ResponseIsUnprocessable.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseStatusCodeSame' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/ResponseStatusCodeSame.php', 'Symfony\\Component\\HttpFoundation\\UrlHelper' => __DIR__ . '/..' . '/symfony/http-foundation/UrlHelper.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\ArgumentInterface' => __DIR__ . '/..' . '/symfony/http-kernel/Attribute/ArgumentInterface.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\AsController' => __DIR__ . '/..' . '/symfony/http-kernel/Attribute/AsController.php', 'Symfony\\Component\\HttpKernel\\Bundle\\Bundle' => __DIR__ . '/..' . '/symfony/http-kernel/Bundle/Bundle.php', 'Symfony\\Component\\HttpKernel\\Bundle\\BundleInterface' => __DIR__ . '/..' . '/symfony/http-kernel/Bundle/BundleInterface.php', 'Symfony\\Component\\HttpKernel\\CacheClearer\\CacheClearerInterface' => __DIR__ . '/..' . '/symfony/http-kernel/CacheClearer/CacheClearerInterface.php', @@ -4229,7 +5007,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\HttpKernel\\CacheWarmer\\CacheWarmerAggregate' => __DIR__ . '/..' . '/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php', 'Symfony\\Component\\HttpKernel\\CacheWarmer\\CacheWarmerInterface' => __DIR__ . '/..' . '/symfony/http-kernel/CacheWarmer/CacheWarmerInterface.php', 'Symfony\\Component\\HttpKernel\\CacheWarmer\\WarmableInterface' => __DIR__ . '/..' . '/symfony/http-kernel/CacheWarmer/WarmableInterface.php', - 'Symfony\\Component\\HttpKernel\\Client' => __DIR__ . '/..' . '/symfony/http-kernel/Client.php', 'Symfony\\Component\\HttpKernel\\Config\\FileLocator' => __DIR__ . '/..' . '/symfony/http-kernel/Config/FileLocator.php', 'Symfony\\Component\\HttpKernel\\ControllerMetadata\\ArgumentMetadata' => __DIR__ . '/..' . '/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php', 'Symfony\\Component\\HttpKernel\\ControllerMetadata\\ArgumentMetadataFactory' => __DIR__ . '/..' . '/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php', @@ -4249,6 +5026,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\HttpKernel\\Controller\\ControllerReference' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/ControllerReference.php', 'Symfony\\Component\\HttpKernel\\Controller\\ControllerResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/ControllerResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/ControllerResolverInterface.php', + 'Symfony\\Component\\HttpKernel\\Controller\\ErrorController' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/ErrorController.php', 'Symfony\\Component\\HttpKernel\\Controller\\TraceableArgumentResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/TraceableArgumentResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\TraceableControllerResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/TraceableControllerResolver.php', 'Symfony\\Component\\HttpKernel\\DataCollector\\AjaxDataCollector' => __DIR__ . '/..' . '/symfony/http-kernel/DataCollector/AjaxDataCollector.php', @@ -4285,32 +5063,23 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\HttpKernel\\EventListener\\DebugHandlersListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/DebugHandlersListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\DisallowRobotsIndexingListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/DisallowRobotsIndexingListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\DumpListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/DumpListener.php', - 'Symfony\\Component\\HttpKernel\\EventListener\\ExceptionListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/ExceptionListener.php', + 'Symfony\\Component\\HttpKernel\\EventListener\\ErrorListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/ErrorListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\FragmentListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/FragmentListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\LocaleAwareListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/LocaleAwareListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/LocaleListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ProfilerListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/ProfilerListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ResponseListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/ResponseListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\RouterListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/RouterListener.php', - 'Symfony\\Component\\HttpKernel\\EventListener\\SaveSessionListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/SaveSessionListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\SessionListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/SessionListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\StreamedResponseListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/StreamedResponseListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\SurrogateListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/SurrogateListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\TestSessionListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/TestSessionListener.php', - 'Symfony\\Component\\HttpKernel\\EventListener\\TranslatorListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/TranslatorListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ValidateRequestListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/ValidateRequestListener.php', 'Symfony\\Component\\HttpKernel\\Event\\ControllerArgumentsEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/ControllerArgumentsEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\ControllerEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/ControllerEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\ExceptionEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/ExceptionEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\FilterControllerArgumentsEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\FilterControllerEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/FilterControllerEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\FilterResponseEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/FilterResponseEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\FinishRequestEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/FinishRequestEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\GetResponseEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/GetResponseEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\GetResponseForControllerResultEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\GetResponseForExceptionEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/GetResponseForExceptionEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\KernelEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/KernelEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\PostResponseEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/PostResponseEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\RequestEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/RequestEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\ResponseEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/ResponseEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\TerminateEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/TerminateEvent.php', @@ -4322,6 +5091,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\HttpKernel\\Exception\\GoneHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/GoneHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\HttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/HttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\HttpExceptionInterface' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/HttpExceptionInterface.php', + 'Symfony\\Component\\HttpKernel\\Exception\\InvalidMetadataException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/InvalidMetadataException.php', 'Symfony\\Component\\HttpKernel\\Exception\\LengthRequiredHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/LengthRequiredHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/MethodNotAllowedHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\NotAcceptableHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/NotAcceptableHttpException.php', @@ -4331,12 +5101,15 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\HttpKernel\\Exception\\ServiceUnavailableHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\TooManyRequestsHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/TooManyRequestsHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/UnauthorizedHttpException.php', + 'Symfony\\Component\\HttpKernel\\Exception\\UnexpectedSessionUsageException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/UnexpectedSessionUsageException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnprocessableEntityHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/UnprocessableEntityHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnsupportedMediaTypeHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/UnsupportedMediaTypeHttpException.php', 'Symfony\\Component\\HttpKernel\\Fragment\\AbstractSurrogateFragmentRenderer' => __DIR__ . '/..' . '/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php', 'Symfony\\Component\\HttpKernel\\Fragment\\EsiFragmentRenderer' => __DIR__ . '/..' . '/symfony/http-kernel/Fragment/EsiFragmentRenderer.php', 'Symfony\\Component\\HttpKernel\\Fragment\\FragmentHandler' => __DIR__ . '/..' . '/symfony/http-kernel/Fragment/FragmentHandler.php', 'Symfony\\Component\\HttpKernel\\Fragment\\FragmentRendererInterface' => __DIR__ . '/..' . '/symfony/http-kernel/Fragment/FragmentRendererInterface.php', + 'Symfony\\Component\\HttpKernel\\Fragment\\FragmentUriGenerator' => __DIR__ . '/..' . '/symfony/http-kernel/Fragment/FragmentUriGenerator.php', + 'Symfony\\Component\\HttpKernel\\Fragment\\FragmentUriGeneratorInterface' => __DIR__ . '/..' . '/symfony/http-kernel/Fragment/FragmentUriGeneratorInterface.php', 'Symfony\\Component\\HttpKernel\\Fragment\\HIncludeFragmentRenderer' => __DIR__ . '/..' . '/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php', 'Symfony\\Component\\HttpKernel\\Fragment\\InlineFragmentRenderer' => __DIR__ . '/..' . '/symfony/http-kernel/Fragment/InlineFragmentRenderer.php', 'Symfony\\Component\\HttpKernel\\Fragment\\RoutableFragmentRenderer' => __DIR__ . '/..' . '/symfony/http-kernel/Fragment/RoutableFragmentRenderer.php', @@ -4370,6 +5143,11 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\Mime\\Address' => __DIR__ . '/..' . '/symfony/mime/Address.php', 'Symfony\\Component\\Mime\\BodyRendererInterface' => __DIR__ . '/..' . '/symfony/mime/BodyRendererInterface.php', 'Symfony\\Component\\Mime\\CharacterStream' => __DIR__ . '/..' . '/symfony/mime/CharacterStream.php', + 'Symfony\\Component\\Mime\\Crypto\\DkimOptions' => __DIR__ . '/..' . '/symfony/mime/Crypto/DkimOptions.php', + 'Symfony\\Component\\Mime\\Crypto\\DkimSigner' => __DIR__ . '/..' . '/symfony/mime/Crypto/DkimSigner.php', + 'Symfony\\Component\\Mime\\Crypto\\SMime' => __DIR__ . '/..' . '/symfony/mime/Crypto/SMime.php', + 'Symfony\\Component\\Mime\\Crypto\\SMimeEncrypter' => __DIR__ . '/..' . '/symfony/mime/Crypto/SMimeEncrypter.php', + 'Symfony\\Component\\Mime\\Crypto\\SMimeSigner' => __DIR__ . '/..' . '/symfony/mime/Crypto/SMimeSigner.php', 'Symfony\\Component\\Mime\\DependencyInjection\\AddMimeTypeGuesserPass' => __DIR__ . '/..' . '/symfony/mime/DependencyInjection/AddMimeTypeGuesserPass.php', 'Symfony\\Component\\Mime\\Email' => __DIR__ . '/..' . '/symfony/mime/Email.php', 'Symfony\\Component\\Mime\\Encoder\\AddressEncoderInterface' => __DIR__ . '/..' . '/symfony/mime/Encoder/AddressEncoderInterface.php', @@ -4408,7 +5186,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\Mime\\MimeTypeGuesserInterface' => __DIR__ . '/..' . '/symfony/mime/MimeTypeGuesserInterface.php', 'Symfony\\Component\\Mime\\MimeTypes' => __DIR__ . '/..' . '/symfony/mime/MimeTypes.php', 'Symfony\\Component\\Mime\\MimeTypesInterface' => __DIR__ . '/..' . '/symfony/mime/MimeTypesInterface.php', - 'Symfony\\Component\\Mime\\NamedAddress' => __DIR__ . '/..' . '/symfony/mime/NamedAddress.php', 'Symfony\\Component\\Mime\\Part\\AbstractMultipartPart' => __DIR__ . '/..' . '/symfony/mime/Part/AbstractMultipartPart.php', 'Symfony\\Component\\Mime\\Part\\AbstractPart' => __DIR__ . '/..' . '/symfony/mime/Part/AbstractPart.php', 'Symfony\\Component\\Mime\\Part\\DataPart' => __DIR__ . '/..' . '/symfony/mime/Part/DataPart.php', @@ -4418,8 +5195,15 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\Mime\\Part\\Multipart\\FormDataPart' => __DIR__ . '/..' . '/symfony/mime/Part/Multipart/FormDataPart.php', 'Symfony\\Component\\Mime\\Part\\Multipart\\MixedPart' => __DIR__ . '/..' . '/symfony/mime/Part/Multipart/MixedPart.php', 'Symfony\\Component\\Mime\\Part\\Multipart\\RelatedPart' => __DIR__ . '/..' . '/symfony/mime/Part/Multipart/RelatedPart.php', + 'Symfony\\Component\\Mime\\Part\\SMimePart' => __DIR__ . '/..' . '/symfony/mime/Part/SMimePart.php', 'Symfony\\Component\\Mime\\Part\\TextPart' => __DIR__ . '/..' . '/symfony/mime/Part/TextPart.php', 'Symfony\\Component\\Mime\\RawMessage' => __DIR__ . '/..' . '/symfony/mime/RawMessage.php', + 'Symfony\\Component\\Mime\\Test\\Constraint\\EmailAddressContains' => __DIR__ . '/..' . '/symfony/mime/Test/Constraint/EmailAddressContains.php', + 'Symfony\\Component\\Mime\\Test\\Constraint\\EmailAttachmentCount' => __DIR__ . '/..' . '/symfony/mime/Test/Constraint/EmailAttachmentCount.php', + 'Symfony\\Component\\Mime\\Test\\Constraint\\EmailHasHeader' => __DIR__ . '/..' . '/symfony/mime/Test/Constraint/EmailHasHeader.php', + 'Symfony\\Component\\Mime\\Test\\Constraint\\EmailHeaderSame' => __DIR__ . '/..' . '/symfony/mime/Test/Constraint/EmailHeaderSame.php', + 'Symfony\\Component\\Mime\\Test\\Constraint\\EmailHtmlBodyContains' => __DIR__ . '/..' . '/symfony/mime/Test/Constraint/EmailHtmlBodyContains.php', + 'Symfony\\Component\\Mime\\Test\\Constraint\\EmailTextBodyContains' => __DIR__ . '/..' . '/symfony/mime/Test/Constraint/EmailTextBodyContains.php', 'Symfony\\Component\\OptionsResolver\\Debug\\OptionsResolverIntrospector' => __DIR__ . '/..' . '/symfony/options-resolver/Debug/OptionsResolverIntrospector.php', 'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/AccessException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/ExceptionInterface.php', @@ -4430,6 +5214,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/NoSuchOptionException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/OptionDefinitionException.php', 'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/UndefinedOptionsException.php', + 'Symfony\\Component\\OptionsResolver\\OptionConfigurator' => __DIR__ . '/..' . '/symfony/options-resolver/OptionConfigurator.php', 'Symfony\\Component\\OptionsResolver\\Options' => __DIR__ . '/..' . '/symfony/options-resolver/Options.php', 'Symfony\\Component\\OptionsResolver\\OptionsResolver' => __DIR__ . '/..' . '/symfony/options-resolver/OptionsResolver.php', 'Symfony\\Component\\Process\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/process/Exception/ExceptionInterface.php', @@ -4449,40 +5234,46 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\Process\\Pipes\\WindowsPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/WindowsPipes.php', 'Symfony\\Component\\Process\\Process' => __DIR__ . '/..' . '/symfony/process/Process.php', 'Symfony\\Component\\Process\\ProcessUtils' => __DIR__ . '/..' . '/symfony/process/ProcessUtils.php', + 'Symfony\\Component\\Routing\\Alias' => __DIR__ . '/..' . '/symfony/routing/Alias.php', 'Symfony\\Component\\Routing\\Annotation\\Route' => __DIR__ . '/..' . '/symfony/routing/Annotation/Route.php', 'Symfony\\Component\\Routing\\CompiledRoute' => __DIR__ . '/..' . '/symfony/routing/CompiledRoute.php', 'Symfony\\Component\\Routing\\DependencyInjection\\RoutingResolverPass' => __DIR__ . '/..' . '/symfony/routing/DependencyInjection/RoutingResolverPass.php', 'Symfony\\Component\\Routing\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/routing/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Routing\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/routing/Exception/InvalidArgumentException.php', 'Symfony\\Component\\Routing\\Exception\\InvalidParameterException' => __DIR__ . '/..' . '/symfony/routing/Exception/InvalidParameterException.php', 'Symfony\\Component\\Routing\\Exception\\MethodNotAllowedException' => __DIR__ . '/..' . '/symfony/routing/Exception/MethodNotAllowedException.php', 'Symfony\\Component\\Routing\\Exception\\MissingMandatoryParametersException' => __DIR__ . '/..' . '/symfony/routing/Exception/MissingMandatoryParametersException.php', 'Symfony\\Component\\Routing\\Exception\\NoConfigurationException' => __DIR__ . '/..' . '/symfony/routing/Exception/NoConfigurationException.php', 'Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException' => __DIR__ . '/..' . '/symfony/routing/Exception/ResourceNotFoundException.php', + 'Symfony\\Component\\Routing\\Exception\\RouteCircularReferenceException' => __DIR__ . '/..' . '/symfony/routing/Exception/RouteCircularReferenceException.php', 'Symfony\\Component\\Routing\\Exception\\RouteNotFoundException' => __DIR__ . '/..' . '/symfony/routing/Exception/RouteNotFoundException.php', + 'Symfony\\Component\\Routing\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/routing/Exception/RuntimeException.php', 'Symfony\\Component\\Routing\\Generator\\CompiledUrlGenerator' => __DIR__ . '/..' . '/symfony/routing/Generator/CompiledUrlGenerator.php', 'Symfony\\Component\\Routing\\Generator\\ConfigurableRequirementsInterface' => __DIR__ . '/..' . '/symfony/routing/Generator/ConfigurableRequirementsInterface.php', 'Symfony\\Component\\Routing\\Generator\\Dumper\\CompiledUrlGeneratorDumper' => __DIR__ . '/..' . '/symfony/routing/Generator/Dumper/CompiledUrlGeneratorDumper.php', 'Symfony\\Component\\Routing\\Generator\\Dumper\\GeneratorDumper' => __DIR__ . '/..' . '/symfony/routing/Generator/Dumper/GeneratorDumper.php', 'Symfony\\Component\\Routing\\Generator\\Dumper\\GeneratorDumperInterface' => __DIR__ . '/..' . '/symfony/routing/Generator/Dumper/GeneratorDumperInterface.php', - 'Symfony\\Component\\Routing\\Generator\\Dumper\\PhpGeneratorDumper' => __DIR__ . '/..' . '/symfony/routing/Generator/Dumper/PhpGeneratorDumper.php', 'Symfony\\Component\\Routing\\Generator\\UrlGenerator' => __DIR__ . '/..' . '/symfony/routing/Generator/UrlGenerator.php', 'Symfony\\Component\\Routing\\Generator\\UrlGeneratorInterface' => __DIR__ . '/..' . '/symfony/routing/Generator/UrlGeneratorInterface.php', 'Symfony\\Component\\Routing\\Loader\\AnnotationClassLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/AnnotationClassLoader.php', 'Symfony\\Component\\Routing\\Loader\\AnnotationDirectoryLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/AnnotationDirectoryLoader.php', 'Symfony\\Component\\Routing\\Loader\\AnnotationFileLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/AnnotationFileLoader.php', 'Symfony\\Component\\Routing\\Loader\\ClosureLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/ClosureLoader.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\AliasConfigurator' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/AliasConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\CollectionConfigurator' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/CollectionConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\ImportConfigurator' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/ImportConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\RouteConfigurator' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/RouteConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\RoutingConfigurator' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/RoutingConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\AddTrait' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/Traits/AddTrait.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\HostTrait' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/Traits/HostTrait.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\LocalizedRouteTrait' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/Traits/LocalizedRouteTrait.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\PrefixTrait' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/Traits/PrefixTrait.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\RouteTrait' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/Traits/RouteTrait.php', - 'Symfony\\Component\\Routing\\Loader\\DependencyInjection\\ServiceRouterLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/DependencyInjection/ServiceRouterLoader.php', + 'Symfony\\Component\\Routing\\Loader\\ContainerLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/ContainerLoader.php', 'Symfony\\Component\\Routing\\Loader\\DirectoryLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/DirectoryLoader.php', 'Symfony\\Component\\Routing\\Loader\\GlobFileLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/GlobFileLoader.php', - 'Symfony\\Component\\Routing\\Loader\\ObjectRouteLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/ObjectRouteLoader.php', + 'Symfony\\Component\\Routing\\Loader\\ObjectLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/ObjectLoader.php', 'Symfony\\Component\\Routing\\Loader\\PhpFileLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/PhpFileLoader.php', - 'Symfony\\Component\\Routing\\Loader\\ProtectedPhpFileLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/PhpFileLoader.php', 'Symfony\\Component\\Routing\\Loader\\XmlFileLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/XmlFileLoader.php', 'Symfony\\Component\\Routing\\Loader\\YamlFileLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/YamlFileLoader.php', 'Symfony\\Component\\Routing\\Matcher\\CompiledUrlMatcher' => __DIR__ . '/..' . '/symfony/routing/Matcher/CompiledUrlMatcher.php', @@ -4490,8 +5281,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\Routing\\Matcher\\Dumper\\CompiledUrlMatcherTrait' => __DIR__ . '/..' . '/symfony/routing/Matcher/Dumper/CompiledUrlMatcherTrait.php', 'Symfony\\Component\\Routing\\Matcher\\Dumper\\MatcherDumper' => __DIR__ . '/..' . '/symfony/routing/Matcher/Dumper/MatcherDumper.php', 'Symfony\\Component\\Routing\\Matcher\\Dumper\\MatcherDumperInterface' => __DIR__ . '/..' . '/symfony/routing/Matcher/Dumper/MatcherDumperInterface.php', - 'Symfony\\Component\\Routing\\Matcher\\Dumper\\PhpMatcherDumper' => __DIR__ . '/..' . '/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php', 'Symfony\\Component\\Routing\\Matcher\\Dumper\\StaticPrefixCollection' => __DIR__ . '/..' . '/symfony/routing/Matcher/Dumper/StaticPrefixCollection.php', + 'Symfony\\Component\\Routing\\Matcher\\ExpressionLanguageProvider' => __DIR__ . '/..' . '/symfony/routing/Matcher/ExpressionLanguageProvider.php', 'Symfony\\Component\\Routing\\Matcher\\RedirectableUrlMatcher' => __DIR__ . '/..' . '/symfony/routing/Matcher/RedirectableUrlMatcher.php', 'Symfony\\Component\\Routing\\Matcher\\RedirectableUrlMatcherInterface' => __DIR__ . '/..' . '/symfony/routing/Matcher/RedirectableUrlMatcherInterface.php', 'Symfony\\Component\\Routing\\Matcher\\RequestMatcherInterface' => __DIR__ . '/..' . '/symfony/routing/Matcher/RequestMatcherInterface.php', @@ -4507,10 +5298,27 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\Routing\\RouteCompilerInterface' => __DIR__ . '/..' . '/symfony/routing/RouteCompilerInterface.php', 'Symfony\\Component\\Routing\\Router' => __DIR__ . '/..' . '/symfony/routing/Router.php', 'Symfony\\Component\\Routing\\RouterInterface' => __DIR__ . '/..' . '/symfony/routing/RouterInterface.php', + 'Symfony\\Component\\String\\AbstractString' => __DIR__ . '/..' . '/symfony/string/AbstractString.php', + 'Symfony\\Component\\String\\AbstractUnicodeString' => __DIR__ . '/..' . '/symfony/string/AbstractUnicodeString.php', + 'Symfony\\Component\\String\\ByteString' => __DIR__ . '/..' . '/symfony/string/ByteString.php', + 'Symfony\\Component\\String\\CodePointString' => __DIR__ . '/..' . '/symfony/string/CodePointString.php', + 'Symfony\\Component\\String\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/string/Exception/ExceptionInterface.php', + 'Symfony\\Component\\String\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/string/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\String\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/string/Exception/RuntimeException.php', + 'Symfony\\Component\\String\\Inflector\\EnglishInflector' => __DIR__ . '/..' . '/symfony/string/Inflector/EnglishInflector.php', + 'Symfony\\Component\\String\\Inflector\\FrenchInflector' => __DIR__ . '/..' . '/symfony/string/Inflector/FrenchInflector.php', + 'Symfony\\Component\\String\\Inflector\\InflectorInterface' => __DIR__ . '/..' . '/symfony/string/Inflector/InflectorInterface.php', + 'Symfony\\Component\\String\\LazyString' => __DIR__ . '/..' . '/symfony/string/LazyString.php', + 'Symfony\\Component\\String\\Slugger\\AsciiSlugger' => __DIR__ . '/..' . '/symfony/string/Slugger/AsciiSlugger.php', + 'Symfony\\Component\\String\\Slugger\\SluggerInterface' => __DIR__ . '/..' . '/symfony/string/Slugger/SluggerInterface.php', + 'Symfony\\Component\\String\\UnicodeString' => __DIR__ . '/..' . '/symfony/string/UnicodeString.php', 'Symfony\\Component\\Translation\\Catalogue\\AbstractOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/AbstractOperation.php', 'Symfony\\Component\\Translation\\Catalogue\\MergeOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/MergeOperation.php', 'Symfony\\Component\\Translation\\Catalogue\\OperationInterface' => __DIR__ . '/..' . '/symfony/translation/Catalogue/OperationInterface.php', 'Symfony\\Component\\Translation\\Catalogue\\TargetOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/TargetOperation.php', + 'Symfony\\Component\\Translation\\Command\\TranslationPullCommand' => __DIR__ . '/..' . '/symfony/translation/Command/TranslationPullCommand.php', + 'Symfony\\Component\\Translation\\Command\\TranslationPushCommand' => __DIR__ . '/..' . '/symfony/translation/Command/TranslationPushCommand.php', + 'Symfony\\Component\\Translation\\Command\\TranslationTrait' => __DIR__ . '/..' . '/symfony/translation/Command/TranslationTrait.php', 'Symfony\\Component\\Translation\\Command\\XliffLintCommand' => __DIR__ . '/..' . '/symfony/translation/Command/XliffLintCommand.php', 'Symfony\\Component\\Translation\\DataCollectorTranslator' => __DIR__ . '/..' . '/symfony/translation/DataCollectorTranslator.php', 'Symfony\\Component\\Translation\\DataCollector\\TranslationDataCollector' => __DIR__ . '/..' . '/symfony/translation/DataCollector/TranslationDataCollector.php', @@ -4531,23 +5339,26 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\Translation\\Dumper\\XliffFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/XliffFileDumper.php', 'Symfony\\Component\\Translation\\Dumper\\YamlFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/YamlFileDumper.php', 'Symfony\\Component\\Translation\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/translation/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Translation\\Exception\\IncompleteDsnException' => __DIR__ . '/..' . '/symfony/translation/Exception/IncompleteDsnException.php', 'Symfony\\Component\\Translation\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/translation/Exception/InvalidArgumentException.php', 'Symfony\\Component\\Translation\\Exception\\InvalidResourceException' => __DIR__ . '/..' . '/symfony/translation/Exception/InvalidResourceException.php', 'Symfony\\Component\\Translation\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/translation/Exception/LogicException.php', + 'Symfony\\Component\\Translation\\Exception\\MissingRequiredOptionException' => __DIR__ . '/..' . '/symfony/translation/Exception/MissingRequiredOptionException.php', 'Symfony\\Component\\Translation\\Exception\\NotFoundResourceException' => __DIR__ . '/..' . '/symfony/translation/Exception/NotFoundResourceException.php', + 'Symfony\\Component\\Translation\\Exception\\ProviderException' => __DIR__ . '/..' . '/symfony/translation/Exception/ProviderException.php', + 'Symfony\\Component\\Translation\\Exception\\ProviderExceptionInterface' => __DIR__ . '/..' . '/symfony/translation/Exception/ProviderExceptionInterface.php', 'Symfony\\Component\\Translation\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/translation/Exception/RuntimeException.php', + 'Symfony\\Component\\Translation\\Exception\\UnsupportedSchemeException' => __DIR__ . '/..' . '/symfony/translation/Exception/UnsupportedSchemeException.php', 'Symfony\\Component\\Translation\\Extractor\\AbstractFileExtractor' => __DIR__ . '/..' . '/symfony/translation/Extractor/AbstractFileExtractor.php', 'Symfony\\Component\\Translation\\Extractor\\ChainExtractor' => __DIR__ . '/..' . '/symfony/translation/Extractor/ChainExtractor.php', 'Symfony\\Component\\Translation\\Extractor\\ExtractorInterface' => __DIR__ . '/..' . '/symfony/translation/Extractor/ExtractorInterface.php', 'Symfony\\Component\\Translation\\Extractor\\PhpExtractor' => __DIR__ . '/..' . '/symfony/translation/Extractor/PhpExtractor.php', 'Symfony\\Component\\Translation\\Extractor\\PhpStringTokenParser' => __DIR__ . '/..' . '/symfony/translation/Extractor/PhpStringTokenParser.php', - 'Symfony\\Component\\Translation\\Formatter\\ChoiceMessageFormatterInterface' => __DIR__ . '/..' . '/symfony/translation/Formatter/ChoiceMessageFormatterInterface.php', 'Symfony\\Component\\Translation\\Formatter\\IntlFormatter' => __DIR__ . '/..' . '/symfony/translation/Formatter/IntlFormatter.php', 'Symfony\\Component\\Translation\\Formatter\\IntlFormatterInterface' => __DIR__ . '/..' . '/symfony/translation/Formatter/IntlFormatterInterface.php', 'Symfony\\Component\\Translation\\Formatter\\MessageFormatter' => __DIR__ . '/..' . '/symfony/translation/Formatter/MessageFormatter.php', 'Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface' => __DIR__ . '/..' . '/symfony/translation/Formatter/MessageFormatterInterface.php', 'Symfony\\Component\\Translation\\IdentityTranslator' => __DIR__ . '/..' . '/symfony/translation/IdentityTranslator.php', - 'Symfony\\Component\\Translation\\Interval' => __DIR__ . '/..' . '/symfony/translation/Interval.php', 'Symfony\\Component\\Translation\\Loader\\ArrayLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/ArrayLoader.php', 'Symfony\\Component\\Translation\\Loader\\CsvFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/CsvFileLoader.php', 'Symfony\\Component\\Translation\\Loader\\FileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/FileLoader.php', @@ -4565,14 +5376,25 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\Translation\\LoggingTranslator' => __DIR__ . '/..' . '/symfony/translation/LoggingTranslator.php', 'Symfony\\Component\\Translation\\MessageCatalogue' => __DIR__ . '/..' . '/symfony/translation/MessageCatalogue.php', 'Symfony\\Component\\Translation\\MessageCatalogueInterface' => __DIR__ . '/..' . '/symfony/translation/MessageCatalogueInterface.php', - 'Symfony\\Component\\Translation\\MessageSelector' => __DIR__ . '/..' . '/symfony/translation/MessageSelector.php', 'Symfony\\Component\\Translation\\MetadataAwareInterface' => __DIR__ . '/..' . '/symfony/translation/MetadataAwareInterface.php', - 'Symfony\\Component\\Translation\\PluralizationRules' => __DIR__ . '/..' . '/symfony/translation/PluralizationRules.php', + 'Symfony\\Component\\Translation\\Provider\\AbstractProviderFactory' => __DIR__ . '/..' . '/symfony/translation/Provider/AbstractProviderFactory.php', + 'Symfony\\Component\\Translation\\Provider\\Dsn' => __DIR__ . '/..' . '/symfony/translation/Provider/Dsn.php', + 'Symfony\\Component\\Translation\\Provider\\FilteringProvider' => __DIR__ . '/..' . '/symfony/translation/Provider/FilteringProvider.php', + 'Symfony\\Component\\Translation\\Provider\\NullProvider' => __DIR__ . '/..' . '/symfony/translation/Provider/NullProvider.php', + 'Symfony\\Component\\Translation\\Provider\\NullProviderFactory' => __DIR__ . '/..' . '/symfony/translation/Provider/NullProviderFactory.php', + 'Symfony\\Component\\Translation\\Provider\\ProviderFactoryInterface' => __DIR__ . '/..' . '/symfony/translation/Provider/ProviderFactoryInterface.php', + 'Symfony\\Component\\Translation\\Provider\\ProviderInterface' => __DIR__ . '/..' . '/symfony/translation/Provider/ProviderInterface.php', + 'Symfony\\Component\\Translation\\Provider\\TranslationProviderCollection' => __DIR__ . '/..' . '/symfony/translation/Provider/TranslationProviderCollection.php', + 'Symfony\\Component\\Translation\\Provider\\TranslationProviderCollectionFactory' => __DIR__ . '/..' . '/symfony/translation/Provider/TranslationProviderCollectionFactory.php', + 'Symfony\\Component\\Translation\\PseudoLocalizationTranslator' => __DIR__ . '/..' . '/symfony/translation/PseudoLocalizationTranslator.php', 'Symfony\\Component\\Translation\\Reader\\TranslationReader' => __DIR__ . '/..' . '/symfony/translation/Reader/TranslationReader.php', 'Symfony\\Component\\Translation\\Reader\\TranslationReaderInterface' => __DIR__ . '/..' . '/symfony/translation/Reader/TranslationReaderInterface.php', + 'Symfony\\Component\\Translation\\Test\\ProviderFactoryTestCase' => __DIR__ . '/..' . '/symfony/translation/Test/ProviderFactoryTestCase.php', + 'Symfony\\Component\\Translation\\Test\\ProviderTestCase' => __DIR__ . '/..' . '/symfony/translation/Test/ProviderTestCase.php', + 'Symfony\\Component\\Translation\\TranslatableMessage' => __DIR__ . '/..' . '/symfony/translation/TranslatableMessage.php', 'Symfony\\Component\\Translation\\Translator' => __DIR__ . '/..' . '/symfony/translation/Translator.php', + 'Symfony\\Component\\Translation\\TranslatorBag' => __DIR__ . '/..' . '/symfony/translation/TranslatorBag.php', 'Symfony\\Component\\Translation\\TranslatorBagInterface' => __DIR__ . '/..' . '/symfony/translation/TranslatorBagInterface.php', - 'Symfony\\Component\\Translation\\TranslatorInterface' => __DIR__ . '/..' . '/symfony/translation/TranslatorInterface.php', 'Symfony\\Component\\Translation\\Util\\ArrayConverter' => __DIR__ . '/..' . '/symfony/translation/Util/ArrayConverter.php', 'Symfony\\Component\\Translation\\Util\\XliffUtils' => __DIR__ . '/..' . '/symfony/translation/Util/XliffUtils.php', 'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => __DIR__ . '/..' . '/symfony/translation/Writer/TranslationWriter.php', @@ -4591,14 +5413,19 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\VarDumper\\Caster\\DsPairStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/DsPairStub.php', 'Symfony\\Component\\VarDumper\\Caster\\EnumStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/EnumStub.php', 'Symfony\\Component\\VarDumper\\Caster\\ExceptionCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ExceptionCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\FiberCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/FiberCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\FrameStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/FrameStub.php', 'Symfony\\Component\\VarDumper\\Caster\\GmpCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/GmpCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ImagineCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ImagineCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ImgStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ImgStub.php', 'Symfony\\Component\\VarDumper\\Caster\\IntlCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/IntlCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\LinkStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/LinkStub.php', 'Symfony\\Component\\VarDumper\\Caster\\MemcachedCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/MemcachedCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\MysqliCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/MysqliCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\PdoCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/PdoCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\PgSqlCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/PgSqlCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ProxyManagerCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ProxyManagerCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/RdKafkaCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\RedisCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/RedisCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ReflectionCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ResourceCaster.php', @@ -4606,6 +5433,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\VarDumper\\Caster\\StubCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/StubCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/SymfonyCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\TraceStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/TraceStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\UuidCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/UuidCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\XmlReaderCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/XmlReaderCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\XmlResourceCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/XmlResourceCaster.php', 'Symfony\\Component\\VarDumper\\Cloner\\AbstractCloner' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/AbstractCloner.php', @@ -4625,6 +5453,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\ContextProviderInterface' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php', 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\RequestContextProvider' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php', 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\SourceContextProvider' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ContextualizedDumper' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/ContextualizedDumper.php', 'Symfony\\Component\\VarDumper\\Dumper\\DataDumperInterface' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/DataDumperInterface.php', 'Symfony\\Component\\VarDumper\\Dumper\\HtmlDumper' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/HtmlDumper.php', 'Symfony\\Component\\VarDumper\\Dumper\\ServerDumper' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/ServerDumper.php', @@ -4633,8 +5462,25 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Component\\VarDumper\\Server\\DumpServer' => __DIR__ . '/..' . '/symfony/var-dumper/Server/DumpServer.php', 'Symfony\\Component\\VarDumper\\Test\\VarDumperTestTrait' => __DIR__ . '/..' . '/symfony/var-dumper/Test/VarDumperTestTrait.php', 'Symfony\\Component\\VarDumper\\VarDumper' => __DIR__ . '/..' . '/symfony/var-dumper/VarDumper.php', + 'Symfony\\Component\\VarExporter\\Exception\\ClassNotFoundException' => __DIR__ . '/..' . '/symfony/var-exporter/Exception/ClassNotFoundException.php', + 'Symfony\\Component\\VarExporter\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/var-exporter/Exception/ExceptionInterface.php', + 'Symfony\\Component\\VarExporter\\Exception\\NotInstantiableTypeException' => __DIR__ . '/..' . '/symfony/var-exporter/Exception/NotInstantiableTypeException.php', + 'Symfony\\Component\\VarExporter\\Instantiator' => __DIR__ . '/..' . '/symfony/var-exporter/Instantiator.php', + 'Symfony\\Component\\VarExporter\\Internal\\Exporter' => __DIR__ . '/..' . '/symfony/var-exporter/Internal/Exporter.php', + 'Symfony\\Component\\VarExporter\\Internal\\Hydrator' => __DIR__ . '/..' . '/symfony/var-exporter/Internal/Hydrator.php', + 'Symfony\\Component\\VarExporter\\Internal\\Reference' => __DIR__ . '/..' . '/symfony/var-exporter/Internal/Reference.php', + 'Symfony\\Component\\VarExporter\\Internal\\Registry' => __DIR__ . '/..' . '/symfony/var-exporter/Internal/Registry.php', + 'Symfony\\Component\\VarExporter\\Internal\\Values' => __DIR__ . '/..' . '/symfony/var-exporter/Internal/Values.php', + 'Symfony\\Component\\VarExporter\\VarExporter' => __DIR__ . '/..' . '/symfony/var-exporter/VarExporter.php', + 'Symfony\\Contracts\\Cache\\CacheInterface' => __DIR__ . '/..' . '/symfony/cache-contracts/CacheInterface.php', + 'Symfony\\Contracts\\Cache\\CacheTrait' => __DIR__ . '/..' . '/symfony/cache-contracts/CacheTrait.php', + 'Symfony\\Contracts\\Cache\\CallbackInterface' => __DIR__ . '/..' . '/symfony/cache-contracts/CallbackInterface.php', + 'Symfony\\Contracts\\Cache\\ItemInterface' => __DIR__ . '/..' . '/symfony/cache-contracts/ItemInterface.php', + 'Symfony\\Contracts\\Cache\\TagAwareCacheInterface' => __DIR__ . '/..' . '/symfony/cache-contracts/TagAwareCacheInterface.php', 'Symfony\\Contracts\\EventDispatcher\\Event' => __DIR__ . '/..' . '/symfony/event-dispatcher-contracts/Event.php', 'Symfony\\Contracts\\EventDispatcher\\EventDispatcherInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher-contracts/EventDispatcherInterface.php', + 'Symfony\\Contracts\\Service\\Attribute\\Required' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/Required.php', + 'Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/SubscribedService.php', 'Symfony\\Contracts\\Service\\ResetInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ResetInterface.php', 'Symfony\\Contracts\\Service\\ServiceLocatorTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceLocatorTrait.php', 'Symfony\\Contracts\\Service\\ServiceProviderInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceProviderInterface.php', @@ -4643,14 +5489,24 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Symfony\\Contracts\\Service\\Test\\ServiceLocatorTest' => __DIR__ . '/..' . '/symfony/service-contracts/Test/ServiceLocatorTest.php', 'Symfony\\Contracts\\Translation\\LocaleAwareInterface' => __DIR__ . '/..' . '/symfony/translation-contracts/LocaleAwareInterface.php', 'Symfony\\Contracts\\Translation\\Test\\TranslatorTest' => __DIR__ . '/..' . '/symfony/translation-contracts/Test/TranslatorTest.php', + 'Symfony\\Contracts\\Translation\\TranslatableInterface' => __DIR__ . '/..' . '/symfony/translation-contracts/TranslatableInterface.php', 'Symfony\\Contracts\\Translation\\TranslatorInterface' => __DIR__ . '/..' . '/symfony/translation-contracts/TranslatorInterface.php', 'Symfony\\Contracts\\Translation\\TranslatorTrait' => __DIR__ . '/..' . '/symfony/translation-contracts/TranslatorTrait.php', 'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php', 'Symfony\\Polyfill\\Iconv\\Iconv' => __DIR__ . '/..' . '/symfony/polyfill-iconv/Iconv.php', + 'Symfony\\Polyfill\\Intl\\Grapheme\\Grapheme' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/Grapheme.php', 'Symfony\\Polyfill\\Intl\\Idn\\Idn' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/Idn.php', + 'Symfony\\Polyfill\\Intl\\Idn\\Info' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/Info.php', + 'Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\DisallowedRanges' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php', + 'Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\Regex' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/Resources/unidata/Regex.php', + 'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Normalizer.php', 'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php', 'Symfony\\Polyfill\\Php72\\Php72' => __DIR__ . '/..' . '/symfony/polyfill-php72/Php72.php', 'Symfony\\Polyfill\\Php73\\Php73' => __DIR__ . '/..' . '/symfony/polyfill-php73/Php73.php', + 'Symfony\\Polyfill\\Php80\\Php80' => __DIR__ . '/..' . '/symfony/polyfill-php80/Php80.php', + 'Symfony\\Polyfill\\Php80\\PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/PhpToken.php', + 'Symfony\\Polyfill\\Php81\\Php81' => __DIR__ . '/..' . '/symfony/polyfill-php81/Php81.php', + 'Symfony\\Thanks\\Command\\FundCommand' => __DIR__ . '/..' . '/symfony/thanks/src/Command/FundCommand.php', 'Symfony\\Thanks\\Command\\ThanksCommand' => __DIR__ . '/..' . '/symfony/thanks/src/Command/ThanksCommand.php', 'Symfony\\Thanks\\GitHubClient' => __DIR__ . '/..' . '/symfony/thanks/src/GitHubClient.php', 'Symfony\\Thanks\\Thanks' => __DIR__ . '/..' . '/symfony/thanks/src/Thanks.php', @@ -4673,11 +5529,12 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'TijsVerkoyen\\CssToInlineStyles\\Css\\Property\\Property' => __DIR__ . '/..' . '/tijsverkoyen/css-to-inline-styles/src/Css/Property/Property.php', 'TijsVerkoyen\\CssToInlineStyles\\Css\\Rule\\Processor' => __DIR__ . '/..' . '/tijsverkoyen/css-to-inline-styles/src/Css/Rule/Processor.php', 'TijsVerkoyen\\CssToInlineStyles\\Css\\Rule\\Rule' => __DIR__ . '/..' . '/tijsverkoyen/css-to-inline-styles/src/Css/Rule/Rule.php', - 'UpdateHelper\\ComposerPlugin' => __DIR__ . '/..' . '/kylekatarnls/update-helper/src/UpdateHelper/ComposerPlugin.php', - 'UpdateHelper\\UpdateHelper' => __DIR__ . '/..' . '/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelper.php', - 'UpdateHelper\\UpdateHelperInterface' => __DIR__ . '/..' . '/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelperInterface.php', + 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', 'UsersSeeder' => __DIR__ . '/../..' . '/database/seeds/UsersSeeder.php', + 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', 'Webmozart\\Assert\\Assert' => __DIR__ . '/..' . '/webmozart/assert/src/Assert.php', + 'Webmozart\\Assert\\InvalidArgumentException' => __DIR__ . '/..' . '/webmozart/assert/src/InvalidArgumentException.php', + 'Webmozart\\Assert\\Mixin' => __DIR__ . '/..' . '/webmozart/assert/src/Mixin.php', 'Whoops\\Exception\\ErrorException' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Exception/ErrorException.php', 'Whoops\\Exception\\Formatter' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Exception/Formatter.php', 'Whoops\\Exception\\Frame' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Exception/Frame.php', @@ -4696,50 +5553,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'Whoops\\Util\\Misc' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Util/Misc.php', 'Whoops\\Util\\SystemFacade' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Util/SystemFacade.php', 'Whoops\\Util\\TemplateHelper' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Util/TemplateHelper.php', - 'XdgBaseDir\\Xdg' => __DIR__ . '/..' . '/dnoegel/php-xdg-base-dir/src/Xdg.php', - 'Zend\\Diactoros\\AbstractSerializer' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/AbstractSerializer.php', - 'Zend\\Diactoros\\CallbackStream' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/CallbackStream.php', - 'Zend\\Diactoros\\Exception\\DeserializationException' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/DeserializationException.php', - 'Zend\\Diactoros\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/ExceptionInterface.php', - 'Zend\\Diactoros\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/InvalidArgumentException.php', - 'Zend\\Diactoros\\Exception\\InvalidStreamPointerPositionException' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/InvalidStreamPointerPositionException.php', - 'Zend\\Diactoros\\Exception\\SerializationException' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/SerializationException.php', - 'Zend\\Diactoros\\Exception\\UnreadableStreamException' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/UnreadableStreamException.php', - 'Zend\\Diactoros\\Exception\\UnrecognizedProtocolVersionException' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/UnrecognizedProtocolVersionException.php', - 'Zend\\Diactoros\\Exception\\UnrewindableStreamException' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/UnrewindableStreamException.php', - 'Zend\\Diactoros\\Exception\\UnseekableStreamException' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/UnseekableStreamException.php', - 'Zend\\Diactoros\\Exception\\UntellableStreamException' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/UntellableStreamException.php', - 'Zend\\Diactoros\\Exception\\UnwritableStreamException' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/UnwritableStreamException.php', - 'Zend\\Diactoros\\Exception\\UploadedFileAlreadyMovedException' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/UploadedFileAlreadyMovedException.php', - 'Zend\\Diactoros\\Exception\\UploadedFileErrorException' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/UploadedFileErrorException.php', - 'Zend\\Diactoros\\HeaderSecurity' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/HeaderSecurity.php', - 'Zend\\Diactoros\\MessageTrait' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/MessageTrait.php', - 'Zend\\Diactoros\\PhpInputStream' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/PhpInputStream.php', - 'Zend\\Diactoros\\RelativeStream' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/RelativeStream.php', - 'Zend\\Diactoros\\Request' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Request.php', - 'Zend\\Diactoros\\RequestFactory' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/RequestFactory.php', - 'Zend\\Diactoros\\RequestTrait' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/RequestTrait.php', - 'Zend\\Diactoros\\Request\\ArraySerializer' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Request/ArraySerializer.php', - 'Zend\\Diactoros\\Request\\Serializer' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Request/Serializer.php', - 'Zend\\Diactoros\\Response' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response.php', - 'Zend\\Diactoros\\ResponseFactory' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/ResponseFactory.php', - 'Zend\\Diactoros\\Response\\ArraySerializer' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/ArraySerializer.php', - 'Zend\\Diactoros\\Response\\EmptyResponse' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/EmptyResponse.php', - 'Zend\\Diactoros\\Response\\HtmlResponse' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/HtmlResponse.php', - 'Zend\\Diactoros\\Response\\InjectContentTypeTrait' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/InjectContentTypeTrait.php', - 'Zend\\Diactoros\\Response\\JsonResponse' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/JsonResponse.php', - 'Zend\\Diactoros\\Response\\RedirectResponse' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/RedirectResponse.php', - 'Zend\\Diactoros\\Response\\Serializer' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/Serializer.php', - 'Zend\\Diactoros\\Response\\TextResponse' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/TextResponse.php', - 'Zend\\Diactoros\\Response\\XmlResponse' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/XmlResponse.php', - 'Zend\\Diactoros\\ServerRequest' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/ServerRequest.php', - 'Zend\\Diactoros\\ServerRequestFactory' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/ServerRequestFactory.php', - 'Zend\\Diactoros\\Stream' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Stream.php', - 'Zend\\Diactoros\\StreamFactory' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/StreamFactory.php', - 'Zend\\Diactoros\\UploadedFile' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/UploadedFile.php', - 'Zend\\Diactoros\\UploadedFileFactory' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/UploadedFileFactory.php', - 'Zend\\Diactoros\\Uri' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Uri.php', - 'Zend\\Diactoros\\UriFactory' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/UriFactory.php', 'phpDocumentor\\Reflection\\DocBlock' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock.php', 'phpDocumentor\\Reflection\\DocBlockFactory' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlockFactory.php', 'phpDocumentor\\Reflection\\DocBlockFactoryInterface' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php', @@ -4756,11 +5569,11 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Deprecated' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Example' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Factory\\StaticMethod' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php', - 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Factory\\Strategy' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Strategy.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Formatter' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Formatter\\AlignFormatter' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Formatter\\PassthroughFormatter' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Generic' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tags\\InvalidTag' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/InvalidTag.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Link' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Method' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Param' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php', @@ -4774,29 +5587,56 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'phpDocumentor\\Reflection\\DocBlock\\Tags\\See' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Since' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Source' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php', + 'phpDocumentor\\Reflection\\DocBlock\\Tags\\TagWithType' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/TagWithType.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Throws' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Uses' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Var_' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php', 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Version' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php', 'phpDocumentor\\Reflection\\Element' => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src/Element.php', + 'phpDocumentor\\Reflection\\Exception\\PcreException' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/Exception/PcreException.php', 'phpDocumentor\\Reflection\\File' => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src/File.php', 'phpDocumentor\\Reflection\\Fqsen' => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src/Fqsen.php', 'phpDocumentor\\Reflection\\FqsenResolver' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/FqsenResolver.php', 'phpDocumentor\\Reflection\\Location' => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src/Location.php', 'phpDocumentor\\Reflection\\Project' => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src/Project.php', 'phpDocumentor\\Reflection\\ProjectFactory' => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src/ProjectFactory.php', + 'phpDocumentor\\Reflection\\PseudoType' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoType.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\CallableString' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/CallableString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\False_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/False_.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\HtmlEscapedString' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/HtmlEscapedString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\IntegerRange' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/IntegerRange.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\List_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/List_.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\LiteralString' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/LiteralString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\LowercaseString' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/LowercaseString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\NegativeInteger' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/NegativeInteger.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\NonEmptyLowercaseString' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyLowercaseString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\NonEmptyString' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\NumericString' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/NumericString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\Numeric_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/Numeric_.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\PositiveInteger' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/PositiveInteger.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\TraitString' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/TraitString.php', + 'phpDocumentor\\Reflection\\PseudoTypes\\True_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/PseudoTypes/True_.php', 'phpDocumentor\\Reflection\\Type' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Type.php', 'phpDocumentor\\Reflection\\TypeResolver' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/TypeResolver.php', + 'phpDocumentor\\Reflection\\Types\\AbstractList' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/AbstractList.php', + 'phpDocumentor\\Reflection\\Types\\AggregatedType' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/AggregatedType.php', + 'phpDocumentor\\Reflection\\Types\\ArrayKey' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/ArrayKey.php', 'phpDocumentor\\Reflection\\Types\\Array_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Array_.php', 'phpDocumentor\\Reflection\\Types\\Boolean' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Boolean.php', 'phpDocumentor\\Reflection\\Types\\Callable_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Callable_.php', + 'phpDocumentor\\Reflection\\Types\\ClassString' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/ClassString.php', + 'phpDocumentor\\Reflection\\Types\\Collection' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Collection.php', 'phpDocumentor\\Reflection\\Types\\Compound' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Compound.php', 'phpDocumentor\\Reflection\\Types\\Context' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Context.php', 'phpDocumentor\\Reflection\\Types\\ContextFactory' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/ContextFactory.php', + 'phpDocumentor\\Reflection\\Types\\Expression' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Expression.php', 'phpDocumentor\\Reflection\\Types\\Float_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Float_.php', 'phpDocumentor\\Reflection\\Types\\Integer' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Integer.php', + 'phpDocumentor\\Reflection\\Types\\InterfaceString' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/InterfaceString.php', + 'phpDocumentor\\Reflection\\Types\\Intersection' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Intersection.php', 'phpDocumentor\\Reflection\\Types\\Iterable_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Iterable_.php', 'phpDocumentor\\Reflection\\Types\\Mixed_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Mixed_.php', + 'phpDocumentor\\Reflection\\Types\\Never_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Never_.php', 'phpDocumentor\\Reflection\\Types\\Null_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Null_.php', 'phpDocumentor\\Reflection\\Types\\Nullable' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Nullable.php', 'phpDocumentor\\Reflection\\Types\\Object_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Object_.php', @@ -4808,6 +5648,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf 'phpDocumentor\\Reflection\\Types\\String_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/String_.php', 'phpDocumentor\\Reflection\\Types\\This' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/This.php', 'phpDocumentor\\Reflection\\Types\\Void_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Void_.php', + 'phpDocumentor\\Reflection\\Utils' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/Utils.php', + 'voku\\helper\\ASCII' => __DIR__ . '/..' . '/voku/portable-ascii/src/voku/helper/ASCII.php', ); public static function getInitializer(ClassLoader $loader) @@ -4815,7 +5657,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf return \Closure::bind(function () use ($loader) { $loader->prefixLengthsPsr4 = ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf::$prefixLengthsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf::$prefixDirsPsr4; - $loader->fallbackDirsPsr4 = ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf::$fallbackDirsPsr4; $loader->prefixesPsr0 = ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf::$prefixesPsr0; $loader->classMap = ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf::$classMap; diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 8fbc7aa3..9a071bde 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1,6366 +1,8368 @@ -[ - { - "name": "clue/stream-filter", - "version": "v1.4.1", - "version_normalized": "1.4.1.0", - "source": { - "type": "git", - "url": "https://github.com/clue/php-stream-filter.git", - "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", - "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "^5.0 || ^4.8" - }, - "time": "2019-04-09T12:31:48+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Clue\\StreamFilter\\": "src/" +{ + "packages": [ + { + "name": "brick/math", + "version": "0.9.3", + "version_normalized": "0.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@lueck.tv" - } - ], - "description": "A simple and modern approach to stream filtering in PHP", - "homepage": "https://github.com/clue/php-stream-filter", - "keywords": [ - "bucket brigade", - "callback", - "filter", - "php_user_filter", - "stream", - "stream_filter_append", - "stream_filter_register" - ] - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "0.1", - "version_normalized": "0.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "@stable" - }, - "time": "2014-10-24T07:27:01+00:00", - "type": "project", - "installation-source": "dist", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php" - }, - { - "name": "doctrine/inflector", - "version": "v1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", - "reference": "5527a48b7313d15261292c149e55e26eae771b0a", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^6.2" - }, - "time": "2018-01-09T20:05:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", + "shasum": "" }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" + "require": { + "ext-json": "*", + "php": "^7.1 || ^8.0" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "vimeo/psalm": "4.9.2" }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "inflection", - "pluralize", - "singularize", - "string" - ] - }, - { - "name": "doctrine/instantiator", - "version": "1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "a2c590166b2133a4633738648b6b064edae0814a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", - "reference": "a2c590166b2133a4633738648b6b064edae0814a", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" - }, - "time": "2019-03-17T17:37:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ] - }, - { - "name": "doctrine/lexer", - "version": "1.0.2", - "version_normalized": "1.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", - "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "^4.5" - }, - "time": "2019-06-08T11:03:04+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ] - }, - { - "name": "dragonmantank/cron-expression", - "version": "v2.3.0", - "version_normalized": "2.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", - "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.4|^7.0" - }, - "time": "2019-03-31T00:38:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Chris Tankersley", - "email": "chris@ctankersley.com", - "homepage": "https://github.com/dragonmantank" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ] - }, - { - "name": "egulias/email-validator", - "version": "2.1.8", - "version_normalized": "2.1.8.0", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "c26463ff9241f27907112fbcd0c86fa670cfef98" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/c26463ff9241f27907112fbcd0c86fa670cfef98", - "reference": "c26463ff9241f27907112fbcd0c86fa670cfef98", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1.0.1", - "php": ">= 5.5" - }, - "require-dev": { - "dominicsayers/isemail": "dev-master", - "phpunit/phpunit": "^4.8.35||^5.7||^6.0", - "satooshi/php-coveralls": "^1.0.1" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "time": "2019-05-16T22:02:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ] - }, - { - "name": "erusev/parsedown", - "version": "1.7.3", - "version_normalized": "1.7.3.0", - "source": { - "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7", - "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35" - }, - "time": "2019-03-17T18:48:37+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "Parsedown": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" - } - ], - "description": "Parser for Markdown.", - "homepage": "http://parsedown.org", - "keywords": [ - "markdown", - "parser" - ] - }, - { - "name": "fideloper/proxy", - "version": "4.1.0", - "version_normalized": "4.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/fideloper/TrustedProxy.git", - "reference": "177c79a2d1f9970f89ee2fb4c12b429af38b6dfb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/177c79a2d1f9970f89ee2fb4c12b429af38b6dfb", - "reference": "177c79a2d1f9970f89ee2fb4c12b429af38b6dfb", - "shasum": "" - }, - "require": { - "illuminate/contracts": "~5.0", - "php": ">=5.4.0" - }, - "require-dev": { - "illuminate/http": "~5.6", - "mockery/mockery": "~1.0", - "phpunit/phpunit": "^6.0" - }, - "time": "2019-01-10T14:06:47+00:00", - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Fideloper\\Proxy\\TrustedProxyServiceProvider" - ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Fideloper\\Proxy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Fidao", - "email": "fideloper@gmail.com" - } - ], - "description": "Set trusted proxies for Laravel", - "keywords": [ - "load balancing", - "proxy", - "trusted proxy" - ] - }, - { - "name": "filp/whoops", - "version": "2.3.1", - "version_normalized": "2.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/bc0fd11bc455cc20ee4b5edabc63ebbf859324c7", - "reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7", - "shasum": "" - }, - "require": { - "php": "^5.5.9 || ^7.0", - "psr/log": "^1.0.1" - }, - "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" - }, - "time": "2018-10-23T09:00:00+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Whoops\\": "src/Whoops/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" - } - ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", - "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" - ] - }, - { - "name": "fzaninotto/faker", - "version": "v1.8.0", - "version_normalized": "1.8.0.0", - "source": { - "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de", - "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^1.5" - }, - "time": "2018-07-12T10:23:15+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ] - }, - { - "name": "graham-campbell/cache-plugin", - "version": "v1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Cache-Plugin.git", - "reference": "7090dd5e4a07f5c9c8e8a4ff65c3c57dab536b78" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Cache-Plugin/zipball/7090dd5e4a07f5c9c8e8a4ff65c3c57dab536b78", - "reference": "7090dd5e4a07f5c9c8e8a4ff65c3c57dab536b78", - "shasum": "" - }, - "require": { - "php": "^7.0", - "php-http/cache-plugin": "^1.6", - "php-http/client-common": "^1.9|^2.0", - "php-http/message-factory": "^1.0", - "psr/cache": "^1.0" - }, - "require-dev": { - "graham-campbell/analyzer": "^2.1", - "phpunit/phpunit": "^6.5|^7.0" - }, - "time": "2019-01-27T13:36:25+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GrahamCampbell\\CachePlugin\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "Provides A Simple HTTP Cache Plugin With Good Defaults", - "keywords": [ - "Cache Plugin", - "Cache-Plugin", - "Graham Campbell", - "GrahamCampbell", - "cache", - "http" - ] - }, - { - "name": "graham-campbell/github", - "version": "v7.7.0", - "version_normalized": "7.7.0.0", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Laravel-GitHub.git", - "reference": "eb61a055a03a5151cbbeedb3b0a357c4eeb2640d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-GitHub/zipball/eb61a055a03a5151cbbeedb3b0a357c4eeb2640d", - "reference": "eb61a055a03a5151cbbeedb3b0a357c4eeb2640d", - "shasum": "" - }, - "require": { - "graham-campbell/cache-plugin": "^1.0", - "graham-campbell/manager": "^4.2", - "illuminate/contracts": "5.5.*|5.6.*|5.7.*|5.8.*", - "illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*", - "knplabs/github-api": "2.11.*", - "php": "^7.1.3" - }, - "require-dev": { - "graham-campbell/analyzer": "^2.1", - "graham-campbell/testbench": "^5.2", - "madewithlove/illuminate-psr-cache-bridge": "^1.0", - "mockery/mockery": "^1.0", - "php-http/guzzle6-adapter": "^1.0", - "phpunit/phpunit": "^6.5|^7.0|^8.0" - }, - "suggest": { - "madewithlove/illuminate-psr-cache-bridge": "Allows caching GitHub HTTP requests" - }, - "time": "2019-04-07T11:08:44+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.7-dev" - }, - "laravel": { - "providers": [ - "GrahamCampbell\\GitHub\\GitHubServiceProvider" - ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GrahamCampbell\\GitHub\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "GitHub Is A GitHub Bridge For Laravel 5", - "keywords": [ - "Bridge", - "Graham Campbell", - "GrahamCampbell", - "Laravel GitHub", - "Laravel-GitHub", - "PHP GitHub API", - "framework", - "github", - "github bridge", - "laravel", - "php-github-api" - ] - }, - { - "name": "graham-campbell/manager", - "version": "v4.2.1", - "version_normalized": "4.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Laravel-Manager.git", - "reference": "ba3e236392665425723b2b967196aeeabc7f929f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Manager/zipball/ba3e236392665425723b2b967196aeeabc7f929f", - "reference": "ba3e236392665425723b2b967196aeeabc7f929f", - "shasum": "" - }, - "require": { - "illuminate/contracts": "5.5.*|5.6.*|5.7.*|5.8.*", - "illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*", - "php": "^7.1.3" - }, - "require-dev": { - "graham-campbell/analyzer": "^2.1", - "graham-campbell/testbench-core": "^3.0", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.5|^7.0|^8.0" - }, - "time": "2019-02-16T14:23:38+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GrahamCampbell\\Manager\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "Manager Provides Some Manager Functionality For Laravel 5", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Laravel Manager", - "Laravel-Manager", - "connector", - "framework", - "interface", - "laravel", - "manager" - ] - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.3.3", - "version_normalized": "6.3.3.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "shasum": "" - }, - "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "time": "2018-04-22T15:46:56+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ] - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "version_normalized": "1.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "time": "2016-12-20T10:07:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ] - }, - { - "name": "guzzlehttp/psr7", - "version": "1.5.2", - "version_normalized": "1.5.2.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "9f83dded91781a01c63574e387eaa769be769115" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", - "reference": "9f83dded91781a01c63574e387eaa769be769115", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "time": "2018-12-04T20:46:45+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ] - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.0", - "version_normalized": "2.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", - "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "1.3.3", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "^1.0" - }, - "time": "2016-01-20T08:20:44+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ] - }, - { - "name": "jakub-onderka/php-console-color", - "version": "v0.2", - "version_normalized": "0.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", - "reference": "d5deaecff52a0d61ccb613bb3804088da0307191" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191", - "reference": "d5deaecff52a0d61ccb613bb3804088da0307191", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "jakub-onderka/php-code-style": "1.0", - "jakub-onderka/php-parallel-lint": "1.0", - "jakub-onderka/php-var-dump-check": "0.*", - "phpunit/phpunit": "~4.3", - "squizlabs/php_codesniffer": "1.*" - }, - "time": "2018-09-29T17:23:10+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "JakubOnderka\\PhpConsoleColor\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "jakub.onderka@gmail.com" - } - ] - }, - { - "name": "jakub-onderka/php-console-highlighter", - "version": "v0.4", - "version_normalized": "0.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", - "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547", - "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "jakub-onderka/php-console-color": "~0.2", - "php": ">=5.4.0" - }, - "require-dev": { - "jakub-onderka/php-code-style": "~1.0", - "jakub-onderka/php-parallel-lint": "~1.0", - "jakub-onderka/php-var-dump-check": "~0.1", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" - }, - "time": "2018-09-29T18:48:56+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "JakubOnderka\\PhpConsoleHighlighter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "acci@acci.cz", - "homepage": "http://www.acci.cz/" - } - ], - "description": "Highlight PHP code in terminal" - }, - { - "name": "knplabs/github-api", - "version": "2.11.0", - "version_normalized": "2.11.0.0", - "source": { - "type": "git", - "url": "https://github.com/KnpLabs/php-github-api.git", - "reference": "7e67b4ccf9ef62fbd6321a314c61d3202c07b855" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/7e67b4ccf9ef62fbd6321a314c61d3202c07b855", - "reference": "7e67b4ccf9ef62fbd6321a314c61d3202c07b855", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0", - "php-http/cache-plugin": "^1.4", - "php-http/client-common": "^1.6", - "php-http/client-implementation": "^1.0", - "php-http/discovery": "^1.0", - "php-http/httplug": "^1.1", - "psr/cache": "^1.0", - "psr/http-message": "^1.0" - }, - "require-dev": { - "cache/array-adapter": "^0.4", - "guzzlehttp/psr7": "^1.2", - "php-http/guzzle6-adapter": "^1.0", - "php-http/mock-client": "^1.0", - "phpunit/phpunit": "^5.5 || ^6.0" - }, - "time": "2019-01-28T19:31:35+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.11.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Github\\": "lib/Github/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Thibault Duplessis", - "email": "thibault.duplessis@gmail.com", - "homepage": "http://ornicar.github.com" - }, - { - "name": "KnpLabs Team", - "homepage": "http://knplabs.com" - } - ], - "description": "GitHub API v3 client", - "homepage": "https://github.com/KnpLabs/php-github-api", - "keywords": [ - "api", - "gh", - "gist", - "github" - ] - }, - { - "name": "kylekatarnls/update-helper", - "version": "1.1.1", - "version_normalized": "1.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/kylekatarnls/update-helper.git", - "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/b34a46d7f5ec1795b4a15ac9d46b884377262df9", - "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1.0", - "php": ">=5.3.0" - }, - "require-dev": { - "codeclimate/php-test-reporter": "dev-master", - "composer/composer": "^2.0.x-dev", - "phpunit/phpunit": ">=4.8.35 <6.0" - }, - "time": "2019-06-05T08:34:23+00:00", - "type": "composer-plugin", - "extra": { - "class": "UpdateHelper\\ComposerPlugin" - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "UpdateHelper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kyle", - "email": "kylekatarnls@gmail.com" - } - ], - "description": "Update helper" - }, - { - "name": "laravel/framework", - "version": "v5.7.28", - "version_normalized": "5.7.28.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/8e69728f1c80a024588adbd24c65c4fcf9aa9192", - "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192", - "shasum": "" - }, - "require": { - "doctrine/inflector": "^1.1", - "dragonmantank/cron-expression": "^2.0", - "erusev/parsedown": "^1.7", - "ext-mbstring": "*", - "ext-openssl": "*", - "laravel/nexmo-notification-channel": "^1.0", - "laravel/slack-notification-channel": "^1.0", - "league/flysystem": "^1.0.8", - "monolog/monolog": "^1.12", - "nesbot/carbon": "^1.26.3", - "opis/closure": "^3.1", - "php": "^7.1.3", - "psr/container": "^1.0", - "psr/simple-cache": "^1.0", - "ramsey/uuid": "^3.7", - "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^4.1", - "symfony/debug": "^4.1", - "symfony/finder": "^4.1", - "symfony/http-foundation": "^4.1", - "symfony/http-kernel": "^4.1", - "symfony/process": "^4.1", - "symfony/routing": "^4.1", - "symfony/var-dumper": "^4.1", - "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "^2.2" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version" - }, - "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/dbal": "^2.6", - "filp/whoops": "^2.1.4", - "guzzlehttp/guzzle": "^6.3", - "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.0", - "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.7.*", - "pda/pheanstalk": "^3.0|^4.0", - "phpunit/phpunit": "^7.5", - "predis/predis": "^1.1.1", - "symfony/css-selector": "^4.1", - "symfony/dom-crawler": "^4.1", - "true/punycode": "^2.1" - }, - "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", - "ext-pcntl": "Required to use all features of the queue worker.", - "ext-posix": "Required to use all features of the queue worker.", - "filp/whoops": "Required for friendly error pages in development (^2.1.4).", - "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", - "laravel/tinker": "Required to use the tinker console command (^1.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "moontoast/math": "Required to use ordered UUIDs (^1.1).", - "nexmo/client": "Required to use the Nexmo transport (^1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0|^4.0).", - "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)." - }, - "time": "2019-02-26T15:41:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.7-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/Illuminate/Foundation/helpers.php", - "src/Illuminate/Support/helpers.php" - ], - "psr-4": { - "Illuminate\\": "src/Illuminate/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Laravel Framework.", - "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ] - }, - { - "name": "laravel/nexmo-notification-channel", - "version": "v1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/nexmo-notification-channel.git", - "reference": "03edd42a55b306ff980c9950899d5a2b03260d48" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/nexmo-notification-channel/zipball/03edd42a55b306ff980c9950899d5a2b03260d48", - "reference": "03edd42a55b306ff980c9950899d5a2b03260d48", - "shasum": "" - }, - "require": { - "nexmo/client": "^1.0", - "php": "^7.1.3" - }, - "require-dev": { - "illuminate/notifications": "~5.7", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.0" - }, - "time": "2018-12-04T12:57:08+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "laravel": { - "providers": [ - "Illuminate\\Notifications\\NexmoChannelServiceProvider" - ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Illuminate\\Notifications\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Nexmo Notification Channel for laravel.", - "keywords": [ - "laravel", - "nexmo", - "notifications" - ] - }, - { - "name": "laravel/slack-notification-channel", - "version": "v1.0.3", - "version_normalized": "1.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/slack-notification-channel.git", - "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/6e164293b754a95f246faf50ab2bbea3e4923cc9", - "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^6.0", - "php": "^7.1.3" - }, - "require-dev": { - "illuminate/notifications": "~5.7", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.0" - }, - "time": "2018-12-12T13:12:06+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "laravel": { - "providers": [ - "Illuminate\\Notifications\\SlackChannelServiceProvider" - ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Illuminate\\Notifications\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Slack Notification Channel for laravel.", - "keywords": [ - "laravel", - "notifications", - "slack" - ] - }, - { - "name": "laravel/tinker", - "version": "v1.0.8", - "version_normalized": "1.0.8.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/tinker.git", - "reference": "cafbf598a90acde68985660e79b2b03c5609a405" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/cafbf598a90acde68985660e79b2b03c5609a405", - "reference": "cafbf598a90acde68985660e79b2b03c5609a405", - "shasum": "" - }, - "require": { - "illuminate/console": "~5.1", - "illuminate/contracts": "~5.1", - "illuminate/support": "~5.1", - "php": ">=5.5.9", - "psy/psysh": "0.7.*|0.8.*|0.9.*", - "symfony/var-dumper": "~3.0|~4.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" - }, - "suggest": { - "illuminate/database": "The Illuminate Database package (~5.1)." - }, - "time": "2018-10-12T19:39:35+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "laravel": { - "providers": [ - "Laravel\\Tinker\\TinkerServiceProvider" - ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Laravel\\Tinker\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Powerful REPL for the Laravel framework.", - "keywords": [ - "REPL", - "Tinker", - "laravel", - "psysh" - ] - }, - { - "name": "laravelcollective/html", - "version": "v5.7.1", - "version_normalized": "5.7.1.0", - "source": { - "type": "git", - "url": "https://github.com/LaravelCollective/html.git", - "reference": "777b6d390811ba249255ed5750bf17a019cd88a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/LaravelCollective/html/zipball/777b6d390811ba249255ed5750bf17a019cd88a5", - "reference": "777b6d390811ba249255ed5750bf17a019cd88a5", - "shasum": "" - }, - "require": { - "illuminate/http": "5.7.*", - "illuminate/routing": "5.7.*", - "illuminate/session": "5.7.*", - "illuminate/support": "5.7.*", - "illuminate/view": "5.7.*", - "php": ">=7.1.3" - }, - "require-dev": { - "illuminate/database": "5.7.*", - "mockery/mockery": "~1.0", - "phpunit/phpunit": "~7.1" - }, - "time": "2018-09-05T18:32:53+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.7-dev" - }, - "laravel": { - "providers": [ - "Collective\\Html\\HtmlServiceProvider" - ], - "aliases": { - "Form": "Collective\\Html\\FormFacade", - "Html": "Collective\\Html\\HtmlFacade" + "time": "2021-08-15T20:50:18+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" } - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Collective\\Html\\": "src/" }, - "files": [ - "src/helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylorotwell@gmail.com" + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.9.3" }, - { - "name": "Adam Engebretson", - "email": "adam@laravelcollective.com" - } - ], - "description": "HTML and Form Builders for the Laravel Framework", - "homepage": "https://laravelcollective.com" - }, - { - "name": "lcobucci/jwt", - "version": "3.3.1", - "version_normalized": "3.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/lcobucci/jwt.git", - "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18" + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/brick/math", + "type": "tidelift" + } + ], + "install-path": "../brick/math" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", - "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "ext-openssl": "*", - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "mikey179/vfsstream": "~1.5", - "phpmd/phpmd": "~2.2", - "phpunit/php-invoker": "~1.1", - "phpunit/phpunit": "^5.7 || ^7.3", - "squizlabs/php_codesniffer": "~2.3" - }, - "time": "2019-05-24T18:30:49+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Lcobucci\\JWT\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Luís Otávio Cobucci Oblonczyk", - "email": "lcobucci@gmail.com", - "role": "Developer" - } - ], - "description": "A simple library to work with JSON Web Token and JSON Web Signature", - "keywords": [ - "JWS", - "jwt" - ] - }, - { - "name": "league/flysystem", - "version": "1.0.52", - "version_normalized": "1.0.52.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "c5a5097156387970e6f0ccfcdf03f752856f3391" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/c5a5097156387970e6f0ccfcdf03f752856f3391", - "reference": "c5a5097156387970e6f0ccfcdf03f752856f3391", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "php": ">=5.5.9" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" - }, - "require-dev": { - "phpspec/phpspec": "^3.4", - "phpunit/phpunit": "^5.7.10" - }, - "suggest": { - "ext-fileinfo": "Required for MimeType", - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" - }, - "time": "2019-05-20T20:21:14+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frenky.net" - } - ], - "description": "Filesystem abstraction: Many filesystems, one API.", - "keywords": [ - "Cloud Files", - "WebDAV", - "abstraction", - "aws", - "cloud", - "copy.com", - "dropbox", - "file systems", - "files", - "filesystem", - "filesystems", - "ftp", - "rackspace", - "remote", - "s3", - "sftp", - "storage" - ] - }, - { - "name": "mockery/mockery", - "version": "1.2.2", - "version_normalized": "1.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2", - "reference": "0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "~2.0", - "lib-pcre": ">=7.0", - "php": ">=5.6.0" - }, - "require-dev": { - "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0" - }, - "time": "2019-02-13T09:37:52+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Mockery": "library/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" + { + "name": "clue/stream-filter", + "version": "v1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://github.com/clue/stream-filter.git", + "reference": "d6169430c7731d8509da7aecd0af756a5747b78e" }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ] - }, - { - "name": "monolog/monolog", - "version": "1.24.0", - "version_normalized": "1.24.0.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "jakub-onderka/php-parallel-lint": "0.9", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "phpunit/phpunit": "~4.5", - "phpunit/phpunit-mock-objects": "2.3.0", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "^5.3|^6.0" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" - }, - "time": "2018-11-05T09:00:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ] - }, - { - "name": "myclabs/deep-copy", - "version": "1.9.1", - "version_normalized": "1.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "time": "2019-04-07T13:18:21+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/stream-filter/zipball/d6169430c7731d8509da7aecd0af756a5747b78e", + "reference": "d6169430c7731d8509da7aecd0af756a5747b78e", + "shasum": "" }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" + }, + "time": "2022-02-21T13:15:14+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "Clue\\StreamFilter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/php-stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "support": { + "issues": "https://github.com/clue/stream-filter/issues", + "source": "https://github.com/clue/stream-filter/tree/v1.6.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "install-path": "../clue/stream-filter" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ] - }, - { - "name": "nesbot/carbon", - "version": "1.38.4", - "version_normalized": "1.38.4.0", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad" + { + "name": "doctrine/inflector", + "version": "2.0.4", + "version_normalized": "2.0.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "vimeo/psalm": "^4.10" + }, + "time": "2021-10-22T20:16:43+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "install-path": "../doctrine/inflector" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8dd4172bfe1784952c4d58c4db725d183b1c23ad", - "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad", - "shasum": "" + { + "name": "doctrine/instantiator", + "version": "1.4.1", + "version_normalized": "1.4.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" + }, + "time": "2022-03-03T08:28:38+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "install-path": "../doctrine/instantiator" }, - "require": { - "kylekatarnls/update-helper": "^1.1", - "php": ">=5.3.9", - "symfony/translation": "~2.6 || ~3.0 || ~4.0" + { + "name": "doctrine/lexer", + "version": "1.2.3", + "version_normalized": "1.2.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "time": "2022-02-28T11:07:21+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "install-path": "../doctrine/lexer" }, - "require-dev": { - "composer/composer": "^1.2", - "friendsofphp/php-cs-fixer": "~2", - "phpunit/phpunit": "^4.8.35 || ^5.7" + { + "name": "dragonmantank/cron-expression", + "version": "v2.3.1", + "version_normalized": "2.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/65b2d8ee1f10915efb3b55597da3404f096acba2", + "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0" + }, + "time": "2020-10-13T00:52:37+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "install-path": "../dragonmantank/cron-expression" }, - "time": "2019-06-03T15:41:40+00:00", - "bin": [ - "bin/upgrade-carbon" - ], - "type": "library", - "extra": { - "update-helper": "Carbon\\Upgrade", - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" + { + "name": "egulias/email-validator", + "version": "2.1.25", + "version_normalized": "2.1.25.0", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "time": "2020-12-29T14:50:06+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "install-path": "../egulias/email-validator" + }, + { + "name": "fideloper/proxy", + "version": "4.4.1", + "version_normalized": "4.4.1.0", + "source": { + "type": "git", + "url": "https://github.com/fideloper/TrustedProxy.git", + "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/c073b2bd04d1c90e04dc1b787662b558dd65ade0", + "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0", + "php": ">=5.4.0" + }, + "require-dev": { + "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.0" + }, + "time": "2020-10-22T13:48:01+00:00", + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Fideloper\\Proxy\\TrustedProxyServiceProvider" + ] + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Fideloper\\Proxy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Fidao", + "email": "fideloper@gmail.com" + } + ], + "description": "Set trusted proxies for Laravel", + "keywords": [ + "load balancing", + "proxy", + "trusted proxy" + ], + "support": { + "issues": "https://github.com/fideloper/TrustedProxy/issues", + "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.1" + }, + "install-path": "../fideloper/proxy" + }, + { + "name": "filp/whoops", + "version": "2.14.5", + "version_normalized": "2.14.5.0", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "time": "2022-01-07T12:00:00+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.14.5" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "install-path": "../filp/whoops" + }, + { + "name": "fzaninotto/faker", + "version": "v1.9.2", + "version_normalized": "1.9.2.0", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e", + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^2.9.2" + }, + "time": "2020-12-11T09:56:16+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/fzaninotto/Faker/issues", + "source": "https://github.com/fzaninotto/Faker/tree/v1.9.2" + }, + "abandoned": true, + "install-path": "../fzaninotto/faker" + }, + { + "name": "graham-campbell/bounded-cache", + "version": "v1.1.3", + "version_normalized": "1.1.3.0", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Bounded-Cache.git", + "reference": "cbb12c2d7b2f93f4d8c2a1e46e16fb1e5842c92b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Bounded-Cache/zipball/cbb12c2d7b2f93f4d8c2a1e46e16fb1e5842c92b", + "reference": "cbb12c2d7b2f93f4d8c2a1e46e16fb1e5842c92b", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/simple-cache": "^1.0" + }, + "require-dev": { + "graham-campbell/analyzer": "^3.0", + "graham-campbell/testbench-core": "^3.1", + "mockery/mockery": "^1.3.2", + "phpunit/phpunit": "^8.5.8 || ^9.3.7" + }, + "time": "2021-11-21T20:48:45+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "GrahamCampbell\\BoundedCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "A Bounded TTL PSR-16 Cache Implementation", + "keywords": [ + "Bounded Cache", + "Bounded-Cache", + "Graham Campbell", + "GrahamCampbell", + "bounded", + "cache", + "psr16" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Bounded-Cache/issues", + "source": "https://github.com/GrahamCampbell/Bounded-Cache/tree/v1.1.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/bounded-cache", + "type": "tidelift" + } + ], + "install-path": "../graham-campbell/bounded-cache" + }, + { + "name": "graham-campbell/github", + "version": "v10.5.0", + "version_normalized": "10.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Laravel-GitHub.git", + "reference": "b88f6737bcc088a84ce3ec863a50afbc3ab8e867" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-GitHub/zipball/b88f6737bcc088a84ce3ec863a50afbc3ab8e867", + "reference": "b88f6737bcc088a84ce3ec863a50afbc3ab8e867", + "shasum": "" + }, + "require": { + "graham-campbell/bounded-cache": "^1.1", + "graham-campbell/manager": "^4.7", + "illuminate/contracts": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "illuminate/support": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "knplabs/github-api": "3.5.*", + "php": "^7.2.5 || ^8.0", + "symfony/cache": "^4.3 || ^5.0 || ^6.0" + }, + "require-dev": { + "graham-campbell/analyzer": "^3.0", + "graham-campbell/testbench": "^5.7", + "guzzlehttp/guzzle": "^7.4", + "http-interop/http-factory-guzzle": "^1.0", + "lcobucci/jwt": "^3.4 || ^4.0", + "mockery/mockery": "^1.3.1", + "phpunit/phpunit": "^8.5.8 || ^9.3.7" + }, + "suggest": { + "lcobucci/jwt": "Allows using the private key authenticator (^3.4 || ^4.0)" + }, + "time": "2022-01-24T03:22:38+00:00", + "type": "library", + "extra": { + "laravel": { + "providers": [ + "GrahamCampbell\\GitHub\\GitHubServiceProvider" + ] + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GrahamCampbell\\GitHub\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "GitHub Is A GitHub Bridge For Laravel", + "keywords": [ + "Bridge", + "Graham Campbell", + "GrahamCampbell", + "Laravel GitHub", + "Laravel-GitHub", + "PHP GitHub API", + "framework", + "github", + "github bridge", + "laravel", + "php-github-api" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Laravel-GitHub/issues", + "source": "https://github.com/GrahamCampbell/Laravel-GitHub/tree/v10.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/github", + "type": "tidelift" + } + ], + "install-path": "../graham-campbell/github" + }, + { + "name": "graham-campbell/manager", + "version": "v4.7.0", + "version_normalized": "4.7.0.0", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Laravel-Manager.git", + "reference": "b4cafa6491b9c92ecf7ce17521580050a27b8308" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Manager/zipball/b4cafa6491b9c92ecf7ce17521580050a27b8308", + "reference": "b4cafa6491b9c92ecf7ce17521580050a27b8308", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0", + "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0", + "php": "^7.1.3 || ^8.0" + }, + "require-dev": { + "graham-campbell/analyzer": "^2.4 || ^3.0", + "graham-campbell/testbench-core": "^3.4", + "mockery/mockery": "^1.3.1", + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.7" + }, + "time": "2022-01-24T01:59:19+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "GrahamCampbell\\Manager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Manager Provides Some Manager Functionality For Laravel", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Laravel Manager", + "Laravel-Manager", + "connector", + "framework", + "interface", + "laravel", + "manager" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Laravel-Manager/issues", + "source": "https://github.com/GrahamCampbell/Laravel-Manager/tree/v4.7.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/manager", + "type": "tidelift" + } + ], + "install-path": "../graham-campbell/manager" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.4.1", + "version_normalized": "7.4.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "time": "2021-12-06T18:43:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.4.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "install-path": "../guzzlehttp/guzzle" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.1", + "version_normalized": "1.5.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "time": "2021-10-22T20:56:57+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "install-path": "../guzzlehttp/promises" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.1.0", + "version_normalized": "2.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "time": "2021-10-06T17:43:30+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.1.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "install-path": "../guzzlehttp/psr7" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "version_normalized": "2.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "time": "2020-07-09T08:09:16+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "hamcrest" ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" - } - ], - "description": "A simple API extension for DateTime.", - "homepage": "http://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ] - }, - { - "name": "nexmo/client", - "version": "1.8.1", - "version_normalized": "1.8.1.0", - "source": { - "type": "git", - "url": "https://github.com/Nexmo/nexmo-php.git", - "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/182d41a02ebd3e4be147baea45458ccfe2f528c4", - "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4", - "shasum": "" - }, - "require": { - "lcobucci/jwt": "^3.2", - "php": ">=5.6", - "php-http/client-implementation": "^1.0", - "php-http/guzzle6-adapter": "^1.0", - "zendframework/zend-diactoros": "^1.8.4 || ^2.0" - }, - "require-dev": { - "estahn/phpunit-json-assertions": "^1.0.0", - "php-http/mock-client": "^0.3.0", - "phpunit/phpunit": "^5.7", - "squizlabs/php_codesniffer": "^3.1" - }, - "time": "2019-05-13T20:27:43+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Nexmo\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tim Lytle", - "email": "tim@nexmo.com", - "homepage": "http://twitter.com/tjlytle", - "role": "Developer" - } - ], - "description": "PHP Client for using Nexmo's API." - }, - { - "name": "nikic/php-parser", - "version": "v4.2.2", - "version_normalized": "4.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bd73cc04c3843ad8d6b0bfc0956026a151fc420", - "reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.5 || ^7.0" - }, - "time": "2019-05-25T20:07:01+00:00", - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ] - }, - { - "name": "opis/closure", - "version": "3.3.0", - "version_normalized": "3.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "f846725591203098246276b2e7b9e8b7814c4965" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/f846725591203098246276b2e7b9e8b7814c4965", - "reference": "f846725591203098246276b2e7b9e8b7814c4965", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0" - }, - "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "time": "2019-05-31T20:04:32+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" }, - "files": [ - "functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ] - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "version_normalized": "9.99.99.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + "install-path": "../hamcrest/hamcrest-php" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "time": "2018-07-02T15:55:56+00:00", - "type": "library", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ] - }, - { - "name": "phar-io/manifest", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "phar-io/version": "^1.0.1", - "php": "^5.6 || ^7.0" - }, - "time": "2017-03-05T18:14:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + { + "name": "knplabs/github-api", + "version": "v3.5.1", + "version_normalized": "3.5.1.0", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/php-github-api.git", + "reference": "37b167998e8e1f318b3d99633675cfa007540565" }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/37b167998e8e1f318b3d99633675cfa007540565", + "reference": "37b167998e8e1f318b3d99633675cfa007540565", + "shasum": "" }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)" - }, - { - "name": "phar-io/version", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "time": "2017-03-05T17:38:23+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + "require": { + "ext-json": "*", + "php": "^7.2.5 || ^8.0", + "php-http/cache-plugin": "^1.7.1", + "php-http/client-common": "^2.3", + "php-http/discovery": "^1.12", + "php-http/httplug": "^2.2", + "php-http/multipart-stream-builder": "^1.1.2", + "psr/cache": "^1.0|^2.0|^3.0", + "psr/http-client-implementation": "^1.0", + "psr/http-factory-implementation": "^1.0", + "psr/http-message": "^1.0", + "symfony/deprecation-contracts": "^2.2|^3.0", + "symfony/polyfill-php80": "^1.17" }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "require-dev": { + "guzzlehttp/guzzle": "^7.2", + "guzzlehttp/psr7": "^1.7", + "http-interop/http-factory-guzzle": "^1.0", + "php-http/mock-client": "^1.4.1", + "phpstan/extension-installer": "^1.0.5", + "phpstan/phpstan": "^0.12.57", + "phpstan/phpstan-deprecation-rules": "^0.12.5", + "phpunit/phpunit": "^8.5 || ^9.4", + "symfony/cache": "^5.1.8", + "symfony/phpunit-bridge": "^5.2" }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints" - }, - { - "name": "php-http/cache-plugin", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/cache-plugin.git", - "reference": "8e2505d2090316fac7cce637b39b6bbb5249c5a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/8e2505d2090316fac7cce637b39b6bbb5249c5a8", - "reference": "8e2505d2090316fac7cce637b39b6bbb5249c5a8", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0", - "php-http/client-common": "^1.9 || ^2.0", - "php-http/message-factory": "^1.0", - "psr/cache": "^1.0", - "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0" - }, - "require-dev": { - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.5" - }, - "time": "2019-01-23T16:51:58+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Http\\Client\\Common\\Plugin\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "PSR-6 Cache plugin for HTTPlug", - "homepage": "http://httplug.io", - "keywords": [ - "cache", - "http", - "httplug", - "plugin" - ] - }, - { - "name": "php-http/client-common", - "version": "1.9.1", - "version_normalized": "1.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/client-common.git", - "reference": "0e156a12cc3e46f590c73bf57592a2252fc3dc48" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/0e156a12cc3e46f590c73bf57592a2252fc3dc48", - "reference": "0e156a12cc3e46f590c73bf57592a2252fc3dc48", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0", - "php-http/httplug": "^1.1", - "php-http/message": "^1.6", - "php-http/message-factory": "^1.0", - "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0" - }, - "require-dev": { - "guzzlehttp/psr7": "^1.4", - "phpspec/phpspec": "^2.5 || ^3.4 || ^4.2" - }, - "suggest": { - "php-http/cache-plugin": "PSR-6 Cache plugin", - "php-http/logger-plugin": "PSR-3 Logger plugin", - "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" - }, - "time": "2019-02-02T07:03:15+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Http\\Client\\Common\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Common HTTP Client implementations and tools for HTTPlug", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "common", - "http", - "httplug" - ] - }, - { - "name": "php-http/discovery", - "version": "1.6.1", - "version_normalized": "1.6.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/discovery.git", - "reference": "684855f2c2e9d0a61868b8f8d6bd0295c8a4b651" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/684855f2c2e9d0a61868b8f8d6bd0295c8a4b651", - "reference": "684855f2c2e9d0a61868b8f8d6bd0295c8a4b651", - "shasum": "" - }, - "require": { - "php": "^5.5 || ^7.0" - }, - "conflict": { - "nyholm/psr7": "<1.0" - }, - "require-dev": { - "php-http/httplug": "^1.0 || ^2.0", - "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^2.4", - "puli/composer-plugin": "1.0.0-beta10" - }, - "suggest": { - "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories", - "puli/composer-plugin": "Sets up Puli which is recommended for Discovery to work. Check http://docs.php-http.org/en/latest/discovery.html for more details." - }, - "time": "2019-02-23T07:42:53+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Http\\Discovery\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Finds installed HTTPlug implementations and PSR-7 message factories", - "homepage": "http://php-http.org", - "keywords": [ - "adapter", - "client", - "discovery", - "factory", - "http", - "message", - "psr7" - ] - }, - { - "name": "php-http/guzzle6-adapter", - "version": "v1.1.1", - "version_normalized": "1.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/guzzle6-adapter.git", - "reference": "a56941f9dc6110409cfcddc91546ee97039277ab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab", - "reference": "a56941f9dc6110409cfcddc91546ee97039277ab", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^6.0", - "php": ">=5.5.0", - "php-http/httplug": "^1.0" - }, - "provide": { - "php-http/async-client-implementation": "1.0", - "php-http/client-implementation": "1.0" - }, - "require-dev": { - "ext-curl": "*", - "php-http/adapter-integration-tests": "^0.4" - }, - "time": "2016-05-10T06:13:32+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Http\\Adapter\\Guzzle6\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "time": "2022-02-19T11:15:46+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.20.x-dev", + "dev-master": "3.4.x-dev" + } }, - { - "name": "David de Boer", - "email": "david@ddeboer.nl" - } - ], - "description": "Guzzle 6 HTTP Adapter", - "homepage": "http://httplug.io", - "keywords": [ - "Guzzle", - "http" - ] - }, - { - "name": "php-http/httplug", - "version": "v1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/httplug.git", - "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", - "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "php-http/promise": "^1.0", - "psr/http-message": "^1.0" - }, - "require-dev": { - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.4" - }, - "time": "2016-08-31T08:30:17+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eric GELOEN", - "email": "geloen.eric@gmail.com" + "installation-source": "dist", + "autoload": { + "psr-4": { + "Github\\": "lib/Github/" + } }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "HTTPlug, the HTTP client abstraction for PHP", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "http" - ] - }, - { - "name": "php-http/message", - "version": "1.7.2", - "version_normalized": "1.7.2.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/message.git", - "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/b159ffe570dffd335e22ef0b91a946eacb182fa1", - "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1", - "shasum": "" - }, - "require": { - "clue/stream-filter": "^1.4", - "php": "^5.4 || ^7.0", - "php-http/message-factory": "^1.0.2", - "psr/http-message": "^1.0" - }, - "provide": { - "php-http/message-factory-implementation": "1.0" - }, - "require-dev": { - "akeneo/phpspec-skip-example-extension": "^1.0", - "coduo/phpspec-data-provider-extension": "^1.0", - "ext-zlib": "*", - "guzzlehttp/psr7": "^1.0", - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.4", - "slim/slim": "^3.0", - "zendframework/zend-diactoros": "^1.0" - }, - "suggest": { - "ext-zlib": "Used with compressor/decompressor streams", - "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", - "slim/slim": "Used with Slim Framework PSR-7 implementation", - "zendframework/zend-diactoros": "Used with Diactoros Factories" - }, - "time": "2018-11-01T09:32:41+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Http\\Message\\": "src/" + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KnpLabs Team", + "homepage": "http://knplabs.com" + }, + { + "name": "Thibault Duplessis", + "email": "thibault.duplessis@gmail.com", + "homepage": "http://ornicar.github.com" + } + ], + "description": "GitHub API v3 client", + "homepage": "https://github.com/KnpLabs/php-github-api", + "keywords": [ + "api", + "gh", + "gist", + "github" + ], + "support": { + "issues": "https://github.com/KnpLabs/php-github-api/issues", + "source": "https://github.com/KnpLabs/php-github-api/tree/v3.5.1" }, - "files": [ - "src/filters.php" - ] + "funding": [ + { + "url": "https://github.com/acrobat", + "type": "github" + } + ], + "install-path": "../knplabs/github-api" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "HTTP Message related tools", - "homepage": "http://php-http.org", - "keywords": [ - "http", - "message", - "psr-7" - ] - }, - { - "name": "php-http/message-factory", - "version": "v1.0.2", - "version_normalized": "1.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/message-factory.git", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "psr/http-message": "^1.0" - }, - "time": "2015-12-19T14:08:53+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Factory interfaces for PSR-7 HTTP Message", - "homepage": "http://php-http.org", - "keywords": [ - "factory", - "http", - "message", - "stream", - "uri" - ] - }, - { - "name": "php-http/promise", - "version": "v1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/promise.git", - "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", - "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", - "shasum": "" - }, - "require-dev": { - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.4" - }, - "time": "2016-01-26T13:27:02+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Http\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + { + "name": "laravel/framework", + "version": "v7.30.6", + "version_normalized": "7.30.6.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "ecdafad1dda3c790af186a6d18479ea4757ef9ee" }, - { - "name": "Joel Wurtz", - "email": "joel.wurtz@gmail.com" - } - ], - "description": "Promise used for asynchronous HTTP requests", - "homepage": "http://httplug.io", - "keywords": [ - "promise" - ] - }, - { - "name": "phpdocumentor/reflection-common", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/ecdafad1dda3c790af186a6d18479ea4757ef9ee", + "reference": "ecdafad1dda3c790af186a6d18479ea4757ef9ee", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.4|^2.0", + "dragonmantank/cron-expression": "^2.3.1", + "egulias/email-validator": "^2.1.10", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "league/commonmark": "^1.3", + "league/flysystem": "^1.1", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.31", + "opis/closure": "^3.6", + "php": "^7.2.5|^8.0", + "psr/container": "^1.0", + "psr/simple-cache": "^1.0", + "ramsey/uuid": "^3.7|^4.0", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^5.0", + "symfony/error-handler": "^5.0", + "symfony/finder": "^5.0", + "symfony/http-foundation": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/mime": "^5.0", + "symfony/polyfill-php73": "^1.17", + "symfony/process": "^5.0", + "symfony/routing": "^5.0", + "symfony/var-dumper": "^5.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^4.0", + "voku/portable-ascii": "^1.4.8" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.155", + "doctrine/dbal": "^2.6", + "filp/whoops": "^2.8", + "guzzlehttp/guzzle": "^6.3.1|^7.0.1", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "~1.3.3|^1.4.2", + "moontoast/math": "^1.1", + "orchestra/testbench-core": "^5.8", + "pda/pheanstalk": "^4.0", + "phpunit/phpunit": "^8.4|^9.3.3", + "predis/predis": "^1.1.1", + "symfony/cache": "^5.0" + }, + "suggest": { + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.8).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0.1).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "mockery/mockery": "Required to use mocking (~1.3.3|^1.4.2).", + "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.3.3).", + "predis/predis": "Required to use the predis connector (^1.1.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.0).", + "symfony/filesystem": "Required to create relative storage directory symbolic links (^5.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", + "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." + }, + "time": "2021-12-07T14:56:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "install-path": "../laravel/framework" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "shasum": "" + { + "name": "laravel/tinker", + "version": "v2.7.0", + "version_normalized": "2.7.0.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/5f2f9815b7631b9f586a3de7933c25f9327d4073", + "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4|^0.11.1", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)." + }, + "time": "2022-01-10T08:52:49+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.7.0" + }, + "install-path": "../laravel/tinker" }, - "require": { - "php": ">=5.5" + { + "name": "laravel/ui", + "version": "v2.5.0", + "version_normalized": "2.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/ui.git", + "reference": "d01a705763c243b07be795e9d1bb47f89260f73d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/ui/zipball/d01a705763c243b07be795e9d1bb47f89260f73d", + "reference": "d01a705763c243b07be795e9d1bb47f89260f73d", + "shasum": "" + }, + "require": { + "illuminate/console": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/support": "^7.0", + "php": "^7.2.5|^8.0" + }, + "time": "2020-11-03T19:45:19+00:00", + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Ui\\UiServiceProvider" + ] + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Laravel\\Ui\\": "src/", + "Illuminate\\Foundation\\Auth\\": "auth-backend/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel UI utilities and presets.", + "keywords": [ + "laravel", + "ui" + ], + "support": { + "issues": "https://github.com/laravel/ui/issues", + "source": "https://github.com/laravel/ui/tree/v2.5.0" + }, + "install-path": "../laravel/ui" }, - "require-dev": { - "phpunit/phpunit": "^4.6" + { + "name": "laravelcollective/html", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/LaravelCollective/html.git", + "reference": "78c3cb516ac9e6d3d76cad9191f81d217302dea6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/LaravelCollective/html/zipball/78c3cb516ac9e6d3d76cad9191f81d217302dea6", + "reference": "78c3cb516ac9e6d3d76cad9191f81d217302dea6", + "shasum": "" + }, + "require": { + "illuminate/http": "^6.0|^7.0|^8.0|^9.0", + "illuminate/routing": "^6.0|^7.0|^8.0|^9.0", + "illuminate/session": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "illuminate/view": "^6.0|^7.0|^8.0|^9.0", + "php": ">=7.2.5" + }, + "require-dev": { + "illuminate/database": "^6.0|^7.0|^8.0|^9.0", + "mockery/mockery": "~1.0", + "phpunit/phpunit": "~8.5|^9.5.10" + }, + "time": "2022-02-08T21:02:54+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.x-dev" + }, + "laravel": { + "providers": [ + "Collective\\Html\\HtmlServiceProvider" + ], + "aliases": { + "Form": "Collective\\Html\\FormFacade", + "Html": "Collective\\Html\\HtmlFacade" + } + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Collective\\Html\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adam Engebretson", + "email": "adam@laravelcollective.com" + }, + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + } + ], + "description": "HTML and Form Builders for the Laravel Framework", + "homepage": "https://laravelcollective.com", + "support": { + "issues": "https://github.com/LaravelCollective/html/issues", + "source": "https://github.com/LaravelCollective/html" + }, + "install-path": "../laravelcollective/html" }, - "time": "2017-09-11T18:02:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + { + "name": "league/commonmark", + "version": "1.6.7", + "version_normalized": "1.6.7.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2b8185c13bc9578367a5bf901881d1c1b5bbd09b", + "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "scrutinizer/ocular": "1.7.*" + }, + "require-dev": { + "cebe/markdown": "~1.0", + "commonmark/commonmark.js": "0.29.2", + "erusev/parsedown": "~1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "~1.4", + "mikehaertl/php-shellcommand": "^1.4", + "phpstan/phpstan": "^0.12.90", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", + "scrutinizer/ocular": "^1.5", + "symfony/finder": "^4.2" + }, + "time": "2022-01-13T17:18:13+00:00", + "bin": [ + "bin/commonmark" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "install-path": "../league/commonmark" }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] - } + { + "name": "league/flysystem", + "version": "1.1.9", + "version_normalized": "1.1.9.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "094defdb4a7001845300334e7c1ee2335925ef99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99", + "reference": "094defdb4a7001845300334e7c1ee2335925ef99", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + }, + "time": "2021-12-09T09:40:50+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.1.9" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "install-path": "../league/flysystem" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ] - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" + { + "name": "league/mime-type-detection", + "version": "1.9.0", + "version_normalized": "1.9.0.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/aa70e813a6ad3d1558fc927863d47309b4c23e69", + "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "time": "2021-11-21T11:48:40+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.9.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" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", - "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", - "shasum": "" + { + "name": "mockery/mockery", + "version": "1.3.5", + "version_normalized": "1.3.5.0", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "472fa8ca4e55483d55ee1e73c963718c4393791d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/472fa8ca4e55483d55ee1e73c963718c4393791d", + "reference": "472fa8ca4e55483d55ee1e73c963718c4393791d", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=5.6.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" + }, + "time": "2021-09-13T15:33:03+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.3.5" + }, + "install-path": "../mockery/mockery" }, - "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" + { + "name": "monolog/monolog", + "version": "2.3.5", + "version_normalized": "2.3.5.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7", + "graylog2/gelf-php": "^1.4.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.3", + "phpspec/prophecy": "^1.6.1", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90@dev", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "time": "2021-10-01T21:08:31+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.3.5" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "install-path": "../monolog/monolog" }, - "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" + { + "name": "myclabs/deep-copy", + "version": "1.11.0", + "version_normalized": "1.11.0.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "time": "2022-03-03T13:19:32+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "install-path": "../myclabs/deep-copy" }, - "time": "2019-04-30T17:48:53+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } + { + "name": "nesbot/carbon", + "version": "2.57.0", + "version_normalized": "2.57.0.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "4a54375c21eea4811dbd1149fe6b246517554e78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78", + "reference": "4a54375c21eea4811dbd1149fe6b246517554e78", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.0", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.54 || ^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.14", + "squizlabs/php_codesniffer": "^3.4" + }, + "time": "2022-02-13T18:13:33+00:00", + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "install-path": "../nesbot/carbon" }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ + { + "name": "nikic/php-parser", + "version": "v4.13.2", + "version_normalized": "4.13.2.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "time": "2021-11-30T19:35:32+00:00", + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + }, + "install-path": "../nikic/php-parser" + }, + { + "name": "opis/closure", + "version": "3.6.3", + "version_normalized": "3.6.3.0", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0 || ^8.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "time": "2022-01-27T09:35:39+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "functions.php" + ], + "psr-4": { + "Opis\\Closure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/opis/closure/issues", + "source": "https://github.com/opis/closure/tree/3.6.3" + }, + "install-path": "../opis/closure" + }, + { + "name": "phar-io/manifest", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^1.0.1", + "php": "^5.6 || ^7.0" + }, + "time": "2017-03-05T18:14:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ "src/" ] - } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "install-path": "../phar-io/manifest" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock." - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.4.0", - "version_normalized": "0.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", - "shasum": "" - }, - "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" - }, - "time": "2017-07-14T14:27:02+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ + { + "name": "phar-io/version", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "time": "2017-03-05T17:38:23+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ "src/" ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ] - }, - { - "name": "phpspec/prophecy", - "version": "1.8.0", - "version_normalized": "1.8.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" - }, - "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" - }, - "time": "2018-08-05T17:53:17+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Prophecy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ] - }, - { - "name": "phpunit/php-code-coverage", - "version": "5.3.2", - "version_normalized": "5.3.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-xmlwriter": "*", - "php": "^7.0", - "phpunit/php-file-iterator": "^1.4.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^2.0.1", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.0", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-xdebug": "^2.5.5" - }, - "time": "2018-04-06T15:36:58+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ] - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.5", - "version_normalized": "1.4.5.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2017-11-27T13:52:08+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ] - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "version_normalized": "1.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2015-06-21T13:50:34+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ] - }, - { - "name": "phpunit/php-timer", - "version": "1.0.9", - "version_normalized": "1.0.9.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "time": "2017-02-26T11:10:40+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ] - }, - { - "name": "phpunit/php-token-stream", - "version": "2.0.2", - "version_normalized": "2.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.2.4" - }, - "time": "2017-11-27T05:48:46+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ] - }, - { - "name": "phpunit/phpunit", - "version": "6.5.14", - "version_normalized": "6.5.14.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7", - "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "^1.6.1", - "phar-io/manifest": "^1.0.1", - "phar-io/version": "^1.0", - "php": "^7.0", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.3", - "phpunit/php-file-iterator": "^1.4.3", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^5.0.9", - "sebastian/comparator": "^2.1", - "sebastian/diff": "^2.0", - "sebastian/environment": "^3.1", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^1.0", - "sebastian/version": "^2.0.1" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "phpunit/dbunit": "<3.0" - }, - "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-xdebug": "*", - "phpunit/php-invoker": "^1.1" - }, - "time": "2019-02-01T05:22:47+00:00", - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ] - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "5.0.10", - "version_normalized": "5.0.10.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.5", - "php": "^7.0", - "phpunit/php-text-template": "^1.2.1", - "sebastian/exporter": "^3.1" - }, - "conflict": { - "phpunit/phpunit": "<6.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.5.11" - }, - "suggest": { - "ext-soap": "*" - }, - "time": "2018-08-09T05:50:03+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "abandoned": true - }, - { - "name": "psr/cache", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2016-08-06T20:24:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ] - }, - { - "name": "psr/container", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2017-02-14T16:28:37+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.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": "http://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" - ] - }, - { - "name": "psr/http-factory", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" - }, - "time": "2019-04-30T12:38:16+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.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 interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ] - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2016-08-06T14:39:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.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" - ] - }, - { - "name": "psr/log", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2018-11-20T15:27:04+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ] - }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2017-10-23T01:57:42+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.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": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ] - }, - { - "name": "psy/psysh", - "version": "v0.9.9", - "version_normalized": "0.9.9.0", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9aaf29575bb8293206bb0420c1e1c87ff2ffa94e", - "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e", - "shasum": "" - }, - "require": { - "dnoegel/php-xdg-base-dir": "0.1", - "ext-json": "*", - "ext-tokenizer": "*", - "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", - "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0", - "php": ">=5.4.0", - "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0", - "symfony/var-dumper": "~2.7|~3.0|~4.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "~2.15|~3.16", - "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." - }, - "time": "2018-10-13T15:16:03+00:00", - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "0.9.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/functions.php" + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" ], - "psr-4": { - "Psy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ] - }, - { - "name": "ralouphie/getallheaders", - "version": "2.0.5", - "version_normalized": "2.0.5.0", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", - "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "~3.7.0", - "satooshi/php-coveralls": ">=1.0" - }, - "time": "2016-02-11T07:05:27+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders." - }, - { - "name": "ramsey/uuid", - "version": "3.8.0", - "version_normalized": "3.8.0.0", - "source": { - "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", - "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", - "shasum": "" - }, - "require": { - "paragonie/random_compat": "^1.0|^2.0|9.99.99", - "php": "^5.4 || ^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "codeception/aspect-mock": "^1.0 | ~2.0.0", - "doctrine/annotations": "~1.2.0", - "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", - "ircmaxell/random-lib": "^1.1", - "jakub-onderka/php-parallel-lint": "^0.9.0", - "mockery/mockery": "^0.9.9", - "moontoast/math": "^1.1", - "php-mock/php-mock-phpunit": "^0.3|^1.1", - "phpunit/phpunit": "^4.7|^5.0|^6.5", - "squizlabs/php_codesniffer": "^2.3" - }, - "suggest": { - "ext-ctype": "Provides support for PHP Ctype functions", - "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", - "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", - "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "time": "2018-07-19T23:38:55+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marijn Huizendveld", - "email": "marijn.huizendveld@gmail.com" - }, - { - "name": "Thibaud Fabre", - "email": "thibaud@aztech.io" - }, - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", - "homepage": "https://github.com/ramsey/uuid", - "keywords": [ - "guid", - "identifier", - "uuid" - ] - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" - }, - "time": "2017-03-04T06:30:41+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/" - }, - { - "name": "sebastian/comparator", - "version": "2.1.3", - "version_normalized": "2.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/diff": "^2.0 || ^3.0", - "sebastian/exporter": "^3.1" - }, - "require-dev": { - "phpunit/phpunit": "^6.4" - }, - "time": "2018-02-01T13:46:46+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ] - }, - { - "name": "sebastian/diff", - "version": "2.0.1", - "version_normalized": "2.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.2" - }, - "time": "2017-08-03T08:09:46+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ] - }, - { - "name": "sebastian/environment", - "version": "3.1.0", - "version_normalized": "3.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.1" - }, - "time": "2017-07-01T08:51:00+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ] - }, - { - "name": "sebastian/exporter", - "version": "3.1.0", - "version_normalized": "3.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" - }, - "time": "2017-04-03T13:19:02+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ] - }, - { - "name": "sebastian/global-state", - "version": "2.0.0", - "version_normalized": "2.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-uopz": "*" - }, - "time": "2017-04-27T15:39:26+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ] - }, - { - "name": "sebastian/object-enumerator", - "version": "3.0.3", - "version_normalized": "3.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "time": "2017-08-03T12:35:26+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/" - }, - { - "name": "sebastian/object-reflector", - "version": "1.1.1", - "version_normalized": "1.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "time": "2017-03-29T09:07:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/" - }, - { - "name": "sebastian/recursion-context", - "version": "3.0.0", - "version_normalized": "3.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "time": "2017-03-03T06:23:57+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context" - }, - { - "name": "sebastian/resource-operations", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "shasum": "" - }, - "require": { - "php": ">=5.6.0" - }, - "time": "2015-07-28T20:34:47+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations" - }, - { - "name": "sebastian/version", - "version": "2.0.1", - "version_normalized": "2.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "time": "2016-10-03T07:35:21+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version" - }, - { - "name": "swiftmailer/swiftmailer", - "version": "v6.2.1", - "version_normalized": "6.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", - "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", - "shasum": "" - }, - "require": { - "egulias/email-validator": "~2.0", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses", - "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" - }, - "time": "2019-04-21T09:21:45+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ] - }, - { - "name": "symfony/console", - "version": "v4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d50bbeeb0e17e6dd4124ea391eff235e932cbf64", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3", - "symfony/process": "<3.3" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "^4.3", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "symfony/var-dumper": "^4.3" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "time": "2019-06-05T13:25:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/css-selector", - "version": "v4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "time": "2019-01-16T21:53:39+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony CssSelector Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/debug", - "version": "v4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "~3.4|~4.0" - }, - "time": "2019-05-30T16:10:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/event-dispatcher", - "version": "v4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4e6c670af81c4fb0b6c08b035530a9915d0b691f", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/event-dispatcher-contracts": "^1.1" - }, - "conflict": { - "symfony/dependency-injection": "<3.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "^3.4|^4.0", - "symfony/service-contracts": "^1.1", - "symfony/stopwatch": "~3.4|~4.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "time": "2019-05-30T16:10:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.1", - "version_normalized": "1.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8fa2cf2177083dd59cf8e44ea4b6541764fbda69" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8fa2cf2177083dd59cf8e44ea4b6541764fbda69", - "reference": "8fa2cf2177083dd59cf8e44ea4b6541764fbda69", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "suggest": { - "psr/event-dispatcher": "", - "symfony/event-dispatcher-implementation": "" - }, - "time": "2019-05-22T12:23:29+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "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": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ] - }, - { - "name": "symfony/finder", - "version": "v4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "time": "2019-05-26T20:47:49+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/http-foundation", - "version": "v4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b7e4945dd9b277cd24e93566e4da0a87956392a9", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/mime": "^4.3", - "symfony/polyfill-mbstring": "~1.1" - }, - "require-dev": { - "predis/predis": "~1.0", - "symfony/expression-language": "~3.4|~4.0" - }, - "time": "2019-06-06T10:05:02+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony HttpFoundation Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/http-kernel", - "version": "v4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/738ad561cd6a8d1c44ee1da941b2e628e264c429", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "psr/log": "~1.0", - "symfony/debug": "~3.4|~4.0", - "symfony/event-dispatcher": "^4.3", - "symfony/http-foundation": "^4.1.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php73": "^1.9" - }, - "conflict": { - "symfony/browser-kit": "<4.3", - "symfony/config": "<3.4", - "symfony/dependency-injection": "<4.3", - "symfony/translation": "<4.2", - "symfony/var-dumper": "<4.1.1", - "twig/twig": "<1.34|<2.4,>=2" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/cache": "~1.0", - "symfony/browser-kit": "^4.3", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/css-selector": "~3.4|~4.0", - "symfony/dependency-injection": "^4.3", - "symfony/dom-crawler": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/finder": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~3.4|~4.0", - "symfony/templating": "~3.4|~4.0", - "symfony/translation": "~4.2", - "symfony/translation-contracts": "^1.1", - "symfony/var-dumper": "^4.1.1", - "twig/twig": "^1.34|^2.4" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/var-dumper": "" - }, - "time": "2019-06-06T13:23:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony HttpKernel Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/mime", - "version": "v4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ec2c5565de60e03f33d4296a655e3273f0ad1f8b", - "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "egulias/email-validator": "^2.0", - "symfony/dependency-injection": "~3.4|^4.1" - }, - "time": "2019-06-04T09:22:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A library to manipulate MIME messages", - "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ] - }, - { - "name": "symfony/options-resolver", - "version": "v4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "914e0edcb7cd0c9f494bc023b1d47534f4542332" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/914e0edcb7cd0c9f494bc023b1d47534f4542332", - "reference": "914e0edcb7cd0c9f494bc023b1d47534f4542332", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "time": "2019-05-10T05:38:46+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony OptionsResolver Component", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ] - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.11.0", - "version_normalized": "1.11.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "82ebae02209c21113908c229e9883c419720738a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", - "reference": "82ebae02209c21113908c229e9883c419720738a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "time": "2019-02-06T07:57:58+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ] - }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.11.0", - "version_normalized": "1.11.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "time": "2019-02-06T07:57:58+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "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 Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ] - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.11.0", - "version_normalized": "1.11.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c766e95bec706cdd89903b1eda8afab7d7a6b7af", - "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.9" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "time": "2019-03-04T13:44:35+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ] - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.11.0", - "version_normalized": "1.11.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "time": "2019-02-06T07:57:58+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "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" - ] - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.11.0", - "version_normalized": "1.11.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2019-02-06T07:57:58+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "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 backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ] - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.11.0", - "version_normalized": "1.11.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2019-02-06T07:57:58+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "files": [ - "bootstrap.php" + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } ], - "classmap": [ - "Resources/stubs" - ] + "description": "Library for handling version information and constraints", + "install-path": "../phar-io/version" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + { + "name": "php-http/cache-plugin", + "version": "1.7.5", + "version_normalized": "1.7.5.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/cache-plugin.git", + "reference": "63bc3f7242825c9a817db8f78e4c9703b0c471e2" }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ] - }, - { - "name": "symfony/process", - "version": "v4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c", - "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "time": "2019-05-30T16:10:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/63bc3f7242825c9a817db8f78e4c9703b0c471e2", + "reference": "63bc3f7242825c9a817db8f78e4c9703b0c471e2", + "shasum": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "require": { + "php": "^7.1 || ^8.0", + "php-http/client-common": "^1.9 || ^2.0", + "php-http/message-factory": "^1.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/routing", - "version": "v4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "conflict": { - "symfony/config": "<4.2", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" - }, - "require-dev": { - "doctrine/annotations": "~1.2", - "psr/log": "~1.0", - "symfony/config": "~4.2", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "doctrine/annotations": "For using the annotation loader", - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, - "time": "2019-06-05T09:16:20+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" + "require-dev": { + "phpspec/phpspec": "^5.1 || ^6.0" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "time": "2022-01-18T12:24:56+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Routing Component", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ] - }, - { - "name": "symfony/service-contracts", - "version": "v1.1.2", - "version_normalized": "1.1.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/191afdcb5804db960d26d8566b7e9a2843cab3a0", - "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "suggest": { - "psr/container": "", - "symfony/service-implementation": "" - }, - "time": "2019-05-28T07:50:59+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "installation-source": "dist", + "autoload": { + "psr-4": { + "Http\\Client\\Common\\Plugin\\": "src/" + } }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ] - }, - { - "name": "symfony/thanks", - "version": "v1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/thanks.git", - "reference": "9474a631b52737c623b6aeba22f00bbc003251da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/thanks/zipball/9474a631b52737c623b6aeba22f00bbc003251da", - "reference": "9474a631b52737c623b6aeba22f00bbc003251da", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0", - "php": "^5.5.9|^7.0.0" - }, - "time": "2018-08-24T14:08:13+00:00", - "type": "composer-plugin", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "class": "Symfony\\Thanks\\Thanks" - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Thanks\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - } - ], - "description": "Give thanks (in the form of a GitHub ⭐) to your fellow PHP package maintainers (not limited to Symfony components)!" - }, - { - "name": "symfony/translation", - "version": "v4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/5dda505e5f65d759741dfaf4e54b36010a4b57aa", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^1.1.2" - }, - "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" - }, - "provide": { - "symfony/translation-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/http-kernel": "~3.4|~4.0", - "symfony/intl": "~3.4|~4.0", - "symfony/service-contracts": "^1.1.2", - "symfony/var-dumper": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "time": "2019-06-03T20:27:40+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Translation Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/translation-contracts", - "version": "v1.1.2", - "version_normalized": "1.1.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "93597ce975d91c52ebfaca1253343cd9ccb7916d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/93597ce975d91c52ebfaca1253343cd9ccb7916d", - "reference": "93597ce975d91c52ebfaca1253343cd9ccb7916d", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "suggest": { - "symfony/translation-implementation": "" - }, - "time": "2019-05-27T08:16:38+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - } - }, - "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": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ] - }, - { - "name": "symfony/var-dumper", - "version": "v4.3.1", - "version_normalized": "4.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f974f448154928d2b5fb7c412bd23b81d063f34b", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<3.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "twig/twig": "~1.34|~2.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": "2019-06-05T02:08:12+00:00", - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "Resources/functions/dump.php" + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" ], - "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": "Symfony mechanism for exploring and dumping PHP variables", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ] - }, - { - "name": "theseer/tokenizer", - "version": "1.1.2", - "version_normalized": "1.1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/1c42705be2b6c1de5904f8afacef5895cab44bf8", - "reference": "1c42705be2b6c1de5904f8afacef5895cab44bf8", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.0" - }, - "time": "2019-04-04T09:56:43+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats" - }, - { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.1", - "version_normalized": "2.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", - "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", - "shasum": "" - }, - "require": { - "php": "^5.5 || ^7.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "time": "2017-11-27T11:13:29+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", - "role": "Developer" - } - ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles" - }, - { - "name": "vlucas/phpdotenv", - "version": "v2.6.1", - "version_normalized": "2.6.1.0", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", - "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", - "shasum": "" - }, - "require": { - "php": ">=5.3.9", - "symfony/polyfill-ctype": "^1.9" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.0" - }, - "time": "2019-01-29T11:11:52+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ] - }, - { - "name": "webmozart/assert", - "version": "1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "time": "2018-12-25T11:19:39+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ] - }, - { - "name": "zendframework/zend-diactoros", - "version": "2.1.2", - "version_normalized": "2.1.2.0", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-diactoros.git", - "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/37bf68b428850ee26ed7c3be6c26236dd95a95f1", - "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1", - "shasum": "" - }, - "require": { - "php": "^7.1", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-dom": "*", - "ext-libxml": "*", - "http-interop/http-factory-tests": "^0.5.0", - "php-http/psr7-integration-tests": "dev-master", - "phpunit/phpunit": "^7.0.2", - "zendframework/zend-coding-standard": "~1.0.0" - }, - "time": "2019-04-29T21:11:00+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev", - "dev-develop": "2.2.x-dev", - "dev-release-1.8": "1.8.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/marshal_uri_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php" + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } ], - "psr-4": { - "Zend\\Diactoros\\": "src/" - } + "description": "PSR-6 Cache plugin for HTTPlug", + "homepage": "http://httplug.io", + "keywords": [ + "cache", + "http", + "httplug", + "plugin" + ], + "support": { + "issues": "https://github.com/php-http/cache-plugin/issues", + "source": "https://github.com/php-http/cache-plugin/tree/1.7.5" + }, + "install-path": "../php-http/cache-plugin" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "PSR HTTP Message implementations", - "keywords": [ - "http", - "psr", - "psr-7" - ] - } -] + { + "name": "php-http/client-common", + "version": "2.5.0", + "version_normalized": "2.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/client-common.git", + "reference": "d135751167d57e27c74de674d6a30cef2dc8e054" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/client-common/zipball/d135751167d57e27c74de674d6a30cef2dc8e054", + "reference": "d135751167d57e27c74de674d6a30cef2dc8e054", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/httplug": "^2.0", + "php-http/message": "^1.6", + "php-http/message-factory": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "doctrine/instantiator": "^1.1", + "guzzlehttp/psr7": "^1.4", + "nyholm/psr7": "^1.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "phpspec/prophecy": "^1.10.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" + }, + "suggest": { + "ext-json": "To detect JSON responses with the ContentTypePlugin", + "ext-libxml": "To detect XML responses with the ContentTypePlugin", + "php-http/cache-plugin": "PSR-6 Cache plugin", + "php-http/logger-plugin": "PSR-3 Logger plugin", + "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" + }, + "time": "2021-11-26T15:01:24+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Http\\Client\\Common\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Common HTTP Client implementations and tools for HTTPlug", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "common", + "http", + "httplug" + ], + "support": { + "issues": "https://github.com/php-http/client-common/issues", + "source": "https://github.com/php-http/client-common/tree/2.5.0" + }, + "install-path": "../php-http/client-common" + }, + { + "name": "php-http/discovery", + "version": "1.14.1", + "version_normalized": "1.14.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "de90ab2b41d7d61609f504e031339776bc8c7223" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/de90ab2b41d7d61609f504e031339776bc8c7223", + "reference": "de90ab2b41d7d61609f504e031339776bc8c7223", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0" + }, + "require-dev": { + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1", + "puli/composer-plugin": "1.0.0-beta10" + }, + "suggest": { + "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories" + }, + "time": "2021-09-18T07:57:46+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds installed HTTPlug implementations and PSR-7 message factories", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.14.1" + }, + "install-path": "../php-http/discovery" + }, + { + "name": "php-http/httplug", + "version": "2.3.0", + "version_normalized": "2.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "f640739f80dfa1152533976e3c112477f69274eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb", + "reference": "f640739f80dfa1152533976e3c112477f69274eb", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1", + "phpspec/phpspec": "^5.1 || ^6.0" + }, + "time": "2022-02-21T09:52:22+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.3.0" + }, + "install-path": "../php-http/httplug" + }, + { + "name": "php-http/message", + "version": "1.13.0", + "version_normalized": "1.13.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/message.git", + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message/zipball/7886e647a30a966a1a8d1dad1845b71ca8678361", + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361", + "shasum": "" + }, + "require": { + "clue/stream-filter": "^1.5", + "php": "^7.1 || ^8.0", + "php-http/message-factory": "^1.0.2", + "psr/http-message": "^1.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.6", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0", + "laminas/laminas-diactoros": "^2.0", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "slim/slim": "^3.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "laminas/laminas-diactoros": "Used with Diactoros Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation" + }, + "time": "2022-02-11T13:41:14+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/filters.php" + ], + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", + "keywords": [ + "http", + "message", + "psr-7" + ], + "support": { + "issues": "https://github.com/php-http/message/issues", + "source": "https://github.com/php-http/message/tree/1.13.0" + }, + "install-path": "../php-http/message" + }, + { + "name": "php-http/message-factory", + "version": "v1.0.2", + "version_normalized": "1.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/message-factory.git", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "psr/http-message": "^1.0" + }, + "time": "2015-12-19T14:08:53+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "stream", + "uri" + ], + "install-path": "../php-http/message-factory" + }, + { + "name": "php-http/multipart-stream-builder", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/multipart-stream-builder.git", + "reference": "11c1d31f72e01c738bbce9e27649a7cca829c30e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/11c1d31f72e01c738bbce9e27649a7cca829c30e", + "reference": "11c1d31f72e01c738bbce9e27649a7cca829c30e", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/discovery": "^1.7", + "php-http/message-factory": "^1.0.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "nyholm/psr7": "^1.0", + "php-http/message": "^1.5", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" + }, + "time": "2021-05-21T08:32:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Http\\Message\\MultipartStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + } + ], + "description": "A builder class that help you create a multipart stream", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "multipart stream", + "stream" + ], + "support": { + "issues": "https://github.com/php-http/multipart-stream-builder/issues", + "source": "https://github.com/php-http/multipart-stream-builder/tree/1.2.0" + }, + "install-path": "../php-http/multipart-stream-builder" + }, + { + "name": "php-http/promise", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2", + "phpspec/phpspec": "^5.1.2 || ^6.2" + }, + "time": "2020-07-07T09:29:14+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.1.0" + }, + "install-path": "../php-http/promise" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "version_normalized": "2.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "time": "2020-06-27T09:03:43+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "install-path": "../phpdocumentor/reflection-common" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", + "version_normalized": "5.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" + }, + "time": "2021-10-19T17:43:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "install-path": "../phpdocumentor/reflection-docblock" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "psalm/phar": "^4.8" + }, + "time": "2022-01-04T19:58:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" + }, + "install-path": "../phpdocumentor/type-resolver" + }, + { + "name": "phpoption/phpoption", + "version": "1.8.1", + "version_normalized": "1.8.1.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", + "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + }, + "time": "2021-12-04T23:24:31+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.8.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "install-path": "../phpoption/phpoption" + }, + { + "name": "phpspec/prophecy", + "version": "v1.10.3", + "version_normalized": "1.10.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "451c3cd1418cf640de218914901e51b064abb093" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "time": "2020-03-05T15:02:03+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.10.3" + }, + "install-path": "../phpspec/prophecy" + }, + { + "name": "phpunit/php-code-coverage", + "version": "5.3.2", + "version_normalized": "5.3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.0", + "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^2.0.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-xdebug": "^2.5.5" + }, + "time": "2018-04-06T15:36:58+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "install-path": "../phpunit/php-code-coverage" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "version_normalized": "1.4.5.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2017-11-27T13:52:08+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "install-path": "../phpunit/php-file-iterator" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "version_normalized": "1.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2015-06-21T13:50:34+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "install-path": "../phpunit/php-text-template" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "version_normalized": "1.0.9.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "time": "2017-02-26T11:10:40+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "install-path": "../phpunit/php-timer" + }, + { + "name": "phpunit/php-token-stream", + "version": "2.0.2", + "version_normalized": "2.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "791198a2c6254db10131eecfe8c06670700904db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2.4" + }, + "time": "2017-11-27T05:48:46+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "install-path": "../phpunit/php-token-stream" + }, + { + "name": "phpunit/phpunit", + "version": "6.5.14", + "version_normalized": "6.5.14.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.6.1", + "phar-io/manifest": "^1.0.1", + "phar-io/version": "^1.0", + "php": "^7.0", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^5.3", + "phpunit/php-file-iterator": "^1.4.3", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^1.0.9", + "phpunit/phpunit-mock-objects": "^5.0.9", + "sebastian/comparator": "^2.1", + "sebastian/diff": "^2.0", + "sebastian/environment": "^3.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^1.0", + "sebastian/version": "^2.0.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2", + "phpunit/dbunit": "<3.0" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "^1.1" + }, + "time": "2019-02-01T05:22:47+00:00", + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "install-path": "../phpunit/phpunit" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "5.0.10", + "version_normalized": "5.0.10.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.5", + "php": "^7.0", + "phpunit/php-text-template": "^1.2.1", + "sebastian/exporter": "^3.1" + }, + "conflict": { + "phpunit/phpunit": "<6.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5.11" + }, + "suggest": { + "ext-soap": "*" + }, + "time": "2018-08-09T05:50:03+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "abandoned": true, + "install-path": "../phpunit/phpunit-mock-objects" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2016-08-06T20:24:11+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "install-path": "../psr/cache" + }, + { + "name": "psr/container", + "version": "1.1.2", + "version_normalized": "1.1.2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "time": "2021-11-05T16:50:12+00:00", + "type": "library", + "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/1.1.2" + }, + "install-path": "../psr/container" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "time": "2019-01-08T18:20:26+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "install-path": "../psr/event-dispatcher" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "time": "2020-06-29T06:28:15+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "install-path": "../psr/http-client" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "time": "2019-04-30T12:38:16+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.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 interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "install-path": "../psr/http-factory" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2016-08-06T14:39:51+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.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" + ], + "install-path": "../psr/http-message" + }, + { + "name": "psr/log", + "version": "1.1.4", + "version_normalized": "1.1.4.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2021-05-03T11:20:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "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/1.1.4" + }, + "install-path": "../psr/log" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2017-10-23T01:57:42+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "install-path": "../psr/simple-cache" + }, + { + "name": "psy/psysh", + "version": "v0.11.2", + "version_normalized": "0.11.2.0", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "7f7da640d68b9c9fec819caae7c744a213df6514" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/7f7da640d68b9c9fec819caae7c744a213df6514", + "reference": "7f7da640d68b9c9fec819caae7c744a213df6514", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "hoa/console": "3.17.05.02" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", + "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + }, + "time": "2022-02-28T15:28:54+00:00", + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.11.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.2" + }, + "install-path": "../psy/psysh" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "version_normalized": "3.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "time": "2019-03-08T08:55:37+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "install-path": "../ralouphie/getallheaders" + }, + { + "name": "ramsey/collection", + "version": "1.2.2", + "version_normalized": "1.2.2.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8", + "symfony/polyfill-php81": "^1.23" + }, + "require-dev": { + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fakerphp/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.8", + "mockery/mockery": "^1.3", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5 || ^9", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.4" + }, + "time": "2021-10-10T03:01:02+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.2.2" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "install-path": "../ramsey/collection" + }, + { + "name": "ramsey/uuid", + "version": "4.2.3", + "version_normalized": "4.2.3.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "shasum": "" + }, + "require": { + "brick/math": "^0.8 || ^0.9", + "ext-json": "*", + "php": "^7.2 || ^8.0", + "ramsey/collection": "^1.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php80": "^1.14" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5 || ^9", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "time": "2021-09-25T23:10:38+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.x-dev" + }, + "captainhook": { + "force-install": true + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.2.3" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "install-path": "../ramsey/uuid" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.2", + "version_normalized": "1.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "^8.5" + }, + "time": "2020-11-30T08:15:22+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "install-path": "../sebastian/code-unit-reverse-lookup" + }, + { + "name": "sebastian/comparator", + "version": "2.1.3", + "version_normalized": "2.1.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/diff": "^2.0 || ^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.4" + }, + "time": "2018-02-01T13:46:46+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "install-path": "../sebastian/comparator" + }, + { + "name": "sebastian/diff", + "version": "2.0.1", + "version_normalized": "2.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2" + }, + "time": "2017-08-03T08:09:46+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "install-path": "../sebastian/diff" + }, + { + "name": "sebastian/environment", + "version": "3.1.0", + "version_normalized": "3.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.1" + }, + "time": "2017-07-01T08:51:00+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "install-path": "../sebastian/environment" + }, + { + "name": "sebastian/exporter", + "version": "3.1.4", + "version_normalized": "3.1.4.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", + "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^8.5" + }, + "time": "2021-11-11T13:51:24+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "install-path": "../sebastian/exporter" + }, + { + "name": "sebastian/global-state", + "version": "2.0.0", + "version_normalized": "2.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "time": "2017-04-27T15:39:26+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "install-path": "../sebastian/global-state" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.4", + "version_normalized": "3.0.4.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "time": "2020-11-30T07:40:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "install-path": "../sebastian/object-enumerator" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.2", + "version_normalized": "1.1.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "time": "2020-11-30T07:37:18+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "install-path": "../sebastian/object-reflector" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.1", + "version_normalized": "3.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "time": "2020-11-30T07:34:24+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "install-path": "../sebastian/recursion-context" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "time": "2015-07-28T20:34:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "install-path": "../sebastian/resource-operations" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "version_normalized": "2.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "time": "2016-10-03T07:35:21+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "install-path": "../sebastian/version" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.0|^3.1", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.4" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses" + }, + "time": "2021-10-18T15:26:12+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "support": { + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], + "abandoned": "symfony/mailer", + "install-path": "../swiftmailer/swiftmailer" + }, + { + "name": "symfony/cache", + "version": "v5.4.6", + "version_normalized": "5.4.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "c0718d0e01ac14251a45cc9c8b93716ec41ae64b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/c0718d0e01ac14251a45cc9c8b93716ec41ae64b", + "reference": "c0718d0e01ac14251a45cc9c8b93716ec41ae64b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "conflict": { + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" + }, + "provide": { + "psr/cache-implementation": "1.0|2.0", + "psr/simple-cache-implementation": "1.0|2.0", + "symfony/cache-implementation": "1.0|2.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6|^2.0", + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0|^2.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "time": "2022-03-02T12:56:28+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "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 an extended PSR-6, PSR-16 (and tags) implementation", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.4.6" + }, + "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/cache" + }, + { + "name": "symfony/cache-contracts", + "version": "v2.5.0", + "version_normalized": "2.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ac2e168102a2e06a2624f0379bde94cd5854ced2", + "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0|^3.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "time": "2021-08-17T14:20:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "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": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.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/cache-contracts" + }, + { + "name": "symfony/console", + "version": "v5.4.5", + "version_normalized": "5.4.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/d8111acc99876953f52fe16d4c50eb60940d49ad", + "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "time": "2022-02-24T12:45:35+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.4.5" + }, + "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/console" + }, + { + "name": "symfony/css-selector", + "version": "v5.4.3", + "version_normalized": "5.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "b0a190285cd95cb019237851205b8140ef6e368e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e", + "reference": "b0a190285cd95cb019237851205b8140ef6e368e", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "time": "2022-01-02T09:53:40+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v5.4.3" + }, + "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/css-selector" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.0", + "version_normalized": "2.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2021-07-12T14:48:14+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "function.php" + ] + }, + "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": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.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/deprecation-contracts" + }, + { + "name": "symfony/error-handler", + "version": "v5.4.3", + "version_normalized": "5.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", + "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" + }, + "time": "2022-01-02T09:53:40+00:00", + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.4.3" + }, + "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/error-handler" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.4.3", + "version_normalized": "5.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d", + "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "time": "2022-01-02T09:53:40+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3" + }, + "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/event-dispatcher" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.5.0", + "version_normalized": "2.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "time": "2021-07-12T14:48:14+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "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": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.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/event-dispatcher-contracts" + }, + { + "name": "symfony/finder", + "version": "v5.4.3", + "version_normalized": "5.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "time": "2022-01-26T16:34:36+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.3" + }, + "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/finder" + }, + { + "name": "symfony/http-foundation", + "version": "v5.4.6", + "version_normalized": "5.4.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/34e89bc147633c0f9dd6caaaf56da3b806a21465", + "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "time": "2022-03-05T21:03:43+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.4.6" + }, + "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/http-foundation" + }, + { + "name": "symfony/http-kernel", + "version": "v5.4.6", + "version_normalized": "5.4.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "d41f29ae9af1b5f40c7ebcddf09082953229411d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d41f29ae9af1b5f40c7ebcddf09082953229411d", + "reference": "d41f29ae9af1b5f40c7ebcddf09082953229411d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^5.0|^6.0", + "symfony/http-foundation": "^5.3.7|^6.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.3", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "time": "2022-03-05T21:14:51+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.4.6" + }, + "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/http-kernel" + }, + { + "name": "symfony/mime", + "version": "v5.4.3", + "version_normalized": "5.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/e1503cfb5c9a225350f549d3bb99296f4abfb80f", + "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/property-access": "^4.4|^5.1|^6.0", + "symfony/property-info": "^4.4|^5.1|^6.0", + "symfony/serializer": "^5.2|^6.0" + }, + "time": "2022-01-02T09:53:40+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v5.4.3" + }, + "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/mime" + }, + { + "name": "symfony/options-resolver", + "version": "v5.4.3", + "version_normalized": "5.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "time": "2022-01-02T09:53:40+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.4.3" + }, + "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/options-resolver" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "30885182c981ab175d4d034db0f6f469898070ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2021-10-20T20:35:02+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.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-ctype" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40", + "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-iconv": "*" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "time": "2022-01-04T09:04:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + } + }, + "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 Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.25.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-iconv" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2021-11-23T21:10:46+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "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 intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.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-intl-grapheme" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", + "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2021-09-14T14:02:44+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.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-intl-idn" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2021-02-19T12:13:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "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 intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.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-intl-normalizer" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2021-11-30T18:21:41+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "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.25.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/polyfill-php72", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2021-05-27T09:17:38+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "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 backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.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-php72" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2021-06-05T21:20:04+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "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 backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.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-php73" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2022-03-04T08:16:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.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-php80" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2021-09-13T13:58:11+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "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 backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.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-php81" + }, + { + "name": "symfony/process", + "version": "v5.4.5", + "version_normalized": "5.4.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "95440409896f90a5f85db07a32b517ecec17fa4c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/95440409896f90a5f85db07a32b517ecec17fa4c", + "reference": "95440409896f90a5f85db07a32b517ecec17fa4c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "time": "2022-01-30T18:16:22+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.5" + }, + "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/process" + }, + { + "name": "symfony/routing", + "version": "v5.4.3", + "version_normalized": "5.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "44b29c7a94e867ccde1da604792f11a469958981" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981", + "reference": "44b29c7a94e867ccde1da604792f11a469958981", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.3", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.3|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "time": "2022-01-02T09:53:40+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v5.4.3" + }, + "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/routing" + }, + { + "name": "symfony/service-contracts", + "version": "v2.5.0", + "version_normalized": "2.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "time": "2021-11-04T16:48:04+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "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": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.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/service-contracts" + }, + { + "name": "symfony/string", + "version": "v5.4.3", + "version_normalized": "5.4.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10", + "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "time": "2022-01-02T09:53:40+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "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 an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.4.3" + }, + "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/string" + }, + { + "name": "symfony/thanks", + "version": "v1.2.10", + "version_normalized": "1.2.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/thanks.git", + "reference": "e9c4709560296acbd4fe9e12b8d57a925aa7eae8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/thanks/zipball/e9c4709560296acbd4fe9e12b8d57a925aa7eae8", + "reference": "e9c4709560296acbd4fe9e12b8d57a925aa7eae8", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": ">=5.5.9" + }, + "time": "2020-10-14T17:47:37+00:00", + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + }, + "class": "Symfony\\Thanks\\Thanks" + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Thanks\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + } + ], + "description": "Encourages sending ⭐ and 💵 to fellow PHP package maintainers (not limited to Symfony components)!", + "support": { + "issues": "https://github.com/symfony/thanks/issues", + "source": "https://github.com/symfony/thanks/tree/v1.2.10" + }, + "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/thanks" + }, + { + "name": "symfony/translation", + "version": "v5.4.6", + "version_normalized": "5.4.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/a7ca9fdfffb0174209440c2ffa1dee228e15d95b", + "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^2.3" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/console": "<5.3", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.3" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "time": "2022-03-02T12:56:28+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v5.4.6" + }, + "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/translation" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.5.0", + "version_normalized": "2.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e", + "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "time": "2021-08-17T14:20:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "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": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.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/translation-contracts" + }, + { + "name": "symfony/var-dumper", + "version": "v5.4.6", + "version_normalized": "5.4.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/294e9da6e2e0dd404e983daa5aa74253d92c05d0", + "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/uid": "^5.1|^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": "2022-03-02T12:42:23+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/v5.4.6" + }, + "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": "symfony/var-exporter", + "version": "v5.4.6", + "version_normalized": "5.4.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "49e2355fe6f59ea30c18ebb68edf13b7e20582e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/49e2355fe6f59ea30c18ebb68edf13b7e20582e5", + "reference": "49e2355fe6f59ea30c18ebb68edf13b7e20582e5", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" + }, + "time": "2022-03-02T12:42:23+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "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": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.4.6" + }, + "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-exporter" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "version_normalized": "1.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "time": "2021-07-28T10:34:58+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "install-path": "../theseer/tokenizer" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.4", + "version_normalized": "2.2.4.0", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c", + "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "time": "2021-12-08T09:12:39+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4" + }, + "install-path": "../tijsverkoyen/css-to-inline-styles" + }, + { + "name": "vlucas/phpdotenv", + "version": "v4.2.2", + "version_normalized": "4.2.2.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "77e974614d2ead521f18069dccc571696f52b8dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/77e974614d2ead521f18069dccc571696f52b8dc", + "reference": "77e974614d2ead521f18069dccc571696f52b8dc", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "phpoption/phpoption": "^1.7.3", + "symfony/polyfill-ctype": "^1.17" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "ext-pcre": "*", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.21" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator.", + "ext-pcre": "Required to use most of the library." + }, + "time": "2021-12-12T23:07:53+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v4.2.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "install-path": "../vlucas/phpdotenv" + }, + { + "name": "voku/portable-ascii", + "version": "1.6.1", + "version_normalized": "1.6.1.0", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "time": "2022-01-24T18:55:24+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/1.6.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "install-path": "../voku/portable-ascii" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "version_normalized": "1.10.0.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "time": "2021-03-09T10:59:23+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "install-path": "../webmozart/assert" + } + ], + "dev": true, + "dev-package-names": [ + "doctrine/instantiator", + "filp/whoops", + "fzaninotto/faker", + "hamcrest/hamcrest-php", + "mockery/mockery", + "myclabs/deep-copy", + "phar-io/manifest", + "phar-io/version", + "phpdocumentor/reflection-common", + "phpdocumentor/reflection-docblock", + "phpdocumentor/type-resolver", + "phpspec/prophecy", + "phpunit/php-code-coverage", + "phpunit/php-file-iterator", + "phpunit/php-text-template", + "phpunit/php-timer", + "phpunit/php-token-stream", + "phpunit/phpunit", + "phpunit/phpunit-mock-objects", + "sebastian/code-unit-reverse-lookup", + "sebastian/comparator", + "sebastian/diff", + "sebastian/environment", + "sebastian/exporter", + "sebastian/global-state", + "sebastian/object-enumerator", + "sebastian/object-reflector", + "sebastian/recursion-context", + "sebastian/resource-operations", + "sebastian/version", + "symfony/thanks", + "theseer/tokenizer", + "webmozart/assert" + ] +} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php new file mode 100644 index 00000000..aacdf1a0 --- /dev/null +++ b/vendor/composer/installed.php @@ -0,0 +1,1320 @@ + array( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'type' => 'project', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => '61a5a1a8b023771e0ff7c056add5537d20737e51', + 'name' => 'laravel/laravel', + 'dev' => true, + ), + 'versions' => array( + 'brick/math' => array( + 'pretty_version' => '0.9.3', + 'version' => '0.9.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../brick/math', + 'aliases' => array(), + 'reference' => 'ca57d18f028f84f777b2168cd1911b0dee2343ae', + 'dev_requirement' => false, + ), + 'clue/stream-filter' => array( + 'pretty_version' => 'v1.6.0', + 'version' => '1.6.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../clue/stream-filter', + 'aliases' => array(), + 'reference' => 'd6169430c7731d8509da7aecd0af756a5747b78e', + 'dev_requirement' => false, + ), + 'cordoval/hamcrest-php' => array( + 'dev_requirement' => true, + 'replaced' => array( + 0 => '*', + ), + ), + 'davedevelopment/hamcrest-php' => array( + 'dev_requirement' => true, + 'replaced' => array( + 0 => '*', + ), + ), + 'doctrine/inflector' => array( + 'pretty_version' => '2.0.4', + 'version' => '2.0.4.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../doctrine/inflector', + 'aliases' => array(), + 'reference' => '8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89', + 'dev_requirement' => false, + ), + 'doctrine/instantiator' => array( + 'pretty_version' => '1.4.1', + 'version' => '1.4.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../doctrine/instantiator', + 'aliases' => array(), + 'reference' => '10dcfce151b967d20fde1b34ae6640712c3891bc', + 'dev_requirement' => true, + ), + 'doctrine/lexer' => array( + 'pretty_version' => '1.2.3', + 'version' => '1.2.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../doctrine/lexer', + 'aliases' => array(), + 'reference' => 'c268e882d4dbdd85e36e4ad69e02dc284f89d229', + 'dev_requirement' => false, + ), + 'dragonmantank/cron-expression' => array( + 'pretty_version' => 'v2.3.1', + 'version' => '2.3.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../dragonmantank/cron-expression', + 'aliases' => array(), + 'reference' => '65b2d8ee1f10915efb3b55597da3404f096acba2', + 'dev_requirement' => false, + ), + 'egulias/email-validator' => array( + 'pretty_version' => '2.1.25', + 'version' => '2.1.25.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../egulias/email-validator', + 'aliases' => array(), + 'reference' => '0dbf5d78455d4d6a41d186da50adc1122ec066f4', + 'dev_requirement' => false, + ), + 'fideloper/proxy' => array( + 'pretty_version' => '4.4.1', + 'version' => '4.4.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../fideloper/proxy', + 'aliases' => array(), + 'reference' => 'c073b2bd04d1c90e04dc1b787662b558dd65ade0', + 'dev_requirement' => false, + ), + 'filp/whoops' => array( + 'pretty_version' => '2.14.5', + 'version' => '2.14.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../filp/whoops', + 'aliases' => array(), + 'reference' => 'a63e5e8f26ebbebf8ed3c5c691637325512eb0dc', + 'dev_requirement' => true, + ), + 'fzaninotto/faker' => array( + 'pretty_version' => 'v1.9.2', + 'version' => '1.9.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../fzaninotto/faker', + 'aliases' => array(), + 'reference' => '848d8125239d7dbf8ab25cb7f054f1a630e68c2e', + 'dev_requirement' => true, + ), + 'graham-campbell/bounded-cache' => array( + 'pretty_version' => 'v1.1.3', + 'version' => '1.1.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../graham-campbell/bounded-cache', + 'aliases' => array(), + 'reference' => 'cbb12c2d7b2f93f4d8c2a1e46e16fb1e5842c92b', + 'dev_requirement' => false, + ), + 'graham-campbell/github' => array( + 'pretty_version' => 'v10.5.0', + 'version' => '10.5.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../graham-campbell/github', + 'aliases' => array(), + 'reference' => 'b88f6737bcc088a84ce3ec863a50afbc3ab8e867', + 'dev_requirement' => false, + ), + 'graham-campbell/manager' => array( + 'pretty_version' => 'v4.7.0', + 'version' => '4.7.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../graham-campbell/manager', + 'aliases' => array(), + 'reference' => 'b4cafa6491b9c92ecf7ce17521580050a27b8308', + 'dev_requirement' => false, + ), + 'guzzlehttp/guzzle' => array( + 'pretty_version' => '7.4.1', + 'version' => '7.4.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../guzzlehttp/guzzle', + 'aliases' => array(), + 'reference' => 'ee0a041b1760e6a53d2a39c8c34115adc2af2c79', + 'dev_requirement' => false, + ), + 'guzzlehttp/promises' => array( + 'pretty_version' => '1.5.1', + 'version' => '1.5.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../guzzlehttp/promises', + 'aliases' => array(), + 'reference' => 'fe752aedc9fd8fcca3fe7ad05d419d32998a06da', + 'dev_requirement' => false, + ), + 'guzzlehttp/psr7' => array( + 'pretty_version' => '2.1.0', + 'version' => '2.1.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../guzzlehttp/psr7', + 'aliases' => array(), + 'reference' => '089edd38f5b8abba6cb01567c2a8aaa47cec4c72', + 'dev_requirement' => false, + ), + 'hamcrest/hamcrest-php' => array( + 'pretty_version' => 'v2.0.1', + 'version' => '2.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../hamcrest/hamcrest-php', + 'aliases' => array(), + 'reference' => '8c3d0a3f6af734494ad8f6fbbee0ba92422859f3', + 'dev_requirement' => true, + ), + 'illuminate/auth' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/broadcasting' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/bus' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/cache' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/config' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/console' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/container' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/contracts' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/cookie' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/database' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/encryption' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/events' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/filesystem' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/hashing' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/http' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/log' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/mail' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/notifications' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/pagination' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/pipeline' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/queue' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/redis' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/routing' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/session' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/support' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/testing' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/translation' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/validation' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'illuminate/view' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => 'v7.30.6', + ), + ), + 'knplabs/github-api' => array( + 'pretty_version' => 'v3.5.1', + 'version' => '3.5.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../knplabs/github-api', + 'aliases' => array(), + 'reference' => '37b167998e8e1f318b3d99633675cfa007540565', + 'dev_requirement' => false, + ), + 'kodova/hamcrest-php' => array( + 'dev_requirement' => true, + 'replaced' => array( + 0 => '*', + ), + ), + 'laravel/framework' => array( + 'pretty_version' => 'v7.30.6', + 'version' => '7.30.6.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../laravel/framework', + 'aliases' => array(), + 'reference' => 'ecdafad1dda3c790af186a6d18479ea4757ef9ee', + 'dev_requirement' => false, + ), + 'laravel/laravel' => array( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'type' => 'project', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => '61a5a1a8b023771e0ff7c056add5537d20737e51', + 'dev_requirement' => false, + ), + 'laravel/tinker' => array( + 'pretty_version' => 'v2.7.0', + 'version' => '2.7.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../laravel/tinker', + 'aliases' => array(), + 'reference' => '5f2f9815b7631b9f586a3de7933c25f9327d4073', + 'dev_requirement' => false, + ), + 'laravel/ui' => array( + 'pretty_version' => 'v2.5.0', + 'version' => '2.5.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../laravel/ui', + 'aliases' => array(), + 'reference' => 'd01a705763c243b07be795e9d1bb47f89260f73d', + 'dev_requirement' => false, + ), + 'laravelcollective/html' => array( + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../laravelcollective/html', + 'aliases' => array(), + 'reference' => '78c3cb516ac9e6d3d76cad9191f81d217302dea6', + 'dev_requirement' => false, + ), + 'league/commonmark' => array( + 'pretty_version' => '1.6.7', + 'version' => '1.6.7.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../league/commonmark', + 'aliases' => array(), + 'reference' => '2b8185c13bc9578367a5bf901881d1c1b5bbd09b', + 'dev_requirement' => false, + ), + 'league/flysystem' => array( + 'pretty_version' => '1.1.9', + 'version' => '1.1.9.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../league/flysystem', + 'aliases' => array(), + 'reference' => '094defdb4a7001845300334e7c1ee2335925ef99', + 'dev_requirement' => false, + ), + 'league/mime-type-detection' => array( + 'pretty_version' => '1.9.0', + 'version' => '1.9.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../league/mime-type-detection', + 'aliases' => array(), + 'reference' => 'aa70e813a6ad3d1558fc927863d47309b4c23e69', + 'dev_requirement' => false, + ), + 'mockery/mockery' => array( + 'pretty_version' => '1.3.5', + 'version' => '1.3.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../mockery/mockery', + 'aliases' => array(), + 'reference' => '472fa8ca4e55483d55ee1e73c963718c4393791d', + 'dev_requirement' => true, + ), + 'monolog/monolog' => array( + 'pretty_version' => '2.3.5', + 'version' => '2.3.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../monolog/monolog', + 'aliases' => array(), + 'reference' => 'fd4380d6fc37626e2f799f29d91195040137eba9', + 'dev_requirement' => false, + ), + 'myclabs/deep-copy' => array( + 'pretty_version' => '1.11.0', + 'version' => '1.11.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../myclabs/deep-copy', + 'aliases' => array(), + 'reference' => '14daed4296fae74d9e3201d2c4925d1acb7aa614', + 'dev_requirement' => true, + ), + 'nesbot/carbon' => array( + 'pretty_version' => '2.57.0', + 'version' => '2.57.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../nesbot/carbon', + 'aliases' => array(), + 'reference' => '4a54375c21eea4811dbd1149fe6b246517554e78', + 'dev_requirement' => false, + ), + 'nikic/php-parser' => array( + 'pretty_version' => 'v4.13.2', + 'version' => '4.13.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../nikic/php-parser', + 'aliases' => array(), + 'reference' => '210577fe3cf7badcc5814d99455df46564f3c077', + 'dev_requirement' => false, + ), + 'opis/closure' => array( + 'pretty_version' => '3.6.3', + 'version' => '3.6.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../opis/closure', + 'aliases' => array(), + 'reference' => '3d81e4309d2a927abbe66df935f4bb60082805ad', + 'dev_requirement' => false, + ), + 'phar-io/manifest' => array( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phar-io/manifest', + 'aliases' => array(), + 'reference' => '2df402786ab5368a0169091f61a7c1e0eb6852d0', + 'dev_requirement' => true, + ), + 'phar-io/version' => array( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phar-io/version', + 'aliases' => array(), + 'reference' => 'a70c0ced4be299a63d32fa96d9281d03e94041df', + 'dev_requirement' => true, + ), + 'php-http/cache-plugin' => array( + 'pretty_version' => '1.7.5', + 'version' => '1.7.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../php-http/cache-plugin', + 'aliases' => array(), + 'reference' => '63bc3f7242825c9a817db8f78e4c9703b0c471e2', + 'dev_requirement' => false, + ), + 'php-http/client-common' => array( + 'pretty_version' => '2.5.0', + 'version' => '2.5.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../php-http/client-common', + 'aliases' => array(), + 'reference' => 'd135751167d57e27c74de674d6a30cef2dc8e054', + 'dev_requirement' => false, + ), + 'php-http/discovery' => array( + 'pretty_version' => '1.14.1', + 'version' => '1.14.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../php-http/discovery', + 'aliases' => array(), + 'reference' => 'de90ab2b41d7d61609f504e031339776bc8c7223', + 'dev_requirement' => false, + ), + 'php-http/httplug' => array( + 'pretty_version' => '2.3.0', + 'version' => '2.3.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../php-http/httplug', + 'aliases' => array(), + 'reference' => 'f640739f80dfa1152533976e3c112477f69274eb', + 'dev_requirement' => false, + ), + 'php-http/message' => array( + 'pretty_version' => '1.13.0', + 'version' => '1.13.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../php-http/message', + 'aliases' => array(), + 'reference' => '7886e647a30a966a1a8d1dad1845b71ca8678361', + 'dev_requirement' => false, + ), + 'php-http/message-factory' => array( + 'pretty_version' => 'v1.0.2', + 'version' => '1.0.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../php-http/message-factory', + 'aliases' => array(), + 'reference' => 'a478cb11f66a6ac48d8954216cfed9aa06a501a1', + 'dev_requirement' => false, + ), + 'php-http/message-factory-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0', + ), + ), + 'php-http/multipart-stream-builder' => array( + 'pretty_version' => '1.2.0', + 'version' => '1.2.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../php-http/multipart-stream-builder', + 'aliases' => array(), + 'reference' => '11c1d31f72e01c738bbce9e27649a7cca829c30e', + 'dev_requirement' => false, + ), + 'php-http/promise' => array( + 'pretty_version' => '1.1.0', + 'version' => '1.1.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../php-http/promise', + 'aliases' => array(), + 'reference' => '4c4c1f9b7289a2ec57cde7f1e9762a5789506f88', + 'dev_requirement' => false, + ), + 'phpdocumentor/reflection-common' => array( + 'pretty_version' => '2.2.0', + 'version' => '2.2.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpdocumentor/reflection-common', + 'aliases' => array(), + 'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b', + 'dev_requirement' => true, + ), + 'phpdocumentor/reflection-docblock' => array( + 'pretty_version' => '5.3.0', + 'version' => '5.3.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpdocumentor/reflection-docblock', + 'aliases' => array(), + 'reference' => '622548b623e81ca6d78b721c5e029f4ce664f170', + 'dev_requirement' => true, + ), + 'phpdocumentor/type-resolver' => array( + 'pretty_version' => '1.6.0', + 'version' => '1.6.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpdocumentor/type-resolver', + 'aliases' => array(), + 'reference' => '93ebd0014cab80c4ea9f5e297ea48672f1b87706', + 'dev_requirement' => true, + ), + 'phpoption/phpoption' => array( + 'pretty_version' => '1.8.1', + 'version' => '1.8.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpoption/phpoption', + 'aliases' => array(), + 'reference' => 'eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15', + 'dev_requirement' => false, + ), + 'phpspec/prophecy' => array( + 'pretty_version' => 'v1.10.3', + 'version' => '1.10.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpspec/prophecy', + 'aliases' => array(), + 'reference' => '451c3cd1418cf640de218914901e51b064abb093', + 'dev_requirement' => true, + ), + 'phpunit/php-code-coverage' => array( + 'pretty_version' => '5.3.2', + 'version' => '5.3.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpunit/php-code-coverage', + 'aliases' => array(), + 'reference' => 'c89677919c5dd6d3b3852f230a663118762218ac', + 'dev_requirement' => true, + ), + 'phpunit/php-file-iterator' => array( + 'pretty_version' => '1.4.5', + 'version' => '1.4.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpunit/php-file-iterator', + 'aliases' => array(), + 'reference' => '730b01bc3e867237eaac355e06a36b85dd93a8b4', + 'dev_requirement' => true, + ), + 'phpunit/php-text-template' => array( + 'pretty_version' => '1.2.1', + 'version' => '1.2.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpunit/php-text-template', + 'aliases' => array(), + 'reference' => '31f8b717e51d9a2afca6c9f046f5d69fc27c8686', + 'dev_requirement' => true, + ), + 'phpunit/php-timer' => array( + 'pretty_version' => '1.0.9', + 'version' => '1.0.9.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpunit/php-timer', + 'aliases' => array(), + 'reference' => '3dcf38ca72b158baf0bc245e9184d3fdffa9c46f', + 'dev_requirement' => true, + ), + 'phpunit/php-token-stream' => array( + 'pretty_version' => '2.0.2', + 'version' => '2.0.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpunit/php-token-stream', + 'aliases' => array(), + 'reference' => '791198a2c6254db10131eecfe8c06670700904db', + 'dev_requirement' => true, + ), + 'phpunit/phpunit' => array( + 'pretty_version' => '6.5.14', + 'version' => '6.5.14.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpunit/phpunit', + 'aliases' => array(), + 'reference' => 'bac23fe7ff13dbdb461481f706f0e9fe746334b7', + 'dev_requirement' => true, + ), + 'phpunit/phpunit-mock-objects' => array( + 'pretty_version' => '5.0.10', + 'version' => '5.0.10.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpunit/phpunit-mock-objects', + 'aliases' => array(), + 'reference' => 'cd1cf05c553ecfec36b170070573e540b67d3f1f', + 'dev_requirement' => true, + ), + 'psr/cache' => array( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/cache', + 'aliases' => array(), + 'reference' => 'd11b50ad223250cf17b86e38383413f5a6764bf8', + 'dev_requirement' => false, + ), + 'psr/cache-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0|2.0', + ), + ), + 'psr/container' => array( + 'pretty_version' => '1.1.2', + 'version' => '1.1.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/container', + 'aliases' => array(), + 'reference' => '513e0666f7216c7459170d56df27dfcefe1689ea', + 'dev_requirement' => false, + ), + 'psr/container-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0', + ), + ), + 'psr/event-dispatcher' => array( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/event-dispatcher', + 'aliases' => array(), + 'reference' => 'dbefd12671e8a14ec7f180cab83036ed26714bb0', + 'dev_requirement' => false, + ), + 'psr/event-dispatcher-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0', + ), + ), + 'psr/http-client' => array( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/http-client', + 'aliases' => array(), + 'reference' => '2dfb5f6c5eff0e91e20e913f8c5452ed95b86621', + 'dev_requirement' => false, + ), + 'psr/http-client-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0', + ), + ), + 'psr/http-factory' => array( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/http-factory', + 'aliases' => array(), + 'reference' => '12ac7fcd07e5b077433f5f2bee95b3a771bf61be', + 'dev_requirement' => false, + ), + 'psr/http-factory-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0', + ), + ), + 'psr/http-message' => array( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/http-message', + 'aliases' => array(), + 'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363', + 'dev_requirement' => false, + ), + 'psr/http-message-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0', + ), + ), + 'psr/log' => array( + 'pretty_version' => '1.1.4', + 'version' => '1.1.4.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/log', + 'aliases' => array(), + 'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11', + 'dev_requirement' => false, + ), + 'psr/log-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0.0 || 2.0.0 || 3.0.0', + 1 => '1.0|2.0', + ), + ), + 'psr/simple-cache' => array( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/simple-cache', + 'aliases' => array(), + 'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b', + 'dev_requirement' => false, + ), + 'psr/simple-cache-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0|2.0', + ), + ), + 'psy/psysh' => array( + 'pretty_version' => 'v0.11.2', + 'version' => '0.11.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psy/psysh', + 'aliases' => array(), + 'reference' => '7f7da640d68b9c9fec819caae7c744a213df6514', + 'dev_requirement' => false, + ), + 'ralouphie/getallheaders' => array( + 'pretty_version' => '3.0.3', + 'version' => '3.0.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../ralouphie/getallheaders', + 'aliases' => array(), + 'reference' => '120b605dfeb996808c31b6477290a714d356e822', + 'dev_requirement' => false, + ), + 'ramsey/collection' => array( + 'pretty_version' => '1.2.2', + 'version' => '1.2.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../ramsey/collection', + 'aliases' => array(), + 'reference' => 'cccc74ee5e328031b15640b51056ee8d3bb66c0a', + 'dev_requirement' => false, + ), + 'ramsey/uuid' => array( + 'pretty_version' => '4.2.3', + 'version' => '4.2.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../ramsey/uuid', + 'aliases' => array(), + 'reference' => 'fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df', + 'dev_requirement' => false, + ), + 'rhumsaa/uuid' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => '4.2.3', + ), + ), + 'sebastian/code-unit-reverse-lookup' => array( + 'pretty_version' => '1.0.2', + 'version' => '1.0.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/code-unit-reverse-lookup', + 'aliases' => array(), + 'reference' => '1de8cd5c010cb153fcd68b8d0f64606f523f7619', + 'dev_requirement' => true, + ), + 'sebastian/comparator' => array( + 'pretty_version' => '2.1.3', + 'version' => '2.1.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/comparator', + 'aliases' => array(), + 'reference' => '34369daee48eafb2651bea869b4b15d75ccc35f9', + 'dev_requirement' => true, + ), + 'sebastian/diff' => array( + 'pretty_version' => '2.0.1', + 'version' => '2.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/diff', + 'aliases' => array(), + 'reference' => '347c1d8b49c5c3ee30c7040ea6fc446790e6bddd', + 'dev_requirement' => true, + ), + 'sebastian/environment' => array( + 'pretty_version' => '3.1.0', + 'version' => '3.1.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/environment', + 'aliases' => array(), + 'reference' => 'cd0871b3975fb7fc44d11314fd1ee20925fce4f5', + 'dev_requirement' => true, + ), + 'sebastian/exporter' => array( + 'pretty_version' => '3.1.4', + 'version' => '3.1.4.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/exporter', + 'aliases' => array(), + 'reference' => '0c32ea2e40dbf59de29f3b49bf375176ce7dd8db', + 'dev_requirement' => true, + ), + 'sebastian/global-state' => array( + 'pretty_version' => '2.0.0', + 'version' => '2.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/global-state', + 'aliases' => array(), + 'reference' => 'e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4', + 'dev_requirement' => true, + ), + 'sebastian/object-enumerator' => array( + 'pretty_version' => '3.0.4', + 'version' => '3.0.4.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/object-enumerator', + 'aliases' => array(), + 'reference' => 'e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2', + 'dev_requirement' => true, + ), + 'sebastian/object-reflector' => array( + 'pretty_version' => '1.1.2', + 'version' => '1.1.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/object-reflector', + 'aliases' => array(), + 'reference' => '9b8772b9cbd456ab45d4a598d2dd1a1bced6363d', + 'dev_requirement' => true, + ), + 'sebastian/recursion-context' => array( + 'pretty_version' => '3.0.1', + 'version' => '3.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/recursion-context', + 'aliases' => array(), + 'reference' => '367dcba38d6e1977be014dc4b22f47a484dac7fb', + 'dev_requirement' => true, + ), + 'sebastian/resource-operations' => array( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/resource-operations', + 'aliases' => array(), + 'reference' => 'ce990bb21759f94aeafd30209e8cfcdfa8bc3f52', + 'dev_requirement' => true, + ), + 'sebastian/version' => array( + 'pretty_version' => '2.0.1', + 'version' => '2.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../sebastian/version', + 'aliases' => array(), + 'reference' => '99732be0ddb3361e16ad77b68ba41efc8e979019', + 'dev_requirement' => true, + ), + 'swiftmailer/swiftmailer' => array( + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../swiftmailer/swiftmailer', + 'aliases' => array(), + 'reference' => '8a5d5072dca8f48460fce2f4131fcc495eec654c', + 'dev_requirement' => false, + ), + 'symfony/cache' => array( + 'pretty_version' => 'v5.4.6', + 'version' => '5.4.6.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/cache', + 'aliases' => array(), + 'reference' => 'c0718d0e01ac14251a45cc9c8b93716ec41ae64b', + 'dev_requirement' => false, + ), + 'symfony/cache-contracts' => array( + 'pretty_version' => 'v2.5.0', + 'version' => '2.5.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/cache-contracts', + 'aliases' => array(), + 'reference' => 'ac2e168102a2e06a2624f0379bde94cd5854ced2', + 'dev_requirement' => false, + ), + 'symfony/cache-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0|2.0', + ), + ), + 'symfony/console' => array( + 'pretty_version' => 'v5.4.5', + 'version' => '5.4.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/console', + 'aliases' => array(), + 'reference' => 'd8111acc99876953f52fe16d4c50eb60940d49ad', + 'dev_requirement' => false, + ), + 'symfony/css-selector' => array( + 'pretty_version' => 'v5.4.3', + 'version' => '5.4.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/css-selector', + 'aliases' => array(), + 'reference' => 'b0a190285cd95cb019237851205b8140ef6e368e', + 'dev_requirement' => false, + ), + 'symfony/deprecation-contracts' => array( + 'pretty_version' => 'v2.5.0', + 'version' => '2.5.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', + 'aliases' => array(), + 'reference' => '6f981ee24cf69ee7ce9736146d1c57c2780598a8', + 'dev_requirement' => false, + ), + 'symfony/error-handler' => array( + 'pretty_version' => 'v5.4.3', + 'version' => '5.4.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/error-handler', + 'aliases' => array(), + 'reference' => 'c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5', + 'dev_requirement' => false, + ), + 'symfony/event-dispatcher' => array( + 'pretty_version' => 'v5.4.3', + 'version' => '5.4.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/event-dispatcher', + 'aliases' => array(), + 'reference' => 'dec8a9f58d20df252b9cd89f1c6c1530f747685d', + 'dev_requirement' => false, + ), + 'symfony/event-dispatcher-contracts' => array( + 'pretty_version' => 'v2.5.0', + 'version' => '2.5.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/event-dispatcher-contracts', + 'aliases' => array(), + 'reference' => '66bea3b09be61613cd3b4043a65a8ec48cfa6d2a', + 'dev_requirement' => false, + ), + 'symfony/event-dispatcher-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '2.0', + ), + ), + 'symfony/finder' => array( + 'pretty_version' => 'v5.4.3', + 'version' => '5.4.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/finder', + 'aliases' => array(), + 'reference' => '231313534dded84c7ecaa79d14bc5da4ccb69b7d', + 'dev_requirement' => false, + ), + 'symfony/http-foundation' => array( + 'pretty_version' => 'v5.4.6', + 'version' => '5.4.6.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/http-foundation', + 'aliases' => array(), + 'reference' => '34e89bc147633c0f9dd6caaaf56da3b806a21465', + 'dev_requirement' => false, + ), + 'symfony/http-kernel' => array( + 'pretty_version' => 'v5.4.6', + 'version' => '5.4.6.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/http-kernel', + 'aliases' => array(), + 'reference' => 'd41f29ae9af1b5f40c7ebcddf09082953229411d', + 'dev_requirement' => false, + ), + 'symfony/mime' => array( + 'pretty_version' => 'v5.4.3', + 'version' => '5.4.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/mime', + 'aliases' => array(), + 'reference' => 'e1503cfb5c9a225350f549d3bb99296f4abfb80f', + 'dev_requirement' => false, + ), + 'symfony/options-resolver' => array( + 'pretty_version' => 'v5.4.3', + 'version' => '5.4.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/options-resolver', + 'aliases' => array(), + 'reference' => 'cc1147cb11af1b43f503ac18f31aa3bec213aba8', + 'dev_requirement' => false, + ), + 'symfony/polyfill-ctype' => array( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', + 'aliases' => array(), + 'reference' => '30885182c981ab175d4d034db0f6f469898070ab', + 'dev_requirement' => false, + ), + 'symfony/polyfill-iconv' => array( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-iconv', + 'aliases' => array(), + 'reference' => 'f1aed619e28cb077fc83fac8c4c0383578356e40', + 'dev_requirement' => false, + ), + 'symfony/polyfill-intl-grapheme' => array( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme', + 'aliases' => array(), + 'reference' => '81b86b50cf841a64252b439e738e97f4a34e2783', + 'dev_requirement' => false, + ), + 'symfony/polyfill-intl-idn' => array( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-intl-idn', + 'aliases' => array(), + 'reference' => '749045c69efb97c70d25d7463abba812e91f3a44', + 'dev_requirement' => false, + ), + 'symfony/polyfill-intl-normalizer' => array( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer', + 'aliases' => array(), + 'reference' => '8590a5f561694770bdcd3f9b5c69dde6945028e8', + 'dev_requirement' => false, + ), + 'symfony/polyfill-mbstring' => array( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', + 'aliases' => array(), + 'reference' => '0abb51d2f102e00a4eefcf46ba7fec406d245825', + 'dev_requirement' => false, + ), + 'symfony/polyfill-php72' => array( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-php72', + 'aliases' => array(), + 'reference' => '9a142215a36a3888e30d0a9eeea9766764e96976', + 'dev_requirement' => false, + ), + 'symfony/polyfill-php73' => array( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-php73', + 'aliases' => array(), + 'reference' => 'cc5db0e22b3cb4111010e48785a97f670b350ca5', + 'dev_requirement' => false, + ), + 'symfony/polyfill-php80' => array( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-php80', + 'aliases' => array(), + 'reference' => '4407588e0d3f1f52efb65fbe92babe41f37fe50c', + 'dev_requirement' => false, + ), + 'symfony/polyfill-php81' => array( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-php81', + 'aliases' => array(), + 'reference' => '5de4ba2d41b15f9bd0e19b2ab9674135813ec98f', + 'dev_requirement' => false, + ), + 'symfony/process' => array( + 'pretty_version' => 'v5.4.5', + 'version' => '5.4.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/process', + 'aliases' => array(), + 'reference' => '95440409896f90a5f85db07a32b517ecec17fa4c', + 'dev_requirement' => false, + ), + 'symfony/routing' => array( + 'pretty_version' => 'v5.4.3', + 'version' => '5.4.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/routing', + 'aliases' => array(), + 'reference' => '44b29c7a94e867ccde1da604792f11a469958981', + 'dev_requirement' => false, + ), + 'symfony/service-contracts' => array( + 'pretty_version' => 'v2.5.0', + 'version' => '2.5.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/service-contracts', + 'aliases' => array(), + 'reference' => '1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc', + 'dev_requirement' => false, + ), + 'symfony/string' => array( + 'pretty_version' => 'v5.4.3', + 'version' => '5.4.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/string', + 'aliases' => array(), + 'reference' => '92043b7d8383e48104e411bc9434b260dbeb5a10', + 'dev_requirement' => false, + ), + 'symfony/thanks' => array( + 'pretty_version' => 'v1.2.10', + 'version' => '1.2.10.0', + 'type' => 'composer-plugin', + 'install_path' => __DIR__ . '/../symfony/thanks', + 'aliases' => array(), + 'reference' => 'e9c4709560296acbd4fe9e12b8d57a925aa7eae8', + 'dev_requirement' => true, + ), + 'symfony/translation' => array( + 'pretty_version' => 'v5.4.6', + 'version' => '5.4.6.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/translation', + 'aliases' => array(), + 'reference' => 'a7ca9fdfffb0174209440c2ffa1dee228e15d95b', + 'dev_requirement' => false, + ), + 'symfony/translation-contracts' => array( + 'pretty_version' => 'v2.5.0', + 'version' => '2.5.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/translation-contracts', + 'aliases' => array(), + 'reference' => 'd28150f0f44ce854e942b671fc2620a98aae1b1e', + 'dev_requirement' => false, + ), + 'symfony/translation-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '2.3', + ), + ), + 'symfony/var-dumper' => array( + 'pretty_version' => 'v5.4.6', + 'version' => '5.4.6.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/var-dumper', + 'aliases' => array(), + 'reference' => '294e9da6e2e0dd404e983daa5aa74253d92c05d0', + 'dev_requirement' => false, + ), + 'symfony/var-exporter' => array( + 'pretty_version' => 'v5.4.6', + 'version' => '5.4.6.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/var-exporter', + 'aliases' => array(), + 'reference' => '49e2355fe6f59ea30c18ebb68edf13b7e20582e5', + 'dev_requirement' => false, + ), + 'theseer/tokenizer' => array( + 'pretty_version' => '1.2.1', + 'version' => '1.2.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../theseer/tokenizer', + 'aliases' => array(), + 'reference' => '34a41e998c2183e22995f158c581e7b5e755ab9e', + 'dev_requirement' => true, + ), + 'tijsverkoyen/css-to-inline-styles' => array( + 'pretty_version' => '2.2.4', + 'version' => '2.2.4.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../tijsverkoyen/css-to-inline-styles', + 'aliases' => array(), + 'reference' => 'da444caae6aca7a19c0c140f68c6182e337d5b1c', + 'dev_requirement' => false, + ), + 'vlucas/phpdotenv' => array( + 'pretty_version' => 'v4.2.2', + 'version' => '4.2.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../vlucas/phpdotenv', + 'aliases' => array(), + 'reference' => '77e974614d2ead521f18069dccc571696f52b8dc', + 'dev_requirement' => false, + ), + 'voku/portable-ascii' => array( + 'pretty_version' => '1.6.1', + 'version' => '1.6.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../voku/portable-ascii', + 'aliases' => array(), + 'reference' => '87337c91b9dfacee02452244ee14ab3c43bc485a', + 'dev_requirement' => false, + ), + 'webmozart/assert' => array( + 'pretty_version' => '1.10.0', + 'version' => '1.10.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../webmozart/assert', + 'aliases' => array(), + 'reference' => '6964c76c7804814a842473e0c8fd15bab0f18e25', + 'dev_requirement' => true, + ), + ), +); diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php new file mode 100644 index 00000000..580fa960 --- /dev/null +++ b/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 70400)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.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 + ); +} diff --git a/vendor/dnoegel/php-xdg-base-dir/.gitignore b/vendor/dnoegel/php-xdg-base-dir/.gitignore deleted file mode 100644 index 57872d0f..00000000 --- a/vendor/dnoegel/php-xdg-base-dir/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/vendor/ diff --git a/vendor/dnoegel/php-xdg-base-dir/LICENSE b/vendor/dnoegel/php-xdg-base-dir/LICENSE deleted file mode 100644 index 029a00ab..00000000 --- a/vendor/dnoegel/php-xdg-base-dir/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2014 Daniel Nögel - -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. diff --git a/vendor/dnoegel/php-xdg-base-dir/README.md b/vendor/dnoegel/php-xdg-base-dir/README.md deleted file mode 100644 index 9e51bbb5..00000000 --- a/vendor/dnoegel/php-xdg-base-dir/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# XDG Base Directory - -[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md) - -Implementation of XDG Base Directory specification for php - -## Install - -Via Composer - -``` bash -$ composer require dnoegel/php-xdg-base-dir -``` - -## Usage - -``` php -$xdg = \XdgBaseDir\Xdg(); - -echo $xdg->getHomeDir(); -echo $xdg->getHomeConfigDir() -echo $xdg->getHomeDataDir() -echo $xdg->getHomeCacheDir() -echo $xdg->getRuntimeDir() - -$xdg->getDataDirs() // returns array -$xdg->getConfigDirs() // returns array -``` - -## Testing - -``` bash -$ phpunit -``` - -## License - -The MIT License (MIT). Please see [License File](https://github.com/dnoegel/php-xdg-base-dir/blob/master/LICENSE) for more information. diff --git a/vendor/dnoegel/php-xdg-base-dir/composer.json b/vendor/dnoegel/php-xdg-base-dir/composer.json deleted file mode 100644 index f6caf31a..00000000 --- a/vendor/dnoegel/php-xdg-base-dir/composer.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "dnoegel/php-xdg-base-dir", - "description": "implementation of xdg base directory specification for php", - "type": "project", - "license": "MIT", - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "@stable" - }, - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - } -} diff --git a/vendor/dnoegel/php-xdg-base-dir/phpunit.xml.dist b/vendor/dnoegel/php-xdg-base-dir/phpunit.xml.dist deleted file mode 100644 index 4000c012..00000000 --- a/vendor/dnoegel/php-xdg-base-dir/phpunit.xml.dist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - ./tests/ - - - - - - ./src/ - - - diff --git a/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php b/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php deleted file mode 100644 index e2acda19..00000000 --- a/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php +++ /dev/null @@ -1,121 +0,0 @@ -getHomeDir() . DIRECTORY_SEPARATOR . '.config'; - - return $path; - } - - /** - * @return string - */ - public function getHomeDataDir() - { - $path = getenv('XDG_DATA_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.local' . DIRECTORY_SEPARATOR . 'share'; - - return $path; - } - - /** - * @return array - */ - public function getConfigDirs() - { - $configDirs = getenv('XDG_CONFIG_DIRS') ? explode(':', getenv('XDG_CONFIG_DIRS')) : array('/etc/xdg'); - - $paths = array_merge(array($this->getHomeConfigDir()), $configDirs); - - return $paths; - } - - /** - * @return array - */ - public function getDataDirs() - { - $dataDirs = getenv('XDG_DATA_DIRS') ? explode(':', getenv('XDG_DATA_DIRS')) : array('/usr/local/share', '/usr/share'); - - $paths = array_merge(array($this->getHomeDataDir()), $dataDirs); - - return $paths; - } - - /** - * @return string - */ - public function getHomeCacheDir() - { - $path = getenv('XDG_CACHE_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.cache'; - - return $path; - - } - - public function getRuntimeDir($strict=true) - { - if ($runtimeDir = getenv('XDG_RUNTIME_DIR')) { - return $runtimeDir; - } - - if ($strict) { - throw new \RuntimeException('XDG_RUNTIME_DIR was not set'); - } - - $fallback = sys_get_temp_dir() . DIRECTORY_SEPARATOR . self::RUNTIME_DIR_FALLBACK . getenv('USER'); - - $create = false; - - if (!is_dir($fallback)) { - mkdir($fallback, 0700, true); - } - - $st = lstat($fallback); - - # The fallback must be a directory - if (!$st['mode'] & self::S_IFDIR) { - rmdir($fallback); - $create = true; - } elseif ($st['uid'] != getmyuid() || - $st['mode'] & (self::S_IRWXG | self::S_IRWXO) - ) { - rmdir($fallback); - $create = true; - } - - if ($create) { - mkdir($fallback, 0700, true); - } - - return $fallback; - } - -} diff --git a/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php b/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php deleted file mode 100644 index 92c2e07e..00000000 --- a/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php +++ /dev/null @@ -1,116 +0,0 @@ -assertEquals('/fake-dir', $this->getXdg()->getHomeDir()); - } - - public function testGetFallbackHomeDir() - { - putenv('HOME='); - putenv('HOMEDRIVE=C:'); - putenv('HOMEPATH=fake-dir'); - $this->assertEquals('C:/fake-dir', $this->getXdg()->getHomeDir()); - } - - public function testXdgPutCache() - { - putenv('XDG_DATA_HOME=tmp/'); - putenv('XDG_CONFIG_HOME=tmp/'); - putenv('XDG_CACHE_HOME=tmp/'); - $this->assertEquals('tmp/', $this->getXdg()->getHomeCacheDir()); - } - - public function testXdgPutData() - { - putenv('XDG_DATA_HOME=tmp/'); - $this->assertEquals('tmp/', $this->getXdg()->getHomeDataDir()); - } - - public function testXdgPutConfig() - { - putenv('XDG_CONFIG_HOME=tmp/'); - $this->assertEquals('tmp/', $this->getXdg()->getHomeConfigDir()); - } - - public function testXdgDataDirsShouldIncludeHomeDataDir() - { - putenv('XDG_DATA_HOME=tmp/'); - putenv('XDG_CONFIG_HOME=tmp/'); - - $this->assertArrayHasKey('tmp/', array_flip($this->getXdg()->getDataDirs())); - } - - public function testXdgConfigDirsShouldIncludeHomeConfigDir() - { - putenv('XDG_CONFIG_HOME=tmp/'); - - $this->assertArrayHasKey('tmp/', array_flip($this->getXdg()->getConfigDirs())); - } - - /** - * If XDG_RUNTIME_DIR is set, it should be returned - */ - public function testGetRuntimeDir() - { - putenv('XDG_RUNTIME_DIR=/tmp/'); - $runtimeDir = $this->getXdg()->getRuntimeDir(); - - $this->assertEquals(is_dir($runtimeDir), true); - } - - /** - * In strict mode, an exception should be shown if XDG_RUNTIME_DIR does not exist - * - * @expectedException \RuntimeException - */ - public function testGetRuntimeDirShouldThrowException() - { - putenv('XDG_RUNTIME_DIR='); - $this->getXdg()->getRuntimeDir(true); - } - - /** - * In fallback mode a directory should be created - */ - public function testGetRuntimeDirShouldCreateDirectory() - { - putenv('XDG_RUNTIME_DIR='); - $dir = $this->getXdg()->getRuntimeDir(false); - $permission = decoct(fileperms($dir) & 0777); - $this->assertEquals(700, $permission); - } - - /** - * Ensure, that the fallback directories are created with correct permission - */ - public function testGetRuntimeShouldDeleteDirsWithWrongPermission() - { - $runtimeDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . XdgBaseDir\Xdg::RUNTIME_DIR_FALLBACK . getenv('USER'); - - rmdir($runtimeDir); - mkdir($runtimeDir, 0764, true); - - // Permission should be wrong now - $permission = decoct(fileperms($runtimeDir) & 0777); - $this->assertEquals(764, $permission); - - putenv('XDG_RUNTIME_DIR='); - $dir = $this->getXdg()->getRuntimeDir(false); - - // Permission should be fixed - $permission = decoct(fileperms($dir) & 0777); - $this->assertEquals(700, $permission); - } -} diff --git a/vendor/doctrine/inflector/README.md b/vendor/doctrine/inflector/README.md index acb55a01..6e3a97f7 100644 --- a/vendor/doctrine/inflector/README.md +++ b/vendor/doctrine/inflector/README.md @@ -1,6 +1,7 @@ # Doctrine Inflector Doctrine Inflector is a small library that can perform string manipulations -with regard to upper-/lowercase and singular/plural forms of words. +with regard to uppercase/lowercase and singular/plural forms of words. -[![Build Status](https://travis-ci.org/doctrine/inflector.svg?branch=master)](https://travis-ci.org/doctrine/inflector) +[![Build Status](https://github.com/doctrine/inflector/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/inflector/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A4.0.x) +[![Code Coverage](https://codecov.io/gh/doctrine/inflector/branch/2.0.x/graph/badge.svg)](https://codecov.io/gh/doctrine/inflector/branch/2.0.x) diff --git a/vendor/doctrine/inflector/composer.json b/vendor/doctrine/inflector/composer.json index 2189ff17..f08fdc3b 100644 --- a/vendor/doctrine/inflector/composer.json +++ b/vendor/doctrine/inflector/composer.json @@ -1,9 +1,9 @@ { "name": "doctrine/inflector", "type": "library", - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "keywords": ["string", "inflection", "singularize", "pluralize"], - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "keywords": ["php", "strings", "words", "manipulation", "inflector", "inflection", "uppercase", "lowercase", "singular", "plural"], + "homepage": "https://www.doctrine-project.org/projects/inflector.html", "license": "MIT", "authors": [ {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, @@ -13,20 +13,24 @@ {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} ], "require": { - "php": "^7.1" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "doctrine/coding-standard": "^8.2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "vimeo/psalm": "^4.10" }, "autoload": { - "psr-4": { "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" } + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } }, "autoload-dev": { - "psr-4": { "Doctrine\\Tests\\Common\\Inflector\\": "tests/Doctrine/Tests/Common/Inflector" } - }, - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" + "psr-4": { + "Doctrine\\Tests\\Inflector\\": "tests/Doctrine/Tests/Inflector" } } } diff --git a/vendor/doctrine/inflector/docs/en/index.rst b/vendor/doctrine/inflector/docs/en/index.rst new file mode 100644 index 00000000..29866f4d --- /dev/null +++ b/vendor/doctrine/inflector/docs/en/index.rst @@ -0,0 +1,226 @@ +Introduction +============ + +The Doctrine Inflector has methods for inflecting text. The features include pluralization, +singularization, converting between camelCase and under_score and capitalizing +words. + +Installation +============ + +You can install the Inflector with composer: + +.. code-block:: console + + $ composer require doctrine/inflector + +Usage +===== + +Using the inflector is easy, you can create a new ``Doctrine\Inflector\Inflector`` instance by using +the ``Doctrine\Inflector\InflectorFactory`` class: + +.. code-block:: php + + use Doctrine\Inflector\InflectorFactory; + + $inflector = InflectorFactory::create()->build(); + +By default it will create an English inflector. If you want to use another language, just pass the language +you want to create an inflector for to the ``createForLanguage()`` method: + +.. code-block:: php + + use Doctrine\Inflector\InflectorFactory; + use Doctrine\Inflector\Language; + + $inflector = InflectorFactory::createForLanguage(Language::SPANISH)->build(); + +The supported languages are as follows: + +- ``Language::ENGLISH`` +- ``Language::FRENCH`` +- ``Language::NORWEGIAN_BOKMAL`` +- ``Language::PORTUGUESE`` +- ``Language::SPANISH`` +- ``Language::TURKISH`` + +If you want to manually construct the inflector instead of using a factory, you can do so like this: + +.. code-block:: php + + use Doctrine\Inflector\CachedWordInflector; + use Doctrine\Inflector\RulesetInflector; + use Doctrine\Inflector\Rules\English; + + $inflector = new Inflector( + new CachedWordInflector(new RulesetInflector( + English\Rules::getSingularRuleset() + )), + new CachedWordInflector(new RulesetInflector( + English\Rules::getPluralRuleset() + )) + ); + +Adding Languages +---------------- + +If you are interested in adding support for your language, take a look at the other languages defined in the +``Doctrine\Inflector\Rules`` namespace and the tests located in ``Doctrine\Tests\Inflector\Rules``. You can copy +one of the languages and update the rules for your language. + +Once you have done this, send a pull request to the ``doctrine/inflector`` repository with the additions. + +Custom Setup +============ + +If you want to setup custom singular and plural rules, you can configure these in the factory: + +.. code-block:: php + + use Doctrine\Inflector\InflectorFactory; + use Doctrine\Inflector\Rules\Pattern; + use Doctrine\Inflector\Rules\Patterns; + use Doctrine\Inflector\Rules\Ruleset; + use Doctrine\Inflector\Rules\Substitution; + use Doctrine\Inflector\Rules\Substitutions; + use Doctrine\Inflector\Rules\Transformation; + use Doctrine\Inflector\Rules\Transformations; + use Doctrine\Inflector\Rules\Word; + + $inflector = InflectorFactory::create() + ->withSingularRules( + new Ruleset( + new Transformations( + new Transformation(new Pattern('/^(bil)er$/i'), '\1'), + new Transformation(new Pattern('/^(inflec|contribu)tors$/i'), '\1ta') + ), + new Patterns(new Pattern('singulars')), + new Substitutions(new Substitution(new Word('spins'), new Word('spinor'))) + ) + ) + ->withPluralRules( + new Ruleset( + new Transformations( + new Transformation(new Pattern('^(bil)er$'), '\1'), + new Transformation(new Pattern('^(inflec|contribu)tors$'), '\1ta') + ), + new Patterns(new Pattern('noflect'), new Pattern('abtuse')), + new Substitutions( + new Substitution(new Word('amaze'), new Word('amazable')), + new Substitution(new Word('phone'), new Word('phonezes')) + ) + ) + ) + ->build(); + +No operation inflector +---------------------- + +The ``Doctrine\Inflector\NoopWordInflector`` may be used to configure an inflector that doesn't perform any operation for +pluralization and/or singularization. If will simply return the input as output. + +This is an implementation of the `Null Object design pattern `_. + +.. code-block:: php + + use Doctrine\Inflector\Inflector; + use Doctrine\Inflector\NoopWordInflector; + + $inflector = new Inflector(new NoopWordInflector(), new NoopWordInflector()); + +Tableize +======== + +Converts ``ModelName`` to ``model_name``: + +.. code-block:: php + + echo $inflector->tableize('ModelName'); // model_name + +Classify +======== + +Converts ``model_name`` to ``ModelName``: + +.. code-block:: php + + echo $inflector->classify('model_name'); // ModelName + +Camelize +======== + +This method uses `Classify`_ and then converts the first character to lowercase: + +.. code-block:: php + + echo $inflector->camelize('model_name'); // modelName + +Capitalize +========== + +Takes a string and capitalizes all of the words, like PHP's built-in +``ucwords`` function. This extends that behavior, however, by allowing the +word delimiters to be configured, rather than only separating on +whitespace. + +Here is an example: + +.. code-block:: php + + $string = 'top-o-the-morning to all_of_you!'; + + echo $inflector->capitalize($string); // Top-O-The-Morning To All_of_you! + + echo $inflector->capitalize($string, '-_ '); // Top-O-The-Morning To All_Of_You! + +Pluralize +========= + +Returns a word in plural form. + +.. code-block:: php + + echo $inflector->pluralize('browser'); // browsers + +Singularize +=========== + +Returns a word in singular form. + +.. code-block:: php + + echo $inflector->singularize('browsers'); // browser + +Urlize +====== + +Generate a URL friendly string from a string of text: + +.. code-block:: php + + echo $inflector->urlize('My first blog post'); // my-first-blog-post + +Unaccent +======== + +You can unaccent a string of text using the ``unaccent()`` method: + +.. code-block:: php + + echo $inflector->unaccent('año'); // ano + +Legacy API +========== + +The API present in Inflector 1.x is still available, but will be deprecated in a future release and dropped for 3.0. +Support for languages other than English is available in the 2.0 API only. + +Acknowledgements +================ + +The language rules in this library have been adapted from several different sources, including but not limited to: + +- `Ruby On Rails Inflector `_ +- `ICanBoogie Inflector `_ +- `CakePHP Inflector `_ diff --git a/vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php b/vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php deleted file mode 100644 index f9067a02..00000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php +++ /dev/null @@ -1,490 +0,0 @@ -. - */ - -namespace Doctrine\Common\Inflector; - -/** - * Doctrine inflector has static methods for inflecting text. - * - * The methods in these classes are from several different sources collected - * across several different php projects and several different authors. The - * original author names and emails are not known. - * - * Pluralize & Singularize implementation are borrowed from CakePHP with some modifications. - * - * @link www.doctrine-project.org - * @since 1.0 - * @author Konsta Vesterinen - * @author Jonathan H. Wage - */ -class Inflector -{ - /** - * Plural inflector rules. - * - * @var string[][] - */ - private static $plural = array( - 'rules' => array( - '/(s)tatus$/i' => '\1\2tatuses', - '/(quiz)$/i' => '\1zes', - '/^(ox)$/i' => '\1\2en', - '/([m|l])ouse$/i' => '\1ice', - '/(matr|vert|ind)(ix|ex)$/i' => '\1ices', - '/(x|ch|ss|sh)$/i' => '\1es', - '/([^aeiouy]|qu)y$/i' => '\1ies', - '/(hive|gulf)$/i' => '\1s', - '/(?:([^f])fe|([lr])f)$/i' => '\1\2ves', - '/sis$/i' => 'ses', - '/([ti])um$/i' => '\1a', - '/(c)riterion$/i' => '\1riteria', - '/(p)erson$/i' => '\1eople', - '/(m)an$/i' => '\1en', - '/(c)hild$/i' => '\1hildren', - '/(f)oot$/i' => '\1eet', - '/(buffal|her|potat|tomat|volcan)o$/i' => '\1\2oes', - '/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|vir)us$/i' => '\1i', - '/us$/i' => 'uses', - '/(alias)$/i' => '\1es', - '/(analys|ax|cris|test|thes)is$/i' => '\1es', - '/s$/' => 's', - '/^$/' => '', - '/$/' => 's', - ), - 'uninflected' => array( - '.*[nrlm]ese', - '.*deer', - '.*fish', - '.*measles', - '.*ois', - '.*pox', - '.*sheep', - 'people', - 'cookie', - 'police', - ), - 'irregular' => array( - 'atlas' => 'atlases', - 'axe' => 'axes', - 'beef' => 'beefs', - 'brother' => 'brothers', - 'cafe' => 'cafes', - 'chateau' => 'chateaux', - 'niveau' => 'niveaux', - 'child' => 'children', - 'cookie' => 'cookies', - 'corpus' => 'corpuses', - 'cow' => 'cows', - 'criterion' => 'criteria', - 'curriculum' => 'curricula', - 'demo' => 'demos', - 'domino' => 'dominoes', - 'echo' => 'echoes', - 'foot' => 'feet', - 'fungus' => 'fungi', - 'ganglion' => 'ganglions', - 'genie' => 'genies', - 'genus' => 'genera', - 'goose' => 'geese', - 'graffito' => 'graffiti', - 'hippopotamus' => 'hippopotami', - 'hoof' => 'hoofs', - 'human' => 'humans', - 'iris' => 'irises', - 'larva' => 'larvae', - 'leaf' => 'leaves', - 'loaf' => 'loaves', - 'man' => 'men', - 'medium' => 'media', - 'memorandum' => 'memoranda', - 'money' => 'monies', - 'mongoose' => 'mongooses', - 'motto' => 'mottoes', - 'move' => 'moves', - 'mythos' => 'mythoi', - 'niche' => 'niches', - 'nucleus' => 'nuclei', - 'numen' => 'numina', - 'occiput' => 'occiputs', - 'octopus' => 'octopuses', - 'opus' => 'opuses', - 'ox' => 'oxen', - 'passerby' => 'passersby', - 'penis' => 'penises', - 'person' => 'people', - 'plateau' => 'plateaux', - 'runner-up' => 'runners-up', - 'sex' => 'sexes', - 'soliloquy' => 'soliloquies', - 'son-in-law' => 'sons-in-law', - 'syllabus' => 'syllabi', - 'testis' => 'testes', - 'thief' => 'thieves', - 'tooth' => 'teeth', - 'tornado' => 'tornadoes', - 'trilby' => 'trilbys', - 'turf' => 'turfs', - 'valve' => 'valves', - 'volcano' => 'volcanoes', - ) - ); - - /** - * Singular inflector rules. - * - * @var string[][] - */ - private static $singular = array( - 'rules' => array( - '/(s)tatuses$/i' => '\1\2tatus', - '/^(.*)(menu)s$/i' => '\1\2', - '/(quiz)zes$/i' => '\\1', - '/(matr)ices$/i' => '\1ix', - '/(vert|ind)ices$/i' => '\1ex', - '/^(ox)en/i' => '\1', - '/(alias)(es)*$/i' => '\1', - '/(buffal|her|potat|tomat|volcan)oes$/i' => '\1o', - '/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|viri?)i$/i' => '\1us', - '/([ftw]ax)es/i' => '\1', - '/(analys|ax|cris|test|thes)es$/i' => '\1is', - '/(shoe|slave)s$/i' => '\1', - '/(o)es$/i' => '\1', - '/ouses$/' => 'ouse', - '/([^a])uses$/' => '\1us', - '/([m|l])ice$/i' => '\1ouse', - '/(x|ch|ss|sh)es$/i' => '\1', - '/(m)ovies$/i' => '\1\2ovie', - '/(s)eries$/i' => '\1\2eries', - '/([^aeiouy]|qu)ies$/i' => '\1y', - '/([lr])ves$/i' => '\1f', - '/(tive)s$/i' => '\1', - '/(hive)s$/i' => '\1', - '/(drive)s$/i' => '\1', - '/(dive)s$/i' => '\1', - '/(olive)s$/i' => '\1', - '/([^fo])ves$/i' => '\1fe', - '/(^analy)ses$/i' => '\1sis', - '/(analy|diagno|^ba|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => '\1\2sis', - '/(c)riteria$/i' => '\1riterion', - '/([ti])a$/i' => '\1um', - '/(p)eople$/i' => '\1\2erson', - '/(m)en$/i' => '\1an', - '/(c)hildren$/i' => '\1\2hild', - '/(f)eet$/i' => '\1oot', - '/(n)ews$/i' => '\1\2ews', - '/eaus$/' => 'eau', - '/^(.*us)$/' => '\\1', - '/s$/i' => '', - ), - 'uninflected' => array( - '.*[nrlm]ese', - '.*deer', - '.*fish', - '.*measles', - '.*ois', - '.*pox', - '.*sheep', - '.*ss', - 'data', - 'police', - 'pants', - 'clothes', - ), - 'irregular' => array( - 'abuses' => 'abuse', - 'avalanches' => 'avalanche', - 'caches' => 'cache', - 'criteria' => 'criterion', - 'curves' => 'curve', - 'emphases' => 'emphasis', - 'foes' => 'foe', - 'geese' => 'goose', - 'graves' => 'grave', - 'hoaxes' => 'hoax', - 'media' => 'medium', - 'neuroses' => 'neurosis', - 'waves' => 'wave', - 'oases' => 'oasis', - 'valves' => 'valve', - ) - ); - - /** - * Words that should not be inflected. - * - * @var array - */ - private static $uninflected = array( - '.*?media', 'Amoyese', 'audio', 'bison', 'Borghese', 'bream', 'breeches', - 'britches', 'buffalo', 'cantus', 'carp', 'chassis', 'clippers', 'cod', 'coitus', 'compensation', 'Congoese', - 'contretemps', 'coreopsis', 'corps', 'data', 'debris', 'deer', 'diabetes', 'djinn', 'education', 'eland', - 'elk', 'emoji', 'equipment', 'evidence', 'Faroese', 'feedback', 'fish', 'flounder', 'Foochowese', - 'Furniture', 'furniture', 'gallows', 'Genevese', 'Genoese', 'Gilbertese', 'gold', - 'headquarters', 'herpes', 'hijinks', 'Hottentotese', 'information', 'innings', 'jackanapes', 'jedi', - 'Kiplingese', 'knowledge', 'Kongoese', 'love', 'Lucchese', 'Luggage', 'mackerel', 'Maltese', 'metadata', - 'mews', 'moose', 'mumps', 'Nankingese', 'news', 'nexus', 'Niasese', 'nutrition', 'offspring', - 'Pekingese', 'Piedmontese', 'pincers', 'Pistoiese', 'plankton', 'pliers', 'pokemon', 'police', 'Portuguese', - 'proceedings', 'rabies', 'rain', 'rhinoceros', 'rice', 'salmon', 'Sarawakese', 'scissors', 'sea[- ]bass', - 'series', 'Shavese', 'shears', 'sheep', 'siemens', 'species', 'staff', 'swine', 'traffic', - 'trousers', 'trout', 'tuna', 'us', 'Vermontese', 'Wenchowese', 'wheat', 'whiting', 'wildebeest', 'Yengeese' - ); - - /** - * Method cache array. - * - * @var array - */ - private static $cache = array(); - - /** - * The initial state of Inflector so reset() works. - * - * @var array - */ - private static $initialState = array(); - - /** - * Converts a word into the format for a Doctrine table name. Converts 'ModelName' to 'model_name'. - */ - public static function tableize(string $word) : string - { - return strtolower(preg_replace('~(?<=\\w)([A-Z])~', '_$1', $word)); - } - - /** - * Converts a word into the format for a Doctrine class name. Converts 'table_name' to 'TableName'. - */ - public static function classify(string $word) : string - { - return str_replace([' ', '_', '-'], '', ucwords($word, ' _-')); - } - - /** - * Camelizes a word. This uses the classify() method and turns the first character to lowercase. - */ - public static function camelize(string $word) : string - { - return lcfirst(self::classify($word)); - } - - /** - * Uppercases words with configurable delimeters between words. - * - * Takes a string and capitalizes all of the words, like PHP's built-in - * ucwords function. This extends that behavior, however, by allowing the - * word delimeters to be configured, rather than only separating on - * whitespace. - * - * Here is an example: - * - * - * - * - * @param string $string The string to operate on. - * @param string $delimiters A list of word separators. - * - * @return string The string with all delimeter-separated words capitalized. - */ - public static function ucwords(string $string, string $delimiters = " \n\t\r\0\x0B-") : string - { - return ucwords($string, $delimiters); - } - - /** - * Clears Inflectors inflected value caches, and resets the inflection - * rules to the initial values. - */ - public static function reset() : void - { - if (empty(self::$initialState)) { - self::$initialState = get_class_vars('Inflector'); - - return; - } - - foreach (self::$initialState as $key => $val) { - if ($key !== 'initialState') { - self::${$key} = $val; - } - } - } - - /** - * Adds custom inflection $rules, of either 'plural' or 'singular' $type. - * - * ### Usage: - * - * {{{ - * Inflector::rules('plural', array('/^(inflect)or$/i' => '\1ables')); - * Inflector::rules('plural', array( - * 'rules' => array('/^(inflect)ors$/i' => '\1ables'), - * 'uninflected' => array('dontinflectme'), - * 'irregular' => array('red' => 'redlings') - * )); - * }}} - * - * @param string $type The type of inflection, either 'plural' or 'singular' - * @param array|iterable $rules An array of rules to be added. - * @param boolean $reset If true, will unset default inflections for all - * new rules that are being defined in $rules. - * - * @return void - */ - public static function rules(string $type, iterable $rules, bool $reset = false) : void - { - foreach ($rules as $rule => $pattern) { - if ( ! is_array($pattern)) { - continue; - } - - if ($reset) { - self::${$type}[$rule] = $pattern; - } else { - self::${$type}[$rule] = ($rule === 'uninflected') - ? array_merge($pattern, self::${$type}[$rule]) - : $pattern + self::${$type}[$rule]; - } - - unset($rules[$rule], self::${$type}['cache' . ucfirst($rule)]); - - if (isset(self::${$type}['merged'][$rule])) { - unset(self::${$type}['merged'][$rule]); - } - - if ($type === 'plural') { - self::$cache['pluralize'] = self::$cache['tableize'] = array(); - } elseif ($type === 'singular') { - self::$cache['singularize'] = array(); - } - } - - self::${$type}['rules'] = $rules + self::${$type}['rules']; - } - - /** - * Returns a word in plural form. - * - * @param string $word The word in singular form. - * - * @return string The word in plural form. - */ - public static function pluralize(string $word) : string - { - if (isset(self::$cache['pluralize'][$word])) { - return self::$cache['pluralize'][$word]; - } - - if (!isset(self::$plural['merged']['irregular'])) { - self::$plural['merged']['irregular'] = self::$plural['irregular']; - } - - if (!isset(self::$plural['merged']['uninflected'])) { - self::$plural['merged']['uninflected'] = array_merge(self::$plural['uninflected'], self::$uninflected); - } - - if (!isset(self::$plural['cacheUninflected']) || !isset(self::$plural['cacheIrregular'])) { - self::$plural['cacheUninflected'] = '(?:' . implode('|', self::$plural['merged']['uninflected']) . ')'; - self::$plural['cacheIrregular'] = '(?:' . implode('|', array_keys(self::$plural['merged']['irregular'])) . ')'; - } - - if (preg_match('/(.*)\\b(' . self::$plural['cacheIrregular'] . ')$/i', $word, $regs)) { - self::$cache['pluralize'][$word] = $regs[1] . $word[0] . substr(self::$plural['merged']['irregular'][strtolower($regs[2])], 1); - - return self::$cache['pluralize'][$word]; - } - - if (preg_match('/^(' . self::$plural['cacheUninflected'] . ')$/i', $word, $regs)) { - self::$cache['pluralize'][$word] = $word; - - return $word; - } - - foreach (self::$plural['rules'] as $rule => $replacement) { - if (preg_match($rule, $word)) { - self::$cache['pluralize'][$word] = preg_replace($rule, $replacement, $word); - - return self::$cache['pluralize'][$word]; - } - } - } - - /** - * Returns a word in singular form. - * - * @param string $word The word in plural form. - * - * @return string The word in singular form. - */ - public static function singularize(string $word) : string - { - if (isset(self::$cache['singularize'][$word])) { - return self::$cache['singularize'][$word]; - } - - if (!isset(self::$singular['merged']['uninflected'])) { - self::$singular['merged']['uninflected'] = array_merge( - self::$singular['uninflected'], - self::$uninflected - ); - } - - if (!isset(self::$singular['merged']['irregular'])) { - self::$singular['merged']['irregular'] = array_merge( - self::$singular['irregular'], - array_flip(self::$plural['irregular']) - ); - } - - if (!isset(self::$singular['cacheUninflected']) || !isset(self::$singular['cacheIrregular'])) { - self::$singular['cacheUninflected'] = '(?:' . implode('|', self::$singular['merged']['uninflected']) . ')'; - self::$singular['cacheIrregular'] = '(?:' . implode('|', array_keys(self::$singular['merged']['irregular'])) . ')'; - } - - if (preg_match('/(.*)\\b(' . self::$singular['cacheIrregular'] . ')$/i', $word, $regs)) { - self::$cache['singularize'][$word] = $regs[1] . $word[0] . substr(self::$singular['merged']['irregular'][strtolower($regs[2])], 1); - - return self::$cache['singularize'][$word]; - } - - if (preg_match('/^(' . self::$singular['cacheUninflected'] . ')$/i', $word, $regs)) { - self::$cache['singularize'][$word] = $word; - - return $word; - } - - foreach (self::$singular['rules'] as $rule => $replacement) { - if (preg_match($rule, $word)) { - self::$cache['singularize'][$word] = preg_replace($rule, $replacement, $word); - - return self::$cache['singularize'][$word]; - } - } - - self::$cache['singularize'][$word] = $word; - - return $word; - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php new file mode 100644 index 00000000..2d529087 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php @@ -0,0 +1,24 @@ +wordInflector = $wordInflector; + } + + public function inflect(string $word): string + { + return $this->cache[$word] ?? $this->cache[$word] = $this->wordInflector->inflect($word); + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php new file mode 100644 index 00000000..166061d2 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php @@ -0,0 +1,66 @@ +singularRulesets[] = $this->getSingularRuleset(); + $this->pluralRulesets[] = $this->getPluralRuleset(); + } + + final public function build(): Inflector + { + return new Inflector( + new CachedWordInflector(new RulesetInflector( + ...$this->singularRulesets + )), + new CachedWordInflector(new RulesetInflector( + ...$this->pluralRulesets + )) + ); + } + + final public function withSingularRules(?Ruleset $singularRules, bool $reset = false): LanguageInflectorFactory + { + if ($reset) { + $this->singularRulesets = []; + } + + if ($singularRules instanceof Ruleset) { + array_unshift($this->singularRulesets, $singularRules); + } + + return $this; + } + + final public function withPluralRules(?Ruleset $pluralRules, bool $reset = false): LanguageInflectorFactory + { + if ($reset) { + $this->pluralRulesets = []; + } + + if ($pluralRules instanceof Ruleset) { + array_unshift($this->pluralRulesets, $pluralRules); + } + + return $this; + } + + abstract protected function getSingularRuleset(): Ruleset; + + abstract protected function getPluralRuleset(): Ruleset; +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php new file mode 100644 index 00000000..610a4cf4 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php @@ -0,0 +1,507 @@ + 'A', + 'Á' => 'A', + 'Â' => 'A', + 'Ã' => 'A', + 'Ä' => 'Ae', + 'Æ' => 'Ae', + 'Å' => 'Aa', + 'æ' => 'a', + 'Ç' => 'C', + 'È' => 'E', + 'É' => 'E', + 'Ê' => 'E', + 'Ë' => 'E', + 'Ì' => 'I', + 'Í' => 'I', + 'Î' => 'I', + 'Ï' => 'I', + 'Ñ' => 'N', + 'Ò' => 'O', + 'Ó' => 'O', + 'Ô' => 'O', + 'Õ' => 'O', + 'Ö' => 'Oe', + 'Ù' => 'U', + 'Ú' => 'U', + 'Û' => 'U', + 'Ü' => 'Ue', + 'Ý' => 'Y', + 'ß' => 'ss', + 'à' => 'a', + 'á' => 'a', + 'â' => 'a', + 'ã' => 'a', + 'ä' => 'ae', + 'å' => 'aa', + 'ç' => 'c', + 'è' => 'e', + 'é' => 'e', + 'ê' => 'e', + 'ë' => 'e', + 'ì' => 'i', + 'í' => 'i', + 'î' => 'i', + 'ï' => 'i', + 'ñ' => 'n', + 'ò' => 'o', + 'ó' => 'o', + 'ô' => 'o', + 'õ' => 'o', + 'ö' => 'oe', + 'ù' => 'u', + 'ú' => 'u', + 'û' => 'u', + 'ü' => 'ue', + 'ý' => 'y', + 'ÿ' => 'y', + 'Ā' => 'A', + 'ā' => 'a', + 'Ă' => 'A', + 'ă' => 'a', + 'Ą' => 'A', + 'ą' => 'a', + 'Ć' => 'C', + 'ć' => 'c', + 'Ĉ' => 'C', + 'ĉ' => 'c', + 'Ċ' => 'C', + 'ċ' => 'c', + 'Č' => 'C', + 'č' => 'c', + 'Ď' => 'D', + 'ď' => 'd', + 'Đ' => 'D', + 'đ' => 'd', + 'Ē' => 'E', + 'ē' => 'e', + 'Ĕ' => 'E', + 'ĕ' => 'e', + 'Ė' => 'E', + 'ė' => 'e', + 'Ę' => 'E', + 'ę' => 'e', + 'Ě' => 'E', + 'ě' => 'e', + 'Ĝ' => 'G', + 'ĝ' => 'g', + 'Ğ' => 'G', + 'ğ' => 'g', + 'Ġ' => 'G', + 'ġ' => 'g', + 'Ģ' => 'G', + 'ģ' => 'g', + 'Ĥ' => 'H', + 'ĥ' => 'h', + 'Ħ' => 'H', + 'ħ' => 'h', + 'Ĩ' => 'I', + 'ĩ' => 'i', + 'Ī' => 'I', + 'ī' => 'i', + 'Ĭ' => 'I', + 'ĭ' => 'i', + 'Į' => 'I', + 'į' => 'i', + 'İ' => 'I', + 'ı' => 'i', + 'IJ' => 'IJ', + 'ij' => 'ij', + 'Ĵ' => 'J', + 'ĵ' => 'j', + 'Ķ' => 'K', + 'ķ' => 'k', + 'ĸ' => 'k', + 'Ĺ' => 'L', + 'ĺ' => 'l', + 'Ļ' => 'L', + 'ļ' => 'l', + 'Ľ' => 'L', + 'ľ' => 'l', + 'Ŀ' => 'L', + 'ŀ' => 'l', + 'Ł' => 'L', + 'ł' => 'l', + 'Ń' => 'N', + 'ń' => 'n', + 'Ņ' => 'N', + 'ņ' => 'n', + 'Ň' => 'N', + 'ň' => 'n', + 'ʼn' => 'N', + 'Ŋ' => 'n', + 'ŋ' => 'N', + 'Ō' => 'O', + 'ō' => 'o', + 'Ŏ' => 'O', + 'ŏ' => 'o', + 'Ő' => 'O', + 'ő' => 'o', + 'Œ' => 'OE', + 'œ' => 'oe', + 'Ø' => 'O', + 'ø' => 'o', + 'Ŕ' => 'R', + 'ŕ' => 'r', + 'Ŗ' => 'R', + 'ŗ' => 'r', + 'Ř' => 'R', + 'ř' => 'r', + 'Ś' => 'S', + 'ś' => 's', + 'Ŝ' => 'S', + 'ŝ' => 's', + 'Ş' => 'S', + 'ş' => 's', + 'Š' => 'S', + 'š' => 's', + 'Ţ' => 'T', + 'ţ' => 't', + 'Ť' => 'T', + 'ť' => 't', + 'Ŧ' => 'T', + 'ŧ' => 't', + 'Ũ' => 'U', + 'ũ' => 'u', + 'Ū' => 'U', + 'ū' => 'u', + 'Ŭ' => 'U', + 'ŭ' => 'u', + 'Ů' => 'U', + 'ů' => 'u', + 'Ű' => 'U', + 'ű' => 'u', + 'Ų' => 'U', + 'ų' => 'u', + 'Ŵ' => 'W', + 'ŵ' => 'w', + 'Ŷ' => 'Y', + 'ŷ' => 'y', + 'Ÿ' => 'Y', + 'Ź' => 'Z', + 'ź' => 'z', + 'Ż' => 'Z', + 'ż' => 'z', + 'Ž' => 'Z', + 'ž' => 'z', + 'ſ' => 's', + '€' => 'E', + '£' => '', + ]; + + /** @var WordInflector */ + private $singularizer; + + /** @var WordInflector */ + private $pluralizer; + + public function __construct(WordInflector $singularizer, WordInflector $pluralizer) + { + $this->singularizer = $singularizer; + $this->pluralizer = $pluralizer; + } + + /** + * Converts a word into the format for a Doctrine table name. Converts 'ModelName' to 'model_name'. + */ + public function tableize(string $word): string + { + $tableized = preg_replace('~(?<=\\w)([A-Z])~u', '_$1', $word); + + if ($tableized === null) { + throw new RuntimeException(sprintf( + 'preg_replace returned null for value "%s"', + $word + )); + } + + return mb_strtolower($tableized); + } + + /** + * Converts a word into the format for a Doctrine class name. Converts 'table_name' to 'TableName'. + */ + public function classify(string $word): string + { + return str_replace([' ', '_', '-'], '', ucwords($word, ' _-')); + } + + /** + * Camelizes a word. This uses the classify() method and turns the first character to lowercase. + */ + public function camelize(string $word): string + { + return lcfirst($this->classify($word)); + } + + /** + * Uppercases words with configurable delimiters between words. + * + * Takes a string and capitalizes all of the words, like PHP's built-in + * ucwords function. This extends that behavior, however, by allowing the + * word delimiters to be configured, rather than only separating on + * whitespace. + * + * Here is an example: + * + * capitalize($string); + * // Top-O-The-Morning To All_of_you! + * + * echo $inflector->capitalize($string, '-_ '); + * // Top-O-The-Morning To All_Of_You! + * ?> + * + * + * @param string $string The string to operate on. + * @param string $delimiters A list of word separators. + * + * @return string The string with all delimiter-separated words capitalized. + */ + public function capitalize(string $string, string $delimiters = " \n\t\r\0\x0B-"): string + { + return ucwords($string, $delimiters); + } + + /** + * Checks if the given string seems like it has utf8 characters in it. + * + * @param string $string The string to check for utf8 characters in. + */ + public function seemsUtf8(string $string): bool + { + for ($i = 0; $i < strlen($string); $i++) { + if (ord($string[$i]) < 0x80) { + continue; // 0bbbbbbb + } + + if ((ord($string[$i]) & 0xE0) === 0xC0) { + $n = 1; // 110bbbbb + } elseif ((ord($string[$i]) & 0xF0) === 0xE0) { + $n = 2; // 1110bbbb + } elseif ((ord($string[$i]) & 0xF8) === 0xF0) { + $n = 3; // 11110bbb + } elseif ((ord($string[$i]) & 0xFC) === 0xF8) { + $n = 4; // 111110bb + } elseif ((ord($string[$i]) & 0xFE) === 0xFC) { + $n = 5; // 1111110b + } else { + return false; // Does not match any model + } + + for ($j = 0; $j < $n; $j++) { // n bytes matching 10bbbbbb follow ? + if (++$i === strlen($string) || ((ord($string[$i]) & 0xC0) !== 0x80)) { + return false; + } + } + } + + return true; + } + + /** + * Remove any illegal characters, accents, etc. + * + * @param string $string String to unaccent + * + * @return string Unaccented string + */ + public function unaccent(string $string): string + { + if (preg_match('/[\x80-\xff]/', $string) === false) { + return $string; + } + + if ($this->seemsUtf8($string)) { + $string = strtr($string, self::ACCENTED_CHARACTERS); + } else { + $characters = []; + + // Assume ISO-8859-1 if not UTF-8 + $characters['in'] = + chr(128) + . chr(131) + . chr(138) + . chr(142) + . chr(154) + . chr(158) + . chr(159) + . chr(162) + . chr(165) + . chr(181) + . chr(192) + . chr(193) + . chr(194) + . chr(195) + . chr(196) + . chr(197) + . chr(199) + . chr(200) + . chr(201) + . chr(202) + . chr(203) + . chr(204) + . chr(205) + . chr(206) + . chr(207) + . chr(209) + . chr(210) + . chr(211) + . chr(212) + . chr(213) + . chr(214) + . chr(216) + . chr(217) + . chr(218) + . chr(219) + . chr(220) + . chr(221) + . chr(224) + . chr(225) + . chr(226) + . chr(227) + . chr(228) + . chr(229) + . chr(231) + . chr(232) + . chr(233) + . chr(234) + . chr(235) + . chr(236) + . chr(237) + . chr(238) + . chr(239) + . chr(241) + . chr(242) + . chr(243) + . chr(244) + . chr(245) + . chr(246) + . chr(248) + . chr(249) + . chr(250) + . chr(251) + . chr(252) + . chr(253) + . chr(255); + + $characters['out'] = 'EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy'; + + $string = strtr($string, $characters['in'], $characters['out']); + + $doubleChars = []; + + $doubleChars['in'] = [ + chr(140), + chr(156), + chr(198), + chr(208), + chr(222), + chr(223), + chr(230), + chr(240), + chr(254), + ]; + + $doubleChars['out'] = ['OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th']; + + $string = str_replace($doubleChars['in'], $doubleChars['out'], $string); + } + + return $string; + } + + /** + * Convert any passed string to a url friendly string. + * Converts 'My first blog post' to 'my-first-blog-post' + * + * @param string $string String to urlize. + * + * @return string Urlized string. + */ + public function urlize(string $string): string + { + // Remove all non url friendly characters with the unaccent function + $unaccented = $this->unaccent($string); + + if (function_exists('mb_strtolower')) { + $lowered = mb_strtolower($unaccented); + } else { + $lowered = strtolower($unaccented); + } + + $replacements = [ + '/\W/' => ' ', + '/([A-Z]+)([A-Z][a-z])/' => '\1_\2', + '/([a-z\d])([A-Z])/' => '\1_\2', + '/[^A-Z^a-z^0-9^\/]+/' => '-', + ]; + + $urlized = $lowered; + + foreach ($replacements as $pattern => $replacement) { + $replaced = preg_replace($pattern, $replacement, $urlized); + + if ($replaced === null) { + throw new RuntimeException(sprintf( + 'preg_replace returned null for value "%s"', + $urlized + )); + } + + $urlized = $replaced; + } + + return trim($urlized, '-'); + } + + /** + * Returns a word in singular form. + * + * @param string $word The word in plural form. + * + * @return string The word in singular form. + */ + public function singularize(string $word): string + { + return $this->singularizer->inflect($word); + } + + /** + * Returns a word in plural form. + * + * @param string $word The word in singular form. + * + * @return string The word in plural form. + */ + public function pluralize(string $word): string + { + return $this->pluralizer->inflect($word); + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php new file mode 100644 index 00000000..a0740a74 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php @@ -0,0 +1,52 @@ +getFlippedSubstitutions() + ); + } + + public static function getPluralRuleset(): Ruleset + { + return new Ruleset( + new Transformations(...Inflectible::getPlural()), + new Patterns(...Uninflected::getPlural()), + new Substitutions(...Inflectible::getIrregular()) + ); + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php new file mode 100644 index 00000000..e2656cc4 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php @@ -0,0 +1,193 @@ +getFlippedSubstitutions() + ); + } + + public static function getPluralRuleset(): Ruleset + { + return new Ruleset( + new Transformations(...Inflectible::getPlural()), + new Patterns(...Uninflected::getPlural()), + new Substitutions(...Inflectible::getIrregular()) + ); + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php new file mode 100644 index 00000000..3cf2444a --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php @@ -0,0 +1,34 @@ +getFlippedSubstitutions() + ); + } + + public static function getPluralRuleset(): Ruleset + { + return new Ruleset( + new Transformations(...Inflectible::getPlural()), + new Patterns(...Uninflected::getPlural()), + new Substitutions(...Inflectible::getIrregular()) + ); + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php new file mode 100644 index 00000000..5d878c6d --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php @@ -0,0 +1,36 @@ +pattern = $pattern; + + if (isset($this->pattern[0]) && $this->pattern[0] === '/') { + $this->regex = $this->pattern; + } else { + $this->regex = '/' . $this->pattern . '/i'; + } + } + + public function getPattern(): string + { + return $this->pattern; + } + + public function getRegex(): string + { + return $this->regex; + } + + public function matches(string $word): bool + { + return preg_match($this->getRegex(), $word) === 1; + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php new file mode 100644 index 00000000..e8d45cb7 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php @@ -0,0 +1,34 @@ +patterns = $patterns; + + $patterns = array_map(static function (Pattern $pattern): string { + return $pattern->getPattern(); + }, $this->patterns); + + $this->regex = '/^(?:' . implode('|', $patterns) . ')$/i'; + } + + public function matches(string $word): bool + { + return preg_match($this->regex, $word, $regs) === 1; + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php new file mode 100644 index 00000000..95564d49 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php @@ -0,0 +1,104 @@ +getFlippedSubstitutions() + ); + } + + public static function getPluralRuleset(): Ruleset + { + return new Ruleset( + new Transformations(...Inflectible::getPlural()), + new Patterns(...Uninflected::getPlural()), + new Substitutions(...Inflectible::getIrregular()) + ); + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php new file mode 100644 index 00000000..58c34f9b --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php @@ -0,0 +1,38 @@ +regular = $regular; + $this->uninflected = $uninflected; + $this->irregular = $irregular; + } + + public function getRegular(): Transformations + { + return $this->regular; + } + + public function getUninflected(): Patterns + { + return $this->uninflected; + } + + public function getIrregular(): Substitutions + { + return $this->irregular; + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php new file mode 100644 index 00000000..c6862fa4 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php @@ -0,0 +1,53 @@ +getFlippedSubstitutions() + ); + } + + public static function getPluralRuleset(): Ruleset + { + return new Ruleset( + new Transformations(...Inflectible::getPlural()), + new Patterns(...Uninflected::getPlural()), + new Substitutions(...Inflectible::getIrregular()) + ); + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php new file mode 100644 index 00000000..c743b393 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php @@ -0,0 +1,36 @@ +from = $from; + $this->to = $to; + } + + public function getFrom(): Word + { + return $this->from; + } + + public function getTo(): Word + { + return $this->to; + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php new file mode 100644 index 00000000..17ee2961 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php @@ -0,0 +1,57 @@ +substitutions[$substitution->getFrom()->getWord()] = $substitution; + } + } + + public function getFlippedSubstitutions(): Substitutions + { + $substitutions = []; + + foreach ($this->substitutions as $substitution) { + $substitutions[] = new Substitution( + $substitution->getTo(), + $substitution->getFrom() + ); + } + + return new Substitutions(...$substitutions); + } + + public function inflect(string $word): string + { + $lowerWord = strtolower($word); + + if (isset($this->substitutions[$lowerWord])) { + $firstLetterUppercase = $lowerWord[0] !== $word[0]; + + $toWord = $this->substitutions[$lowerWord]->getTo()->getWord(); + + if ($firstLetterUppercase) { + return strtoupper($toWord[0]) . substr($toWord, 1); + } + + return $toWord; + } + + return $word; + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php new file mode 100644 index 00000000..30dcd594 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php @@ -0,0 +1,39 @@ +pattern = $pattern; + $this->replacement = $replacement; + } + + public function getPattern(): Pattern + { + return $this->pattern; + } + + public function getReplacement(): string + { + return $this->replacement; + } + + public function inflect(string $word): string + { + return (string) preg_replace($this->pattern->getRegex(), $this->replacement, $word); + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php new file mode 100644 index 00000000..b6a48fa8 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php @@ -0,0 +1,29 @@ +transformations = $transformations; + } + + public function inflect(string $word): string + { + foreach ($this->transformations as $transformation) { + if ($transformation->getPattern()->matches($word)) { + return $transformation->inflect($word); + } + } + + return $word; + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php new file mode 100644 index 00000000..d7b7064c --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php @@ -0,0 +1,40 @@ +getFlippedSubstitutions() + ); + } + + public static function getPluralRuleset(): Ruleset + { + return new Ruleset( + new Transformations(...Inflectible::getPlural()), + new Patterns(...Uninflected::getPlural()), + new Substitutions(...Inflectible::getIrregular()) + ); + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php new file mode 100644 index 00000000..a75d2486 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php @@ -0,0 +1,36 @@ +word = $word; + } + + public function getWord(): string + { + return $this->word; + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php new file mode 100644 index 00000000..12b2ed5b --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php @@ -0,0 +1,56 @@ +rulesets = array_merge([$ruleset], $rulesets); + } + + public function inflect(string $word): string + { + if ($word === '') { + return ''; + } + + foreach ($this->rulesets as $ruleset) { + if ($ruleset->getUninflected()->matches($word)) { + return $word; + } + + $inflected = $ruleset->getIrregular()->inflect($word); + + if ($inflected !== $word) { + return $inflected; + } + + $inflected = $ruleset->getRegular()->inflect($word); + + if ($inflected !== $word) { + return $inflected; + } + } + + return $word; + } +} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php new file mode 100644 index 00000000..b88b1d69 --- /dev/null +++ b/vendor/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/vendor/doctrine/instantiator/.doctrine-project.json b/vendor/doctrine/instantiator/.doctrine-project.json index 4fe86ee8..24ae36e0 100644 --- a/vendor/doctrine/instantiator/.doctrine-project.json +++ b/vendor/doctrine/instantiator/.doctrine-project.json @@ -6,9 +6,15 @@ "codePath": "/src", "versions": [ { - "name": "1.1", - "branchName": "master", + "name": "1.5", + "branchName": "1.5.x", "slug": "latest", + "upcoming": true + }, + { + "name": "1.4", + "branchName": "1.4.x", + "slug": "1.4", "aliases": [ "current", "stable" @@ -16,6 +22,22 @@ "maintained": true, "current": true }, + { + "name": "1.3", + "branchName": "1.3.x", + "slug": "1.3", + "maintained": false + }, + { + "name": "1.2", + "branchName": "1.2.x", + "slug": "1.2" + }, + { + "name": "1.1", + "branchName": "1.1.x", + "slug": "1.1" + }, { "name": "1.0", "branchName": "1.0.x", @@ -23,4 +45,3 @@ } ] } - diff --git a/vendor/doctrine/instantiator/README.md b/vendor/doctrine/instantiator/README.md index eff5a0ca..4bc02b65 100644 --- a/vendor/doctrine/instantiator/README.md +++ b/vendor/doctrine/instantiator/README.md @@ -3,8 +3,7 @@ This library provides a way of avoiding usage of constructors when instantiating PHP classes. [![Build Status](https://travis-ci.org/doctrine/instantiator.svg?branch=master)](https://travis-ci.org/doctrine/instantiator) -[![Code Coverage](https://scrutinizer-ci.com/g/doctrine/instantiator/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/doctrine/instantiator/?branch=master) -[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/doctrine/instantiator/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/doctrine/instantiator/?branch=master) +[![Code Coverage](https://codecov.io/gh/doctrine/instantiator/branch/master/graph/badge.svg)](https://codecov.io/gh/doctrine/instantiator/branch/master) [![Dependency Status](https://www.versioneye.com/package/php--doctrine--instantiator/badge.svg)](https://www.versioneye.com/package/php--doctrine--instantiator) [![Latest Stable Version](https://poser.pugx.org/doctrine/instantiator/v/stable.png)](https://packagist.org/packages/doctrine/instantiator) diff --git a/vendor/doctrine/instantiator/composer.json b/vendor/doctrine/instantiator/composer.json index 9002a91a..4fba95ca 100644 --- a/vendor/doctrine/instantiator/composer.json +++ b/vendor/doctrine/instantiator/composer.json @@ -12,20 +12,21 @@ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "homepage": "https://ocramius.github.io/" } ], "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "ext-phar": "*", "ext-pdo": "*", - "doctrine/coding-standard": "^6.0", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" + "doctrine/coding-standard": "^9", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" }, "autoload": { "psr-4": { @@ -39,9 +40,9 @@ "DoctrineTest\\InstantiatorTestAsset\\": "tests" } }, - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true } } } diff --git a/vendor/doctrine/instantiator/phpbench.json b/vendor/doctrine/instantiator/phpbench.json deleted file mode 100644 index fce5dd60..00000000 --- a/vendor/doctrine/instantiator/phpbench.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "bootstrap": "vendor/autoload.php", - "path": "tests/DoctrineTest/InstantiatorPerformance" -} diff --git a/vendor/doctrine/instantiator/phpcs.xml.dist b/vendor/doctrine/instantiator/phpcs.xml.dist deleted file mode 100644 index 1fcac4ab..00000000 --- a/vendor/doctrine/instantiator/phpcs.xml.dist +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - src - tests - - - - - - - - - - tests/DoctrineTest/InstantiatorTestAsset/AbstractClassAsset.php - - - - src/Doctrine/Instantiator/Exception/UnexpectedValueException.php - src/Doctrine/Instantiator/Exception/InvalidArgumentException.php - - - - src/Doctrine/Instantiator/Exception/ExceptionInterface.php - src/Doctrine/Instantiator/InstantiatorInterface.php - - diff --git a/vendor/doctrine/instantiator/phpstan.neon.dist b/vendor/doctrine/instantiator/phpstan.neon.dist deleted file mode 100644 index ecc38eff..00000000 --- a/vendor/doctrine/instantiator/phpstan.neon.dist +++ /dev/null @@ -1,19 +0,0 @@ -includes: - - vendor/phpstan/phpstan-phpunit/extension.neon - - vendor/phpstan/phpstan-phpunit/rules.neon - -parameters: - level: max - paths: - - src - - tests - - ignoreErrors: - - - message: '#::__construct\(\) does not call parent constructor from#' - path: '*/tests/DoctrineTest/InstantiatorTestAsset/*.php' - - # dynamic properties confuse static analysis - - - message: '#Access to an undefined property object::\$foo\.#' - path: '*/tests/DoctrineTest/InstantiatorTest/InstantiatorTest.php' diff --git a/vendor/doctrine/instantiator/psalm.xml b/vendor/doctrine/instantiator/psalm.xml new file mode 100644 index 00000000..e6270c13 --- /dev/null +++ b/vendor/doctrine/instantiator/psalm.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php index 9188f0ba..33de31c0 100644 --- a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php +++ b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php @@ -4,7 +4,7 @@ namespace Doctrine\Instantiator\Exception; use InvalidArgumentException as BaseInvalidArgumentException; use ReflectionClass; -use const PHP_VERSION_ID; + use function interface_exists; use function sprintf; use function trait_exists; @@ -14,24 +14,37 @@ use function trait_exists; */ class InvalidArgumentException extends BaseInvalidArgumentException implements ExceptionInterface { - public static function fromNonExistingClass(string $className) : self + public static function fromNonExistingClass(string $className): self { if (interface_exists($className)) { - return new self(sprintf('The provided type "%s" is an interface, and can not be instantiated', $className)); + return new self(sprintf('The provided type "%s" is an interface, and cannot be instantiated', $className)); } - if (PHP_VERSION_ID >= 50400 && trait_exists($className)) { - return new self(sprintf('The provided type "%s" is a trait, and can not be instantiated', $className)); + if (trait_exists($className)) { + return new self(sprintf('The provided type "%s" is a trait, and cannot be instantiated', $className)); } return new self(sprintf('The provided class "%s" does not exist', $className)); } - public static function fromAbstractClass(ReflectionClass $reflectionClass) : self + /** + * @phpstan-param ReflectionClass $reflectionClass + * + * @template T of object + */ + public static function fromAbstractClass(ReflectionClass $reflectionClass): self { return new self(sprintf( - 'The provided class "%s" is abstract, and can not be instantiated', + 'The provided class "%s" is abstract, and cannot be instantiated', $reflectionClass->getName() )); } + + public static function fromEnum(string $className): self + { + return new self(sprintf( + 'The provided class "%s" is an enum, and cannot be instantiated', + $className + )); + } } diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php index d946731b..4e55ac52 100644 --- a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php +++ b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php @@ -5,6 +5,7 @@ namespace Doctrine\Instantiator\Exception; use Exception; use ReflectionClass; use UnexpectedValueException as BaseUnexpectedValueException; + use function sprintf; /** @@ -12,10 +13,15 @@ use function sprintf; */ class UnexpectedValueException extends BaseUnexpectedValueException implements ExceptionInterface { + /** + * @phpstan-param ReflectionClass $reflectionClass + * + * @template T of object + */ public static function fromSerializationTriggeredException( ReflectionClass $reflectionClass, Exception $exception - ) : self { + ): self { return new self( sprintf( 'An exception was raised while trying to instantiate an instance of "%s" via un-serialization', @@ -26,13 +32,18 @@ class UnexpectedValueException extends BaseUnexpectedValueException implements E ); } + /** + * @phpstan-param ReflectionClass $reflectionClass + * + * @template T of object + */ public static function fromUncleanUnSerialization( ReflectionClass $reflectionClass, string $errorString, int $errorCode, string $errorFile, int $errorLine - ) : self { + ): self { return new self( sprintf( 'Could not produce an instance of "%s" via un-serialization, since an error was triggered ' diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php index 4364190e..d616fa4d 100644 --- a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php +++ b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php @@ -2,21 +2,26 @@ namespace Doctrine\Instantiator; +use ArrayIterator; +use Doctrine\Instantiator\Exception\ExceptionInterface; use Doctrine\Instantiator\Exception\InvalidArgumentException; use Doctrine\Instantiator\Exception\UnexpectedValueException; use Exception; use ReflectionClass; use ReflectionException; +use Serializable; + use function class_exists; +use function enum_exists; +use function is_subclass_of; use function restore_error_handler; use function set_error_handler; use function sprintf; use function strlen; use function unserialize; -/** - * {@inheritDoc} - */ +use const PHP_VERSION_ID; + final class Instantiator implements InstantiatorInterface { /** @@ -42,12 +47,25 @@ final class Instantiator implements InstantiatorInterface private static $cachedCloneables = []; /** - * {@inheritDoc} + * @param string $className + * @phpstan-param class-string $className + * + * @return object + * @phpstan-return T + * + * @throws ExceptionInterface + * + * @template T of object */ public function instantiate($className) { if (isset(self::$cachedCloneables[$className])) { - return clone self::$cachedCloneables[$className]; + /** + * @phpstan-var T + */ + $cachedCloneable = self::$cachedCloneables[$className]; + + return clone $cachedCloneable; } if (isset(self::$cachedInstantiators[$className])) { @@ -62,7 +80,12 @@ final class Instantiator implements InstantiatorInterface /** * Builds the requested object and caches it in static properties for performance * + * @phpstan-param class-string $className + * * @return object + * @phpstan-return T + * + * @template T of object */ private function buildAndCacheFromFactory(string $className) { @@ -80,11 +103,17 @@ final class Instantiator implements InstantiatorInterface * Builds a callable capable of instantiating the given $className without * invoking its constructor. * + * @phpstan-param class-string $className + * + * @phpstan-return callable(): T + * * @throws InvalidArgumentException * @throws UnexpectedValueException * @throws ReflectionException + * + * @template T of object */ - private function buildFactory(string $className) : callable + private function buildFactory(string $className): callable { $reflectionClass = $this->getReflectionClass($className); @@ -94,7 +123,7 @@ final class Instantiator implements InstantiatorInterface $serializedString = sprintf( '%s:%d:"%s":0:{}', - self::SERIALIZATION_FORMAT_AVOID_UNSERIALIZER, + is_subclass_of($className, Serializable::class) ? self::SERIALIZATION_FORMAT_USE_UNSERIALIZER : self::SERIALIZATION_FORMAT_AVOID_UNSERIALIZER, strlen($className), $className ); @@ -107,17 +136,25 @@ final class Instantiator implements InstantiatorInterface } /** - * @param string $className + * @phpstan-param class-string $className + * + * @phpstan-return ReflectionClass * * @throws InvalidArgumentException * @throws ReflectionException + * + * @template T of object */ - private function getReflectionClass($className) : ReflectionClass + private function getReflectionClass(string $className): ReflectionClass { if (! class_exists($className)) { throw InvalidArgumentException::fromNonExistingClass($className); } + if (PHP_VERSION_ID >= 80100 && enum_exists($className, false)) { + throw InvalidArgumentException::fromEnum($className); + } + $reflection = new ReflectionClass($className); if ($reflection->isAbstract()) { @@ -128,11 +165,15 @@ final class Instantiator implements InstantiatorInterface } /** + * @phpstan-param ReflectionClass $reflectionClass + * * @throws UnexpectedValueException + * + * @template T of object */ - private function checkIfUnSerializationIsSupported(ReflectionClass $reflectionClass, string $serializedString) : void + private function checkIfUnSerializationIsSupported(ReflectionClass $reflectionClass, string $serializedString): void { - set_error_handler(static function ($code, $message, $file, $line) use ($reflectionClass, & $error) : void { + set_error_handler(static function (int $code, string $message, string $file, int $line) use ($reflectionClass, &$error): bool { $error = UnexpectedValueException::fromUncleanUnSerialization( $reflectionClass, $message, @@ -140,6 +181,8 @@ final class Instantiator implements InstantiatorInterface $file, $line ); + + return true; }); try { @@ -154,9 +197,13 @@ final class Instantiator implements InstantiatorInterface } /** + * @phpstan-param ReflectionClass $reflectionClass + * * @throws UnexpectedValueException + * + * @template T of object */ - private function attemptInstantiationViaUnSerialization(ReflectionClass $reflectionClass, string $serializedString) : void + private function attemptInstantiationViaUnSerialization(ReflectionClass $reflectionClass, string $serializedString): void { try { unserialize($serializedString); @@ -165,15 +212,24 @@ final class Instantiator implements InstantiatorInterface } } - private function isInstantiableViaReflection(ReflectionClass $reflectionClass) : bool + /** + * @phpstan-param ReflectionClass $reflectionClass + * + * @template T of object + */ + private function isInstantiableViaReflection(ReflectionClass $reflectionClass): bool { return ! ($this->hasInternalAncestors($reflectionClass) && $reflectionClass->isFinal()); } /** * Verifies whether the given class is to be considered internal + * + * @phpstan-param ReflectionClass $reflectionClass + * + * @template T of object */ - private function hasInternalAncestors(ReflectionClass $reflectionClass) : bool + private function hasInternalAncestors(ReflectionClass $reflectionClass): bool { do { if ($reflectionClass->isInternal()) { @@ -190,9 +246,15 @@ final class Instantiator implements InstantiatorInterface * Checks if a class is cloneable * * Classes implementing `__clone` cannot be safely cloned, as that may cause side-effects. + * + * @phpstan-param ReflectionClass $reflectionClass + * + * @template T of object */ - private function isSafeToClone(ReflectionClass $reflection) : bool + private function isSafeToClone(ReflectionClass $reflectionClass): bool { - return $reflection->isCloneable() && ! $reflection->hasMethod('__clone'); + return $reflectionClass->isCloneable() + && ! $reflectionClass->hasMethod('__clone') + && ! $reflectionClass->isSubclassOf(ArrayIterator::class); } } diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php index 95299f4a..10508b56 100644 --- a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php +++ b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php @@ -11,10 +11,14 @@ interface InstantiatorInterface { /** * @param string $className + * @phpstan-param class-string $className * * @return object + * @phpstan-return T * * @throws ExceptionInterface + * + * @template T of object */ public function instantiate($className); } diff --git a/vendor/doctrine/lexer/.doctrine-project.json b/vendor/doctrine/lexer/.doctrine-project.json deleted file mode 100644 index 01ccb778..00000000 --- a/vendor/doctrine/lexer/.doctrine-project.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "active": true, - "name": "Lexer", - "slug": "lexer", - "docsSlug": "doctrine-lexer", - "versions": [ - { - "name": "master", - "branchName": "master", - "slug": "latest", - "aliases": [ - "current", - "stable" - ] - } - ] -} diff --git a/vendor/doctrine/lexer/.github/FUNDING.yml b/vendor/doctrine/lexer/.github/FUNDING.yml deleted file mode 100644 index e081a97a..00000000 --- a/vendor/doctrine/lexer/.github/FUNDING.yml +++ /dev/null @@ -1,3 +0,0 @@ -patreon: phpdoctrine -tidelift: packagist/doctrine%2Flexer -custom: https://www.doctrine-project.org/sponsorship.html diff --git a/vendor/doctrine/lexer/.gitignore b/vendor/doctrine/lexer/.gitignore deleted file mode 100644 index 7579f743..00000000 --- a/vendor/doctrine/lexer/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -vendor -composer.lock diff --git a/vendor/doctrine/lexer/README.md b/vendor/doctrine/lexer/README.md index 3a74c1c3..784f2a27 100644 --- a/vendor/doctrine/lexer/README.md +++ b/vendor/doctrine/lexer/README.md @@ -1,5 +1,7 @@ # Doctrine Lexer +[![Build Status](https://github.com/doctrine/lexer/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/lexer/actions) + Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. This lexer is used in Doctrine Annotations and in Doctrine ORM (DQL). diff --git a/vendor/doctrine/lexer/composer.json b/vendor/doctrine/lexer/composer.json index 6ea83543..c4356477 100644 --- a/vendor/doctrine/lexer/composer.json +++ b/vendor/doctrine/lexer/composer.json @@ -17,10 +17,13 @@ {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} ], "require": { - "php": ">=5.3.2" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.5" + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" }, "autoload": { "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } @@ -28,9 +31,11 @@ "autoload-dev": { "psr-4": { "Doctrine\\Tests\\": "tests/Doctrine" } }, - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "config": { + "allow-plugins": { + "composer/package-versions-deprecated": true, + "dealerdirect/phpcodesniffer-composer-installer": true + }, + "sort-packages": true } } diff --git a/vendor/doctrine/lexer/docs/en/dql-parser.rst b/vendor/doctrine/lexer/docs/en/dql-parser.rst deleted file mode 100644 index c7d581da..00000000 --- a/vendor/doctrine/lexer/docs/en/dql-parser.rst +++ /dev/null @@ -1,294 +0,0 @@ -DQL Lexer -========= - -Here is a more complicated example from the Doctrine ORM project. -The ``Doctrine\ORM\Query\Lexer`` implementation for DQL looks something -like the following: - -.. code-block:: php - - use Doctrine\Common\Lexer\AbstractLexer; - - class Lexer extends AbstractLexer - { - // All tokens that are not valid identifiers must be < 100 - public const T_NONE = 1; - public const T_INTEGER = 2; - public const T_STRING = 3; - public const T_INPUT_PARAMETER = 4; - public const T_FLOAT = 5; - public const T_CLOSE_PARENTHESIS = 6; - public const T_OPEN_PARENTHESIS = 7; - public const T_COMMA = 8; - public const T_DIVIDE = 9; - public const T_DOT = 10; - public const T_EQUALS = 11; - public const T_GREATER_THAN = 12; - public const T_LOWER_THAN = 13; - public const T_MINUS = 14; - public const T_MULTIPLY = 15; - public const T_NEGATE = 16; - public const T_PLUS = 17; - public const T_OPEN_CURLY_BRACE = 18; - public const T_CLOSE_CURLY_BRACE = 19; - - // All tokens that are identifiers or keywords that could be considered as identifiers should be >= 100 - public const T_ALIASED_NAME = 100; - public const T_FULLY_QUALIFIED_NAME = 101; - public const T_IDENTIFIER = 102; - - // All keyword tokens should be >= 200 - public const T_ALL = 200; - public const T_AND = 201; - public const T_ANY = 202; - public const T_AS = 203; - public const T_ASC = 204; - public const T_AVG = 205; - public const T_BETWEEN = 206; - public const T_BOTH = 207; - public const T_BY = 208; - public const T_CASE = 209; - public const T_COALESCE = 210; - public const T_COUNT = 211; - public const T_DELETE = 212; - public const T_DESC = 213; - public const T_DISTINCT = 214; - public const T_ELSE = 215; - public const T_EMPTY = 216; - public const T_END = 217; - public const T_ESCAPE = 218; - public const T_EXISTS = 219; - public const T_FALSE = 220; - public const T_FROM = 221; - public const T_GROUP = 222; - public const T_HAVING = 223; - public const T_HIDDEN = 224; - public const T_IN = 225; - public const T_INDEX = 226; - public const T_INNER = 227; - public const T_INSTANCE = 228; - public const T_IS = 229; - public const T_JOIN = 230; - public const T_LEADING = 231; - public const T_LEFT = 232; - public const T_LIKE = 233; - public const T_MAX = 234; - public const T_MEMBER = 235; - public const T_MIN = 236; - public const T_NEW = 237; - public const T_NOT = 238; - public const T_NULL = 239; - public const T_NULLIF = 240; - public const T_OF = 241; - public const T_OR = 242; - public const T_ORDER = 243; - public const T_OUTER = 244; - public const T_PARTIAL = 245; - public const T_SELECT = 246; - public const T_SET = 247; - public const T_SOME = 248; - public const T_SUM = 249; - public const T_THEN = 250; - public const T_TRAILING = 251; - public const T_TRUE = 252; - public const T_UPDATE = 253; - public const T_WHEN = 254; - public const T_WHERE = 255; - public const T_WITH = 256; - - /** - * Creates a new query scanner object. - * - * @param string $input A query string. - */ - public function __construct($input) - { - $this->setInput($input); - } - - /** - * {@inheritdoc} - */ - protected function getCatchablePatterns() - { - return [ - '[a-z_][a-z0-9_]*\:[a-z_][a-z0-9_]*(?:\\\[a-z_][a-z0-9_]*)*', // aliased name - '[a-z_\\\][a-z0-9_]*(?:\\\[a-z_][a-z0-9_]*)*', // identifier or qualified name - '(?:[0-9]+(?:[\.][0-9]+)*)(?:e[+-]?[0-9]+)?', // numbers - "'(?:[^']|'')*'", // quoted strings - '\?[0-9]*|:[a-z_][a-z0-9_]*', // parameters - ]; - } - - /** - * {@inheritdoc} - */ - protected function getNonCatchablePatterns() - { - return ['\s+', '(.)']; - } - - /** - * {@inheritdoc} - */ - protected function getType(&$value) - { - $type = self::T_NONE; - - switch (true) { - // Recognize numeric values - case (is_numeric($value)): - if (strpos($value, '.') !== false || stripos($value, 'e') !== false) { - return self::T_FLOAT; - } - - return self::T_INTEGER; - - // Recognize quoted strings - case ($value[0] === "'"): - $value = str_replace("''", "'", substr($value, 1, strlen($value) - 2)); - - return self::T_STRING; - - // Recognize identifiers, aliased or qualified names - case (ctype_alpha($value[0]) || $value[0] === '_' || $value[0] === '\\'): - $name = 'Doctrine\ORM\Query\Lexer::T_' . strtoupper($value); - - if (defined($name)) { - $type = constant($name); - - if ($type > 100) { - return $type; - } - } - - if (strpos($value, ':') !== false) { - return self::T_ALIASED_NAME; - } - - if (strpos($value, '\\') !== false) { - return self::T_FULLY_QUALIFIED_NAME; - } - - return self::T_IDENTIFIER; - - // Recognize input parameters - case ($value[0] === '?' || $value[0] === ':'): - return self::T_INPUT_PARAMETER; - - // Recognize symbols - case ($value === '.'): - return self::T_DOT; - case ($value === ','): - return self::T_COMMA; - case ($value === '('): - return self::T_OPEN_PARENTHESIS; - case ($value === ')'): - return self::T_CLOSE_PARENTHESIS; - case ($value === '='): - return self::T_EQUALS; - case ($value === '>'): - return self::T_GREATER_THAN; - case ($value === '<'): - return self::T_LOWER_THAN; - case ($value === '+'): - return self::T_PLUS; - case ($value === '-'): - return self::T_MINUS; - case ($value === '*'): - return self::T_MULTIPLY; - case ($value === '/'): - return self::T_DIVIDE; - case ($value === '!'): - return self::T_NEGATE; - case ($value === '{'): - return self::T_OPEN_CURLY_BRACE; - case ($value === '}'): - return self::T_CLOSE_CURLY_BRACE; - - // Default - default: - // Do nothing - } - - return $type; - } - } - -This is roughly what the DQL Parser looks like that uses the above -Lexer implementation: - -.. note:: - - You can see the full implementation `here `_. - -.. code-block:: php - - class Parser - { - private $lexer; - - public function __construct($dql) - { - $this->lexer = new Lexer(); - $this->lexer->setInput($dql); - } - - // ... - - public function getAST() - { - // Parse & build AST - $AST = $this->QueryLanguage(); - - // ... - - return $AST; - } - - public function QueryLanguage() - { - $this->lexer->moveNext(); - - switch ($this->lexer->lookahead['type']) { - case Lexer::T_SELECT: - $statement = $this->SelectStatement(); - break; - case Lexer::T_UPDATE: - $statement = $this->UpdateStatement(); - break; - case Lexer::T_DELETE: - $statement = $this->DeleteStatement(); - break; - default: - $this->syntaxError('SELECT, UPDATE or DELETE'); - break; - } - - // Check for end of string - if ($this->lexer->lookahead !== null) { - $this->syntaxError('end of string'); - } - - return $statement; - } - - // ... - } - -Now the AST is used to transform the DQL query in to portable SQL for whatever relational -database you are using! - -.. code-block:: php - - $parser = new Parser('SELECT u FROM User u'); - $AST = $parser->getAST(); // returns \Doctrine\ORM\Query\AST\SelectStatement - -What is an AST? -=============== - -AST stands for `Abstract syntax tree `_. -In computer science, an abstract syntax tree (AST), or just syntax tree, is a -tree representation of the abstract syntactic structure of source code written -in a programming language. Each node of the tree denotes a construct occurring in -the source code. diff --git a/vendor/doctrine/lexer/docs/en/index.rst b/vendor/doctrine/lexer/docs/en/index.rst deleted file mode 100644 index 2aa985be..00000000 --- a/vendor/doctrine/lexer/docs/en/index.rst +++ /dev/null @@ -1,53 +0,0 @@ -Introduction -============ - -Doctrine Lexer is a library that can be used in Top-Down, Recursive -Descent Parsers. This lexer is used in Doctrine Annotations and in -Doctrine ORM (DQL). - -To write your own parser you just need to extend ``Doctrine\Common\Lexer\AbstractLexer`` -and implement the following three abstract methods. - -.. code-block:: php - - /** - * Lexical catchable patterns. - * - * @return array - */ - abstract protected function getCatchablePatterns(); - - /** - * Lexical non-catchable patterns. - * - * @return array - */ - abstract protected function getNonCatchablePatterns(); - - /** - * Retrieve token type. Also processes the token value if necessary. - * - * @param string $value - * @return integer - */ - abstract protected function getType(&$value); - -These methods define the `lexical `_ -catchable and non-catchable patterns and a method for returning the -type of a token and filtering the value if necessary. - -The Lexer is responsible for giving you an API to walk across a -string one character at a time and analyze the type of each character, value and position of -each token in the string. The low level API of the lexer is pretty simple: - -- ``setInput($input)`` - Sets the input data to be tokenized. The Lexer is immediately reset and the new input tokenized. -- ``reset()`` - Resets the lexer. -- ``resetPeek()`` - Resets the peek pointer to 0. -- ``resetPosition($position = 0)`` - Resets the lexer position on the input to the given position. -- ``isNextToken($token)`` - Checks whether a given token matches the current lookahead. -- ``isNextTokenAny(array $tokens)`` - Checks whether any of the given tokens matches the current lookahead. -- ``moveNext()`` - Moves to the next token in the input string. -- ``skipUntil($type)`` - Tells the lexer to skip input tokens until it sees a token with the given value. -- ``isA($value, $token)`` - Checks if given value is identical to the given token. -- ``peek()`` - Moves the lookahead token forward. -- ``glimpse()`` - Peeks at the next token, returns it and immediately resets the peek. diff --git a/vendor/doctrine/lexer/docs/en/sidebar.rst b/vendor/doctrine/lexer/docs/en/sidebar.rst deleted file mode 100644 index 9b04e244..00000000 --- a/vendor/doctrine/lexer/docs/en/sidebar.rst +++ /dev/null @@ -1,6 +0,0 @@ -.. toctree:: - :depth: 3 - - index - simple-parser-example - dql-parser diff --git a/vendor/doctrine/lexer/docs/en/simple-parser-example.rst b/vendor/doctrine/lexer/docs/en/simple-parser-example.rst deleted file mode 100644 index ac142421..00000000 --- a/vendor/doctrine/lexer/docs/en/simple-parser-example.rst +++ /dev/null @@ -1,102 +0,0 @@ -Simple Parser Example -===================== - -Extend the ``Doctrine\Common\Lexer\AbstractLexer`` class and implement -the ``getCatchablePatterns``, ``getNonCatchablePatterns``, and ``getType`` -methods. Here is a very simple example lexer implementation named ``CharacterTypeLexer``. -It tokenizes a string to ``T_UPPER``, ``T_LOWER`` and``T_NUMBER`` tokens: - -.. code-block:: php - lexer = $lexer; - } - - public function getUpperCaseCharacters($string) - { - $this->lexer->setInput($string); - $this->lexer->moveNext(); - - $upperCaseChars = array(); - while (true) { - if (!$this->lexer->lookahead) { - break; - } - - $this->lexer->moveNext(); - - if ($this->lexer->token['type'] === CharacterTypeLexer::T_UPPER) { - $upperCaseChars[] = $this->lexer->token['value']; - } - } - - return $upperCaseChars; - } - } - - $upperCaseCharacterExtractor = new UpperCaseCharacterExtracter(new CharacterTypeLexer()); - $upperCaseCharacters = $upperCaseCharacterExtractor->getUpperCaseCharacters('1aBcdEfgHiJ12'); - - print_r($upperCaseCharacters); - -The variable ``$upperCaseCharacters`` contains all of the upper case -characters: - -.. code-block:: php - Array - ( - [0] => B - [1] => E - [2] => H - [3] => J - ) - -This is a simple example but it should demonstrate the low level API -that can be used to build more complex parsers. diff --git a/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php b/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php index 317ff69d..7e8a11d4 100644 --- a/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php +++ b/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php @@ -1,31 +1,25 @@ . - */ + +declare(strict_types=1); namespace Doctrine\Common\Lexer; +use ReflectionClass; + +use function implode; +use function in_array; +use function preg_split; +use function sprintf; +use function substr; + +use const PREG_SPLIT_DELIM_CAPTURE; +use const PREG_SPLIT_NO_EMPTY; +use const PREG_SPLIT_OFFSET_CAPTURE; + /** * Base class for writing simple lexers, i.e. for creating small DSLs. * - * @since 2.0 - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel + * @psalm-type Token = array{value: int|string, type:string|int|null, position:int} */ abstract class AbstractLexer { @@ -45,38 +39,48 @@ abstract class AbstractLexer * parameter, none) * - 'position' : the position of the token in the input string * - * @var array + * @var mixed[][] + * @psalm-var list */ - private $tokens = array(); + private $tokens = []; /** * Current lexer position in input string. * - * @var integer + * @var int */ private $position = 0; /** * Current peek of current lexer position. * - * @var integer + * @var int */ private $peek = 0; /** * The next token in the input. * - * @var array + * @var mixed[]|null + * @psalm-var Token|null */ public $lookahead; /** * The last matched/seen token. * - * @var array + * @var mixed[]|null + * @psalm-var Token|null */ public $token; + /** + * Composed regex for input parsing. + * + * @var string|null + */ + private $regex; + /** * Sets the input data to be tokenized. * @@ -90,7 +94,7 @@ abstract class AbstractLexer public function setInput($input) { $this->input = $input; - $this->tokens = array(); + $this->tokens = []; $this->reset(); $this->scan($input); @@ -104,9 +108,9 @@ abstract class AbstractLexer public function reset() { $this->lookahead = null; - $this->token = null; - $this->peek = 0; - $this->position = 0; + $this->token = null; + $this->peek = 0; + $this->position = 0; } /** @@ -122,7 +126,7 @@ abstract class AbstractLexer /** * Resets the lexer position on the input to the given position. * - * @param integer $position Position to place the lexical scanner. + * @param int $position Position to place the lexical scanner. * * @return void */ @@ -134,7 +138,7 @@ abstract class AbstractLexer /** * Retrieve the original lexer's input until a given position. * - * @param integer $position + * @param int $position * * @return string */ @@ -146,37 +150,37 @@ abstract class AbstractLexer /** * Checks whether a given token matches the current lookahead. * - * @param integer|string $token + * @param int|string $type * - * @return boolean + * @return bool */ - public function isNextToken($token) + public function isNextToken($type) { - return null !== $this->lookahead && $this->lookahead['type'] === $token; + return $this->lookahead !== null && $this->lookahead['type'] === $type; } /** * Checks whether any of the given tokens matches the current lookahead. * - * @param array $tokens + * @param list $types * - * @return boolean + * @return bool */ - public function isNextTokenAny(array $tokens) + public function isNextTokenAny(array $types) { - return null !== $this->lookahead && in_array($this->lookahead['type'], $tokens, true); + return $this->lookahead !== null && in_array($this->lookahead['type'], $types, true); } /** * Moves to the next token in the input string. * - * @return boolean + * @return bool */ public function moveNext() { - $this->peek = 0; - $this->token = $this->lookahead; - $this->lookahead = (isset($this->tokens[$this->position])) + $this->peek = 0; + $this->token = $this->lookahead; + $this->lookahead = isset($this->tokens[$this->position]) ? $this->tokens[$this->position++] : null; return $this->lookahead !== null; @@ -199,10 +203,10 @@ abstract class AbstractLexer /** * Checks if given value is identical to the given token. * - * @param mixed $value - * @param integer $token + * @param mixed $value + * @param int|string $token * - * @return boolean + * @return bool */ public function isA($value, $token) { @@ -212,26 +216,29 @@ abstract class AbstractLexer /** * Moves the lookahead token forward. * - * @return array|null The next token or NULL if there are no more tokens ahead. + * @return mixed[]|null The next token or NULL if there are no more tokens ahead. + * @psalm-return Token|null */ public function peek() { if (isset($this->tokens[$this->position + $this->peek])) { return $this->tokens[$this->position + $this->peek++]; - } else { - return null; } + + return null; } /** * Peeks at the next token, returns it and immediately resets the peek. * - * @return array|null The next token or NULL if there are no more tokens ahead. + * @return mixed[]|null The next token or NULL if there are no more tokens ahead. + * @psalm-return Token|null */ public function glimpse() { - $peek = $this->peek(); + $peek = $this->peek(); $this->peek = 0; + return $peek; } @@ -244,10 +251,8 @@ abstract class AbstractLexer */ protected function scan($input) { - static $regex; - - if ( ! isset($regex)) { - $regex = sprintf( + if (! isset($this->regex)) { + $this->regex = sprintf( '/(%s)|%s/%s', implode(')|(', $this->getCatchablePatterns()), implode('|', $this->getNonCatchablePatterns()), @@ -255,37 +260,37 @@ abstract class AbstractLexer ); } - $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; - $matches = preg_split($regex, $input, -1, $flags); + $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; + $matches = preg_split($this->regex, $input, -1, $flags); - if (false === $matches) { + if ($matches === false) { // Work around https://bugs.php.net/78122 - $matches = array(array($input, 0)); + $matches = [[$input, 0]]; } foreach ($matches as $match) { // Must remain before 'value' assignment since it can change content $type = $this->getType($match[0]); - $this->tokens[] = array( + $this->tokens[] = [ 'value' => $match[0], 'type' => $type, 'position' => $match[1], - ); + ]; } } /** * Gets the literal for a given token. * - * @param integer $token + * @param int|string $token * - * @return string + * @return int|string */ public function getLiteral($token) { - $className = get_class($this); - $reflClass = new \ReflectionClass($className); + $className = static::class; + $reflClass = new ReflectionClass($className); $constants = $reflClass->getConstants(); foreach ($constants as $name => $value) { @@ -304,20 +309,20 @@ abstract class AbstractLexer */ protected function getModifiers() { - return 'i'; + return 'iu'; } /** * Lexical catchable patterns. * - * @return array + * @return string[] */ abstract protected function getCatchablePatterns(); /** * Lexical non-catchable patterns. * - * @return array + * @return string[] */ abstract protected function getNonCatchablePatterns(); @@ -326,7 +331,7 @@ abstract class AbstractLexer * * @param string $value * - * @return integer + * @return int|string|null */ abstract protected function getType(&$value); } diff --git a/vendor/doctrine/lexer/phpunit.xml.dist b/vendor/doctrine/lexer/phpunit.xml.dist deleted file mode 100644 index d0a18466..00000000 --- a/vendor/doctrine/lexer/phpunit.xml.dist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - tests - - - - - - lib/Doctrine - - - diff --git a/vendor/doctrine/lexer/psalm.xml b/vendor/doctrine/lexer/psalm.xml new file mode 100644 index 00000000..f331e50c --- /dev/null +++ b/vendor/doctrine/lexer/psalm.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/vendor/doctrine/lexer/tests/Doctrine/Common/Lexer/AbstractLexerTest.php b/vendor/doctrine/lexer/tests/Doctrine/Common/Lexer/AbstractLexerTest.php deleted file mode 100644 index 8a2a4e49..00000000 --- a/vendor/doctrine/lexer/tests/Doctrine/Common/Lexer/AbstractLexerTest.php +++ /dev/null @@ -1,268 +0,0 @@ -concreteLexer = new ConcreteLexer(); - } - - public function dataProvider() - { - return array( - array( - 'price=10', - array( - array( - 'value' => 'price', - 'type' => 'string', - 'position' => 0, - ), - array( - 'value' => '=', - 'type' => 'operator', - 'position' => 5, - ), - array( - 'value' => 10, - 'type' => 'int', - 'position' => 6, - ), - ), - ), - ); - } - - public function testResetPeek() - { - $expectedTokens = array( - array( - 'value' => 'price', - 'type' => 'string', - 'position' => 0, - ), - array( - 'value' => '=', - 'type' => 'operator', - 'position' => 5, - ), - array( - 'value' => 10, - 'type' => 'int', - 'position' => 6, - ), - ); - - $this->concreteLexer->setInput('price=10'); - - $this->assertEquals($expectedTokens[0], $this->concreteLexer->peek()); - $this->assertEquals($expectedTokens[1], $this->concreteLexer->peek()); - $this->concreteLexer->resetPeek(); - $this->assertEquals($expectedTokens[0], $this->concreteLexer->peek()); - } - - public function testResetPosition() - { - $expectedTokens = array( - array( - 'value' => 'price', - 'type' => 'string', - 'position' => 0, - ), - array( - 'value' => '=', - 'type' => 'operator', - 'position' => 5, - ), - array( - 'value' => 10, - 'type' => 'int', - 'position' => 6, - ), - ); - - $this->concreteLexer->setInput('price=10'); - $this->assertNull($this->concreteLexer->lookahead); - - $this->assertTrue($this->concreteLexer->moveNext()); - $this->assertEquals($expectedTokens[0], $this->concreteLexer->lookahead); - - $this->assertTrue($this->concreteLexer->moveNext()); - $this->assertEquals($expectedTokens[1], $this->concreteLexer->lookahead); - - $this->concreteLexer->resetPosition(0); - - $this->assertTrue($this->concreteLexer->moveNext()); - $this->assertEquals($expectedTokens[0], $this->concreteLexer->lookahead); - } - - /** - * @dataProvider dataProvider - * - * @param $input - * @param $expectedTokens - */ - public function testMoveNext($input, $expectedTokens) - { - $this->concreteLexer->setInput($input); - $this->assertNull($this->concreteLexer->lookahead); - - for ($i = 0; $i < count($expectedTokens); $i++) { - $this->assertTrue($this->concreteLexer->moveNext()); - $this->assertEquals($expectedTokens[$i], $this->concreteLexer->lookahead); - } - - $this->assertFalse($this->concreteLexer->moveNext()); - $this->assertNull($this->concreteLexer->lookahead); - } - - public function testSkipUntil() - { - $this->concreteLexer->setInput('price=10'); - - $this->assertTrue($this->concreteLexer->moveNext()); - $this->concreteLexer->skipUntil('operator'); - - $this->assertEquals( - array( - 'value' => '=', - 'type' => 'operator', - 'position' => 5, - ), - $this->concreteLexer->lookahead - ); - } - - public function testUtf8Mismatch() - { - $this->concreteLexer->setInput("\xE9=10"); - - $this->assertTrue($this->concreteLexer->moveNext()); - - $this->assertEquals( - array( - 'value' => "\xE9=10", - 'type' => 'string', - 'position' => 0, - ), - $this->concreteLexer->lookahead - ); - } - - /** - * @dataProvider dataProvider - * - * @param $input - * @param $expectedTokens - */ - public function testPeek($input, $expectedTokens) - { - $this->concreteLexer->setInput($input); - foreach ($expectedTokens as $expectedToken) { - $this->assertEquals($expectedToken, $this->concreteLexer->peek()); - } - - $this->assertNull($this->concreteLexer->peek()); - } - - /** - * @dataProvider dataProvider - * - * @param $input - * @param $expectedTokens - */ - public function testGlimpse($input, $expectedTokens) - { - $this->concreteLexer->setInput($input); - - foreach ($expectedTokens as $expectedToken) { - $this->assertEquals($expectedToken, $this->concreteLexer->glimpse()); - $this->concreteLexer->moveNext(); - } - - $this->assertNull($this->concreteLexer->peek()); - } - - public function inputUntilPositionDataProvider() - { - return array( - array('price=10', 5, 'price'), - ); - } - - /** - * @dataProvider inputUntilPositionDataProvider - * - * @param $input - * @param $position - * @param $expectedInput - */ - public function testGetInputUntilPosition($input, $position, $expectedInput) - { - $this->concreteLexer->setInput($input); - - $this->assertSame($expectedInput, $this->concreteLexer->getInputUntilPosition($position)); - } - - /** - * @dataProvider dataProvider - * - * @param $input - * @param $expectedTokens - */ - public function testIsNextToken($input, $expectedTokens) - { - $this->concreteLexer->setInput($input); - - $this->concreteLexer->moveNext(); - for ($i = 0; $i < count($expectedTokens); $i++) { - $this->assertTrue($this->concreteLexer->isNextToken($expectedTokens[$i]['type'])); - $this->concreteLexer->moveNext(); - } - } - - /** - * @dataProvider dataProvider - * - * @param $input - * @param $expectedTokens - */ - public function testIsNextTokenAny($input, $expectedTokens) - { - $allTokenTypes = array_map(function ($token) { - return $token['type']; - }, $expectedTokens); - - $this->concreteLexer->setInput($input); - - $this->concreteLexer->moveNext(); - for ($i = 0; $i < count($expectedTokens); $i++) { - $this->assertTrue($this->concreteLexer->isNextTokenAny(array($expectedTokens[$i]['type']))); - $this->assertTrue($this->concreteLexer->isNextTokenAny($allTokenTypes)); - $this->concreteLexer->moveNext(); - } - } - - public function testGetLiteral() - { - $this->assertSame('Doctrine\Tests\Common\Lexer\ConcreteLexer::INT', $this->concreteLexer->getLiteral('int')); - $this->assertSame('fake_token', $this->concreteLexer->getLiteral('fake_token')); - } - - public function testIsA() - { - $this->assertTrue($this->concreteLexer->isA(11, 'int')); - $this->assertTrue($this->concreteLexer->isA(1.1, 'int')); - $this->assertTrue($this->concreteLexer->isA('=', 'operator')); - $this->assertTrue($this->concreteLexer->isA('>', 'operator')); - $this->assertTrue($this->concreteLexer->isA('<', 'operator')); - $this->assertTrue($this->concreteLexer->isA('fake_text', 'string')); - } -} diff --git a/vendor/doctrine/lexer/tests/Doctrine/Common/Lexer/ConcreteLexer.php b/vendor/doctrine/lexer/tests/Doctrine/Common/Lexer/ConcreteLexer.php deleted file mode 100644 index ed4d153d..00000000 --- a/vendor/doctrine/lexer/tests/Doctrine/Common/Lexer/ConcreteLexer.php +++ /dev/null @@ -1,49 +0,0 @@ -', - '[a-z]+', - '\d+', - ); - } - - protected function getNonCatchablePatterns() - { - return array( - '\s+', - '(.)', - ); - } - - protected function getType(&$value) - { - if (is_numeric($value)) { - $value = (int)$value; - - return 'int'; - } - if (in_array($value, array('=', '<', '>'))) { - return 'operator'; - } - if (is_string($value)) { - return 'string'; - } - - return; - } - - protected function getModifiers() - { - return parent::getModifiers().'u'; - } -} diff --git a/vendor/dragonmantank/cron-expression/CHANGELOG.md b/vendor/dragonmantank/cron-expression/CHANGELOG.md index e3939df5..4e207aad 100644 --- a/vendor/dragonmantank/cron-expression/CHANGELOG.md +++ b/vendor/dragonmantank/cron-expression/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## [2.3.1] - 2020-10-12 +### Added +- Added support for PHP 8 (#92) +### Changed +- N/A +### Fixed +- N/A + ## [2.3.0] - 2019-03-30 ### Added - Added support for DateTimeImmutable via DateTimeInterface diff --git a/vendor/dragonmantank/cron-expression/composer.json b/vendor/dragonmantank/cron-expression/composer.json index c0b7903f..6fcf8184 100644 --- a/vendor/dragonmantank/cron-expression/composer.json +++ b/vendor/dragonmantank/cron-expression/composer.json @@ -17,10 +17,10 @@ } ], "require": { - "php": "^7.0" + "php": "^7.0|^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.4|^7.0" + "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0" }, "autoload": { "psr-4": { diff --git a/vendor/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php b/vendor/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php index 9db9e956..d4ba3156 100644 --- a/vendor/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php +++ b/vendor/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php @@ -70,8 +70,8 @@ class DayOfWeekField extends AbstractField // Find out if this is the last specific weekday of the month if (strpos($value, 'L')) { - $weekday = $this->convertLiterals(substr($value, 0, strpos($value, 'L'))); - $weekday = str_replace('7', '0', $weekday); + $weekday = (int) $this->convertLiterals(substr($value, 0, strpos($value, 'L'))); + $weekday %= 7; $tdate = clone $date; $tdate = $tdate->setDate($currentYear, $currentMonth, $lastDayOfMonth); diff --git a/vendor/dragonmantank/cron-expression/tests/Cron/CronExpressionTest.php b/vendor/dragonmantank/cron-expression/tests/Cron/CronExpressionTest.php index 9b82ae5b..8810d43d 100644 --- a/vendor/dragonmantank/cron-expression/tests/Cron/CronExpressionTest.php +++ b/vendor/dragonmantank/cron-expression/tests/Cron/CronExpressionTest.php @@ -48,11 +48,12 @@ class CronExpressionTest extends TestCase * @covers \Cron\CronExpression::__construct * @covers \Cron\CronExpression::getExpression * @covers \Cron\CronExpression::__toString - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Invalid CRON field value A at position 0 */ public function testParsesCronScheduleThrowsAnException() { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid CRON field value A at position 0'); + CronExpression::factory('A 1 2 3 4'); } @@ -90,20 +91,22 @@ class CronExpressionTest extends TestCase * @covers \Cron\CronExpression::__construct * @covers \Cron\CronExpression::setExpression * @covers \Cron\CronExpression::setPart - * @expectedException InvalidArgumentException */ public function testInvalidCronsWillFail() { + $this->expectException(\InvalidArgumentException::class); + // Only four values $cron = CronExpression::factory('* * * 1'); } /** * @covers \Cron\CronExpression::setPart - * @expectedException InvalidArgumentException */ public function testInvalidPartsWillFail() { + $this->expectException(\InvalidArgumentException::class); + // Only four values $cron = CronExpression::factory('* * * * *'); $cron->setPart(1, 'abc'); diff --git a/vendor/dragonmantank/cron-expression/tests/Cron/DayOfWeekFieldTest.php b/vendor/dragonmantank/cron-expression/tests/Cron/DayOfWeekFieldTest.php index ef89b47f..74e63c28 100644 --- a/vendor/dragonmantank/cron-expression/tests/Cron/DayOfWeekFieldTest.php +++ b/vendor/dragonmantank/cron-expression/tests/Cron/DayOfWeekFieldTest.php @@ -65,22 +65,24 @@ class DayOfWeekFieldTest extends TestCase /** * @covers \Cron\DayOfWeekField::isSatisfiedBy - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Weekday must be a value between 0 and 7. 12 given */ public function testValidatesHashValueWeekday() { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Weekday must be a value between 0 and 7. 12 given'); + $f = new DayOfWeekField(); $this->assertTrue($f->isSatisfiedBy(new DateTime(), '12#1')); } /** * @covers \Cron\DayOfWeekField::isSatisfiedBy - * @expectedException InvalidArgumentException - * @expectedExceptionMessage There are never more than 5 or less than 1 of a given weekday in a month */ public function testValidatesHashValueNth() { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('There are never more than 5 or less than 1 of a given weekday in a month'); + $f = new DayOfWeekField(); $this->assertTrue($f->isSatisfiedBy(new DateTime(), '3#6')); } diff --git a/vendor/dragonmantank/cron-expression/tests/Cron/FieldFactoryTest.php b/vendor/dragonmantank/cron-expression/tests/Cron/FieldFactoryTest.php index a6e66b0e..e25d0707 100644 --- a/vendor/dragonmantank/cron-expression/tests/Cron/FieldFactoryTest.php +++ b/vendor/dragonmantank/cron-expression/tests/Cron/FieldFactoryTest.php @@ -32,10 +32,11 @@ class FieldFactoryTest extends TestCase /** * @covers \Cron\FieldFactory::getField - * @expectedException InvalidArgumentException */ public function testValidatesFieldPosition() { + $this->expectException(\InvalidArgumentException::class); + $f = new FieldFactory(); $f->getField(-1); } diff --git a/vendor/egulias/email-validator/EmailValidator/EmailLexer.php b/vendor/egulias/email-validator/EmailValidator/EmailLexer.php deleted file mode 100644 index 38e4714a..00000000 --- a/vendor/egulias/email-validator/EmailValidator/EmailLexer.php +++ /dev/null @@ -1,221 +0,0 @@ - self::S_OPENPARENTHESIS, - ')' => self::S_CLOSEPARENTHESIS, - '<' => self::S_LOWERTHAN, - '>' => self::S_GREATERTHAN, - '[' => self::S_OPENBRACKET, - ']' => self::S_CLOSEBRACKET, - ':' => self::S_COLON, - ';' => self::S_SEMICOLON, - '@' => self::S_AT, - '\\' => self::S_BACKSLASH, - '/' => self::S_SLASH, - ',' => self::S_COMMA, - '.' => self::S_DOT, - '"' => self::S_DQUOTE, - '-' => self::S_HYPHEN, - '::' => self::S_DOUBLECOLON, - ' ' => self::S_SP, - "\t" => self::S_HTAB, - "\r" => self::S_CR, - "\n" => self::S_LF, - "\r\n" => self::CRLF, - 'IPv6' => self::S_IPV6TAG, - '{' => self::S_OPENQBRACKET, - '}' => self::S_CLOSEQBRACKET, - '' => self::S_EMPTY, - '\0' => self::C_NUL, - ); - - protected $hasInvalidTokens = false; - - protected $previous; - - public function reset() - { - $this->hasInvalidTokens = false; - parent::reset(); - } - - public function hasInvalidTokens() - { - return $this->hasInvalidTokens; - } - - /** - * @param string $type - * @throws \UnexpectedValueException - * @return boolean - */ - public function find($type) - { - $search = clone $this; - $search->skipUntil($type); - - if (!$search->lookahead) { - throw new \UnexpectedValueException($type . ' not found'); - } - return true; - } - - /** - * getPrevious - * - * @return array token - */ - public function getPrevious() - { - return $this->previous; - } - - /** - * moveNext - * - * @return boolean - */ - public function moveNext() - { - $this->previous = $this->token; - - return parent::moveNext(); - } - - /** - * Lexical catchable patterns. - * - * @return string[] - */ - protected function getCatchablePatterns() - { - return array( - '[a-zA-Z_]+[46]?', //ASCII and domain literal - '[^\x00-\x7F]', //UTF-8 - '[0-9]+', - '\r\n', - '::', - '\s+?', - '.', - ); - } - - /** - * Lexical non-catchable patterns. - * - * @return string[] - */ - protected function getNonCatchablePatterns() - { - return array('[\xA0-\xff]+'); - } - - /** - * Retrieve token type. Also processes the token value if necessary. - * - * @param string $value - * @throws \InvalidArgumentException - * @return integer - */ - protected function getType(&$value) - { - if ($this->isNullType($value)) { - return self::C_NUL; - } - - if ($this->isValid($value)) { - return $this->charValue[$value]; - } - - if ($this->isUTF8Invalid($value)) { - $this->hasInvalidTokens = true; - return self::INVALID; - } - - return self::GENERIC; - } - - protected function isValid($value) - { - if (isset($this->charValue[$value])) { - return true; - } - - return false; - } - - /** - * @param string $value - * @return bool - */ - protected function isNullType($value) - { - if ($value === "\0") { - return true; - } - - return false; - } - - /** - * @param string $value - * @return bool - */ - protected function isUTF8Invalid($value) - { - if (preg_match('/\p{Cc}+/u', $value)) { - return true; - } - - return false; - } - - protected function getModifiers() - { - return 'iu'; - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/EmailParser.php b/vendor/egulias/email-validator/EmailValidator/EmailParser.php deleted file mode 100644 index 5bf605ac..00000000 --- a/vendor/egulias/email-validator/EmailValidator/EmailParser.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ -class EmailParser -{ - const EMAIL_MAX_LENGTH = 254; - - protected $warnings; - protected $domainPart = ''; - protected $localPart = ''; - protected $lexer; - protected $localPartParser; - protected $domainPartParser; - - public function __construct(EmailLexer $lexer) - { - $this->lexer = $lexer; - $this->localPartParser = new LocalPart($this->lexer); - $this->domainPartParser = new DomainPart($this->lexer); - $this->warnings = new \SplObjectStorage(); - } - - /** - * @param string $str - * @return array - */ - public function parse($str) - { - $this->lexer->setInput($str); - - if (!$this->hasAtToken()) { - throw new NoLocalPart(); - } - - - $this->localPartParser->parse($str); - $this->domainPartParser->parse($str); - - $this->setParts($str); - - if ($this->lexer->hasInvalidTokens()) { - throw new ExpectingATEXT(); - } - - return array('local' => $this->localPart, 'domain' => $this->domainPart); - } - - public function getWarnings() - { - $localPartWarnings = $this->localPartParser->getWarnings(); - $domainPartWarnings = $this->domainPartParser->getWarnings(); - $this->warnings = array_merge($localPartWarnings, $domainPartWarnings); - - $this->addLongEmailWarning($this->localPart, $this->domainPart); - - return $this->warnings; - } - - public function getParsedDomainPart() - { - return $this->domainPart; - } - - protected function setParts($email) - { - $parts = explode('@', $email); - $this->domainPart = $this->domainPartParser->getDomainPart(); - $this->localPart = $parts[0]; - } - - protected function hasAtToken() - { - $this->lexer->moveNext(); - $this->lexer->moveNext(); - if ($this->lexer->token['type'] === EmailLexer::S_AT) { - return false; - } - - return true; - } - - /** - * @param string $localPart - * @param string $parsedDomainPart - */ - protected function addLongEmailWarning($localPart, $parsedDomainPart) - { - if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) { - $this->warnings[EmailTooLong::CODE] = new EmailTooLong(); - } - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/EmailValidator.php b/vendor/egulias/email-validator/EmailValidator/EmailValidator.php deleted file mode 100644 index 1c277072..00000000 --- a/vendor/egulias/email-validator/EmailValidator/EmailValidator.php +++ /dev/null @@ -1,67 +0,0 @@ -lexer = new EmailLexer(); - } - - /** - * @param string $email - * @param EmailValidation $emailValidation - * @return bool - */ - public function isValid($email, EmailValidation $emailValidation) - { - $isValid = $emailValidation->isValid($email, $this->lexer); - $this->warnings = $emailValidation->getWarnings(); - $this->error = $emailValidation->getError(); - - return $isValid; - } - - /** - * @return boolean - */ - public function hasWarnings() - { - return !empty($this->warnings); - } - - /** - * @return array - */ - public function getWarnings() - { - return $this->warnings; - } - - /** - * @return InvalidEmail - */ - public function getError() - { - return $this->error; - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php b/vendor/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php deleted file mode 100644 index c87c97ac..00000000 --- a/vendor/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php +++ /dev/null @@ -1,9 +0,0 @@ -lexer->moveNext(); - - if ($this->lexer->token['type'] === EmailLexer::S_DOT) { - throw new DotAtStart(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_EMPTY) { - throw new NoDomainPart(); - } - if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN) { - throw new DomainHyphened(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { - $this->warnings[DeprecatedComment::CODE] = new DeprecatedComment(); - $this->parseDomainComments(); - } - - $domain = $this->doParseDomainPart(); - - $prev = $this->lexer->getPrevious(); - $length = strlen($domain); - - if ($prev['type'] === EmailLexer::S_DOT) { - throw new DotAtEnd(); - } - if ($prev['type'] === EmailLexer::S_HYPHEN) { - throw new DomainHyphened(); - } - if ($length > self::DOMAIN_MAX_LENGTH) { - $this->warnings[DomainTooLong::CODE] = new DomainTooLong(); - } - if ($prev['type'] === EmailLexer::S_CR) { - throw new CRLFAtTheEnd(); - } - $this->domainPart = $domain; - } - - public function getDomainPart() - { - return $this->domainPart; - } - - public function checkIPV6Tag($addressLiteral, $maxGroups = 8) - { - $prev = $this->lexer->getPrevious(); - if ($prev['type'] === EmailLexer::S_COLON) { - $this->warnings[IPV6ColonEnd::CODE] = new IPV6ColonEnd(); - } - - $IPv6 = substr($addressLiteral, 5); - //Daniel Marschall's new IPv6 testing strategy - $matchesIP = explode(':', $IPv6); - $groupCount = count($matchesIP); - $colons = strpos($IPv6, '::'); - - if (count(preg_grep('/^[0-9A-Fa-f]{0,4}$/', $matchesIP, PREG_GREP_INVERT)) !== 0) { - $this->warnings[IPV6BadChar::CODE] = new IPV6BadChar(); - } - - if ($colons === false) { - // We need exactly the right number of groups - if ($groupCount !== $maxGroups) { - $this->warnings[IPV6GroupCount::CODE] = new IPV6GroupCount(); - } - return; - } - - if ($colons !== strrpos($IPv6, '::')) { - $this->warnings[IPV6DoubleColon::CODE] = new IPV6DoubleColon(); - return; - } - - if ($colons === 0 || $colons === (strlen($IPv6) - 2)) { - // RFC 4291 allows :: at the start or end of an address - //with 7 other groups in addition - ++$maxGroups; - } - - if ($groupCount > $maxGroups) { - $this->warnings[IPV6MaxGroups::CODE] = new IPV6MaxGroups(); - } elseif ($groupCount === $maxGroups) { - $this->warnings[IPV6Deprecated::CODE] = new IPV6Deprecated(); - } - } - - protected function doParseDomainPart() - { - $domain = ''; - $openedParenthesis = 0; - do { - $prev = $this->lexer->getPrevious(); - - $this->checkNotAllowedChars($this->lexer->token); - - if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { - $this->parseComments(); - $openedParenthesis += $this->getOpenedParenthesis(); - $this->lexer->moveNext(); - $tmpPrev = $this->lexer->getPrevious(); - if ($tmpPrev['type'] === EmailLexer::S_CLOSEPARENTHESIS) { - $openedParenthesis--; - } - } - if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { - if ($openedParenthesis === 0) { - throw new UnopenedComment(); - } else { - $openedParenthesis--; - } - } - - $this->checkConsecutiveDots(); - $this->checkDomainPartExceptions($prev); - - if ($this->hasBrackets()) { - $this->parseDomainLiteral(); - } - - $this->checkLabelLength($prev); - - if ($this->isFWS()) { - $this->parseFWS(); - } - - $domain .= $this->lexer->token['value']; - $this->lexer->moveNext(); - } while ($this->lexer->token); - - return $domain; - } - - private function checkNotAllowedChars($token) - { - $notAllowed = [EmailLexer::S_BACKSLASH => true, EmailLexer::S_SLASH=> true]; - if (isset($notAllowed[$token['type']])) { - throw new CharNotAllowed(); - } - } - - protected function parseDomainLiteral() - { - if ($this->lexer->isNextToken(EmailLexer::S_COLON)) { - $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); - } - if ($this->lexer->isNextToken(EmailLexer::S_IPV6TAG)) { - $lexer = clone $this->lexer; - $lexer->moveNext(); - if ($lexer->isNextToken(EmailLexer::S_DOUBLECOLON)) { - $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); - } - } - - return $this->doParseDomainLiteral(); - } - - protected function doParseDomainLiteral() - { - $IPv6TAG = false; - $addressLiteral = ''; - do { - if ($this->lexer->token['type'] === EmailLexer::C_NUL) { - throw new ExpectingDTEXT(); - } - - if ($this->lexer->token['type'] === EmailLexer::INVALID || - $this->lexer->token['type'] === EmailLexer::C_DEL || - $this->lexer->token['type'] === EmailLexer::S_LF - ) { - $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); - } - - if ($this->lexer->isNextTokenAny(array(EmailLexer::S_OPENQBRACKET, EmailLexer::S_OPENBRACKET))) { - throw new ExpectingDTEXT(); - } - - if ($this->lexer->isNextTokenAny( - array(EmailLexer::S_HTAB, EmailLexer::S_SP, $this->lexer->token['type'] === EmailLexer::CRLF) - )) { - $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); - $this->parseFWS(); - } - - if ($this->lexer->isNextToken(EmailLexer::S_CR)) { - throw new CRNoLF(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH) { - $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); - $addressLiteral .= $this->lexer->token['value']; - $this->lexer->moveNext(); - $this->validateQuotedPair(); - } - if ($this->lexer->token['type'] === EmailLexer::S_IPV6TAG) { - $IPv6TAG = true; - } - if ($this->lexer->token['type'] === EmailLexer::S_CLOSEQBRACKET) { - break; - } - - $addressLiteral .= $this->lexer->token['value']; - - } while ($this->lexer->moveNext()); - - $addressLiteral = str_replace('[', '', $addressLiteral); - $addressLiteral = $this->checkIPV4Tag($addressLiteral); - - if (false === $addressLiteral) { - return $addressLiteral; - } - - if (!$IPv6TAG) { - $this->warnings[DomainLiteral::CODE] = new DomainLiteral(); - return $addressLiteral; - } - - $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); - - $this->checkIPV6Tag($addressLiteral); - - return $addressLiteral; - } - - protected function checkIPV4Tag($addressLiteral) - { - $matchesIP = array(); - - // Extract IPv4 part from the end of the address-literal (if there is one) - if (preg_match( - '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/', - $addressLiteral, - $matchesIP - ) > 0 - ) { - $index = strrpos($addressLiteral, $matchesIP[0]); - if ($index === 0) { - $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); - return false; - } - // Convert IPv4 part to IPv6 format for further testing - $addressLiteral = substr($addressLiteral, 0, $index) . '0:0'; - } - - return $addressLiteral; - } - - protected function checkDomainPartExceptions($prev) - { - $invalidDomainTokens = array( - EmailLexer::S_DQUOTE => true, - EmailLexer::S_SEMICOLON => true, - EmailLexer::S_GREATERTHAN => true, - EmailLexer::S_LOWERTHAN => true, - ); - - if (isset($invalidDomainTokens[$this->lexer->token['type']])) { - throw new ExpectingATEXT(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_COMMA) { - throw new CommaInDomain(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_AT) { - throw new ConsecutiveAt(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_OPENQBRACKET && $prev['type'] !== EmailLexer::S_AT) { - throw new ExpectingATEXT(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN && $this->lexer->isNextToken(EmailLexer::S_DOT)) { - throw new DomainHyphened(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH - && $this->lexer->isNextToken(EmailLexer::GENERIC)) { - throw new ExpectingATEXT(); - } - } - - protected function hasBrackets() - { - if ($this->lexer->token['type'] !== EmailLexer::S_OPENBRACKET) { - return false; - } - - try { - $this->lexer->find(EmailLexer::S_CLOSEBRACKET); - } catch (\RuntimeException $e) { - throw new ExpectingDomainLiteralClose(); - } - - return true; - } - - protected function checkLabelLength($prev) - { - if ($this->lexer->token['type'] === EmailLexer::S_DOT && - $prev['type'] === EmailLexer::GENERIC && - strlen($prev['value']) > 63 - ) { - $this->warnings[LabelTooLong::CODE] = new LabelTooLong(); - } - } - - protected function parseDomainComments() - { - $this->isUnclosedComment(); - while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { - $this->warnEscaping(); - $this->lexer->moveNext(); - } - - $this->lexer->moveNext(); - if ($this->lexer->isNextToken(EmailLexer::S_DOT)) { - throw new ExpectingATEXT(); - } - } - - protected function addTLDWarnings() - { - if ($this->warnings[DomainLiteral::CODE]) { - $this->warnings[TLD::CODE] = new TLD(); - } - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php b/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php deleted file mode 100644 index 8ab16ab4..00000000 --- a/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php +++ /dev/null @@ -1,138 +0,0 @@ -lexer->token['type'] !== EmailLexer::S_AT && $this->lexer->token) { - if ($this->lexer->token['type'] === EmailLexer::S_DOT && !$this->lexer->getPrevious()) { - throw new DotAtStart(); - } - - $closingQuote = $this->checkDQUOTE($closingQuote); - if ($closingQuote && $parseDQuote) { - $parseDQuote = $this->parseDoubleQuote(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { - $this->parseComments(); - $openedParenthesis += $this->getOpenedParenthesis(); - } - if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { - if ($openedParenthesis === 0) { - throw new UnopenedComment(); - } else { - $openedParenthesis--; - } - } - - $this->checkConsecutiveDots(); - - if ($this->lexer->token['type'] === EmailLexer::S_DOT && - $this->lexer->isNextToken(EmailLexer::S_AT) - ) { - throw new DotAtEnd(); - } - - $this->warnEscaping(); - $this->isInvalidToken($this->lexer->token, $closingQuote); - - if ($this->isFWS()) { - $this->parseFWS(); - } - - $this->lexer->moveNext(); - } - - $prev = $this->lexer->getPrevious(); - if (strlen($prev['value']) > LocalTooLong::LOCAL_PART_LENGTH) { - $this->warnings[LocalTooLong::CODE] = new LocalTooLong(); - } - } - - protected function parseDoubleQuote() - { - $parseAgain = true; - $special = array( - EmailLexer::S_CR => true, - EmailLexer::S_HTAB => true, - EmailLexer::S_LF => true - ); - - $invalid = array( - EmailLexer::C_NUL => true, - EmailLexer::S_HTAB => true, - EmailLexer::S_CR => true, - EmailLexer::S_LF => true - ); - $setSpecialsWarning = true; - - $this->lexer->moveNext(); - - while ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE && $this->lexer->token) { - $parseAgain = false; - if (isset($special[$this->lexer->token['type']]) && $setSpecialsWarning) { - $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); - $setSpecialsWarning = false; - } - if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH && $this->lexer->isNextToken(EmailLexer::S_DQUOTE)) { - $this->lexer->moveNext(); - } - - $this->lexer->moveNext(); - - if (!$this->escaped() && isset($invalid[$this->lexer->token['type']])) { - throw new ExpectingATEXT(); - } - } - - $prev = $this->lexer->getPrevious(); - - if ($prev['type'] === EmailLexer::S_BACKSLASH) { - if (!$this->checkDQUOTE(false)) { - throw new UnclosedQuotedString(); - } - } - - if (!$this->lexer->isNextToken(EmailLexer::S_AT) && $prev['type'] !== EmailLexer::S_BACKSLASH) { - throw new ExpectingAT(); - } - - return $parseAgain; - } - - protected function isInvalidToken($token, $closingQuote) - { - $forbidden = array( - EmailLexer::S_COMMA, - EmailLexer::S_CLOSEBRACKET, - EmailLexer::S_OPENBRACKET, - EmailLexer::S_GREATERTHAN, - EmailLexer::S_LOWERTHAN, - EmailLexer::S_COLON, - EmailLexer::S_SEMICOLON, - EmailLexer::INVALID - ); - - if (in_array($token['type'], $forbidden) && !$closingQuote) { - throw new ExpectingATEXT(); - } - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php b/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php deleted file mode 100644 index fa7bd44b..00000000 --- a/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php +++ /dev/null @@ -1,215 +0,0 @@ -lexer = $lexer; - } - - public function getWarnings() - { - return $this->warnings; - } - - abstract public function parse($str); - - /** @return int */ - public function getOpenedParenthesis() - { - return $this->openedParenthesis; - } - - /** - * validateQuotedPair - */ - protected function validateQuotedPair() - { - if (!($this->lexer->token['type'] === EmailLexer::INVALID - || $this->lexer->token['type'] === EmailLexer::C_DEL)) { - throw new ExpectingQPair(); - } - - $this->warnings[QuotedPart::CODE] = - new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); - } - - protected function parseComments() - { - $this->openedParenthesis = 1; - $this->isUnclosedComment(); - $this->warnings[Comment::CODE] = new Comment(); - while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { - if ($this->lexer->isNextToken(EmailLexer::S_OPENPARENTHESIS)) { - $this->openedParenthesis++; - } - $this->warnEscaping(); - $this->lexer->moveNext(); - } - - $this->lexer->moveNext(); - if ($this->lexer->isNextTokenAny(array(EmailLexer::GENERIC, EmailLexer::S_EMPTY))) { - throw new ExpectingATEXT(); - } - - if ($this->lexer->isNextToken(EmailLexer::S_AT)) { - $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); - } - } - - protected function isUnclosedComment() - { - try { - $this->lexer->find(EmailLexer::S_CLOSEPARENTHESIS); - return true; - } catch (\RuntimeException $e) { - throw new UnclosedComment(); - } - } - - protected function parseFWS() - { - $previous = $this->lexer->getPrevious(); - - $this->checkCRLFInFWS(); - - if ($this->lexer->token['type'] === EmailLexer::S_CR) { - throw new CRNoLF(); - } - - if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] !== EmailLexer::S_AT) { - throw new AtextAfterCFWS(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_LF || $this->lexer->token['type'] === EmailLexer::C_NUL) { - throw new ExpectingCTEXT(); - } - - if ($this->lexer->isNextToken(EmailLexer::S_AT) || $previous['type'] === EmailLexer::S_AT) { - $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); - } else { - $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); - } - } - - protected function checkConsecutiveDots() - { - if ($this->lexer->token['type'] === EmailLexer::S_DOT && $this->lexer->isNextToken(EmailLexer::S_DOT)) { - throw new ConsecutiveDot(); - } - } - - protected function isFWS() - { - if ($this->escaped()) { - return false; - } - - if ($this->lexer->token['type'] === EmailLexer::S_SP || - $this->lexer->token['type'] === EmailLexer::S_HTAB || - $this->lexer->token['type'] === EmailLexer::S_CR || - $this->lexer->token['type'] === EmailLexer::S_LF || - $this->lexer->token['type'] === EmailLexer::CRLF - ) { - return true; - } - - return false; - } - - protected function escaped() - { - $previous = $this->lexer->getPrevious(); - - if ($previous['type'] === EmailLexer::S_BACKSLASH - && - $this->lexer->token['type'] !== EmailLexer::GENERIC - ) { - return true; - } - - return false; - } - - protected function warnEscaping() - { - if ($this->lexer->token['type'] !== EmailLexer::S_BACKSLASH) { - return false; - } - - if ($this->lexer->isNextToken(EmailLexer::GENERIC)) { - throw new ExpectingATEXT(); - } - - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB, EmailLexer::C_DEL))) { - return false; - } - - $this->warnings[QuotedPart::CODE] = - new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); - return true; - - } - - protected function checkDQUOTE($hasClosingQuote) - { - if ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE) { - return $hasClosingQuote; - } - if ($hasClosingQuote) { - return $hasClosingQuote; - } - $previous = $this->lexer->getPrevious(); - if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] === EmailLexer::GENERIC) { - throw new ExpectingATEXT(); - } - - try { - $this->lexer->find(EmailLexer::S_DQUOTE); - $hasClosingQuote = true; - } catch (\Exception $e) { - throw new UnclosedQuotedString(); - } - $this->warnings[QuotedString::CODE] = new QuotedString($previous['value'], $this->lexer->token['value']); - - return $hasClosingQuote; - } - - protected function checkCRLFInFWS() - { - if ($this->lexer->token['type'] !== EmailLexer::CRLF) { - return; - } - - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { - throw new CRLFX2(); - } - - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { - throw new CRLFAtTheEnd(); - } - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php b/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php deleted file mode 100644 index e5c3e5df..00000000 --- a/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php +++ /dev/null @@ -1,72 +0,0 @@ -checkDNS($host); - } - - public function getError() - { - return $this->error; - } - - public function getWarnings() - { - return $this->warnings; - } - - protected function checkDNS($host) - { - $variant = INTL_IDNA_VARIANT_2003; - if ( defined('INTL_IDNA_VARIANT_UTS46') ) { - $variant = INTL_IDNA_VARIANT_UTS46; - } - $host = rtrim(idn_to_ascii($host, IDNA_DEFAULT, $variant), '.') . '.'; - - $Aresult = true; - $MXresult = checkdnsrr($host, 'MX'); - - if (!$MXresult) { - $this->warnings[NoDNSMXRecord::CODE] = new NoDNSMXRecord(); - $Aresult = checkdnsrr($host, 'A') || checkdnsrr($host, 'AAAA'); - if (!$Aresult) { - $this->error = new NoDNSRecord(); - } - } - return $MXresult || $Aresult; - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php b/vendor/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php deleted file mode 100644 index 775ad16f..00000000 --- a/vendor/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php +++ /dev/null @@ -1,13 +0,0 @@ -errors = $errors; - parent::__construct(); - } - - public function getErrors() - { - return $this->errors; - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php b/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php deleted file mode 100644 index ce161ac8..00000000 --- a/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php +++ /dev/null @@ -1,111 +0,0 @@ -validations = $validations; - $this->mode = $mode; - } - - /** - * {@inheritdoc} - */ - public function isValid($email, EmailLexer $emailLexer) - { - $result = true; - $errors = []; - foreach ($this->validations as $validation) { - $emailLexer->reset(); - $validationResult = $validation->isValid($email, $emailLexer); - $result = $result && $validationResult; - $this->warnings = array_merge($this->warnings, $validation->getWarnings()); - $errors = $this->addNewError($validation->getError(), $errors); - - if ($this->shouldStop($result)) { - break; - } - } - - if (!empty($errors)) { - $this->error = new MultipleErrors($errors); - } - - return $result; - } - - private function addNewError($possibleError, array $errors) - { - if (null !== $possibleError) { - $errors[] = $possibleError; - } - - return $errors; - } - - private function shouldStop($result) - { - return !$result && $this->mode === self::STOP_ON_ERROR; - } - - /** - * {@inheritdoc} - */ - public function getError() - { - return $this->error; - } - - /** - * {@inheritdoc} - */ - public function getWarnings() - { - return $this->warnings; - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php b/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php deleted file mode 100644 index e4bf0cc4..00000000 --- a/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php +++ /dev/null @@ -1,41 +0,0 @@ -getWarnings())) { - return true; - } - - $this->error = new RFCWarnings(); - - return false; - } - - /** - * {@inheritdoc} - */ - public function getError() - { - return $this->error ?: parent::getError(); - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php b/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php deleted file mode 100644 index c4ffe350..00000000 --- a/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php +++ /dev/null @@ -1,49 +0,0 @@ -parser = new EmailParser($emailLexer); - try { - $this->parser->parse((string)$email); - } catch (InvalidEmail $invalid) { - $this->error = $invalid; - return false; - } - - $this->warnings = $this->parser->getWarnings(); - return true; - } - - public function getError() - { - return $this->error; - } - - public function getWarnings() - { - return $this->warnings; - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php b/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php deleted file mode 100644 index 4721f0d8..00000000 --- a/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php +++ /dev/null @@ -1,45 +0,0 @@ -setChecks(Spoofchecker::SINGLE_SCRIPT); - - if ($checker->isSuspicious($email)) { - $this->error = new SpoofEmail(); - } - - return $this->error === null; - } - - public function getError() - { - return $this->error; - } - - public function getWarnings() - { - return []; - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php b/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php deleted file mode 100644 index 7be9e6a3..00000000 --- a/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php +++ /dev/null @@ -1,13 +0,0 @@ -message = "Deprecated Quoted String found between $prevToken and $postToken"; - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php b/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php deleted file mode 100644 index e9d56e1e..00000000 --- a/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php +++ /dev/null @@ -1,13 +0,0 @@ -message = "Quoted String found between $prevToken and $postToken"; - } -} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php b/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php deleted file mode 100644 index ec6a365f..00000000 --- a/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php +++ /dev/null @@ -1,30 +0,0 @@ -message; - } - - public function code() - { - return self::CODE; - } - - public function RFCNumber() - { - return $this->rfcNumber; - } - - public function __toString() - { - return $this->message() . " rfc: " . $this->rfcNumber . "interal code: " . static::CODE; - } -} diff --git a/vendor/egulias/email-validator/README.md b/vendor/egulias/email-validator/README.md deleted file mode 100644 index b5b0d85f..00000000 --- a/vendor/egulias/email-validator/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# EmailValidator -[![Build Status](https://travis-ci.org/egulias/EmailValidator.svg?branch=master)](https://travis-ci.org/egulias/EmailValidator) [![Coverage Status](https://coveralls.io/repos/egulias/EmailValidator/badge.svg?branch=master)](https://coveralls.io/r/egulias/EmailValidator?branch=master) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/egulias/EmailValidator/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/egulias/EmailValidator/?branch=master) [![SensioLabsInsight](https://insight.sensiolabs.com/projects/22ba6692-9c02-42e5-a65d-1c5696bfffc6/small.png)](https://insight.sensiolabs.com/projects/22ba6692-9c02-42e5-a65d-1c5696bfffc6) -============================= -## Suported RFCs ## -This library aims to support: - -RFC 5321, 5322, 6530, 6531, 6532. - -## Requirements ## - - * [Composer](https://getcomposer.org) is required for installation - * [Spoofchecking](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/SpoofCheckValidation.php) and [DNSCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/DNSCheckValidation.php) validation requires that your PHP system has the [PHP Internationalization Libraries](https://php.net/manual/en/book.intl.php) (also known as PHP Intl) - -## Installation ## - -Run the command below to install via Composer - -```shell -composer require egulias/email-validator -``` - -## Getting Started ## -`EmailValidator`requires you to decide which (or combination of them) validation/s strategy/ies you'd like to follow for each [validation](#available-validations). - -A basic example with the RFC validation -```php -isValid("example@example.com", new RFCValidation()); //true -``` - - -### Available validations ### - -1. [RFCValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/RFCValidation.php) -2. [NoRFCWarningsValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/NoRFCWarningsValidation.php) -3. [DNSCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/DNSCheckValidation.php) -4. [SpoofCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/SpoofCheckValidation.php) -5. [MultipleValidationWithAnd](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/MultipleValidationWithAnd.php) -6. [Your own validation](#how-to-extend) - -`MultipleValidationWithAnd` - -It is a validation that operates over other validations performing a logical and (&&) over the result of each validation. - -```php -isValid("example@example.com", $multipleValidations); //true -``` - -### How to extend ### - -It's easy! You just need to implement [EmailValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/EmailValidation.php) and you can use your own validation. - - -## Other Contributors ## -(You can find current contributors [here](https://github.com/egulias/EmailValidator/graphs/contributors)) - -As this is a port from another library and work, here are other people related to the previous one: - -* Ricard Clau [@ricardclau](https://github.com/ricardclau): Performance against PHP built-in filter_var -* Josepf Bielawski [@stloyd](https://github.com/stloyd): For its first re-work of Dominic's lib -* Dominic Sayers [@dominicsayers](https://github.com/dominicsayers): The original isemail function - -## License ## -Released under the MIT License attached with this code. - diff --git a/vendor/egulias/email-validator/composer.json b/vendor/egulias/email-validator/composer.json index 5423e9f0..a275696a 100644 --- a/vendor/egulias/email-validator/composer.json +++ b/vendor/egulias/email-validator/composer.json @@ -2,7 +2,6 @@ "name": "egulias/email-validator", "description": "A library for validating emails against several RFCs", "homepage": "https://github.com/egulias/EmailValidator", - "type": "Library", "keywords": ["email", "validation", "validator", "emailvalidation", "emailvalidator"], "license": "MIT", "authors": [ @@ -10,35 +9,30 @@ ], "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.1.x-dev" } }, - "repositories": [ - { - "type": "git", - "url": "https://github.com/dominicsayers/isemail" - } - ], - "require": { - "php": ">= 5.5", - "doctrine/lexer": "^1.0.1" + "require": { + "php": ">=5.5", + "doctrine/lexer": "^1.0.1", + "symfony/polyfill-intl-idn": "^1.10" }, - "require-dev" : { - "satooshi/php-coveralls": "^1.0.1", - "phpunit/phpunit": "^4.8.35||^5.7||^6.0", - "dominicsayers/isemail": "dev-master" + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" }, "autoload": { "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" + "Egulias\\EmailValidator\\": "src" } }, "autoload-dev": { "psr-4": { - "Egulias\\Tests\\": "test" + "Egulias\\EmailValidator\\Tests\\": "tests" } } } diff --git a/vendor/egulias/email-validator/phpunit.xml.dist b/vendor/egulias/email-validator/phpunit.xml.dist deleted file mode 100644 index b0812f97..00000000 --- a/vendor/egulias/email-validator/phpunit.xml.dist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - ./Tests/EmailValidator - ./vendor/ - - - - - - ./vendor - - - diff --git a/vendor/egulias/email-validator/src/EmailLexer.php b/vendor/egulias/email-validator/src/EmailLexer.php new file mode 100644 index 00000000..59dcd587 --- /dev/null +++ b/vendor/egulias/email-validator/src/EmailLexer.php @@ -0,0 +1,283 @@ + self::S_OPENPARENTHESIS, + ')' => self::S_CLOSEPARENTHESIS, + '<' => self::S_LOWERTHAN, + '>' => self::S_GREATERTHAN, + '[' => self::S_OPENBRACKET, + ']' => self::S_CLOSEBRACKET, + ':' => self::S_COLON, + ';' => self::S_SEMICOLON, + '@' => self::S_AT, + '\\' => self::S_BACKSLASH, + '/' => self::S_SLASH, + ',' => self::S_COMMA, + '.' => self::S_DOT, + "'" => self::S_SQUOTE, + "`" => self::S_BACKTICK, + '"' => self::S_DQUOTE, + '-' => self::S_HYPHEN, + '::' => self::S_DOUBLECOLON, + ' ' => self::S_SP, + "\t" => self::S_HTAB, + "\r" => self::S_CR, + "\n" => self::S_LF, + "\r\n" => self::CRLF, + 'IPv6' => self::S_IPV6TAG, + '{' => self::S_OPENQBRACKET, + '}' => self::S_CLOSEQBRACKET, + '' => self::S_EMPTY, + '\0' => self::C_NUL, + ); + + /** + * @var bool + */ + protected $hasInvalidTokens = false; + + /** + * @var array + * + * @psalm-var array{value:string, type:null|int, position:int}|array + */ + protected $previous = []; + + /** + * The last matched/seen token. + * + * @var array + * + * @psalm-var array{value:string, type:null|int, position:int} + */ + public $token; + + /** + * The next token in the input. + * + * @var array|null + */ + public $lookahead; + + /** + * @psalm-var array{value:'', type:null, position:0} + */ + private static $nullToken = [ + 'value' => '', + 'type' => null, + 'position' => 0, + ]; + + public function __construct() + { + $this->previous = $this->token = self::$nullToken; + $this->lookahead = null; + } + + /** + * @return void + */ + public function reset() + { + $this->hasInvalidTokens = false; + parent::reset(); + $this->previous = $this->token = self::$nullToken; + } + + /** + * @return bool + */ + public function hasInvalidTokens() + { + return $this->hasInvalidTokens; + } + + /** + * @param int $type + * @throws \UnexpectedValueException + * @return boolean + * + * @psalm-suppress InvalidScalarArgument + */ + public function find($type) + { + $search = clone $this; + $search->skipUntil($type); + + if (!$search->lookahead) { + throw new \UnexpectedValueException($type . ' not found'); + } + return true; + } + + /** + * getPrevious + * + * @return array + */ + public function getPrevious() + { + return $this->previous; + } + + /** + * moveNext + * + * @return boolean + */ + public function moveNext() + { + $this->previous = $this->token; + $hasNext = parent::moveNext(); + $this->token = $this->token ?: self::$nullToken; + + return $hasNext; + } + + /** + * Lexical catchable patterns. + * + * @return string[] + */ + protected function getCatchablePatterns() + { + return array( + '[a-zA-Z_]+[46]?', //ASCII and domain literal + '[^\x00-\x7F]', //UTF-8 + '[0-9]+', + '\r\n', + '::', + '\s+?', + '.', + ); + } + + /** + * Lexical non-catchable patterns. + * + * @return string[] + */ + protected function getNonCatchablePatterns() + { + return array('[\xA0-\xff]+'); + } + + /** + * Retrieve token type. Also processes the token value if necessary. + * + * @param string $value + * @throws \InvalidArgumentException + * @return integer + */ + protected function getType(&$value) + { + if ($this->isNullType($value)) { + return self::C_NUL; + } + + if ($this->isValid($value)) { + return $this->charValue[$value]; + } + + if ($this->isUTF8Invalid($value)) { + $this->hasInvalidTokens = true; + return self::INVALID; + } + + return self::GENERIC; + } + + /** + * @param string $value + * + * @return bool + */ + protected function isValid($value) + { + if (isset($this->charValue[$value])) { + return true; + } + + return false; + } + + /** + * @param string $value + * @return bool + */ + protected function isNullType($value) + { + if ($value === "\0") { + return true; + } + + return false; + } + + /** + * @param string $value + * @return bool + */ + protected function isUTF8Invalid($value) + { + if (preg_match('/\p{Cc}+/u', $value)) { + return true; + } + + return false; + } + + /** + * @return string + */ + protected function getModifiers() + { + return 'iu'; + } +} diff --git a/vendor/egulias/email-validator/src/EmailParser.php b/vendor/egulias/email-validator/src/EmailParser.php new file mode 100644 index 00000000..6b7bad66 --- /dev/null +++ b/vendor/egulias/email-validator/src/EmailParser.php @@ -0,0 +1,137 @@ + + */ +class EmailParser +{ + const EMAIL_MAX_LENGTH = 254; + + /** + * @var array + */ + protected $warnings = []; + + /** + * @var string + */ + protected $domainPart = ''; + + /** + * @var string + */ + protected $localPart = ''; + /** + * @var EmailLexer + */ + protected $lexer; + + /** + * @var LocalPart + */ + protected $localPartParser; + + /** + * @var DomainPart + */ + protected $domainPartParser; + + public function __construct(EmailLexer $lexer) + { + $this->lexer = $lexer; + $this->localPartParser = new LocalPart($this->lexer); + $this->domainPartParser = new DomainPart($this->lexer); + } + + /** + * @param string $str + * @return array + */ + public function parse($str) + { + $this->lexer->setInput($str); + + if (!$this->hasAtToken()) { + throw new NoLocalPart(); + } + + + $this->localPartParser->parse($str); + $this->domainPartParser->parse($str); + + $this->setParts($str); + + if ($this->lexer->hasInvalidTokens()) { + throw new ExpectingATEXT(); + } + + return array('local' => $this->localPart, 'domain' => $this->domainPart); + } + + /** + * @return Warning\Warning[] + */ + public function getWarnings() + { + $localPartWarnings = $this->localPartParser->getWarnings(); + $domainPartWarnings = $this->domainPartParser->getWarnings(); + $this->warnings = array_merge($localPartWarnings, $domainPartWarnings); + + $this->addLongEmailWarning($this->localPart, $this->domainPart); + + return $this->warnings; + } + + /** + * @return string + */ + public function getParsedDomainPart() + { + return $this->domainPart; + } + + /** + * @param string $email + */ + protected function setParts($email) + { + $parts = explode('@', $email); + $this->domainPart = $this->domainPartParser->getDomainPart(); + $this->localPart = $parts[0]; + } + + /** + * @return bool + */ + protected function hasAtToken() + { + $this->lexer->moveNext(); + $this->lexer->moveNext(); + if ($this->lexer->token['type'] === EmailLexer::S_AT) { + return false; + } + + return true; + } + + /** + * @param string $localPart + * @param string $parsedDomainPart + */ + protected function addLongEmailWarning($localPart, $parsedDomainPart) + { + if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) { + $this->warnings[EmailTooLong::CODE] = new EmailTooLong(); + } + } +} diff --git a/vendor/egulias/email-validator/src/EmailValidator.php b/vendor/egulias/email-validator/src/EmailValidator.php new file mode 100644 index 00000000..a30f21dc --- /dev/null +++ b/vendor/egulias/email-validator/src/EmailValidator.php @@ -0,0 +1,67 @@ +lexer = new EmailLexer(); + } + + /** + * @param string $email + * @param EmailValidation $emailValidation + * @return bool + */ + public function isValid($email, EmailValidation $emailValidation) + { + $isValid = $emailValidation->isValid($email, $this->lexer); + $this->warnings = $emailValidation->getWarnings(); + $this->error = $emailValidation->getError(); + + return $isValid; + } + + /** + * @return boolean + */ + public function hasWarnings() + { + return !empty($this->warnings); + } + + /** + * @return array + */ + public function getWarnings() + { + return $this->warnings; + } + + /** + * @return InvalidEmail|null + */ + public function getError() + { + return $this->error; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Exception/AtextAfterCFWS.php b/vendor/egulias/email-validator/src/Exception/AtextAfterCFWS.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Exception/AtextAfterCFWS.php rename to vendor/egulias/email-validator/src/Exception/AtextAfterCFWS.php diff --git a/vendor/egulias/email-validator/EmailValidator/Exception/CRLFAtTheEnd.php b/vendor/egulias/email-validator/src/Exception/CRLFAtTheEnd.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Exception/CRLFAtTheEnd.php rename to vendor/egulias/email-validator/src/Exception/CRLFAtTheEnd.php diff --git a/vendor/egulias/email-validator/EmailValidator/Exception/CRLFX2.php b/vendor/egulias/email-validator/src/Exception/CRLFX2.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Exception/CRLFX2.php rename to vendor/egulias/email-validator/src/Exception/CRLFX2.php diff --git a/vendor/egulias/email-validator/EmailValidator/Exception/CRNoLF.php b/vendor/egulias/email-validator/src/Exception/CRNoLF.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Exception/CRNoLF.php rename to vendor/egulias/email-validator/src/Exception/CRNoLF.php diff --git a/vendor/egulias/email-validator/EmailValidator/Exception/CharNotAllowed.php b/vendor/egulias/email-validator/src/Exception/CharNotAllowed.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Exception/CharNotAllowed.php rename to vendor/egulias/email-validator/src/Exception/CharNotAllowed.php diff --git a/vendor/egulias/email-validator/EmailValidator/Exception/CommaInDomain.php b/vendor/egulias/email-validator/src/Exception/CommaInDomain.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Exception/CommaInDomain.php rename to vendor/egulias/email-validator/src/Exception/CommaInDomain.php diff --git a/vendor/egulias/email-validator/EmailValidator/Exception/ConsecutiveAt.php b/vendor/egulias/email-validator/src/Exception/ConsecutiveAt.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Exception/ConsecutiveAt.php rename to vendor/egulias/email-validator/src/Exception/ConsecutiveAt.php diff --git a/vendor/egulias/email-validator/EmailValidator/Exception/ConsecutiveDot.php b/vendor/egulias/email-validator/src/Exception/ConsecutiveDot.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Exception/ConsecutiveDot.php rename to vendor/egulias/email-validator/src/Exception/ConsecutiveDot.php diff --git a/vendor/egulias/email-validator/src/Exception/DomainAcceptsNoMail.php b/vendor/egulias/email-validator/src/Exception/DomainAcceptsNoMail.php new file mode 100644 index 00000000..40a99705 --- /dev/null +++ b/vendor/egulias/email-validator/src/Exception/DomainAcceptsNoMail.php @@ -0,0 +1,9 @@ +lexer->moveNext(); + + $this->performDomainStartChecks(); + + $domain = $this->doParseDomainPart(); + + $prev = $this->lexer->getPrevious(); + $length = strlen($domain); + + if ($prev['type'] === EmailLexer::S_DOT) { + throw new DotAtEnd(); + } + if ($prev['type'] === EmailLexer::S_HYPHEN) { + throw new DomainHyphened(); + } + if ($length > self::DOMAIN_MAX_LENGTH) { + $this->warnings[DomainTooLong::CODE] = new DomainTooLong(); + } + if ($prev['type'] === EmailLexer::S_CR) { + throw new CRLFAtTheEnd(); + } + $this->domainPart = $domain; + } + + private function performDomainStartChecks() + { + $this->checkInvalidTokensAfterAT(); + $this->checkEmptyDomain(); + + if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { + $this->warnings[DeprecatedComment::CODE] = new DeprecatedComment(); + $this->parseDomainComments(); + } + } + + private function checkEmptyDomain() + { + $thereIsNoDomain = $this->lexer->token['type'] === EmailLexer::S_EMPTY || + ($this->lexer->token['type'] === EmailLexer::S_SP && + !$this->lexer->isNextToken(EmailLexer::GENERIC)); + + if ($thereIsNoDomain) { + throw new NoDomainPart(); + } + } + + private function checkInvalidTokensAfterAT() + { + if ($this->lexer->token['type'] === EmailLexer::S_DOT) { + throw new DotAtStart(); + } + if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN) { + throw new DomainHyphened(); + } + } + + /** + * @return string + */ + public function getDomainPart() + { + return $this->domainPart; + } + + /** + * @param string $addressLiteral + * @param int $maxGroups + */ + public function checkIPV6Tag($addressLiteral, $maxGroups = 8) + { + $prev = $this->lexer->getPrevious(); + if ($prev['type'] === EmailLexer::S_COLON) { + $this->warnings[IPV6ColonEnd::CODE] = new IPV6ColonEnd(); + } + + $IPv6 = substr($addressLiteral, 5); + //Daniel Marschall's new IPv6 testing strategy + $matchesIP = explode(':', $IPv6); + $groupCount = count($matchesIP); + $colons = strpos($IPv6, '::'); + + if (count(preg_grep('/^[0-9A-Fa-f]{0,4}$/', $matchesIP, PREG_GREP_INVERT)) !== 0) { + $this->warnings[IPV6BadChar::CODE] = new IPV6BadChar(); + } + + if ($colons === false) { + // We need exactly the right number of groups + if ($groupCount !== $maxGroups) { + $this->warnings[IPV6GroupCount::CODE] = new IPV6GroupCount(); + } + return; + } + + if ($colons !== strrpos($IPv6, '::')) { + $this->warnings[IPV6DoubleColon::CODE] = new IPV6DoubleColon(); + return; + } + + if ($colons === 0 || $colons === (strlen($IPv6) - 2)) { + // RFC 4291 allows :: at the start or end of an address + //with 7 other groups in addition + ++$maxGroups; + } + + if ($groupCount > $maxGroups) { + $this->warnings[IPV6MaxGroups::CODE] = new IPV6MaxGroups(); + } elseif ($groupCount === $maxGroups) { + $this->warnings[IPV6Deprecated::CODE] = new IPV6Deprecated(); + } + } + + /** + * @return string + */ + protected function doParseDomainPart() + { + $domain = ''; + $label = ''; + $openedParenthesis = 0; + do { + $prev = $this->lexer->getPrevious(); + + $this->checkNotAllowedChars($this->lexer->token); + + if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { + $this->parseComments(); + $openedParenthesis += $this->getOpenedParenthesis(); + $this->lexer->moveNext(); + $tmpPrev = $this->lexer->getPrevious(); + if ($tmpPrev['type'] === EmailLexer::S_CLOSEPARENTHESIS) { + $openedParenthesis--; + } + } + if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { + if ($openedParenthesis === 0) { + throw new UnopenedComment(); + } else { + $openedParenthesis--; + } + } + + $this->checkConsecutiveDots(); + $this->checkDomainPartExceptions($prev); + + if ($this->hasBrackets()) { + $this->parseDomainLiteral(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_DOT) { + $this->checkLabelLength($label); + $label = ''; + } else { + $label .= $this->lexer->token['value']; + } + + if ($this->isFWS()) { + $this->parseFWS(); + } + + $domain .= $this->lexer->token['value']; + $this->lexer->moveNext(); + if ($this->lexer->token['type'] === EmailLexer::S_SP) { + throw new CharNotAllowed(); + } + } while (null !== $this->lexer->token['type']); + + $this->checkLabelLength($label); + + return $domain; + } + + private function checkNotAllowedChars(array $token) + { + $notAllowed = [EmailLexer::S_BACKSLASH => true, EmailLexer::S_SLASH=> true]; + if (isset($notAllowed[$token['type']])) { + throw new CharNotAllowed(); + } + } + + /** + * @return string|false + */ + protected function parseDomainLiteral() + { + if ($this->lexer->isNextToken(EmailLexer::S_COLON)) { + $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); + } + if ($this->lexer->isNextToken(EmailLexer::S_IPV6TAG)) { + $lexer = clone $this->lexer; + $lexer->moveNext(); + if ($lexer->isNextToken(EmailLexer::S_DOUBLECOLON)) { + $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); + } + } + + return $this->doParseDomainLiteral(); + } + + /** + * @return string|false + */ + protected function doParseDomainLiteral() + { + $IPv6TAG = false; + $addressLiteral = ''; + do { + if ($this->lexer->token['type'] === EmailLexer::C_NUL) { + throw new ExpectingDTEXT(); + } + + if ($this->lexer->token['type'] === EmailLexer::INVALID || + $this->lexer->token['type'] === EmailLexer::C_DEL || + $this->lexer->token['type'] === EmailLexer::S_LF + ) { + $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); + } + + if ($this->lexer->isNextTokenAny(array(EmailLexer::S_OPENQBRACKET, EmailLexer::S_OPENBRACKET))) { + throw new ExpectingDTEXT(); + } + + if ($this->lexer->isNextTokenAny( + array(EmailLexer::S_HTAB, EmailLexer::S_SP, $this->lexer->token['type'] === EmailLexer::CRLF) + )) { + $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); + $this->parseFWS(); + } + + if ($this->lexer->isNextToken(EmailLexer::S_CR)) { + throw new CRNoLF(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH) { + $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); + $addressLiteral .= $this->lexer->token['value']; + $this->lexer->moveNext(); + $this->validateQuotedPair(); + } + if ($this->lexer->token['type'] === EmailLexer::S_IPV6TAG) { + $IPv6TAG = true; + } + if ($this->lexer->token['type'] === EmailLexer::S_CLOSEQBRACKET) { + break; + } + + $addressLiteral .= $this->lexer->token['value']; + + } while ($this->lexer->moveNext()); + + $addressLiteral = str_replace('[', '', $addressLiteral); + $addressLiteral = $this->checkIPV4Tag($addressLiteral); + + if (false === $addressLiteral) { + return $addressLiteral; + } + + if (!$IPv6TAG) { + $this->warnings[DomainLiteral::CODE] = new DomainLiteral(); + return $addressLiteral; + } + + $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); + + $this->checkIPV6Tag($addressLiteral); + + return $addressLiteral; + } + + /** + * @param string $addressLiteral + * + * @return string|false + */ + protected function checkIPV4Tag($addressLiteral) + { + $matchesIP = array(); + + // Extract IPv4 part from the end of the address-literal (if there is one) + if (preg_match( + '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/', + $addressLiteral, + $matchesIP + ) > 0 + ) { + $index = strrpos($addressLiteral, $matchesIP[0]); + if ($index === 0) { + $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); + return false; + } + // Convert IPv4 part to IPv6 format for further testing + $addressLiteral = substr($addressLiteral, 0, (int) $index) . '0:0'; + } + + return $addressLiteral; + } + + protected function checkDomainPartExceptions(array $prev) + { + $invalidDomainTokens = array( + EmailLexer::S_DQUOTE => true, + EmailLexer::S_SQUOTE => true, + EmailLexer::S_BACKTICK => true, + EmailLexer::S_SEMICOLON => true, + EmailLexer::S_GREATERTHAN => true, + EmailLexer::S_LOWERTHAN => true, + ); + + if (isset($invalidDomainTokens[$this->lexer->token['type']])) { + throw new ExpectingATEXT(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_COMMA) { + throw new CommaInDomain(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_AT) { + throw new ConsecutiveAt(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_OPENQBRACKET && $prev['type'] !== EmailLexer::S_AT) { + throw new ExpectingATEXT(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN && $this->lexer->isNextToken(EmailLexer::S_DOT)) { + throw new DomainHyphened(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH + && $this->lexer->isNextToken(EmailLexer::GENERIC)) { + throw new ExpectingATEXT(); + } + } + + /** + * @return bool + */ + protected function hasBrackets() + { + if ($this->lexer->token['type'] !== EmailLexer::S_OPENBRACKET) { + return false; + } + + try { + $this->lexer->find(EmailLexer::S_CLOSEBRACKET); + } catch (\RuntimeException $e) { + throw new ExpectingDomainLiteralClose(); + } + + return true; + } + + /** + * @param string $label + */ + protected function checkLabelLength($label) + { + if ($this->isLabelTooLong($label)) { + $this->warnings[LabelTooLong::CODE] = new LabelTooLong(); + } + } + + /** + * @param string $label + * @return bool + */ + private function isLabelTooLong($label) + { + if (preg_match('/[^\x00-\x7F]/', $label)) { + idn_to_ascii($label, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46, $idnaInfo); + + return (bool) ($idnaInfo['errors'] & IDNA_ERROR_LABEL_TOO_LONG); + } + + return strlen($label) > self::LABEL_MAX_LENGTH; + } + + protected function parseDomainComments() + { + $this->isUnclosedComment(); + while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { + $this->warnEscaping(); + $this->lexer->moveNext(); + } + + $this->lexer->moveNext(); + if ($this->lexer->isNextToken(EmailLexer::S_DOT)) { + throw new ExpectingATEXT(); + } + } + + protected function addTLDWarnings() + { + if ($this->warnings[DomainLiteral::CODE]) { + $this->warnings[TLD::CODE] = new TLD(); + } + } +} diff --git a/vendor/egulias/email-validator/src/Parser/LocalPart.php b/vendor/egulias/email-validator/src/Parser/LocalPart.php new file mode 100644 index 00000000..3c21f34a --- /dev/null +++ b/vendor/egulias/email-validator/src/Parser/LocalPart.php @@ -0,0 +1,145 @@ +lexer->token['type'] !== EmailLexer::S_AT && null !== $this->lexer->token['type']) { + if ($this->lexer->token['type'] === EmailLexer::S_DOT && null === $this->lexer->getPrevious()['type']) { + throw new DotAtStart(); + } + + $closingQuote = $this->checkDQUOTE($closingQuote); + if ($closingQuote && $parseDQuote) { + $parseDQuote = $this->parseDoubleQuote(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { + $this->parseComments(); + $openedParenthesis += $this->getOpenedParenthesis(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { + if ($openedParenthesis === 0) { + throw new UnopenedComment(); + } + + $openedParenthesis--; + } + + $this->checkConsecutiveDots(); + + if ($this->lexer->token['type'] === EmailLexer::S_DOT && + $this->lexer->isNextToken(EmailLexer::S_AT) + ) { + throw new DotAtEnd(); + } + + $this->warnEscaping(); + $this->isInvalidToken($this->lexer->token, $closingQuote); + + if ($this->isFWS()) { + $this->parseFWS(); + } + + $totalLength += strlen($this->lexer->token['value']); + $this->lexer->moveNext(); + } + + if ($totalLength > LocalTooLong::LOCAL_PART_LENGTH) { + $this->warnings[LocalTooLong::CODE] = new LocalTooLong(); + } + } + + /** + * @return bool + */ + protected function parseDoubleQuote() + { + $parseAgain = true; + $special = array( + EmailLexer::S_CR => true, + EmailLexer::S_HTAB => true, + EmailLexer::S_LF => true + ); + + $invalid = array( + EmailLexer::C_NUL => true, + EmailLexer::S_HTAB => true, + EmailLexer::S_CR => true, + EmailLexer::S_LF => true + ); + $setSpecialsWarning = true; + + $this->lexer->moveNext(); + + while ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE && null !== $this->lexer->token['type']) { + $parseAgain = false; + if (isset($special[$this->lexer->token['type']]) && $setSpecialsWarning) { + $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); + $setSpecialsWarning = false; + } + if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH && $this->lexer->isNextToken(EmailLexer::S_DQUOTE)) { + $this->lexer->moveNext(); + } + + $this->lexer->moveNext(); + + if (!$this->escaped() && isset($invalid[$this->lexer->token['type']])) { + throw new ExpectingATEXT(); + } + } + + $prev = $this->lexer->getPrevious(); + + if ($prev['type'] === EmailLexer::S_BACKSLASH) { + if (!$this->checkDQUOTE(false)) { + throw new UnclosedQuotedString(); + } + } + + if (!$this->lexer->isNextToken(EmailLexer::S_AT) && $prev['type'] !== EmailLexer::S_BACKSLASH) { + throw new ExpectingAT(); + } + + return $parseAgain; + } + + /** + * @param bool $closingQuote + */ + protected function isInvalidToken(array $token, $closingQuote) + { + $forbidden = array( + EmailLexer::S_COMMA, + EmailLexer::S_CLOSEBRACKET, + EmailLexer::S_OPENBRACKET, + EmailLexer::S_GREATERTHAN, + EmailLexer::S_LOWERTHAN, + EmailLexer::S_COLON, + EmailLexer::S_SEMICOLON, + EmailLexer::INVALID + ); + + if (in_array($token['type'], $forbidden) && !$closingQuote) { + throw new ExpectingATEXT(); + } + } +} diff --git a/vendor/egulias/email-validator/src/Parser/Parser.php b/vendor/egulias/email-validator/src/Parser/Parser.php new file mode 100644 index 00000000..ccdc9388 --- /dev/null +++ b/vendor/egulias/email-validator/src/Parser/Parser.php @@ -0,0 +1,249 @@ +lexer = $lexer; + } + + /** + * @return \Egulias\EmailValidator\Warning\Warning[] + */ + public function getWarnings() + { + return $this->warnings; + } + + /** + * @param string $str + */ + abstract public function parse($str); + + /** @return int */ + public function getOpenedParenthesis() + { + return $this->openedParenthesis; + } + + /** + * validateQuotedPair + */ + protected function validateQuotedPair() + { + if (!($this->lexer->token['type'] === EmailLexer::INVALID + || $this->lexer->token['type'] === EmailLexer::C_DEL)) { + throw new ExpectingQPair(); + } + + $this->warnings[QuotedPart::CODE] = + new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); + } + + protected function parseComments() + { + $this->openedParenthesis = 1; + $this->isUnclosedComment(); + $this->warnings[Comment::CODE] = new Comment(); + while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { + if ($this->lexer->isNextToken(EmailLexer::S_OPENPARENTHESIS)) { + $this->openedParenthesis++; + } + $this->warnEscaping(); + $this->lexer->moveNext(); + } + + $this->lexer->moveNext(); + if ($this->lexer->isNextTokenAny(array(EmailLexer::GENERIC, EmailLexer::S_EMPTY))) { + throw new ExpectingATEXT(); + } + + if ($this->lexer->isNextToken(EmailLexer::S_AT)) { + $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); + } + } + + /** + * @return bool + */ + protected function isUnclosedComment() + { + try { + $this->lexer->find(EmailLexer::S_CLOSEPARENTHESIS); + return true; + } catch (\RuntimeException $e) { + throw new UnclosedComment(); + } + } + + protected function parseFWS() + { + $previous = $this->lexer->getPrevious(); + + $this->checkCRLFInFWS(); + + if ($this->lexer->token['type'] === EmailLexer::S_CR) { + throw new CRNoLF(); + } + + if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] !== EmailLexer::S_AT) { + throw new AtextAfterCFWS(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_LF || $this->lexer->token['type'] === EmailLexer::C_NUL) { + throw new ExpectingCTEXT(); + } + + if ($this->lexer->isNextToken(EmailLexer::S_AT) || $previous['type'] === EmailLexer::S_AT) { + $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); + } else { + $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); + } + } + + protected function checkConsecutiveDots() + { + if ($this->lexer->token['type'] === EmailLexer::S_DOT && $this->lexer->isNextToken(EmailLexer::S_DOT)) { + throw new ConsecutiveDot(); + } + } + + /** + * @return bool + */ + protected function isFWS() + { + if ($this->escaped()) { + return false; + } + + if ($this->lexer->token['type'] === EmailLexer::S_SP || + $this->lexer->token['type'] === EmailLexer::S_HTAB || + $this->lexer->token['type'] === EmailLexer::S_CR || + $this->lexer->token['type'] === EmailLexer::S_LF || + $this->lexer->token['type'] === EmailLexer::CRLF + ) { + return true; + } + + return false; + } + + /** + * @return bool + */ + protected function escaped() + { + $previous = $this->lexer->getPrevious(); + + if ($previous && $previous['type'] === EmailLexer::S_BACKSLASH + && + $this->lexer->token['type'] !== EmailLexer::GENERIC + ) { + return true; + } + + return false; + } + + /** + * @return bool + */ + protected function warnEscaping() + { + if ($this->lexer->token['type'] !== EmailLexer::S_BACKSLASH) { + return false; + } + + if ($this->lexer->isNextToken(EmailLexer::GENERIC)) { + throw new ExpectingATEXT(); + } + + if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB, EmailLexer::C_DEL))) { + return false; + } + + $this->warnings[QuotedPart::CODE] = + new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); + return true; + + } + + /** + * @param bool $hasClosingQuote + * + * @return bool + */ + protected function checkDQUOTE($hasClosingQuote) + { + if ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE) { + return $hasClosingQuote; + } + if ($hasClosingQuote) { + return $hasClosingQuote; + } + $previous = $this->lexer->getPrevious(); + if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] === EmailLexer::GENERIC) { + throw new ExpectingATEXT(); + } + + try { + $this->lexer->find(EmailLexer::S_DQUOTE); + $hasClosingQuote = true; + } catch (\Exception $e) { + throw new UnclosedQuotedString(); + } + $this->warnings[QuotedString::CODE] = new QuotedString($previous['value'], $this->lexer->token['value']); + + return $hasClosingQuote; + } + + protected function checkCRLFInFWS() + { + if ($this->lexer->token['type'] !== EmailLexer::CRLF) { + return; + } + + if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { + throw new CRLFX2(); + } + + if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { + throw new CRLFAtTheEnd(); + } + } +} diff --git a/vendor/egulias/email-validator/src/Validation/DNSCheckValidation.php b/vendor/egulias/email-validator/src/Validation/DNSCheckValidation.php new file mode 100644 index 00000000..491082a5 --- /dev/null +++ b/vendor/egulias/email-validator/src/Validation/DNSCheckValidation.php @@ -0,0 +1,166 @@ +error = new LocalOrReservedDomain(); + return false; + } + + return $this->checkDns($host); + } + + public function getError() + { + return $this->error; + } + + public function getWarnings() + { + return $this->warnings; + } + + /** + * @param string $host + * + * @return bool + */ + protected function checkDns($host) + { + $variant = INTL_IDNA_VARIANT_UTS46; + + $host = rtrim(idn_to_ascii($host, IDNA_DEFAULT, $variant), '.') . '.'; + + return $this->validateDnsRecords($host); + } + + + /** + * Validate the DNS records for given host. + * + * @param string $host A set of DNS records in the format returned by dns_get_record. + * + * @return bool True on success. + */ + private function validateDnsRecords($host) + { + // Get all MX, A and AAAA DNS records for host + // Using @ as workaround to fix https://bugs.php.net/bug.php?id=73149 + $dnsRecords = @dns_get_record($host, DNS_MX + DNS_A + DNS_AAAA); + + + // No MX, A or AAAA DNS records + if (empty($dnsRecords)) { + $this->error = new NoDNSRecord(); + return false; + } + + // For each DNS record + foreach ($dnsRecords as $dnsRecord) { + if (!$this->validateMXRecord($dnsRecord)) { + return false; + } + } + + // No MX records (fallback to A or AAAA records) + if (empty($this->mxRecords)) { + $this->warnings[NoDNSMXRecord::CODE] = new NoDNSMXRecord(); + } + + return true; + } + + /** + * Validate an MX record + * + * @param array $dnsRecord Given DNS record. + * + * @return bool True if valid. + */ + private function validateMxRecord($dnsRecord) + { + if ($dnsRecord['type'] !== 'MX') { + return true; + } + + // "Null MX" record indicates the domain accepts no mail (https://tools.ietf.org/html/rfc7505) + if (empty($dnsRecord['target']) || $dnsRecord['target'] === '.') { + $this->error = new DomainAcceptsNoMail(); + return false; + } + + $this->mxRecords[] = $dnsRecord; + + return true; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/EmailValidation.php b/vendor/egulias/email-validator/src/Validation/EmailValidation.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Validation/EmailValidation.php rename to vendor/egulias/email-validator/src/Validation/EmailValidation.php diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/Error/RFCWarnings.php b/vendor/egulias/email-validator/src/Validation/Error/RFCWarnings.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Validation/Error/RFCWarnings.php rename to vendor/egulias/email-validator/src/Validation/Error/RFCWarnings.php diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/Error/SpoofEmail.php b/vendor/egulias/email-validator/src/Validation/Error/SpoofEmail.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Validation/Error/SpoofEmail.php rename to vendor/egulias/email-validator/src/Validation/Error/SpoofEmail.php diff --git a/vendor/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php b/vendor/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php new file mode 100644 index 00000000..ee7c41aa --- /dev/null +++ b/vendor/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php @@ -0,0 +1,16 @@ +errors = $errors; + parent::__construct(); + } + + /** + * @return InvalidEmail[] + */ + public function getErrors() + { + return $this->errors; + } +} diff --git a/vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php b/vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php new file mode 100644 index 00000000..feb22402 --- /dev/null +++ b/vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php @@ -0,0 +1,124 @@ +validations = $validations; + $this->mode = $mode; + } + + /** + * {@inheritdoc} + */ + public function isValid($email, EmailLexer $emailLexer) + { + $result = true; + $errors = []; + foreach ($this->validations as $validation) { + $emailLexer->reset(); + $validationResult = $validation->isValid($email, $emailLexer); + $result = $result && $validationResult; + $this->warnings = array_merge($this->warnings, $validation->getWarnings()); + $errors = $this->addNewError($validation->getError(), $errors); + + if ($this->shouldStop($result)) { + break; + } + } + + if (!empty($errors)) { + $this->error = new MultipleErrors($errors); + } + + return $result; + } + + /** + * @param \Egulias\EmailValidator\Exception\InvalidEmail|null $possibleError + * @param \Egulias\EmailValidator\Exception\InvalidEmail[] $errors + * + * @return \Egulias\EmailValidator\Exception\InvalidEmail[] + */ + private function addNewError($possibleError, array $errors) + { + if (null !== $possibleError) { + $errors[] = $possibleError; + } + + return $errors; + } + + /** + * @param bool $result + * + * @return bool + */ + private function shouldStop($result) + { + return !$result && $this->mode === self::STOP_ON_ERROR; + } + + /** + * Returns the validation errors. + * + * @return MultipleErrors|null + */ + public function getError() + { + return $this->error; + } + + /** + * {@inheritdoc} + */ + public function getWarnings() + { + return $this->warnings; + } +} diff --git a/vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php b/vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php new file mode 100644 index 00000000..6b31e544 --- /dev/null +++ b/vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php @@ -0,0 +1,41 @@ +getWarnings())) { + return true; + } + + $this->error = new RFCWarnings(); + + return false; + } + + /** + * {@inheritdoc} + */ + public function getError() + { + return $this->error ?: parent::getError(); + } +} diff --git a/vendor/egulias/email-validator/src/Validation/RFCValidation.php b/vendor/egulias/email-validator/src/Validation/RFCValidation.php new file mode 100644 index 00000000..8781e0b6 --- /dev/null +++ b/vendor/egulias/email-validator/src/Validation/RFCValidation.php @@ -0,0 +1,49 @@ +parser = new EmailParser($emailLexer); + try { + $this->parser->parse((string)$email); + } catch (InvalidEmail $invalid) { + $this->error = $invalid; + return false; + } + + $this->warnings = $this->parser->getWarnings(); + return true; + } + + public function getError() + { + return $this->error; + } + + public function getWarnings() + { + return $this->warnings; + } +} diff --git a/vendor/egulias/email-validator/src/Validation/SpoofCheckValidation.php b/vendor/egulias/email-validator/src/Validation/SpoofCheckValidation.php new file mode 100644 index 00000000..e10bfabd --- /dev/null +++ b/vendor/egulias/email-validator/src/Validation/SpoofCheckValidation.php @@ -0,0 +1,51 @@ +setChecks(Spoofchecker::SINGLE_SCRIPT); + + if ($checker->isSuspicious($email)) { + $this->error = new SpoofEmail(); + } + + return $this->error === null; + } + + /** + * @return InvalidEmail|null + */ + public function getError() + { + return $this->error; + } + + public function getWarnings() + { + return []; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/AddressLiteral.php b/vendor/egulias/email-validator/src/Warning/AddressLiteral.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/AddressLiteral.php rename to vendor/egulias/email-validator/src/Warning/AddressLiteral.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/CFWSNearAt.php b/vendor/egulias/email-validator/src/Warning/CFWSNearAt.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/CFWSNearAt.php rename to vendor/egulias/email-validator/src/Warning/CFWSNearAt.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/CFWSWithFWS.php b/vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/CFWSWithFWS.php rename to vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/Comment.php b/vendor/egulias/email-validator/src/Warning/Comment.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/Comment.php rename to vendor/egulias/email-validator/src/Warning/Comment.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/DeprecatedComment.php b/vendor/egulias/email-validator/src/Warning/DeprecatedComment.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/DeprecatedComment.php rename to vendor/egulias/email-validator/src/Warning/DeprecatedComment.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/DomainLiteral.php b/vendor/egulias/email-validator/src/Warning/DomainLiteral.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/DomainLiteral.php rename to vendor/egulias/email-validator/src/Warning/DomainLiteral.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/DomainTooLong.php b/vendor/egulias/email-validator/src/Warning/DomainTooLong.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/DomainTooLong.php rename to vendor/egulias/email-validator/src/Warning/DomainTooLong.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/EmailTooLong.php b/vendor/egulias/email-validator/src/Warning/EmailTooLong.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/EmailTooLong.php rename to vendor/egulias/email-validator/src/Warning/EmailTooLong.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6BadChar.php b/vendor/egulias/email-validator/src/Warning/IPV6BadChar.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/IPV6BadChar.php rename to vendor/egulias/email-validator/src/Warning/IPV6BadChar.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonEnd.php b/vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonEnd.php rename to vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonStart.php b/vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonStart.php rename to vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6Deprecated.php b/vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/IPV6Deprecated.php rename to vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6DoubleColon.php b/vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/IPV6DoubleColon.php rename to vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6GroupCount.php b/vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/IPV6GroupCount.php rename to vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6MaxGroups.php b/vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/IPV6MaxGroups.php rename to vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/LabelTooLong.php b/vendor/egulias/email-validator/src/Warning/LabelTooLong.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/LabelTooLong.php rename to vendor/egulias/email-validator/src/Warning/LabelTooLong.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/LocalTooLong.php b/vendor/egulias/email-validator/src/Warning/LocalTooLong.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/LocalTooLong.php rename to vendor/egulias/email-validator/src/Warning/LocalTooLong.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/NoDNSMXRecord.php b/vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/NoDNSMXRecord.php rename to vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/ObsoleteDTEXT.php b/vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/ObsoleteDTEXT.php rename to vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php diff --git a/vendor/egulias/email-validator/src/Warning/QuotedPart.php b/vendor/egulias/email-validator/src/Warning/QuotedPart.php new file mode 100644 index 00000000..36a4265a --- /dev/null +++ b/vendor/egulias/email-validator/src/Warning/QuotedPart.php @@ -0,0 +1,17 @@ +message = "Deprecated Quoted String found between $prevToken and $postToken"; + } +} diff --git a/vendor/egulias/email-validator/src/Warning/QuotedString.php b/vendor/egulias/email-validator/src/Warning/QuotedString.php new file mode 100644 index 00000000..817e4e84 --- /dev/null +++ b/vendor/egulias/email-validator/src/Warning/QuotedString.php @@ -0,0 +1,17 @@ +message = "Quoted String found between $prevToken and $postToken"; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/TLD.php b/vendor/egulias/email-validator/src/Warning/TLD.php similarity index 100% rename from vendor/egulias/email-validator/EmailValidator/Warning/TLD.php rename to vendor/egulias/email-validator/src/Warning/TLD.php diff --git a/vendor/egulias/email-validator/src/Warning/Warning.php b/vendor/egulias/email-validator/src/Warning/Warning.php new file mode 100644 index 00000000..a2ee7b0d --- /dev/null +++ b/vendor/egulias/email-validator/src/Warning/Warning.php @@ -0,0 +1,47 @@ +message; + } + + /** + * @return int + */ + public function code() + { + return static::CODE; + } + + /** + * @return int + */ + public function RFCNumber() + { + return $this->rfcNumber; + } + + public function __toString() + { + return $this->message() . " rfc: " . $this->rfcNumber . "interal code: " . static::CODE; + } +} diff --git a/vendor/erusev/parsedown/LICENSE.txt b/vendor/erusev/parsedown/LICENSE.txt deleted file mode 100644 index 8e7c764d..00000000 --- a/vendor/erusev/parsedown/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2018 Emanuil Rusev, erusev.com - -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. diff --git a/vendor/erusev/parsedown/Parsedown.php b/vendor/erusev/parsedown/Parsedown.php deleted file mode 100644 index a34b44f0..00000000 --- a/vendor/erusev/parsedown/Parsedown.php +++ /dev/null @@ -1,1693 +0,0 @@ -DefinitionData = array(); - - # standardize line breaks - $text = str_replace(array("\r\n", "\r"), "\n", $text); - - # remove surrounding line breaks - $text = trim($text, "\n"); - - # split text into lines - $lines = explode("\n", $text); - - # iterate through lines to identify blocks - $markup = $this->lines($lines); - - # trim line breaks - $markup = trim($markup, "\n"); - - return $markup; - } - - # - # Setters - # - - function setBreaksEnabled($breaksEnabled) - { - $this->breaksEnabled = $breaksEnabled; - - return $this; - } - - protected $breaksEnabled; - - function setMarkupEscaped($markupEscaped) - { - $this->markupEscaped = $markupEscaped; - - return $this; - } - - protected $markupEscaped; - - function setUrlsLinked($urlsLinked) - { - $this->urlsLinked = $urlsLinked; - - return $this; - } - - protected $urlsLinked = true; - - function setSafeMode($safeMode) - { - $this->safeMode = (bool) $safeMode; - - return $this; - } - - protected $safeMode; - - protected $safeLinksWhitelist = array( - 'http://', - 'https://', - 'ftp://', - 'ftps://', - 'mailto:', - 'data:image/png;base64,', - 'data:image/gif;base64,', - 'data:image/jpeg;base64,', - 'irc:', - 'ircs:', - 'git:', - 'ssh:', - 'news:', - 'steam:', - ); - - # - # Lines - # - - protected $BlockTypes = array( - '#' => array('Header'), - '*' => array('Rule', 'List'), - '+' => array('List'), - '-' => array('SetextHeader', 'Table', 'Rule', 'List'), - '0' => array('List'), - '1' => array('List'), - '2' => array('List'), - '3' => array('List'), - '4' => array('List'), - '5' => array('List'), - '6' => array('List'), - '7' => array('List'), - '8' => array('List'), - '9' => array('List'), - ':' => array('Table'), - '<' => array('Comment', 'Markup'), - '=' => array('SetextHeader'), - '>' => array('Quote'), - '[' => array('Reference'), - '_' => array('Rule'), - '`' => array('FencedCode'), - '|' => array('Table'), - '~' => array('FencedCode'), - ); - - # ~ - - protected $unmarkedBlockTypes = array( - 'Code', - ); - - # - # Blocks - # - - protected function lines(array $lines) - { - $CurrentBlock = null; - - foreach ($lines as $line) - { - if (chop($line) === '') - { - if (isset($CurrentBlock)) - { - $CurrentBlock['interrupted'] = true; - } - - continue; - } - - if (strpos($line, "\t") !== false) - { - $parts = explode("\t", $line); - - $line = $parts[0]; - - unset($parts[0]); - - foreach ($parts as $part) - { - $shortage = 4 - mb_strlen($line, 'utf-8') % 4; - - $line .= str_repeat(' ', $shortage); - $line .= $part; - } - } - - $indent = 0; - - while (isset($line[$indent]) and $line[$indent] === ' ') - { - $indent ++; - } - - $text = $indent > 0 ? substr($line, $indent) : $line; - - # ~ - - $Line = array('body' => $line, 'indent' => $indent, 'text' => $text); - - # ~ - - if (isset($CurrentBlock['continuable'])) - { - $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock); - - if (isset($Block)) - { - $CurrentBlock = $Block; - - continue; - } - else - { - if ($this->isBlockCompletable($CurrentBlock['type'])) - { - $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); - } - } - } - - # ~ - - $marker = $text[0]; - - # ~ - - $blockTypes = $this->unmarkedBlockTypes; - - if (isset($this->BlockTypes[$marker])) - { - foreach ($this->BlockTypes[$marker] as $blockType) - { - $blockTypes []= $blockType; - } - } - - # - # ~ - - foreach ($blockTypes as $blockType) - { - $Block = $this->{'block'.$blockType}($Line, $CurrentBlock); - - if (isset($Block)) - { - $Block['type'] = $blockType; - - if ( ! isset($Block['identified'])) - { - $Blocks []= $CurrentBlock; - - $Block['identified'] = true; - } - - if ($this->isBlockContinuable($blockType)) - { - $Block['continuable'] = true; - } - - $CurrentBlock = $Block; - - continue 2; - } - } - - # ~ - - if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted'])) - { - $CurrentBlock['element']['text'] .= "\n".$text; - } - else - { - $Blocks []= $CurrentBlock; - - $CurrentBlock = $this->paragraph($Line); - - $CurrentBlock['identified'] = true; - } - } - - # ~ - - if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type'])) - { - $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); - } - - # ~ - - $Blocks []= $CurrentBlock; - - unset($Blocks[0]); - - # ~ - - $markup = ''; - - foreach ($Blocks as $Block) - { - if (isset($Block['hidden'])) - { - continue; - } - - $markup .= "\n"; - $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']); - } - - $markup .= "\n"; - - # ~ - - return $markup; - } - - protected function isBlockContinuable($Type) - { - return method_exists($this, 'block'.$Type.'Continue'); - } - - protected function isBlockCompletable($Type) - { - return method_exists($this, 'block'.$Type.'Complete'); - } - - # - # Code - - protected function blockCode($Line, $Block = null) - { - if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted'])) - { - return; - } - - if ($Line['indent'] >= 4) - { - $text = substr($Line['body'], 4); - - $Block = array( - 'element' => array( - 'name' => 'pre', - 'handler' => 'element', - 'text' => array( - 'name' => 'code', - 'text' => $text, - ), - ), - ); - - return $Block; - } - } - - protected function blockCodeContinue($Line, $Block) - { - if ($Line['indent'] >= 4) - { - if (isset($Block['interrupted'])) - { - $Block['element']['text']['text'] .= "\n"; - - unset($Block['interrupted']); - } - - $Block['element']['text']['text'] .= "\n"; - - $text = substr($Line['body'], 4); - - $Block['element']['text']['text'] .= $text; - - return $Block; - } - } - - protected function blockCodeComplete($Block) - { - $text = $Block['element']['text']['text']; - - $Block['element']['text']['text'] = $text; - - return $Block; - } - - # - # Comment - - protected function blockComment($Line) - { - if ($this->markupEscaped or $this->safeMode) - { - return; - } - - if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!') - { - $Block = array( - 'markup' => $Line['body'], - ); - - if (preg_match('/-->$/', $Line['text'])) - { - $Block['closed'] = true; - } - - return $Block; - } - } - - protected function blockCommentContinue($Line, array $Block) - { - if (isset($Block['closed'])) - { - return; - } - - $Block['markup'] .= "\n" . $Line['body']; - - if (preg_match('/-->$/', $Line['text'])) - { - $Block['closed'] = true; - } - - return $Block; - } - - # - # Fenced Code - - protected function blockFencedCode($Line) - { - if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([^`]+)?[ ]*$/', $Line['text'], $matches)) - { - $Element = array( - 'name' => 'code', - 'text' => '', - ); - - if (isset($matches[1])) - { - /** - * https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#classes - * Every HTML element may have a class attribute specified. - * The attribute, if specified, must have a value that is a set - * of space-separated tokens representing the various classes - * that the element belongs to. - * [...] - * The space characters, for the purposes of this specification, - * are U+0020 SPACE, U+0009 CHARACTER TABULATION (tab), - * U+000A LINE FEED (LF), U+000C FORM FEED (FF), and - * U+000D CARRIAGE RETURN (CR). - */ - $language = substr($matches[1], 0, strcspn($matches[1], " \t\n\f\r")); - - $class = 'language-'.$language; - - $Element['attributes'] = array( - 'class' => $class, - ); - } - - $Block = array( - 'char' => $Line['text'][0], - 'element' => array( - 'name' => 'pre', - 'handler' => 'element', - 'text' => $Element, - ), - ); - - return $Block; - } - } - - protected function blockFencedCodeContinue($Line, $Block) - { - if (isset($Block['complete'])) - { - return; - } - - if (isset($Block['interrupted'])) - { - $Block['element']['text']['text'] .= "\n"; - - unset($Block['interrupted']); - } - - if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text'])) - { - $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1); - - $Block['complete'] = true; - - return $Block; - } - - $Block['element']['text']['text'] .= "\n".$Line['body']; - - return $Block; - } - - protected function blockFencedCodeComplete($Block) - { - $text = $Block['element']['text']['text']; - - $Block['element']['text']['text'] = $text; - - return $Block; - } - - # - # Header - - protected function blockHeader($Line) - { - if (isset($Line['text'][1])) - { - $level = 1; - - while (isset($Line['text'][$level]) and $Line['text'][$level] === '#') - { - $level ++; - } - - if ($level > 6) - { - return; - } - - $text = trim($Line['text'], '# '); - - $Block = array( - 'element' => array( - 'name' => 'h' . min(6, $level), - 'text' => $text, - 'handler' => 'line', - ), - ); - - return $Block; - } - } - - # - # List - - protected function blockList($Line) - { - list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]'); - - if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches)) - { - $Block = array( - 'indent' => $Line['indent'], - 'pattern' => $pattern, - 'element' => array( - 'name' => $name, - 'handler' => 'elements', - ), - ); - - if($name === 'ol') - { - $listStart = stristr($matches[0], '.', true); - - if($listStart !== '1') - { - $Block['element']['attributes'] = array('start' => $listStart); - } - } - - $Block['li'] = array( - 'name' => 'li', - 'handler' => 'li', - 'text' => array( - $matches[2], - ), - ); - - $Block['element']['text'] []= & $Block['li']; - - return $Block; - } - } - - protected function blockListContinue($Line, array $Block) - { - if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches)) - { - if (isset($Block['interrupted'])) - { - $Block['li']['text'] []= ''; - - $Block['loose'] = true; - - unset($Block['interrupted']); - } - - unset($Block['li']); - - $text = isset($matches[1]) ? $matches[1] : ''; - - $Block['li'] = array( - 'name' => 'li', - 'handler' => 'li', - 'text' => array( - $text, - ), - ); - - $Block['element']['text'] []= & $Block['li']; - - return $Block; - } - - if ($Line['text'][0] === '[' and $this->blockReference($Line)) - { - return $Block; - } - - if ( ! isset($Block['interrupted'])) - { - $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); - - $Block['li']['text'] []= $text; - - return $Block; - } - - if ($Line['indent'] > 0) - { - $Block['li']['text'] []= ''; - - $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); - - $Block['li']['text'] []= $text; - - unset($Block['interrupted']); - - return $Block; - } - } - - protected function blockListComplete(array $Block) - { - if (isset($Block['loose'])) - { - foreach ($Block['element']['text'] as &$li) - { - if (end($li['text']) !== '') - { - $li['text'] []= ''; - } - } - } - - return $Block; - } - - # - # Quote - - protected function blockQuote($Line) - { - if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) - { - $Block = array( - 'element' => array( - 'name' => 'blockquote', - 'handler' => 'lines', - 'text' => (array) $matches[1], - ), - ); - - return $Block; - } - } - - protected function blockQuoteContinue($Line, array $Block) - { - if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) - { - if (isset($Block['interrupted'])) - { - $Block['element']['text'] []= ''; - - unset($Block['interrupted']); - } - - $Block['element']['text'] []= $matches[1]; - - return $Block; - } - - if ( ! isset($Block['interrupted'])) - { - $Block['element']['text'] []= $Line['text']; - - return $Block; - } - } - - # - # Rule - - protected function blockRule($Line) - { - if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text'])) - { - $Block = array( - 'element' => array( - 'name' => 'hr' - ), - ); - - return $Block; - } - } - - # - # Setext - - protected function blockSetextHeader($Line, array $Block = null) - { - if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) - { - return; - } - - if (chop($Line['text'], $Line['text'][0]) === '') - { - $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2'; - - return $Block; - } - } - - # - # Markup - - protected function blockMarkup($Line) - { - if ($this->markupEscaped or $this->safeMode) - { - return; - } - - if (preg_match('/^<(\w[\w-]*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches)) - { - $element = strtolower($matches[1]); - - if (in_array($element, $this->textLevelElements)) - { - return; - } - - $Block = array( - 'name' => $matches[1], - 'depth' => 0, - 'markup' => $Line['text'], - ); - - $length = strlen($matches[0]); - - $remainder = substr($Line['text'], $length); - - if (trim($remainder) === '') - { - if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) - { - $Block['closed'] = true; - - $Block['void'] = true; - } - } - else - { - if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) - { - return; - } - - if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder)) - { - $Block['closed'] = true; - } - } - - return $Block; - } - } - - protected function blockMarkupContinue($Line, array $Block) - { - if (isset($Block['closed'])) - { - return; - } - - if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open - { - $Block['depth'] ++; - } - - if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close - { - if ($Block['depth'] > 0) - { - $Block['depth'] --; - } - else - { - $Block['closed'] = true; - } - } - - if (isset($Block['interrupted'])) - { - $Block['markup'] .= "\n"; - - unset($Block['interrupted']); - } - - $Block['markup'] .= "\n".$Line['body']; - - return $Block; - } - - # - # Reference - - protected function blockReference($Line) - { - if (preg_match('/^\[(.+?)\]:[ ]*?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches)) - { - $id = strtolower($matches[1]); - - $Data = array( - 'url' => $matches[2], - 'title' => null, - ); - - if (isset($matches[3])) - { - $Data['title'] = $matches[3]; - } - - $this->DefinitionData['Reference'][$id] = $Data; - - $Block = array( - 'hidden' => true, - ); - - return $Block; - } - } - - # - # Table - - protected function blockTable($Line, array $Block = null) - { - if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) - { - return; - } - - if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '') - { - $alignments = array(); - - $divider = $Line['text']; - - $divider = trim($divider); - $divider = trim($divider, '|'); - - $dividerCells = explode('|', $divider); - - foreach ($dividerCells as $dividerCell) - { - $dividerCell = trim($dividerCell); - - if ($dividerCell === '') - { - continue; - } - - $alignment = null; - - if ($dividerCell[0] === ':') - { - $alignment = 'left'; - } - - if (substr($dividerCell, - 1) === ':') - { - $alignment = $alignment === 'left' ? 'center' : 'right'; - } - - $alignments []= $alignment; - } - - # ~ - - $HeaderElements = array(); - - $header = $Block['element']['text']; - - $header = trim($header); - $header = trim($header, '|'); - - $headerCells = explode('|', $header); - - foreach ($headerCells as $index => $headerCell) - { - $headerCell = trim($headerCell); - - $HeaderElement = array( - 'name' => 'th', - 'text' => $headerCell, - 'handler' => 'line', - ); - - if (isset($alignments[$index])) - { - $alignment = $alignments[$index]; - - $HeaderElement['attributes'] = array( - 'style' => 'text-align: '.$alignment.';', - ); - } - - $HeaderElements []= $HeaderElement; - } - - # ~ - - $Block = array( - 'alignments' => $alignments, - 'identified' => true, - 'element' => array( - 'name' => 'table', - 'handler' => 'elements', - ), - ); - - $Block['element']['text'] []= array( - 'name' => 'thead', - 'handler' => 'elements', - ); - - $Block['element']['text'] []= array( - 'name' => 'tbody', - 'handler' => 'elements', - 'text' => array(), - ); - - $Block['element']['text'][0]['text'] []= array( - 'name' => 'tr', - 'handler' => 'elements', - 'text' => $HeaderElements, - ); - - return $Block; - } - } - - protected function blockTableContinue($Line, array $Block) - { - if (isset($Block['interrupted'])) - { - return; - } - - if ($Line['text'][0] === '|' or strpos($Line['text'], '|')) - { - $Elements = array(); - - $row = $Line['text']; - - $row = trim($row); - $row = trim($row, '|'); - - preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches); - - foreach ($matches[0] as $index => $cell) - { - $cell = trim($cell); - - $Element = array( - 'name' => 'td', - 'handler' => 'line', - 'text' => $cell, - ); - - if (isset($Block['alignments'][$index])) - { - $Element['attributes'] = array( - 'style' => 'text-align: '.$Block['alignments'][$index].';', - ); - } - - $Elements []= $Element; - } - - $Element = array( - 'name' => 'tr', - 'handler' => 'elements', - 'text' => $Elements, - ); - - $Block['element']['text'][1]['text'] []= $Element; - - return $Block; - } - } - - # - # ~ - # - - protected function paragraph($Line) - { - $Block = array( - 'element' => array( - 'name' => 'p', - 'text' => $Line['text'], - 'handler' => 'line', - ), - ); - - return $Block; - } - - # - # Inline Elements - # - - protected $InlineTypes = array( - '"' => array('SpecialCharacter'), - '!' => array('Image'), - '&' => array('SpecialCharacter'), - '*' => array('Emphasis'), - ':' => array('Url'), - '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'), - '>' => array('SpecialCharacter'), - '[' => array('Link'), - '_' => array('Emphasis'), - '`' => array('Code'), - '~' => array('Strikethrough'), - '\\' => array('EscapeSequence'), - ); - - # ~ - - protected $inlineMarkerList = '!"*_&[:<>`~\\'; - - # - # ~ - # - - public function line($text, $nonNestables=array()) - { - $markup = ''; - - # $excerpt is based on the first occurrence of a marker - - while ($excerpt = strpbrk($text, $this->inlineMarkerList)) - { - $marker = $excerpt[0]; - - $markerPosition = strpos($text, $marker); - - $Excerpt = array('text' => $excerpt, 'context' => $text); - - foreach ($this->InlineTypes[$marker] as $inlineType) - { - # check to see if the current inline type is nestable in the current context - - if ( ! empty($nonNestables) and in_array($inlineType, $nonNestables)) - { - continue; - } - - $Inline = $this->{'inline'.$inlineType}($Excerpt); - - if ( ! isset($Inline)) - { - continue; - } - - # makes sure that the inline belongs to "our" marker - - if (isset($Inline['position']) and $Inline['position'] > $markerPosition) - { - continue; - } - - # sets a default inline position - - if ( ! isset($Inline['position'])) - { - $Inline['position'] = $markerPosition; - } - - # cause the new element to 'inherit' our non nestables - - foreach ($nonNestables as $non_nestable) - { - $Inline['element']['nonNestables'][] = $non_nestable; - } - - # the text that comes before the inline - $unmarkedText = substr($text, 0, $Inline['position']); - - # compile the unmarked text - $markup .= $this->unmarkedText($unmarkedText); - - # compile the inline - $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']); - - # remove the examined text - $text = substr($text, $Inline['position'] + $Inline['extent']); - - continue 2; - } - - # the marker does not belong to an inline - - $unmarkedText = substr($text, 0, $markerPosition + 1); - - $markup .= $this->unmarkedText($unmarkedText); - - $text = substr($text, $markerPosition + 1); - } - - $markup .= $this->unmarkedText($text); - - return $markup; - } - - # - # ~ - # - - protected function inlineCode($Excerpt) - { - $marker = $Excerpt['text'][0]; - - if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(? strlen($matches[0]), - 'element' => array( - 'name' => 'code', - 'text' => $text, - ), - ); - } - } - - protected function inlineEmailTag($Excerpt) - { - if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches)) - { - $url = $matches[1]; - - if ( ! isset($matches[2])) - { - $url = 'mailto:' . $url; - } - - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => 'a', - 'text' => $matches[1], - 'attributes' => array( - 'href' => $url, - ), - ), - ); - } - } - - protected function inlineEmphasis($Excerpt) - { - if ( ! isset($Excerpt['text'][1])) - { - return; - } - - $marker = $Excerpt['text'][0]; - - if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches)) - { - $emphasis = 'strong'; - } - elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches)) - { - $emphasis = 'em'; - } - else - { - return; - } - - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => $emphasis, - 'handler' => 'line', - 'text' => $matches[1], - ), - ); - } - - protected function inlineEscapeSequence($Excerpt) - { - if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters)) - { - return array( - 'markup' => $Excerpt['text'][1], - 'extent' => 2, - ); - } - } - - protected function inlineImage($Excerpt) - { - if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[') - { - return; - } - - $Excerpt['text']= substr($Excerpt['text'], 1); - - $Link = $this->inlineLink($Excerpt); - - if ($Link === null) - { - return; - } - - $Inline = array( - 'extent' => $Link['extent'] + 1, - 'element' => array( - 'name' => 'img', - 'attributes' => array( - 'src' => $Link['element']['attributes']['href'], - 'alt' => $Link['element']['text'], - ), - ), - ); - - $Inline['element']['attributes'] += $Link['element']['attributes']; - - unset($Inline['element']['attributes']['href']); - - return $Inline; - } - - protected function inlineLink($Excerpt) - { - $Element = array( - 'name' => 'a', - 'handler' => 'line', - 'nonNestables' => array('Url', 'Link'), - 'text' => null, - 'attributes' => array( - 'href' => null, - 'title' => null, - ), - ); - - $extent = 0; - - $remainder = $Excerpt['text']; - - if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches)) - { - $Element['text'] = $matches[1]; - - $extent += strlen($matches[0]); - - $remainder = substr($remainder, $extent); - } - else - { - return; - } - - if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*"|\'[^\']*\'))?\s*[)]/', $remainder, $matches)) - { - $Element['attributes']['href'] = $matches[1]; - - if (isset($matches[2])) - { - $Element['attributes']['title'] = substr($matches[2], 1, - 1); - } - - $extent += strlen($matches[0]); - } - else - { - if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches)) - { - $definition = strlen($matches[1]) ? $matches[1] : $Element['text']; - $definition = strtolower($definition); - - $extent += strlen($matches[0]); - } - else - { - $definition = strtolower($Element['text']); - } - - if ( ! isset($this->DefinitionData['Reference'][$definition])) - { - return; - } - - $Definition = $this->DefinitionData['Reference'][$definition]; - - $Element['attributes']['href'] = $Definition['url']; - $Element['attributes']['title'] = $Definition['title']; - } - - return array( - 'extent' => $extent, - 'element' => $Element, - ); - } - - protected function inlineMarkup($Excerpt) - { - if ($this->markupEscaped or $this->safeMode or strpos($Excerpt['text'], '>') === false) - { - return; - } - - if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w[\w-]*[ ]*>/s', $Excerpt['text'], $matches)) - { - return array( - 'markup' => $matches[0], - 'extent' => strlen($matches[0]), - ); - } - - if ($Excerpt['text'][1] === '!' and preg_match('/^/s', $Excerpt['text'], $matches)) - { - return array( - 'markup' => $matches[0], - 'extent' => strlen($matches[0]), - ); - } - - if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w[\w-]*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches)) - { - return array( - 'markup' => $matches[0], - 'extent' => strlen($matches[0]), - ); - } - } - - protected function inlineSpecialCharacter($Excerpt) - { - if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text'])) - { - return array( - 'markup' => '&', - 'extent' => 1, - ); - } - - $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot'); - - if (isset($SpecialCharacter[$Excerpt['text'][0]])) - { - return array( - 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';', - 'extent' => 1, - ); - } - } - - protected function inlineStrikethrough($Excerpt) - { - if ( ! isset($Excerpt['text'][1])) - { - return; - } - - if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches)) - { - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => 'del', - 'text' => $matches[1], - 'handler' => 'line', - ), - ); - } - } - - protected function inlineUrl($Excerpt) - { - if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/') - { - return; - } - - if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE)) - { - $url = $matches[0][0]; - - $Inline = array( - 'extent' => strlen($matches[0][0]), - 'position' => $matches[0][1], - 'element' => array( - 'name' => 'a', - 'text' => $url, - 'attributes' => array( - 'href' => $url, - ), - ), - ); - - return $Inline; - } - } - - protected function inlineUrlTag($Excerpt) - { - if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches)) - { - $url = $matches[1]; - - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => 'a', - 'text' => $url, - 'attributes' => array( - 'href' => $url, - ), - ), - ); - } - } - - # ~ - - protected function unmarkedText($text) - { - if ($this->breaksEnabled) - { - $text = preg_replace('/[ ]*\n/', "
\n", $text); - } - else - { - $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', "
\n", $text); - $text = str_replace(" \n", "\n", $text); - } - - return $text; - } - - # - # Handlers - # - - protected function element(array $Element) - { - if ($this->safeMode) - { - $Element = $this->sanitiseElement($Element); - } - - $markup = '<'.$Element['name']; - - if (isset($Element['attributes'])) - { - foreach ($Element['attributes'] as $name => $value) - { - if ($value === null) - { - continue; - } - - $markup .= ' '.$name.'="'.self::escape($value).'"'; - } - } - - if (isset($Element['text'])) - { - $markup .= '>'; - - if (!isset($Element['nonNestables'])) - { - $Element['nonNestables'] = array(); - } - - if (isset($Element['handler'])) - { - $markup .= $this->{$Element['handler']}($Element['text'], $Element['nonNestables']); - } - else - { - $markup .= self::escape($Element['text'], true); - } - - $markup .= ''; - } - else - { - $markup .= ' />'; - } - - return $markup; - } - - protected function elements(array $Elements) - { - $markup = ''; - - foreach ($Elements as $Element) - { - $markup .= "\n" . $this->element($Element); - } - - $markup .= "\n"; - - return $markup; - } - - # ~ - - protected function li($lines) - { - $markup = $this->lines($lines); - - $trimmedMarkup = trim($markup); - - if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '

') - { - $markup = $trimmedMarkup; - $markup = substr($markup, 3); - - $position = strpos($markup, "

"); - - $markup = substr_replace($markup, '', $position, 4); - } - - return $markup; - } - - # - # Deprecated Methods - # - - function parse($text) - { - $markup = $this->text($text); - - return $markup; - } - - protected function sanitiseElement(array $Element) - { - static $goodAttribute = '/^[a-zA-Z0-9][a-zA-Z0-9-_]*+$/'; - static $safeUrlNameToAtt = array( - 'a' => 'href', - 'img' => 'src', - ); - - if (isset($safeUrlNameToAtt[$Element['name']])) - { - $Element = $this->filterUnsafeUrlInAttribute($Element, $safeUrlNameToAtt[$Element['name']]); - } - - if ( ! empty($Element['attributes'])) - { - foreach ($Element['attributes'] as $att => $val) - { - # filter out badly parsed attribute - if ( ! preg_match($goodAttribute, $att)) - { - unset($Element['attributes'][$att]); - } - # dump onevent attribute - elseif (self::striAtStart($att, 'on')) - { - unset($Element['attributes'][$att]); - } - } - } - - return $Element; - } - - protected function filterUnsafeUrlInAttribute(array $Element, $attribute) - { - foreach ($this->safeLinksWhitelist as $scheme) - { - if (self::striAtStart($Element['attributes'][$attribute], $scheme)) - { - return $Element; - } - } - - $Element['attributes'][$attribute] = str_replace(':', '%3A', $Element['attributes'][$attribute]); - - return $Element; - } - - # - # Static Methods - # - - protected static function escape($text, $allowQuotes = false) - { - return htmlspecialchars($text, $allowQuotes ? ENT_NOQUOTES : ENT_QUOTES, 'UTF-8'); - } - - protected static function striAtStart($string, $needle) - { - $len = strlen($needle); - - if ($len > strlen($string)) - { - return false; - } - else - { - return strtolower(substr($string, 0, $len)) === strtolower($needle); - } - } - - static function instance($name = 'default') - { - if (isset(self::$instances[$name])) - { - return self::$instances[$name]; - } - - $instance = new static(); - - self::$instances[$name] = $instance; - - return $instance; - } - - private static $instances = array(); - - # - # Fields - # - - protected $DefinitionData; - - # - # Read-Only - - protected $specialCharacters = array( - '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|', - ); - - protected $StrongRegex = array( - '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s', - '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us', - ); - - protected $EmRegex = array( - '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', - '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us', - ); - - protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?'; - - protected $voidElements = array( - 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', - ); - - protected $textLevelElements = array( - 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont', - 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', - 'i', 'rp', 'del', 'code', 'strike', 'marquee', - 'q', 'rt', 'ins', 'font', 'strong', - 's', 'tt', 'kbd', 'mark', - 'u', 'xm', 'sub', 'nobr', - 'sup', 'ruby', - 'var', 'span', - 'wbr', 'time', - ); -} diff --git a/vendor/erusev/parsedown/README.md b/vendor/erusev/parsedown/README.md deleted file mode 100644 index b5d9ed2e..00000000 --- a/vendor/erusev/parsedown/README.md +++ /dev/null @@ -1,86 +0,0 @@ -> I also make [Caret](https://caret.io?ref=parsedown) - a Markdown editor for Mac and PC. - -## Parsedown - -[![Build Status](https://img.shields.io/travis/erusev/parsedown/master.svg?style=flat-square)](https://travis-ci.org/erusev/parsedown) - - -Better Markdown Parser in PHP - -[Demo](http://parsedown.org/demo) | -[Benchmarks](http://parsedown.org/speed) | -[Tests](http://parsedown.org/tests/) | -[Documentation](https://github.com/erusev/parsedown/wiki/) - -### Features - -* One File -* No Dependencies -* Super Fast -* Extensible -* [GitHub flavored](https://help.github.com/articles/github-flavored-markdown) -* Tested in 5.3 to 7.1 and in HHVM -* [Markdown Extra extension](https://github.com/erusev/parsedown-extra) - -### Installation - -Include `Parsedown.php` or install [the composer package](https://packagist.org/packages/erusev/parsedown). - -### Example - -``` php -$Parsedown = new Parsedown(); - -echo $Parsedown->text('Hello _Parsedown_!'); # prints:

Hello Parsedown!

-``` - -More examples in [the wiki](https://github.com/erusev/parsedown/wiki/) and in [this video tutorial](http://youtu.be/wYZBY8DEikI). - -### Security - -Parsedown is capable of escaping user-input within the HTML that it generates. Additionally Parsedown will apply sanitisation to additional scripting vectors (such as scripting link destinations) that are introduced by the markdown syntax itself. - -To tell Parsedown that it is processing untrusted user-input, use the following: -```php -$parsedown = new Parsedown; -$parsedown->setSafeMode(true); -``` - -If instead, you wish to allow HTML within untrusted user-input, but still want output to be free from XSS it is recommended that you make use of a HTML sanitiser that allows HTML tags to be whitelisted, like [HTML Purifier](http://htmlpurifier.org/). - -In both cases you should strongly consider employing defence-in-depth measures, like [deploying a Content-Security-Policy](https://scotthelme.co.uk/content-security-policy-an-introduction/) (a browser security feature) so that your page is likely to be safe even if an attacker finds a vulnerability in one of the first lines of defence above. - -#### Security of Parsedown Extensions - -Safe mode does not necessarily yield safe results when using extensions to Parsedown. Extensions should be evaluated on their own to determine their specific safety against XSS. - -### Escaping HTML -> ⚠️  **WARNING:** This method isn't safe from XSS! - -If you wish to escape HTML **in trusted input**, you can use the following: -```php -$parsedown = new Parsedown; -$parsedown->setMarkupEscaped(true); -``` - -Beware that this still allows users to insert unsafe scripting vectors, such as links like `[xss](javascript:alert%281%29)`. - -### Questions - -**How does Parsedown work?** - -It tries to read Markdown like a human. First, it looks at the lines. It’s interested in how the lines start. This helps it recognise blocks. It knows, for example, that if a line starts with a `-` then perhaps it belongs to a list. Once it recognises the blocks, it continues to the content. As it reads, it watches out for special characters. This helps it recognise inline elements (or inlines). - -We call this approach "line based". We believe that Parsedown is the first Markdown parser to use it. Since the release of Parsedown, other developers have used the same approach to develop other Markdown parsers in PHP and in other languages. - -**Is it compliant with CommonMark?** - -It passes most of the CommonMark tests. Most of the tests that don't pass deal with cases that are quite uncommon. Still, as CommonMark matures, compliance should improve. - -**Who uses it?** - -[Laravel Framework](https://laravel.com/), [Bolt CMS](http://bolt.cm/), [Grav CMS](http://getgrav.org/), [Herbie CMS](http://www.getherbie.org/), [Kirby CMS](http://getkirby.com/), [October CMS](http://octobercms.com/), [Pico CMS](http://picocms.org), [Statamic CMS](http://www.statamic.com/), [phpDocumentor](http://www.phpdoc.org/), [RaspberryPi.org](http://www.raspberrypi.org/), [Symfony demo](https://github.com/symfony/symfony-demo) and [more](https://packagist.org/packages/erusev/parsedown/dependents). - -**How can I help?** - -Use it, star it, share it and if you feel generous, [donate](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=528P3NZQMP8N2). diff --git a/vendor/erusev/parsedown/composer.json b/vendor/erusev/parsedown/composer.json deleted file mode 100644 index f8b40f8c..00000000 --- a/vendor/erusev/parsedown/composer.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "erusev/parsedown", - "description": "Parser for Markdown.", - "keywords": ["markdown", "parser"], - "homepage": "http://parsedown.org", - "type": "library", - "license": "MIT", - "authors": [ - { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" - } - ], - "require": { - "php": ">=5.3.0", - "ext-mbstring": "*" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35" - }, - "autoload": { - "psr-0": {"Parsedown": ""} - }, - "autoload-dev": { - "psr-0": { - "TestParsedown": "test/", - "ParsedownTest": "test/", - "CommonMarkTest": "test/", - "CommonMarkTestWeak": "test/" - } - } -} diff --git a/vendor/fideloper/proxy/composer.json b/vendor/fideloper/proxy/composer.json index 136877d9..a42061f7 100755 --- a/vendor/fideloper/proxy/composer.json +++ b/vendor/fideloper/proxy/composer.json @@ -11,11 +11,11 @@ ], "require": { "php": ">=5.4.0", - "illuminate/contracts": "~5.0" + "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0" }, "require-dev": { - "illuminate/http": "~5.6", - "mockery/mockery": "~1.0", + "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0", + "mockery/mockery": "^1.0", "phpunit/phpunit": "^6.0" }, "autoload": { diff --git a/vendor/fideloper/proxy/config/trustedproxy.php b/vendor/fideloper/proxy/config/trustedproxy.php index e242b0da..e618ae24 100644 --- a/vendor/fideloper/proxy/config/trustedproxy.php +++ b/vendor/fideloper/proxy/config/trustedproxy.php @@ -32,9 +32,9 @@ return [ /* * Which headers to use to detect proxy related data (For, Host, Proto, Port) - * + * * Options include: - * + * * - Illuminate\Http\Request::HEADER_X_FORWARDED_ALL (use all x-forwarded-* headers to establish trust) * - Illuminate\Http\Request::HEADER_FORWARDED (use the FORWARDED header to establish trust) * - Illuminate\Http\Request::HEADER_X_FORWARDED_AWS_ELB (If you are using AWS Elastic Load Balancer) @@ -42,7 +42,7 @@ return [ * - 'HEADER_X_FORWARDED_ALL' (use all x-forwarded-* headers to establish trust) * - 'HEADER_FORWARDED' (use the FORWARDED header to establish trust) * - 'HEADER_X_FORWARDED_AWS_ELB' (If you are using AWS Elastic Load Balancer) - * + * * @link https://symfony.com/doc/current/deployment/proxies.html */ 'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL, diff --git a/vendor/fideloper/proxy/src/TrustProxies.php b/vendor/fideloper/proxy/src/TrustProxies.php index b8ded6cc..79c26153 100644 --- a/vendor/fideloper/proxy/src/TrustProxies.php +++ b/vendor/fideloper/proxy/src/TrustProxies.php @@ -119,11 +119,12 @@ class TrustProxies case Request::HEADER_FORWARDED: return Request::HEADER_FORWARDED; break; - default: + case 'HEADER_X_FORWARDED_ALL': + case Request::HEADER_X_FORWARDED_ALL: return Request::HEADER_X_FORWARDED_ALL; + break; } - // Should never reach this point return $headers; } } diff --git a/vendor/filp/whoops/.github/FUNDING.yml b/vendor/filp/whoops/.github/FUNDING.yml new file mode 100644 index 00000000..74f6e857 --- /dev/null +++ b/vendor/filp/whoops/.github/FUNDING.yml @@ -0,0 +1 @@ +github: denis-sokolov diff --git a/vendor/filp/whoops/.github/workflows/tests.yml b/vendor/filp/whoops/.github/workflows/tests.yml new file mode 100644 index 00000000..8f07dd5a --- /dev/null +++ b/vendor/filp/whoops/.github/workflows/tests.yml @@ -0,0 +1,56 @@ +name: Tests + +on: + push: + pull_request: + +jobs: + tests: + name: PHP ${{ matrix.php }} + runs-on: ubuntu-20.04 + + strategy: + matrix: + php: ['5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1'] + + steps: + - name: Checkout Code + uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + tools: composer:v2 + coverage: none + env: + update: true + + - name: Setup Problem Matchers + run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" + + - name: Fix PHPUnit Version PHP < 7.4 + uses: nick-invision/retry@v1 + with: + timeout_minutes: 5 + max_attempts: 5 + command: composer require "phpunit/phpunit:^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8" --dev --no-update --no-interaction + if: "matrix.php < 7.4" + + - name: Fix PHPUnit Version PHP >= 7.4 + uses: nick-invision/retry@v1 + with: + timeout_minutes: 5 + max_attempts: 5 + command: composer require "phpunit/phpunit:^9.3.3" --dev --no-update --no-interaction + if: "matrix.php >= 7.4" + + - name: Install PHP Dependencies + uses: nick-invision/retry@v1 + with: + timeout_minutes: 5 + max_attempts: 5 + command: composer update --no-interaction --no-progress + + - name: Execute PHPUnit + run: vendor/bin/phpunit diff --git a/vendor/filp/whoops/.mailmap b/vendor/filp/whoops/.mailmap new file mode 100644 index 00000000..13ac5d7d --- /dev/null +++ b/vendor/filp/whoops/.mailmap @@ -0,0 +1,2 @@ +Denis Sokolov +Filipe Dobreira diff --git a/vendor/filp/whoops/CHANGELOG.md b/vendor/filp/whoops/CHANGELOG.md index 1a872a1c..88458aba 100644 --- a/vendor/filp/whoops/CHANGELOG.md +++ b/vendor/filp/whoops/CHANGELOG.md @@ -1,3 +1,104 @@ +# 2.14.5 + +* Allow ArrayAccess on super globals + +# 2.14.4 + +* Fix PHP 5.5 support. +* Allow to use psr/log 2 or 3. + +# 2.14.3 + +* Support PHP 8.1 + +# 2.14.1 + +* Fix syntax highlighting scrolling too far. +* Improve the way we detect xdebug linkformat. + +# 2.14.0 + +* Switched syntax highlighting to Prism.js + +Avoids licensing issues with prettify, and uses a maintaned, modern project. + +# 2.13.0 + +* Add Netbeans editor + +# 2.12.1 + +* Avoid redirecting away from an error. + +# 2.12.0 + +* Hide non-string values in super globals when requested. + +# 2.11.0 + +* Customize exit code + +# 2.10.0 + +* Better chaining on handler classes + +# 2.9.2 + +* Fix copy button styles + +# 2.9.1 + +* Fix xdebug function crash on PHP 8 + +# 2.9.0 + +* JsonResponseHandler includes the exception code + +# 2.8.0 + +* Support PHP 8 + +# 2.7.3 + +* PrettyPageHandler functionality to hide superglobal keys has a clearer name hideSuperglobalKey + +# 2.7.2 + +* PrettyPageHandler now accepts custom js files +* PrettyPageHandler templateHelper is now accessible through inheritance + +# 2.7.1 + +* Fix a PHP warning in some cases with anonymous classes. + +# 2.7.0 + +* removeFirstHandler and removeLastHandler. + +# 2.6.0 + +* Fix 2.4.0 pushHandler changing the order of handlers. + +# 2.5.1 + +* Fix error messaging in a rare case. + +# 2.5.0 + +* Automatically configure xdebug if available. + +# 2.4.1 + +* Try harder to close all output buffers + +# 2.4.0 + +* Allow to prepend and append handlers. + +# 2.3.2 + +* Various fixes from the community. + # 2.3.1 * Prevent exception in Whoops when caught exception frame is not related to real file diff --git a/vendor/filp/whoops/SECURITY.md b/vendor/filp/whoops/SECURITY.md new file mode 100644 index 00000000..edfd946d --- /dev/null +++ b/vendor/filp/whoops/SECURITY.md @@ -0,0 +1,12 @@ +# Security Policy + +## Supported Versions + +Only the latest released version of Whoops is supported. +To facilitate upgrades we almost never make backwards-incompatible changes. + +## Reporting a Vulnerability + +Please report vulnerabilities over email, by sending an email to `denis` at `sokolov` dot `cc`. + + diff --git a/vendor/filp/whoops/composer.json b/vendor/filp/whoops/composer.json index 51ab373f..06b5c756 100644 --- a/vendor/filp/whoops/composer.json +++ b/vendor/filp/whoops/composer.json @@ -11,14 +11,17 @@ "role": "Developer" } ], + "scripts": { + "test": "phpunit --testdox tests" + }, "require": { - "php": "^5.5.9 || ^7.0", - "psr/log": "^1.0.1" + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", "mockery/mockery": "^0.9 || ^1.0", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0" + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" }, "suggest": { "symfony/var-dumper": "Pretty print complex values better with var-dumper available", @@ -36,7 +39,7 @@ }, "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.7-dev" } } } diff --git a/vendor/filp/whoops/src/Whoops/Exception/Formatter.php b/vendor/filp/whoops/src/Whoops/Exception/Formatter.php index e467559a..573dda0b 100644 --- a/vendor/filp/whoops/src/Whoops/Exception/Formatter.php +++ b/vendor/filp/whoops/src/Whoops/Exception/Formatter.php @@ -21,6 +21,7 @@ class Formatter $response = [ 'type' => get_class($exception), 'message' => $exception->getMessage(), + 'code' => $exception->getCode(), 'file' => $exception->getFile(), 'line' => $exception->getLine(), ]; diff --git a/vendor/filp/whoops/src/Whoops/Exception/Frame.php b/vendor/filp/whoops/src/Whoops/Exception/Frame.php index 0aad5468..2d7297b9 100644 --- a/vendor/filp/whoops/src/Whoops/Exception/Frame.php +++ b/vendor/filp/whoops/src/Whoops/Exception/Frame.php @@ -119,7 +119,11 @@ class Frame implements Serializable return null; } - $this->fileContentsCache = file_get_contents($filePath); + try { + $this->fileContentsCache = file_get_contents($filePath); + } catch (ErrorException $exception) { + // Internal file paths of PHP extensions cannot be opened + } } return $this->fileContentsCache; @@ -187,7 +191,7 @@ class Frame implements Serializable * $frame->getFileLines(); // => array( 0 => ' '...', ...) * @example * Get one line for this file, starting at line 10 (zero-indexed, remember!) - * $frame->getFileLines(9, 1); // array( 10 => '...', 11 => '...') + * $frame->getFileLines(9, 1); // array( 9 => '...' ) * * @throws InvalidArgumentException if $length is less than or equal to 0 * @param int $start @@ -237,6 +241,15 @@ class Frame implements Serializable return serialize($frame); } + public function __serialize() + { + $frame = $this->frame; + if (!empty($this->comments)) { + $frame['_comments'] = $this->comments; + } + return $frame; + } + /** * Unserializes the frame data, while also preserving * any existing comment data. @@ -256,6 +269,16 @@ class Frame implements Serializable $this->frame = $frame; } + public function __unserialize($frame) + { + if (!empty($frame['_comments'])) { + $this->comments = $frame['_comments']; + unset($frame['_comments']); + } + + $this->frame = $frame; + } + /** * Compares Frame against one another * @param Frame $frame diff --git a/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php b/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php index b043a1ce..723b475e 100644 --- a/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php +++ b/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php @@ -10,6 +10,7 @@ use ArrayAccess; use ArrayIterator; use Countable; use IteratorAggregate; +use ReturnTypeWillChange; use Serializable; use UnexpectedValueException; @@ -61,7 +62,7 @@ class FrameCollection implements ArrayAccess, IteratorAggregate, Serializable, C if (!$frame instanceof Frame) { throw new UnexpectedValueException( - "Callable to " . __METHOD__ . " must return a Frame object" + "Callable to " . __CLASS__ . "::map must return a Frame object" ); } @@ -89,6 +90,7 @@ class FrameCollection implements ArrayAccess, IteratorAggregate, Serializable, C * @see IteratorAggregate::getIterator * @return ArrayIterator */ + #[ReturnTypeWillChange] public function getIterator() { return new ArrayIterator($this->frames); @@ -98,6 +100,7 @@ class FrameCollection implements ArrayAccess, IteratorAggregate, Serializable, C * @see ArrayAccess::offsetExists * @param int $offset */ + #[ReturnTypeWillChange] public function offsetExists($offset) { return isset($this->frames[$offset]); @@ -107,6 +110,7 @@ class FrameCollection implements ArrayAccess, IteratorAggregate, Serializable, C * @see ArrayAccess::offsetGet * @param int $offset */ + #[ReturnTypeWillChange] public function offsetGet($offset) { return $this->frames[$offset]; @@ -116,6 +120,7 @@ class FrameCollection implements ArrayAccess, IteratorAggregate, Serializable, C * @see ArrayAccess::offsetSet * @param int $offset */ + #[ReturnTypeWillChange] public function offsetSet($offset, $value) { throw new \Exception(__CLASS__ . ' is read only'); @@ -125,6 +130,7 @@ class FrameCollection implements ArrayAccess, IteratorAggregate, Serializable, C * @see ArrayAccess::offsetUnset * @param int $offset */ + #[ReturnTypeWillChange] public function offsetUnset($offset) { throw new \Exception(__CLASS__ . ' is read only'); @@ -134,6 +140,7 @@ class FrameCollection implements ArrayAccess, IteratorAggregate, Serializable, C * @see Countable::count * @return int */ + #[ReturnTypeWillChange] public function count() { return count($this->frames); @@ -155,6 +162,7 @@ class FrameCollection implements ArrayAccess, IteratorAggregate, Serializable, C * @see Serializable::serialize * @return string */ + #[ReturnTypeWillChange] public function serialize() { return serialize($this->frames); @@ -164,11 +172,22 @@ class FrameCollection implements ArrayAccess, IteratorAggregate, Serializable, C * @see Serializable::unserialize * @param string $serializedFrames */ + #[ReturnTypeWillChange] public function unserialize($serializedFrames) { $this->frames = unserialize($serializedFrames); } + public function __serialize() + { + return $this->frames; + } + + public function __unserialize(array $serializedFrames) + { + $this->frames = $serializedFrames; + } + /** * @param Frame[] $frames Array of Frame instances, usually from $e->getPrevious() */ diff --git a/vendor/filp/whoops/src/Whoops/Exception/Inspector.php b/vendor/filp/whoops/src/Whoops/Exception/Inspector.php index 96cb9b5c..85709593 100644 --- a/vendor/filp/whoops/src/Whoops/Exception/Inspector.php +++ b/vendor/filp/whoops/src/Whoops/Exception/Inspector.php @@ -251,8 +251,8 @@ class Inspector return $traces; } - if (!extension_loaded('xdebug') || !xdebug_is_enabled()) { - return []; + if (!extension_loaded('xdebug') || !function_exists('xdebug_is_enabled') || !xdebug_is_enabled()) { + return $traces; } // Use xdebug to get the full stack trace and remove the shutdown handler stack trace diff --git a/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php b/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php index fdd7ead3..2966d385 100644 --- a/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php +++ b/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php @@ -28,7 +28,7 @@ class JsonResponseHandler extends Handler /** * Returns errors[[]] instead of error[] to be in compliance with the json:api spec * @param bool $jsonApi Default is false - * @return $this + * @return static */ public function setJsonApi($jsonApi = false) { @@ -38,7 +38,7 @@ class JsonResponseHandler extends Handler /** * @param bool|null $returnFrames - * @return bool|$this + * @return bool|static */ public function addTraceToOutput($returnFrames = null) { diff --git a/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php b/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php index 2f5be906..6c148aa9 100644 --- a/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php +++ b/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php @@ -46,6 +46,11 @@ class PlainTextHandler extends Handler */ private $traceFunctionArgsOutputLimit = 1024; + /** + * @var bool + */ + private $addPreviousToOutput = true; + /** * @var bool */ @@ -92,17 +97,18 @@ class PlainTextHandler extends Handler * Set var dumper callback function. * * @param callable $dumper - * @return void + * @return static */ public function setDumper(callable $dumper) { $this->dumper = $dumper; + return $this; } /** * Add error trace to output. * @param bool|null $addTraceToOutput - * @return bool|$this + * @return bool|static */ public function addTraceToOutput($addTraceToOutput = null) { @@ -114,11 +120,26 @@ class PlainTextHandler extends Handler return $this; } + /** + * Add previous exceptions to output. + * @param bool|null $addPreviousToOutput + * @return bool|static + */ + public function addPreviousToOutput($addPreviousToOutput = null) + { + if (func_num_args() == 0) { + return $this->addPreviousToOutput; + } + + $this->addPreviousToOutput = (bool) $addPreviousToOutput; + return $this; + } + /** * Add error trace function arguments to output. * Set to True for all frame args, or integer for the n first frame args. * @param bool|integer|null $addTraceFunctionArgsToOutput - * @return null|bool|integer + * @return static|bool|integer */ public function addTraceFunctionArgsToOutput($addTraceFunctionArgsToOutput = null) { @@ -131,6 +152,7 @@ class PlainTextHandler extends Handler } else { $this->addTraceFunctionArgsToOutput = $addTraceFunctionArgsToOutput; } + return $this; } /** @@ -138,10 +160,12 @@ class PlainTextHandler extends Handler * If the limit is reached, the var_dump output is discarded. * Prevent memory limit errors. * @var integer + * @return static */ public function setTraceFunctionArgsOutputLimit($traceFunctionArgsOutputLimit) { $this->traceFunctionArgsOutputLimit = (integer) $traceFunctionArgsOutputLimit; + return $this; } /** @@ -151,14 +175,18 @@ class PlainTextHandler extends Handler public function generateResponse() { $exception = $this->getException(); - return sprintf( - "%s: %s in file %s on line %d%s\n", - get_class($exception), - $exception->getMessage(), - $exception->getFile(), - $exception->getLine(), - $this->getTraceOutput() - ); + $message = $this->getExceptionOutput($exception); + + if ($this->addPreviousToOutput) { + $previous = $exception->getPrevious(); + while ($previous) { + $message .= "\n\nCaused by\n" . $this->getExceptionOutput($previous); + $previous = $previous->getPrevious(); + } + } + + + return $message . $this->getTraceOutput() . "\n"; } /** @@ -175,7 +203,7 @@ class PlainTextHandler extends Handler /** * Only output to logger. * @param bool|null $loggerOnly - * @return null|bool + * @return static|bool */ public function loggerOnly($loggerOnly = null) { @@ -184,6 +212,7 @@ class PlainTextHandler extends Handler } $this->loggerOnly = (bool) $loggerOnly; + return $this; } /** @@ -284,6 +313,22 @@ class PlainTextHandler extends Handler return $response; } + /** + * Get the exception as plain text. + * @param \Throwable $exception + * @return string + */ + private function getExceptionOutput($exception) + { + return sprintf( + "%s: %s in file %s on line %d", + get_class($exception), + $exception->getMessage(), + $exception->getFile(), + $exception->getLine() + ); + } + /** * @return int */ diff --git a/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php b/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php index 9f0b655c..e5a2560a 100644 --- a/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php +++ b/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php @@ -17,9 +17,22 @@ use Whoops\Util\TemplateHelper; class PrettyPageHandler extends Handler { + const EDITOR_SUBLIME = "sublime"; + const EDITOR_TEXTMATE = "textmate"; + const EDITOR_EMACS = "emacs"; + const EDITOR_MACVIM = "macvim"; + const EDITOR_PHPSTORM = "phpstorm"; + const EDITOR_IDEA = "idea"; + const EDITOR_VSCODE = "vscode"; + const EDITOR_ATOM = "atom"; + const EDITOR_ESPRESSO = "espresso"; + const EDITOR_XDEBUG = "xdebug"; + const EDITOR_NETBEANS = "netbeans"; + /** - * Search paths to be scanned for resources, in the reverse - * order they're declared. + * Search paths to be scanned for resources. + * + * Stored in the reverse order they're declared. * * @var array */ @@ -35,10 +48,17 @@ class PrettyPageHandler extends Handler /** * The name of the custom css file. * - * @var string + * @var string|null */ private $customCss = null; + /** + * The name of the custom js file. + * + * @var string|null + */ + private $customJs = null; + /** * @var array[] */ @@ -73,19 +93,22 @@ class PrettyPageHandler extends Handler ]; /** - * A string identifier for a known IDE/text editor, or a closure - * that resolves a string that can be used to open a given file - * in an editor. If the string contains the special substrings - * %file or %line, they will be replaced with the correct data. + * An identifier for a known IDE/text editor. + * + * Either a string, or a calalble that resolves a string, that can be used + * to open a given file in an editor. If the string contains the special + * substrings %file or %line, they will be replaced with the correct data. * * @example - * "txmt://open?url=%file&line=%line" - * @var mixed $editor + * "txmt://open?url=%file&line=%line" + * + * @var callable|string $editor */ protected $editor; /** - * A list of known editor strings + * A list of known editor strings. + * * @var array */ protected $editors = [ @@ -97,23 +120,30 @@ class PrettyPageHandler extends Handler "idea" => "idea://open?file=%file&line=%line", "vscode" => "vscode://file/%file:%line", "atom" => "atom://core/open/file?filename=%file&line=%line", + "espresso" => "x-espresso://open?filepath=%file&lines=%line", + "netbeans" => "netbeans://open/?f=%file:%line", ]; /** * @var TemplateHelper */ - private $templateHelper; + protected $templateHelper; /** * Constructor. + * + * @return void */ public function __construct() { - if (ini_get('xdebug.file_link_format') || extension_loaded('xdebug')) { + if (ini_get('xdebug.file_link_format') || get_cfg_var('xdebug.file_link_format')) { // Register editor using xdebug's file_link_format option. $this->editors['xdebug'] = function ($file, $line) { - return str_replace(['%f', '%l'], [$file, $line], ini_get('xdebug.file_link_format')); + return str_replace(['%f', '%l'], [$file, $line], ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format')); }; + + // If xdebug is available, use it as default editor. + $this->setEditor('xdebug'); } // Add the default, local resource search path: @@ -126,10 +156,11 @@ class PrettyPageHandler extends Handler if (class_exists('Symfony\Component\VarDumper\Cloner\VarCloner')) { $cloner = new VarCloner(); - // Only dump object internals if a custom caster exists. + // Only dump object internals if a custom caster exists for performance reasons + // https://github.com/filp/whoops/pull/404 $cloner->addCasters(['*' => function ($obj, $a, $stub, $isNested, $filter = 0) { $class = $stub->class; - $classes = [$class => $class] + class_parents($class) + class_implements($class); + $classes = [$class => $class] + class_parents($obj) + class_implements($obj); foreach ($classes as $class) { if (isset(AbstractCloner::$defaultCasters[$class])) { @@ -146,6 +177,8 @@ class PrettyPageHandler extends Handler /** * @return int|null + * + * @throws \Exception */ public function handle() { @@ -169,7 +202,8 @@ class PrettyPageHandler extends Handler $templateFile = $this->getResource("views/layout.html.php"); $cssFile = $this->getResource("css/whoops.base.css"); $zeptoFile = $this->getResource("js/zepto.min.js"); - $prettifyFile = $this->getResource("js/prettify.min.js"); + $prismJs = $this->getResource("js/prism.js"); + $prismCss = $this->getResource("css/prism.css"); $clipboard = $this->getResource("js/clipboard.min.js"); $jsFile = $this->getResource("js/whoops.base.js"); @@ -177,6 +211,10 @@ class PrettyPageHandler extends Handler $customCssFile = $this->getResource($this->customCss); } + if ($this->customJs) { + $customJsFile = $this->getResource($this->customJs); + } + $inspector = $this->getInspector(); $frames = $this->getExceptionFrames(); $code = $this->getExceptionCode(); @@ -188,7 +226,8 @@ class PrettyPageHandler extends Handler // @todo: Asset compiler "stylesheet" => file_get_contents($cssFile), "zepto" => file_get_contents($zeptoFile), - "prettify" => file_get_contents($prettifyFile), + "prismJs" => file_get_contents($prismJs), + "prismCss" => file_get_contents($prismCss), "clipboard" => file_get_contents($clipboard), "javascript" => file_get_contents($jsFile), @@ -236,6 +275,10 @@ class PrettyPageHandler extends Handler $vars["stylesheet"] .= file_get_contents($customCssFile); } + if (isset($customJsFile)) { + $vars["javascript"] .= file_get_contents($customJsFile); + } + // Add extra entries list of data tables: // @todo: Consolidate addDataTable and addDataTableCallback $extraTables = array_map(function ($table) use ($inspector) { @@ -255,9 +298,9 @@ class PrettyPageHandler extends Handler } /** - * Get the stack trace frames of the exception that is currently being handled. + * Get the stack trace frames of the exception currently being handled. * - * @return \Whoops\Exception\FrameCollection; + * @return \Whoops\Exception\FrameCollection */ protected function getExceptionFrames() { @@ -278,7 +321,7 @@ class PrettyPageHandler extends Handler } /** - * Get the code of the exception that is currently being handled. + * Get the code of the exception currently being handled. * * @return string */ @@ -305,25 +348,34 @@ class PrettyPageHandler extends Handler /** * Adds an entry to the list of tables displayed in the template. + * * The expected data is a simple associative array. Any nested arrays - * will be flattened with print_r + * will be flattened with `print_r`. + * * @param string $label * @param array $data + * + * @return static */ public function addDataTable($label, array $data) { $this->extraTables[$label] = $data; + return $this; } /** * Lazily adds an entry to the list of tables displayed in the table. - * The supplied callback argument will be called when the error is rendered, - * it should produce a simple associative array. Any nested arrays will - * be flattened with print_r. + * + * The supplied callback argument will be called when the error is + * rendered, it should produce a simple associative array. Any nested + * arrays will be flattened with `print_r`. + * + * @param string $label + * @param callable $callback Callable returning an associative array * * @throws InvalidArgumentException If $callback is not callable - * @param string $label - * @param callable $callback Callable returning an associative array + * + * @return static */ public function addDataTableCallback($label, /* callable */ $callback) { @@ -342,13 +394,18 @@ class PrettyPageHandler extends Handler return []; } }; + + return $this; } /** * Returns all the extra data tables registered with this handler. - * Optionally accepts a 'label' parameter, to only return the data - * table under that label. - * @param string|null $label + * + * Optionally accepts a 'label' parameter, to only return the data table + * under that label. + * + * @param string|null $label + * * @return array[]|callable */ public function getDataTables($label = null) @@ -362,11 +419,15 @@ class PrettyPageHandler extends Handler } /** - * Allows to disable all attempts to dynamically decide whether to - * handle or return prematurely. - * Set this to ensure that the handler will perform no matter what. - * @param bool|null $value - * @return bool|null + * Set whether to handle unconditionally. + * + * Allows to disable all attempts to dynamically decide whether to handle + * or return prematurely. Set this to ensure that the handler will perform, + * no matter what. + * + * @param bool|null $value + * + * @return bool|static */ public function handleUnconditionally($value = null) { @@ -375,13 +436,15 @@ class PrettyPageHandler extends Handler } $this->handleUnconditionally = (bool) $value; + return $this; } /** - * Adds an editor resolver, identified by a string - * name, and that may be a string path, or a callable - * resolver. If the callable returns a string, it will - * be set as the file reference's href attribute. + * Adds an editor resolver. + * + * Either a string, or a closure that resolves a string, that can be used + * to open a given file in an editor. If the string contains the special + * substrings %file or %line, they will be replaced with the correct data. * * @example * $run->addEditor('macvim', "mvim://open?url=file://%file&line=%line") @@ -390,27 +453,34 @@ class PrettyPageHandler extends Handler * unlink($file); * return "http://stackoverflow.com"; * }); - * @param string $identifier - * @param string $resolver + * + * @param string $identifier + * @param string|callable $resolver + * + * @return static */ public function addEditor($identifier, $resolver) { $this->editors[$identifier] = $resolver; + return $this; } /** - * Set the editor to use to open referenced files, by a string - * identifier, or a callable that will be executed for every - * file reference, with a $file and $line argument, and should - * return a string. + * Set the editor to use to open referenced files. + * + * Pass either the name of a configured editor, or a closure that directly + * resolves an editor string. * * @example * $run->setEditor(function($file, $line) { return "file:///{$file}"; }); * @example * $run->setEditor('sublime'); * + * @param string|callable $editor + * * @throws InvalidArgumentException If invalid argument identifier provided - * @param string|callable $editor + * + * @return static */ public function setEditor($editor) { @@ -422,17 +492,17 @@ class PrettyPageHandler extends Handler } $this->editor = $editor; + return $this; } /** - * Given a string file path, and an integer file line, - * executes the editor resolver and returns, if available, - * a string that may be used as the href property for that - * file reference. + * Get the editor href for a given file and line, if available. + * + * @param string $filePath + * @param int $line * * @throws InvalidArgumentException If editor resolver does not return a string - * @param string $filePath - * @param int $line + * * @return string|bool */ public function getEditorHref($filePath, $line) @@ -458,13 +528,13 @@ class PrettyPageHandler extends Handler } /** - * Given a boolean if the editor link should - * act as an Ajax request. The editor must be a - * valid callable function/closure + * Determine if the editor link should act as an Ajax request. + * + * @param string $filePath + * @param int $line + * + * @throws UnexpectedValueException If editor resolver does not return a boolean * - * @throws UnexpectedValueException If editor resolver does not return a boolean - * @param string $filePath - * @param int $line * @return bool */ public function getEditorAjax($filePath, $line) @@ -481,12 +551,11 @@ class PrettyPageHandler extends Handler } /** - * Given a boolean if the editor link should - * act as an Ajax request. The editor must be a - * valid callable function/closure + * Determines both the editor and if ajax should be used. + * + * @param string $filePath + * @param int $line * - * @param string $filePath - * @param int $line * @return array */ protected function getEditor($filePath, $line) @@ -530,15 +599,21 @@ class PrettyPageHandler extends Handler } /** - * @param string $title - * @return void + * Set the page title. + * + * @param string $title + * + * @return static */ public function setPageTitle($title) { $this->pageTitle = (string) $title; + return $this; } /** + * Get the page title. + * * @return string */ public function getPageTitle() @@ -547,13 +622,13 @@ class PrettyPageHandler extends Handler } /** - * Adds a path to the list of paths to be searched for - * resources. + * Adds a path to the list of paths to be searched for resources. + * + * @param string $path * * @throws InvalidArgumentException If $path is not a valid directory * - * @param string $path - * @return void + * @return static */ public function addResourcePath($path) { @@ -564,17 +639,33 @@ class PrettyPageHandler extends Handler } array_unshift($this->searchPaths, $path); + return $this; } /** * Adds a custom css file to be loaded. * - * @param string $name - * @return void + * @param string|null $name + * + * @return static */ public function addCustomCss($name) { $this->customCss = $name; + return $this; + } + + /** + * Adds a custom js file to be loaded. + * + * @param string|null $name + * + * @return static + */ + public function addCustomJs($name) + { + $this->customJs = $name; + return $this; } /** @@ -587,13 +678,15 @@ class PrettyPageHandler extends Handler /** * Finds a resource, by its relative path, in all available search paths. + * * The search is performed starting at the last search path, and all the - * way back to the first, enabling a cascading-type system of overrides - * for all resources. + * way back to the first, enabling a cascading-type system of overrides for + * all resources. + * + * @param string $resource * * @throws RuntimeException If resource cannot be found in any of the available paths * - * @param string $resource * @return string */ protected function getResource($resource) @@ -639,12 +732,14 @@ class PrettyPageHandler extends Handler /** * @deprecated * - * @param string $resourcesPath - * @return void + * @param string $resourcesPath + * + * @return static */ public function setResourcesPath($resourcesPath) { $this->addResourcePath($resourcesPath); + return $this; } /** @@ -661,6 +756,8 @@ class PrettyPageHandler extends Handler * Set the application paths. * * @param array $applicationPaths + * + * @return void */ public function setApplicationPaths($applicationPaths) { @@ -671,6 +768,8 @@ class PrettyPageHandler extends Handler * Set the application root path. * * @param string $applicationRootPath + * + * @return void */ public function setApplicationRootPath($applicationRootPath) { @@ -679,35 +778,57 @@ class PrettyPageHandler extends Handler /** * blacklist a sensitive value within one of the superglobal arrays. + * Alias for the hideSuperglobalKey method. * - * @param $superGlobalName string the name of the superglobal array, e.g. '_GET' - * @param $key string the key within the superglobal + * @param string $superGlobalName The name of the superglobal array, e.g. '_GET' + * @param string $key The key within the superglobal + * @see hideSuperglobalKey + * + * @return static */ public function blacklist($superGlobalName, $key) { $this->blacklist[$superGlobalName][] = $key; + return $this; + } + + /** + * Hide a sensitive value within one of the superglobal arrays. + * + * @param string $superGlobalName The name of the superglobal array, e.g. '_GET' + * @param string $key The key within the superglobal + * @return static + */ + public function hideSuperglobalKey($superGlobalName, $key) + { + return $this->blacklist($superGlobalName, $key); } /** * Checks all values within the given superGlobal array. - * Blacklisted values will be replaced by a equal length string cointaining only '*' characters. * - * We intentionally dont rely on $GLOBALS as it depends on 'auto_globals_jit' php.ini setting. + * Blacklisted values will be replaced by a equal length string containing + * only '*' characters for string values. + * Non-string values will be replaced with a fixed asterisk count. + * We intentionally dont rely on $GLOBALS as it depends on the 'auto_globals_jit' php.ini setting. + * + * @param array|\ArrayAccess $superGlobal One of the superglobal arrays + * @param string $superGlobalName The name of the superglobal array, e.g. '_GET' * - * @param $superGlobal array One of the superglobal arrays - * @param $superGlobalName string the name of the superglobal array, e.g. '_GET' * @return array $values without sensitive data */ - private function masked(array $superGlobal, $superGlobalName) + private function masked($superGlobal, $superGlobalName) { $blacklisted = $this->blacklist[$superGlobalName]; $values = $superGlobal; + foreach ($blacklisted as $key) { if (isset($superGlobal[$key])) { - $values[$key] = str_repeat('*', strlen($superGlobal[$key])); + $values[$key] = str_repeat('*', is_string($superGlobal[$key]) ? strlen($superGlobal[$key]) : 3); } } + return $values; } } diff --git a/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php b/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php index 0d0a577e..d695750a 100644 --- a/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php +++ b/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php @@ -23,7 +23,7 @@ class XmlResponseHandler extends Handler /** * @param bool|null $returnFrames - * @return bool|$this + * @return bool|static */ public function addTraceToOutput($returnFrames = null) { @@ -47,7 +47,7 @@ class XmlResponseHandler extends Handler ), ]; - echo $this->toXml($response); + echo self::toXml($response); return Handler::QUIT; } diff --git a/vendor/filp/whoops/src/Whoops/Resources/css/prism.css b/vendor/filp/whoops/src/Whoops/Resources/css/prism.css new file mode 100644 index 00000000..5faf2b88 --- /dev/null +++ b/vendor/filp/whoops/src/Whoops/Resources/css/prism.css @@ -0,0 +1,237 @@ +/* PrismJS 1.24.1 +https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+markup-templating+php&plugins=line-highlight+line-numbers */ +/** + * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML + * Based on https://github.com/chriskempson/tomorrow-theme + * @author Rose Pritchard + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #ccc; + background: none; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #2d2d2d; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.block-comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #999; +} + +.token.punctuation { + color: #ccc; +} + +.token.tag, +.token.attr-name, +.token.namespace, +.token.deleted { + color: #e2777a; +} + +.token.function-name { + color: #6196cc; +} + +.token.boolean, +.token.number, +.token.function { + color: #f08d49; +} + +.token.property, +.token.class-name, +.token.constant, +.token.symbol { + color: #f8c555; +} + +.token.selector, +.token.important, +.token.atrule, +.token.keyword, +.token.builtin { + color: #cc99cd; +} + +.token.string, +.token.char, +.token.attr-value, +.token.regex, +.token.variable { + color: #7ec699; +} + +.token.operator, +.token.entity, +.token.url { + color: #67cdcc; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.token.inserted { + color: green; +} + +pre[data-line] { + position: relative; + padding: 1em 0 1em 3em; +} + +.line-highlight { + position: absolute; + left: 0; + right: 0; + padding: inherit 0; + margin-top: 1em; /* Same as .prism’s padding-top */ + + background: hsla(24, 20%, 50%,.08); + background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0)); + + pointer-events: none; + + line-height: inherit; + white-space: pre; +} + +@media print { + .line-highlight { + /* + * This will prevent browsers from replacing the background color with white. + * It's necessary because the element is layered on top of the displayed code. + */ + -webkit-print-color-adjust: exact; + color-adjust: exact; + } +} + + .line-highlight:before, + .line-highlight[data-end]:after { + content: attr(data-start); + position: absolute; + top: .4em; + left: .6em; + min-width: 1em; + padding: 0 .5em; + background-color: hsla(24, 20%, 50%,.4); + color: hsl(24, 20%, 95%); + font: bold 65%/1.5 sans-serif; + text-align: center; + vertical-align: .3em; + border-radius: 999px; + text-shadow: none; + box-shadow: 0 1px white; + } + + .line-highlight[data-end]:after { + content: attr(data-end); + top: auto; + bottom: .4em; + } + +.line-numbers .line-highlight:before, +.line-numbers .line-highlight:after { + content: none; +} + +pre[id].linkable-line-numbers span.line-numbers-rows { + pointer-events: all; +} +pre[id].linkable-line-numbers span.line-numbers-rows > span:before { + cursor: pointer; +} +pre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before { + background-color: rgba(128, 128, 128, .2); +} + +pre[class*="language-"].line-numbers { + position: relative; + padding-left: 3.8em; + counter-reset: linenumber; +} + +pre[class*="language-"].line-numbers > code { + position: relative; + white-space: inherit; +} + +.line-numbers .line-numbers-rows { + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -3.8em; + width: 3em; /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + border-right: 1px solid #999; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + +} + + .line-numbers-rows > span { + display: block; + counter-increment: linenumber; + } + + .line-numbers-rows > span:before { + content: counter(linenumber); + color: #999; + display: block; + padding-right: 0.8em; + text-align: right; + } + diff --git a/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css b/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css index b86e2ae8..4400caad 100644 --- a/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css +++ b/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css @@ -12,6 +12,11 @@ body { text-decoration: none; } +.Whoops.container { + position: relative; + z-index: 9999999999; +} + .panel { overflow-y: scroll; height: 100%; @@ -367,59 +372,13 @@ header { font: 14px "Inconsolata", "Fira Mono", "Source Code Pro", Monaco, Consolas, "Lucida Console", monospace; } -/* prettify code style -Uses the Doxy theme as a base */ -pre .str, code .str { color: #BCD42A; } /* string */ -pre .kwd, code .kwd { color: #4bb1b1; font-weight: bold; } /* keyword*/ -pre .com, code .com { color: #888; font-weight: bold; } /* comment */ -pre .typ, code .typ { color: #ef7c61; } /* type */ -pre .lit, code .lit { color: #BCD42A; } /* literal */ -pre .pun, code .pun { color: #fff; font-weight: bold; } /* punctuation */ -pre .pln, code .pln { color: #e9e4e5; } /* plaintext */ -pre .tag, code .tag { color: #4bb1b1; } /* html/xml tag */ -pre .htm, code .htm { color: #dda0dd; } /* html tag */ -pre .xsl, code .xsl { color: #d0a0d0; } /* xslt tag */ -pre .atn, code .atn { color: #ef7c61; font-weight: normal;} /* html/xml attribute name */ -pre .atv, code .atv { color: #bcd42a; } /* html/xml attribute value */ -pre .dec, code .dec { color: #606; } /* decimal */ -pre.code-block, code.code-block, .frame-args.code-block, .frame-args.code-block samp { - font-family: "Inconsolata", "Fira Mono", "Source Code Pro", Monaco, Consolas, "Lucida Console", monospace; - background: #333; - color: #e9e4e5; -} - pre.code-block { - white-space: pre-wrap; - } - - pre.code-block a, code.code-block a { - text-decoration:none; - } - - .linenums li { - color: #A5A5A5; - } - - .linenums li.current{ - background: rgba(255, 100, 100, .07); - } - .linenums li.current.active { - background: rgba(255, 100, 100, .17); - } - -pre:not(.prettyprinted) { - padding-left: 60px; -} - #plain-exception { display: none; } -#copy-button { +.rightButton { cursor: pointer; border: 0; -} - -.clipboard { opacity: .8; background: none; @@ -431,7 +390,7 @@ pre:not(.prettyprinted) { outline: none !important; } - .clipboard:hover { + .rightButton:hover { box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.3); color: rgba(255, 255, 255, 0.3); } diff --git a/vendor/filp/whoops/src/Whoops/Resources/js/prettify.min.js b/vendor/filp/whoops/src/Whoops/Resources/js/prettify.min.js deleted file mode 100644 index 4827bc3f..00000000 --- a/vendor/filp/whoops/src/Whoops/Resources/js/prettify.min.js +++ /dev/null @@ -1,28 +0,0 @@ -var r=null;window.PR_SHOULD_USE_CONTINUATION=!0; -(function(){function O(a){function i(d){var a=d.charCodeAt(0);if(a!==92)return a;var f=d.charAt(1);return(a=s[f])?a:"0"<=f&&f<="7"?parseInt(d.substring(1),8):f==="u"||f==="x"?parseInt(d.substring(2),16):d.charCodeAt(1)}function g(d){if(d<32)return(d<16?"\\x0":"\\x")+d.toString(16);d=String.fromCharCode(d);return d==="\\"||d==="-"||d==="]"||d==="^"?"\\"+d:d}function j(d){var a=d.substring(1,d.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),d=[],f= -a[0]==="^",b=["["];f&&b.push("^");for(var f=f?1:0,c=a.length;f122||(e<65||h>90||d.push([Math.max(65,h)|32,Math.min(e,90)|32]),e<97||h>122||d.push([Math.max(97,h)&-33,Math.min(e,122)&-33]))}}d.sort(function(d,a){return d[0]-a[0]||a[1]-d[1]});a=[];c=[];for(f=0;fh[0]&&(h[1]+1>h[0]&&b.push("-"),b.push(g(h[1])));b.push("]");return b.join("")}function t(d){for(var a=d.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=a.length,i=[],c=0,h=0;c=2&&d==="["?a[c]=j(e):d!=="\\"&&(a[c]=e.replace(/[A-Za-z]/g,function(d){d=d.charCodeAt(0);return"["+String.fromCharCode(d&-33,d|32)+"]"}));return a.join("")}for(var z=0,w=!1,k=!1,m=0,b=a.length;m=5&&"lang-"===f.substring(0, -5))&&!(u&&typeof u[1]==="string"))c=!1,f="src";c||(s[v]=f)}h=b;b+=v.length;if(c){c=u[1];var e=v.indexOf(c),p=e+c.length;u[2]&&(p=v.length-u[2].length,e=p-c.length);f=f.substring(5);E(k+h,v.substring(0,e),g,m);E(k+h+e,c,F(f,c),m);E(k+h+p,v.substring(p),g,m)}else m.push(k+h,f)}a.g=m}var j={},t;(function(){for(var g=a.concat(i),k=[],m={},b=0,o=g.length;b=0;)j[q.charAt(d)]=s;s=s[1];q=""+s;m.hasOwnProperty(q)||(k.push(s),m[q]=r)}k.push(/[\S\s]/);t= -O(k)})();var z=i.length;return g}function l(a){var i=[],g=[];a.tripleQuotedStrings?i.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,r,"'\""]):a.multiLineStrings?i.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,r,"'\"`"]):i.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,r,"\"'"]);a.verbatimStrings&& -g.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,r]);var j=a.hashComments;j&&(a.cStyleComments?(j>1?i.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,r,"#"]):i.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\n\r]*)/,r,"#"]),g.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,r])):i.push(["com",/^#[^\n\r]*/,r,"#"]));a.cStyleComments&&(g.push(["com",/^\/\/[^\n\r]*/,r]),g.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/, -r]));a.regexLiterals&&g.push(["lang-regex",/^(?:^^\.?|[+-]|[!=]={0,2}|#|%=?|&&?=?|\(|\*=?|[+-]=|->|\/=?|::?|<{1,3}=?|[,;?@[{~]|\^\^?=?|\|\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(j=a.types)&&g.push(["typ",j]);a=(""+a.keywords).replace(/^ | $/g,"");a.length&&g.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),r]);i.push(["pln",/^\s+/,r," \r\n\t\u00a0"]);g.push(["lit", -/^@[$_a-z][\w$@]*/i,r],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,r],["pln",/^[$_a-z][\w$@]*/i,r],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,r,"0123456789"],["pln",/^\\[\S\s]?/,r],["pun",/^.[^\s\w"$'./@\\`]*/,r]);return x(i,g)}function G(a,i,g){function j(a){switch(a.nodeType){case 1:if(z.test(a.className))break;if("br"===a.nodeName)t(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)j(a);break;case 3:case 4:if(g){var b= -a.nodeValue,f=b.match(n);if(f){var i=b.substring(0,f.index);a.nodeValue=i;(b=b.substring(f.index+f[0].length))&&a.parentNode.insertBefore(k.createTextNode(b),a.nextSibling);t(a);i||a.parentNode.removeChild(a)}}}}function t(a){function i(a,b){var d=b?a.cloneNode(!1):a,e=a.parentNode;if(e){var e=i(e,1),f=a.nextSibling;e.appendChild(d);for(var g=f;g;g=f)f=g.nextSibling,e.appendChild(g)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=i(a.nextSibling,0),f;(f=a.parentNode)&&f.nodeType=== -1;)a=f;b.push(a)}for(var z=/(?:^|\s)nocode(?:\s|$)/,n=/\r\n?|\n/,k=a.ownerDocument,m=k.createElement("li");a.firstChild;)m.appendChild(a.firstChild);for(var b=[m],o=0;o=0;){var j= -i[g];A.hasOwnProperty(j)?C.console&&console.warn("cannot override language handler %s",j):A[j]=a}}function F(a,i){if(!a||!A.hasOwnProperty(a))a=/^\s*=e&&(j+=2);g>=p&&(s+=2)}}finally{if(c)c.style.display=h}}catch(A){C.console&&console.log(A&&A.stack?A.stack:A)}}var C=window,y=["break,continue,do,else,for,if,return,while"],B=[[y,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],I=[B,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"], -J=[B,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],K=[J,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],B=[B,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"], -L=[y,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],M=[y,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],y=[y,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],N=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/, -Q=/\S/,R=l({keywords:[I,K,B,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+L,M,y],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};n(R,["default-code"]);n(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-", -/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);n(x([["pln",/^\s+/,r," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,r,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/], -["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);n(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);n(l({keywords:I,hashComments:!0,cStyleComments:!0,types:N}),["c","cc","cpp","cxx","cyc","m"]);n(l({keywords:"null,true,false"}),["json"]);n(l({keywords:K,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:N}), -["cs"]);n(l({keywords:J,cStyleComments:!0}),["java"]);n(l({keywords:y,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);n(l({keywords:L,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py"]);n(l({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);n(l({keywords:M,hashComments:!0, -multiLineStrings:!0,regexLiterals:!0}),["rb"]);n(l({keywords:B,cStyleComments:!0,regexLiterals:!0}),["js"]);n(l({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);n(x([],[["str",/^[\S\s]+/]]),["regex"]);var S=C.PR={createSimpleLexer:x,registerLangHandler:n,sourceDecorator:l, -PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:C.prettyPrintOne=function(a,i,g){var j=document.createElement("pre");j.innerHTML=a;g&&G(j,g,!0);H({h:i,j:g,c:j,i:1});return j.innerHTML},prettyPrint:C.prettyPrint=function(a){function i(){var u;for(var g=C.PR_SHOULD_USE_CONTINUATION?k.now()+250:Infinity;m=l.reach);y+=m.value.length,m=m.next){var b=m.value;if(t.length>n.length)return;if(!(b instanceof W)){var k,x=1;if(h){if(!(k=z(v,y,n,f)))break;var w=k.index,A=k.index+k[0].length,P=y;for(P+=m.value.length;P<=w;)m=m.next,P+=m.value.length;if(P-=m.value.length,y=P,m.value instanceof W)continue;for(var E=m;E!==t.tail&&(Pl.reach&&(l.reach=N);var j=m.prev;O&&(j=I(t,j,O),y+=O.length),q(t,j,x);var C=new W(o,g?M.tokenize(S,g):S,d,S);if(m=I(t,j,C),L&&I(t,m,L),1l.reach&&(l.reach=_.reach)}}}}}}(e,a,n,a.head,0),function(e){var n=[],t=e.head.next;for(;t!==e.tail;)n.push(t.value),t=t.next;return n}(a)},hooks:{all:{},add:function(e,n){var t=M.hooks.all;t[e]=t[e]||[],t[e].push(n)},run:function(e,n){var t=M.hooks.all[e];if(t&&t.length)for(var r,a=0;r=t[a++];)r(n)}},Token:W};function W(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=0|(r||"").length}function z(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a[1].length;a.index+=i,a[0]=a[0].slice(i)}return a}function i(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function I(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function q(e,n,t){for(var r=n.next,a=0;a"+a.content+""},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var t=M.util.currentScript();function r(){M.manual||M.highlightAll()}if(t&&(M.filename=t.src,t.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var a=document.readyState;"loading"===a||"interactive"===a&&t&&t.defer?document.addEventListener("DOMContentLoaded",r):window.requestAnimationFrame?window.requestAnimationFrame(r):window.setTimeout(r,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return a}),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml; +!function(h){function v(e,n){return"___"+e.toUpperCase()+n+"___"}Object.defineProperties(h.languages["markup-templating"]={},{buildPlaceholders:{value:function(a,r,e,o){if(a.language===r){var c=a.tokenStack=[];a.code=a.code.replace(e,function(e){if("function"==typeof o&&!o(e))return e;for(var n,t=c.length;-1!==a.code.indexOf(n=v(r,t));)++t;return c[t]=e,n}),a.grammar=h.languages.markup}}},tokenizePlaceholders:{value:function(p,k){if(p.language===k&&p.tokenStack){p.grammar=h.languages[k];var m=0,d=Object.keys(p.tokenStack);!function e(n){for(var t=0;t=d.length);t++){var a=n[t];if("string"==typeof a||a.content&&"string"==typeof a.content){var r=d[m],o=p.tokenStack[r],c="string"==typeof a?a:a.content,i=v(k,r),u=c.indexOf(i);if(-1|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,s=/[{}\[\](),:;]/;a.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:e,variable:/\$+(?:\w+\b|(?=\{))/i,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:bool|boolean|int|integer|float|string|object|array)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:bool|int|float|string|object|array(?!\s*\()|mixed|self|static|callable|iterable|(?:null|false)(?=\s*\|))\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*[\w|]\|\s*)(?:null|false)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:bool|int|float|string|object|void|array(?!\s*\()|mixed|self|static|callable|iterable|(?:null|false)(?=\s*\|))\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?[\w|]\|\s*)(?:null|false)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:bool|int|float|string|object|void|array(?!\s*\()|mixed|iterable|(?:null|false)(?=\s*\|))\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:null|false)\b/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|namespace|match|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s+)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:i,operator:n,punctuation:s};var l={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:a.languages.php},r=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:l}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:l}}];a.languages.insertBefore("php","variable",{string:r,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:e,string:r,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,number:i,operator:n,punctuation:s}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),a.hooks.add("before-tokenize",function(e){if(/<\?/.test(e.code)){a.languages["markup-templating"].buildPlaceholders(e,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/gi)}}),a.hooks.add("after-tokenize",function(e){a.languages["markup-templating"].tokenizePlaceholders(e,"php")})}(Prism); +!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document&&document.querySelector){var t,o="line-numbers",s="linkable-line-numbers",a=function(){if(void 0===t){var e=document.createElement("div");e.style.fontSize="13px",e.style.lineHeight="1.5",e.style.padding="0",e.style.border="0",e.innerHTML=" 
 ",document.body.appendChild(e),t=38===e.offsetHeight,document.body.removeChild(e)}return t},l=!0,u=0;Prism.hooks.add("before-sanity-check",function(e){var t=e.element.parentElement;if(c(t)){var n=0;v(".line-highlight",t).forEach(function(e){n+=e.textContent.length,e.parentNode.removeChild(e)}),n&&/^(?: \n)+$/.test(e.code.slice(-n))&&(e.code=e.code.slice(0,-n))}}),Prism.hooks.add("complete",function e(t){var n=t.element.parentElement;if(c(n)){clearTimeout(u);var i=Prism.plugins.lineNumbers,r=t.plugins&&t.plugins.lineNumbers;if(b(n,o)&&i&&!r)Prism.hooks.add("line-numbers",e);else d(n)(),u=setTimeout(f,1)}}),window.addEventListener("hashchange",f),window.addEventListener("resize",function(){v("pre").filter(c).map(function(e){return d(e)}).forEach(y)})}function v(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function b(e,t){return e.classList.contains(t)}function y(e){e()}function c(e){return!(!e||!/pre/i.test(e.nodeName))&&(!!e.hasAttribute("data-line")||!(!e.id||!Prism.util.isActive(e,s)))}function d(u,e,c){var t=(e="string"==typeof e?e:u.getAttribute("data-line")||"").replace(/\s+/g,"").split(",").filter(Boolean),d=+u.getAttribute("data-line-offset")||0,f=(a()?parseInt:parseFloat)(getComputedStyle(u).lineHeight),p=Prism.util.isActive(u,o),n=u.querySelector("code"),h=p?u:n||u,m=[],g=n&&h!=n?function(e,t){var n=getComputedStyle(e),i=getComputedStyle(t);function r(e){return+e.substr(0,e.length-2)}return t.offsetTop+r(i.borderTopWidth)+r(i.paddingTop)-r(n.paddingTop)}(u,n):0;t.forEach(function(e){var t=e.split("-"),n=+t[0],i=+t[1]||n,r=u.querySelector('.line-highlight[data-range="'+e+'"]')||document.createElement("div");if(m.push(function(){r.setAttribute("aria-hidden","true"),r.setAttribute("data-range",e),r.className=(c||"")+" line-highlight"}),p&&Prism.plugins.lineNumbers){var o=Prism.plugins.lineNumbers.getLine(u,n),s=Prism.plugins.lineNumbers.getLine(u,i);if(o){var a=o.offsetTop+g+"px";m.push(function(){r.style.top=a})}if(s){var l=s.offsetTop-o.offsetTop+s.offsetHeight+"px";m.push(function(){r.style.height=l})}}else m.push(function(){r.setAttribute("data-start",String(n)),n span",u).forEach(function(e,t){var n=t+r;e.onclick=function(){var e=i+"."+n;l=!1,location.hash=e,setTimeout(function(){l=!0},1)}})}return function(){m.forEach(y)}}function f(){var e=location.hash.slice(1);v(".temporary.line-highlight").forEach(function(e){e.parentNode.removeChild(e)});var t=(e.match(/\.([\d,-]+)$/)||[,""])[1];if(t&&!document.getElementById(e)){var n=e.slice(0,e.lastIndexOf(".")),i=document.getElementById(n);if(i)i.hasAttribute("data-line")||i.setAttribute("data-line",""),d(i,t,"temporary ")(),l&&document.querySelector(".temporary.line-highlight").scrollIntoView()}}}(); +!function(){if("undefined"!=typeof Prism&&"undefined"!=typeof document){var o="line-numbers",a=/\n(?!$)/g,e=Prism.plugins.lineNumbers={getLine:function(e,n){if("PRE"===e.tagName&&e.classList.contains(o)){var t=e.querySelector(".line-numbers-rows");if(t){var i=parseInt(e.getAttribute("data-start"),10)||1,r=i+(t.children.length-1);n");(i=document.createElement("span")).setAttribute("aria-hidden","true"),i.className="line-numbers-rows",i.innerHTML=l,t.hasAttribute("data-start")&&(t.style.counterReset="linenumber "+(parseInt(t.getAttribute("data-start"),10)-1)),e.element.appendChild(i),u([t]),Prism.hooks.run("line-numbers",e)}}}),Prism.hooks.add("line-numbers",function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0})}function u(e){if(0!=(e=e.filter(function(e){var n=function(e){return e?window.getComputedStyle?getComputedStyle(e):e.currentStyle||null:null}(e)["white-space"];return"pre-wrap"===n||"pre-line"===n})).length){var n=e.map(function(e){var n=e.querySelector("code"),t=e.querySelector(".line-numbers-rows");if(n&&t){var i=e.querySelector(".line-numbers-sizer"),r=n.textContent.split(a);i||((i=document.createElement("span")).className="line-numbers-sizer",n.appendChild(i)),i.innerHTML="0",i.style.display="block";var s=i.getBoundingClientRect().height;return i.innerHTML="",{element:e,lines:r,lineHeights:[],oneLinerHeight:s,sizer:i}}}).filter(Boolean);n.forEach(function(e){var i=e.sizer,n=e.lines,r=e.lineHeights,s=e.oneLinerHeight;r[n.length-1]=void 0,n.forEach(function(e,n){if(e&&1 0) { - $offset[0].scrollIntoView(); - } - - $($lines[activeLineNumber - firstLine - 1]).addClass('current'); - $($lines[activeLineNumber - firstLine]).addClass('current active'); - $($lines[activeLineNumber - firstLine + 1]).addClass('current'); + var line = $activeFrame.find('.code-block .line-highlight').first()[0]; + line.scrollIntoView(); + line.parentElement.scrollTop -= 180; $container.scrollTop(0); - } /* @@ -100,7 +78,7 @@ Zepto(function($) { var clipboard = new Clipboard('.clipboard'); var showTooltip = function(elem, msg) { - elem.setAttribute('class', 'clipboard tooltipped tooltipped-s'); + elem.classList.add('tooltipped', 'tooltipped-s'); elem.setAttribute('aria-label', msg); }; @@ -117,7 +95,7 @@ Zepto(function($) { var btn = document.querySelector('.clipboard'); btn.addEventListener('mouseleave', function(e) { - e.currentTarget.setAttribute('class', 'clipboard'); + e.currentTarget.classList.remove('tooltipped', 'tooltipped-s'); e.currentTarget.removeAttribute('aria-label'); }); diff --git a/vendor/filp/whoops/src/Whoops/Resources/views/env_details.html.php b/vendor/filp/whoops/src/Whoops/Resources/views/env_details.html.php index 8db1493c..30fcb9cb 100644 --- a/vendor/filp/whoops/src/Whoops/Resources/views/env_details.html.php +++ b/vendor/filp/whoops/src/Whoops/Resources/views/env_details.html.php @@ -32,9 +32,9 @@
diff --git a/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php b/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php index 6b676cc6..7ad15eae 100644 --- a/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php +++ b/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php @@ -12,6 +12,7 @@ <?php echo $tpl->escape($page_title) ?> + @@ -25,7 +26,7 @@ - + diff --git a/vendor/filp/whoops/src/Whoops/Run.php b/vendor/filp/whoops/src/Whoops/Run.php index 1d51f1cf..52486d0d 100644 --- a/vendor/filp/whoops/src/Whoops/Run.php +++ b/vendor/filp/whoops/src/Whoops/Run.php @@ -7,6 +7,7 @@ namespace Whoops; use InvalidArgumentException; +use Throwable; use Whoops\Exception\ErrorException; use Whoops\Exception\Inspector; use Whoops\Handler\CallbackHandler; @@ -17,8 +18,19 @@ use Whoops\Util\SystemFacade; final class Run implements RunInterface { + /** + * @var bool + */ private $isRegistered; + + /** + * @var bool + */ private $allowQuit = true; + + /** + * @var bool + */ private $sendOutput = true; /** @@ -26,48 +38,86 @@ final class Run implements RunInterface */ private $sendHttpCode = 500; + /** + * @var integer|false + */ + private $sendExitCode = 1; + /** * @var HandlerInterface[] */ private $handlerStack = []; + /** + * @var array + * @psalm-var list + */ private $silencedPatterns = []; + /** + * @var SystemFacade + */ private $system; + /** + * In certain scenarios, like in shutdown handler, we can not throw exceptions. + * + * @var bool + */ + private $canThrowExceptions = true; + public function __construct(SystemFacade $system = null) { $this->system = $system ?: new SystemFacade; } /** - * Pushes a handler to the end of the stack + * Explicitly request your handler runs as the last of all currently registered handlers. + * + * @param callable|HandlerInterface $handler * - * @throws InvalidArgumentException If argument is not callable or instance of HandlerInterface - * @param Callable|HandlerInterface $handler * @return Run */ - public function pushHandler($handler) + public function appendHandler($handler) { - if (is_callable($handler)) { - $handler = new CallbackHandler($handler); - } - - if (!$handler instanceof HandlerInterface) { - throw new InvalidArgumentException( - "Argument to " . __METHOD__ . " must be a callable, or instance of " - . "Whoops\\Handler\\HandlerInterface" - ); - } - - $this->handlerStack[] = $handler; + array_unshift($this->handlerStack, $this->resolveHandler($handler)); return $this; } /** - * Removes the last handler in the stack and returns it. - * Returns null if there"s nothing else to pop. - * @return null|HandlerInterface + * Explicitly request your handler runs as the first of all currently registered handlers. + * + * @param callable|HandlerInterface $handler + * + * @return Run + */ + public function prependHandler($handler) + { + return $this->pushHandler($handler); + } + + /** + * Register your handler as the last of all currently registered handlers (to be executed first). + * Prefer using appendHandler and prependHandler for clarity. + * + * @param callable|HandlerInterface $handler + * + * @return Run + * + * @throws InvalidArgumentException If argument is not callable or instance of HandlerInterface. + */ + public function pushHandler($handler) + { + $this->handlerStack[] = $this->resolveHandler($handler); + return $this; + } + + /** + * Removes and returns the last handler pushed to the handler stack. + * + * @see Run::removeFirstHandler(), Run::removeLastHandler() + * + * @return HandlerInterface|null */ public function popHandler() { @@ -75,8 +125,28 @@ final class Run implements RunInterface } /** - * Returns an array with all handlers, in the - * order they were added to the stack. + * Removes the first handler. + * + * @return void + */ + public function removeFirstHandler() + { + array_pop($this->handlerStack); + } + + /** + * Removes the last handler. + * + * @return void + */ + public function removeLastHandler() + { + array_shift($this->handlerStack); + } + + /** + * Returns an array with all handlers, in the order they were added to the stack. + * * @return array */ public function getHandlers() @@ -85,8 +155,8 @@ final class Run implements RunInterface } /** - * Clears all handlers in the handlerStack, including - * the default PrettyPage handler. + * Clears all handlers in the handlerStack, including the default PrettyPage handler. + * * @return Run */ public function clearHandlers() @@ -95,17 +165,9 @@ final class Run implements RunInterface return $this; } - /** - * @param \Throwable $exception - * @return Inspector - */ - private function getInspector($exception) - { - return new Inspector($exception); - } - /** * Registers this instance as an error handler. + * * @return Run */ public function register() @@ -129,7 +191,8 @@ final class Run implements RunInterface } /** - * Unregisters all handlers registered by this Whoops\Run instance + * Unregisters all handlers registered by this Whoops\Run instance. + * * @return Run */ public function unregister() @@ -146,7 +209,9 @@ final class Run implements RunInterface /** * Should Whoops allow Handlers to force the script to quit? - * @param bool|int $exit + * + * @param bool|int $exit + * * @return bool */ public function allowQuit($exit = null) @@ -159,10 +224,12 @@ final class Run implements RunInterface } /** - * Silence particular errors in particular files - * @param array|string $patterns List or a single regex pattern to match - * @param int $levels Defaults to E_STRICT | E_DEPRECATED - * @return \Whoops\Run + * Silence particular errors in particular files. + * + * @param array|string $patterns List or a single regex pattern to match. + * @param int $levels Defaults to E_STRICT | E_DEPRECATED. + * + * @return Run */ public function silenceErrorsInPaths($patterns, $levels = 10240) { @@ -178,12 +245,12 @@ final class Run implements RunInterface (array) $patterns ) ); + return $this; } - /** - * Returns an array with silent errors in path configuration + * Returns an array with silent errors in path configuration. * * @return array */ @@ -192,13 +259,16 @@ final class Run implements RunInterface return $this->silencedPatterns; } - /* + /** * Should Whoops send HTTP error code to the browser if possible? * Whoops will by default send HTTP code 500, but you may wish to * use 502, 503, or another 5xx family code. * * @param bool|int $code + * * @return int|false + * + * @throws InvalidArgumentException */ public function sendHttpCode($code = null) { @@ -216,17 +286,44 @@ final class Run implements RunInterface if ($code < 400 || 600 <= $code) { throw new InvalidArgumentException( - "Invalid status code '$code', must be 4xx or 5xx" + "Invalid status code '$code', must be 4xx or 5xx" ); } return $this->sendHttpCode = $code; } + /** + * Should Whoops exit with a specific code on the CLI if possible? + * Whoops will exit with 1 by default, but you can specify something else. + * + * @param int $code + * + * @return int + * + * @throws InvalidArgumentException + */ + public function sendExitCode($code = null) + { + if (func_num_args() == 0) { + return $this->sendExitCode; + } + + if ($code < 0 || 255 <= $code) { + throw new InvalidArgumentException( + "Invalid status code '$code', must be between 0 and 254" + ); + } + + return $this->sendExitCode = (int) $code; + } + /** * Should Whoops push output directly to the client? - * If this is false, output will be returned by handleException - * @param bool|int $send + * If this is false, output will be returned by handleException. + * + * @param bool|int $send + * * @return bool */ public function writeToOutput($send = null) @@ -239,11 +336,11 @@ final class Run implements RunInterface } /** - * Handles an exception, ultimately generating a Whoops error - * page. + * Handles an exception, ultimately generating a Whoops error page. * - * @param \Throwable $exception - * @return string Output generated by handlers + * @param Throwable $exception + * + * @return string Output generated by handlers. */ public function handleException($exception) { @@ -260,33 +357,35 @@ final class Run implements RunInterface $handlerResponse = null; $handlerContentType = null; - foreach (array_reverse($this->handlerStack) as $handler) { - $handler->setRun($this); - $handler->setInspector($inspector); - $handler->setException($exception); + try { + foreach (array_reverse($this->handlerStack) as $handler) { + $handler->setRun($this); + $handler->setInspector($inspector); + $handler->setException($exception); - // The HandlerInterface does not require an Exception passed to handle() - // and neither of our bundled handlers use it. - // However, 3rd party handlers may have already relied on this parameter, - // and removing it would be possibly breaking for users. - $handlerResponse = $handler->handle($exception); + // The HandlerInterface does not require an Exception passed to handle() + // and neither of our bundled handlers use it. + // However, 3rd party handlers may have already relied on this parameter, + // and removing it would be possibly breaking for users. + $handlerResponse = $handler->handle($exception); - // Collect the content type for possible sending in the headers. - $handlerContentType = method_exists($handler, 'contentType') ? $handler->contentType() : null; + // Collect the content type for possible sending in the headers. + $handlerContentType = method_exists($handler, 'contentType') ? $handler->contentType() : null; - if (in_array($handlerResponse, [Handler::LAST_HANDLER, Handler::QUIT])) { - // The Handler has handled the exception in some way, and - // wishes to quit execution (Handler::QUIT), or skip any - // other handlers (Handler::LAST_HANDLER). If $this->allowQuit - // is false, Handler::QUIT behaves like Handler::LAST_HANDLER - break; + if (in_array($handlerResponse, [Handler::LAST_HANDLER, Handler::QUIT])) { + // The Handler has handled the exception in some way, and + // wishes to quit execution (Handler::QUIT), or skip any + // other handlers (Handler::LAST_HANDLER). If $this->allowQuit + // is false, Handler::QUIT behaves like Handler::LAST_HANDLER + break; + } } + + $willQuit = $handlerResponse == Handler::QUIT && $this->allowQuit(); + } finally { + $output = $this->system->cleanOutputBuffer(); } - $willQuit = $handlerResponse == Handler::QUIT && $this->allowQuit(); - - $output = $this->system->cleanOutputBuffer(); - // If we're allowed to, send output generated by handlers directly // to the output, otherwise, and if the script doesn't quit, return // it so that it may be used by the caller @@ -311,24 +410,26 @@ final class Run implements RunInterface // HHVM fix for https://github.com/facebook/hhvm/issues/4055 $this->system->flushOutputBuffer(); - $this->system->stopExecution(1); + $this->system->stopExecution( + $this->sendExitCode() + ); } return $output; } /** - * Converts generic PHP errors to \ErrorException - * instances, before passing them off to be handled. + * Converts generic PHP errors to \ErrorException instances, before passing them off to be handled. * * This method MUST be compatible with set_error_handler. * - * @param int $level - * @param string $message - * @param string $file - * @param int $line + * @param int $level + * @param string $message + * @param string|null $file + * @param int|null $line * * @return bool + * * @throws ErrorException */ public function handleError($level, $message, $file = null, $line = null) @@ -363,6 +464,8 @@ final class Run implements RunInterface /** * Special case to deal with Fatal errors and the like. + * + * @return void */ public function handleShutdown() { @@ -375,6 +478,7 @@ final class Run implements RunInterface if ($error && Misc::isLevelFatal($error['type'])) { // If there was a fatal error, // it was not handled in handleError yet. + $this->allowQuit = false; $this->handleError( $error['type'], $error['message'], @@ -385,19 +489,50 @@ final class Run implements RunInterface } /** - * In certain scenarios, like in shutdown handler, we can not throw exceptions - * @var bool + * @param Throwable $exception + * + * @return Inspector */ - private $canThrowExceptions = true; + private function getInspector($exception) + { + return new Inspector($exception); + } /** - * Echo something to the browser - * @param string $output - * @return $this + * Resolves the giving handler. + * + * @param callable|HandlerInterface $handler + * + * @return HandlerInterface + * + * @throws InvalidArgumentException + */ + private function resolveHandler($handler) + { + if (is_callable($handler)) { + $handler = new CallbackHandler($handler); + } + + if (!$handler instanceof HandlerInterface) { + throw new InvalidArgumentException( + "Handler must be a callable, or instance of " + . "Whoops\\Handler\\HandlerInterface" + ); + } + + return $handler; + } + + /** + * Echo something to the browser. + * + * @param string $output + * + * @return Run */ private function writeToOutputNow($output) { - if ($this->sendHttpCode() && \Whoops\Util\Misc::canSendHeaders()) { + if ($this->sendHttpCode() && Misc::canSendHeaders()) { $this->system->setHttpResponseCode( $this->sendHttpCode() ); diff --git a/vendor/filp/whoops/src/Whoops/RunInterface.php b/vendor/filp/whoops/src/Whoops/RunInterface.php index 67ba90d7..8162fe4d 100644 --- a/vendor/filp/whoops/src/Whoops/RunInterface.php +++ b/vendor/filp/whoops/src/Whoops/RunInterface.php @@ -90,6 +90,15 @@ interface RunInterface */ public function sendHttpCode($code = null); + /** + * Should Whoops exit with a specific code on the CLI if possible? + * Whoops will exit with 1 by default, but you can specify something else. + * + * @param int $code + * @return int + */ + public function sendExitCode($code = null); + /** * Should Whoops push output directly to the client? * If this is false, output will be returned by handleException diff --git a/vendor/filp/whoops/src/Whoops/Util/SystemFacade.php b/vendor/filp/whoops/src/Whoops/Util/SystemFacade.php index cc82e7ff..9eb0acfa 100644 --- a/vendor/filp/whoops/src/Whoops/Util/SystemFacade.php +++ b/vendor/filp/whoops/src/Whoops/Util/SystemFacade.php @@ -26,9 +26,9 @@ class SystemFacade */ public function setErrorHandler(callable $handler, $types = 'use-php-defaults') { - // Workaround for PHP 5.5 + // Since PHP 5.4 the constant E_ALL contains all errors (even E_STRICT) if ($types === 'use-php-defaults') { - $types = E_ALL | E_STRICT; + $types = E_ALL; } return set_error_handler($handler, $types); } @@ -124,6 +124,13 @@ class SystemFacade */ public function setHttpResponseCode($httpCode) { + if (!headers_sent()) { + // Ensure that no 'location' header is present as otherwise this + // will override the HTTP code being set here, and mask the + // expected error page. + header_remove('location'); + } + return http_response_code($httpCode); } diff --git a/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php b/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php index 00f6ae49..9c7cec23 100644 --- a/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php +++ b/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php @@ -104,7 +104,7 @@ class TemplateHelper { $parts = explode($delimiter, $s); foreach ($parts as &$part) { - $part = '
' . $part . '
'; + $part = '' . $part . ''; } return implode($delimiter, $parts); diff --git a/vendor/fzaninotto/faker/.github/ISSUE_TEMPLATE/bug_report.md b/vendor/fzaninotto/faker/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..3e8543bc --- /dev/null +++ b/vendor/fzaninotto/faker/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,39 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +### Summary + + + +### Versions + + + +| | Version | +|:--------------------|:--------| +| PHP | x.y.z | +| `fzaninotto/faker` | x.y.z | + +### Self-enclosed code snippet for reproduction + +```php + +``` + +### Expected output + +```txt + +``` + +### Actual output + +```txt + +``` diff --git a/vendor/fzaninotto/faker/.gitignore b/vendor/fzaninotto/faker/.gitignore deleted file mode 100644 index 7579f743..00000000 --- a/vendor/fzaninotto/faker/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -vendor -composer.lock diff --git a/vendor/fzaninotto/faker/.travis.yml b/vendor/fzaninotto/faker/.travis.yml deleted file mode 100644 index a719ba81..00000000 --- a/vendor/fzaninotto/faker/.travis.yml +++ /dev/null @@ -1,25 +0,0 @@ -language: php - -dist: precise - -php: - - 5.3 - - 5.4 - - 5.5 - - 5.6 - - 7.0 - - 7.1 - - 7.2 - - nightly - -sudo: false - -cache: - directories: - - $HOME/.composer/cache - -before_script: - - travis_retry composer self-update - - travis_retry composer install --no-interaction --prefer-dist - -script: make sniff test diff --git a/vendor/fzaninotto/faker/.travis/xdebug.sh b/vendor/fzaninotto/faker/.travis/xdebug.sh new file mode 100644 index 00000000..c3cebe3c --- /dev/null +++ b/vendor/fzaninotto/faker/.travis/xdebug.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# The problem is that we do not want to remove the configuration file, just disable it for a few tasks, then enable it +# +# For reference, see +# +# - https://docs.travis-ci.com/user/languages/php#Disabling-preinstalled-PHP-extensions +# - https://docs.travis-ci.com/user/languages/php#Custom-PHP-configuration + +config="/home/travis/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini" + +function xdebug-disable() { + if [[ -f $config ]]; then + mv $config "$config.bak" + fi +} + +function xdebug-enable() { + if [[ -f "$config.bak" ]]; then + mv "$config.bak" $config + fi +} diff --git a/vendor/fzaninotto/faker/CHANGELOG.md b/vendor/fzaninotto/faker/CHANGELOG.md index df218b00..d27a7bed 100644 --- a/vendor/fzaninotto/faker/CHANGELOG.md +++ b/vendor/fzaninotto/faker/CHANGELOG.md @@ -1,8 +1,120 @@ -CHANGELOG -========= +# CHANGELOG -2018-07-12, v1.8.0 ------------------- +## 2019-12-03, v1.9.1 + +- Add link to PHPStan extension to readme [\#1834](https://github.com/fzaninotto/Faker/pull/1834) ([finwe](https://github.com/finwe)) +- Enhancement: Collect code coverage [\#1824](https://github.com/fzaninotto/Faker/pull/1824) ([localheinz](https://github.com/localheinz)) +- Enhancement: Use all columns when running tests [\#1823](https://github.com/fzaninotto/Faker/pull/1823) ([localheinz](https://github.com/localheinz)) +- Enhancement: Configure verbose output via phpunit.xml.dist [\#1822](https://github.com/fzaninotto/Faker/pull/1822) ([localheinz](https://github.com/localheinz)) +- Curly braces for arrays is deprecated in PHP 7.4 [\#1843](https://github.com/fzaninotto/Faker/pull/1843) ([wimg](https://github.com/wimg)) +- Fix: Reduce visibility of setUp\(\) and tearDown\(\) [\#1821](https://github.com/fzaninotto/Faker/pull/1821) ([localheinz](https://github.com/localheinz)) +- Fix: Mark test classes as final [\#1820](https://github.com/fzaninotto/Faker/pull/1820) ([localheinz](https://github.com/localheinz)) +- Fix: Remove unnecessary class-level DocBlocks [\#1819](https://github.com/fzaninotto/Faker/pull/1819) ([localheinz](https://github.com/localheinz)) + +## 2019-11-10, v1.9.0 + +This will the last minor release in the `1.x` cycle. + +- Add all Iran's provinces land lines numbers [\#1806](https://github.com/fzaninotto/Faker/pull/1806) ([kingofnull](https://github.com/kingofnull)) +- replace latin "B" to cyrillic "B" for uk\_UA locale [\#1800](https://github.com/fzaninotto/Faker/pull/1800) ([FI-LIFE](https://github.com/FI-LIFE)) +- Add elgentos/masquerade to third-party library list [\#1798](https://github.com/fzaninotto/Faker/pull/1798) ([erikhansen](https://github.com/erikhansen)) +- Add link to Gravatar provider repository [\#1796](https://github.com/fzaninotto/Faker/pull/1796) ([ottaviano](https://github.com/ottaviano)) +- Add mobileNumber\(\) method for nb\_NO [\#1788](https://github.com/fzaninotto/Faker/pull/1788) ([carestad](https://github.com/carestad)) +- Enhancement: Slightly clean up Company provider [\#1783](https://github.com/fzaninotto/Faker/pull/1783) ([localheinz](https://github.com/localheinz)) +- Added some more information for autoloading in the readme [\#1780](https://github.com/fzaninotto/Faker/pull/1780) ([pimjansen](https://github.com/pimjansen)) +- Enhancement: Add issue template for bug report [\#1779](https://github.com/fzaninotto/Faker/pull/1779) ([localheinz](https://github.com/localheinz)) +- Add hslColor to ColorProvider [\#1776](https://github.com/fzaninotto/Faker/pull/1776) ([icanhazstring](https://github.com/icanhazstring)) +- Enhancement: Consistently use composer package name for link content [\#1770](https://github.com/fzaninotto/Faker/pull/1770) ([localheinz](https://github.com/localheinz)) +- Add Correct Thai words for streets,soi etc names and add Thai First a… [\#1769](https://github.com/fzaninotto/Faker/pull/1769) ([pierrejoye](https://github.com/pierrejoye)) +- Enhancement: Assert that postcode generated by Austrian Address provider matches format [\#1766](https://github.com/fzaninotto/Faker/pull/1766) ([localheinz](https://github.com/localheinz)) +- Enhancement: Update squizlabs/php\_codesniffer [\#1763](https://github.com/fzaninotto/Faker/pull/1763) ([localheinz](https://github.com/localheinz)) +- Enhancement: Assert that imageUrl can be used with gray flag [\#1762](https://github.com/fzaninotto/Faker/pull/1762) ([localheinz](https://github.com/localheinz)) +- Enhancement: Introduce build and help targets [\#1761](https://github.com/fzaninotto/Faker/pull/1761) ([localheinz](https://github.com/localheinz)) +- Enhancement: Disable Xdebug as early as possible [\#1758](https://github.com/fzaninotto/Faker/pull/1758) ([localheinz](https://github.com/localheinz)) +- Enhancement: Clean up .gitattributes [\#1756](https://github.com/fzaninotto/Faker/pull/1756) ([localheinz](https://github.com/localheinz)) +- Enhancement: Reference phpunit.xsd as installed with composer [\#1755](https://github.com/fzaninotto/Faker/pull/1755) ([localheinz](https://github.com/localheinz)) +- add id\_ID Color [\#1754](https://github.com/fzaninotto/Faker/pull/1754) ([cacing69](https://github.com/cacing69)) +- PHP 7.4 compatibility [\#1748](https://github.com/fzaninotto/Faker/pull/1748) ([pimjansen](https://github.com/pimjansen)) +- Add lastName gender specific on ru\_RU locale [\#1747](https://github.com/fzaninotto/Faker/pull/1747) ([aanfarhan](https://github.com/aanfarhan)) +- Update README - Add a new faker. [\#1731](https://github.com/fzaninotto/Faker/pull/1731) ([drupol](https://github.com/drupol)) +- Add faker-eddy-malou third-party library [\#1717](https://github.com/fzaninotto/Faker/pull/1717) ([Metrakit](https://github.com/Metrakit)) +- \[de\_DE\] Company\JobTitle: list of common german job titles [\#1716](https://github.com/fzaninotto/Faker/pull/1716) ([amacado](https://github.com/amacado)) +- Added 'red' to $safeColorNames [\#1701](https://github.com/fzaninotto/Faker/pull/1701) ([xfudox](https://github.com/xfudox)) +- \[pt\_PT/Address\] Add abbreviature to 'travessa' and 'largo' [\#1606](https://github.com/fzaninotto/Faker/pull/1606) ([simaolemos](https://github.com/simaolemos)) +- Fix method name for en\_NZ provider in readme [\#1595](https://github.com/fzaninotto/Faker/pull/1595) ([gdhnz](https://github.com/gdhnz)) +- Refactoring of the TextTest class [\#1590](https://github.com/fzaninotto/Faker/pull/1590) ([stevegrunwell](https://github.com/stevegrunwell)) +- add gender variants for last name \[lt\_LT\] [\#1586](https://github.com/fzaninotto/Faker/pull/1586) ([ikerasLT](https://github.com/ikerasLT)) +- add .id TLD [\#1566](https://github.com/fzaninotto/Faker/pull/1566) ([ad3n](https://github.com/ad3n)) +- Add Color provider to es\_ES locale [\#1559](https://github.com/fzaninotto/Faker/pull/1559) ([juananruiz](https://github.com/juananruiz)) +- Enhancement: Keep packages sorted in composer.json [\#1551](https://github.com/fzaninotto/Faker/pull/1551) ([localheinz](https://github.com/localheinz)) +- Portuguese providers for Companies and Internet [\#1537](https://github.com/fzaninotto/Faker/pull/1537) ([promatik](https://github.com/promatik)) +- Improve Dutch company names [\#1529](https://github.com/fzaninotto/Faker/pull/1529) ([koole](https://github.com/koole)) +- Document randomDigitNot base formatter. [\#1514](https://github.com/fzaninotto/Faker/pull/1514) ([shawnlindstrom](https://github.com/shawnlindstrom)) +- Estonian names [\#1461](https://github.com/fzaninotto/Faker/pull/1461) ([much-rebel](https://github.com/much-rebel)) +- add birthplace support for ID nik generator [\#1451](https://github.com/fzaninotto/Faker/pull/1451) ([mikk150](https://github.com/mikk150)) +- List of banks in Brazil added [\#1427](https://github.com/fzaninotto/Faker/pull/1427) ([diegohenicka](https://github.com/diegohenicka)) +- Remove last names from the male first names array \(et\_EE\) [\#1799](https://github.com/fzaninotto/Faker/pull/1799) ([Mihkel100](https://github.com/Mihkel100)) +- Update out-of-date currency codes [\#1795](https://github.com/fzaninotto/Faker/pull/1795) ([Brindster](https://github.com/Brindster)) +- Floor is not always returning an int [\#1790](https://github.com/fzaninotto/Faker/pull/1790) ([pimjansen](https://github.com/pimjansen)) +- typo [\#1789](https://github.com/fzaninotto/Faker/pull/1789) ([enumag](https://github.com/enumag)) +- Added batch inserts for doctrine orm populate [\#1781](https://github.com/fzaninotto/Faker/pull/1781) ([pimjansen](https://github.com/pimjansen)) +- FIx: Avoid deprecation warning in newer CakePHP version [\#1777](https://github.com/fzaninotto/Faker/pull/1777) ([icanhazstring](https://github.com/icanhazstring)) +- Fix: Consistently link to GitHub repositories [\#1774](https://github.com/fzaninotto/Faker/pull/1774) ([localheinz](https://github.com/localheinz)) +- Fix: Name of package [\#1772](https://github.com/fzaninotto/Faker/pull/1772) ([localheinz](https://github.com/localheinz)) +- Remove BV and HM country codes. [\#1767](https://github.com/fzaninotto/Faker/pull/1767) ([oliverpool](https://github.com/oliverpool)) +- Fix: Remove sudo configuration [\#1760](https://github.com/fzaninotto/Faker/pull/1760) ([localheinz](https://github.com/localheinz)) +- Fix: Allow nightly builds to fail [\#1759](https://github.com/fzaninotto/Faker/pull/1759) ([localheinz](https://github.com/localheinz)) +- Fix: No need to update composer itself [\#1757](https://github.com/fzaninotto/Faker/pull/1757) ([localheinz](https://github.com/localheinz)) +- duplicate first name and last name removal [\#1729](https://github.com/fzaninotto/Faker/pull/1729) ([sagautam5](https://github.com/sagautam5)) +- Fix-Isreal--Israel [\#1724](https://github.com/fzaninotto/Faker/pull/1724) ([GitEvil](https://github.com/GitEvil)) +- fix\(issue-1721\): add phpdoc method and properties annotations for php… [\#1722](https://github.com/fzaninotto/Faker/pull/1722) ([lugus](https://github.com/lugus)) +- Typo in function PHPDoc [\#1711](https://github.com/fzaninotto/Faker/pull/1711) ([Dzhuneyt](https://github.com/Dzhuneyt)) +- Fix: Add allowed type DateTime to param annotation [\#1697](https://github.com/fzaninotto/Faker/pull/1697) ([localheinz](https://github.com/localheinz)) +- Calling a non static method as static not allowed. [\#1696](https://github.com/fzaninotto/Faker/pull/1696) ([wilco-1985](https://github.com/wilco-1985)) +- Bug Fix en\_SG mobile number generation [\#1658](https://github.com/fzaninotto/Faker/pull/1658) ([ziming](https://github.com/ziming)) +- Update ja\_JP Address Provider [\#1649](https://github.com/fzaninotto/Faker/pull/1649) ([atmngw](https://github.com/atmngw)) +- Fixed realText on ja\_JP locale broken, /u missing [\#1634](https://github.com/fzaninotto/Faker/pull/1634) ([mihit](https://github.com/mihit)) +- Removed comma and space from $firstNameMale for en\_IN [\#1608](https://github.com/fzaninotto/Faker/pull/1608) ([phpspider](https://github.com/phpspider)) +- Prevent Transliterator class autoloading [\#1575](https://github.com/fzaninotto/Faker/pull/1575) ([MontealegreLuis](https://github.com/MontealegreLuis)) +- building numbers in Germany never start with a zero or are zero [\#1530](https://github.com/fzaninotto/Faker/pull/1530) ([fostam](https://github.com/fostam)) +- Fixing sk\_SK men last names set [\#1459](https://github.com/fzaninotto/Faker/pull/1459) ([pavoltanuska](https://github.com/pavoltanuska)) +- Taiwan ID. The initial letter must be a capital letter. p-\>P [\#1434](https://github.com/fzaninotto/Faker/pull/1434) ([slawa-dev](https://github.com/slawa-dev)) +- Revert "Added 'red' to $safeColorNames" [\#1778](https://github.com/fzaninotto/Faker/pull/1778) ([fzaninotto](https://github.com/fzaninotto)) +- Added realText capability for fr\_CA [\#1686](https://github.com/fzaninotto/Faker/pull/1686) ([bobanum](https://github.com/bobanum)) +- Add loremflickr.com Provider to the thrid parties [\#1683](https://github.com/fzaninotto/Faker/pull/1683) ([xvladxtremal](https://github.com/xvladxtremal)) +- Add Undeclared Faker Instance to PhoneNumber Test in en\_NG [\#1682](https://github.com/fzaninotto/Faker/pull/1682) ([thearsalan](https://github.com/thearsalan)) +- PSR-2 updates to readme [\#1679](https://github.com/fzaninotto/Faker/pull/1679) ([b3none](https://github.com/b3none)) +- PHPDoc for `passthrough` function on Generator [\#1678](https://github.com/fzaninotto/Faker/pull/1678) ([tabakhase](https://github.com/tabakhase)) +- Make en\_CA Phone Provider Extend the en\_US One [\#1676](https://github.com/fzaninotto/Faker/pull/1676) ([darrylhein](https://github.com/darrylhein)) +- Add Valid National Code Generator to fa\_IR Person [\#1675](https://github.com/fzaninotto/Faker/pull/1675) ([thearsalan](https://github.com/thearsalan)) +- Updated readme.md: added a missing backslash [\#1673](https://github.com/fzaninotto/Faker/pull/1673) ([aubryfr](https://github.com/aubryfr)) +- Add 'Faker\Provider\en\_US\Company::catchPhrase' to ru\_RU locale [\#1668](https://github.com/fzaninotto/Faker/pull/1668) ([axklim](https://github.com/axklim)) +- Update deprecated \PHPUnit\_Framework\_TestCase with PHPUnit\Framework\TestCase [\#1664](https://github.com/fzaninotto/Faker/pull/1664) ([thewhit](https://github.com/thewhit)) +- Support populating Doctrine's immutable date types [\#1639](https://github.com/fzaninotto/Faker/pull/1639) ([voronkovich](https://github.com/voronkovich)) +- add titleMale and titleFemale method to all Person classes [\#1635](https://github.com/fzaninotto/Faker/pull/1635) ([RiverDanceGit](https://github.com/RiverDanceGit)) +- Minor typo fix [\#1631](https://github.com/fzaninotto/Faker/pull/1631) ([nhedger](https://github.com/nhedger)) +- Add link to er1z/fakemock [\#1622](https://github.com/fzaninotto/Faker/pull/1622) ([er1z](https://github.com/er1z)) +- Add Dutch \(nl\_NL\) job titles [\#1618](https://github.com/fzaninotto/Faker/pull/1618) ([SjorsO](https://github.com/SjorsO)) +- Exclude files and folder from release archive [\#1617](https://github.com/fzaninotto/Faker/pull/1617) ([ankurk91](https://github.com/ankurk91)) +- Update doc block [\#1615](https://github.com/fzaninotto/Faker/pull/1615) ([ankurk91](https://github.com/ankurk91)) +- Suggest PSR-4 compliant autoloader in comment [\#1614](https://github.com/fzaninotto/Faker/pull/1614) ([samnela](https://github.com/samnela)) +- Fix dateTimeBetween\(\) Argument on Generator phpdoc [\#1583](https://github.com/fzaninotto/Faker/pull/1583) ([hisomura](https://github.com/hisomura)) +- Fix Dutch typo [\#1580](https://github.com/fzaninotto/Faker/pull/1580) ([gizburdt](https://github.com/gizburdt)) +- Old city names changed to new ones [\#1578](https://github.com/fzaninotto/Faker/pull/1578) ([goszowski](https://github.com/goszowski)) +- Correct documentation [\#1571](https://github.com/fzaninotto/Faker/pull/1571) ([rquadling](https://github.com/rquadling)) +- Make $suffix protected not private in nl\_NL\Person provider [\#1561](https://github.com/fzaninotto/Faker/pull/1561) ([SpadXIII](https://github.com/SpadXIII)) +- Add PicsumPhotos Provider to the thrid parties [\#1560](https://github.com/fzaninotto/Faker/pull/1560) ([bluemmb](https://github.com/bluemmb)) +- fix austrian postal codes starting with invalid 0 [\#1545](https://github.com/fzaninotto/Faker/pull/1545) ([mpge](https://github.com/mpge)) +- Restore a random seed when the Generator is destroyed [\#1534](https://github.com/fzaninotto/Faker/pull/1534) ([lyrixx](https://github.com/lyrixx)) +- Add a swiss social security number \(AVS13\) generator [\#1533](https://github.com/fzaninotto/Faker/pull/1533) ([nhedger](https://github.com/nhedger)) +- Small tweaks [\#1526](https://github.com/fzaninotto/Faker/pull/1526) ([carusogabriel](https://github.com/carusogabriel)) +- fix ukraine first name person, delete space [\#1525](https://github.com/fzaninotto/Faker/pull/1525) ([Yasuslik](https://github.com/Yasuslik)) +- Removed unknown postcode [\#1440](https://github.com/fzaninotto/Faker/pull/1440) ([ayanozturk](https://github.com/ayanozturk)) +- Add more PhoneNumber options for es\_ES [\#1219](https://github.com/fzaninotto/Faker/pull/1219) ([driade](https://github.com/driade)) +- Fix duplication in uk\_UA male first names [\#1214](https://github.com/fzaninotto/Faker/pull/1214) ([fre5h](https://github.com/fre5h)) +- Added missing grayscale option/flag to Image provider [\#928](https://github.com/fzaninotto/Faker/pull/928) ([sebastianvilla](https://github.com/sebastianvilla)) + +## 2018-07-12, v1.8.0 - Typo in readme [\#1521](https://github.com/fzaninotto/Faker/pull/1521) ([jmhobbs](https://github.com/jmhobbs)) - Replaced Hilll with Hill [\#1516](https://github.com/fzaninotto/Faker/pull/1516) ([MarkVaughn](https://github.com/MarkVaughn)) @@ -81,8 +193,7 @@ CHANGELOG - Added idNumber for nl\_NL [\#1283](https://github.com/fzaninotto/Faker/pull/1283) ([artorozenga](https://github.com/artorozenga)) - Feature/en us company ein [\#1273](https://github.com/fzaninotto/Faker/pull/1273) ([zachflower](https://github.com/zachflower)) -2017-08-15, v1.7.0 ------------------- +## 2017-08-15, v1.7.0 - Added more Ukrainian banks [\#1271](https://github.com/fzaninotto/Faker/pull/1271) ([iamraccoon](https://github.com/iamraccoon)) - Hotfix/failing unit tests [\#1269](https://github.com/fzaninotto/Faker/pull/1269) ([zachflower](https://github.com/zachflower)) @@ -215,8 +326,7 @@ CHANGELOG - Fix Doctrine ODM Support [\#489](https://github.com/fzaninotto/Faker/pull/489) ([cbourgois](https://github.com/cbourgois)) -2016-04-29, v1.6.0 ------------------- +## 2016-04-29, v1.6.0 - Remove parts of the Hungarian (hu\_HU) address formatters [\#902](https://github.com/fzaninotto/Faker/pull/902) ([fzaninotto](https://github.com/fzaninotto)) - Renamed norwegian (nb\_NO) locale [\#901](https://github.com/fzaninotto/Faker/pull/901) ([fzaninotto](https://github.com/fzaninotto)) @@ -347,8 +457,7 @@ CHANGELOG - Updated `optional` and `boolean` apis to be more consistent [\#513](https://github.com/fzaninotto/Faker/pull/513) ([EmanueleMinotto](https://github.com/EmanueleMinotto)) - Added Greek (el\_GR) `Address` provider [\#504](https://github.com/fzaninotto/Faker/pull/504) ([drakakisgeo](https://github.com/drakakisgeo)) -2015-05-29, v1.5.0 ------------------- +## 2015-05-29, v1.5.0 * Added ability to print custom text on the images fetched by the Image provider [\#583](https://github.com/fzaninotto/Faker/pull/583) ([fzaninotto](https://github.com/fzaninotto)) * Fixed typos in Peruvian (es\_PE) Person provider [\#581](https://github.com/fzaninotto/Faker/pull/581) [\#580](https://github.com/fzaninotto/Faker/pull/580) ([ysramirez](https://github.com/ysramirez)) @@ -458,8 +567,7 @@ CHANGELOG * Added English for New Zealand (en\_NZ) locale [\#283](https://github.com/fzaninotto/Faker/pull/283) ([JasonMortonNZ](https://github.com/JasonMortonNZ)) * Added mention of external Provider for cron expressions to readme[\#498](https://github.com/fzaninotto/Faker/pull/498) ([swekaj](https://github.com/swekaj)) -2014-06-04, v1.4.0 ------------------- +## 2014-06-04, v1.4.0 * Fixed typo in Slovak person names (cinan) * Added tests for uk_UA providers (serge-kuharev) @@ -522,8 +630,7 @@ CHANGELOG * Added 'kana' (ja_JP) name formatters (kzykhys) * Added allow_failure for hhvm to travis-ci and test against php 5.5 (toin0u) -2013-12-16, v1.3.0 ------------------- +## 2013-12-16, v1.3.0 * Fixed state generator in Australian (en_AU) provider (sebklaus) * Fixed IDE insights for locale specific providers (ulrikjohansson) @@ -570,9 +677,7 @@ CHANGELOG * Added Color provider with hexColor, rgbColor, rgbColorAsArray, rgbCssColor, safeColorName, and colorName formatters (lsv) * Added support for associative arrays in `randomElement` (aRn0D) - -2013-06-09, v1.2.0 ------------------- +## 2013-06-09, v1.2.0 * Added new provider for fr_BE locale (jflefebvre) * Updated locale provider to use a static locale list (spawn-guy) @@ -617,8 +722,7 @@ CHANGELOG * Fixed bug in Doctrine EntityPopulator (beberlei) * Added Finnish (fi_FI) provider (drodil) -2012-10-29, v1.1.0 ------------------- +## 2012-10-29, v1.1.0 * Updated text provider to return paragraphs as a string instead of array. Great for populating markdown textarea fields (Seldaek) * Updated dateTimeBetween to accept DateTime instances (Seldaek) @@ -635,7 +739,6 @@ CHANGELOG * Added latitude and longitude formatters to Address provider (fixe) * Added Serbian provider (umpirsky) -2012-07-10, v1.0.0 ------------------ +## 2012-07-10, v1.0.0 * Initial Version diff --git a/vendor/fzaninotto/faker/CONTRIBUTING.md b/vendor/fzaninotto/faker/CONTRIBUTING.md deleted file mode 100644 index 804bf79c..00000000 --- a/vendor/fzaninotto/faker/CONTRIBUTING.md +++ /dev/null @@ -1,22 +0,0 @@ -Contributing -============ - -If you've written a new formatter, adapted Faker to a new locale, or fixed a bug, your contribution is welcome! - -Before proposing a pull request, check the following: - -* Your code should follow the [PSR-2 coding standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md). Run `make sniff` to check that the coding standards are followed, and use [php-cs-fixer](https://github.com/fabpot/PHP-CS-Fixer) to fix inconsistencies. -* Unit tests should still pass after your patch. Run the tests on your dev server (with `make test`) or check the continuous integration status for your pull request. -* As much as possible, add unit tests for your code -* Never use `rand()` in your providers. Faker uses the Mersenne Twister Randomizer, so use `mt_rand()` or any of the base generators (`randomNumber`, `randomElement`, etc.) instead. -* If you add new providers (or new locales) and that they embed a lot of data for random generation (e.g. first names in a new language), please add a `@link` to the reference you used for this list (example [in the ru_RU locale](https://github.com/fzaninotto/Faker/blob/master/src/Faker/Provider/ru_RU/Person.php#L13)). This will ease future updates of the list and debates about the most relevant data for this provider. -* If you add long list of random data, please split the list into several lines. This makes diffs easier to read, and facilitates core review. -* If you add new formatters, please include documentation for it in the README. Don't forget to add a line about new formatters in the `@property` or `@method` phpDoc entries in [Generator.php](https://github.com/fzaninotto/Faker/blob/master/src/Faker/Generator.php#L6-L118) to help IDEs auto-complete your formatters. -* If your new formatters are specific to a certain locale, document them in the [Language-specific formatters](https://github.com/fzaninotto/Faker#language-specific-formatters) list instead. -* Avoid changing existing sets of data. Some developers use Faker with seeding for unit tests ; changing the data makes their tests fail. -* Speed is important in all Faker usages. Make sure your code is optimized to generate thousands of fake items in no time, without consuming too much memory or CPU. -* If you commit a new feature, be prepared to help maintaining it. Watch the project on GitHub, and please comment on issues or PRs regarding the feature you contributed. - -Once your code is merged, it is available for free to everybody under the MIT License. Publishing your Pull Request on the Faker GitHub repository means that you agree with this license for your contribution. - -Thank you for your contribution! Faker wouldn't be so great without you. diff --git a/vendor/fzaninotto/faker/Makefile b/vendor/fzaninotto/faker/Makefile deleted file mode 100644 index ccfde5cd..00000000 --- a/vendor/fzaninotto/faker/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -vendor/autoload.php: - composer install --no-interaction --prefer-dist - -.PHONY: sniff -sniff: vendor/autoload.php - vendor/bin/phpcs --standard=PSR2 src -n - -.PHONY: test -test: vendor/autoload.php - vendor/bin/phpunit --verbose diff --git a/vendor/fzaninotto/faker/composer.json b/vendor/fzaninotto/faker/composer.json index e52016ee..acf673ec 100644 --- a/vendor/fzaninotto/faker/composer.json +++ b/vendor/fzaninotto/faker/composer.json @@ -2,7 +2,11 @@ "name": "fzaninotto/faker", "type": "library", "description": "Faker is a PHP library that generates fake data for you.", - "keywords": ["faker", "fixtures", "data"], + "keywords": [ + "faker", + "fixtures", + "data" + ], "license": "MIT", "authors": [ { @@ -13,9 +17,9 @@ "php": "^5.3.3 || ^7.0" }, "require-dev": { + "ext-intl": "*", "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^1.5", - "ext-intl": "*" + "squizlabs/php_codesniffer": "^2.9.2" }, "autoload": { "psr-4": { @@ -29,7 +33,10 @@ }, "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.9-dev" } + }, + "config": { + "sort-packages": true } } diff --git a/vendor/fzaninotto/faker/phpunit.xml.dist b/vendor/fzaninotto/faker/phpunit.xml.dist deleted file mode 100644 index 4ffa17f3..00000000 --- a/vendor/fzaninotto/faker/phpunit.xml.dist +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - ./test/Faker/ - - - diff --git a/vendor/fzaninotto/faker/readme.md b/vendor/fzaninotto/faker/readme.md index c3754901..1c0659ce 100644 --- a/vendor/fzaninotto/faker/readme.md +++ b/vendor/fzaninotto/faker/readme.md @@ -1,5 +1,7 @@ # Faker +[![Code Coverage](https://codecov.io/gh/fzaninotto/Faker/branch/master/graph/badge.svg)](https://codecov.io/gh/fzaninotto/Faker) + Faker is a PHP library that generates fake data for you. Whether you need to bootstrap your database, create good-looking XML documents, fill-in your persistence to stress test it, or anonymize data taken from a production service, Faker is for you. Faker is heavily inspired by Perl's [Data::Faker](http://search.cpan.org/~jasonk/Data-Faker-0.07/), and by ruby's [Faker](https://rubygems.org/gems/faker). @@ -51,14 +53,29 @@ composer require fzaninotto/faker ## Basic Usage +### Autoloading + +Faker supports both `PSR-0` as `PSR-4` autoloaders. +```php +name` yields ```php name, "\n"; } // Adaline Reichel @@ -103,6 +120,7 @@ Each of the generator properties (like `name`, `address`, and `lorem`) are calle ### `Faker\Provider\Base` randomDigit // 7 + randomDigitNot(5) // 0, 1, 2, 3, 4, 6, 7, 8, or 9 randomDigitNotNull // 5 randomNumber($nbDigits = NULL, $strict = false) // 79907610 randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL) // 48.8932 @@ -250,6 +268,8 @@ Methods accepting a `$timezone` argument default to `date_default_timezone_get() rgbCssColor // 'rgb(0,255,122)' safeColorName // 'fuchsia' colorName // 'Gainsbor' + hslColor // '340,50,20' + hslColorAsArray // array(340,50,20) ### `Faker\Provider\File` @@ -265,7 +285,7 @@ Methods accepting a `$timezone` argument default to `date_default_timezone_get() imageUrl($width = 640, $height = 480) // 'http://lorempixel.com/640/480/' imageUrl($width, $height, 'cats') // 'http://lorempixel.com/800/600/cats/' imageUrl($width, $height, 'cats', true, 'Faker') // 'http://lorempixel.com/800/400/cats/Faker' - imageUrl($width, $height, 'cats', true, 'Faker', true) // 'http://lorempixel.com/grey/800/400/cats/Faker/' Monochrome image + imageUrl($width, $height, 'cats', true, 'Faker', true) // 'http://lorempixel.com/gray/800/400/cats/Faker/' Monochrome image image($dir = '/tmp', $width = 640, $height = 480) // '/tmp/13b73edae8443990be1aa8f1a483bc27.jpg' image($dir, $width, $height, 'cats') // 'tmp/13b73edae8443990be1aa8f1a483bc27.jpg' it's a cat! image($dir, $width, $height, 'cats', false) // '13b73edae8443990be1aa8f1a483bc27.jpg' it's a filename without path @@ -314,7 +334,7 @@ Faker provides three special providers, `unique()`, `optional()`, and `valid()`, ```php // unique() forces providers to return unique values $values = array(); -for ($i=0; $i < 10; $i++) { +for ($i = 0; $i < 10; $i++) { // get a random digit, but always a new one, to avoid duplicates $values []= $faker->unique()->randomDigit; } @@ -323,7 +343,7 @@ print_r($values); // [4, 1, 8, 5, 0, 2, 6, 9, 7, 3] // providers with a limited range will throw an exception when no new unique value can be generated $values = array(); try { - for ($i=0; $i < 10; $i++) { + for ($i = 0; $i < 10; $i++) { $values []= $faker->unique()->randomDigitNotNull; } } catch (\OverflowException $e) { @@ -336,7 +356,7 @@ $faker->unique($reset = true)->randomDigitNotNull; // will not throw OverflowExc // optional() sometimes bypasses the provider to return a default value instead (which defaults to NULL) $values = array(); -for ($i=0; $i < 10; $i++) { +for ($i = 0; $i < 10; $i++) { // get a random digit, but also null sometimes $values []= $faker->optional()->randomDigit; } @@ -357,7 +377,7 @@ $values = array(); $evenValidator = function($digit) { return $digit % 2 === 0; }; -for ($i=0; $i < 10; $i++) { +for ($i = 0; $i < 10; $i++) { $values []= $faker->valid($evenValidator)->randomDigit; } print_r($values); // [0, 4, 8, 4, 2, 6, 0, 8, 8, 6] @@ -384,7 +404,7 @@ $faker->optional()->passthrough(mt_rand(5, 15)); ```php name, "\n"; } // Luce du Coulon @@ -407,12 +427,15 @@ Faker provides adapters for Object-Relational and Object-Document Mappers (curre To populate entities, create a new populator class (using a generator instance as parameter), then list the class and number of all the entities that must be generated. To launch the actual data population, call the `execute()` method. +Note that some of the `populators` could require additional parameters. As example the `doctrine` populator has an option to specify +its batchSize on how often it will flush the UnitOfWork to the database. + Here is an example showing how to populate 5 `Author` and 10 `Book` objects: ```php addEntity('Author', 5); $populator->addEntity('Book', 10); $insertedPKs = $populator->execute(); @@ -450,6 +473,8 @@ print_r($insertedPKs); // ) ``` +**Note:** Due to the fact that `Faker` returns all the primary keys inserted, the memory consumption will go up drastically when you do batch inserts due to the big list of data. + In the previous example, the `Book` and `Author` models share a relationship. Since `Author` entities are populated first, Faker is smart enough to relate the populated `Book` entities to one of the populated `Author` entities. Lastly, if you want to execute an arbitrary function on an entity before insertion, use the fourth argument of the `addEntity()` method: @@ -567,7 +592,7 @@ $faker = Faker\Factory::create(); ?> - + boolean(25)): ?> @@ -859,6 +884,15 @@ echo $faker->cvr; // "32458723" echo $faker->p; // "5398237590" ``` +### `Faker\Provider\de_CH\Person` +```php +avs13; // "756.1234.5678.97" OR +echo $faker->ahv13; // "756.1234.5678.97" +``` + ### `Faker\Provider\de_DE\Payment` ```php @@ -925,7 +959,7 @@ echo $faker->name; // 'Oluwunmi Mayowa' cellNumber; // "021 123 4567" +echo $faker->mobileNumber; // "021 123 4567" // Generates a toll free number echo $faker->tollFreeNumber; // "0800 123 456" @@ -1014,6 +1048,18 @@ echo $faker->licenceCode; // B echo $faker->vat; // "A35864370" ``` +### `Faker\Provider\es_ES\PhoneNumber` + +```php +tollFreeNumber; // 900 123 456 + +// Generates a mobile phone number +echo $faker->mobileNumber; // +34 612 12 24 +``` + ### `Faker\Provider\es_PE\Person` ```php @@ -1023,6 +1069,15 @@ echo $faker->vat; // "A35864370" echo $faker->dni; // '83367512' ``` +### `Faker\Provider\fa_IR\Person` + +```php +nationalCode; // "0078475759" +``` + ### `Faker\Provider\fa_IR\Address` ```php @@ -1092,6 +1147,14 @@ echo $faker->nationalId; // 'V11223344' echo $faker->taxpayerIdentificationNumber; // 'J1234567891' ``` +### `Faker\Provider\fr_CH\Person` +```php +avs13; // "756.1234.5678.97" +``` + ### `Faker\Provider\fr_FR\Address` ```php @@ -1192,6 +1255,14 @@ echo $faker->bankAccountNumber; // "HU09904437680048220079300783" echo $faker->nik(); // "8522246001570940" ``` +### `Faker\Provider\it_CH\Person` +```php +avs13; // "756.1234.5678.97" +``` + ### `Faker\Provider\it_IT\Company` ```php @@ -1412,6 +1483,7 @@ echo $faker->rrn('female'); // "50032089858" - Belgian Rijksregisternummer for a ```php jobTitle; // "Houtbewerker" echo $faker->vat; // "NL123456789B01" - Dutch Value Added Tax number echo $faker->btw; // "NL123456789B01" - Dutch Value Added Tax number (alias) ``` @@ -1424,6 +1496,17 @@ echo $faker->btw; // "NL123456789B01" - Dutch Value Added Tax number (alias) echo $faker->idNumber; // "111222333" - Dutch Personal identification number (BSN) ``` +### `Faker\Provider\nb_NO\MobileNumber` + +```php +mobileNumber; // "+4799988777" +echo $faker->mobileNumber; // "999 88 777" +echo $faker->mobileNumber; // "99988777" +``` + ### `Faker\Provider\nb_NO\Payment` ```php @@ -1678,30 +1761,38 @@ echo $faker->VAT; //23456789 ## Third-Party Libraries Extending/Based On Faker -* Symfony2 bundles: - * [BazingaFakerBundle](https://github.com/willdurand/BazingaFakerBundle): Put the awesome Faker library into the Symfony2 DIC and populate your database with fake data. - * [AliceBundle](https://github.com/hautelook/AliceBundle), [AliceFixturesBundle](https://github.com/h4cc/AliceFixturesBundle): Bundles for using [Alice](https://packagist.org/packages/nelmio/alice) and Faker with data fixtures. Able to use Doctrine ORM as well as Doctrine MongoDB ODM. -* [FakerServiceProvider](https://github.com/EmanueleMinotto/FakerServiceProvider): Faker Service Provider for Silex -* [faker-cli](https://github.com/bit3/faker-cli): Command Line Tool for the Faker PHP library -* [Factory Muffin](https://github.com/thephpleague/factory-muffin): enable the rapid creation of objects (PHP port of factory-girl) -* [CompanyNameGenerator](https://github.com/fzaninotto/CompanyNameGenerator): Generate names for English tech companies with class -* [PlaceholdItProvider](https://github.com/EmanueleMinotto/PlaceholdItProvider): Generate images using placehold.it -* [datalea](https://github.com/spyrit/datalea) A highly customizable random test data generator web app -* [newage-ipsum](https://github.com/frequenc1/newage-ipsum): A new aged ipsum provider for the faker library inspired by http://sebpearce.com/bullshit/ -* [xml-faker](https://github.com/prewk/xml-faker): Create fake XML with Faker -* [faker-context](https://github.com/denheck/faker-context): Behat context using Faker to generate testdata -* [CronExpressionGenerator](https://github.com/swekaj/CronExpressionGenerator): Faker provider for generating random, valid cron expressions. -* [pragmafabrik/Pomm2Faker](https://github.com/pragmafabrik/Pomm2Faker): Faker client for Pomm database framework (PostgreSQL) -* [nelmio/alice](https://packagist.org/packages/nelmio/alice): Fixtures/object generator with a yaml DSL that can use Faker as data generator. -* [CakePHP 2.x Fake Seeder Plugin](https://github.com/ravage84/cakephp-fake-seeder) A CakePHP 2.x shell to seed your database with fake and/or fixed data. -* [images-generator](https://github.com/bruceheller/images-generator): An image generator provider using GD for placeholder type pictures -* [pattern-lab/plugin-php-faker](https://github.com/pattern-lab/plugin-php-faker): Pattern Lab is a Styleguide, Component Library, and Prototyping tool. This creates unique content each time Pattern Lab is generated. -* [guidocella/eloquent-populator](https://github.com/guidocella/eloquent-populator): Adapter for Laravel's Eloquent ORM. -* [tamperdata/exiges](https://github.com/tamperdata/exiges): Faker provider for generating random temperatures -* [jzonta/FakerRestaurant](https://github.com/jzonta/FakerRestaurant): Faker for Food and Beverage names generate -* [aalaap/faker-youtube](https://github.com/aalaap/faker-youtube): Faker for YouTube URLs in various formats -* [pelmered/fake-car](https://github.com/pelmered/fake-car): Faker for cars and car data +* Symfony bundles: + * [`willdurand/faker-bundle`](https://github.com/willdurand/BazingaFakerBundle): Put the awesome Faker library into the Symfony2 DIC and populate your database with fake data. + * [`hautelook/alice-bundle`](https://github.com/hautelook/AliceBundle), [`h4cc/alice-fixtures-bundle`](https://github.com/h4cc/AliceFixturesBundle): Bundles for using [`nelmio/alice`](https://packagist.org/packages/nelmio/alice) and Faker with data fixtures. Able to use Doctrine ORM as well as Doctrine MongoDB ODM. +* [`emanueleminotto/faker-service-provider`](https://github.com/EmanueleMinotto/FakerServiceProvider): Faker Service Provider for Silex +* [`bit3/faker-cli`](https://github.com/bit3/faker-cli): Command Line Tool for the Faker PHP library +* [`league/factory-muffin`](https://github.com/thephpleague/factory-muffin): enable the rapid creation of objects (PHP port of factory-girl) +* [`fzaninotto/company-name-generator`](https://github.com/fzaninotto/CompanyNameGenerator): Generate names for English tech companies with class +* [`emanueleminotto/faker-placehold-it-provider`](https://github.com/EmanueleMinotto/PlaceholdItProvider): Generate images using placehold.it +* [`spyrit/datalea`](https://github.com/spyrit/datalea) A highly customizable random test data generator web app +* [`frequenc1/newage-ipsum`](https://github.com/frequenc1/newage-ipsum): A new aged ipsum provider for the faker library inspired by http://sebpearce.com/bullshit/ +* [`prewk/xml-faker`](https://github.com/prewk/xml-faker): Create fake XML with Faker +* [`denheck/faker-context`](https://github.com/denheck/faker-context): Behat context using Faker to generate testdata +* [`swekaj/cron-expression-generator`](https://github.com/swekaj/CronExpressionGenerator): Faker provider for generating random, valid cron expressions. +* [`pragmafabrik/pomm-faker`](https://github.com/pragmafabrik/Pomm2Faker): Faker client for Pomm database framework (PostgreSQL) +* [`nelmio/alice`](https://github.com/nelmio/alice): Fixtures/object generator with a yaml DSL that can use Faker as data generator. +* [`ravage84/cakephp-fake-seeder`](https://github.com/ravage84/cakephp-fake-seeder) A CakePHP 2.x shell to seed your database with fake and/or fixed data. +* [`bheller/images-generator`](https://github.com/bruceheller/images-generator): An image generator provider using GD for placeholder type pictures +* [`pattern-lab/plugin-faker`](https://github.com/pattern-lab/plugin-php-faker): Pattern Lab is a Styleguide, Component Library, and Prototyping tool. This creates unique content each time Pattern Lab is generated. +* [`guidocella/eloquent-populator`](https://github.com/guidocella/eloquent-populator): Adapter for Laravel's Eloquent ORM. +* [`tamperdata/exiges`](https://github.com/tamperdata/exiges): Faker provider for generating random temperatures +* [`jzonta/faker-restaurant`](https://github.com/jzonta/FakerRestaurant): Faker for Food and Beverage names generate +* [`aalaap/faker-youtube`](https://github.com/aalaap/faker-youtube): Faker for YouTube URLs in various formats +* [`pelmered/fake-car`](https://github.com/pelmered/fake-car): Faker for cars and car data +* [`bluemmb/faker-picsum-photos-provider`](https://github.com/bluemmb/Faker-PicsumPhotos): Generate images using [picsum.photos](http://picsum.photos/) +* [`er1z/fakemock`](https://github.com/er1z/fakemock): Generate mocks using class-configuration and detection via Faker's guesser and Symfony asserts +* [`xvladqt/faker-lorem-flickr`](https://github.com/xvladxtremal/Faker-LoremFlickr): Generate images using [loremflickr.com](http://loremflickr.com/) +* [`metrakit/faker-eddy-malou`](https://github.com/Metrakit/faker-eddy-malou): Generate French Eddy Malou sentences & paragraphs +* [`drupol/belgian-national-number-faker`](https://github.com/drupol/belgian-national-number-faker): Generate fake Belgian national numbers +* [`elgentos/masquerade`](https://github.com/elgentos/masquerade): Configuration-based, platform-agnostic, locale-compatible data faker tool (out-of-the-box support for Magento 2) +* [`ottaviano/faker-gravatar`](https://github.com/ottaviano/faker-gravatar): Generate avatars using [Gravatar](https://en.gravatar.com/site/implement/images/) +* [`finwe/phpstan-faker`](https://github.com/finwe/phpstan-faker): PHPStan extension for Faker methods ## License -Faker is released under the MIT Licence. See the bundled LICENSE file for details. +Faker is released under the MIT License. See the bundled LICENSE file for details. diff --git a/vendor/fzaninotto/faker/src/Faker/Calculator/Ean.php b/vendor/fzaninotto/faker/src/Faker/Calculator/Ean.php new file mode 100644 index 00000000..a1e0c076 --- /dev/null +++ b/vendor/fzaninotto/faker/src/Faker/Calculator/Ean.php @@ -0,0 +1,55 @@ += 0; $i -= 2) { + $even += $digits[$i]; + } + + $odd = 0; + for ($i = $length - 2; $i >= 0; $i -= 2) { + $odd += $digits[$i]; + } + + return (10 - ((3 * $even + $odd) % 10)) % 10; + } + + /** + * Checks whether the provided number is an EAN compliant number and that + * the checksum is correct. + * + * @param string $ean An EAN number + * @return boolean + */ + public static function isValid($ean) + { + if (!preg_match(self::PATTERN, $ean)) { + return false; + } + + return self::checksum(substr($ean, 0, -1)) === intval(substr($ean, -1)); + } +} diff --git a/vendor/fzaninotto/faker/src/Faker/Calculator/Luhn.php b/vendor/fzaninotto/faker/src/Faker/Calculator/Luhn.php index c37c6c19..1cb71a16 100644 --- a/vendor/fzaninotto/faker/src/Faker/Calculator/Luhn.php +++ b/vendor/fzaninotto/faker/src/Faker/Calculator/Luhn.php @@ -24,10 +24,10 @@ class Luhn $length = strlen($number); $sum = 0; for ($i = $length - 1; $i >= 0; $i -= 2) { - $sum += $number{$i}; + $sum += $number[$i]; } for ($i = $length - 2; $i >= 0; $i -= 2) { - $sum += array_sum(str_split($number{$i} * 2)); + $sum += array_sum(str_split($number[$i] * 2)); } return $sum % 10; diff --git a/vendor/fzaninotto/faker/src/Faker/Generator.php b/vendor/fzaninotto/faker/src/Faker/Generator.php index 0a4e0502..1db2608e 100644 --- a/vendor/fzaninotto/faker/src/Faker/Generator.php +++ b/vendor/fzaninotto/faker/src/Faker/Generator.php @@ -21,8 +21,10 @@ namespace Faker; * @property string $city * @property string $streetName * @property string $streetAddress + * @property string $secondaryAddress * @property string $postcode * @property string $address + * @property string $state * @property string $country * @property float $latitude * @property float $longitude @@ -33,6 +35,7 @@ namespace Faker; * @property string $isbn10 * * @property string $phoneNumber + * @property string $e164PhoneNumber * * @property string $company * @property string $companySuffix @@ -52,6 +55,7 @@ namespace Faker; * @property string $word * @property string|array $words * @method string|array words($nb = 3, $asText = false) + * @method string word() * @property string $sentence * @method string sentence($nbWords = 6, $variableNbWords = true) * @property string|array $sentences @@ -113,7 +117,7 @@ namespace Faker; * @method string year($max = 'now') * @method \DateTime dateTime($max = 'now', $timezone = null) * @method \DateTime dateTimeAd($max = 'now', $timezone = null) - * @method \DateTime dateTimeBetween($startDate = '-30 years', $endDate = 'now') + * @method \DateTime dateTimeBetween($startDate = '-30 years', $endDate = 'now', $timezone = null) * @method \DateTime dateTimeInInterval($date = '-30 years', $interval = '+5 days', $timezone = null) * @method \DateTime dateTimeThisCentury($max = 'now', $timezone = null) * @method \DateTime dateTimeThisDecade($max = 'now', $timezone = null) @@ -132,6 +136,7 @@ namespace Faker; * @method boolean boolean($chanceOfGettingTrue = 50) * * @property int $randomDigit + * @property int $randomDigitNot * @property int $randomDigitNotNull * @property string $randomLetter * @property string $randomAscii @@ -154,6 +159,7 @@ namespace Faker; * @method Generator optional($weight = 0.5, $default = null) * @method Generator unique($reset = false, $maxRetries = 10000) * @method Generator valid($validator = null, $maxRetries = 10000) + * @method mixed passthrough($passthrough) * * @method integer biasedNumberBetween($min = 0, $max = 100, $function = 'sqrt') * @@ -278,4 +284,14 @@ class Generator { return $this->format($method, $attributes); } + + public function __destruct() + { + $this->seed(); + } + + public function __wakeup() + { + $this->formatters = []; + } } diff --git a/vendor/fzaninotto/faker/src/Faker/ORM/CakePHP/ColumnTypeGuesser.php b/vendor/fzaninotto/faker/src/Faker/ORM/CakePHP/ColumnTypeGuesser.php index 0b871ed7..0aa34130 100644 --- a/vendor/fzaninotto/faker/src/Faker/ORM/CakePHP/ColumnTypeGuesser.php +++ b/vendor/fzaninotto/faker/src/Faker/ORM/CakePHP/ColumnTypeGuesser.php @@ -42,7 +42,11 @@ class ColumnTypeGuesser return $generator->uuid(); }; case 'string': - $columnData = $schema->column($column); + if (method_exists($schema, 'getColumn')) { + $columnData = $schema->getColumn($column); + } else { + $columnData = $schema->column($column); + } $length = $columnData['length']; return function () use ($generator, $length) { return $generator->text($length); diff --git a/vendor/fzaninotto/faker/src/Faker/ORM/Doctrine/ColumnTypeGuesser.php b/vendor/fzaninotto/faker/src/Faker/ORM/Doctrine/ColumnTypeGuesser.php index 824f8c03..bd608f96 100644 --- a/vendor/fzaninotto/faker/src/Faker/ORM/Doctrine/ColumnTypeGuesser.php +++ b/vendor/fzaninotto/faker/src/Faker/ORM/Doctrine/ColumnTypeGuesser.php @@ -67,6 +67,12 @@ class ColumnTypeGuesser return function () use ($generator) { return $generator->datetime; }; + case 'datetime_immutable': + case 'date_immutable': + case 'time_immutable': + return function () use ($generator) { + return \DateTimeImmutable::createFromMutable($generator->datetime); + }; default: // no smart way to guess what the user expects here return null; diff --git a/vendor/fzaninotto/faker/src/Faker/ORM/Doctrine/Populator.php b/vendor/fzaninotto/faker/src/Faker/ORM/Doctrine/Populator.php index d4fe897c..d4c5dfb8 100644 --- a/vendor/fzaninotto/faker/src/Faker/ORM/Doctrine/Populator.php +++ b/vendor/fzaninotto/faker/src/Faker/ORM/Doctrine/Populator.php @@ -3,6 +3,7 @@ namespace Faker\ORM\Doctrine; use Doctrine\Common\Persistence\ObjectManager; +use Faker\Generator; /** * Service class for populating a database using the Doctrine ORM or ODM. @@ -10,20 +11,35 @@ use Doctrine\Common\Persistence\ObjectManager; */ class Populator { + /** @var int */ + protected $batchSize; + + /** @var Generator */ protected $generator; + + /** @var ObjectManager|null */ protected $manager; + + /** @var array */ protected $entities = array(); + + /** @var array */ protected $quantities = array(); + + /** @var array */ protected $generateId = array(); /** - * @param \Faker\Generator $generator + * Populator constructor. + * @param Generator $generator * @param ObjectManager|null $manager + * @param int $batchSize */ - public function __construct(\Faker\Generator $generator, ObjectManager $manager = null) + public function __construct(Generator $generator, ObjectManager $manager = null, $batchSize = 1000) { $this->generator = $generator; $this->manager = $manager; + $this->batchSize = $batchSize; } /** @@ -55,6 +71,9 @@ class Populator /** * Populate the database using all the Entity classes previously added. * + * Please note that large amounts of data will result in more memory usage since the the Populator will return + * all newly created primary keys after executing. + * * @param null|EntityManager $entityManager A Doctrine connection object * * @return array A list of the inserted PKs @@ -72,9 +91,18 @@ class Populator foreach ($this->quantities as $class => $number) { $generateId = $this->generateId[$class]; for ($i=0; $i < $number; $i++) { - $insertedEntities[$class][]= $this->entities[$class]->execute($entityManager, $insertedEntities, $generateId); + $insertedEntities[$class][]= $this->entities[$class]->execute( + $entityManager, + $insertedEntities, + $generateId + ); + if (count($insertedEntities) % $this->batchSize === 0) { + $entityManager->flush(); + $entityManager->clear($class); + } } $entityManager->flush(); + $entityManager->clear($class); } return $insertedEntities; diff --git a/vendor/fzaninotto/faker/src/Faker/ORM/Spot/EntityPopulator.php b/vendor/fzaninotto/faker/src/Faker/ORM/Spot/EntityPopulator.php index ba5bddb5..bc27e7b0 100644 --- a/vendor/fzaninotto/faker/src/Faker/ORM/Spot/EntityPopulator.php +++ b/vendor/fzaninotto/faker/src/Faker/ORM/Spot/EntityPopulator.php @@ -141,7 +141,6 @@ class EntityPopulator foreach ($relations as $relation) { // We don't need any other relation here. if ($relation instanceof BelongsTo) { - $fieldName = $relation->localKey(); $entityName = $relation->entityName(); $field = $fields[$fieldName]; @@ -162,14 +161,12 @@ class EntityPopulator if (empty($records)) { return null; } - $id = $records[mt_rand(0, count($records) - 1)]['id']; - return $id; + return $records[mt_rand(0, count($records) - 1)]['id']; } return null; }; - } } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/Base.php b/vendor/fzaninotto/faker/src/Faker/Provider/Base.php index fa321ee0..6765c805 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/Base.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/Base.php @@ -173,7 +173,7 @@ class Base /** * Returns randomly ordered subsequence of $count elements from a provided array * - * @param array $array Array to take elements from. Defaults to a-f + * @param array $array Array to take elements from. Defaults to a-c * @param integer $count Number of elements to take. * @param boolean $allowDuplicates Allow elements to be picked several times. Defaults to false * @throws \LengthException When requesting more elements than provided @@ -492,7 +492,7 @@ class Base // All A-F inside of [] become ABCDEF $regex = preg_replace_callback('/\[([^\]]+)\]/', function ($matches) { return '[' . preg_replace_callback('/(\w|\d)\-(\w|\d)/', function ($range) { - return implode(range($range[1], $range[2]), ''); + return implode('', range($range[1], $range[2])); }, $matches[1]) . ']'; }, $regex); // All [ABC] become B (or A or C) @@ -590,10 +590,10 @@ class Base * * $values = array(); * $evenValidator = function ($digit) { - * return $digit % 2 === 0; + * return $digit % 2 === 0; * }; * for ($i=0; $i < 10; $i++) { - * $values []= $faker->valid($evenValidator)->randomDigit; + * $values []= $faker->valid($evenValidator)->randomDigit; * } * print_r($values); // [0, 4, 8, 4, 2, 6, 0, 8, 8, 6] * diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/Biased.php b/vendor/fzaninotto/faker/src/Faker/Provider/Biased.php index b9e3f082..d37dceff 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/Biased.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/Biased.php @@ -26,7 +26,7 @@ class Biased extends Base $y = mt_rand() / (mt_getrandmax() + 1); } while (call_user_func($function, $x) < $y); - return floor($x * ($max - $min + 1) + $min); + return (int) floor($x * ($max - $min + 1) + $min); } /** diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/Color.php b/vendor/fzaninotto/faker/src/Faker/Provider/Color.php index 0eb5cb9a..209d7228 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/Color.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/Color.php @@ -113,4 +113,31 @@ class Color extends Base { return static::randomElement(static::$allColorNames); } + + /** + * @example '340,50,20' + * @return string + */ + public static function hslColor() + { + return sprintf( + '%s,%s,%s', + static::numberBetween(0, 360), + static::numberBetween(0, 100), + static::numberBetween(0, 100) + ); + } + + /** + * @example array(340, 50, 20) + * @return array + */ + public static function hslColorAsArray() + { + return array( + static::numberBetween(0, 360), + static::numberBetween(0, 100), + static::numberBetween(0, 100) + ); + } } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/Company.php b/vendor/fzaninotto/faker/src/Faker/Provider/Company.php index 2d11397f..d536d48e 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/Company.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/Company.php @@ -16,6 +16,8 @@ class Company extends Base /** * @example 'Acme Ltd' + * + * @return string */ public function company() { @@ -26,6 +28,8 @@ class Company extends Base /** * @example 'Ltd' + * + * @return string */ public static function companySuffix() { @@ -34,6 +38,8 @@ class Company extends Base /** * @example 'Job' + * + * @return string */ public function jobTitle() { diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/DateTime.php b/vendor/fzaninotto/faker/src/Faker/Provider/DateTime.php index fb0f474b..bde7f251 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/DateTime.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/DateTime.php @@ -9,7 +9,7 @@ class DateTime extends Base protected static $defaultTimezone = null; /** - * @param string|float|int $max + * @param \DateTime|string|float|int $max * @return int|false */ protected static function getMaxTimestamp($max = 'now') @@ -147,7 +147,7 @@ class DateTime extends Base * an interval * Accepts date string that can be recognized by strtotime(). * - * @param string $date Defaults to 30 years ago + * @param \DateTime|string $date Defaults to 30 years ago * @param string $interval Defaults to 5 days after * @param string|null $timezone time zone in which the date time should be set, default to DateTime::$defaultTimezone, if set, otherwise the result of `date_default_timezone_get` * @example dateTimeInInterval('1999-02-02 11:42:52', '+ 5 days') diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/HtmlLorem.php b/vendor/fzaninotto/faker/src/Faker/Provider/HtmlLorem.php index b4b2ec16..6219bc89 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/HtmlLorem.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/HtmlLorem.php @@ -83,14 +83,14 @@ class HtmlLorem extends Base $this->addRandomAttribute($sibling); $this->addRandomSubTree($sibling, mt_rand(0, $maxDepth), $maxWidth); } - }; + } return $root; } private function addRandomLeaf(\DOMElement $node) { $rand = mt_rand(1, 10); - switch($rand){ + switch ($rand) { case 1: $this->addRandomP($node); break; @@ -172,7 +172,6 @@ class HtmlLorem extends Base $node = $element->ownerDocument->createElement($h); $node->appendChild($text); $element->appendChild($node); - } private function addRandomB(\DOMElement $element, $maxLength = 10) diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/Image.php b/vendor/fzaninotto/faker/src/Faker/Provider/Image.php index 0458ceb9..14f1b397 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/Image.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/Image.php @@ -61,7 +61,7 @@ class Image extends Base * * @example '/path/to/dir/13b73edae8443990be1aa8f1a483bc27.jpg' */ - public static function image($dir = null, $width = 640, $height = 480, $category = null, $fullPath = true, $randomize = true, $word = null) + public static function image($dir = null, $width = 640, $height = 480, $category = null, $fullPath = true, $randomize = true, $word = null, $gray = false) { $dir = is_null($dir) ? sys_get_temp_dir() : $dir; // GNU/Linux / OS X / Windows compatible // Validate directory path @@ -75,7 +75,7 @@ class Image extends Base $filename = $name .'.jpg'; $filepath = $dir . DIRECTORY_SEPARATOR . $filename; - $url = static::imageUrl($width, $height, $category, $randomize, $word); + $url = static::imageUrl($width, $height, $category, $randomize, $word, $gray); // save file if (function_exists('curl_exec')) { diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/Internet.php b/vendor/fzaninotto/faker/src/Faker/Provider/Internet.php index f299fa2c..2eaa2f6a 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/Internet.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/Internet.php @@ -175,7 +175,7 @@ class Internet extends Base } $words = $this->generator->words($nbWords); - return join($words, '-'); + return join('-', $words); } /** @@ -233,7 +233,7 @@ class Internet extends Base } $transId = 'Any-Latin; Latin-ASCII; NFD; [:Nonspacing Mark:] Remove; NFC;'; - if (class_exists('Transliterator') && $transliterator = \Transliterator::create($transId)) { + if (class_exists('Transliterator', false) && $transliterator = \Transliterator::create($transId)) { $transString = $transliterator->transliterate($string); } else { $transString = static::toAscii($string); diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/Lorem.php b/vendor/fzaninotto/faker/src/Faker/Provider/Lorem.php index 6356ebfc..b8c6dac2 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/Lorem.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/Lorem.php @@ -92,7 +92,7 @@ class Lorem extends Base $words = static::words($nbWords); $words[0] = ucwords($words[0]); - return implode($words, ' ') . '.'; + return implode(' ', $words) . '.'; } /** @@ -131,7 +131,7 @@ class Lorem extends Base $nbSentences = self::randomizeNbElements($nbSentences); } - return implode(static::sentences($nbSentences), ' '); + return implode(' ', static::sentences($nbSentences)); } /** @@ -193,7 +193,7 @@ class Lorem extends Base $text[count($text) - 1] .= '.'; } - return implode($text, ''); + return implode('', $text); } protected static function randomizeNbElements($nbElements) diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/Miscellaneous.php b/vendor/fzaninotto/faker/src/Faker/Provider/Miscellaneous.php index 55586d11..4f669c92 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/Miscellaneous.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/Miscellaneous.php @@ -61,28 +61,28 @@ class Miscellaneous extends Base 'AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', - 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', - 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', - 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', - 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', - 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', - 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', - 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', - 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', - 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', - 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', - 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', - 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', - 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', - 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', - 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', - 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', - 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', - 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', - 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', - 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', - 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', - 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW', + 'BR', 'BS', 'BT', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', + 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', + 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', + 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', + 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', + 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', + 'GU', 'GW', 'GY', 'HK', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', + 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', + 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', + 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', + 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', + 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', + 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', + 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', + 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', + 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', + 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', + 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', + 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', + 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', + 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', + 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW', ); /** @@ -202,7 +202,7 @@ class Miscellaneous extends Base /** * @link https://en.wikipedia.org/wiki/ISO_4217 - * On date of 2017-07-07 + * On date of 2019-09-27 * * With the following exceptions: * SVC has been replaced by the USD in 2001: https://en.wikipedia.org/wiki/Salvadoran_col%C3%B3n @@ -218,12 +218,12 @@ class Miscellaneous extends Base 'ILS', 'INR', 'IQD', 'IRR', 'ISK', 'JMD', 'JOD', 'JPY', 'KES', 'KGS', 'KHR', 'KMF', 'KPW', 'KRW', 'KWD', 'KYD', 'KZT', 'LAK', 'LBP', 'LKR', 'LRD', 'LSL', 'LYD', 'MAD', 'MDL', 'MGA', 'MKD', 'MMK', 'MNT', 'MOP', - 'MRO', 'MUR', 'MVR', 'MWK', 'MXN', 'MYR', 'MZN', 'NAD', 'NGN', 'NIO', + 'MRU', 'MUR', 'MVR', 'MWK', 'MXN', 'MYR', 'MZN', 'NAD', 'NGN', 'NIO', 'NOK', 'NPR', 'NZD', 'OMR', 'PAB', 'PEN', 'PGK', 'PHP', 'PKR', 'PLN', 'PYG', 'QAR', 'RON', 'RSD', 'RUB', 'RWF', 'SAR', 'SBD', 'SCR', 'SDG', - 'SEK', 'SGD', 'SHP', 'SLL', 'SOS', 'SRD', 'SSP', 'STD', 'SYP', 'SZL', + 'SEK', 'SGD', 'SHP', 'SLL', 'SOS', 'SRD', 'SSP', 'STN', 'SYP', 'SZL', 'THB', 'TJS', 'TMT', 'TND', 'TOP', 'TRY', 'TTD', 'TWD', 'TZS', 'UAH', - 'UGX', 'USD', 'UYU', 'UZS', 'VEF', 'VND', 'VUV', 'WST', 'XAF', 'XCD', + 'UGX', 'USD', 'UYU', 'UZS', 'VES', 'VND', 'VUV', 'WST', 'XAF', 'XCD', 'XOF', 'XPF', 'YER', 'ZAR', 'ZMW', ); diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/Text.php b/vendor/fzaninotto/faker/src/Faker/Provider/Text.php index db8c800a..80aa02fc 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/Text.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/Text.php @@ -21,7 +21,7 @@ abstract class Text extends Base * @example 'Alice, swallowing down her flamingo, and began by taking the little golden key' * @param integer $maxNbChars Maximum number of characters the text should contain (minimum: 10) * @param integer $indexSize Determines how many words are considered for the generation of the next word. - * The minimum is 1, and it produces the higher level of randomness, although the + * The minimum is 1, and it produces a higher level of randomness, although the * generated text usually doesn't make sense. Higher index sizes (up to 5) * produce more correct text, at the price of less randomness. * @return string diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/Uuid.php b/vendor/fzaninotto/faker/src/Faker/Provider/Uuid.php index ea5ecf1e..ae5fc86d 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/Uuid.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/Uuid.php @@ -10,7 +10,8 @@ class Uuid extends Base */ public static function uuid() { - // fix for compatibility with 32bit architecture; seed range restricted to 62bit + // fix for compatibility with 32bit architecture; each mt_rand call is restricted to 32bit + // two such calls will cause 64bits of randomness regardless of architecture $seed = mt_rand(0, 2147483647) . '#' . mt_rand(0, 2147483647); // Hash the seed and convert to a byte array diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/ar_JO/Company.php b/vendor/fzaninotto/faker/src/Faker/Provider/ar_JO/Company.php index fc10726a..34a1e17b 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/ar_JO/Company.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/ar_JO/Company.php @@ -45,7 +45,7 @@ class Company extends \Faker\Provider\Company $result[] = static::randomElement($word); } - return join($result, ' '); + return join(' ', $result); } /** @@ -58,6 +58,6 @@ class Company extends \Faker\Provider\Company $result[] = static::randomElement($word); } - return join($result, ' '); + return join(' ', $result); } } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/ar_SA/Company.php b/vendor/fzaninotto/faker/src/Faker/Provider/ar_SA/Company.php index 596add89..a02f3274 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/ar_SA/Company.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/ar_SA/Company.php @@ -47,7 +47,7 @@ class Company extends \Faker\Provider\Company $result[] = static::randomElement($word); } - return join($result, ' '); + return join(' ', $result); } /** @@ -60,7 +60,7 @@ class Company extends \Faker\Provider\Company $result[] = static::randomElement($word); } - return join($result, ' '); + return join(' ', $result); } /** diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/at_AT/Payment.php b/vendor/fzaninotto/faker/src/Faker/Provider/at_AT/Payment.php index 11792b4e..caf8133b 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/at_AT/Payment.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/at_AT/Payment.php @@ -24,7 +24,7 @@ class Payment extends \Faker\Provider\Payment */ public static function vat($spacedNationalPrefix = true) { - $prefix = ($spacedNationalPrefix) ? "AT U" : "ATU"; + $prefix = $spacedNationalPrefix ? "AT U" : "ATU"; return sprintf("%s%d", $prefix, self::randomNumber(8, true)); } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/bg_BG/Payment.php b/vendor/fzaninotto/faker/src/Faker/Provider/bg_BG/Payment.php index a65870b4..b9381693 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/bg_BG/Payment.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/bg_BG/Payment.php @@ -31,7 +31,7 @@ class Payment extends \Faker\Provider\Payment */ public static function vat($spacedNationalPrefix = true) { - $prefix = ($spacedNationalPrefix) ? "BG " : "BG"; + $prefix = $spacedNationalPrefix ? "BG " : "BG"; return sprintf( "%s%d%d", diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/de_AT/Address.php b/vendor/fzaninotto/faker/src/Faker/Provider/de_AT/Address.php index 861f6fcd..4a2272ca 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/de_AT/Address.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/de_AT/Address.php @@ -13,7 +13,18 @@ class Address extends \Faker\Provider\Address 'gasse', 'platz', 'ring', 'straße', 'weg', ); - protected static $postcode = array('####'); + // As per https://en.wikipedia.org/wiki/List_of_postal_codes_in_Austria (@todo implement more strict postal code values according to wikipedia) + protected static $postcode = array( + '1###', + '2###', + '3###', + '4###', + '5###', + '6###', + '7###', + '8###', + '9###', + ); protected static $cityNames = array( 'Allentsteig', 'Altheim', 'Althofen', 'Amstetten', 'Ansfelden', 'Attnang-Puchheim', diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/de_CH/Person.php b/vendor/fzaninotto/faker/src/Faker/Provider/de_CH/Person.php index afbdb997..ce9493e3 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/de_CH/Person.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/de_CH/Person.php @@ -86,4 +86,32 @@ class Person extends \Faker\Provider\de_DE\Person 'Wagner', 'Walker', 'Walser', 'Weber', 'Wehrli', 'Weibel', 'Weiss', 'Wenger', 'Wicki', 'Widmer', 'Willi', 'Wirth', 'Wirz', 'Wittwer', 'Wolf', 'Wyss', 'Wüthrich', 'Zaugg', 'Zbinden', 'Zehnder', 'Ziegler', 'Zimmermann', 'Zwahlen', 'Zürcher', ); + + /** + * Generates a valid random AVS13 (swiss social security) number + * + * This function acts as a localized alias for the function defined in the + * fr_CH provider. In the german-speaking part of Switzerland, the AVS13 + * number is generally known as AHV13. + * + * @see \Faker\Provider\fr_CH\Person::avs13() + * @return string + */ + public static function ahv13() + { + return \Faker\Provider\fr_CH\Person::avs13(); + } + + /** + * Generates a valid random AVS13 (swiss social security) number + * + * This function acts as an alias for the function defined in the fr_CH provider. + * + * @see \Faker\Provider\fr_CH\Person::avs13() + * @return string + */ + public static function avs13() + { + return \Faker\Provider\fr_CH\Person::avs13(); + } } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/de_DE/Address.php b/vendor/fzaninotto/faker/src/Faker/Provider/de_DE/Address.php index eff738d0..84f6a300 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/de_DE/Address.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/de_DE/Address.php @@ -4,7 +4,7 @@ namespace Faker\Provider\de_DE; class Address extends \Faker\Provider\Address { - protected static $buildingNumber = array('###', '##', '#', '#/#', '##[abc]', '#[abc]'); + protected static $buildingNumber = array('%##', '%#', '%', '%/%', '%#[abc]', '%[abc]'); protected static $streetSuffixLong = array( 'Gasse', 'Platz', 'Ring', 'Straße', 'Weg', 'Allee' diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/de_DE/Company.php b/vendor/fzaninotto/faker/src/Faker/Provider/de_DE/Company.php index 9843511e..8137d47a 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/de_DE/Company.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/de_DE/Company.php @@ -11,5 +11,14 @@ class Company extends \Faker\Provider\Company '{{lastName}}', ); + /** + * @link http://www.personalseite.de/information/titel.htm + */ + protected static $jobTitleFormat = array( + 'Abteilungsdirektor', 'Arbeitsdirektor', 'Aufsichtsrat', 'Beirat', 'Bereichsleiter', 'Betriebsleiter', 'Finanzvorstand', 'Geschäftsführender Gesellschafter', 'Geschäftsführer', 'Gesellschafter', + 'Handlungsbevollmächtigter', 'Kaufmännischer Vorstand', 'Leiter Rechtsabteilung', 'Mitglied des Aufsichtsrats', 'Personalleiter', 'Prokurist', 'Sellvertretender Vorsitzender des Vorstandes', + 'Vorsitzender der Geschäftsführung', 'Vorsitzender des Aufsichtsrats', 'Vorsitzender des Vorstandes', 'Vorstand Personal', 'Vorstand Technik', 'Vorstand Vertrieb', 'Vorstandsmitglied', 'Werksleiter' + ); + protected static $companySuffix = array('e.G.', 'e.V.', 'GbR', 'GbR', 'OHG mbH', 'GmbH & Co. OHG', 'AG & Co. OHG', 'GmbH', 'GmbH', 'GmbH', 'GmbH', 'AG', 'AG', 'AG', 'AG', 'KG', 'KG', 'KG', 'GmbH & Co. KG', 'GmbH & Co. KG', 'AG & Co. KG', 'Stiftung & Co. KG', 'KGaA', 'GmbH & Co. KGaA', 'AG & Co. KGaA', 'Stiftung & Co. KGaA'); } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/en_CA/PhoneNumber.php b/vendor/fzaninotto/faker/src/Faker/Provider/en_CA/PhoneNumber.php index fc4f9248..76e0e724 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/en_CA/PhoneNumber.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/en_CA/PhoneNumber.php @@ -2,7 +2,7 @@ namespace Faker\Provider\en_CA; -class PhoneNumber extends \Faker\Provider\PhoneNumber +class PhoneNumber extends \Faker\Provider\en_US\PhoneNumber { protected static $formats = array( '%##-###-####', diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/en_GB/Address.php b/vendor/fzaninotto/faker/src/Faker/Provider/en_GB/Address.php index 52fef8d3..5d733d3f 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/en_GB/Address.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/en_GB/Address.php @@ -31,9 +31,9 @@ class Address extends \Faker\Provider\Address 'L40 4LA','LU7 4SW','WV99 1RG','EC3P 3AY','CW5 6DY','CR2 8EN','PO11 0JY','IP33 9GD','WA3 3UR','WD3 3LY','CT6 7HL','TN15 8JE', 'L35 5JA','CF23 0EL','TR13 0DP','GL14 2NW','W1D 4PR','SY5 0AR','NP4 8LA','CH45 7RH','S35 4FX','PL20 6JB','NW1 6AB','AB41 7HB', 'S72 7HG','RG27 8PG','TA1 3TF','FK3 8EP','MK43 7LX','BT79 7AQ','L9 9BL','PE28 5US','PO4 8NU','WF4 3QZ','SE23 3RG','NN5 7AR', - 'L15 6UE','CA4 9QG','RH9 8DR','KT18 5DN','AB11 5QE','L2 2TX','NE20 0RB','TF3 2BG','NW2 2SH','IG10 3JT','HR9 7GB','N10 3DS', - 'PA3 4NH','W8 7EY','HP19 9BW','KA1 3TU','SE26 6JG','SL3 9LU','L38 9EB','M15 6QL','BN6 8DA','PE27 5PP','LS16 8EE','AB15 4YR', - 'CM0 7HA','SY11 4LB','IG1 3TR','NE63 8EL','CR5 3DN','NW4 4XL','BL9 6QT','KT24 6NU','EH37 5TF','SO16 9RJ','B62 8RS','PL28 8QJ', + 'L15 6UE','CA4 9QG','RH9 8DR','AB11 5QE','L2 2TX','NE20 0RB','TF3 2BG','NW2 2SH','IG10 3JT','HR9 7GB','N10 3DS', + 'PA3 4NH','W8 7EY','HP19 9BW','KA1 3TU','SE26 6JG','SL3 9LU','L38 9EB','M15 6QL','BN6 8DA','PE27 5PP','LS16 8EE', + 'CM0 7HA','SY11 4LB','IG1 3TR','NE63 8EL','CR5 3DN','NW4 4XL','BL9 6QT','KT24 6NU','EH37 5TF','SO16 9RJ','PL28 8QJ', 'E9 5LR','BR6 9XJ','M25 3BY','M20 1BT','SE18 7QX','DD1 2NF','NR31 8NS','BH31 6AF','TN23 5PR','TN12 9PU','HR8 2JJ','KT6 5DX', 'HX3 0NS','SN7 8NR','SY7 8AQ','CV8 1LS','NR34 9ET','BD23 3EU','YO11 3JN','BH11 9NE','CM3 3AE','KA3 7PR','DE15 9DU','PR8 9LB', 'GL53 7EN','OX15 4HW','TS19 9ES','G65 9BG','SE15 6FE','B37 7RA','BT51 3NQ','YO32 9SX','M50 3TU','LL14 5NR','PO35 5XS','W5 9TG', diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/en_IN/Person.php b/vendor/fzaninotto/faker/src/Faker/Provider/en_IN/Person.php index 09287082..fbf97c7c 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/en_IN/Person.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/en_IN/Person.php @@ -36,7 +36,7 @@ class Person extends \Faker\Provider\Person 'Kartik', 'Koushtubh', 'Kirti', 'Kushal', 'Kailash', 'Kalyan', 'Krishna', 'Kamlesh', 'Kalpit', 'Kabeer', 'Karim', 'Lalit', 'Lakshmi', 'Labeen', 'Mohan', 'Mukund', 'Mohan', 'Mohit', 'Manish', 'Moti', 'Mowgli', 'Mohanlal', 'Mitesh', 'Manoj', 'Monin', 'Mahmood', 'Malik', 'Mehul', 'Mustafa', 'Manpreet', 'Mukul', 'Munaf', 'Marlo', - 'Nitin', 'Nayan', 'Naresh', 'Neerendra', 'Nirmal', 'Narayan', 'Nakul', 'Naval', 'Natwar', 'Naseer', 'Nazir', 'Nawab, ', + 'Nitin', 'Nayan', 'Naresh', 'Neerendra', 'Nirmal', 'Narayan', 'Nakul', 'Naval', 'Natwar', 'Naseer', 'Nazir', 'Nawab', 'Parveen', 'Pravin', 'Pranab', 'Prabhat', 'Pradeep', 'Prasoon', 'Preet', 'Pranay', 'Parvez', 'Pirzada', 'Peter', 'Omar', 'Obaid', 'Owais', 'Qabeel', 'Qabool', 'Qadim', diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/en_NG/Person.php b/vendor/fzaninotto/faker/src/Faker/Provider/en_NG/Person.php index 1e171435..eb5e12a8 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/en_NG/Person.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/en_NG/Person.php @@ -1,7 +1,5 @@ + */ +class Person extends \Faker\Provider\Person +{ + /** + * @link https://news.err.ee/114745/most-popular-baby-names-of-2014 + * @link https://www.stat.ee/public/apps/nimed/TOP + */ + protected static $firstNameMale = array( + "Andrei", "Aleksei", "Andres", "Alexander", "Aivar", "Aleksander", "Artur", "Andrus", "Ants", "Artjom", "Anatoli", "Anton", "Arvo", "Aare", "Ain", "Aleksandr", + "Dmitri", "Daniil", "Daniel", + "Eduard", "Erik", "Enn", + "Fjodorov", + "Gennadi", + "Heino", "Henri", "Hugo", + "Igor", "Indrek", "Ivan", "Ilja", + "Jüri", "Jaan", "Jevgeni", "Jaanus", "Janek", "Jaak", + "Kristjan", "Kalev", "Karl", "Kalle", "Kaido", "Kevin", "Konstantin", "Kaspar", "Kirill", "Kristo", "Kalju", "Kristofer", + "Lauri", "Lembit", "Laur", + "Martin", "Margus", "Maksim", "Marko", "Mati", "Meelis", "Mihhail", "Marek", "Mihkel", "Mart", "Madis", "Markus", "Mark", "Marten", + "Nikolai", "Nikita", "Nikolay", + "Oleg", "Oliver", "Oskar", + "Peeter", "Priit", "Pavel", + "Rein", "Roman", "Raivo", "Rasmus", "Raul", "Robert", "Riho", "Robin", "Romet", + "Sergei", "Sander", "Sergey", "Siim", "Silver", "Sebastian", + "Toomas", "Tarmo", "Tõnu", "Tiit", "Tanel", "Taavi", "Toivo", "Tõnis", + "Urmas", "Ülo", + "Vladimir", "Viktor", "Valeri", "Vello", "Vadim", "Vitali", "Vladislav", "Vjatšeslav", "Victor", + ); + + /** + * @link https://news.err.ee/114745/most-popular-baby-names-of-2014 + * @link https://www.stat.ee/public/apps/nimed/TOP + */ + protected static $firstNameFemale = array( + "Aino", "Aleksandra", "Alisa", "Anastasia", "Anna", "Anne", "Anneli", "Anu", "Arina", "Annika", "Anastassia", "Alla", "Aili", "Alina", "Aime", "Antonina", + "Darja", "Diana", + "Elena", "Eliise", "Elisabeth", "Emma", "Ene", "Eve", "Eha", "Evi", + "Galina", + "Hanna", "Helen", "Heli", "Helle", "Helgi", + "Irina", "Inna", "Ingrid", + "Jekaterina", "Jelena", "Julia", "Jana", + "Kadri", "Katrin", "Kristi", "Kristiina", "Kristina", "Karin", "Kersti", "Kristel", "Kaja", "Külli", "Kätlin", "Krista", + "Laura", "Lenna", "Liisa", "Linda", "Lisandra", "Ljubov", "Ljudmila", "Liina", "Ljudmilla", "Larissa", "Liis", "Lea", "Laine", "Liudmila", + "Maie", "Malle", "Mare", "Maria", "Marina", "Marleen", "Marta", "Merike", "Mia", "Milana", "Mirtel", "Marika", "Merle", "Margit", "Milvi", "Maire", "Margarita", "Mari", "Maarja", + "Natalia", "Niina", "Nora", "Natalja", "Nadežda", "Nina", + "Olga", "Oksana", + "Piret", "Polina", "Pille", + "Reet", "Riina", + "Sandra", "Sirje", "Sofia", "Svetlana", "Silvi", + "Tamara", "Tatiana", "Tiina", "Tiiu", "Triin", "Tatjana", "Tiia", + "Ülle", "Urve", + "Valentina", "Viktoria", "Veera", "Veronika", "Vaike", + "Zinaida", + ); + + /** + * @link https://en.wikipedia.org/wiki/Category:Estonian-language_surnames + * @link https://www.stat.ee/public/apps/nimed/pere/TOP + */ + protected static $lastName = array( + "Aleksejev", "Andrejev", "Allik", "Aas", "Aleksandrov", "Aare", "Aarma", "Aas", "Aasmäe", "Aav", "Aavik", "Allik", "Alver", "Andrejeva", "Aleksejeva", "Aleksandrova", "Allik", "Aas", + "Bogdanova", "Bogdanov", + "Eenpalu", "Eskola", + "Fjodorov", "Fjodorov", "Fjodorova", "Fjodorova", + "Grigorjev", "Grigorjeva", + "Hunt", "Hein", "Hein", "Härma", + "Ivanov", "Ilves", "Ilves", "Ivanov", "Ivanova", "Ivanova", "Ilves", + "Jõgi", "Jakobson", "Jakovlev", "Jürgenson", "Jegorov", "Järv", "Johanson", "Järve", "Jakobson", "Jänes", "Järve", "Järvis", "Jõgi", "Jõgi", "Johanson", "Jürgenson", "Järv", "Jakovleva", "Jegorova", "Järve", "Jakobson", + "Kuzmina", "Kalda", "Kozlova", "Kruus", "Kask", "Kukk", "Kuznetsov", "Koppel", "Kaasik", "Kuusk", "Karu", "Kütt", "Kallas", "Kivi", "Kangur", "Kuusik", "Kõiv", "Kozlov", "Kull", "Kuzmin", "Kalda", "Kaaleste", "Kaasik", "Käbin", "Kalda", "Kaljulaid", "Kaljurand", "Kallas", "Kallaste", "Kangro", "Kangur", "Kapp", "Kärner", "Karu", "Kask", "Käsper", "Kass", "Keres", "Keskküla", "Kesküla", "Kikkas", "Kingsepp", "Kirs", "Kirsipuu", "Kivi", "Klavan", "Kõiv", "Kokk", "Kontaveit", "Koppel", "Korjus", "Kotkas", "Kreek", "Kross", "Kruus", "Kukk", "Kull", "Kütt", "Kuusik", "Kuusk", "Kuznetsov", "Kuznetsova", "Kask", "Kukk", "Kuznetsova", "Koppel", "Kaasik", "Kuusk", "Karu", "Kütt", "Kallas", "Kivi", "Kuusik", "Kangur", "Kõiv", "Kull", + "Luik", "Lepik", "Lepp", "Lõhmus", "Liiv", "Laur", "Leppik", "Lebedev", "Laas", "Laar", "Laht", "Lass", "Laur", "Laurits", "Lemsalu", "Lepik", "Lepmets", "Lepp", "Leppik", "Levandi", "Liiv", "Lill", "Lindmaa", "Linna", "Lipp", "Lippmaa", "Lõhmus", "Loo", "Lõoke", "Luik", "Luts", "Luik", "Lepik", "Lepp", "Lõhmus", "Laur", "Liiv", "Leppik", "Lebedeva", "Laas", + "Männik", "Mänd", "Mitt", "Makarova", "Mägi", "Mets", "Mihhailov", "Mölder", "Morozov", "Mitt", "Männik", "Mõttus", "Mänd", "Makarov", "Mägi", "Mälk", "Mänd", "Männik", "Margiste", "Mark", "Masing", "Mets", "Mihhailov", "Mihhailova", "Mölder", "Must", "Mägi", "Mets", "Mihhailova", "Mölder", "Morozova", + "Nikolajev", "Nõmm", "Nikitin", "Novikov", "Nõmmik", "Nurme", "Nurmsalu", "Nõmm", "Nikitina", "Nikolajeva", + "Orlova", "Orav", "Oja", "Ots", "Orav", "Orlov", "Oja", "Olesk", "Öpik", "Orav", "Ots", "Oja", "Ots", + "Petrov", "Pärn", "Põder", "Pavlov", "Popov", "Peterson", "Puusepp", "Paju", "Põld", "Pukk", "Paas", "Palm", "Pääsuke", "Padar", "Pärn", "Pavlov", "Pavlova", "Peebo", "Peetre", "Peterson", "Petrov", "Petrova", "Pihlak", "Piho", "Piip", "Põder", "Põld", "Popov", "Popova", "Poska", "Puhvel", "Pütsep", "Puusepp", "Petrova", "Pärn", "Pavlova", "Põder", "Peterson", "Popova", "Puusepp", "Paas", "Paju", "Pukk", "Parts", "Palm", "Põld", + "Romanova", "Rand", "Roos", "Rebane", "Raudsepp", "Raud", "Rand", "Roos", "Rätsep", "Raag", "Raud", "Raudsepp", "Rebane", "Reek", "Reinsalu", "Rooba", "Roolaid", "Rootare", "Rummo", "Rüütel", "Rüütli", "Rebane", "Raudsepp", "Raud", + "Saar", "Sepp", "Smirnov", "Stepanov", "Semjonov", "Sokolov", "Sild", "Sarapuu", "Saks", "Saar", "Salumäe", "Semjonov", "Sepp", "Sibul", "Siimar", "Simm", "Sirel", "Sisask", "Smirnov", "Smirnova", "Sokk", "Sokolov", "Soosaar", "Stepanov", "Stepanova", "Susi", "Saar", "Sepp", "Smirnova", "Stepanova", "Sokolova", "Saks", "Sarapuu", "Sild", "Semjonova", + "Tamme", "Tomson", "Tamm", "Teder", "Toom", "Tomson", "Tamme", "Talts", "Tamm", "Tamme", "Tarvas", "Teder", "Toom", "Toome", "Toots", "Tamm", "Teder", "Toom", + "Uibo", "Uibo", + "Vassiljev", "Vaher", "Volkov", "Valk", "Vaher", "Vahtra", "Vaino", "Vainola", "Välbe", "Valdma", "Väljas", "Valk", "Vassiljev", "Vassiljeva", "Vesik", "Veski", "Viiding", "Vitsut", "Võigemast", "Volkov", "Volkova", "Võsu", "Vassiljeva", "Vaher", "Volkova", + ); +} diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/fa_IR/Person.php b/vendor/fzaninotto/faker/src/Faker/Provider/fa_IR/Person.php index 055b863e..e332968d 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/fa_IR/Person.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/fa_IR/Person.php @@ -134,4 +134,68 @@ class Person extends \Faker\Provider\Person protected static $titleMale = array('آقای', 'استاد', 'دکتر', 'مهندس'); protected static $titleFemale = array('خانم', 'استاد', 'دکتر', 'مهندس'); + + /** + * This method returns a valid Iranian nationalCode + * @example '8075859741' + * @link https://fa.wikipedia.org/wiki/%DA%A9%D8%A7%D8%B1%D8%AA_%D8%B4%D9%86%D8%A7%D8%B3%D8%A7%DB%8C%DB%8C_%D9%85%D9%84%DB%8C#%D8%AD%D8%B3%D8%A7%D8%A8_%DA%A9%D8%B1%D8%AF%D9%86_%DA%A9%D8%AF_%DA%A9%D9%86%D8%AA%D8%B1%D9%84 + * @return string + */ + public static function nationalCode() + { + $area = self::createAreaCode(); + $core = self::createCoreCode(); + $control = self::createControlCode($area, $core); + + return sprintf("%03d%06d%01d", $area, $core, $control); + } + + /** + * This method generates a 3-digit valid area code to be used in nationalCode + * @return int|string + */ + private static function createAreaCode() + { + $area = "000"; + + while ($area == "000") { + $area = static::numerify("###"); + } + + return $area; + } + + /** + * This method randomly generates a 6-digit core code for nationalCode + * @return string + */ + private static function createCoreCode() + { + return static::numerify("######"); + } + + /** + * This method uses the Iranian nationalCode validation algorithm to generate a valid 10-digit code + * @param $area + * @param $core + * @link https://fa.wikipedia.org/wiki/%DA%A9%D8%A7%D8%B1%D8%AA_%D8%B4%D9%86%D8%A7%D8%B3%D8%A7%DB%8C%DB%8C_%D9%85%D9%84%DB%8C#%D8%AD%D8%B3%D8%A7%D8%A8_%DA%A9%D8%B1%D8%AF%D9%86_%DA%A9%D8%AF_%DA%A9%D9%86%D8%AA%D8%B1%D9%84 + * @return int + */ + private static function createControlCode($area, $core) + { + $subNationalCodeString = $area . $core; + + $sum = 0; + $count = 0; + + for ($i = 10; $i > 1; $i--) { + $sum += $subNationalCodeString[$count] * ($i); + $count++; + } + + if (($sum % 11) < 2) { + return $sum % 11; + } + return 11 - ($sum % 11); + } } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/fa_IR/PhoneNumber.php b/vendor/fzaninotto/faker/src/Faker/Provider/fa_IR/PhoneNumber.php index 5693e74a..fb80b1d2 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/fa_IR/PhoneNumber.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/fa_IR/PhoneNumber.php @@ -7,11 +7,40 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber /** * @link https://fa.wikipedia.org/wiki/%D8%B4%D9%85%D8%A7%D8%B1%D9%87%E2%80%8C%D9%87%D8%A7%DB%8C_%D8%AA%D9%84%D9%81%D9%86_%D8%AF%D8%B1_%D8%A7%DB%8C%D8%B1%D8%A7%D9%86#.D8.AA.D9.84.D9.81.D9.86.E2.80.8C.D9.87.D8.A7.DB.8C_.D9.87.D9.85.D8.B1.D8.A7.D9.87 */ - protected static $formats = array( - '021########', - '026########', - '031########', + protected static $formats = array( // land line formts seprated by province + "011########", //Mazandaran + "013########", //Gilan + "017########", //Golestan + "021########", //Tehran + "023########", //Semnan + "024########", //Zanjan + "025########", //Qom + "026########", //Alborz + "028########", //Qazvin + "031########", //Isfahan + "034########", //Kerman + "035########", //Yazd + "038########", //Chaharmahal and Bakhtiari + "041########", //East Azerbaijan + "044########", //West Azerbaijan + "045########", //Ardabil + "051########", //Razavi Khorasan + "054########", //Sistan and Baluchestan + "056########", //South Khorasan + "058########", //North Khorasan + "061########", //Khuzestan + "066########", //Lorestan + "071########", //Fars + "074########", //Kohgiluyeh and Boyer-Ahmad + "076########", //Hormozgan + "077########", //Bushehr + "081########", //Hamadan + "083########", //Kermanshah + "084########", //Ilam + "086########", //Markazi + "087########", //Kurdistan ); + protected static $mobileNumberPrefixes = array( '0910#######',//mci '0911#######', @@ -37,7 +66,7 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber '0920#######', '0921#######', '0937#######', - '0937#######', + '0990#######', // MCI ); public static function mobileNumber() { diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/fi_FI/Company.php b/vendor/fzaninotto/faker/src/Faker/Provider/fi_FI/Company.php index 2c2df523..9640c24d 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/fi_FI/Company.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/fi_FI/Company.php @@ -46,7 +46,7 @@ class Company extends \Faker\Provider\Company $result[] = static::randomElement($word); } - return join($result, ' '); + return join(' ', $result); } /** @@ -59,6 +59,6 @@ class Company extends \Faker\Provider\Company $result[] = static::randomElement($word); } - return join($result, ' '); + return join(' ', $result); } } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/fr_BE/Payment.php b/vendor/fzaninotto/faker/src/Faker/Provider/fr_BE/Payment.php index da248dac..21da5b5c 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/fr_BE/Payment.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/fr_BE/Payment.php @@ -32,7 +32,7 @@ class Payment extends \Faker\Provider\Payment */ public static function vat($spacedNationalPrefix = true) { - $prefix = ($spacedNationalPrefix) ? "BE " : "BE"; + $prefix = $spacedNationalPrefix ? "BE " : "BE"; return sprintf("%s0%d", $prefix, self::randomNumber(9, true)); } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/fr_CA/Text.php b/vendor/fzaninotto/faker/src/Faker/Provider/fr_CA/Text.php new file mode 100644 index 00000000..322dc66c --- /dev/null +++ b/vendor/fzaninotto/faker/src/Faker/Provider/fr_CA/Text.php @@ -0,0 +1,2448 @@ +generator->numerify('######'); + $nik = $this->birthPlaceCode(); + $nik .= $this->generator->numerify('##'); if (!$birthDate) { $birthDate = $this->generator->dateTimeBetween(); @@ -286,8 +325,19 @@ class Person extends \Faker\Provider\Person $nik .= $birthDate->format('my'); # add last random digits - $nik.= $this->generator->numerify('####'); + $nik .= $this->generator->numerify('####'); return $nik; } + + /** + * Generates birth place code for NIK + * + * @link https://id.wikipedia.org/wiki/Nomor_Induk_Kependudukan + * @link http://informasipedia.com/wilayah-indonesia/daftar-kabupaten-kota-di-indonesia/ + */ + protected function birthPlaceCode() + { + return static::randomElement(static::$birthPlaceCode); + } } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/it_CH/Person.php b/vendor/fzaninotto/faker/src/Faker/Provider/it_CH/Person.php index 5592fb53..12ef3379 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/it_CH/Person.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/it_CH/Person.php @@ -85,4 +85,17 @@ class Person extends \Faker\Provider\it_IT\Person 'Weber', 'Widmer', 'Zanetti', 'Zanini', 'Zimmermann', ); + + /** + * Generates a valid random AVS13 (swiss social security) number + * + * This function acts as an alias for the function defined in the fr_CH provider. + * + * @see \Faker\Provider\fr_CH\Person::avs13() + * @return string + */ + public static function avs13() + { + return \Faker\Provider\fr_CH\Person::avs13(); + } } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/it_IT/Company.php b/vendor/fzaninotto/faker/src/Faker/Provider/it_IT/Company.php index 6acb6daa..e32a37b0 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/it_IT/Company.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/it_IT/Company.php @@ -48,7 +48,7 @@ class Company extends \Faker\Provider\Company $result[] = static::randomElement($word); } - return join($result, ' '); + return join(' ', $result); } /** @@ -61,7 +61,7 @@ class Company extends \Faker\Provider\Company $result[] = static::randomElement($word); } - return join($result, ' '); + return join(' ', $result); } /** diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/ja_JP/Address.php b/vendor/fzaninotto/faker/src/Faker/Provider/ja_JP/Address.php index 2ef8d89d..10714672 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/ja_JP/Address.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/ja_JP/Address.php @@ -11,7 +11,7 @@ class Address extends \Faker\Provider\Address 'デンマーク', 'ジブチ共和国', 'ドミニカ国', 'ドミニカ共和国', 'エクアドル', 'エジプト', 'エルサルバドル', '赤道ギニア共和国', 'エリトリア', 'エストニア', 'エチオピア', 'フェロー諸島', 'フォークランド諸島', 'フィジー共和国', 'フィンランド', 'フランス', 'フランス領ギアナ', 'フランス領ポリネシア', 'フランス領極南諸島', - 'ガボン', 'ガンビア', 'グルジア', 'ドイツ', 'ガーナ', 'ジブラルタル', 'ギリシャ', 'グリーンランド', 'グレナダ', 'グアドループ', 'グアム', 'グアテマラ', 'ガーンジー', 'ギニア', 'ギニアビサウ', 'ガイアナ', + 'ガボン', 'ガンビア', 'ジョージア', 'ドイツ', 'ガーナ', 'ジブラルタル', 'ギリシャ', 'グリーンランド', 'グレナダ', 'グアドループ', 'グアム', 'グアテマラ', 'ガーンジー', 'ギニア', 'ギニアビサウ', 'ガイアナ', 'ハイチ', 'ハード島とマクドナルド諸島', 'バチカン市国', 'ホンジュラス', '香港', 'ハンガリー', 'アイスランド', 'インド', 'インドネシア', 'イラン', 'イラク', 'アイルランド共和国', 'マン島', 'イスラエル', 'イタリア', 'ジャマイカ', '日本', 'ジャージー島', 'ヨルダン', diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/ja_JP/Text.php b/vendor/fzaninotto/faker/src/Faker/Provider/ja_JP/Text.php index 34556202..c8671cc0 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/ja_JP/Text.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/ja_JP/Text.php @@ -598,7 +598,7 @@ EOT; protected static function explode($text) { $chars = array(); - foreach (preg_split('//u', preg_replace('/\s+/', '', $text)) as $char) { + foreach (preg_split('//u', preg_replace('/\s+/u', '', $text)) as $char) { if ($char !== '') { $chars[] = $char; } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/ka_GE/Company.php b/vendor/fzaninotto/faker/src/Faker/Provider/ka_GE/Company.php index 888386a7..c2ccb40a 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/ka_GE/Company.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/ka_GE/Company.php @@ -2,7 +2,6 @@ namespace Faker\Provider\ka_GE; - class Company extends \Faker\Provider\Company { protected static $companyPrefixes = array( diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/lt_LT/Person.php b/vendor/fzaninotto/faker/src/Faker/Provider/lt_LT/Person.php index 47b862bc..10004804 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/lt_LT/Person.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/lt_LT/Person.php @@ -13,6 +13,11 @@ class Person extends \Faker\Provider\Person '{{firstNameFemale}} {{lastNameFemale}}', ); + protected static $lastNameFormat = array( + '{{firstNameMale}}', + '{{firstNameFemale}}', + ); + protected static $titleMale = array('p.', 'ponas'); protected static $titleFemale = array('p.', 'ponia', 'panelė'); @@ -247,6 +252,22 @@ class Person extends \Faker\Provider\Person 'Petrauskaitė', 'Vasiliauskaitė', 'Butkutė', 'Pociūtė', 'Lukoševičiūtė', 'Balčiūnaitė', 'Kavaliauskaitė' ); + /** + * @param string|null $gender 'male', 'female' or null for any + * @example 'Doe' + * @return string + */ + public function lastName($gender = null) + { + if ($gender === static::GENDER_MALE) { + return static::lastNameMale(); + } elseif ($gender === static::GENDER_FEMALE) { + return static::lastNameFemale(); + } + + return $this->generator->parse(static::randomElement(static::$lastNameFormat)); + } + /** * Return male last name * @return string @@ -302,11 +323,11 @@ class Person extends \Faker\Provider\Person $birthdate = \Faker\Provider\DateTime::dateTimeThisCentury(); } - $genderNumber = ($gender == 'male') ? (int) 1 : (int) 0; + $genderNumber = ($gender == 'male') ? 1 : 0; $firstNumber = (int) floor($birthdate->format('Y') / 100) * 2 - 34 - $genderNumber; $datePart = $birthdate->format('ymd'); - $randomDigits = (string) ( ! $randomNumber || strlen($randomNumber < 3)) ? static::numerify('###') : substr($randomNumber, 0, 3); + $randomDigits = (string) ( ! $randomNumber || strlen($randomNumber) < 3) ? static::numerify('###') : substr($randomNumber, 0, 3); $partOfPerosnalCode = $firstNumber . $datePart . $randomDigits; $sum = self::calculateSum($partOfPerosnalCode, 1); @@ -318,7 +339,7 @@ class Person extends \Faker\Provider\Person } $sum = self::calculateSum($partOfPerosnalCode, 2); - $liekana = (int) $sum % 11; + $liekana = $sum % 11; $lastNumber = ($liekana !== 10) ? $liekana : 0; return $firstNumber . $datePart . $randomDigits . $lastNumber; diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/mn_MN/Person.php b/vendor/fzaninotto/faker/src/Faker/Provider/mn_MN/Person.php index 8a0b8206..3042b5bb 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/mn_MN/Person.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/mn_MN/Person.php @@ -72,7 +72,7 @@ class Person extends \Faker\Provider\Person /** * Generate an identification number. - * + * * @example ИЙ92011412 */ public function idNumber() diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Address.php b/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Address.php index 5ec2f751..1ad7d44b 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Address.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Address.php @@ -67,7 +67,7 @@ class Address extends \Faker\Provider\Address /** * 'Jalan' & 'Jln' are more frequently used than 'Lorong' - * + * * @link https://en.wikipedia.org/wiki/List_of_roads_in_Kuala_Lumpur#Standard_translations */ protected static $streetPrefix = array( @@ -117,7 +117,7 @@ class Address extends \Faker\Provider\Address /** * 'Bandar' and 'Taman' are the most common township prefix - * + * * @link https://en.wikipedia.org/wiki/Template:Greater_Kuala_Lumpur > Townships * @link https://en.wikipedia.org/wiki/Template:Johor > Townships * @link https://en.wikipedia.org/wiki/Template:Kedah > Townships @@ -497,9 +497,9 @@ class Address extends \Faker\Provider\Address /** * Return a building prefix - * + * * @example 'No.' - * + * * @return @string */ public static function buildingPrefix() @@ -509,9 +509,9 @@ class Address extends \Faker\Provider\Address /** * Return a building number - * + * * @example '123' - * + * * @return @string */ public static function buildingNumber() @@ -521,7 +521,7 @@ class Address extends \Faker\Provider\Address /** * Return a street prefix - * + * * @example 'Jalan' */ public function streetPrefix() @@ -533,9 +533,9 @@ class Address extends \Faker\Provider\Address /** * Return a complete streename - * + * * @example 'Jalan Utama 7' - * + * * @return @string */ public function streetName() @@ -547,9 +547,9 @@ class Address extends \Faker\Provider\Address /** * Return a randown township - * + * * @example Taman Bahagia - * + * * @return @string */ public function township() @@ -561,9 +561,9 @@ class Address extends \Faker\Provider\Address /** * Return a township prefix abbreviation - * + * * @example 'USJ' - * + * * @return @string */ public function townshipPrefixAbbr() @@ -573,9 +573,9 @@ class Address extends \Faker\Provider\Address /** * Return a township prefix - * + * * @example 'Taman' - * + * * @return @string */ public function townshipPrefix() @@ -585,7 +585,7 @@ class Address extends \Faker\Provider\Address /** * Return a township suffix - * + * * @example 'Bahagia' */ public function townshipSuffix() @@ -595,12 +595,12 @@ class Address extends \Faker\Provider\Address /** * Return a postcode based on state - * + * * @example '55100' * @link https://en.wikipedia.org/wiki/Postal_codes_in_Malaysia#States - * + * * @param null|string $state 'state' or null - * + * * @return @string */ public static function postcode($state = null) @@ -665,9 +665,9 @@ class Address extends \Faker\Provider\Address /** * Return the complete town address with matching postcode and state - * + * * @example 55100 Bukit Bintang, Kuala Lumpur - * + * * @return @string */ public function townState() @@ -682,9 +682,9 @@ class Address extends \Faker\Provider\Address /** * Return a random city (town) - * + * * @example 'Ampang' - * + * * @return @string */ public function city() @@ -695,9 +695,9 @@ class Address extends \Faker\Provider\Address /** * Return a random state - * + * * @example 'Johor' - * + * * @return @string */ public function state() diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Company.php b/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Company.php index f2e2f5f4..0e681330 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Company.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Company.php @@ -13,7 +13,7 @@ class Company extends \Faker\Provider\Company /** * There are more Private Limited Companies(Sdn Bhd) than Public Listed Companies(Berhad) - * + * * @link http://www.risscorporateservices.com/types-of-business-entities.html */ protected static $companySuffix = array( @@ -85,7 +85,7 @@ class Company extends \Faker\Provider\Company /** * Return a random company name - * + * * @example 'AirAsia' */ public static function companyName() @@ -95,7 +95,7 @@ class Company extends \Faker\Provider\Company /** * Return a random industry - * + * * @example 'Automobil' */ public static function industry() diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Miscellaneous.php b/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Miscellaneous.php index 22efd33b..b42c6685 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Miscellaneous.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Miscellaneous.php @@ -22,7 +22,7 @@ class Miscellaneous extends \Faker\Provider\Miscellaneous /** * Some alphabet has higher frequency that coincides with the current number * of registrations. E.g. W = Wilayah Persekutuan - * + * * @link https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Malaysia#Current_format */ protected static $peninsularPrefix = array( @@ -71,7 +71,7 @@ class Miscellaneous extends \Faker\Provider\Miscellaneous /** * Chances of having an empty alphabet will be 1/24 - * + * * @link https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Malaysia#Current_format */ protected static $validAlphabets = array( @@ -83,9 +83,9 @@ class Miscellaneous extends \Faker\Provider\Miscellaneous /** * Return a valid Malaysia JPJ(Road Transport Department) vehicle licence plate number - * + * * @example 'WKN 2368' - * + * * @return @string */ public function jpjNumberPlate() @@ -97,9 +97,9 @@ class Miscellaneous extends \Faker\Provider\Miscellaneous /** * Return Peninsular prefix alphabet - * + * * @example 'W' - * + * * @return @string */ public static function peninsularPrefix() @@ -109,9 +109,9 @@ class Miscellaneous extends \Faker\Provider\Miscellaneous /** * Return Sarawak state prefix alphabet - * + * * @example 'QA' - * + * * @return @string */ public static function sarawakPrefix() @@ -121,9 +121,9 @@ class Miscellaneous extends \Faker\Provider\Miscellaneous /** * Return Sabah state prefix alphabet - * + * * @example 'SA' - * + * * @return @string */ public static function sabahPrefix() @@ -133,9 +133,9 @@ class Miscellaneous extends \Faker\Provider\Miscellaneous /** * Return specialty licence plate prefix - * + * * @example 'G1M' - * + * * @return @string */ public static function specialPrefix() @@ -145,9 +145,9 @@ class Miscellaneous extends \Faker\Provider\Miscellaneous /** * Return a valid license plate alphabet - * + * * @example 'A' - * + * * @return @string */ public static function validAlphabet() @@ -157,9 +157,9 @@ class Miscellaneous extends \Faker\Provider\Miscellaneous /** * Return a valid number sequence between 1 and 9999 - * + * * @example '1234' - * + * * @return @integer */ public static function numberSequence() diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Payment.php b/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Payment.php index b70a590f..4a46af16 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Payment.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Payment.php @@ -144,9 +144,9 @@ class Payment extends \Faker\Provider\Payment /** * Return a Malaysian Bank - * + * * @example 'Maybank' - * + * * @return @string */ public function bank() @@ -158,9 +158,9 @@ class Payment extends \Faker\Provider\Payment /** * Return a Malaysian Bank account number - * + * * @example '1234567890123456' - * + * * @return @string */ public function bankAccountNumber() @@ -172,9 +172,9 @@ class Payment extends \Faker\Provider\Payment /** * Return a Malaysian Local Bank - * + * * @example 'Public Bank' - * + * * @return @string */ public static function localBank() @@ -184,9 +184,9 @@ class Payment extends \Faker\Provider\Payment /** * Return a Malaysian Foreign Bank - * + * * @example 'Citibank Berhad' - * + * * @return @string */ public static function foreignBank() @@ -196,9 +196,9 @@ class Payment extends \Faker\Provider\Payment /** * Return a Malaysian Government Bank - * + * * @example 'Bank Simpanan Nasional' - * + * * @return @string */ public static function governmentBank() @@ -208,9 +208,9 @@ class Payment extends \Faker\Provider\Payment /** * Return a Malaysian insurance company - * + * * @example 'AIA Malaysia' - * + * * @return @string */ public static function insurance() @@ -220,9 +220,9 @@ class Payment extends \Faker\Provider\Payment /** * Return a Malaysian Bank SWIFT Code - * + * * @example 'MBBEMYKLXXX' - * + * * @return @string */ public static function swiftCode() @@ -232,9 +232,9 @@ class Payment extends \Faker\Provider\Payment /** * Return the Malaysian currency symbol - * + * * @example 'RM' - * + * * @return @string */ public static function currencySymbol() diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Person.php b/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Person.php index 7dfaaac5..28d1092a 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Person.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/Person.php @@ -160,12 +160,12 @@ class Person extends \Faker\Provider\Person /** * Note: The empty elements are for names without the title, chances increase by number of empty elements. - * + * * @link https://en.wikipedia.org/wiki/Muhammad_(name) */ protected static $muhammadName = array('', '', '', '', 'Mohamad ','Mohamed ','Mohammad ','Mohammed ','Muhamad ','Muhamed ','Muhammad ','Muhammed ','Muhammet ','Mohd '); /** - * + * * @link https://en.wikipedia.org/wiki/Noor_(name) */ protected static $nurName = array('', '', '', '', 'Noor ', 'Nor ', 'Nur ', 'Nur ', 'Nur ', 'Nurul ','Nuur '); @@ -183,10 +183,10 @@ class Person extends \Faker\Provider\Person /** * Chinese family name or surname - * + * * @link https://en.wikipedia.org/wiki/List_of_common_Chinese_surnames * @link https://en.wikipedia.org/wiki/Hundred_Family_Surnames - * + * */ protected static $lastNameChinese = array( 'An','Ang','Au','Au-Yong','Aun','Aw', @@ -218,7 +218,7 @@ class Person extends \Faker\Provider\Person /** * Chinese second character - * + * * @link https://en.wikipedia.org/wiki/Chinese_given_name * @link https://en.wikipedia.org/wiki/List_of_Malaysians_of_Chinese_descent * @link https://en.wikipedia.org/wiki/Category:Malaysian_people_of_Cantonese_descent @@ -276,7 +276,7 @@ class Person extends \Faker\Provider\Person /** * Chinese male third character - * + * * @link https://en.wikipedia.org/wiki/Chinese_given_name * @link https://en.wikipedia.org/wiki/List_of_Malaysians_of_Chinese_descent * @link https://en.wikipedia.org/wiki/Category:Malaysian_people_of_Cantonese_descent @@ -332,7 +332,7 @@ class Person extends \Faker\Provider\Person /** * Chinese female third character - * + * * @link https://en.wikipedia.org/wiki/Chinese_given_name * @link https://en.wikipedia.org/wiki/List_of_Malaysians_of_Chinese_descent * @link https://en.wikipedia.org/wiki/Category:Malaysian_people_of_Cantonese_descent @@ -542,9 +542,9 @@ class Person extends \Faker\Provider\Person /** * Return a Malay male first name - * + * * @example 'Ahmad' - * + * * @return string */ public static function firstNameMaleMalay() @@ -554,9 +554,9 @@ class Person extends \Faker\Provider\Person /** * Return a Malay female first name - * + * * @example 'Adibah' - * + * * @return string */ public static function firstNameFemaleMalay() @@ -566,9 +566,9 @@ class Person extends \Faker\Provider\Person /** * Return a Malay last name - * + * * @example 'Abdullah' - * + * * @return string */ public function lastNameMalay() @@ -578,9 +578,9 @@ class Person extends \Faker\Provider\Person /** * Return a Malay male 'Muhammad' name - * + * * @example 'Muhammad' - * + * * @return string */ public static function muhammadName() @@ -590,9 +590,9 @@ class Person extends \Faker\Provider\Person /** * Return a Malay female 'Nur' name - * + * * @example 'Nur' - * + * * @return string */ public static function nurName() @@ -602,9 +602,9 @@ class Person extends \Faker\Provider\Person /** * Return a Malay male 'Haji' title - * + * * @example 'Haji' - * + * * @return string */ public static function haji() @@ -614,9 +614,9 @@ class Person extends \Faker\Provider\Person /** * Return a Malay female 'Hajjah' title - * + * * @example 'Hajjah' - * + * * @return string */ public static function hajjah() @@ -626,9 +626,9 @@ class Person extends \Faker\Provider\Person /** * Return a Malay title - * + * * @example 'Syed' - * + * * @return string */ public static function titleMaleMalay() @@ -638,9 +638,9 @@ class Person extends \Faker\Provider\Person /** * Return a Chinese last name - * + * * @example 'Lim' - * + * * @return string */ public static function lastNameChinese() @@ -650,9 +650,9 @@ class Person extends \Faker\Provider\Person /** * Return a Chinese male first name - * + * * @example 'Goh Tong' - * + * * @return string */ public static function firstNameMaleChinese() @@ -662,9 +662,9 @@ class Person extends \Faker\Provider\Person /** * Return a Chinese female first name - * + * * @example 'Mew Choo' - * + * * @return string */ public static function firstNameFemaleChinese() @@ -674,9 +674,9 @@ class Person extends \Faker\Provider\Person /** * Return a Christian male name - * + * * @example 'Aaron' - * + * * @return string */ public static function firstNameMaleChristian() @@ -686,9 +686,9 @@ class Person extends \Faker\Provider\Person /** * Return a Christian female name - * + * * @example 'Alice' - * + * * @return string */ public static function firstNameFemaleChristian() @@ -698,9 +698,9 @@ class Person extends \Faker\Provider\Person /** * Return an Indian initial - * + * * @example 'S. ' - * + * * @return string */ public static function initialIndian() @@ -710,9 +710,9 @@ class Person extends \Faker\Provider\Person /** * Return an Indian male first name - * + * * @example 'Arumugam' - * + * * @return string */ public static function firstNameMaleIndian() @@ -722,9 +722,9 @@ class Person extends \Faker\Provider\Person /** * Return an Indian female first name - * + * * @example 'Ambiga' - * + * * @return string */ public static function firstNameFemaleIndian() @@ -734,9 +734,9 @@ class Person extends \Faker\Provider\Person /** * Return an Indian last name - * + * * @example 'Subramaniam' - * + * * @return string */ public static function lastNameIndian() @@ -746,9 +746,9 @@ class Person extends \Faker\Provider\Person /** * Return a random last name - * + * * @example 'Lee' - * + * * @return string */ public function lastName() @@ -764,14 +764,14 @@ class Person extends \Faker\Provider\Person /** * Return a Malaysian I.C. No. - * + * * @example '890123-45-6789' - * + * * @link https://en.wikipedia.org/wiki/Malaysian_identity_card#Structure_of_the_National_Registration_Identity_Card_Number_(NRIC) - * + * * @param string|null $gender 'male', 'female' or null for any * @param bool|string|null $hyphen true, false, or any separator characters - * + * * @return string */ public static function myKadNumber($gender = null, $hyphen = false) @@ -786,8 +786,8 @@ class Person extends \Faker\Provider\Person $dd = DateTime::dayOfMonth(); // place of birth (1-59 except 17-20) - while (in_array(($pb = mt_rand(1, 59)), array(17, 18, 19, 20))) { - }; + while (in_array($pb = mt_rand(1, 59), array(17, 18, 19, 20))) { + } // random number $nnn = mt_rand(0, 999); @@ -804,7 +804,7 @@ class Person extends \Faker\Provider\Person // formatting with hyphen if ($hyphen === true) { $hyphen = "-"; - } else if ($hyphen === false) { + } elseif ($hyphen === false) { $hyphen = ""; } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/PhoneNumber.php b/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/PhoneNumber.php index ad199c0d..f89111d9 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/PhoneNumber.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/ms_MY/PhoneNumber.php @@ -88,12 +88,12 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber /** * Return a Malaysian Mobile Phone Number. - * + * * @example '+6012-345-6789' - * + * * @param bool $countryCodePrefix true, false * @param bool $formatting true, false - * + * * @return string */ public function mobileNumber($countryCodePrefix = true, $formatting = true) @@ -113,9 +113,9 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber /** * Return prefix digits for 011 numbers - * + * * @example '10' - * + * * @return string */ public static function zeroOneOnePrefix() @@ -125,9 +125,9 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber /** * Return prefix digits for 014 numbers - * + * * @example '2' - * + * * @return string */ public static function zeroOneFourPrefix() @@ -137,9 +137,9 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber /** * Return prefix digits for 015 numbers - * + * * @example '1' - * + * * @return string */ public static function zeroOneFivePrefix() @@ -149,12 +149,12 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber /** * Return a Malaysian Fixed Line Phone Number. - * + * * @example '+603-4567-8912' - * + * * @param bool $countryCodePrefix true, false * @param bool $formatting true, false - * + * * @return string */ public function fixedLineNumber($countryCodePrefix = true, $formatting = true) @@ -174,12 +174,12 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber /** * Return a Malaysian VoIP Phone Number. - * + * * @example '+6015-678-9234' - * + * * @param bool $countryCodePrefix true, false * @param bool $formatting true, false - * + * * @return string */ public function voipNumber($countryCodePrefix = true, $formatting = true) @@ -199,11 +199,11 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber /** * Return a Malaysian Country Code Prefix. - * + * * @example '+6' - * + * * @param bool $formatting true, false - * + * * @return string */ public static function countryCodePrefix($formatting = true) diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/nb_NO/Person.php b/vendor/fzaninotto/faker/src/Faker/Provider/nb_NO/Person.php index c95410b7..56d68837 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/nb_NO/Person.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/nb_NO/Person.php @@ -300,7 +300,7 @@ class Person extends \Faker\Provider\Person */ $randomDigits = (string)static::numerify('##'); - switch($gender) { + switch ($gender) { case static::GENDER_MALE: $genderDigit = static::randomElement(array(1,3,5,7,9)); break; diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/nb_NO/PhoneNumber.php b/vendor/fzaninotto/faker/src/Faker/Provider/nb_NO/PhoneNumber.php index 9be29932..c97e720a 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/nb_NO/PhoneNumber.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/nb_NO/PhoneNumber.php @@ -19,4 +19,23 @@ class PhoneNumber extends \Faker\Provider\PhoneNumber '9#######', '4#######', ); + + /** + * @var array Norweign mobile number formats + */ + protected static $mobileFormats = array( + '+474#######', + '+479#######', + '9## ## ###', + '4## ## ###', + '9#######', + '4#######', + ); + + public function mobileNumber() + { + $format = static::randomElement(static::$mobileFormats); + + return self::numerify($this->generator->parse($format)); + } } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/ne_NP/Person.php b/vendor/fzaninotto/faker/src/Faker/Provider/ne_NP/Person.php index 0a88375e..706cd339 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/ne_NP/Person.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/ne_NP/Person.php @@ -45,11 +45,11 @@ class Person extends \Faker\Provider\Person 'Kabindra', 'Kailash', 'Kalyan', 'Kamal', 'Kamod', 'Kapil', 'Karan', 'Karna', 'Khagendra', 'Kishor', 'Kris', 'Krishna', 'Krisus', 'Kuber', 'Lakshman', 'Lalit', 'Lava', 'Lochan', 'Lokesh', 'Madhav', 'Madhukar', 'Madhur', 'Mandeep', 'Manish', 'Manjul', 'Manoj', 'Milan', 'Mohit', 'Mridul', - 'Nabin', 'Nakul', 'Narayan', 'Narendra', 'Naresh', 'Neil', 'Nerain', 'Nirajan', 'Nirajan', 'Nirmal', 'Nirupam', 'Nischal', 'Nishad', 'Nishant', 'Nutan', + 'Nabin', 'Nakul', 'Narayan', 'Narendra', 'Naresh', 'Neil', 'Nerain', 'Nirajan', 'Nirmal', 'Nirupam', 'Nischal', 'Nishad', 'Nishant', 'Nutan', 'Om', 'Paras', 'Parikshit', 'Parimal', 'Pawan', 'Piyush', 'Prabal', 'Prabesh', 'Prabhat', 'Prabin', 'Prajwal', 'Prakash', 'Pramesh', 'Pramod', 'Pranaya', 'Pranil', 'Prasanna', 'Prashant', 'Prasun', 'Pratap', 'Pratik', 'Prayag', 'Prianshu', 'Prithivi', 'Purna', 'Pushkar', 'Raghab', 'Rahul', 'Rajan', 'Rajesh', 'Rakesh', 'Ramesh', 'Ranjan', 'Ranjit', 'Ricky', 'Rijan', 'Rishab', 'Rishikesh', 'Rohan', 'Rohit', 'Roshan', - 'Sabin', 'Sachit', 'Safal', 'Sahaj', 'Sahan', 'Sajal', 'Sakar', 'Samir', 'Sanchit', 'Sandesh', 'Sanjay', 'Sanjeev', 'Sankalpa', 'Santosh', 'Sarad', 'Saroj', 'Sashi', 'Saumya', 'Sevak', 'Shailesh', 'Shakti', 'Shamundra', 'Shantanu', 'Shashank', 'Shashwat', 'Shekar', 'Shyam', 'Siddhartha', 'Sitaram', 'Sohan', 'Sohil', 'Soviet', 'Spandan', 'Subal', 'Subham', 'Subodh', 'Sudan', 'Sudhir', 'Sudin', 'Sudip', 'Sujan', 'Sujit', 'Sukanta', 'Sumel', 'Sunil', 'Suraj', 'Suraj', 'Surendra', 'Surya', 'Sushant', 'Sushil', 'Suyash', 'Suyog', 'Swagat', 'Swapnil', 'Swarup', + 'Sabin', 'Sachit', 'Safal', 'Sahaj', 'Sahan', 'Sajal', 'Sakar', 'Samir', 'Sanchit', 'Sandesh', 'Sanjay', 'Sanjeev', 'Sankalpa', 'Santosh', 'Sarad', 'Saroj', 'Sashi', 'Saumya', 'Sevak', 'Shailesh', 'Shakti', 'Shamundra', 'Shantanu', 'Shashank', 'Shashwat', 'Shekar', 'Shyam', 'Siddhartha', 'Sitaram', 'Sohan', 'Sohil', 'Soviet', 'Spandan', 'Subal', 'Subham', 'Subodh', 'Sudan', 'Sudhir', 'Sudin', 'Sudip', 'Sujan', 'Sujit', 'Sukanta', 'Sumel', 'Sunil', 'Suraj', 'Surendra', 'Surya', 'Sushant', 'Sushil', 'Suyash', 'Suyog', 'Swagat', 'Swapnil', 'Swarup', 'Tej', 'Tilak', 'Tirtha', 'Trailokya', 'Trilochan', 'Udit', 'Ujjwal', 'Umesh', 'Uttam', 'Yogendra', 'Yogesh', 'Yuvaraj', @@ -80,7 +80,7 @@ class Person extends \Faker\Provider\Person protected static $lastName = array( 'Acharya', 'Adhikari', 'Agarwal', 'Amatya', 'Aryal', 'Baidya', 'Bajracharya', 'Balami', 'Banepali', 'Baniya', 'Banjade', 'Baral', 'Basnet', 'Bastakoti', 'Bastola', 'Basyal', 'Belbase', 'Bhandari', 'Bhatta', 'Bhattarai', 'Bhusal', 'Bijukchhe', 'Bisht', 'Bohara', 'Budathoki', 'Byanjankar', - 'Chalise', 'Chamling', 'Chapagain', 'Chaudhary', 'Chhetri', 'Chhetri', + 'Chalise', 'Chamling', 'Chapagain', 'Chaudhary', 'Chhetri', 'Dahal', 'Dangol', 'Dawadi', 'Devkota', 'Dhakal', 'Dhamla', 'Dhaubhadel', 'Dhungel', 'Gauchan', 'Gautam', 'Ghale', 'Ghimire', 'Giri', 'Golchha', 'Gurung', 'Gyalzen', 'Gyawali', 'Hamal', 'Himanshu', 'Humagain', diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/nl_BE/Payment.php b/vendor/fzaninotto/faker/src/Faker/Provider/nl_BE/Payment.php index 9e1a3b90..f8eb2338 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/nl_BE/Payment.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/nl_BE/Payment.php @@ -32,7 +32,7 @@ class Payment extends \Faker\Provider\Payment */ public static function vat($spacedNationalPrefix = true) { - $prefix = ($spacedNationalPrefix) ? "BE " : "BE"; + $prefix = $spacedNationalPrefix ? "BE " : "BE"; return sprintf("%s0%d", $prefix, self::randomNumber(9, true)); } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/nl_NL/Company.php b/vendor/fzaninotto/faker/src/Faker/Provider/nl_NL/Company.php index 3185b894..bb8c90da 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/nl_NL/Company.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/nl_NL/Company.php @@ -4,33 +4,109 @@ namespace Faker\Provider\nl_NL; class Company extends \Faker\Provider\Company { - protected static $formats = array( - '{{lastName}} {{companySuffix}}', - '{{lastName}} {{lastName}} {{companySuffix}}', - '{{lastName}}', - '{{lastName}}', + /** + * @see https://nl.wikipedia.org/wiki/Lijst_van_beroepen + */ + protected static $jobTitleFormat = array( + 'Aankondiger', 'Acceptant', 'Accountant', 'Accountmanager', 'Acrobaat', 'Acteur', 'Activiteitenbegeleider', 'Actuaris', 'Acupuncturist', 'Adjudant', 'Administrateur', 'Advertentiezetter', 'Adviseur', 'Advocaat', 'Agent', 'Agrariër', 'Akoepedist', 'Akoesticus', 'Alchemist', 'Allergoloog', 'Altist', 'Amanuensis', 'Ambtenaar', 'Ambulancebegeleider', 'Ambulancechauffeur', 'Ambulanceverpleegkundige', 'Analist', 'Anatoom', 'Andragoog', 'Androloog', 'Anesthesist', 'Anesthesiemedewerker', 'Animeermeisje', 'Antiquaar', 'Antiquair', 'Apotheker', 'Apothekersassistent', 'Applicatieontwikkelaar', 'Arbeidsanalist', 'Arbeidsbemiddelaar', 'Arbeidsdeskundige', 'Arbeidsfysioloog', 'Arbeidsgeneesheer', 'Arbeidshygiënist', 'Archeoloog', 'Architect', 'Archivaris', 'Archivist', 'Arrangeur', 'Artdirector', 'Artiest', 'Arts', 'Assuradeur', 'Astrofysicus', 'Astroloog', 'Astronaut', 'Astronoom', 'Audioloog', 'Audiometrist', 'Audiotherapeut', 'Auditor', 'Autohandelaar', 'Automonteur', 'Autoplaatwerker', 'Autospuiter', + 'Bacterioloog', 'Badmeester', 'Baggermachinist', 'Baggermolenarbeider', 'Baker', 'Bakker', 'Baliemedewerker', 'Balletdanser', 'Ballroomdanser', 'Bandagist', 'Bandenmonteur', 'Bankbediende', 'Bankdirecteur', 'Banketbakker', 'Bankmakelaar', 'Bankwerker', 'Barbediende', 'Barhouder', 'Barman', 'Basketballer', 'Bassist', 'Beademingsassistent', 'Bedienaar', 'Bediener', 'Bedrijfsbrandweer', 'Bedrijfseconoom', 'Bedrijfshoofd', 'Bedrijfsjurist', 'Bedrijfskassier', 'Bedrijfskundige', 'Bedrijfsleermeester', 'Bedrijfsleider', 'Bedrijfsorganisatiedeskundige', 'Bedrijfspolitieagent', 'Bedrijfsrecherche', 'Bedrijfsverpleegkundige', 'Beeldapparatuurbediener', 'Beeldhouwer', 'Beenhouwer', 'Begeleider', 'Begrafenispersoneel', 'Begrotingscalculator', 'Behanger', 'Beheerder', 'Beiaardier', 'Bejaardenverzorgende', 'Belastingambtenaar', 'Belastingconsulent', 'Beleidsambtenaar', 'Beleidsmedewerker', 'Belichter', 'Bergingsduiker', 'Beroepskeuzeadviseur', 'Beroepsmilitair', 'Beroepssporter', 'Bestekschrijver', 'Besteksorteerder', 'Bestekzoeker', 'Bestuurder', 'Bestuurskundige', 'Betonmolenbaas', 'Betontimmerman', 'Betonstaalvlechter', 'Betonwerker', 'Beul', 'Beveiligingsapparatuur', 'Beveiligingsbeambte', 'Bewaarder', 'Bewaker', 'Bewegingstherapeut', 'Bezorger', 'Bibliothecaris', 'Bibliotheekassistent', 'Bierbrouwer', 'Bijenkorfvlechter', 'Bijenkweker', 'Bijkantoorhouder', 'Binderijpersoneel', 'Binnenhuisarchitect', 'Biochemicus', 'Biograaf', 'Bioloog', 'Bioscoopoperateur', 'Bitumineerder', 'Bloemist', 'Bloemkweker', 'Bloemschikker', 'Bloemsierkunstenaar', 'Bode', 'Boekbinder', 'Boekhouder', 'Boekillustrator', 'Boer', 'Bontkleermaker', 'Bontsnijder', 'Bookmaker', 'Boomchirurg', 'Boomkweker', 'Boomverzorger', 'Boordwerktuigkundige', 'Boormachinist', 'Boorpersoneel', 'Bootsman', 'Bosbaas', 'Bosbouwkundige', 'Boswachter', 'Botenbouwer', 'Bouwcalculator', 'Bouwhistoricus', 'Bouwkundig tekenaar', 'Bouwliftbediener', 'Bouwpromotor', 'Bouwopzichter', 'Bouwvakker', 'Bouwvaktimmerman', 'Brandmeester', 'Brandveiligheidsdeskundige', 'Brandwacht', 'Brandweerman', 'Brandweercommandant', 'Brandweeronderofficier', 'Breimachinesteller', 'Bromfietshersteller', 'Bronboorder', 'Buffetbediende', 'Buikspreker', 'Buitenbandenvulkaniseur', 'Buitendienstmedewerker', 'Burgemeester', 'Buschauffeur', 'Budgetcoach', 'Butler', + 'Cabaretier', 'Caféhouder', 'Cafetariamedewerker', 'Caissière', 'Calculator', 'Callgirl', 'Cameraman', 'Cardioloog', 'Cargadoor', 'Carrosseriebouwer', 'Cartograaf', 'Cellist', 'Chauffeur', 'Chef', 'Chemicus', 'Chiropodist', 'Chirurg', 'Chocolademaker', 'Chocolatier', 'Choreograaf', 'Cilindermaker', 'Cineast', 'Cipier', 'Circusartiest', 'Circusdirecteur', 'Civiel ingenieur', 'Classicus', 'Clown', 'Coach', 'Codeur', 'Collationist', 'Colporteur', 'Columnist', 'Combinatiefunctionaris', 'Commentator', 'Commissaris', 'Commissionair', 'Completeerder', 'Compliance officer', 'Componist', 'Computeroperator', 'Computerprogrammeur', 'Conciërge', 'Conducteur', 'Conservator', 'Constructeur', 'Constructiebankwerker', 'Constructiesamenbouwer', 'Constructieschilder', 'Consulent', 'Contactlensspecialist', 'Controleur', 'Controller', 'Coördinator', 'Copywriter', 'Counselor', 'Corrector', 'Correpetitor', 'Correspondent', 'Creatief therapeut', 'Crècheleidster', 'Criminoloog', 'Criticus', 'Croupeur', 'Croupier', 'Cultuurtechnicus', 'Curator', 'Cursuscoördinator', 'Cursusleider', + 'Dakdekker', 'Dakpannenvormer', 'Danser', 'Dansleraar', 'Database administrator', 'Debitant', 'Decaan', 'Declarant', 'Decoratieschilder', 'Decorschilder', 'Degelpersdrukker', 'Dekkledenmaker', 'Dekpersoneel', 'Delfstoffenbewerker', 'Demonstrateur', 'Dermatoloog', 'Deskundige', 'Detailhandelaar', 'Detective', 'Deurenzetter', 'Deurwaarder', 'Dichter', 'Dieetkok', 'Dienstbode', 'Dienstleider', 'Diepdrukgraveur', 'Dierenarts', 'Dierenartsassistent', 'Dierenasielhouder', 'Dierentrainer', 'Dierenverzorger', 'Diëtist', 'Diplomaat', 'Directeur', 'Directieassistent', 'Directiesecretaresse', 'Dirigent', 'Diskjockey', 'Districtschef', 'Districtsverpleegkundige', 'Docent', 'Documentalist', 'Documentencontroleur', 'Dokmeester', 'Doktersassistent', 'Dominee', 'Doodgraver', 'Douaneambtenaar', 'Dozenmaker', 'Draaier', 'Dramadocent', 'Dramatherapeut', 'Drogist', 'Drukker', 'Drukkerijbinder', 'Drukwerkvoorbereiders', 'Drummer', 'Duiker', + 'Econoom', 'Ecotechnisch manager', 'Edelmetaalbewerker', 'Edelsmid', 'Editor', 'EDP-auditor', 'Egyptoloog', 'Eindredacteur', 'Elektricien', 'Elektromonteur', 'Elektronicamonteur', 'Elektronicus', 'Elektrotechnicus', 'Encyclopedist', 'Enquêteur', 'Ergonoom', 'Ergotherapeut', 'Ertskundige', 'Essayeur', 'Essayist', 'Etaleur', 'Etnograaf', 'Etnoloog', 'Etymoloog', 'Evangelist', 'Examinator', 'Expediteur', 'Explantatiemedewerker', + 'Fabrikant', 'Facilitair Manager', 'Facturist', 'Farmacoloog', 'Fietsenmaker', 'Fijnbankwerker', 'Filiaalhouder', 'Filmer', 'Filmregisseur', 'Filosoof', 'Filterreiniger', 'Financieel analist', 'Fluitenbouwer', 'Fotograaf', 'Fotograveur', 'Fotolaborant', 'Fotolaboratoriumbediende', 'Fotolithograaf', 'Fotoredacteur', 'Framebouwer', 'Frezer', 'Fruitteler', 'Fysicus', 'Fysioloog', 'Fysiotherapeut', + 'Galvaniseur', 'Game Designer', 'Garagehouder', 'Garderobejuffrouw', 'Garnalenpeller', 'Gasleidinglegger', 'Gastvrouw', 'Gecommitteerde', 'Gedeputeerde', 'Gemeentesecretaris', 'Geneeskundige', 'Generaal', 'Geodeet', 'Geograaf', 'Geoloog', 'Gerant', 'Gerechtsdeurwaarder', 'Gereedschapsmaker', 'Gereedschapssmid', 'Geschiedkundige', 'Gevangenbewaarder', 'Gezaghebber', 'Gezagvoerder', 'Gezondheidsbegeleider', 'Gezondheidsfysicus', 'Gezondheidstechnicus', 'Gidsenschrijver', 'Gieterijtechnicus', 'Gietmachinebediener', 'Gigolo', 'Gipsverbandmeester', 'Gitarist', 'Glasblazer', 'Glasgraveur', 'Glasslijper', 'Glaszetter', 'Glazenhaler', 'Glazenmaker', 'Glazenwasser', 'Goochelaar', 'Goudsmid', 'Goudzoeker', 'Grafdelver', 'Graficus', 'Grafisch ontwerper', 'Grafoloog', 'Graveur', 'Griendwerker', 'Griffier', 'Grimeur', 'Groenteteler', 'Groepsleider', 'Groepsvervoer', 'Grondsteward', 'Grondstewardess', 'Grondwerker', 'Groothandelaar', 'Gymleraar', 'Gynaecoloog', + 'Handelaar', 'Handelscorrespondent', 'Handwever', 'Havenarbeider', 'Havenmeester', 'Heemraad', 'Heftruckchauffeur', 'Heibaas', 'Heier', 'Heilpedagoog', 'Heilsoldaat', 'Helpdeskmedewerker', 'Herbergier', 'Hijsmachinist', 'Historicus', 'Hoefsmid', 'Hoekman', 'Hofmeester', 'Homeopaat', 'Hondenfokker', 'Hondentoiletteerder', 'Hondentrimmer', 'Hoofd', 'Hoofdambtenaar', 'Hoofdcontroleur', 'Hoofdredacteur', 'Hoofduitvoerder', 'Hoofdverpleegkundige', 'Hoofdwerktuigkundige', 'Hoogleraar', 'Hoornist', 'Hoorspelregisseur', 'Horlogemaker', 'Hostess', 'Hotelier', 'Hotelmanager', 'Hotelportier', 'Houtbewerker', 'Houtmodelmaker', 'Houtsnijder', 'Houtvester', 'Houtwarensamensteller', 'Hovenier', 'Huidtherapeut', 'Huisarts', 'Huisbaas', 'Huisbewaarder', 'Huishoudhulp', 'Huishoudster', 'Huisschilder', 'Hulparbeider', 'Hulpautomonteur', 'Hulpkok', 'Hulpverkoper', 'Huurmoordenaar', 'Hydroloog', + 'IJscoman', 'IJzervlechter', 'Illusionist', 'Illustrator', 'Imam', 'Imker', 'Importeur', 'Impresario', 'Industrieel ontwerper', 'Ingenieur', 'Inkoper', 'Inrijger', 'Inseminator', 'Inspecteur', 'Installateur', 'Instructeur', 'Instrumentalist', 'Instrumentmaker', 'Interieurarchitect', 'Interieurverzorger', 'Interne accountant', 'Internist', + 'Jachtopzichter', 'Jager', 'Jongleur', 'Journalist', 'Justitieel Aanklager', 'Juwelier', 'Judoleraar', + 'Kaartenzetter', 'Kaasmaker', 'Kabelsplitser', 'Kabelwerker', 'Kanaalmeester', 'Kantonnier', 'Kantoorhulp', 'Kapitein', 'Kapper', 'Kappershulp', 'Kardinaal', 'Karteerder', 'Kartonnagewerker', 'Kassamedewerker', 'Kassier', 'Kelner', 'Keizer', 'Keramist', 'Kermisexploitant', 'Kernmaker', 'Kerstman', 'Ketelmetselaar', 'Keukenassistent', 'Keukenknecht', 'Keurder', 'Keuringsambtenaar', 'Keurmeester', 'Kinderverzorgende', 'Kleermaker', 'Kleidelver', 'Kleinhandelaar', 'Klerk', 'Kleuterleider', 'Klokkenmaker', 'Klompenmaker', 'Kloosterling', 'Kno-arts', 'Koerier', 'Koetsier', 'Kok', 'Komiek', 'Kompel', 'Kooiker', 'Kooiman', 'Koordirigent', 'Koperslager', 'Kostendeskundige', 'Koster', 'Kostprijscalculator', 'Kozijnenmaker', 'Kraamverzorgende', 'Kraamhulp', 'Kraanmachinist', 'Kredietanalist', 'Kredietbeoordelaar', 'Kruidendokter', 'Kruier', 'Kuiper', 'Kunstcriticus', 'Kunstenaar', 'Kunstschilder', 'Kustlichtwachter', 'Kwitantieloper', + 'Laadschopbestuurder', 'Laborant', 'Laboratoriumbediende', 'Lader', 'Ladingmeester', 'Lakei', 'Landarbeider', 'Landbouwer', 'Landbouwkundige', 'Landbouwmachinebestuurder', 'Landbouwmilieubeheer', 'Landbouwwerktuigenhersteller', 'Landmeetkundige', 'Landmeettechnicus', 'Landmeter', 'Landschapsarchitect', 'Landschapsbeheer', 'Lasinspecteur', 'Lasser', 'Lastechnicus', 'Lector', 'Ledertechnoloog', 'Lederwarenmaker', 'Leerbewerker', 'Leerkracht', 'Leeuwentemmer', 'Legionair', 'Leidekker', 'Leidinggevende', 'Leraar', 'Letterkundige', 'Leurder', 'Lichtdrukker', 'Lichtmatroos', 'Lijstenmaker', 'Linktrainer', 'Literator', 'Literatuurcriticus', 'Literatuuronderzoeker', 'Logopedist', 'Logotherapeut', 'Lokettist', 'Longfunctieassistent', 'Loodgieter', 'Loods', 'Loodschef', 'Loonadministrateur', 'Loopbaancoach', 'Losser', 'Luchtverkeersleider', + 'Maatnemer', 'Maatschappelijk medewerker', 'Maatschappelijk werker', 'Maatschoenmaker', 'Machine vouwer', 'Machinebankwerker', 'Machinebediende', 'Machinesteller', 'Manegehouder', 'Machinist', 'Magazijnbediende', 'Magazijnbeheerder', 'Magazijnknecht', 'Magnetiseur', 'Makelaar', 'Managementassistent', 'Manager', 'Mandenmaker', 'Mannequin', 'Manueel therapeut', 'Marconist', 'Marinier', 'Maritiem Officier', 'Marechaussee', 'Marketingadviseur', 'Marketingassistent', 'Marktkoopman', 'Masseur', 'Mathematicus', 'Matroos', 'Mattenmaker', 'Medewerker', 'Mediatrainer', 'Meester restauratiestukadoor', 'Meettechnicus', 'Melkboer', 'Metaalbewerker', 'Metaalbrander', 'Metaalbuiger', 'Metaalfrezer', 'Metaalgieter', 'Metaalkundige', 'Meteoroloog', 'Meteropnemer', 'Metselaar', 'Meubelbeeldhouwer', 'Meubelmaker', 'Meubelstoffeerder', 'Meubelstoffennaaister', 'Meubeltekenaar', 'Mijnbouwkundige', 'Middenstander', 'Mijnwerker', 'Milieudeskundige', 'Milieuhygiënist', 'Militair', 'Mimespeler', 'Min', 'Mineralenbewerker', 'Minister', 'Minister-president', 'Model', 'Modelmaker', 'Modelnaaister', 'Molenaar', 'Modeontwerper', 'Mondhygiënist', 'Monnik', 'Monteur', 'Mosselman', 'Motordemonteur', 'Motordrijver', 'Motormonteur', 'Mouldroomtechnicus', 'Munter', 'Muntmeester', 'Museumconservator', 'Museumgids', 'Museumhouder', 'Museummedewerker', 'Musicus', 'Muziekinstrumentenmaker', 'Muziekprogrammeur', + 'Naaister', 'Nachtwaker', 'Nagelstyliste', 'Nasynchronisatieregisseur', 'Natuurkundeleraar', 'Natuurkundige', 'Natuurwetenschapper', 'Navigator', 'Neonatoloog', 'Nettenboeter', 'Netwerkbeheerder', 'Neurochirurg', 'Neuroloog', 'Neurofysioloog', 'Nieuwslezer', 'Nijverheidsconsulent', 'Nko-arts', 'Nopster', 'Notaris', 'Nucleair geneeskundige', + 'Ober', 'Oberkelner', 'Objectleider', 'Oceanoloog', 'Octrooigemachtigde', 'Officier', 'Officier van justitie', 'Olieslager', 'Omroeper', 'Omsteller', 'Oncoloog', 'Onderhoudsloodgieter', 'Onderhoudsman', 'Onderhoudsmedewerker', 'Onderhoudsmonteur', 'Ondernemer', 'Onderofficier', 'Ondersteunende', 'Onderwaterwerker', 'Onderwijsassistent', 'Onderwijstechnicus', 'Onderwijzer', 'Onderzoeker', 'Onderzoeker in opleiding', 'Ontdekkingsreiziger', 'Ontmijner', 'Ontvlekker', 'Ontwerper', 'Oogarts', 'Operateur', 'Operatieassistent', 'Operational auditor', 'Operator', 'Opkoper', 'Opperman', 'Opsporingsambtenaar', 'Opsporingsingenieur', 'Opticien', 'Optometrist', 'Opvoedingsconsulent', 'Opvoedingsvoorlichter', 'Opzichter', 'Organist', 'Organizer', 'Ornitholoog', 'Orthodontist', 'Orthopedagoog', 'Orthopeed', 'Orthoptist', 'ORL-arts', 'Osteopaat', 'Ouvreuse', 'Ovenman', + 'Paardenfokker', 'Pakhuischef', 'Paleontoloog', 'Palfrenier', 'Pandjesbaas', 'Papierschepper', 'Papiervernisser', 'Parkeerwachter', 'Parketvloerenlegger', 'Parketwacht', 'Pastoor', 'Paswerker', 'Patholoog', 'Patholoog-anatoom', 'Patissier', 'Patroonmaker', 'Patroontekenaar', 'Pedagoog', 'Pedicure', 'Perronopzichter', 'Perser', 'Personeelsfunctionaris', 'Peuterwerker', 'Pianist', 'Pianostemmer', 'Piccolo', 'Pijpfitter', 'Pikeur', 'Piloot', 'Plaatwerker', 'Planner', 'Plantenteeltdeskundige', 'Plantsoenmedewerker', 'Plasticvormer', 'Pleitbezorger', 'Poelier', 'Poepruimer', 'Poetser', 'Podiatrist', 'Podoloog', 'Poffertjesbakker', 'Polisopmaker', 'Politicus', 'Politieagent', 'Politiecommissaris', 'Politie-inspecteur', 'Politiek analist', 'Pontschipper', 'Pooier', 'Porder', 'Portier', 'Portretfotograaf', 'Postbediende', 'Postbesteller', 'Postbode', 'Postcommandant', 'Postexpediteur', 'Postsorteerder', 'Pottenbakker', 'Predikant', 'Premier', 'Presentator', 'President', 'Priester', 'Probleemanalist', 'Procesmanager', 'Procesoperator', 'Procureur', 'Procureur des Konings', 'Producer', 'Productenmaker', 'Productensorteerder', 'Productiebegeleider', 'Productieleider', 'Productiemedewerker', 'Productieplanner', 'Professor', 'Professioneel worstelaar', 'Programmamaker', 'Programmeur', 'Projectadviseur', 'Projectleider', 'Projectmanager', 'Projectontwikkelaar', 'Promovendus', 'Prostitué', 'Prostituee', 'Pruikenmaker', 'Psychiater', 'Psychologisch assistent', 'Psycholoog', 'Psychotherapeut', 'Psychomotorisch kindertherapeut', 'Purser', 'Putjesschepper', + 'Quarantaine-beambte', 'Quizmaster', 'Quantity surveyor', + 'Raadsman', 'Radarwaarnemer', 'Radiotherapeutisch laborant', 'Radiograaf', 'Radiolaborant', 'Radiotechnicus', 'Radiotelegrafist', 'Rangeerder', 'Recensent', 'Receptionist', 'Recherchekundige', 'Rechercheur', 'Rechtbanktekenaar', 'Rechter', 'Reclame-ontwerper', 'Reclameacquisiteur', 'Reclamedeskundige', 'Reclametekenaar', 'Redacteur', 'Redactiechef', 'Regisseur', 'Registeraccountant', 'Reiniger', 'Reinigingsdienstarbeider', 'Reisleider', 'Reisprogrammeur', 'Reisverkoper', 'Rekenaar', 'Rekwisietenmaker', 'Rentmeester', 'Reparateur', 'Ridder', 'Repetitor', 'Reproductietekenaar', 'Restauranthouder', 'Rietmeubelmaker', 'Rietwerker', 'Rijtuigspuiter', 'Rijwielhersteller', 'Rolluikentimmerman', 'Rondvaartgids', 'Röntgenoloog', 'Ruimtevaarder', + 'Samensteller', 'Saunahouder', 'Scenarioschrijver', 'Schaaldierenkweker', 'Schaaldierenpeller', 'Schaapherder', 'Schadecorrespondent', 'Schadetaxateur', 'Schakelbordwachter', 'Schaker', 'Schapenscheerder', 'Scharensliep', 'Scheepskapitein', 'Scheepskok', 'Scheepspurser', 'Scheepsschilder', 'Scheepstimmerman', 'Scheidsrechter', 'Scheikundige', 'Schillenboer', 'Schipper', 'Schoenfabrieksarbeider', 'Schoenhersteller', 'Schoenmaker', 'Schoolbegeleider', 'Schooldecaan', 'Schooldirecteur', 'Schoolinspecteur', 'Schoonheidsmasseur', 'Schoonheidsspecialiste', 'Schoonmaker', 'Schoorsteenveger', 'Schotter', 'Schrijftolk', 'Schrijver', 'Schuurder', 'Secretaresse', 'Secretariaatsmedewerker', 'Secretaris', 'Seismoloog', 'Seizoenarbeider', 'Seksuoloog', 'Selecteur', 'Sergeant', 'Seroloog', 'Serveerster', 'Setdresser', 'Sigarenmaker', 'Sinoloog', 'Sjorder', 'Sjouwer', 'Slachter', 'Slager', 'Slagwerker', 'Slijter', 'Sloper', 'Sluiswachter', 'Smeerder', 'Smelter', 'Smid', 'Snackbarbediende', 'Snackbarhouder', 'Snijder', 'Sociotherapeut', 'Softwareontwikkelaar', 'Soldaat', 'Soldeerder', 'Sommelier', 'Sondeerder', 'Songwriter', 'Souschef', 'Spoeler', 'Souffleur', 'Specialist', 'Spelersmakelaar', 'Speltherapeut', 'Spindoppenmonteur', 'Spion', 'Sportinstructeur', 'Stadsomroeper', 'Stadstimmerman', 'Stanser', 'Stationschef', 'Statisticus', 'Stedenbouwkundige', 'Steenbewerker', 'Steenfabrikant', 'Steenhouwer', 'Steenzetter', 'Steigerbouwer', 'Steigermaker', 'Stenotypist', 'Stereotypeur', 'Sterilisatieassistent', 'Stewardess', 'Stoelenmatter', 'Stoffeerder', 'Storingsmonteur', 'Straatverkoper', 'Strandjutter', 'Stratenmaker', 'Stripper', 'Stucwerker', 'Stukadoor', 'Stuurman', 'Stuwadoor', 'Stylist', 'Stypengalvaniseur', 'Surinamist', 'Systeemanalist', 'Systeembeheerder', 'Systeemontwerper', 'Systeemprogrammeur', + 'Takelaar', 'Tandarts', 'Tandartsassistente', 'Tandtechnicus', 'Tapper', 'Taxichauffeur', 'Taxidermist', 'Technicus', 'Technisch Oogheelkundig Assistent', 'Technisch tekenaar', 'Tegelzetter', 'Tekenaar', 'Tekstschrijver', 'Telecommunicatiemonteur', 'Telefoniste', 'Telegrafist', 'Televisieregisseur', 'Televisietechnicus', 'Telexist', 'Tennisser', 'Terrazzovloerenlegger', 'Terreinchef', 'Tester', 'Textieldrukker', 'Textiellaborant', 'Textielopmaker', 'Textielproductenmaker', 'Theateragent', 'Theatertechnicus', 'Therapeut', 'Timmerman', 'Tingieter', 'Toetsenist', 'Tolk', 'Toneelfigurant', 'Toneelmeester', 'Toneelregisseur', 'Toneelschrijver', 'Toneelspeler', 'Torenkraanmonteur', 'Totalisatormedewerker', 'Touringcarchauffeur', 'Touwslager', 'Traceur', 'Trainingsacteur', 'Traiteur', 'Trambestuurder', 'Transportplanner', 'Treinbestuurder', 'Treinconducteur', 'Treindienstleider', 'Treinduwer', 'Treinmachinist', 'Trekkerchauffeur', 'Tuiger', 'Tuinarchitect', 'Tuinder', 'Tuinman', 'Typiste', + 'Uitgever', 'Uitsmijter', 'Uitvaartbegeleider', 'Uitvinder', 'Uitvoerder', 'Uroloog', 'Uurwerkmaker', + 'Vakkenvuller', 'Valet', 'Veearts', 'Veehouder', 'Veeverloskundige', 'Veiligheidsbeambte', 'Veilinghouder', 'Verfspuiter', 'Vergaderstenograaf', 'Verhuizer', 'Verhuurder', 'Verkeersdienstsimulator', 'Verkeersinspecteur', 'Verkeerskundige', 'Verkeersleider', 'Verkeersonderzoeker', 'Verkeersplanoloog', 'Verkoopchef', 'Verkoopstyliste', 'Verkoper', 'Verloskundige', 'Verpleeghulp', 'Verpleegkundige', 'Verslaggever', 'Verspaner', 'Vertaler', 'Vertegenwoordiger', 'Vervoer', 'Vervoersinspecteur', 'Verwarmingsinstallateur', 'Verwarmingsmonteur', 'Verzekeringsagent', 'Verzekeringsdeskundige', 'Verzekeringsinspecteur', 'Verzorgende', 'Vicaris', 'Videoclipregisseur', 'Videojockey', 'Vioolbouwer', 'Violist', 'Vinoloog', 'Viroloog', 'Visagiste', 'Visfileerder', 'Visser', 'Vj', 'Vleeswarenmaker', 'Vlieger', 'Vliegtuigplaatwerker', 'Vliegtuigtimmerman', 'Vloerlegger', 'Voedingsmiddelentechnoloog', 'Voedingsvoorlichter', 'Voeger', 'Voertuigbekleder', 'Voetballer', 'Volder of Voller', 'Voorganger', 'Voorlichter', 'Voorlichtingsfunctionaris', 'Voorraadadministrateur', 'Voorzitter', 'Vormende', 'Vormenmaker', 'Vormer', 'Vormgever', 'Vrachtwagenchauffeur', 'Vuilnisman', 'Vulkanoloog', 'Vuurspuwer', 'Vuurtorenwachter', 'Vroedvrouw', + 'Waard', 'Waardijn', 'Waarzegger', 'Wachtcommandant', 'Wachter', 'Wachtmeester', 'Wagenmaker', 'Wasser', 'Wasserettehouder', 'Waterbouwkundige', 'Webdesigner', 'Weefmachinesteller', 'Weerkundige', 'Weerpresentator', 'Wegenbouwarbeider', 'Wegenbouwmachinist', 'Wegmarkeerder', 'Werkleider-dokmeester', 'Werktuigbouwkundige', 'Werktuigkundige', 'Werkvoorbereider', 'Wethouder', 'Wijkmeester', 'Wijnboer', 'Winkelbediende', 'Winkelier', 'Wiskundige', 'Wisselkassier', 'Wisselmaker', 'Woonbegeleider', + 'Xylofonist', + 'Yogaleraar', + 'Zaakwaarnemer', 'Zakenman', 'Zanger', 'Zeefdrukker', 'Zeeman', 'Zeepzieder', 'Zeilmaker', 'Zelfstandig ondernemer', 'Zetter', 'Ziekenhuisapotheker', 'Ziekenhuishygiënist', 'Ziekenverzorgende', 'Zilversmid', 'Zweminstructeur', 'Zoöloog', ); - protected static $companySuffix = array('VOF', 'CV', 'LLP', 'BV', 'NV', 'IBC', 'CSL', 'EESV', 'SE', 'CV', 'Stichting', '& Zonen', '& Zn'); + protected static $companySuffix = array( + 'VOF', 'CV', 'LLP', 'BV', 'NV', 'IBC', 'CSL','EESV', 'SE', 'CV', 'Stichting', '& Zonen', '& Zn' + ); + + protected static $product = array( + 'Keuken', 'Media', 'Meubel', 'Sanitair', 'Elektronica', 'Schoenen', + 'Zorg', 'Muziek', 'Audio', 'Televisie', 'Pasta', 'Lunch', 'Boeken', 'Cadeau', 'Kunst', 'Tuin', 'Klus', + 'Video', 'Sieraden', 'Kook', 'Woon', 'Pizza', 'Mode', 'Haar', 'Kleding', 'Antiek', 'Interieur', 'Gadget', + 'Foto', 'Computer', 'Witgoed', 'Bruingoed', 'Broeken', 'Pakken', 'Maatpak', 'Fietsen', 'Speelgoed', + 'Barbecue', 'Sport', 'Fitness', 'Brillen', 'Bakkers', 'Drank', 'Zuivel', 'Pret', 'Vis', 'Wijn', 'Salade', + 'Terras', 'Borrel', 'Dieren', 'Aquaria', 'Verf', 'Behang', 'Tegel', 'Badkamer', 'Decoratie' + ); + + protected static $type = array( + 'Markt', 'Kampioen', 'Expert', 'Concurrent', 'Shop', 'Expert', 'Magazijn', + 'Dump', 'Store', 'Studio', 'Boulevard', 'Fabriek', 'Groep', 'Huis', 'Salon', 'Vakhuis', 'Winkel', 'Gigant', + 'Reus', 'Plaza', 'Park', 'Tuin' + ); + + protected static $store = array( + 'Boekhandel', 'Super', 'Tabakzaak', 'Schoenmaker', 'Kaashandel', 'Slagerij', + 'Smederij', 'Bakkerij', 'Bierbrouwer', 'Kapperszaak', 'Groenteboer', 'Bioboer', 'Fietsenmaker', 'Opticien', + 'Café', 'Garage' + ); + + + /** + * @example 'Fietsenmaker Zijlemans' + * + * @return string + */ + public function company() + { + $determinator = static::numberBetween(0, 2); + switch ($determinator) { + case 0: + $companyName = static::randomElement(static::$product) . ' ' . static::randomElement(static::$type); + break; + case 1: + $companyName = static::randomElement(static::$product) . strtolower(static::randomElement(static::$type)); + break; + case 2: + $companyName = static::randomElement(static::$store) . ' ' . $this->generator->lastName; + break; + } + + if (0 !== static::numberBetween(0, 1)) { + return $companyName . ' ' . static::randomElement(static::$companySuffix); + } + + return $companyName; + } /** * Belasting Toegevoegde Waarde (BTW) = VAT * * @example 'NL123456789B01' * - * @see (dutch) http://www.belastingdienst.nl/wps/wcm/connect/bldcontentnl/belastingdienst/zakelijk/btw/administratie_bijhouden/btw_nummers_controleren/uw_btw_nummer - * + * @see http://www.belastingdienst.nl/wps/wcm/connect/bldcontentnl/belastingdienst/zakelijk/btw/administratie_bijhouden/btw_nummers_controleren/uw_btw_nummer * * @return string VAT Number */ public static function vat() { return sprintf("%s%d%s%d", 'NL', self::randomNumber(9, true), 'B', self::randomNumber(2, true)); - } /** * Alias dutch vat number format + * + * @return string */ public static function btw() { diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/nl_NL/Person.php b/vendor/fzaninotto/faker/src/Faker/Provider/nl_NL/Person.php index 0bd09a44..a3d7dc8a 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/nl_NL/Person.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/nl_NL/Person.php @@ -26,7 +26,7 @@ class Person extends \Faker\Provider\Person 'mr.', 'dr.', 'ir.', 'drs', 'bacc.', 'kand.', 'dr.h.c.', 'prof.', 'ds.', 'ing.', 'bc.' ); - private static $suffix = array( + protected static $suffix = array( 'BA', 'Bsc', 'LLB', 'LLM', 'MA', 'Msc', 'MPhil', 'D', 'PhD', 'AD', 'B', 'M' ); @@ -116,7 +116,7 @@ class Person extends \Faker\Provider\Person 'Huijzing', 'Huisman', 'Huls', 'Hulshouts', 'Hulskes', 'Hulst', 'van Hulten', 'Huurdeman', 'van het Heerenveen', 'Jaceps', 'Jacobi', 'Jacobs', 'Jacquot', 'de Jager', 'Jans', 'Jansdr', 'Janse', 'Jansen', 'Jansen', 'Jansse', 'Janssen', 'Janssens', 'Jasper dr', 'Jdotte', 'Jeggij', 'Jekel', 'Jerusalem', 'Jochems', - 'Jones', 'de Jong', 'Jonkman', 'Joosten', 'Jorlink', 'Jorrisen', 'van Jumiège', 'Jurrijens', 'Köster', + 'Jones', 'de Jong', 'Jonkman', 'Joosten', 'Jorlink', 'Jorissen', 'van Jumiège', 'Jurrijens', 'Köster', 'van der Kaay', 'de Kale', 'Kallen', 'Kalman', 'Kamp', 'Kamper', 'Karels', 'Kas', 'van Kasteelen', 'Kathagen', 'Keijser', 'de Keijser', 'Keijzer', 'de Keijzer', 'Keltenie', 'van Kempen', 'Kerkhof', 'Ketel', 'Ketting', 'der Kijnder', 'van der Kint', 'Kirpenstein', 'Kisman', 'van Klaarwater', 'van de Klashorst', 'Kleibrink', @@ -288,7 +288,7 @@ class Person extends \Faker\Provider\Person */ public static function titleMale() { - return static::title(); + return static::randomElement(static::$title); } /** @@ -296,7 +296,7 @@ class Person extends \Faker\Provider\Person */ public static function titleFemale() { - return static::title(); + return static::randomElement(static::$title); } /** @@ -342,7 +342,6 @@ class Person extends \Faker\Provider\Person } else { $nr[0] = 1; $nr[1]++; - } } return implode('', array_reverse($nr)); diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/pt_BR/Payment.php b/vendor/fzaninotto/faker/src/Faker/Provider/pt_BR/Payment.php index 9643d685..1a525613 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/pt_BR/Payment.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/pt_BR/Payment.php @@ -69,4 +69,78 @@ class Payment extends \Faker\Provider\Payment { return static::iban($countryCode, $prefix, $length); } + + + /** + * @see list of Brazilians banks (2018-02-15), source: https://pt.wikipedia.org/wiki/Lista_de_bancos_do_Brasil + */ + protected static $banks = array( + 'BADESUL Desenvolvimento S.A. – Agência de Fomento/RS', + 'Banco Central do Brasil', + 'Banco da Amazônia', + 'Banco de Brasília', + 'Banco de Desenvolvimento de Minas Gerais', + 'Banco de Desenvolvimento do Espírito Santo', + 'Banco de Desenvolvimento do Paraná', + 'Banco do Brasil', + 'Banco do Estado de Sergipe Banese Estadual', + 'Banco do Estado do Espírito Santo Banestes', + 'Banco do Estado do Pará', + 'Banco do Estado do Rio Grande do Sul', + 'Banco do Nordeste do Brasil', + 'Banco Nacional de Desenvolvimento Econômico e Social', + 'Banco Regional de Desenvolvimento do Extremo Sul', + 'Caixa Econômica Federal', + 'Banco ABN Amro S.A.', + 'Banco Alfa', + 'Banco Banif', + 'Banco BBM', + 'Banco BMG', + 'Banco Bonsucesso', + 'Banco BTG Pactual', + 'Banco Cacique', + 'Banco Caixa Geral - Brasil', + 'Banco Citibank', + 'Banco Credibel', + 'Banco Credit Suisse', + 'Góis Monteiro & Co', + 'Banco Fator', + 'Banco Fibra', + 'Agibank', + 'Banco Guanabara', + 'Banco Industrial do Brasil', + 'Banco Industrial e Comercial', + 'Banco Indusval', + 'Banco Inter', + 'Banco Itaú BBA', + 'Banco ItaúBank', + 'Banco Itaucred Financiamentos', + 'Banco Mercantil do Brasil', + 'Banco Modal Modal', + 'Banco Morada', + 'Banco Pan', + 'Banco Paulista', + 'Banco Pine', + 'Banco Renner', + 'Banco Ribeirão Preto', + 'Banco Safra', + 'Banco Santander', + 'Banco Sofisa', + 'Banco Topázio', + 'Banco Votorantim', + 'Bradesco Bradesco', + 'Itaú Unibanco', + 'Banco Original', + 'Banco Neon', + 'Nu Pagamentos S.A', + 'XP Investimentos Corretora de Câmbio Títulos e Valores Mobiliários S.A', + ); + + /** + * @example 'Banco Neon' + */ + public static function bank() + { + return static::randomElement(static::$banks); + } } diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/pt_PT/Address.php b/vendor/fzaninotto/faker/src/Faker/Provider/pt_PT/Address.php index a6e10099..d804ff2c 100644 --- a/vendor/fzaninotto/faker/src/Faker/Provider/pt_PT/Address.php +++ b/vendor/fzaninotto/faker/src/Faker/Provider/pt_PT/Address.php @@ -4,7 +4,7 @@ namespace Faker\Provider\pt_PT; class Address extends \Faker\Provider\Address { - protected static $streetPrefix = array('Av.', 'Avenida', 'R.', 'Rua', 'Travessa', 'Largo'); + protected static $streetPrefix = array('Av.', 'Avenida', 'R.', 'Rua', 'Tv.', 'Travessa', 'Lg.', 'Largo'); protected static $streetNameFormats = array( '{{streetPrefix}} {{lastName}}', diff --git a/vendor/fzaninotto/faker/src/Faker/Provider/pt_PT/Company.php b/vendor/fzaninotto/faker/src/Faker/Provider/pt_PT/Company.php new file mode 100644 index 00000000..971d18f5 --- /dev/null +++ b/vendor/fzaninotto/faker/src/Faker/Provider/pt_PT/Company.php @@ -0,0 +1,16 @@ + 21, 'N' => 22, 'O' => 35, - 'p' => 23, + 'P' => 23, 'Q' => 24, 'T' => 27, 'U' => 28, diff --git a/vendor/fzaninotto/faker/test/Faker/Calculator/IbanTest.php b/vendor/fzaninotto/faker/test/Faker/Calculator/IbanTest.php deleted file mode 100644 index 197048e5..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Calculator/IbanTest.php +++ /dev/null @@ -1,306 +0,0 @@ -assertEquals($checksum, Iban::checksum($iban), $iban); - } - - public function validatorProvider() - { - return array( - array('AL47212110090000000235698741', true), - array('AD1200012030200359100100', true), - array('AT611904300234573201', true), - array('AZ21NABZ00000000137010001944', true), - array('BH67BMAG00001299123456', true), - array('BE68539007547034', true), - array('BA391290079401028494', true), - array('BR7724891749412660603618210F3', true), - array('BG80BNBG96611020345678', true), - array('CR0515202001026284066', true), - array('HR1210010051863000160', true), - array('CY17002001280000001200527600', true), - array('CZ6508000000192000145399', true), - array('DK5000400440116243', true), - array('DO28BAGR00000001212453611324', true), - array('EE382200221020145685', true), - array('FO6264600001631634', true), - array('FI2112345600000785', true), - array('FR1420041010050500013M02606', true), - array('GE29NB0000000101904917', true), - array('DE89370400440532013000', true), - array('GI75NWBK000000007099453', true), - array('GR1601101250000000012300695', true), - array('GL8964710001000206', true), - array('GT82TRAJ01020000001210029690', true), - array('HU42117730161111101800000000', true), - array('IS140159260076545510730339', true), - array('IE29AIBK93115212345678', true), - array('IL620108000000099999999', true), - array('IT60X0542811101000000123456', true), - array('KZ86125KZT5004100100', true), - array('KW81CBKU0000000000001234560101', true), - array('LV80BANK0000435195001', true), - array('LB62099900000001001901229114', true), - array('LI21088100002324013AA', true), - array('LT121000011101001000', true), - array('LU280019400644750000', true), - array('MK07250120000058984', true), - array('MT84MALT011000012345MTLCAST001S', true), - array('MR1300020001010000123456753', true), - array('MU17BOMM0101101030300200000MUR', true), - array('MD24AG000225100013104168', true), - array('MC5811222000010123456789030', true), - array('ME25505000012345678951', true), - array('NL91ABNA0417164300', true), - array('NO9386011117947', true), - array('PK36SCBL0000001123456702', true), - array('PL61109010140000071219812874', true), - array('PS92PALS000000000400123456702', true), - array('PT50000201231234567890154', true), - array('QA58DOHB00001234567890ABCDEFG', true), - array('RO49AAAA1B31007593840000', true), - array('SM86U0322509800000000270100', true), - array('SA0380000000608010167519', true), - array('RS35260005601001611379', true), - array('SK3112000000198742637541', true), - array('SI56263300012039086', true), - array('ES9121000418450200051332', true), - array('SE4550000000058398257466', true), - array('CH9300762011623852957', true), - array('TN5910006035183598478831', true), - array('TR330006100519786457841326', true), - array('AE070331234567890123456', true), - array('GB29NWBK60161331926819', true), - array('VG96VPVG0000012345678901', true), - array('YY24KIHB12476423125915947930915268', true), - array('ZZ25VLQT382332233206588011313776421', true), - - - array('AL4721211009000000023569874', false), - array('AD120001203020035910010', false), - array('AT61190430023457320', false), - array('AZ21NABZ0000000013701000194', false), - array('BH67BMAG0000129912345', false), - array('BE6853900754703', false), - array('BA39129007940102849', false), - array('BR7724891749412660603618210F', false), - array('BG80BNBG9661102034567', false), - array('CR051520200102628406', false), - array('HR121001005186300016', false), - array('CY1700200128000000120052760', false), - array('CZ650800000019200014539', false), - array('DK500040044011624', false), - array('DO28BAGR0000000121245361132', false), - array('EE38220022102014568', false), - array('FO626460000163163', false), - array('FI2112345600000780', false), - array('FR1420041010050500013M0260', false), - array('GE29NB000000010190491', false), - array('DE8937040044053201300', false), - array('GI75NWBK00000000709945', false), - array('GR160110125000000001230069', false), - array('GL896471000100020', false), - array('GT82TRAJ0102000000121002969', false), - array('HU4211773016111110180000000', false), - array('IS14015926007654551073033', false), - array('IE29AIBK9311521234567', false), - array('IL62010800000009999999', false), - array('IT60X054281110100000012345', false), - array('KZ86125KZT500410010', false), - array('KW81CBKU000000000000123456010', false), - array('LV80BANK000043519500', false), - array('LB6209990000000100190122911', false), - array('LI21088100002324013A', false), - array('LT12100001110100100', false), - array('LU28001940064475000', false), - array('MK0725012000005898', false), - array('MT84MALT011000012345MTLCAST001', false), - array('MR130002000101000012345675', false), - array('MU17BOMM0101101030300200000MU', false), - array('MD24AG00022510001310416', false), - array('MC58112220000101234567890', false), - array('ME2550500001234567895', false), - array('NL91ABNA041716430', false), - array('NO938601111794', false), - array('PK36SCBL000000112345670', false), - array('PL6110901014000007121981287', false), - array('PS92PALS00000000040012345670', false), - array('PT5000020123123456789015', false), - array('QA58DOHB00001234567890ABCDEF', false), - array('RO49AAAA1B3100759384000', false), - array('SM86U032250980000000027010', false), - array('SA038000000060801016751', false), - array('RS3526000560100161137', false), - array('SK311200000019874263754', false), - array('SI5626330001203908', false), - array('ES912100041845020005133', false), - array('SE455000000005839825746', false), - array('CH930076201162385295', false), - array('TN591000603518359847883', false), - array('TR33000610051978645784132', false), - array('AE07033123456789012345', false), - array('GB29NWBK6016133192681', false), - array('VG96VPVG000001234567890', false), - array('YY24KIHB1247642312591594793091526', false), - array('ZZ25VLQT38233223320658801131377642', false), - ); - } - - /** - * @dataProvider validatorProvider - */ - public function testIsValid($iban, $isValid) - { - $this->assertEquals($isValid, Iban::isValid($iban), $iban); - } - - public function alphaToNumberProvider() - { - return array( - array('A', 10), - array('B', 11), - array('C', 12), - array('D', 13), - array('E', 14), - array('F', 15), - array('G', 16), - array('H', 17), - array('I', 18), - array('J', 19), - array('K', 20), - array('L', 21), - array('M', 22), - array('N', 23), - array('O', 24), - array('P', 25), - array('Q', 26), - array('R', 27), - array('S', 28), - array('T', 29), - array('U', 30), - array('V', 31), - array('W', 32), - array('X', 33), - array('Y', 34), - array('Z', 35), - ); - } - - /** - * @dataProvider alphaToNumberProvider - */ - public function testAlphaToNumber($letter, $number) - { - $this->assertEquals($number, Iban::alphaToNumber($letter), $letter); - } - - public function mod97Provider() - { - // Large numbers - $return = array( - array('123456789123456789', 7), - array('111222333444555666', 73), - array('4242424242424242424242', 19), - array('271828182845904523536028', 68), - ); - - // 0-200 - for ($i = 0; $i < 200; $i++) { - $return[] = array((string)$i, $i % 97); - } - - return $return; - } - /** - * @dataProvider mod97Provider - */ - public function testMod97($number, $result) - { - $this->assertEquals($result, Iban::mod97($number), $number); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Calculator/InnTest.php b/vendor/fzaninotto/faker/test/Faker/Calculator/InnTest.php deleted file mode 100644 index 71d9193f..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Calculator/InnTest.php +++ /dev/null @@ -1,51 +0,0 @@ -assertEquals($checksum, Inn::checksum($inn), $inn); - } - - public function validatorProvider() - { - return array( - array('5902179757', true), - array('5408294405', true), - array('2724164617', true), - array('0726000515', true), - array('6312123552', true), - - array('1111111111', false), - array('0123456789', false), - ); - } - - /** - * @dataProvider validatorProvider - */ - public function testIsValid($inn, $isValid) - { - $this->assertEquals($isValid, Inn::isValid($inn), $inn); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Calculator/LuhnTest.php b/vendor/fzaninotto/faker/test/Faker/Calculator/LuhnTest.php deleted file mode 100644 index 2e814144..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Calculator/LuhnTest.php +++ /dev/null @@ -1,72 +0,0 @@ -assertInternalType('string', $checkDigit); - $this->assertEquals($checkDigit, Luhn::computeCheckDigit($partialNumber)); - } - - public function validatorProvider() - { - return array( - array('79927398710', false), - array('79927398711', false), - array('79927398712', false), - array('79927398713', true), - array('79927398714', false), - array('79927398715', false), - array('79927398716', false), - array('79927398717', false), - array('79927398718', false), - array('79927398719', false), - array(79927398713, true), - array(79927398714, false), - ); - } - - /** - * @dataProvider validatorProvider - */ - public function testIsValid($number, $isValid) - { - $this->assertEquals($isValid, Luhn::isValid($number)); - } - - /** - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Argument should be an integer. - */ - public function testGenerateLuhnNumberWithInvalidPrefix() - { - Luhn::generateLuhnNumber('abc'); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Calculator/TCNoTest.php b/vendor/fzaninotto/faker/test/Faker/Calculator/TCNoTest.php deleted file mode 100644 index 9e40d794..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Calculator/TCNoTest.php +++ /dev/null @@ -1,54 +0,0 @@ -assertEquals($checksum, TCNo::checksum($tcNo), $tcNo); - } - - public function validatorProvider() - { - return array( - array('22978160678', true), - array('26480045324', true), - array('47278360658', true), - array('34285002510', true), - array('19874561012', true), - - array('11111111111', false), - array('11234567899', false), - ); - } - - /** - * @dataProvider validatorProvider - * @param $tcNo - * @param $isValid - */ - public function testIsValid($tcNo, $isValid) - { - $this->assertEquals($isValid, TCNo::isValid($tcNo), $tcNo); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/DefaultGeneratorTest.php b/vendor/fzaninotto/faker/test/Faker/DefaultGeneratorTest.php deleted file mode 100644 index fa9eb852..00000000 --- a/vendor/fzaninotto/faker/test/Faker/DefaultGeneratorTest.php +++ /dev/null @@ -1,28 +0,0 @@ -assertNull($generator->value); - } - - public function testGeneratorReturnsDefaultValueForAnyPropertyGet() - { - $generator = new DefaultGenerator(123); - $this->assertSame(123, $generator->foo); - $this->assertNotNull($generator->bar); - } - - public function testGeneratorReturnsDefaultValueForAnyMethodCall() - { - $generator = new DefaultGenerator(123); - $this->assertSame(123, $generator->foobar()); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/GeneratorTest.php b/vendor/fzaninotto/faker/test/Faker/GeneratorTest.php deleted file mode 100644 index f15df441..00000000 --- a/vendor/fzaninotto/faker/test/Faker/GeneratorTest.php +++ /dev/null @@ -1,148 +0,0 @@ -addProvider(new FooProvider()); - $generator->addProvider(new BarProvider()); - $this->assertEquals('barfoo', $generator->format('fooFormatter')); - } - - public function testGetFormatterReturnsCallable() - { - $generator = new Generator; - $provider = new FooProvider(); - $generator->addProvider($provider); - $this->assertInternalType('callable', $generator->getFormatter('fooFormatter')); - } - - public function testGetFormatterReturnsCorrectFormatter() - { - $generator = new Generator; - $provider = new FooProvider(); - $generator->addProvider($provider); - $expected = array($provider, 'fooFormatter'); - $this->assertEquals($expected, $generator->getFormatter('fooFormatter')); - } - - /** - * @expectedException InvalidArgumentException - */ - public function testGetFormatterThrowsExceptionOnIncorrectProvider() - { - $generator = new Generator; - $generator->getFormatter('fooFormatter'); - } - - /** - * @expectedException InvalidArgumentException - */ - public function testGetFormatterThrowsExceptionOnIncorrectFormatter() - { - $generator = new Generator; - $provider = new FooProvider(); - $generator->addProvider($provider); - $generator->getFormatter('barFormatter'); - } - - public function testFormatCallsFormatterOnProvider() - { - $generator = new Generator; - $provider = new FooProvider(); - $generator->addProvider($provider); - $this->assertEquals('foobar', $generator->format('fooFormatter')); - } - - public function testFormatTransfersArgumentsToFormatter() - { - $generator = new Generator; - $provider = new FooProvider(); - $generator->addProvider($provider); - $this->assertEquals('bazfoo', $generator->format('fooFormatterWithArguments', array('foo'))); - } - - public function testParseReturnsSameStringWhenItContainsNoCurlyBraces() - { - $generator = new Generator(); - $this->assertEquals('fooBar#?', $generator->parse('fooBar#?')); - } - - public function testParseReturnsStringWithTokensReplacedByFormatters() - { - $generator = new Generator(); - $provider = new FooProvider(); - $generator->addProvider($provider); - $this->assertEquals('This is foobar a text with foobar', $generator->parse('This is {{fooFormatter}} a text with {{ fooFormatter }}')); - } - - public function testMagicGetCallsFormat() - { - $generator = new Generator; - $provider = new FooProvider(); - $generator->addProvider($provider); - $this->assertEquals('foobar', $generator->fooFormatter); - } - - public function testMagicCallCallsFormat() - { - $generator = new Generator; - $provider = new FooProvider(); - $generator->addProvider($provider); - $this->assertEquals('foobar', $generator->fooFormatter()); - } - - public function testMagicCallCallsFormatWithArguments() - { - $generator = new Generator; - $provider = new FooProvider(); - $generator->addProvider($provider); - $this->assertEquals('bazfoo', $generator->fooFormatterWithArguments('foo')); - } - - public function testSeed() - { - $generator = new Generator; - - $generator->seed(0); - $mtRandWithSeedZero = mt_rand(); - $generator->seed(0); - $this->assertEquals($mtRandWithSeedZero, mt_rand(), 'seed(0) should be deterministic.'); - - $generator->seed(); - $mtRandWithoutSeed = mt_rand(); - $this->assertNotEquals($mtRandWithSeedZero, $mtRandWithoutSeed, 'seed() should be different than seed(0)'); - $generator->seed(); - $this->assertNotEquals($mtRandWithoutSeed, mt_rand(), 'seed() should not be deterministic.'); - - $generator->seed('10'); - $this->assertTrue(true, 'seeding with a non int value doesn\'t throw an exception'); - } -} - -class FooProvider -{ - public function fooFormatter() - { - return 'foobar'; - } - - public function fooFormatterWithArguments($value = '') - { - return 'baz' . $value; - } -} - -class BarProvider -{ - public function fooFormatter() - { - return 'barfoo'; - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/AddressTest.php deleted file mode 100644 index c7f1814c..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/AddressTest.php +++ /dev/null @@ -1,47 +0,0 @@ -addProvider(new Address($faker)); - $this->faker = $faker; - } - - public function testLatitude() - { - $latitude = $this->faker->latitude(); - $this->assertInternalType('float', $latitude); - $this->assertGreaterThanOrEqual(-90, $latitude); - $this->assertLessThanOrEqual(90, $latitude); - } - - public function testLongitude() - { - $longitude = $this->faker->longitude(); - $this->assertInternalType('float', $longitude); - $this->assertGreaterThanOrEqual(-180, $longitude); - $this->assertLessThanOrEqual(180, $longitude); - } - - public function testCoordinate() - { - $coordinate = $this->faker->localCoordinates(); - $this->assertInternalType('array', $coordinate); - $this->assertInternalType('float', $coordinate['latitude']); - $this->assertGreaterThanOrEqual(-90, $coordinate['latitude']); - $this->assertLessThanOrEqual(90, $coordinate['latitude']); - $this->assertInternalType('float', $coordinate['longitude']); - $this->assertGreaterThanOrEqual(-180, $coordinate['longitude']); - $this->assertLessThanOrEqual(180, $coordinate['longitude']); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/BarcodeTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/BarcodeTest.php deleted file mode 100644 index 16ca3cd8..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/BarcodeTest.php +++ /dev/null @@ -1,46 +0,0 @@ -addProvider(new Barcode($faker)); - $faker->seed(0); - $this->faker = $faker; - } - - public function testEan8() - { - $code = $this->faker->ean8(); - $this->assertRegExp('/^\d{8}$/i', $code); - $codeWithoutChecksum = substr($code, 0, -1); - $checksum = substr($code, -1); - $this->assertEquals(TestableBarcode::eanChecksum($codeWithoutChecksum), $checksum); - } - - public function testEan13() - { - $code = $this->faker->ean13(); - $this->assertRegExp('/^\d{13}$/i', $code); - $codeWithoutChecksum = substr($code, 0, -1); - $checksum = substr($code, -1); - $this->assertEquals(TestableBarcode::eanChecksum($codeWithoutChecksum), $checksum); - } -} - -class TestableBarcode extends Barcode -{ - public static function eanChecksum($input) - { - return parent::eanChecksum($input); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/BaseTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/BaseTest.php deleted file mode 100644 index e619d5be..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/BaseTest.php +++ /dev/null @@ -1,572 +0,0 @@ -assertInternalType('integer', BaseProvider::randomDigit()); - } - - public function testRandomDigitReturnsDigit() - { - $this->assertGreaterThanOrEqual(0, BaseProvider::randomDigit()); - $this->assertLessThan(10, BaseProvider::randomDigit()); - } - - public function testRandomDigitNotNullReturnsNotNullDigit() - { - $this->assertGreaterThan(0, BaseProvider::randomDigitNotNull()); - $this->assertLessThan(10, BaseProvider::randomDigitNotNull()); - } - - - public function testRandomDigitNotReturnsValidDigit() - { - for ($i = 0; $i <= 9; $i++) { - $this->assertGreaterThanOrEqual(0, BaseProvider::randomDigitNot($i)); - $this->assertLessThan(10, BaseProvider::randomDigitNot($i)); - $this->assertNotSame(BaseProvider::randomDigitNot($i), $i); - } - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testRandomNumberThrowsExceptionWhenCalledWithAMax() - { - BaseProvider::randomNumber(5, 200); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testRandomNumberThrowsExceptionWhenCalledWithATooHighNumberOfDigits() - { - BaseProvider::randomNumber(10); - } - - public function testRandomNumberReturnsInteger() - { - $this->assertInternalType('integer', BaseProvider::randomNumber()); - $this->assertInternalType('integer', BaseProvider::randomNumber(5, false)); - } - - public function testRandomNumberReturnsDigit() - { - $this->assertGreaterThanOrEqual(0, BaseProvider::randomNumber(3)); - $this->assertLessThan(1000, BaseProvider::randomNumber(3)); - } - - public function testRandomNumberAcceptsStrictParamToEnforceNumberSize() - { - $this->assertEquals(5, strlen((string) BaseProvider::randomNumber(5, true))); - } - - public function testNumberBetween() - { - $min = 5; - $max = 6; - - $this->assertGreaterThanOrEqual($min, BaseProvider::numberBetween($min, $max)); - $this->assertGreaterThanOrEqual(BaseProvider::numberBetween($min, $max), $max); - } - - public function testNumberBetweenAcceptsZeroAsMax() - { - $this->assertEquals(0, BaseProvider::numberBetween(0, 0)); - } - - public function testRandomFloat() - { - $min = 4; - $max = 10; - $nbMaxDecimals = 8; - - $result = BaseProvider::randomFloat($nbMaxDecimals, $min, $max); - - $parts = explode('.', $result); - - $this->assertInternalType('float', $result); - $this->assertGreaterThanOrEqual($min, $result); - $this->assertLessThanOrEqual($max, $result); - $this->assertLessThanOrEqual($nbMaxDecimals, strlen($parts[1])); - } - - public function testRandomLetterReturnsString() - { - $this->assertInternalType('string', BaseProvider::randomLetter()); - } - - public function testRandomLetterReturnsSingleLetter() - { - $this->assertEquals(1, strlen(BaseProvider::randomLetter())); - } - - public function testRandomLetterReturnsLowercaseLetter() - { - $lowercaseLetters = 'abcdefghijklmnopqrstuvwxyz'; - $this->assertNotFalse(strpos($lowercaseLetters, BaseProvider::randomLetter())); - } - - public function testRandomAsciiReturnsString() - { - $this->assertInternalType('string', BaseProvider::randomAscii()); - } - - public function testRandomAsciiReturnsSingleCharacter() - { - $this->assertEquals(1, strlen(BaseProvider::randomAscii())); - } - - public function testRandomAsciiReturnsAsciiCharacter() - { - $lowercaseLetters = '!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~'; - $this->assertNotFalse(strpos($lowercaseLetters, BaseProvider::randomAscii())); - } - - public function testRandomElementReturnsNullWhenArrayEmpty() - { - $this->assertNull(BaseProvider::randomElement(array())); - } - - public function testRandomElementReturnsNullWhenCollectionEmpty() - { - $this->assertNull(BaseProvider::randomElement(new Collection(array()))); - } - - public function testRandomElementReturnsElementFromArray() - { - $elements = array('23', 'e', 32, '#'); - $this->assertContains(BaseProvider::randomElement($elements), $elements); - } - - public function testRandomElementReturnsElementFromAssociativeArray() - { - $elements = array('tata' => '23', 'toto' => 'e', 'tutu' => 32, 'titi' => '#'); - $this->assertContains(BaseProvider::randomElement($elements), $elements); - } - - public function testRandomElementReturnsElementFromCollection() - { - $collection = new Collection(array('one', 'two', 'three')); - $this->assertContains(BaseProvider::randomElement($collection), $collection); - } - - public function testShuffleReturnsStringWhenPassedAStringArgument() - { - $this->assertInternalType('string', BaseProvider::shuffle('foo')); - } - - public function testShuffleReturnsArrayWhenPassedAnArrayArgument() - { - $this->assertInternalType('array', BaseProvider::shuffle(array(1, 2, 3))); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testShuffleThrowsExceptionWhenPassedAnInvalidArgument() - { - BaseProvider::shuffle(false); - } - - public function testShuffleArraySupportsEmptyArrays() - { - $this->assertEquals(array(), BaseProvider::shuffleArray(array())); - } - - public function testShuffleArrayReturnsAnArrayOfTheSameSize() - { - $array = array(1, 2, 3, 4, 5); - $this->assertSameSize($array, BaseProvider::shuffleArray($array)); - } - - public function testShuffleArrayReturnsAnArrayWithSameElements() - { - $array = array(2, 4, 6, 8, 10); - $shuffleArray = BaseProvider::shuffleArray($array); - $this->assertContains(2, $shuffleArray); - $this->assertContains(4, $shuffleArray); - $this->assertContains(6, $shuffleArray); - $this->assertContains(8, $shuffleArray); - $this->assertContains(10, $shuffleArray); - } - - public function testShuffleArrayReturnsADifferentArrayThanTheOriginal() - { - $arr = array(1, 2, 3, 4, 5); - $shuffledArray = BaseProvider::shuffleArray($arr); - $this->assertNotEquals($arr, $shuffledArray); - } - - public function testShuffleArrayLeavesTheOriginalArrayUntouched() - { - $arr = array(1, 2, 3, 4, 5); - BaseProvider::shuffleArray($arr); - $this->assertEquals($arr, array(1, 2, 3, 4, 5)); - } - - public function testShuffleStringSupportsEmptyStrings() - { - $this->assertEquals('', BaseProvider::shuffleString('')); - } - - public function testShuffleStringReturnsAnStringOfTheSameSize() - { - $string = 'abcdef'; - $this->assertEquals(strlen($string), strlen(BaseProvider::shuffleString($string))); - } - - public function testShuffleStringReturnsAnStringWithSameElements() - { - $string = 'acegi'; - $shuffleString = BaseProvider::shuffleString($string); - $this->assertContains('a', $shuffleString); - $this->assertContains('c', $shuffleString); - $this->assertContains('e', $shuffleString); - $this->assertContains('g', $shuffleString); - $this->assertContains('i', $shuffleString); - } - - public function testShuffleStringReturnsADifferentStringThanTheOriginal() - { - $string = 'abcdef'; - $shuffledString = BaseProvider::shuffleString($string); - $this->assertNotEquals($string, $shuffledString); - } - - public function testShuffleStringLeavesTheOriginalStringUntouched() - { - $string = 'abcdef'; - BaseProvider::shuffleString($string); - $this->assertEquals($string, 'abcdef'); - } - - public function testNumerifyReturnsSameStringWhenItContainsNoHashSign() - { - $this->assertEquals('fooBar?', BaseProvider::numerify('fooBar?')); - } - - public function testNumerifyReturnsStringWithHashSignsReplacedByDigits() - { - $this->assertRegExp('/foo\dBa\dr/', BaseProvider::numerify('foo#Ba#r')); - } - - public function testNumerifyReturnsStringWithPercentageSignsReplacedByDigits() - { - $this->assertRegExp('/foo\dBa\dr/', BaseProvider::numerify('foo%Ba%r')); - } - - public function testNumerifyReturnsStringWithPercentageSignsReplacedByNotNullDigits() - { - $this->assertNotEquals('0', BaseProvider::numerify('%')); - } - - public function testNumerifyCanGenerateALargeNumberOfDigits() - { - $largePattern = str_repeat('#', 20); // definitely larger than PHP_INT_MAX on all systems - $this->assertEquals(20, strlen(BaseProvider::numerify($largePattern))); - } - - public function testLexifyReturnsSameStringWhenItContainsNoQuestionMark() - { - $this->assertEquals('fooBar#', BaseProvider::lexify('fooBar#')); - } - - public function testLexifyReturnsStringWithQuestionMarksReplacedByLetters() - { - $this->assertRegExp('/foo[a-z]Ba[a-z]r/', BaseProvider::lexify('foo?Ba?r')); - } - - public function testBothifyCombinesNumerifyAndLexify() - { - $this->assertRegExp('/foo[a-z]Ba\dr/', BaseProvider::bothify('foo?Ba#r')); - } - - public function testBothifyAsterisk() - { - $this->assertRegExp('/foo([a-z]|\d)Ba([a-z]|\d)r/', BaseProvider::bothify('foo*Ba*r')); - } - - public function testBothifyUtf() - { - $utf = 'œ∑´®†¥¨ˆøπ“‘和製╯°□°╯︵ ┻━┻🐵 🙈 ﺚﻣ ﻦﻔﺳ ﺲﻘﻄﺗ ﻮﺑﺎﻠﺘﺣﺪﻳﺩ،, ﺝﺰﻳﺮﺘﻳ ﺏﺎﺴﺘﺧﺩﺎﻣ ﺄﻧ ﺪﻧﻭ. ﺇﺫ ﻪﻧﺍ؟ ﺎﻠﺴﺗﺍﺭ ﻮﺘ'; - $this->assertRegExp('/'.$utf.'foo\dB[a-z]a([a-z]|\d)r/u', BaseProvider::bothify($utf.'foo#B?a*r')); - } - - public function testAsciifyReturnsSameStringWhenItContainsNoStarSign() - { - $this->assertEquals('fooBar?', BaseProvider::asciify('fooBar?')); - } - - public function testAsciifyReturnsStringWithStarSignsReplacedByAsciiChars() - { - $this->assertRegExp('/foo.Ba.r/', BaseProvider::asciify('foo*Ba*r')); - } - - public function regexifyBasicDataProvider() - { - return array( - array('azeQSDF1234', 'azeQSDF1234', 'does not change non regex chars'), - array('foo(bar){1}', 'foobar', 'replaces regex characters'), - array('', '', 'supports empty string'), - array('/^foo(bar){1}$/', 'foobar', 'ignores regex delimiters') - ); - } - - /** - * @dataProvider regexifyBasicDataProvider - */ - public function testRegexifyBasicFeatures($input, $output, $message) - { - $this->assertEquals($output, BaseProvider::regexify($input), $message); - } - - public function regexifyDataProvider() - { - return array( - array('\d', 'numbers'), - array('\w', 'letters'), - array('(a|b)', 'alternation'), - array('[aeiou]', 'basic character class'), - array('[a-z]', 'character class range'), - array('[a-z1-9]', 'multiple character class range'), - array('a*b+c?', 'single character quantifiers'), - array('a{2}', 'brackets quantifiers'), - array('a{2,3}', 'min-max brackets quantifiers'), - array('[aeiou]{2,3}', 'brackets quantifiers on basic character class'), - array('[a-z]{2,3}', 'brackets quantifiers on character class range'), - array('(a|b){2,3}', 'brackets quantifiers on alternation'), - array('\.\*\?\+', 'escaped characters'), - array('[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}', 'complex regex') - ); - } - - /** - * @dataProvider regexifyDataProvider - */ - public function testRegexifySupportedRegexSyntax($pattern, $message) - { - $this->assertRegExp('/' . $pattern . '/', BaseProvider::regexify($pattern), 'Regexify supports ' . $message); - } - - public function testOptionalReturnsProviderValueWhenCalledWithWeight1() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $this->assertNotNull($faker->optional(100)->randomDigit); - } - - public function testOptionalReturnsNullWhenCalledWithWeight0() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $this->assertNull($faker->optional(0)->randomDigit); - } - - public function testOptionalAllowsChainingPropertyAccess() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $faker->addProvider(new \ArrayObject(array(1))); // hack because method_exists forbids stubs - $this->assertEquals(1, $faker->optional(100)->count); - $this->assertNull($faker->optional(0)->count); - } - - public function testOptionalAllowsChainingMethodCall() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $faker->addProvider(new \ArrayObject(array(1))); // hack because method_exists forbids stubs - $this->assertEquals(1, $faker->optional(100)->count()); - $this->assertNull($faker->optional(0)->count()); - } - - public function testOptionalAllowsChainingProviderCallRandomlyReturnNull() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $values = array(); - for ($i=0; $i < 10; $i++) { - $values[]= $faker->optional()->randomDigit; - } - $this->assertContains(null, $values); - - $values = array(); - for ($i=0; $i < 10; $i++) { - $values[]= $faker->optional(50)->randomDigit; - } - $this->assertContains(null, $values); - } - - /** - * @link https://github.com/fzaninotto/Faker/issues/265 - */ - public function testOptionalPercentageAndWeight() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $faker->addProvider(new \Faker\Provider\Miscellaneous($faker)); - - $valuesOld = array(); - $valuesNew = array(); - - for ($i = 0; $i < 10000; ++$i) { - $valuesOld[] = $faker->optional(0.5)->boolean(100); - $valuesNew[] = $faker->optional(50)->boolean(100); - } - - $this->assertEquals( - round(array_sum($valuesOld) / 10000, 2), - round(array_sum($valuesNew) / 10000, 2) - ); - } - - public function testUniqueAllowsChainingPropertyAccess() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $faker->addProvider(new \ArrayObject(array(1))); // hack because method_exists forbids stubs - $this->assertEquals(1, $faker->unique()->count); - } - - public function testUniqueAllowsChainingMethodCall() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $faker->addProvider(new \ArrayObject(array(1))); // hack because method_exists forbids stubs - $this->assertEquals(1, $faker->unique()->count()); - } - - public function testUniqueReturnsOnlyUniqueValues() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $values = array(); - for ($i=0; $i < 10; $i++) { - $values[]= $faker->unique()->randomDigit; - } - sort($values); - $this->assertEquals(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), $values); - } - - /** - * @expectedException OverflowException - */ - public function testUniqueThrowsExceptionWhenNoUniqueValueCanBeGenerated() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - for ($i=0; $i < 11; $i++) { - $faker->unique()->randomDigit; - } - } - - public function testUniqueCanResetUniquesWhenPassedTrueAsArgument() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $values = array(); - for ($i=0; $i < 10; $i++) { - $values[]= $faker->unique()->randomDigit; - } - $values[]= $faker->unique(true)->randomDigit; - for ($i=0; $i < 9; $i++) { - $values[]= $faker->unique()->randomDigit; - } - sort($values); - $this->assertEquals(array(0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9), $values); - } - - public function testValidAllowsChainingPropertyAccess() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $this->assertLessThan(10, $faker->valid()->randomDigit); - } - - public function testValidAllowsChainingMethodCall() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $this->assertLessThan(10, $faker->valid()->numberBetween(5, 9)); - } - - public function testValidReturnsOnlyValidValues() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $values = array(); - $evenValidator = function($digit) { - return $digit % 2 === 0; - }; - for ($i=0; $i < 50; $i++) { - $values[$faker->valid($evenValidator)->randomDigit] = true; - } - $uniqueValues = array_keys($values); - sort($uniqueValues); - $this->assertEquals(array(0, 2, 4, 6, 8), $uniqueValues); - } - - /** - * @expectedException OverflowException - */ - public function testValidThrowsExceptionWhenNoValidValueCanBeGenerated() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $evenValidator = function($digit) { - return $digit % 2 === 0; - }; - for ($i=0; $i < 11; $i++) { - $faker->valid($evenValidator)->randomElement(array(1, 3, 5, 7, 9)); - } - } - - /** - * @expectedException InvalidArgumentException - */ - public function testValidThrowsExceptionWhenParameterIsNotCollable() - { - $faker = new \Faker\Generator(); - $faker->addProvider(new \Faker\Provider\Base($faker)); - $faker->valid(12)->randomElement(array(1, 3, 5, 7, 9)); - } - - /** - * @expectedException LengthException - * @expectedExceptionMessage Cannot get 2 elements, only 1 in array - */ - public function testRandomElementsThrowsWhenRequestingTooManyKeys() - { - BaseProvider::randomElements(array('foo'), 2); - } - - public function testRandomElements() - { - $this->assertCount(1, BaseProvider::randomElements(), 'Should work without any input'); - - $empty = BaseProvider::randomElements(array(), 0); - $this->assertInternalType('array', $empty); - $this->assertCount(0, $empty); - - $shuffled = BaseProvider::randomElements(array('foo', 'bar', 'baz'), 3); - $this->assertContains('foo', $shuffled); - $this->assertContains('bar', $shuffled); - $this->assertContains('baz', $shuffled); - - $allowDuplicates = BaseProvider::randomElements(array('foo', 'bar'), 3, true); - $this->assertCount(3, $allowDuplicates); - $this->assertContainsOnly('string', $allowDuplicates); - } -} - -class Collection extends \ArrayObject -{ -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/BiasedTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/BiasedTest.php deleted file mode 100644 index cce3dc0a..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/BiasedTest.php +++ /dev/null @@ -1,74 +0,0 @@ -generator = new Generator(); - $this->generator->addProvider(new Biased($this->generator)); - - $this->results = array_fill(1, self::MAX, 0); - } - - public function performFake($function) - { - for($i = 0; $i < self::NUMBERS; $i++) { - $this->results[$this->generator->biasedNumberBetween(1, self::MAX, $function)]++; - } - } - - public function testUnbiased() - { - $this->performFake(array('\Faker\Provider\Biased', 'unbiased')); - - // assert that all numbers are near the expected unbiased value - foreach ($this->results as $number => $amount) { - // integral - $assumed = (1 / self::MAX * $number) - (1 / self::MAX * ($number - 1)); - // calculate the fraction of the whole area - $assumed /= 1; - $this->assertGreaterThan(self::NUMBERS * $assumed * .95, $amount, "Value was more than 5 percent under the expected value"); - $this->assertLessThan(self::NUMBERS * $assumed * 1.05, $amount, "Value was more than 5 percent over the expected value"); - } - } - - public function testLinearHigh() - { - $this->performFake(array('\Faker\Provider\Biased', 'linearHigh')); - - foreach ($this->results as $number => $amount) { - // integral - $assumed = 0.5 * pow(1 / self::MAX * $number, 2) - 0.5 * pow(1 / self::MAX * ($number - 1), 2); - // calculate the fraction of the whole area - $assumed /= pow(1, 2) * .5; - $this->assertGreaterThan(self::NUMBERS * $assumed * .9, $amount, "Value was more than 10 percent under the expected value"); - $this->assertLessThan(self::NUMBERS * $assumed * 1.1, $amount, "Value was more than 10 percent over the expected value"); - } - } - - public function testLinearLow() - { - $this->performFake(array('\Faker\Provider\Biased', 'linearLow')); - - foreach ($this->results as $number => $amount) { - // integral - $assumed = -0.5 * pow(1 / self::MAX * $number, 2) - -0.5 * pow(1 / self::MAX * ($number - 1), 2); - // shift the graph up - $assumed += 1 / self::MAX; - // calculate the fraction of the whole area - $assumed /= pow(1, 2) * .5; - $this->assertGreaterThan(self::NUMBERS * $assumed * .9, $amount, "Value was more than 10 percent under the expected value"); - $this->assertLessThan(self::NUMBERS * $assumed * 1.1, $amount, "Value was more than 10 percent over the expected value"); - } - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ColorTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ColorTest.php deleted file mode 100644 index ff5edac2..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ColorTest.php +++ /dev/null @@ -1,54 +0,0 @@ -assertRegExp('/^#[a-f0-9]{6}$/i', Color::hexColor()); - } - - public function testSafeHexColor() - { - $this->assertRegExp('/^#[a-f0-9]{6}$/i', Color::safeHexColor()); - } - - public function testRgbColorAsArray() - { - $this->assertEquals(3, count(Color::rgbColorAsArray())); - } - - public function testRgbColor() - { - $regexp = '([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])'; - $this->assertRegExp('/^' . $regexp . ',' . $regexp . ',' . $regexp . '$/i', Color::rgbColor()); - } - - public function testRgbCssColor() - { - $regexp = '([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])'; - $this->assertRegExp('/^rgb\(' . $regexp . ',' . $regexp . ',' . $regexp . '\)$/i', Color::rgbCssColor()); - } - - public function testRgbaCssColor() - { - $regexp = '([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])'; - $regexpAlpha = '([01]?(\.\d+)?)'; - $this->assertRegExp('/^rgba\(' . $regexp . ',' . $regexp . ',' . $regexp . ',' . $regexpAlpha . '\)$/i', Color::rgbaCssColor()); - } - - public function testSafeColorName() - { - $this->assertRegExp('/^[\w]+$/', Color::safeColorName()); - } - - public function testColorName() - { - $this->assertRegExp('/^[\w]+$/', Color::colorName()); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/CompanyTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/CompanyTest.php deleted file mode 100644 index 28ce0eb4..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/CompanyTest.php +++ /dev/null @@ -1,31 +0,0 @@ -addProvider(new Company($faker)); - $faker->addProvider(new Lorem($faker)); - $this->faker = $faker; - } - - public function testJobTitle() - { - $jobTitle = $this->faker->jobTitle(); - $pattern = '/^[A-Za-z]+$/'; - $this->assertRegExp($pattern, $jobTitle); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/DateTimeTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/DateTimeTest.php deleted file mode 100644 index ec3ad867..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/DateTimeTest.php +++ /dev/null @@ -1,282 +0,0 @@ -defaultTz = 'UTC'; - DateTimeProvider::setDefaultTimezone($this->defaultTz); - } - - public function tearDown() - { - DateTimeProvider::setDefaultTimezone(); - } - - public function testPreferDefaultTimezoneOverSystemTimezone() - { - /** - * Set the system timezone to something *other* than the timezone used - * in setUp(). - */ - $originalSystemTimezone = date_default_timezone_get(); - $systemTimezone = 'Antarctica/Vostok'; - date_default_timezone_set($systemTimezone); - - /** - * Get a new date/time value and assert that it prefers the default - * timezone over the system timezone. - */ - $date = DateTimeProvider::dateTime(); - $this->assertNotSame($systemTimezone, $date->getTimezone()->getName()); - $this->assertSame($this->defaultTz, $date->getTimezone()->getName()); - - /** - * Restore the system timezone. - */ - date_default_timezone_set($originalSystemTimezone); - } - - public function testUseSystemTimezoneWhenDefaultTimezoneIsNotSet() - { - /** - * Set the system timezone to something *other* than the timezone used - * in setUp() *and* reset the default timezone. - */ - $originalSystemTimezone = date_default_timezone_get(); - $originalDefaultTimezone = DateTimeProvider::getDefaultTimezone(); - $systemTimezone = 'Antarctica/Vostok'; - date_default_timezone_set($systemTimezone); - DateTimeProvider::setDefaultTimezone(); - - /** - * Get a new date/time value and assert that it uses the system timezone - * and not the system timezone. - */ - $date = DateTimeProvider::dateTime(); - $this->assertSame($systemTimezone, $date->getTimezone()->getName()); - $this->assertNotSame($this->defaultTz, $date->getTimezone()->getName()); - - /** - * Restore the system timezone. - */ - date_default_timezone_set($originalSystemTimezone); - } - - public function testUnixTime() - { - $timestamp = DateTimeProvider::unixTime(); - $this->assertInternalType('int', $timestamp); - $this->assertGreaterThanOrEqual(0, $timestamp); - $this->assertLessThanOrEqual(time(), $timestamp); - } - - public function testDateTime() - { - $date = DateTimeProvider::dateTime(); - $this->assertInstanceOf('\DateTime', $date); - $this->assertGreaterThanOrEqual(new \DateTime('@0'), $date); - $this->assertLessThanOrEqual(new \DateTime(), $date); - $this->assertEquals(new \DateTimeZone($this->defaultTz), $date->getTimezone()); - } - - public function testDateTimeWithTimezone() - { - $date = DateTimeProvider::dateTime('now', 'America/New_York'); - $this->assertEquals($date->getTimezone(), new \DateTimeZone('America/New_York')); - } - - public function testDateTimeAD() - { - $date = DateTimeProvider::dateTimeAD(); - $this->assertInstanceOf('\DateTime', $date); - $this->assertGreaterThanOrEqual(new \DateTime('0000-01-01 00:00:00'), $date); - $this->assertLessThanOrEqual(new \DateTime(), $date); - $this->assertEquals(new \DateTimeZone($this->defaultTz), $date->getTimezone()); - } - - public function testDateTimeThisCentury() - { - $date = DateTimeProvider::dateTimeThisCentury(); - $this->assertInstanceOf('\DateTime', $date); - $this->assertGreaterThanOrEqual(new \DateTime('-100 year'), $date); - $this->assertLessThanOrEqual(new \DateTime(), $date); - $this->assertEquals(new \DateTimeZone($this->defaultTz), $date->getTimezone()); - } - - public function testDateTimeThisDecade() - { - $date = DateTimeProvider::dateTimeThisDecade(); - $this->assertInstanceOf('\DateTime', $date); - $this->assertGreaterThanOrEqual(new \DateTime('-10 year'), $date); - $this->assertLessThanOrEqual(new \DateTime(), $date); - $this->assertEquals(new \DateTimeZone($this->defaultTz), $date->getTimezone()); - } - - public function testDateTimeThisYear() - { - $date = DateTimeProvider::dateTimeThisYear(); - $this->assertInstanceOf('\DateTime', $date); - $this->assertGreaterThanOrEqual(new \DateTime('-1 year'), $date); - $this->assertLessThanOrEqual(new \DateTime(), $date); - $this->assertEquals(new \DateTimeZone($this->defaultTz), $date->getTimezone()); - } - - public function testDateTimeThisMonth() - { - $date = DateTimeProvider::dateTimeThisMonth(); - $this->assertInstanceOf('\DateTime', $date); - $this->assertGreaterThanOrEqual(new \DateTime('-1 month'), $date); - $this->assertLessThanOrEqual(new \DateTime(), $date); - $this->assertEquals(new \DateTimeZone($this->defaultTz), $date->getTimezone()); - } - - public function testDateTimeThisCenturyWithTimezone() - { - $date = DateTimeProvider::dateTimeThisCentury('now', 'America/New_York'); - $this->assertEquals($date->getTimezone(), new \DateTimeZone('America/New_York')); - } - - public function testDateTimeThisDecadeWithTimezone() - { - $date = DateTimeProvider::dateTimeThisDecade('now', 'America/New_York'); - $this->assertEquals($date->getTimezone(), new \DateTimeZone('America/New_York')); - } - - public function testDateTimeThisYearWithTimezone() - { - $date = DateTimeProvider::dateTimeThisYear('now', 'America/New_York'); - $this->assertEquals($date->getTimezone(), new \DateTimeZone('America/New_York')); - } - - public function testDateTimeThisMonthWithTimezone() - { - $date = DateTimeProvider::dateTimeThisMonth('now', 'America/New_York'); - $this->assertEquals($date->getTimezone(), new \DateTimeZone('America/New_York')); - } - - public function testIso8601() - { - $date = DateTimeProvider::iso8601(); - $this->assertRegExp('/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-Z](\d{4})?$/', $date); - $this->assertGreaterThanOrEqual(new \DateTime('@0'), new \DateTime($date)); - $this->assertLessThanOrEqual(new \DateTime(), new \DateTime($date)); - } - - public function testDate() - { - $date = DateTimeProvider::date(); - $this->assertRegExp('/^\d{4}-\d{2}-\d{2}$/', $date); - $this->assertGreaterThanOrEqual(new \DateTime('@0'), new \DateTime($date)); - $this->assertLessThanOrEqual(new \DateTime(), new \DateTime($date)); - } - - public function testTime() - { - $date = DateTimeProvider::time(); - $this->assertRegExp('/^\d{2}:\d{2}:\d{2}$/', $date); - } - - /** - * - * @dataProvider providerDateTimeBetween - */ - public function testDateTimeBetween($start, $end) - { - $date = DateTimeProvider::dateTimeBetween($start, $end); - $this->assertInstanceOf('\DateTime', $date); - $this->assertGreaterThanOrEqual(new \DateTime($start), $date); - $this->assertLessThanOrEqual(new \DateTime($end), $date); - $this->assertEquals(new \DateTimeZone($this->defaultTz), $date->getTimezone()); - } - - public function providerDateTimeBetween() - { - return array( - array('-1 year', false), - array('-1 year', null), - array('-1 day', '-1 hour'), - array('-1 day', 'now'), - ); - } - - /** - * - * @dataProvider providerDateTimeInInterval - */ - public function testDateTimeInInterval($start, $interval = "+5 days", $isInFuture) - { - $date = DateTimeProvider::dateTimeInInterval($start, $interval); - $this->assertInstanceOf('\DateTime', $date); - - $_interval = \DateInterval::createFromDateString($interval); - $_start = new \DateTime($start); - if ($isInFuture) { - $this->assertGreaterThanOrEqual($_start, $date); - $this->assertLessThanOrEqual($_start->add($_interval), $date); - } else { - $this->assertLessThanOrEqual($_start, $date); - $this->assertGreaterThanOrEqual($_start->add($_interval), $date); - } - } - - public function providerDateTimeInInterval() - { - return array( - array('-1 year', '+5 days', true), - array('-1 day', '-1 hour', false), - array('-1 day', '+1 hour', true), - ); - } - - public function testFixedSeedWithMaximumTimestamp() - { - $max = '2118-03-01 12:00:00'; - - mt_srand(1); - $unixTime = DateTimeProvider::unixTime($max); - $datetimeAD = DateTimeProvider::dateTimeAD($max); - $dateTime1 = DateTimeProvider::dateTime($max); - $dateTimeBetween = DateTimeProvider::dateTimeBetween('2014-03-01 06:00:00', $max); - $date = DateTimeProvider::date('Y-m-d', $max); - $time = DateTimeProvider::time('H:i:s', $max); - $iso8601 = DateTimeProvider::iso8601($max); - $dateTimeThisCentury = DateTimeProvider::dateTimeThisCentury($max); - $dateTimeThisDecade = DateTimeProvider::dateTimeThisDecade($max); - $dateTimeThisMonth = DateTimeProvider::dateTimeThisMonth($max); - $amPm = DateTimeProvider::amPm($max); - $dayOfMonth = DateTimeProvider::dayOfMonth($max); - $dayOfWeek = DateTimeProvider::dayOfWeek($max); - $month = DateTimeProvider::month($max); - $monthName = DateTimeProvider::monthName($max); - $year = DateTimeProvider::year($max); - $dateTimeThisYear = DateTimeProvider::dateTimeThisYear($max); - mt_srand(); - - //regenerate Random Date with same seed and same maximum end timestamp - mt_srand(1); - $this->assertEquals($unixTime, DateTimeProvider::unixTime($max)); - $this->assertEquals($datetimeAD, DateTimeProvider::dateTimeAD($max)); - $this->assertEquals($dateTime1, DateTimeProvider::dateTime($max)); - $this->assertEquals($dateTimeBetween, DateTimeProvider::dateTimeBetween('2014-03-01 06:00:00', $max)); - $this->assertEquals($date, DateTimeProvider::date('Y-m-d', $max)); - $this->assertEquals($time, DateTimeProvider::time('H:i:s', $max)); - $this->assertEquals($iso8601, DateTimeProvider::iso8601($max)); - $this->assertEquals($dateTimeThisCentury, DateTimeProvider::dateTimeThisCentury($max)); - $this->assertEquals($dateTimeThisDecade, DateTimeProvider::dateTimeThisDecade($max)); - $this->assertEquals($dateTimeThisMonth, DateTimeProvider::dateTimeThisMonth($max)); - $this->assertEquals($amPm, DateTimeProvider::amPm($max)); - $this->assertEquals($dayOfMonth, DateTimeProvider::dayOfMonth($max)); - $this->assertEquals($dayOfWeek, DateTimeProvider::dayOfWeek($max)); - $this->assertEquals($month, DateTimeProvider::month($max)); - $this->assertEquals($monthName, DateTimeProvider::monthName($max)); - $this->assertEquals($year, DateTimeProvider::year($max)); - $this->assertEquals($dateTimeThisYear, DateTimeProvider::dateTimeThisYear($max)); - mt_srand(); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/HtmlLoremTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/HtmlLoremTest.php deleted file mode 100644 index f7814faf..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/HtmlLoremTest.php +++ /dev/null @@ -1,30 +0,0 @@ -addProvider(new HtmlLorem($faker)); - $node = $faker->randomHtml(6, 10); - $this->assertStringStartsWith("", $node); - $this->assertStringEndsWith("\n", $node); - } - - public function testRandomHtmlReturnsValidHTMLString(){ - $faker = new Generator(); - $faker->addProvider(new HtmlLorem($faker)); - $node = $faker->randomHtml(6, 10); - $dom = new \DOMDocument(); - $error = $dom->loadHTML($node); - $this->assertTrue($error); - } - -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ImageTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ImageTest.php deleted file mode 100644 index c73992ce..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ImageTest.php +++ /dev/null @@ -1,76 +0,0 @@ -assertRegExp('#^https://lorempixel.com/640/480/#', Image::imageUrl()); - } - - public function testImageUrlAcceptsCustomWidthAndHeight() - { - $this->assertRegExp('#^https://lorempixel.com/800/400/#', Image::imageUrl(800, 400)); - } - - public function testImageUrlAcceptsCustomCategory() - { - $this->assertRegExp('#^https://lorempixel.com/800/400/nature/#', Image::imageUrl(800, 400, 'nature')); - } - - public function testImageUrlAcceptsCustomText() - { - $this->assertRegExp('#^https://lorempixel.com/800/400/nature/Faker#', Image::imageUrl(800, 400, 'nature', false, 'Faker')); - } - - public function testImageUrlAddsARandomGetParameterByDefault() - { - $url = Image::imageUrl(800, 400); - $splitUrl = preg_split('/\?/', $url); - - $this->assertEquals(count($splitUrl), 2); - $this->assertRegexp('#\d{5}#', $splitUrl[1]); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testUrlWithDimensionsAndBadCategory() - { - Image::imageUrl(800, 400, 'bullhonky'); - } - - public function testDownloadWithDefaults() - { - $url = "http://lorempixel.com/"; - $curlPing = curl_init($url); - curl_setopt($curlPing, CURLOPT_TIMEOUT, 5); - curl_setopt($curlPing, CURLOPT_CONNECTTIMEOUT, 5); - curl_setopt($curlPing, CURLOPT_RETURNTRANSFER, true); - $data = curl_exec($curlPing); - $httpCode = curl_getinfo($curlPing, CURLINFO_HTTP_CODE); - curl_close($curlPing); - - if ($httpCode < 200 | $httpCode > 300) { - $this->markTestSkipped("LoremPixel is offline, skipping image download"); - } - - $file = Image::image(sys_get_temp_dir()); - $this->assertFileExists($file); - if (function_exists('getimagesize')) { - list($width, $height, $type, $attr) = getimagesize($file); - $this->assertEquals(640, $width); - $this->assertEquals(480, $height); - $this->assertEquals(constant('IMAGETYPE_JPEG'), $type); - } else { - $this->assertEquals('jpg', pathinfo($file, PATHINFO_EXTENSION)); - } - if (file_exists($file)) { - unlink($file); - } - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/InternetTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/InternetTest.php deleted file mode 100644 index 93fe7b48..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/InternetTest.php +++ /dev/null @@ -1,167 +0,0 @@ -addProvider(new Lorem($faker)); - $faker->addProvider(new Person($faker)); - $faker->addProvider(new Internet($faker)); - $faker->addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function localeDataProvider() - { - $providerPath = realpath(__DIR__ . '/../../../src/Faker/Provider'); - $localePaths = array_filter(glob($providerPath . '/*', GLOB_ONLYDIR)); - foreach ($localePaths as $path) { - $parts = explode('/', $path); - $locales[] = array($parts[count($parts) - 1]); - } - - return $locales; - } - - /** - * @link http://stackoverflow.com/questions/12026842/how-to-validate-an-email-address-in-php - * - * @dataProvider localeDataProvider - */ - public function testEmailIsValid($locale) - { - if ($locale !== 'en_US' && !class_exists('Transliterator')) { - $this->markTestSkipped('Transliterator class not available (intl extension)'); - } - - $this->loadLocalProviders($locale); - $pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD'; - $emailAddress = $this->faker->email(); - $this->assertRegExp($pattern, $emailAddress); - } - - /** - * @dataProvider localeDataProvider - */ - public function testUsernameIsValid($locale) - { - if ($locale !== 'en_US' && !class_exists('Transliterator')) { - $this->markTestSkipped('Transliterator class not available (intl extension)'); - } - - $this->loadLocalProviders($locale); - $pattern = '/^[A-Za-z0-9]+([._][A-Za-z0-9]+)*$/'; - $username = $this->faker->username(); - $this->assertRegExp($pattern, $username); - } - - /** - * @dataProvider localeDataProvider - */ - public function testDomainnameIsValid($locale) - { - if ($locale !== 'en_US' && !class_exists('Transliterator')) { - $this->markTestSkipped('Transliterator class not available (intl extension)'); - } - - $this->loadLocalProviders($locale); - $pattern = '/^[a-z]+(\.[a-z]+)+$/'; - $domainName = $this->faker->domainName(); - $this->assertRegExp($pattern, $domainName); - } - - /** - * @dataProvider localeDataProvider - */ - public function testDomainwordIsValid($locale) - { - if ($locale !== 'en_US' && !class_exists('Transliterator')) { - $this->markTestSkipped('Transliterator class not available (intl extension)'); - } - - $this->loadLocalProviders($locale); - $pattern = '/^[a-z]+$/'; - $domainWord = $this->faker->domainWord(); - $this->assertRegExp($pattern, $domainWord); - } - - public function loadLocalProviders($locale) - { - $providerPath = realpath(__DIR__ . '/../../../src/Faker/Provider'); - if (file_exists($providerPath.'/'.$locale.'/Internet.php')) { - $internet = "\\Faker\\Provider\\$locale\\Internet"; - $this->faker->addProvider(new $internet($this->faker)); - } - if (file_exists($providerPath.'/'.$locale.'/Person.php')) { - $person = "\\Faker\\Provider\\$locale\\Person"; - $this->faker->addProvider(new $person($this->faker)); - } - if (file_exists($providerPath.'/'.$locale.'/Company.php')) { - $company = "\\Faker\\Provider\\$locale\\Company"; - $this->faker->addProvider(new $company($this->faker)); - } - } - - public function testPasswordIsValid() - { - $this->assertRegexp('/^.{6}$/', $this->faker->password(6, 6)); - } - - public function testSlugIsValid() - { - $pattern = '/^[a-z0-9-]+$/'; - $slug = $this->faker->slug(); - $this->assertSame(preg_match($pattern, $slug), 1); - } - - public function testUrlIsValid() - { - $url = $this->faker->url(); - $this->assertNotFalse(filter_var($url, FILTER_VALIDATE_URL)); - } - - public function testLocalIpv4() - { - $this->assertNotFalse(filter_var(Internet::localIpv4(), FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)); - } - - public function testIpv4() - { - $this->assertNotFalse(filter_var($this->faker->ipv4(), FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)); - } - - public function testIpv4NotLocalNetwork() - { - $this->assertNotRegExp('/\A0\./', $this->faker->ipv4()); - } - - public function testIpv4NotBroadcast() - { - $this->assertNotEquals('255.255.255.255', $this->faker->ipv4()); - } - - public function testIpv6() - { - $this->assertNotFalse(filter_var($this->faker->ipv6(), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)); - } - - public function testMacAddress() - { - $this->assertRegExp('/^([0-9A-F]{2}[:]){5}([0-9A-F]{2})$/i', Internet::macAddress()); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/LocalizationTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/LocalizationTest.php deleted file mode 100644 index 6cfcc891..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/LocalizationTest.php +++ /dev/null @@ -1,27 +0,0 @@ -assertNotNull($faker->name(), 'Localized Name Provider ' . $matches[1] . ' does not throw errors'); - } - } - - public function testLocalizedAddressProvidersDoNotThrowErrors() - { - foreach (glob(__DIR__ . '/../../../src/Faker/Provider/*/Address.php') as $localizedAddress) { - preg_match('#/([a-zA-Z_]+)/Address\.php#', $localizedAddress, $matches); - $faker = Factory::create($matches[1]); - $this->assertNotNull($faker->address(), 'Localized Address Provider ' . $matches[1] . ' does not throw errors'); - } - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/LoremTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/LoremTest.php deleted file mode 100644 index 16d98891..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/LoremTest.php +++ /dev/null @@ -1,109 +0,0 @@ -assertEquals('Word word word word.', TestableLorem::text(24)); - } - - public function testTextReturnsSentencesWhenAskedSizeLessThan100() - { - $this->assertEquals('This is a test sentence. This is a test sentence. This is a test sentence.', TestableLorem::text(99)); - } - - public function testTextReturnsParagraphsWhenAskedSizeGreaterOrEqualThanThan100() - { - $this->assertEquals('This is a test paragraph. It has three sentences. Exactly three.', TestableLorem::text(100)); - } - - public function testSentenceWithZeroNbWordsReturnsEmptyString() - { - $this->assertEquals('', Lorem::sentence(0)); - } - - public function testSentenceWithNegativeNbWordsReturnsEmptyString() - { - $this->assertEquals('', Lorem::sentence(-1)); - } - - public function testParagraphWithZeroNbSentencesReturnsEmptyString() - { - $this->assertEquals('', Lorem::paragraph(0)); - } - - public function testParagraphWithNegativeNbSentencesReturnsEmptyString() - { - $this->assertEquals('', Lorem::paragraph(-1)); - } - - public function testSentenceWithPositiveNbWordsReturnsAtLeastOneWord() - { - $sentence = Lorem::sentence(1); - - $this->assertGreaterThan(1, strlen($sentence)); - $this->assertGreaterThanOrEqual(1, count(explode(' ', $sentence))); - } - - public function testParagraphWithPositiveNbSentencesReturnsAtLeastOneWord() - { - $paragraph = Lorem::paragraph(1); - - $this->assertGreaterThan(1, strlen($paragraph)); - $this->assertGreaterThanOrEqual(1, count(explode(' ', $paragraph))); - } - - public function testWordssAsText() - { - $words = TestableLorem::words(2, true); - - $this->assertEquals('word word', $words); - } - - public function testSentencesAsText() - { - $sentences = TestableLorem::sentences(2, true); - - $this->assertEquals('This is a test sentence. This is a test sentence.', $sentences); - } - - public function testParagraphsAsText() - { - $paragraphs = TestableLorem::paragraphs(2, true); - - $expected = "This is a test paragraph. It has three sentences. Exactly three.\n\nThis is a test paragraph. It has three sentences. Exactly three."; - $this->assertEquals($expected, $paragraphs); - } -} - -class TestableLorem extends Lorem -{ - - public static function word() - { - return 'word'; - } - - public static function sentence($nbWords = 5, $variableNbWords = true) - { - return 'This is a test sentence.'; - } - - public static function paragraph($nbSentences = 3, $variableNbSentences = true) - { - return 'This is a test paragraph. It has three sentences. Exactly three.'; - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/MiscellaneousTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/MiscellaneousTest.php deleted file mode 100644 index 6a29cd55..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/MiscellaneousTest.php +++ /dev/null @@ -1,59 +0,0 @@ -assertContains(Miscellaneous::boolean(), array(true, false)); - } - - public function testMd5() - { - $this->assertRegExp('/^[a-z0-9]{32}$/', Miscellaneous::md5()); - } - - public function testSha1() - { - $this->assertRegExp('/^[a-z0-9]{40}$/', Miscellaneous::sha1()); - } - - public function testSha256() - { - $this->assertRegExp('/^[a-z0-9]{64}$/', Miscellaneous::sha256()); - } - - public function testLocale() - { - $this->assertRegExp('/^[a-z]{2,3}_[A-Z]{2}$/', Miscellaneous::locale()); - } - - public function testCountryCode() - { - $this->assertRegExp('/^[A-Z]{2}$/', Miscellaneous::countryCode()); - } - - public function testCountryISOAlpha3() - { - $this->assertRegExp('/^[A-Z]{3}$/', Miscellaneous::countryISOAlpha3()); - } - - public function testLanguage() - { - $this->assertRegExp('/^[a-z]{2}$/', Miscellaneous::languageCode()); - } - - public function testCurrencyCode() - { - $this->assertRegExp('/^[A-Z]{3}$/', Miscellaneous::currencyCode()); - } - - public function testEmoji() - { - $this->assertRegExp('/^[\x{1F600}-\x{1F637}]$/u', Miscellaneous::emoji()); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/PaymentTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/PaymentTest.php deleted file mode 100644 index 966b9d63..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/PaymentTest.php +++ /dev/null @@ -1,209 +0,0 @@ -addProvider(new BaseProvider($faker)); - $faker->addProvider(new DateTimeProvider($faker)); - $faker->addProvider(new PersonProvider($faker)); - $faker->addProvider(new PaymentProvider($faker)); - $this->faker = $faker; - } - - public function localeDataProvider() - { - $providerPath = realpath(__DIR__ . '/../../../src/Faker/Provider'); - $localePaths = array_filter(glob($providerPath . '/*', GLOB_ONLYDIR)); - foreach ($localePaths as $path) { - $parts = explode('/', $path); - $locales[] = array($parts[count($parts) - 1]); - } - - return $locales; - } - - public function loadLocalProviders($locale) - { - $providerPath = realpath(__DIR__ . '/../../../src/Faker/Provider'); - if (file_exists($providerPath.'/'.$locale.'/Payment.php')) { - $payment = "\\Faker\\Provider\\$locale\\Payment"; - $this->faker->addProvider(new $payment($this->faker)); - } - } - - public function testCreditCardTypeReturnsValidVendorName() - { - $this->assertContains($this->faker->creditCardType, array('Visa', 'Visa Retired', 'MasterCard', 'American Express', 'Discover Card')); - } - - public function creditCardNumberProvider() - { - return array( - array('Discover Card', '/^6011\d{12}$/'), - array('Visa', '/^4\d{15}$/'), - array('Visa Retired', '/^4\d{12}$/'), - array('MasterCard', '/^(5[1-5]|2[2-7])\d{14}$/') - ); - } - - /** - * @dataProvider creditCardNumberProvider - */ - public function testCreditCardNumberReturnsValidCreditCardNumber($type, $regexp) - { - $cardNumber = $this->faker->creditCardNumber($type); - $this->assertRegExp($regexp, $cardNumber); - $this->assertTrue(Luhn::isValid($cardNumber)); - } - - public function testCreditCardNumberCanFormatOutput() - { - $this->assertRegExp('/^6011-\d{4}-\d{4}-\d{4}$/', $this->faker->creditCardNumber('Discover Card', true)); - } - - public function testCreditCardExpirationDateReturnsValidDateByDefault() - { - $expirationDate = $this->faker->creditCardExpirationDate; - $this->assertTrue(intval($expirationDate->format('U')) > strtotime('now')); - $this->assertTrue(intval($expirationDate->format('U')) < strtotime('+36 months')); - } - - public function testRandomCard() - { - $cardDetails = $this->faker->creditCardDetails; - $this->assertEquals(count($cardDetails), 4); - $this->assertEquals(array('type', 'number', 'name', 'expirationDate'), array_keys($cardDetails)); - } - - protected $ibanFormats = array( - 'AD' => '/^AD\d{2}\d{4}\d{4}[A-Z0-9]{12}$/', - 'AE' => '/^AE\d{2}\d{3}\d{16}$/', - 'AL' => '/^AL\d{2}\d{8}[A-Z0-9]{16}$/', - 'AT' => '/^AT\d{2}\d{5}\d{11}$/', - 'AZ' => '/^AZ\d{2}[A-Z]{4}[A-Z0-9]{20}$/', - 'BA' => '/^BA\d{2}\d{3}\d{3}\d{8}\d{2}$/', - 'BE' => '/^BE\d{2}\d{3}\d{7}\d{2}$/', - 'BG' => '/^BG\d{2}[A-Z]{4}\d{4}\d{2}[A-Z0-9]{8}$/', - 'BH' => '/^BH\d{2}[A-Z]{4}[A-Z0-9]{14}$/', - 'BR' => '/^BR\d{2}\d{8}\d{5}\d{10}[A-Z]{1}[A-Z0-9]{1}$/', - 'CH' => '/^CH\d{2}\d{5}[A-Z0-9]{12}$/', - 'CR' => '/^CR\d{2}\d{3}\d{14}$/', - 'CY' => '/^CY\d{2}\d{3}\d{5}[A-Z0-9]{16}$/', - 'CZ' => '/^CZ\d{2}\d{4}\d{6}\d{10}$/', - 'DE' => '/^DE\d{2}\d{8}\d{10}$/', - 'DK' => '/^DK\d{2}\d{4}\d{9}\d{1}$/', - 'DO' => '/^DO\d{2}[A-Z0-9]{4}\d{20}$/', - 'EE' => '/^EE\d{2}\d{2}\d{2}\d{11}\d{1}$/', - 'ES' => '/^ES\d{2}\d{4}\d{4}\d{1}\d{1}\d{10}$/', - 'FI' => '/^FI\d{2}\d{6}\d{7}\d{1}$/', - 'FR' => '/^FR\d{2}\d{5}\d{5}[A-Z0-9]{11}\d{2}$/', - 'GB' => '/^GB\d{2}[A-Z]{4}\d{6}\d{8}$/', - 'GE' => '/^GE\d{2}[A-Z]{2}\d{16}$/', - 'GI' => '/^GI\d{2}[A-Z]{4}[A-Z0-9]{15}$/', - 'GR' => '/^GR\d{2}\d{3}\d{4}[A-Z0-9]{16}$/', - 'GT' => '/^GT\d{2}[A-Z0-9]{4}[A-Z0-9]{20}$/', - 'HR' => '/^HR\d{2}\d{7}\d{10}$/', - 'HU' => '/^HU\d{2}\d{3}\d{4}\d{1}\d{15}\d{1}$/', - 'IE' => '/^IE\d{2}[A-Z]{4}\d{6}\d{8}$/', - 'IL' => '/^IL\d{2}\d{3}\d{3}\d{13}$/', - 'IS' => '/^IS\d{2}\d{4}\d{2}\d{6}\d{10}$/', - 'IT' => '/^IT\d{2}[A-Z]{1}\d{5}\d{5}[A-Z0-9]{12}$/', - 'KW' => '/^KW\d{2}[A-Z]{4}\d{22}$/', - 'KZ' => '/^KZ\d{2}\d{3}[A-Z0-9]{13}$/', - 'LB' => '/^LB\d{2}\d{4}[A-Z0-9]{20}$/', - 'LI' => '/^LI\d{2}\d{5}[A-Z0-9]{12}$/', - 'LT' => '/^LT\d{2}\d{5}\d{11}$/', - 'LU' => '/^LU\d{2}\d{3}[A-Z0-9]{13}$/', - 'LV' => '/^LV\d{2}[A-Z]{4}[A-Z0-9]{13}$/', - 'MC' => '/^MC\d{2}\d{5}\d{5}[A-Z0-9]{11}\d{2}$/', - 'MD' => '/^MD\d{2}[A-Z0-9]{2}[A-Z0-9]{18}$/', - 'ME' => '/^ME\d{2}\d{3}\d{13}\d{2}$/', - 'MK' => '/^MK\d{2}\d{3}[A-Z0-9]{10}\d{2}$/', - 'MR' => '/^MR\d{2}\d{5}\d{5}\d{11}\d{2}$/', - 'MT' => '/^MT\d{2}[A-Z]{4}\d{5}[A-Z0-9]{18}$/', - 'MU' => '/^MU\d{2}[A-Z]{4}\d{2}\d{2}\d{12}\d{3}[A-Z]{3}$/', - 'NL' => '/^NL\d{2}[A-Z]{4}\d{10}$/', - 'NO' => '/^NO\d{2}\d{4}\d{6}\d{1}$/', - 'PK' => '/^PK\d{2}[A-Z]{4}[A-Z0-9]{16}$/', - 'PL' => '/^PL\d{2}\d{8}\d{16}$/', - 'PS' => '/^PS\d{2}[A-Z]{4}[A-Z0-9]{21}$/', - 'PT' => '/^PT\d{2}\d{4}\d{4}\d{11}\d{2}$/', - 'RO' => '/^RO\d{2}[A-Z]{4}[A-Z0-9]{16}$/', - 'RS' => '/^RS\d{2}\d{3}\d{13}\d{2}$/', - 'SA' => '/^SA\d{2}\d{2}[A-Z0-9]{18}$/', - 'SE' => '/^SE\d{2}\d{3}\d{16}\d{1}$/', - 'SI' => '/^SI\d{2}\d{5}\d{8}\d{2}$/', - 'SK' => '/^SK\d{2}\d{4}\d{6}\d{10}$/', - 'SM' => '/^SM\d{2}[A-Z]{1}\d{5}\d{5}[A-Z0-9]{12}$/', - 'TN' => '/^TN\d{2}\d{2}\d{3}\d{13}\d{2}$/', - 'TR' => '/^TR\d{2}\d{5}\d{1}[A-Z0-9]{16}$/', - 'VG' => '/^VG\d{2}[A-Z]{4}\d{16}$/', - ); - - /** - * @dataProvider localeDataProvider - */ - public function testBankAccountNumber($locale) - { - $parts = explode('_', $locale); - $countryCode = array_pop($parts); - - if (!isset($this->ibanFormats[$countryCode])) { - // No IBAN format available - return; - } - - $this->loadLocalProviders($locale); - - try { - $iban = $this->faker->bankAccountNumber; - } catch (\InvalidArgumentException $e) { - // Not implemented, nothing to test - $this->markTestSkipped("bankAccountNumber not implemented for $locale"); - return; - } - - // Test format - $this->assertRegExp($this->ibanFormats[$countryCode], $iban); - - // Test checksum - $this->assertTrue(Iban::isValid($iban), "Checksum for $iban is invalid"); - } - - public function ibanFormatProvider() - { - $return = array(); - foreach ($this->ibanFormats as $countryCode => $regex) { - $return[] = array($countryCode, $regex); - } - return $return; - } - /** - * @dataProvider ibanFormatProvider - */ - public function testIban($countryCode, $regex) - { - $iban = $this->faker->iban($countryCode); - - // Test format - $this->assertRegExp($regex, $iban); - - // Test checksum - $this->assertTrue(Iban::isValid($iban), "Checksum for $iban is invalid"); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/PersonTest.php deleted file mode 100644 index f53076f7..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/PersonTest.php +++ /dev/null @@ -1,87 +0,0 @@ -addProvider(new Person($faker)); - $this->assertContains($faker->firstName($gender), $expected); - } - - public function firstNameProvider() - { - return array( - array(null, array('John', 'Jane')), - array('foobar', array('John', 'Jane')), - array('male', array('John')), - array('female', array('Jane')), - ); - } - - public function testFirstNameMale() - { - $this->assertContains(Person::firstNameMale(), array('John')); - } - - public function testFirstNameFemale() - { - $this->assertContains(Person::firstNameFemale(), array('Jane')); - } - - /** - * @dataProvider titleProvider - */ - public function testTitle($gender, $expected) - { - $faker = new Generator(); - $faker->addProvider(new Person($faker)); - $this->assertContains($faker->title($gender), $expected); - } - - public function titleProvider() - { - return array( - array(null, array('Mr.', 'Mrs.', 'Ms.', 'Miss', 'Dr.', 'Prof.')), - array('foobar', array('Mr.', 'Mrs.', 'Ms.', 'Miss', 'Dr.', 'Prof.')), - array('male', array('Mr.', 'Dr.', 'Prof.')), - array('female', array('Mrs.', 'Ms.', 'Miss', 'Dr.', 'Prof.')), - ); - } - - public function testTitleMale() - { - $this->assertContains(Person::titleMale(), array('Mr.', 'Dr.', 'Prof.')); - } - - public function testTitleFemale() - { - $this->assertContains(Person::titleFemale(), array('Mrs.', 'Ms.', 'Miss', 'Dr.', 'Prof.')); - } - - public function testLastNameReturnsDoe() - { - $faker = new Generator(); - $faker->addProvider(new Person($faker)); - $this->assertEquals($faker->lastName(), 'Doe'); - } - - public function testNameReturnsFirstNameAndLastName() - { - $faker = new Generator(); - $faker->addProvider(new Person($faker)); - $this->assertContains($faker->name(), array('John Doe', 'Jane Doe')); - $this->assertContains($faker->name('foobar'), array('John Doe', 'Jane Doe')); - $this->assertContains($faker->name('male'), array('John Doe')); - $this->assertContains($faker->name('female'), array('Jane Doe')); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/PhoneNumberTest.php deleted file mode 100644 index 520ecea3..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/PhoneNumberTest.php +++ /dev/null @@ -1,36 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testPhoneNumberFormat() - { - $number = $this->faker->e164PhoneNumber(); - $this->assertRegExp('/^\+[0-9]{11,}$/', $number); - } - - public function testImeiReturnsValidNumber() - { - $imei = $this->faker->imei(); - $this->assertTrue(Luhn::isValid($imei)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ProviderOverrideTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ProviderOverrideTest.php deleted file mode 100644 index 61d7d63a..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ProviderOverrideTest.php +++ /dev/null @@ -1,194 +0,0 @@ - - */ - -namespace Faker\Test\Provider; - -use Faker; -use PHPUnit\Framework\TestCase; - -/** - * Class ProviderOverrideTest - * - * @package Faker\Test\Provider - * - * This class tests a large portion of all locale specific providers. It does not test the entire stack, because each - * locale specific provider (can) has specific implementations. The goal of this test is to test the common denominator - * and to try to catch possible invalid multi-byte sequences. - */ -class ProviderOverrideTest extends TestCase -{ - /** - * Constants with regular expression patterns for testing the output. - * - * Regular expressions are sensitive for malformed strings (e.g.: strings with incorrect encodings) so by using - * PCRE for the tests, even though they seem fairly pointless, we test for incorrect encodings also. - */ - const TEST_STRING_REGEX = '/.+/u'; - - /** - * Slightly more specific for e-mail, the point isn't to properly validate e-mails. - */ - const TEST_EMAIL_REGEX = '/^(.+)@(.+)$/ui'; - - /** - * @dataProvider localeDataProvider - * @param string $locale - */ - public function testAddress($locale = null) - { - $faker = Faker\Factory::create($locale); - - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->city); - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->postcode); - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->address); - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->country); - } - - - /** - * @dataProvider localeDataProvider - * @param string $locale - */ - public function testCompany($locale = null) - { - $faker = Faker\Factory::create($locale); - - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->company); - } - - - /** - * @dataProvider localeDataProvider - * @param string $locale - */ - public function testDateTime($locale = null) - { - $faker = Faker\Factory::create($locale); - - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->century); - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->timezone); - } - - - /** - * @dataProvider localeDataProvider - * @param string $locale - */ - public function testInternet($locale = null) - { - if ($locale && $locale !== 'en_US' && !class_exists('Transliterator')) { - $this->markTestSkipped('Transliterator class not available (intl extension)'); - } - - $faker = Faker\Factory::create($locale); - - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->userName); - - $this->assertRegExp(static::TEST_EMAIL_REGEX, $faker->email); - $this->assertRegExp(static::TEST_EMAIL_REGEX, $faker->safeEmail); - $this->assertRegExp(static::TEST_EMAIL_REGEX, $faker->freeEmail); - $this->assertRegExp(static::TEST_EMAIL_REGEX, $faker->companyEmail); - } - - - /** - * @dataProvider localeDataProvider - * @param string $locale - */ - public function testPerson($locale = null) - { - $faker = Faker\Factory::create($locale); - - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->name); - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->title); - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->firstName); - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->lastName); - } - - - /** - * @dataProvider localeDataProvider - * @param string $locale - */ - public function testPhoneNumber($locale = null) - { - $faker = Faker\Factory::create($locale); - - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->phoneNumber); - } - - - /** - * @dataProvider localeDataProvider - * @param string $locale - */ - public function testUserAgent($locale = null) - { - $faker = Faker\Factory::create($locale); - - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->userAgent); - } - - - /** - * @dataProvider localeDataProvider - * - * @param null $locale - * @param string $locale - */ - public function testUuid($locale = null) - { - $faker = Faker\Factory::create($locale); - - $this->assertRegExp(static::TEST_STRING_REGEX, $faker->uuid); - } - - - /** - * @return array - */ - public function localeDataProvider() - { - $locales = $this->getAllLocales(); - $data = array(); - - foreach ($locales as $locale) { - $data[] = array( - $locale - ); - } - - return $data; - } - - - /** - * Returns all locales as array values - * - * @return array - */ - private function getAllLocales() - { - static $locales = array(); - - if ( ! empty($locales)) { - return $locales; - } - - // Finding all PHP files in the xx_XX directories - $providerDir = __DIR__ .'/../../../src/Faker/Provider'; - foreach (glob($providerDir .'/*_*/*.php') as $file) { - $localisation = basename(dirname($file)); - - if (isset($locales[ $localisation ])) { - continue; - } - - $locales[ $localisation ] = $localisation; - } - - return $locales; - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/TextTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/TextTest.php deleted file mode 100644 index a43d8d43..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/TextTest.php +++ /dev/null @@ -1,55 +0,0 @@ -addProvider(new Text($generator)); - $generator->seed(0); - - $lengths = array(10, 20, 50, 70, 90, 120, 150, 200, 500); - - foreach ($lengths as $length) { - $this->assertLessThan($length, $generator->realText($length)); - } - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testTextMaxIndex() - { - $generator = new Generator(); - $generator->addProvider(new Text($generator)); - $generator->seed(0); - $generator->realText(200, 11); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testTextMinIndex() - { - $generator = new Generator(); - $generator->addProvider(new Text($generator)); - $generator->seed(0); - $generator->realText(200, 0); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testTextMinLength() - { - $generator = new Generator(); - $generator->addProvider(new Text($generator)); - $generator->seed(0); - $generator->realText(9); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/UserAgentTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/UserAgentTest.php deleted file mode 100644 index 5ba2459c..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/UserAgentTest.php +++ /dev/null @@ -1,39 +0,0 @@ -assertNotNull(UserAgent::userAgent()); - } - - public function testFirefoxUserAgent() - { - $this->stringContains(' Firefox/', UserAgent::firefox()); - } - - public function testSafariUserAgent() - { - $this->stringContains('Safari/', UserAgent::safari()); - } - - public function testInternetExplorerUserAgent() - { - $this->assertStringStartsWith('Mozilla/5.0 (compatible; MSIE ', UserAgent::internetExplorer()); - } - - public function testOperaUserAgent() - { - $this->assertStringStartsWith('Opera/', UserAgent::opera()); - } - - public function testChromeUserAgent() - { - $this->stringContains('(KHTML, like Gecko) Chrome/', UserAgent::chrome()); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/UuidTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/UuidTest.php deleted file mode 100644 index 5c639cac..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/UuidTest.php +++ /dev/null @@ -1,32 +0,0 @@ -assertTrue($this->isUuid($uuid)); - } - - public function testUuidExpectedSeed() - { - if (pack('L', 0x6162797A) == pack('N', 0x6162797A)) { - $this->markTestSkipped('Big Endian'); - } - $faker = new Generator(); - $faker->seed(123); - $this->assertEquals("8e2e0c84-50dd-367c-9e66-f3ab455c78d6", BaseProvider::uuid()); - $this->assertEquals("073eb60a-902c-30ab-93d0-a94db371f6c8", BaseProvider::uuid()); - } - - protected function isUuid($uuid) - { - return is_string($uuid) && (bool) preg_match('/^[a-f0-9]{8,8}-(?:[a-f0-9]{4,4}-){3,3}[a-f0-9]{12,12}$/i', $uuid); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ar_JO/InternetTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ar_JO/InternetTest.php deleted file mode 100644 index 33d70c43..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ar_JO/InternetTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new Person($faker)); - $faker->addProvider(new Internet($faker)); - $faker->addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testEmailIsValid() - { - $email = $this->faker->email(); - $this->assertNotFalse(filter_var($email, FILTER_VALIDATE_EMAIL)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ar_SA/InternetTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ar_SA/InternetTest.php deleted file mode 100644 index 8059f000..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ar_SA/InternetTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new Person($faker)); - $faker->addProvider(new Internet($faker)); - $faker->addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testEmailIsValid() - { - $email = $this->faker->email(); - $this->assertNotFalse(filter_var($email, FILTER_VALIDATE_EMAIL)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/at_AT/PaymentTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/at_AT/PaymentTest.php deleted file mode 100644 index f62dae81..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/at_AT/PaymentTest.php +++ /dev/null @@ -1,31 +0,0 @@ -addProvider(new Payment($faker)); - $this->faker = $faker; - } - - public function testVatIsValid() - { - $vat = $this->faker->vat(); - $unspacedVat = $this->faker->vat(false); - $this->assertRegExp('/^(AT U\d{8})$/', $vat); - $this->assertRegExp('/^(ATU\d{8})$/', $unspacedVat); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/bg_BG/PaymentTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/bg_BG/PaymentTest.php deleted file mode 100644 index b5645f9b..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/bg_BG/PaymentTest.php +++ /dev/null @@ -1,31 +0,0 @@ -addProvider(new Payment($faker)); - $this->faker = $faker; - } - - public function testVatIsValid() - { - $vat = $this->faker->vat(); - $unspacedVat = $this->faker->vat(false); - $this->assertRegExp('/^(BG \d{9,10})$/', $vat); - $this->assertRegExp('/^(BG\d{9,10})$/', $unspacedVat); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/bn_BD/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/bn_BD/PersonTest.php deleted file mode 100644 index e82fe8b7..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/bn_BD/PersonTest.php +++ /dev/null @@ -1,30 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testIfFirstNameMaleCanReturnData() - { - $firstNameMale = $this->faker->firstNameMale(); - $this->assertNotEmpty($firstNameMale); - } - - public function testIfFirstNameFemaleCanReturnData() - { - $firstNameFemale = $this->faker->firstNameFemale(); - $this->assertNotEmpty($firstNameFemale); - } -} -?> diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/cs_CZ/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/cs_CZ/PersonTest.php deleted file mode 100644 index 0b198725..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/cs_CZ/PersonTest.php +++ /dev/null @@ -1,47 +0,0 @@ -addProvider(new Person($faker)); - $faker->addProvider(new Miscellaneous($faker)); - - for ($i = 0; $i < 1000; $i++) { - $birthNumber = $faker->birthNumber(); - $birthNumber = str_replace('/', '', $birthNumber); - - // check date - $year = intval(substr($birthNumber, 0, 2), 10); - $month = intval(substr($birthNumber, 2, 2), 10); - $day = intval(substr($birthNumber, 4, 2), 10); - - // make 4 digit year from 2 digit representation - $year += $year < 54 ? 2000 : 1900; - - // adjust special cases for month - if ($month > 50) $month -= 50; - if ($year >= 2004 && $month > 20) $month -= 20; - - $this->assertTrue(checkdate($month, $day, $year), "Birth number $birthNumber: date $year/$month/$day is invalid."); - - // check CRC if presented - if (strlen($birthNumber) == 10) { - $crc = intval(substr($birthNumber, -1), 10); - $refCrc = intval(substr($birthNumber, 0, -1), 10) % 11; - if ($refCrc == 10) { - $refCrc = 0; - } - $this->assertEquals($crc, $refCrc, "Birth number $birthNumber: checksum $crc doesn't match expected $refCrc."); - } - } - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/da_DK/InternetTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/da_DK/InternetTest.php deleted file mode 100644 index 43c09be4..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/da_DK/InternetTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new Person($faker)); - $faker->addProvider(new Internet($faker)); - $faker->addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testEmailIsValid() - { - $email = $this->faker->email(); - $this->assertNotFalse(filter_var($email, FILTER_VALIDATE_EMAIL)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/de_AT/InternetTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/de_AT/InternetTest.php deleted file mode 100644 index 1d778eea..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/de_AT/InternetTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new Person($faker)); - $faker->addProvider(new Internet($faker)); - $faker->addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testEmailIsValid() - { - $email = $this->faker->email(); - $this->assertNotFalse(filter_var($email, FILTER_VALIDATE_EMAIL)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/de_AT/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/de_AT/PhoneNumberTest.php deleted file mode 100644 index 7cc6e6b1..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/de_AT/PhoneNumberTest.php +++ /dev/null @@ -1,29 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testPhoneNumberFormat() - { - $number = $this->faker->phoneNumber; - $this->assertRegExp('/^06\d{2} \d{7}|\+43 \d{4} \d{4}(-\d{2})?$/', $number); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/de_CH/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/de_CH/AddressTest.php deleted file mode 100644 index 668f2117..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/de_CH/AddressTest.php +++ /dev/null @@ -1,70 +0,0 @@ -addProvider(new Address($faker)); - $faker->addProvider(new Person($faker)); - $this->faker = $faker; - } - - /** - * @test - */ - public function canton () - { - $canton = $this->faker->canton(); - $this->assertInternalType('array', $canton); - $this->assertCount(1, $canton); - - foreach ($canton as $cantonShort => $cantonName){ - $this->assertInternalType('string', $cantonShort); - $this->assertEquals(2, strlen($cantonShort)); - $this->assertInternalType('string', $cantonName); - $this->assertGreaterThan(2, strlen($cantonName)); - } - } - - /** - * @test - */ - public function cantonName () - { - $cantonName = $this->faker->cantonName(); - $this->assertInternalType('string', $cantonName); - $this->assertGreaterThan(2, strlen($cantonName)); - } - - /** - * @test - */ - public function cantonShort () - { - $cantonShort = $this->faker->cantonShort(); - $this->assertInternalType('string', $cantonShort); - $this->assertEquals(2, strlen($cantonShort)); - } - - /** - * @test - */ - public function address (){ - $address = $this->faker->address(); - $this->assertInternalType('string', $address); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/de_CH/InternetTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/de_CH/InternetTest.php deleted file mode 100644 index 31dcc552..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/de_CH/InternetTest.php +++ /dev/null @@ -1,36 +0,0 @@ -addProvider(new Person($faker)); - $faker->addProvider(new Internet($faker)); - $faker->addProvider(new Company($faker)); - $this->faker = $faker; - } - - /** - * @test - */ - public function emailIsValid() - { - $email = $this->faker->email(); - $this->assertNotFalse(filter_var($email, FILTER_VALIDATE_EMAIL)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/de_CH/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/de_CH/PhoneNumberTest.php deleted file mode 100644 index 5102297c..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/de_CH/PhoneNumberTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testPhoneNumber() - { - $this->assertRegExp('/^0\d{2} ?\d{3} ?\d{2} ?\d{2}|\+41 ?(\(0\))?\d{2} ?\d{3} ?\d{2} ?\d{2}$/', $this->faker->phoneNumber()); - } - - public function testMobileNumber() - { - $this->assertRegExp('/^07[56789] ?\d{3} ?\d{2} ?\d{2}$/', $this->faker->mobileNumber()); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/de_DE/InternetTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/de_DE/InternetTest.php deleted file mode 100644 index a15f3664..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/de_DE/InternetTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new Person($faker)); - $faker->addProvider(new Internet($faker)); - $faker->addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testEmailIsValid() - { - $email = $this->faker->email(); - $this->assertNotFalse(filter_var($email, FILTER_VALIDATE_EMAIL)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/el_GR/TextTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/el_GR/TextTest.php deleted file mode 100644 index 3f03dd3a..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/el_GR/TextTest.php +++ /dev/null @@ -1,57 +0,0 @@ -textClass = new \ReflectionClass('Faker\Provider\el_GR\Text'); - } - - protected function getMethod($name) { - $method = $this->textClass->getMethod($name); - - $method->setAccessible(true); - - return $method; - } - - /** @test */ - function testItShouldAppendEndPunctToTheEndOfString() - { - $this->assertSame( - 'Και δεν άκουσες το κλοπακλόπ, κλοπακλόπ, κλοπακλόπ.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Και δεν άκουσες το κλοπακλόπ, κλοπακλόπ, κλοπακλόπ ')) - ); - - $this->assertSame( - 'Και δεν άκουσες το κλοπακλόπ, κλοπακλόπ, κλοπακλόπ.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Και δεν άκουσες το κλοπακλόπ, κλοπακλόπ, κλοπακλόπ—')) - ); - - $this->assertSame( - 'Και δεν άκουσες το κλοπακλόπ, κλοπακλόπ, κλοπακλόπ.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Και δεν άκουσες το κλοπακλόπ, κλοπακλόπ, κλοπακλόπ,')) - ); - - $this->assertSame( - 'Και δεν άκουσες το κλοπακλόπ, κλοπακλόπ, κλοπακλόπ!.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Και δεν άκουσες το κλοπακλόπ, κλοπακλόπ, κλοπακλόπ! ')) - ); - - $this->assertSame( - 'Και δεν άκουσες το κλοπακλόπ, κλοπακλόπ, κλοπακλόπ.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Και δεν άκουσες το κλοπακλόπ, κλοπακλόπ, κλοπακλόπ; ')) - ); - - $this->assertSame( - 'Και δεν άκουσες το κλοπακλόπ, κλοπακλόπ, κλοπακλόπ.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Και δεν άκουσες το κλοπακλόπ, κλοπακλόπ, κλοπακλόπ: ')) - ); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_AU/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_AU/AddressTest.php deleted file mode 100644 index b2f72e8b..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_AU/AddressTest.php +++ /dev/null @@ -1,49 +0,0 @@ -addProvider(new Address($faker)); - $this->faker = $faker; - } - - public function testCityPrefix() - { - $cityPrefix = $this->faker->cityPrefix(); - $this->assertNotEmpty($cityPrefix); - $this->assertInternalType('string', $cityPrefix); - $this->assertRegExp('/[A-Z][a-z]+/', $cityPrefix); - } - - public function testStreetSuffix() - { - $streetSuffix = $this->faker->streetSuffix(); - $this->assertNotEmpty($streetSuffix); - $this->assertInternalType('string', $streetSuffix); - $this->assertRegExp('/[A-Z][a-z]+/', $streetSuffix); - } - - public function testState() - { - $state = $this->faker->state(); - $this->assertNotEmpty($state); - $this->assertInternalType('string', $state); - $this->assertRegExp('/[A-Z][a-z]+/', $state); - } -} - -?> diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_CA/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_CA/AddressTest.php deleted file mode 100644 index 6b1ece72..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_CA/AddressTest.php +++ /dev/null @@ -1,69 +0,0 @@ -addProvider(new Address($faker)); - $this->faker = $faker; - } - - /** - * Test the validity of province - */ - public function testProvince() - { - $province = $this->faker->province(); - $this->assertNotEmpty($province); - $this->assertInternalType('string', $province); - $this->assertRegExp('/[A-Z][a-z]+/', $province); - } - - /** - * Test the validity of province abbreviation - */ - public function testProvinceAbbr() - { - $provinceAbbr = $this->faker->provinceAbbr(); - $this->assertNotEmpty($provinceAbbr); - $this->assertInternalType('string', $provinceAbbr); - $this->assertRegExp('/^[A-Z]{2}$/', $provinceAbbr); - } - - /** - * Test the validity of postcode letter - */ - public function testPostcodeLetter() - { - $postcodeLetter = $this->faker->randomPostcodeLetter(); - $this->assertNotEmpty($postcodeLetter); - $this->assertInternalType('string', $postcodeLetter); - $this->assertRegExp('/^[A-Z]{1}$/', $postcodeLetter); - } - - /** - * Test the validity of Canadian postcode - */ - public function testPostcode() - { - $postcode = $this->faker->postcode(); - $this->assertNotEmpty($postcode); - $this->assertInternalType('string', $postcode); - $this->assertRegExp('/^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d$/', $postcode); - } -} - -?> diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_GB/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_GB/AddressTest.php deleted file mode 100644 index 762e11a8..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_GB/AddressTest.php +++ /dev/null @@ -1,36 +0,0 @@ -addProvider(new Address($faker)); - $this->faker = $faker; - } - - /** - * - */ - public function testPostcode() - { - - $postcode = $this->faker->postcode(); - $this->assertNotEmpty($postcode); - $this->assertInternalType('string', $postcode); - $this->assertRegExp('@^(GIR ?0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPS-UW]) ?[0-9][ABD-HJLNP-UW-Z]{2})$@i', $postcode); - - } - -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_IN/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_IN/AddressTest.php deleted file mode 100644 index 125cbdf0..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_IN/AddressTest.php +++ /dev/null @@ -1,57 +0,0 @@ -addProvider(new Address($faker)); - $this->faker = $faker; - } - - public function testCity() - { - $city = $this->faker->city(); - $this->assertNotEmpty($city); - $this->assertInternalType('string', $city); - $this->assertRegExp('/[A-Z][a-z]+/', $city); - } - - public function testCountry() - { - $country = $this->faker->country(); - $this->assertNotEmpty($country); - $this->assertInternalType('string', $country); - $this->assertRegExp('/[A-Z][a-z]+/', $country); - } - - public function testLocalityName() - { - $localityName = $this->faker->localityName(); - $this->assertNotEmpty($localityName); - $this->assertInternalType('string', $localityName); - $this->assertRegExp('/[A-Z][a-z]+/', $localityName); - } - - public function testAreaSuffix() - { - $areaSuffix = $this->faker->areaSuffix(); - $this->assertNotEmpty($areaSuffix); - $this->assertInternalType('string', $areaSuffix); - $this->assertRegExp('/[A-Z][a-z]+/', $areaSuffix); - } -} - -?> diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_NG/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_NG/AddressTest.php deleted file mode 100644 index 27c591b7..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_NG/AddressTest.php +++ /dev/null @@ -1,57 +0,0 @@ -addProvider(new Address($faker)); - $this->faker = $faker; - } - - /** - * - */ - public function testPostcodeIsNotEmptyAndIsValid() - { - $postcode = $this->faker->postcode(); - - $this->assertNotEmpty($postcode); - $this->assertInternalType('string', $postcode); - } - - /** - * Test the name of the Nigerian State/County - */ - public function testCountyIsAValidString() - { - $county = $this->faker->county; - - $this->assertNotEmpty($county); - $this->assertInternalType('string', $county); - } - - /** - * Test the name of the Nigerian Region in a State. - */ - public function testRegionIsAValidString() - { - $region = $this->faker->region; - - $this->assertNotEmpty($region); - $this->assertInternalType('string', $region); - } - -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_NG/InternetTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_NG/InternetTest.php deleted file mode 100644 index 6ebc620f..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_NG/InternetTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new Person($faker)); - $faker->addProvider(new Internet($faker)); - $this->faker = $faker; - } - - public function testEmailIsValid() - { - $email = $this->faker->email(); - $this->assertNotFalse(filter_var($email, FILTER_VALIDATE_EMAIL)); - $this->assertNotEmpty($email); - $this->assertInternalType('string', $email); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_NG/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_NG/PersonTest.php deleted file mode 100644 index 2180e36e..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_NG/PersonTest.php +++ /dev/null @@ -1,30 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testPersonNameIsAValidString() - { - $name = $this->faker->name; - - $this->assertNotEmpty($name); - $this->assertInternalType('string', $name); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_NG/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_NG/PhoneNumberTest.php deleted file mode 100644 index c591b8ab..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_NG/PhoneNumberTest.php +++ /dev/null @@ -1,26 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testPhoneNumberReturnsPhoneNumberWithOrWithoutCountryCode() - { - $phoneNumber = $this->faker->phoneNumber(); - - $this->assertNotEmpty($phoneNumber); - $this->assertInternalType('string', $phoneNumber); - $this->assertRegExp('/^(0|(\+234))\s?[789][01]\d\s?(\d{3}\s?\d{4})/', $phoneNumber); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_NZ/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_NZ/PhoneNumberTest.php deleted file mode 100644 index 14b145c7..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_NZ/PhoneNumberTest.php +++ /dev/null @@ -1,36 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testIfPhoneNumberCanReturnData() - { - $number = $this->faker->phoneNumber; - $this->assertNotEmpty($number); - } - - public function phoneNumberFormat() - { - $number = $this->faker->phoneNumber; - $this->assertRegExp('/(^\([0]\d{1}\))(\d{7}$)|(^\([0][2]\d{1}\))(\d{6,8}$)|([0][8][0][0])([\s])(\d{5,8}$)/', $number); - } -} -?> diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_PH/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_PH/AddressTest.php deleted file mode 100644 index 19367a49..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_PH/AddressTest.php +++ /dev/null @@ -1,50 +0,0 @@ -addProvider(new Address($faker)); - $this->faker = $faker; - } - - public function testProvince() - { - $province = $this->faker->province(); - $this->assertNotEmpty($province); - $this->assertInternalType('string', $province); - } - - public function testCity() - { - $city = $this->faker->city(); - $this->assertNotEmpty($city); - $this->assertInternalType('string', $city); - } - - public function testMunicipality() - { - $municipality = $this->faker->municipality(); - $this->assertNotEmpty($municipality); - $this->assertInternalType('string', $municipality); - } - - public function testBarangay() - { - $barangay = $this->faker->barangay(); - $this->assertInternalType('string', $barangay); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_SG/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_SG/AddressTest.php deleted file mode 100644 index abc62aac..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_SG/AddressTest.php +++ /dev/null @@ -1,27 +0,0 @@ -addProvider(new Address($faker)); - $this->faker = $faker; - } - - public function testStreetNumber() - { - $this->assertRegExp('/^\d{2,3}$/', $this->faker->streetNumber()); - } - - public function testBlockNumber() - { - $this->assertRegExp('/^Blk\s*\d{2,3}[A-H]*$/i', $this->faker->blockNumber()); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_SG/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_SG/PhoneNumberTest.php deleted file mode 100644 index c8bb13f8..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_SG/PhoneNumberTest.php +++ /dev/null @@ -1,46 +0,0 @@ -faker = Factory::create('en_SG'); - $this->faker->seed(1); - $this->faker->addProvider(new PhoneNumber($this->faker)); - } - - // http://en.wikipedia.org/wiki/Telephone_numbers_in_Singapore#Numbering_plan - // y means 0 to 8 only - // x means 0 to 9 - public function testMobilePhoneNumberStartWith9Returns9yxxxxxx() - { - $startsWith9 = false; - while (!$startsWith9) { - $mobileNumber = $this->faker->mobileNumber(); - $startsWith9 = preg_match('/^(\+65|65)?\s*9/', $mobileNumber); - } - - $this->assertRegExp('/^(\+65|65)?\s*9\s*[0-8]{3}\s*\d{4}$/', $mobileNumber); - } - - // http://en.wikipedia.org/wiki/Telephone_numbers_in_Singapore#Numbering_plan - // z means 1 to 9 only - // x means 0 to 9 - public function testMobilePhoneNumberStartWith7Or8Returns7Or8zxxxxxx() - { - $startsWith7Or8 = false; - while (!$startsWith7Or8) { - $mobileNumber = $this->faker->mobileNumber(); - $startsWith7Or8 = preg_match('/^(\+65|65)?\s*[7-8]/', $mobileNumber); - } - $this->assertRegExp('/^(\+65|65)?\s*[7-8]\s*[1-9]{3}\s*\d{4}$/', $mobileNumber); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_UG/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_UG/AddressTest.php deleted file mode 100644 index 571d93fb..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_UG/AddressTest.php +++ /dev/null @@ -1,53 +0,0 @@ -addProvider(new Address($faker)); - $this->faker = $faker; - } - - /** - * @test - */ - public function testCityName() - { - $city = $this->faker->cityName(); - $this->assertNotEmpty($city); - $this->assertInternalType('string', $city); - } - - /** - * @test - */ - public function testDistrict() - { - $district = $this->faker->district(); - $this->assertNotEmpty($district); - $this->assertInternalType('string', $district); - } - - /** - * @test - */ - public function testRegion() - { - $region = $this->faker->region(); - $this->assertNotEmpty($region); - $this->assertInternaltype('string', $region); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_US/CompanyTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_US/CompanyTest.php deleted file mode 100644 index 735d8339..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_US/CompanyTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new Company($faker)); - $this->faker = $faker; - } - - /** - * @link https://stackoverflow.com/questions/4242433/regex-for-ein-number-and-ssn-number-format-in-jquery/35471665#35471665 - */ - public function testEin() - { - $number = $this->faker->ein; - - // should be in the format ##-#######, with a valid prefix - $this->assertRegExp('/^(0[1-6]||1[0-6]|2[0-7]|[35]\d|[468][0-8]|7[1-7]|9[0-58-9])-\d{7}$/', $number); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_US/PaymentTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_US/PaymentTest.php deleted file mode 100644 index ec82691b..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_US/PaymentTest.php +++ /dev/null @@ -1,85 +0,0 @@ -addProvider(new Payment($faker)); - $this->faker = $faker; - } - - public function testBankAccountNumber() - { - $accNo = $this->faker->bankAccountNumber; - $this->assertTrue(ctype_digit($accNo)); - $this->assertLessThanOrEqual(17, strlen($accNo)); - } - - public function testBankRoutingNumber() - { - $routingNo = $this->faker->bankRoutingNumber; - $this->assertRegExp('/^\d{9}$/', $routingNo); - $this->assertEquals(Payment::calculateRoutingNumberChecksum($routingNo), $routingNo[8]); - } - - public function routingNumberProvider() - { - return array( - array('122105155'), - array('082000549'), - array('121122676'), - array('122235821'), - array('102101645'), - array('102000021'), - array('123103729'), - array('071904779'), - array('081202759'), - array('074900783'), - array('104000029'), - array('073000545'), - array('101000187'), - array('042100175'), - array('083900363'), - array('091215927'), - array('091300023'), - array('091000022'), - array('081000210'), - array('101200453'), - array('092900383'), - array('104000029'), - array('121201694'), - array('107002312'), - array('091300023'), - array('041202582'), - array('042000013'), - array('123000220'), - array('091408501'), - array('064000059'), - array('124302150'), - array('125000105'), - array('075000022'), - array('307070115'), - array('091000022'), - ); - } - - /** - * @dataProvider routingNumberProvider - */ - public function testCalculateRoutingNumberChecksum($routingNo) - { - $this->assertEquals($routingNo[8], Payment::calculateRoutingNumberChecksum($routingNo), $routingNo); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_US/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_US/PersonTest.php deleted file mode 100644 index 3ddb38b2..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_US/PersonTest.php +++ /dev/null @@ -1,48 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testSsn() - { - for ($i = 0; $i < 100; $i++) { - $number = $this->faker->ssn; - - // should be in the format ###-##-#### - $this->assertRegExp('/^[0-9]{3}-[0-9]{2}-[0-9]{4}$/', $number); - - $parts = explode("-", $number); - - // first part must be between 001 and 899, excluding 666 - $this->assertNotEquals(666, $parts[0]); - $this->assertGreaterThan(0, $parts[0]); - $this->assertLessThan(900, $parts[0]); - - // second part must be between 01 and 99 - $this->assertGreaterThan(0, $parts[1]); - $this->assertLessThan(100, $parts[1]); - - // the third part must be between 0001 and 9999 - $this->assertGreaterThan(0, $parts[2]); - $this->assertLessThan(10000, $parts[2]); - } - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_US/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_US/PhoneNumberTest.php deleted file mode 100644 index a54ff882..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_US/PhoneNumberTest.php +++ /dev/null @@ -1,85 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testPhoneNumber() - { - for ($i = 0; $i < 100; $i++) { - $number = $this->faker->phoneNumber; - $baseNumber = preg_replace('/ *x.*$/', '', $number); // Remove possible extension - $digits = array_values(array_filter(str_split($baseNumber), 'ctype_digit')); - - // Prefix '1' allowed - if (count($digits) === 11) { - $this->assertEquals('1', $digits[0]); - $digits = array_slice($digits, 1); - } - - // 10 digits - $this->assertEquals(10, count($digits)); - - // Last two digits of area code cannot be identical - $this->assertNotEquals($digits[1], $digits[2]); - - // Last two digits of exchange code cannot be 1 - if ($digits[4] === 1) { - $this->assertNotEquals($digits[4], $digits[5]); - } - - // Test format - $this->assertRegExp('/^(\+?1)?([ -.]*\d{3}[ -.]*| *\(\d{3}\) *)\d{3}[-.]?\d{4}$/', $baseNumber); - } - } - - public function testTollFreeAreaCode() - { - $this->assertContains($this->faker->tollFreeAreaCode, array(800, 822, 833, 844, 855, 866, 877, 888, 880, 887, 889)); - } - - public function testTollFreePhoneNumber() - { - for ($i = 0; $i < 100; $i++) { - $number = $this->faker->tollFreePhoneNumber; - $digits = array_values(array_filter(str_split($number), 'ctype_digit')); - - // Prefix '1' allowed - if (count($digits) === 11) { - $this->assertEquals('1', $digits[0]); - $digits = array_slice($digits, 1); - } - - // 10 digits - $this->assertEquals(10, count($digits)); - - $areaCode = $digits[0] . $digits[1] . $digits[2]; - $this->assertContains($areaCode, array('800', '822', '833', '844', '855', '866', '877', '888', '880', '887', '889')); - - // Last two digits of exchange code cannot be 1 - if ($digits[4] === 1) { - $this->assertNotEquals($digits[4], $digits[5]); - } - - // Test format - $this->assertRegExp('/^(\+?1)?([ -.]*\d{3}[ -.]*| *\(\d{3}\) *)\d{3}[-.]?\d{4}$/', $number); - } - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_ZA/CompanyTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_ZA/CompanyTest.php deleted file mode 100644 index 0e51d492..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_ZA/CompanyTest.php +++ /dev/null @@ -1,27 +0,0 @@ -addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testGenerateValidCompanyNumber() - { - $companyRegNo = $this->faker->companyNumber(); - - $this->assertEquals(14, strlen($companyRegNo)); - $this->assertRegExp('#^\d{4}/\d{6}/\d{2}$#', $companyRegNo); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_ZA/InternetTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_ZA/InternetTest.php deleted file mode 100644 index 02c29404..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_ZA/InternetTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new Person($faker)); - $faker->addProvider(new Internet($faker)); - $faker->addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testEmailIsValid() - { - $email = $this->faker->email(); - $this->assertNotFalse(filter_var($email, FILTER_VALIDATE_EMAIL)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_ZA/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_ZA/PersonTest.php deleted file mode 100644 index d7973e72..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_ZA/PersonTest.php +++ /dev/null @@ -1,69 +0,0 @@ -addProvider(new Person($faker)); - $faker->addProvider(new DateTime($faker)); - $this->faker = $faker; - } - - public function testIdNumberWithDefaults() - { - $idNumber = $this->faker->idNumber(); - - $this->assertEquals(13, strlen($idNumber)); - $this->assertRegExp('#^\d{13}$#', $idNumber); - $this->assertInternalType('string', $idNumber); - } - - public function testIdNumberForMales() - { - $idNumber = $this->faker->idNumber(new \DateTime(), true, 'male'); - - $genderDigit = substr($idNumber, 6, 1); - - $this->assertContains($genderDigit, array('5', '6', '7', '8', '9')); - } - - public function testIdNumberForFemales() - { - $idNumber = $this->faker->idNumber(new \DateTime(), true, 'female'); - - $genderDigit = substr($idNumber, 6, 1); - - $this->assertContains($genderDigit, array('0', '1', '2', '3', '4')); - } - - public function testLicenceCode() - { - $validLicenceCodes = array('A', 'A1', 'B', 'C', 'C1', 'C2', 'EB', 'EC', 'EC1', 'I', 'L', 'L1'); - - $this->assertContains($this->faker->licenceCode, $validLicenceCodes); - } - - public function testMaleTitles() - { - $validMaleTitles = array('Mr.', 'Dr.', 'Prof.', 'Rev.', 'Hon.'); - - $this->assertContains(Person::titleMale(), $validMaleTitles); - } - - public function testFemaleTitles() - { - $validateFemaleTitles = array('Mrs.', 'Ms.', 'Miss', 'Dr.', 'Prof.', 'Rev.', 'Hon.'); - - $this->assertContains(Person::titleFemale(), $validateFemaleTitles); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/en_ZA/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/en_ZA/PhoneNumberTest.php deleted file mode 100644 index 37b781b5..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/en_ZA/PhoneNumberTest.php +++ /dev/null @@ -1,66 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testPhoneNumber() - { - for ($i = 0; $i < 10; $i++) { - $number = $this->faker->phoneNumber; - - $digits = array_values(array_filter(str_split($number), 'ctype_digit')); - - // 10 digits - if($digits[0] = 2 && $digits[1] == 7) { - $this->assertLessThanOrEqual(11, count($digits)); - } else { - $this->assertGreaterThanOrEqual(10, count($digits)); - } - } - } - - public function testTollFreePhoneNumber() - { - for ($i = 0; $i < 10; $i++) { - $number = $this->faker->tollFreeNumber; - $digits = array_values(array_filter(str_split($number), 'ctype_digit')); - - if (count($digits) === 11) { - $this->assertEquals('0', $digits[0]); - } - - $areaCode = $digits[0] . $digits[1] . $digits[2] . $digits[3]; - $this->assertContains($areaCode, array('0800', '0860', '0861', '0862')); - } - } - - public function testCellPhoneNumber() - { - for ($i = 0; $i < 10; $i++) { - $number = $this->faker->mobileNumber; - $digits = array_values(array_filter(str_split($number), 'ctype_digit')); - - if($digits[0] = 2 && $digits[1] == 7) { - $this->assertLessThanOrEqual(11, count($digits)); - } else { - $this->assertGreaterThanOrEqual(10, count($digits)); - } - - $this->assertRegExp('/^(\+27|27)?(\()?0?([6][0-4]|[7][1-9]|[8][1-9])(\))?( |-|\.|_)?(\d{3})( |-|\.|_)?(\d{4})/', $number); - } - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/es_ES/PaymentTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/es_ES/PaymentTest.php deleted file mode 100644 index e636544b..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/es_ES/PaymentTest.php +++ /dev/null @@ -1,61 +0,0 @@ -addProvider(new Payment($faker)); - $this->faker = $faker; - } - - public function testVAT() - { - $vat = $this->faker->vat(); - - $this->assertTrue($this->isValidCIF($vat)); - } - - /** - * Validation taken from https://github.com/amnesty/drupal-nif-nie-cif-validator/ - * @link https://github.com/amnesty/drupal-nif-nie-cif-validator/blob/master/includes/nif-nie-cif.php - */ - function isValidCIF($docNumber) - { - $fixedDocNumber = strtoupper($docNumber); - - return $this->isValidCIFFormat($fixedDocNumber); - } - - function isValidCIFFormat($docNumber) - { - return $this->respectsDocPattern($docNumber, '/^[PQSNWR][0-9][0-9][0-9][0-9][0-9][0-9][0-9][A-Z0-9]/') - || - $this->respectsDocPattern($docNumber, '/^[ABCDEFGHJUV][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/'); - } - - function respectsDocPattern($givenString, $pattern) - { - $isValid = FALSE; - $fixedString = strtoupper($givenString); - if (is_int(substr($fixedString, 0, 1))) { - $fixedString = substr("000000000" . $givenString, -9); - } - if (preg_match($pattern, $fixedString)) { - $isValid = TRUE; - } - return $isValid; - } - -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/es_ES/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/es_ES/PersonTest.php deleted file mode 100644 index e29f3f90..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/es_ES/PersonTest.php +++ /dev/null @@ -1,46 +0,0 @@ -seed(1); - $faker->addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testDNI() - { - $dni = $this->faker->dni; - $this->assertTrue($this->isValidDNI($dni)); - } - - // validation taken from http://kiwwito.com/php-function-for-spanish-dni-nie-validation/ - public function isValidDNI($string) - { - if (strlen($string) != 9 || - preg_match('/^[XYZ]?([0-9]{7,8})([A-Z])$/i', $string, $matches) !== 1) { - return false; - } - - $map = 'TRWAGMYFPDXBNJZSQVHLCKE'; - - list(, $number, $letter) = $matches; - - return strtoupper($letter) === $map[((int) $number) % 23]; - } - - public function testLicenceCode() - { - $validLicenceCodes = array('AM', 'A1', 'A2', 'A','B', 'B+E', 'C1', 'C1+E', 'C', 'C+E', 'D1', 'D1+E', 'D', 'D+E'); - - $this->assertContains($this->faker->licenceCode, $validLicenceCodes); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/es_ES/TextTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/es_ES/TextTest.php deleted file mode 100644 index a8ae3486..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/es_ES/TextTest.php +++ /dev/null @@ -1,27 +0,0 @@ -addProvider(new Text($faker)); - $this->faker = $faker; - } - - public function testText() - { - $this->assertNotSame('', $this->faker->realtext(200, 2)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/es_PE/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/es_PE/PersonTest.php deleted file mode 100644 index 60149387..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/es_PE/PersonTest.php +++ /dev/null @@ -1,29 +0,0 @@ -seed(1); - $faker->addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testDNI() - { - $dni = $this->faker->dni; - $this->assertRegExp('/\A[0-9]{8}\Z/', $dni); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/es_VE/CompanyTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/es_VE/CompanyTest.php deleted file mode 100644 index 3c9b162a..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/es_VE/CompanyTest.php +++ /dev/null @@ -1,43 +0,0 @@ - for Faker - * Date: 01/09/2017 - * Time: 09:45 PM - */ - -namespace Faker\Test\Provider\es_VE; - -use Faker\Generator; -use Faker\Provider\es_VE\Company; -use PHPUnit\Framework\TestCase; - -class CompanyTest extends TestCase -{ - /** - * @var Generator - */ - private $faker; - - public function setUp() - { - $faker = new Generator(); - $faker->seed(1); - $faker->addProvider(new Company($faker)); - $this->faker = $faker; - } - - /** - * national Id format validator - */ - public function testNationalId() - { - $pattern = '/^[VJGECP]-?\d{8}-?\d$/'; - $rif = $this->faker->taxpayerIdentificationNumber; - $this->assertRegExp($pattern, $rif); - - $rif = $this->faker->taxpayerIdentificationNumber('-'); - $this->assertRegExp($pattern, $rif); - } - - -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/es_VE/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/es_VE/PersonTest.php deleted file mode 100644 index bb42cd75..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/es_VE/PersonTest.php +++ /dev/null @@ -1,43 +0,0 @@ -seed(1); - $faker->addProvider(new Person($faker)); - $this->faker = $faker; - } - - /** - * national Id format validator - */ - public function testNationalId() - { - $pattern = '/(?:^V-?\d{5,9}$)|(?:^E-?\d{8,9}$)/'; - - $cedula = $this->faker->nationalId; - $this->assertRegExp($pattern, $cedula); - - $cedula = $this->faker->nationalId('-'); - $this->assertRegExp($pattern, $cedula); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/fi_FI/InternetTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/fi_FI/InternetTest.php deleted file mode 100644 index 6009bbd1..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/fi_FI/InternetTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new Person($faker)); - $faker->addProvider(new Internet($faker)); - $faker->addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testEmailIsValid() - { - $email = $this->faker->email(); - $this->assertNotFalse(filter_var($email, FILTER_VALIDATE_EMAIL)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/fi_FI/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/fi_FI/PersonTest.php deleted file mode 100644 index b979666e..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/fi_FI/PersonTest.php +++ /dev/null @@ -1,82 +0,0 @@ -addProvider(new DateTime($faker)); - $faker->addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function provideSeedAndExpectedReturn() - { - return array( - array(1, '1800-01-01', '010100+5207'), - array(2, '1930-08-08', '080830-508R'), - array(3, '1999-12-31', '311299-409D'), - array(4, '2000-01-01', '010100A039P'), - array(5, '2015-06-17', '170615A690X') - ); - } - - /** - * @dataProvider provideSeedAndExpectedReturn - */ - public function testPersonalIdentityNumberUsesBirthDateIfProvided($seed, $birthdate, $expected) - { - $faker = $this->faker; - $faker->seed($seed); - $pin = $faker->personalIdentityNumber(\DateTime::createFromFormat('Y-m-d', $birthdate)); - $this->assertEquals($expected, $pin); - } - - public function testPersonalIdentityNumberGeneratesCompliantNumbers() - { - if (strtotime('1800-01-01 00:00:00')) { - $min="1900"; - $max="2099"; - for ($i = 0; $i < 10; $i++) { - $birthdate = $this->faker->dateTimeBetween('1800-01-01 00:00:00', '1899-12-31 23:59:59'); - $pin = $this->faker->personalIdentityNumber($birthdate, NULL, true); - $this->assertRegExp('/^[0-9]{6}\+[0-9]{3}[0-9ABCDEFHJKLMNPRSTUVWXY]$/', $pin); - } - } else { // timestamp limit for 32-bit computer - $min="1902"; - $max="2037"; - } - for ($i = 0; $i < 10; $i++) { - $birthdate = $this->faker->dateTimeBetween("$min-01-01 00:00:00", '1999-12-31 23:59:59'); - $pin = $this->faker->personalIdentityNumber($birthdate); - $this->assertRegExp('/^[0-9]{6}-[0-9]{3}[0-9ABCDEFHJKLMNPRSTUVWXY]$/', $pin); - } - for ($i = 0; $i < 10; $i++) { - $birthdate = $this->faker->dateTimeBetween('2000-01-01 00:00:00', "$max-12-31 23:59:59"); - $pin = $this->faker->personalIdentityNumber($birthdate); - $this->assertRegExp('/^[0-9]{6}A[0-9]{3}[0-9ABCDEFHJKLMNPRSTUVWXY]$/', $pin); - } - } - - public function testPersonalIdentityNumberGeneratesOddValuesForMales() - { - $pin = $this->faker->personalIdentityNumber(null, 'male'); - $this->assertEquals(1, $pin{9} % 2); - } - - public function testPersonalIdentityNumberGeneratesEvenValuesForFemales() - { - $pin = $this->faker->personalIdentityNumber(null, 'female'); - $this->assertEquals(0, $pin{9} % 2); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/fr_BE/PaymentTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/fr_BE/PaymentTest.php deleted file mode 100644 index 6944c55f..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/fr_BE/PaymentTest.php +++ /dev/null @@ -1,30 +0,0 @@ -addProvider(new Payment($faker)); - $this->faker = $faker; - } - - public function testVatIsValid() - { - $vat = $this->faker->vat(); - $unspacedVat = $this->faker->vat(false); - $this->assertRegExp('/^(BE 0\d{9})$/', $vat); - $this->assertRegExp('/^(BE0\d{9})$/', $unspacedVat); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/fr_CH/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/fr_CH/AddressTest.php deleted file mode 100644 index 217ac9f6..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/fr_CH/AddressTest.php +++ /dev/null @@ -1,70 +0,0 @@ -addProvider(new Address($faker)); - $faker->addProvider(new Person($faker)); - $this->faker = $faker; - } - - /** - * @test - */ - public function canton () - { - $canton = $this->faker->canton(); - $this->assertInternalType('array', $canton); - $this->assertCount(1, $canton); - - foreach ($canton as $cantonShort => $cantonName){ - $this->assertInternalType('string', $cantonShort); - $this->assertEquals(2, strlen($cantonShort)); - $this->assertInternalType('string', $cantonName); - $this->assertGreaterThan(2, strlen($cantonName)); - } - } - - /** - * @test - */ - public function cantonName () - { - $cantonName = $this->faker->cantonName(); - $this->assertInternalType('string', $cantonName); - $this->assertGreaterThan(2, strlen($cantonName)); - } - - /** - * @test - */ - public function cantonShort () - { - $cantonShort = $this->faker->cantonShort(); - $this->assertInternalType('string', $cantonShort); - $this->assertEquals(2, strlen($cantonShort)); - } - - /** - * @test - */ - public function address (){ - $address = $this->faker->address(); - $this->assertInternalType('string', $address); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/fr_CH/InternetTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/fr_CH/InternetTest.php deleted file mode 100644 index f4e94848..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/fr_CH/InternetTest.php +++ /dev/null @@ -1,36 +0,0 @@ -addProvider(new Person($faker)); - $faker->addProvider(new Internet($faker)); - $faker->addProvider(new Company($faker)); - $this->faker = $faker; - } - - /** - * @test - */ - public function emailIsValid() - { - $email = $this->faker->email(); - $this->assertNotFalse(filter_var($email, FILTER_VALIDATE_EMAIL)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/fr_CH/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/fr_CH/PhoneNumberTest.php deleted file mode 100644 index 7bfcca76..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/fr_CH/PhoneNumberTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testPhoneNumber() - { - $this->assertRegExp('/^0\d{2} ?\d{3} ?\d{2} ?\d{2}|\+41 ?(\(0\))?\d{2} ?\d{3} ?\d{2} ?\d{2}$/', $this->faker->phoneNumber()); - } - - public function testMobileNumber() - { - $this->assertRegExp('/^07[56789] ?\d{3} ?\d{2} ?\d{2}$/', $this->faker->mobileNumber()); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/AddressTest.php deleted file mode 100644 index 50b40f4b..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/AddressTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new Address($faker)); - $this->faker = $faker; - } - - /** - * @test - */ - public function testSecondaryAddress() - { - $secondaryAdress = $this->faker->secondaryAddress(); - $this->assertNotEmpty($secondaryAdress); - $this->assertInternalType('string', $secondaryAdress); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/CompanyTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/CompanyTest.php deleted file mode 100644 index 83e54d92..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/CompanyTest.php +++ /dev/null @@ -1,75 +0,0 @@ -addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testSiretReturnsAValidSiret() - { - $siret = $this->faker->siret(false); - $this->assertRegExp("/^\d{14}$/", $siret); - $this->assertTrue(Luhn::isValid($siret)); - } - - public function testSiretReturnsAWellFormattedSiret() - { - $siret = $this->faker->siret(); - $this->assertRegExp("/^\d{3}\s\d{3}\s\d{3}\s\d{5}$/", $siret); - $siret = str_replace(' ', '', $siret); - $this->assertTrue(Luhn::isValid($siret)); - } - - public function testSirenReturnsAValidSiren() - { - $siren = $this->faker->siren(false); - $this->assertRegExp("/^\d{9}$/", $siren); - $this->assertTrue(Luhn::isValid($siren)); - } - - public function testSirenReturnsAWellFormattedSiren() - { - $siren = $this->faker->siren(); - $this->assertRegExp("/^\d{3}\s\d{3}\s\d{3}$/", $siren); - $siren = str_replace(' ', '', $siren); - $this->assertTrue(Luhn::isValid($siren)); - } - - public function testCatchPhraseReturnsValidCatchPhrase() - { - $this->assertTrue(TestableCompany::isCatchPhraseValid($this->faker->catchPhrase())); - } - - public function testIsCatchPhraseValidReturnsFalseWhenAWordsAppearsTwice() - { - $isCatchPhraseValid = TestableCompany::isCatchPhraseValid('La sécurité de rouler en toute sécurité'); - $this->assertFalse($isCatchPhraseValid); - } - - public function testIsCatchPhraseValidReturnsTrueWhenNoWordAppearsTwice() - { - $isCatchPhraseValid = TestableCompany::isCatchPhraseValid('La sécurité de rouler en toute simplicité'); - $this->assertTrue($isCatchPhraseValid); - } -} - -class TestableCompany extends Company -{ - public static function isCatchPhraseValid($catchPhrase) - { - return parent::isCatchPhraseValid($catchPhrase); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/PaymentTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/PaymentTest.php deleted file mode 100644 index d00a7c83..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/PaymentTest.php +++ /dev/null @@ -1,49 +0,0 @@ -addProvider(new Payment($faker)); - $this->faker = $faker; - } - - public function testFormattedVat() - { - $vat = $this->faker->vat(true); - $this->assertRegExp("/^FR\s\w{2}\s\d{3}\s\d{3}\s\d{3}$/", $vat); - - $vat = str_replace(' ', '', $vat); - $siren = substr($vat, 4, 12); - $this->assertTrue(Luhn::isValid($siren)); - - $key = (int) substr($siren, 2, 2); - if ($key === 0) { - $this->assertEqual($key, (12 + 3 * ($siren % 97)) % 97); - } - } - - public function testUnformattedVat() - { - $vat = $this->faker->vat(false); - $this->assertRegExp("/^FR\w{2}\d{9}$/", $vat); - - $siren = substr($vat, 4, 12); - $this->assertTrue(Luhn::isValid($siren)); - - $key = (int) substr($siren, 2, 2); - if ($key === 0) { - $this->assertEqual($key, (12 + 3 * ($siren % 97)) % 97); - } - } -} \ No newline at end of file diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/PersonTest.php deleted file mode 100644 index 8c5fc654..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/PersonTest.php +++ /dev/null @@ -1,37 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testNIRReturnsTheRightGender() - { - $nir = $this->faker->nir(\Faker\Provider\Person::GENDER_MALE); - $this->assertStringStartsWith('1', $nir); - } - - public function testNIRReturnsTheRightPattern() - { - $nir = $this->faker->nir; - $this->assertRegExp("/^[12]\d{5}[0-9A-B]\d{8}$/", $nir); - } - - public function testNIRFormattedReturnsTheRightPattern() - { - $nir = $this->faker->nir(null, true); - $this->assertRegExp("/^[12]\s\d{2}\s\d{2}\s\d{1}[0-9A-B]\s\d{3}\s\d{3}\s\d{2}$/", $nir); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/PhoneNumberTest.php deleted file mode 100644 index d4179709..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/PhoneNumberTest.php +++ /dev/null @@ -1,57 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testMobileNumber() - { - $mobileNumber = $this->faker->mobileNumber(); - $this->assertRegExp('/^(\+33 |\+33 \(0\)|0)(6|7)(?:(\s{1})?\d{2}){4}$/', $mobileNumber); - } - - public function testMobileNumber07Format() - { - $mobileNumberFormat = $this->faker->phoneNumber07(); - $this->assertRegExp('/^([3-9]{1})\d(\d{2}){3}$/', $mobileNumberFormat); - } - - public function testMobileNumber07WithSeparatorFormat() - { - $mobileNumberFormat = $this->faker->phoneNumber07WithSeparator(); - $this->assertRegExp('/^([3-9]{1})\d( \d{2}){3}$/', $mobileNumberFormat); - } - - public function testServiceNumber() - { - $serviceNumber = $this->faker->serviceNumber(); - $this->assertRegExp('/^(\+33 |\+33 \(0\)|0)8(?:(\s{1})?\d{2}){4}$/', $serviceNumber); - } - - public function testServiceNumberFormat() - { - $serviceNumberFormat = $this->faker->phoneNumber08(); - $this->assertRegExp('/^((0|1|2)\d{1}|9[^46])\d{6}$/', $serviceNumberFormat); - } - - public function testServiceNumberWithSeparatorFormat() - { - $serviceNumberFormat = $this->faker->phoneNumber08WithSeparator(); - $this->assertRegExp('/^((0|1|2)\d{1}|9[^46])( \d{2}){3}$/', $serviceNumberFormat); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/TextTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/TextTest.php deleted file mode 100644 index c9c7a4ff..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/fr_FR/TextTest.php +++ /dev/null @@ -1,57 +0,0 @@ -textClass = new \ReflectionClass('Faker\Provider\fr_FR\Text'); - } - - protected function getMethod($name) { - $method = $this->textClass->getMethod($name); - - $method->setAccessible(true); - - return $method; - } - - /** @test */ - function testItShouldAppendEndPunctToTheEndOfString() - { - $this->assertSame( - 'Que faisaient-elles maintenant? À.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Que faisaient-elles maintenant? À ')) - ); - - $this->assertSame( - 'Que faisaient-elles maintenant? À.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Que faisaient-elles maintenant? À— ')) - ); - - $this->assertSame( - 'Que faisaient-elles maintenant? À.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Que faisaient-elles maintenant? À,')) - ); - - $this->assertSame( - 'Que faisaient-elles maintenant? À!.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Que faisaient-elles maintenant? À! ')) - ); - - $this->assertSame( - 'Que faisaient-elles maintenant? À.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Que faisaient-elles maintenant? À: ')) - ); - - $this->assertSame( - 'Que faisaient-elles maintenant? À.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Que faisaient-elles maintenant? À; ')) - ); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/id_ID/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/id_ID/PersonTest.php deleted file mode 100644 index 5ebfeee4..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/id_ID/PersonTest.php +++ /dev/null @@ -1,41 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testIfFirstNameMaleCanReturnData() - { - $firstNameMale = $this->faker->firstNameMale(); - $this->assertNotEmpty($firstNameMale); - } - - public function testIfLastNameMaleCanReturnData() - { - $lastNameMale = $this->faker->lastNameMale(); - $this->assertNotEmpty($lastNameMale); - } - - public function testIfFirstNameFemaleCanReturnData() - { - $firstNameFemale = $this->faker->firstNameFemale(); - $this->assertNotEmpty($firstNameFemale); - } - - public function testIfLastNameFemaleCanReturnData() - { - $lastNameFemale = $this->faker->lastNameFemale(); - $this->assertNotEmpty($lastNameFemale); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/it_CH/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/it_CH/AddressTest.php deleted file mode 100644 index 0f0df5e9..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/it_CH/AddressTest.php +++ /dev/null @@ -1,70 +0,0 @@ -addProvider(new Address($faker)); - $faker->addProvider(new Person($faker)); - $this->faker = $faker; - } - - /** - * @test - */ - public function canton () - { - $canton = $this->faker->canton(); - $this->assertInternalType('array', $canton); - $this->assertCount(1, $canton); - - foreach ($canton as $cantonShort => $cantonName){ - $this->assertInternalType('string', $cantonShort); - $this->assertEquals(2, strlen($cantonShort)); - $this->assertInternalType('string', $cantonName); - $this->assertGreaterThan(2, strlen($cantonName)); - } - } - - /** - * @test - */ - public function cantonName () - { - $cantonName = $this->faker->cantonName(); - $this->assertInternalType('string', $cantonName); - $this->assertGreaterThan(2, strlen($cantonName)); - } - - /** - * @test - */ - public function cantonShort () - { - $cantonShort = $this->faker->cantonShort(); - $this->assertInternalType('string', $cantonShort); - $this->assertEquals(2, strlen($cantonShort)); - } - - /** - * @test - */ - public function address (){ - $address = $this->faker->address(); - $this->assertInternalType('string', $address); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/it_CH/InternetTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/it_CH/InternetTest.php deleted file mode 100644 index d46f6b7d..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/it_CH/InternetTest.php +++ /dev/null @@ -1,36 +0,0 @@ -addProvider(new Person($faker)); - $faker->addProvider(new Internet($faker)); - $faker->addProvider(new Company($faker)); - $this->faker = $faker; - } - - /** - * @test - */ - public function emailIsValid() - { - $email = $this->faker->email(); - $this->assertNotFalse(filter_var($email, FILTER_VALIDATE_EMAIL)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/it_CH/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/it_CH/PhoneNumberTest.php deleted file mode 100644 index 5cda5345..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/it_CH/PhoneNumberTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testPhoneNumber() - { - $this->assertRegExp('/^0\d{2} ?\d{3} ?\d{2} ?\d{2}|\+41 ?(\(0\))?\d{2} ?\d{3} ?\d{2} ?\d{2}$/', $this->faker->phoneNumber()); - } - - public function testMobileNumber() - { - $this->assertRegExp('/^07[56789] ?\d{3} ?\d{2} ?\d{2}$/', $this->faker->mobileNumber()); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/it_IT/CompanyTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/it_IT/CompanyTest.php deleted file mode 100644 index 33977e13..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/it_IT/CompanyTest.php +++ /dev/null @@ -1,24 +0,0 @@ -addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testIfTaxIdCanReturnData() - { - $vatId = $this->faker->vatId(); - $this->assertRegExp('/^IT[0-9]{11}$/', $vatId); - } - -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/it_IT/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/it_IT/PersonTest.php deleted file mode 100644 index 3e7b1a4f..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/it_IT/PersonTest.php +++ /dev/null @@ -1,24 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testIfTaxIdCanReturnData() - { - $taxId = $this->faker->taxId(); - $this->assertRegExp('/^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/', $taxId); - } - -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ja_JP/InternetTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ja_JP/InternetTest.php deleted file mode 100644 index b4a19fde..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ja_JP/InternetTest.php +++ /dev/null @@ -1,28 +0,0 @@ -addProvider(new Internet($faker)); - $faker->seed(1); - - $this->assertEquals('akira72', $faker->userName); - } - - public function testDomainName() - { - $faker = new Generator(); - $faker->addProvider(new Internet($faker)); - $faker->seed(1); - - $this->assertEquals('nakajima.com', $faker->domainName); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ja_JP/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ja_JP/PersonTest.php deleted file mode 100644 index e7854826..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ja_JP/PersonTest.php +++ /dev/null @@ -1,55 +0,0 @@ -addProvider(new Person($faker)); - $faker->seed(1); - - $this->assertEquals('アオタ ミノル', $faker->kanaName('male')); - } - - public function testKanaNameFemaleReturns() - { - $faker = new Generator(); - $faker->addProvider(new Person($faker)); - $faker->seed(1); - - $this->assertEquals('アオタ ミキ', $faker->kanaName('female')); - } - - public function testFirstKanaNameMaleReturns() - { - $faker = new Generator(); - $faker->addProvider(new Person($faker)); - $faker->seed(1); - - $this->assertEquals('ヒデキ', $faker->firstKanaName('male')); - } - - public function testFirstKanaNameFemaleReturns() - { - $faker = new Generator(); - $faker->addProvider(new Person($faker)); - $faker->seed(1); - - $this->assertEquals('マアヤ', $faker->firstKanaName('female')); - } - - public function testLastKanaNameReturnsNakajima() - { - $faker = new Generator(); - $faker->addProvider(new Person($faker)); - $faker->seed(1); - - $this->assertEquals('ナカジマ', $faker->lastKanaName); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ja_JP/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ja_JP/PhoneNumberTest.php deleted file mode 100644 index 158718a7..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ja_JP/PhoneNumberTest.php +++ /dev/null @@ -1,22 +0,0 @@ -addProvider(new PhoneNumber($faker)); - - for ($i = 0; $i < 10; $i++) { - $phoneNumber = $faker->phoneNumber; - $this->assertNotEmpty($phoneNumber); - $this->assertRegExp('/^0\d{1,4}-\d{1,4}-\d{3,4}$/', $phoneNumber); - } - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ka_GE/TextTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ka_GE/TextTest.php deleted file mode 100644 index 0201ceee..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ka_GE/TextTest.php +++ /dev/null @@ -1,57 +0,0 @@ -textClass = new \ReflectionClass('Faker\Provider\el_GR\Text'); - } - - protected function getMethod($name) { - $method = $this->textClass->getMethod($name); - - $method->setAccessible(true); - - return $method; - } - - /** @test */ - function testItShouldAppendEndPunctToTheEndOfString() - { - $this->assertSame( - 'ჭეშმარიტია. ჩვენც ისე.', - $this->getMethod('appendEnd')->invokeArgs(null, array('ჭეშმარიტია. ჩვენც ისე ')) - ); - - $this->assertSame( - 'ჭეშმარიტია. ჩვენც ისე.', - $this->getMethod('appendEnd')->invokeArgs(null, array('ჭეშმარიტია. ჩვენც ისე— ')) - ); - - $this->assertSame( - 'ჭეშმარიტია. ჩვენც ისე.', - $this->getMethod('appendEnd')->invokeArgs(null, array('ჭეშმარიტია. ჩვენც ისე, ')) - ); - - $this->assertSame( - 'ჭეშმარიტია. ჩვენც ისე!.', - $this->getMethod('appendEnd')->invokeArgs(null, array('ჭეშმარიტია. ჩვენც ისე! ')) - ); - - $this->assertSame( - 'ჭეშმარიტია. ჩვენც ისე.', - $this->getMethod('appendEnd')->invokeArgs(null, array('ჭეშმარიტია. ჩვენც ისე; ')) - ); - - $this->assertSame( - 'ჭეშმარიტია. ჩვენც ისე.', - $this->getMethod('appendEnd')->invokeArgs(null, array('ჭეშმარიტია. ჩვენც ისე: ')) - ); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/kk_KZ/CompanyTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/kk_KZ/CompanyTest.php deleted file mode 100644 index b6a3c061..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/kk_KZ/CompanyTest.php +++ /dev/null @@ -1,32 +0,0 @@ -faker = new Generator(); - - $this->faker->addProvider(new Company($this->faker)); - } - - public function testBusinessIdentificationNumberIsValid() - { - $registrationDate = new \DateTime('now'); - $businessIdentificationNumber = $this->faker->businessIdentificationNumber($registrationDate); - $registrationDateAsString = $registrationDate->format('ym'); - - $this->assertRegExp( - "/^(" . $registrationDateAsString . ")([4-6]{1})([0-3]{1})(\\d{6})$/", - $businessIdentificationNumber - ); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/kk_KZ/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/kk_KZ/PersonTest.php deleted file mode 100644 index c5657352..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/kk_KZ/PersonTest.php +++ /dev/null @@ -1,30 +0,0 @@ -faker = new Generator(); - - $this->faker->addProvider(new Person($this->faker)); - } - - public function testIndividualIdentificationNumberIsValid() - { - $birthDate = DateTime::dateTimeBetween('-30 years', '-10 years'); - $individualIdentificationNumber = $this->faker->individualIdentificationNumber($birthDate); - $controlDigit = Person::checkSum($individualIdentificationNumber); - - $this->assertSame($controlDigit, (int)substr($individualIdentificationNumber, 11, 1)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/kk_KZ/TextTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/kk_KZ/TextTest.php deleted file mode 100644 index 2c780506..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/kk_KZ/TextTest.php +++ /dev/null @@ -1,57 +0,0 @@ -textClass = new \ReflectionClass('Faker\Provider\kk_KZ\Text'); - } - - protected function getMethod($name) { - $method = $this->textClass->getMethod($name); - - $method->setAccessible(true); - - return $method; - } - - /** @test */ - function testItShouldAppendEndPunctToTheEndOfString() - { - $this->assertSame( - 'Арыстан баб кесенесі - көне Отырар.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Арыстан баб кесенесі - көне Отырар ')) - ); - - $this->assertSame( - 'Арыстан баб кесенесі - көне Отырар.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Арыстан баб кесенесі - көне Отырар— ')) - ); - - $this->assertSame( - 'Арыстан баб кесенесі - көне Отырар.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Арыстан баб кесенесі - көне Отырар, ')) - ); - - $this->assertSame( - 'Арыстан баб кесенесі - көне Отырар!.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Арыстан баб кесенесі - көне Отырар! ')) - ); - - $this->assertSame( - 'Арыстан баб кесенесі - көне Отырар.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Арыстан баб кесенесі - көне Отырар: ')) - ); - - $this->assertSame( - 'Арыстан баб кесенесі - көне Отырар.', - $this->getMethod('appendEnd')->invokeArgs(null, array('Арыстан баб кесенесі - көне Отырар; ')) - ); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ko_KR/TextTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ko_KR/TextTest.php deleted file mode 100644 index 336acc8a..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ko_KR/TextTest.php +++ /dev/null @@ -1,57 +0,0 @@ -textClass = new \ReflectionClass('Faker\Provider\el_GR\Text'); - } - - protected function getMethod($name) { - $method = $this->textClass->getMethod($name); - - $method->setAccessible(true); - - return $method; - } - - /** @test */ - function testItShouldAppendEndPunctToTheEndOfString() - { - $this->assertSame( - '최석(崔晳)으로부터 최후의 편지가.', - $this->getMethod('appendEnd')->invokeArgs(null, array('최석(崔晳)으로부터 최후의 편지가 ')) - ); - - $this->assertSame( - '최석(崔晳)으로부터 최후의 편지가.', - $this->getMethod('appendEnd')->invokeArgs(null, array('최석(崔晳)으로부터 최후의 편지가—')) - ); - - $this->assertSame( - '최석(崔晳)으로부터 최후의 편지가.', - $this->getMethod('appendEnd')->invokeArgs(null, array('최석(崔晳)으로부터 최후의 편지가,')) - ); - - $this->assertSame( - '최석(崔晳)으로부터 최후의 편지가!.', - $this->getMethod('appendEnd')->invokeArgs(null, array('최석(崔晳)으로부터 최후의 편지가! ')) - ); - - $this->assertSame( - '최석(崔晳)으로부터 최후의 편지가.', - $this->getMethod('appendEnd')->invokeArgs(null, array('최석(崔晳)으로부터 최후의 편지가: ')) - ); - - $this->assertSame( - '최석(崔晳)으로부터 최후의 편지가.', - $this->getMethod('appendEnd')->invokeArgs(null, array('최석(崔晳)으로부터 최후의 편지가; ')) - ); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/mn_MN/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/mn_MN/PersonTest.php deleted file mode 100644 index 232f8f4b..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/mn_MN/PersonTest.php +++ /dev/null @@ -1,28 +0,0 @@ -addProvider(new Person($faker)); - $faker->seed(1); - - $this->assertRegExp('/^[А-Я]{1}\.[\w\W]+$/u', $faker->name); - } - - public function testIdNumber() - { - $faker = new Generator(); - $faker->addProvider(new Person($faker)); - $faker->seed(2); - - $this->assertRegExp('/^[А-Я]{2}\d{8}$/u', $faker->idNumber); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ms_MY/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ms_MY/PersonTest.php deleted file mode 100644 index c35c698d..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ms_MY/PersonTest.php +++ /dev/null @@ -1,50 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - /** - * @link https://en.wikipedia.org/wiki/Malaysian_identity_card#Structure_of_the_National_Registration_Identity_Card_Number_(NRIC) - */ - public function testPersonalIdentityCardNumber() - { - $myKadNumber = $this->faker->myKadNumber; - - $yy = substr($myKadNumber, 0, 2); - //match any year from 00-99 - $this->assertRegExp("/^[0-9]{2}$/", $yy); - - $mm = substr($myKadNumber, 2, 2); - //match any month from 01-12 - $this->assertRegExp("/^0[1-9]|1[0-2]$/", $mm); - - $dd = substr($myKadNumber, 4, 2); - //match any date from 01-31 - $this->assertRegExp("/^0[1-9]|1[0-9]|2[0-9]|3[0-1]$/", $dd); - - $pb = substr($myKadNumber, 6, 2); - //match any valid place of birth code from 01-59 except 17-20 - $this->assertRegExp("/^(0[1-9]|1[0-6])|(2[1-9]|3[0-9]|4[0-9]|5[0-9])$/", $pb); - - $nnnn = substr($myKadNumber, 8, 4); - //match any number from 0000-9999 - $this->assertRegExp("/^[0-9]{4}$/", $nnnn); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/nl_BE/PaymentTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/nl_BE/PaymentTest.php deleted file mode 100644 index e8441033..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/nl_BE/PaymentTest.php +++ /dev/null @@ -1,30 +0,0 @@ -addProvider(new Payment($faker)); - $this->faker = $faker; - } - - public function testVatIsValid() - { - $vat = $this->faker->vat(); - $unspacedVat = $this->faker->vat(false); - $this->assertRegExp('/^(BE 0\d{9})$/', $vat); - $this->assertRegExp('/^(BE0\d{9})$/', $unspacedVat); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/nl_BE/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/nl_BE/PersonTest.php deleted file mode 100644 index 4885cc3d..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/nl_BE/PersonTest.php +++ /dev/null @@ -1,54 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testRrnIsValid() - { - $rrn = $this->faker->rrn(); - - $this->assertEquals(11, strlen($rrn)); - - $ctrlNumber = substr($rrn, 9, 2); - $calcCtrl = 97 - (substr($rrn, 0, 9) % 97); - $altcalcCtrl = 97 - ((2 . substr($rrn, 0, 9)) % 97); - $this->assertContains($ctrlNumber, array($calcCtrl, $altcalcCtrl)); - - $middle = substr($rrn, 6, 3); - $this->assertGreaterThan(1, $middle); - $this->assertLessThan(997, $middle); - } - - public function testRrnIsMale() - { - $rrn = $this->faker->rrn('male'); - $this->assertEquals(substr($rrn, 6, 3) % 2, 1); - } - - public function testRrnIsFemale() - { - $rrn = $this->faker->rrn('female'); - $this->assertEquals(substr($rrn, 6, 3) % 2, 0); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/nl_NL/CompanyTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/nl_NL/CompanyTest.php deleted file mode 100644 index 6d5484ce..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/nl_NL/CompanyTest.php +++ /dev/null @@ -1,35 +0,0 @@ -addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testGenerateValidVatNumber() - { - $vatNo = $this->faker->vat(); - - $this->assertEquals(14, strlen($vatNo)); - $this->assertRegExp('/^NL[0-9]{9}B[0-9]{2}$/', $vatNo); - } - - public function testGenerateValidBtwNumberAlias() - { - $btwNo = $this->faker->btw(); - - $this->assertEquals(14, strlen($btwNo)); - $this->assertRegExp('/^NL[0-9]{9}B[0-9]{2}$/', $btwNo); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/nl_NL/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/nl_NL/PersonTest.php deleted file mode 100644 index c8735f5f..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/nl_NL/PersonTest.php +++ /dev/null @@ -1,33 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testGenerateValidIdNumber() - { - $idNumber = $this->faker->idNumber(); - $this->assertEquals(9, strlen($idNumber)); - - - $sum = -1 * $idNumber % 10; - for ($multiplier = 2; $idNumber > 0; $multiplier++) { - $val = ($idNumber /= 10) % 10; - $sum += $multiplier * $val; - } - $this->assertTrue($sum != 0 && $sum % 11 == 0); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/pl_PL/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/pl_PL/AddressTest.php deleted file mode 100644 index bbfdf4d3..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/pl_PL/AddressTest.php +++ /dev/null @@ -1,32 +0,0 @@ -addProvider(new Address($faker)); - $this->faker = $faker; - } - - /** - * Test the validity of state - */ - public function testState() - { - $state = $this->faker->state(); - $this->assertNotEmpty($state); - $this->assertInternalType('string', $state); - $this->assertRegExp('/[a-z]+/', $state); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/pl_PL/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/pl_PL/PersonTest.php deleted file mode 100644 index e5e0edc1..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/pl_PL/PersonTest.php +++ /dev/null @@ -1,101 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testPeselLenght() - { - $pesel = $this->faker->pesel(); - - $this->assertEquals(11, strlen($pesel)); - } - - public function testPeselDate() - { - $date = new DateTime('1990-01-01'); - $pesel = $this->faker->pesel($date); - - $this->assertEquals('90', substr($pesel, 0, 2)); - $this->assertEquals('01', substr($pesel, 2, 2)); - $this->assertEquals('01', substr($pesel, 4, 2)); - } - - public function testPeselDateWithYearAfter2000() - { - $date = new DateTime('2001-01-01'); - $pesel = $this->faker->pesel($date); - - $this->assertEquals('01', substr($pesel, 0, 2)); - $this->assertEquals('21', substr($pesel, 2, 2)); - $this->assertEquals('01', substr($pesel, 4, 2)); - } - - public function testPeselDateWithYearAfter2100() - { - $date = new DateTime('2101-01-01'); - $pesel = $this->faker->pesel($date); - - $this->assertEquals('01', substr($pesel, 0, 2)); - $this->assertEquals('41', substr($pesel, 2, 2)); - $this->assertEquals('01', substr($pesel, 4, 2)); - } - - public function testPeselDateWithYearAfter2200() - { - $date = new DateTime('2201-01-01'); - $pesel = $this->faker->pesel($date); - - $this->assertEquals('01', substr($pesel, 0, 2)); - $this->assertEquals('61', substr($pesel, 2, 2)); - $this->assertEquals('01', substr($pesel, 4, 2)); - } - - public function testPeselDateWithYearBefore1900() - { - $date = new DateTime('1801-01-01'); - $pesel = $this->faker->pesel($date); - - $this->assertEquals('01', substr($pesel, 0, 2)); - $this->assertEquals('81', substr($pesel, 2, 2)); - $this->assertEquals('01', substr($pesel, 4, 2)); - } - - public function testPeselSex() - { - $male = $this->faker->pesel(null, 'M'); - $female = $this->faker->pesel(null, 'F'); - - $this->assertEquals(1, $male[9] % 2); - $this->assertEquals(0, $female[9] % 2); - } - - public function testPeselCheckSum() - { - $pesel = $this->faker->pesel(); - $weights = array(1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1); - $sum = 0; - - foreach ($weights as $key => $weight) { - $sum += $pesel[$key] * $weight; - } - - $this->assertEquals(0, $sum % 10); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/pt_BR/CompanyTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/pt_BR/CompanyTest.php deleted file mode 100644 index b0feecac..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/pt_BR/CompanyTest.php +++ /dev/null @@ -1,26 +0,0 @@ -addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testCnpjFormatIsValid() - { - $cnpj = $this->faker->cnpj(false); - $this->assertRegExp('/\d{8}\d{4}\d{2}/', $cnpj); - $cnpj = $this->faker->cnpj(true); - $this->assertRegExp('/\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}/', $cnpj); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/pt_BR/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/pt_BR/PersonTest.php deleted file mode 100644 index 0b8318dd..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/pt_BR/PersonTest.php +++ /dev/null @@ -1,34 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testCpfFormatIsValid() - { - $cpf = $this->faker->cpf(false); - $this->assertRegExp('/\d{9}\d{2}/', $cpf); - $cpf = $this->faker->cpf(true); - $this->assertRegExp('/\d{3}\.\d{3}\.\d{3}-\d{2}/', $cpf); - } - - public function testRgFormatIsValid() - { - $rg = $this->faker->rg(false); - $this->assertRegExp('/\d{8}\d/', $rg); - $rg = $this->faker->rg(true); - $this->assertRegExp('/\d{2}\.\d{3}\.\d{3}-[0-9X]/', $rg); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/pt_PT/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/pt_PT/AddressTest.php deleted file mode 100644 index 3783fd52..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/pt_PT/AddressTest.php +++ /dev/null @@ -1,40 +0,0 @@ -addProvider(new Address($faker)); - $this->faker = $faker; - } - - public function testPostCodeIsValid() - { - $main = '[1-9]{1}[0-9]{2}[0,1,4,5,9]{1}'; - $pattern = "/^($main)|($main-[0-9]{3})+$/"; - $postcode = $this->faker->postcode(); - $this->assertSame(preg_match($pattern, $postcode), 1, $postcode); - } - - public function testAddressIsSingleLine() - { - $this->faker->addProvider(new Person($this->faker)); - - $address = $this->faker->address(); - $this->assertFalse(strstr($address, "\n")); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/pt_PT/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/pt_PT/PersonTest.php deleted file mode 100644 index 662f12a7..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/pt_PT/PersonTest.php +++ /dev/null @@ -1,53 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testTaxpayerIdentificationNumberIsValid() - { - $tin = $this->faker->taxpayerIdentificationNumber(); - $this->assertTrue($this->isValidTin($tin), $tin); - } - - /** - * - * @link http://pt.wikipedia.org/wiki/N%C3%BAmero_de_identifica%C3%A7%C3%A3o_fiscal - * - * @param type $tin - * - * @return boolean - */ - public static function isValidTin($tin) - { - $regex = '(([1,2,3,5,6,8]{1}[0-9]{8})|((45)|(70)|(71)|(72)|(77)|(79)|(90|(98|(99))))[0-9]{7})'; - if (is_null($tin) || !is_numeric($tin) || !strlen($tin) == 9 || preg_match("/$regex/", $tin) !== 1) { - return false; - } - $n = str_split($tin); - // cd - Control Digit - $cd = ($n[0] * 9 + $n[1] * 8 + $n[2] * 7 + $n[3] * 6 + $n[4] * 5 + $n[5] * 4 + $n[6] * 3 + $n[7] * 2) % 11; - if ($cd === 0 || $cd === 1) { - $cd = 0; - } else { - $cd = 11 - $cd; - } - if ($cd === intval($n[8])) { - return true; - } - - return false; - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/pt_PT/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/pt_PT/PhoneNumberTest.php deleted file mode 100644 index fd5d3194..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/pt_PT/PhoneNumberTest.php +++ /dev/null @@ -1,26 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testPhoneNumberReturnsPhoneNumberWithOrWithoutPrefix() - { - $this->assertRegExp('/^(9[1,2,3,6][0-9]{7})|(2[0-9]{8})|(\+351 [2][0-9]{8})|(\+351 9[1,2,3,6][0-9]{7})/', $this->faker->phoneNumber()); - } - public function testMobileNumberReturnsMobileNumberWithOrWithoutPrefix() - { - $this->assertRegExp('/^(9[1,2,3,6][0-9]{7})/', $this->faker->mobileNumber()); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ro_RO/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ro_RO/PersonTest.php deleted file mode 100644 index 2c7fadce..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ro_RO/PersonTest.php +++ /dev/null @@ -1,252 +0,0 @@ -addProvider(new DateTime($faker)); - $faker->addProvider(new Person($faker)); - $faker->setDefaultTimezone('Europe/Bucharest'); - $this->faker = $faker; - } - - public function tearDown() - { - $this->faker->setDefaultTimezone(); - } - - public function invalidGenderProvider() - { - return array( - array('elf'), - array('ent'), - array('fmle'), - array('mal'), - ); - } - - public function invalidYearProvider() - { - return array( - array(1652), - array(1799), - array(2100), - array(2252), - ); - } - - public function validYearProvider() - { - return array( - array(null), - array(''), - array(1800), - array(1850), - array(1900), - array(1990), - array(2000), - array(2099), - ); - } - - public function validCountyCodeProvider() - { - return array( - array('AB'), array('AR'), array('AG'), array('B'), array('BC'), array('BH'), array('BN'), array('BT'), - array('BV'), array('BR'), array('BZ'), array('CS'), array('CL'), array('CJ'), array('CT'), array('CV'), - array('DB'), array('DJ'), array('GL'), array('GR'), array('GJ'), array('HR'), array('HD'), array('IL'), - array('IS'), array('IF'), array('MM'), array('MH'), array('MS'), array('NT'), array('OT'), array('PH'), - array('SM'), array('SJ'), array('SB'), array('SV'), array('TR'), array('TM'), array('TL'), array('VS'), - array('VL'), array('VN'), array('B1'), array('B2'), array('B3'), array('B4'), array('B5'), array('B6') - ); - } - - public function invalidCountyCodeProvider() - { - return array( - array('JK'), array('REW'), array('x'), array('FF'), array('aaaddadaada') - ); - } - - public function validInputDataProvider() - { - return array( - array(Person::GENDER_MALE, '1981-06-16','B2', true, '181061642'), - array(Person::GENDER_FEMALE, '1981-06-16','B2', true, '281061642'), - array(Person::GENDER_MALE, '1981-06-16','B2', false, '981061642'), - array(Person::GENDER_FEMALE, '1981-06-16','B2', false, '981061642'), - ); - } - /** - * - */ - public function test_allRandom_returnsValidCnp() - { - $cnp = $this->faker->cnp; - $this->assertTrue( - $this->isValidCnp($cnp), - sprintf("Invalid CNP '%' generated", $cnp) - ); - } - - /** - * - */ - public function test_validGender_returnsValidCnp() - { - $cnp = $this->faker->cnp(Person::GENDER_MALE); - $this->assertTrue( - $this->isValidMaleCnp($cnp), - sprintf("Invalid CNP '%' generated for '%s' gender", $cnp, Person::GENDER_MALE) - ); - - $cnp = $this->faker->cnp(Person::GENDER_FEMALE); - $this->assertTrue( - $this->isValidFemaleCnp($cnp), - sprintf("Invalid CNP '%' generated for '%s' gender", $cnp, Person::GENDER_FEMALE) - ); - } - - /** - * @param string $value - * - * @dataProvider invalidGenderProvider - */ - public function test_invalidGender_throwsException($value) - { - $this->setExpectedException('InvalidArgumentException'); - $this->faker->cnp($value); - } - - /** - * @param string $value year of birth - * - * @dataProvider validYearProvider - */ - public function test_validYear_returnsValidCnp($value) - { - $cnp = $this->faker->cnp(null, $value); - $this->assertTrue( - $this->isValidCnp($cnp), - sprintf("Invalid CNP '%' generated for valid year '%s'", $cnp, $value) - ); - } - - /** - * @param string $value year of birth - * - * @dataProvider invalidYearProvider - */ - public function test_invalidYear_throwsException($value) - { - $this->setExpectedException('InvalidArgumentException'); - $this->faker->cnp(null, $value); - } - - /** - * @param $value - * @dataProvider validCountyCodeProvider - */ - public function test_validCountyCode_returnsValidCnp($value) - { - $cnp = $this->faker->cnp(null, null, $value); - $this->assertTrue( - $this->isValidCnp($cnp), - sprintf("Invalid CNP '%' generated for valid year '%s'", $cnp, $value) - ); - } - - /** - * @param $value - * @dataProvider invalidCountyCodeProvider - */ - public function test_invalidCountyCode_throwsException($value) - { - $this->setExpectedException('InvalidArgumentException'); - $this->faker->cnp(null, null, $value); - } - - /** - * - */ - public function test_nonResident_returnsValidCnp() - { - $cnp = $this->faker->cnp(null, null, null, false); - $this->assertTrue( - $this->isValidCnp($cnp), - sprintf("Invalid CNP '%' generated for non resident", $cnp) - ); - $this->assertStringStartsWith( - '9', - $cnp, - sprintf("Invalid CNP '%' generated for non resident (should start with 9)", $cnp) - ); - } - - /** - * - * @param $gender - * @param $dateOfBirth - * @param $county - * @param $isResident - * @param $expectedCnpStart - * - * @dataProvider validInputDataProvider - */ - public function test_validInputData_returnsValidCnp($gender, $dateOfBirth, $county, $isResident, $expectedCnpStart) - { - $cnp = $this->faker->cnp($gender, $dateOfBirth, $county, $isResident); - $this->assertStringStartsWith( - $expectedCnpStart, - $cnp, - sprintf("Invalid CNP '%' generated for non valid data", $cnp) - ); - } - - - protected function isValidFemaleCnp($value) - { - return $this->isValidCnp($value) && in_array($value[0], array(2, 4, 6, 8, 9)); - } - - protected function isValidMaleCnp($value) - { - return $this->isValidCnp($value) && in_array($value[0], array(1, 3, 5, 7, 9)); - } - - protected function isValidCnp($cnp) - { - if (preg_match(static::TEST_CNP_REGEX, $cnp) !== false) { - $checkNumber = 279146358279; - - $checksum = 0; - foreach (range(0, 11) as $digit) { - $checksum += (int)substr($cnp, $digit, 1) * (int)substr($checkNumber, $digit, 1); - } - $checksum = $checksum % 11; - $checksum = $checksum == 10 ? 1 : $checksum; - - if ($checksum == substr($cnp, -1)) { - return true; - } - } - - return false; - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ro_RO/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ro_RO/PhoneNumberTest.php deleted file mode 100644 index b7965cd8..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ro_RO/PhoneNumberTest.php +++ /dev/null @@ -1,32 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testPhoneNumberReturnsNormalPhoneNumber() - { - $this->assertRegExp('/^0(?:[23][13-7]|7\d)\d{7}$/', $this->faker->phoneNumber()); - } - - public function testTollFreePhoneNumberReturnsTollFreePhoneNumber() - { - $this->assertRegExp('/^08(?:0[01267]|70)\d{6}$/', $this->faker->tollFreePhoneNumber()); - } - - public function testPremiumRatePhoneNumberReturnsPremiumRatePhoneNumber() - { - $this->assertRegExp('/^090[036]\d{6}$/', $this->faker->premiumRatePhoneNumber()); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ru_RU/CompanyTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ru_RU/CompanyTest.php deleted file mode 100644 index 8fbcf265..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ru_RU/CompanyTest.php +++ /dev/null @@ -1,37 +0,0 @@ -addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testINN() - { - $this->assertRegExp('/^[0-9]{10}$/', $this->faker->inn); - $this->assertEquals("77", substr($this->faker->inn("77"), 0, 2)); - $this->assertEquals("02", substr($this->faker->inn(2), 0, 2)); - } - - public function testKPP() - { - $this->assertRegExp('/^[0-9]{9}$/', $this->faker->kpp); - $this->assertEquals("01001", substr($this->faker->kpp, -5, 5)); - $inn = $this->faker->inn; - $this->assertEquals(substr($inn, 0, 4), substr($this->faker->kpp($inn), 0, 4)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/ru_RU/TextTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/ru_RU/TextTest.php deleted file mode 100644 index bbb0eae6..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/ru_RU/TextTest.php +++ /dev/null @@ -1,57 +0,0 @@ -textClass = new \ReflectionClass('Faker\Provider\ru_RU\Text'); - } - - protected function getMethod($name) { - $method = $this->textClass->getMethod($name); - - $method->setAccessible(true); - - return $method; - } - - /** @test */ - function testItShouldAppendEndPunctToTheEndOfString() - { - $this->assertSame( - 'На другой день Чичиков отправился на обед и вечер.', - $this->getMethod('appendEnd')->invokeArgs(null, array('На другой день Чичиков отправился на обед и вечер ')) - ); - - $this->assertSame( - 'На другой день Чичиков отправился на обед и вечер.', - $this->getMethod('appendEnd')->invokeArgs(null, array('На другой день Чичиков отправился на обед и вечер—')) - ); - - $this->assertSame( - 'На другой день Чичиков отправился на обед и вечер.', - $this->getMethod('appendEnd')->invokeArgs(null, array('На другой день Чичиков отправился на обед и вечер,')) - ); - - $this->assertSame( - 'На другой день Чичиков отправился на обед и вечер!.', - $this->getMethod('appendEnd')->invokeArgs(null, array('На другой день Чичиков отправился на обед и вечер! ')) - ); - - $this->assertSame( - 'На другой день Чичиков отправился на обед и вечер.', - $this->getMethod('appendEnd')->invokeArgs(null, array('На другой день Чичиков отправился на обед и вечер; ')) - ); - - $this->assertSame( - 'На другой день Чичиков отправился на обед и вечер.', - $this->getMethod('appendEnd')->invokeArgs(null, array('На другой день Чичиков отправился на обед и вечер: ')) - ); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/sv_SE/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/sv_SE/PersonTest.php deleted file mode 100644 index 584998da..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/sv_SE/PersonTest.php +++ /dev/null @@ -1,61 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function provideSeedAndExpectedReturn() - { - return array( - array(1, '720727', '720727-5798'), - array(2, '710414', '710414-5664'), - array(3, '591012', '591012-4519'), - array(4, '180307', '180307-0356'), - array(5, '820904', '820904-7748') - ); - } - - /** - * @dataProvider provideSeedAndExpectedReturn - */ - public function testPersonalIdentityNumberUsesBirthDateIfProvided($seed, $birthdate, $expected) - { - $faker = $this->faker; - $faker->seed($seed); - $pin = $faker->personalIdentityNumber(\DateTime::createFromFormat('ymd', $birthdate)); - $this->assertEquals($expected, $pin); - } - - public function testPersonalIdentityNumberGeneratesLuhnCompliantNumbers() - { - $pin = str_replace('-', '', $this->faker->personalIdentityNumber()); - $this->assertTrue(Luhn::isValid($pin)); - } - - public function testPersonalIdentityNumberGeneratesOddValuesForMales() - { - $pin = $this->faker->personalIdentityNumber(null, 'male'); - $this->assertEquals(1, $pin{9} % 2); - } - - public function testPersonalIdentityNumberGeneratesEvenValuesForFemales() - { - $pin = $this->faker->personalIdentityNumber(null, 'female'); - $this->assertEquals(0, $pin{9} % 2); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/tr_TR/CompanyTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/tr_TR/CompanyTest.php deleted file mode 100644 index badf905f..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/tr_TR/CompanyTest.php +++ /dev/null @@ -1,28 +0,0 @@ -addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testCompany() - { - $company = $this->faker->companyField; - $this->assertNotNull($company); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/tr_TR/PaymentTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/tr_TR/PaymentTest.php deleted file mode 100644 index 7c8ffdb2..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/tr_TR/PaymentTest.php +++ /dev/null @@ -1,29 +0,0 @@ -addProvider(new Payment($faker)); - $this->faker = $faker; - } - - public function testBankAccountNumber() - { - $accNo = $this->faker->bankAccountNumber; - $this->assertEquals(substr($accNo, 0, 2), 'TR'); - $this->assertEquals(26, strlen($accNo)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/tr_TR/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/tr_TR/PersonTest.php deleted file mode 100644 index ad9db9c7..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/tr_TR/PersonTest.php +++ /dev/null @@ -1,34 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - public function testTCNo() - { - for ($i = 0; $i < 100; $i++) { - $number = $this->faker->tcNo; - - $this->assertEquals(11, strlen($number)); - $this->assertTrue(TCNo::isValid($number)); - } - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/tr_TR/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/tr_TR/PhoneNumberTest.php deleted file mode 100644 index 0971d04b..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/tr_TR/PhoneNumberTest.php +++ /dev/null @@ -1,34 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testPhoneNumber() - { - for ($i = 0; $i < 100; $i++) { - $number = $this->faker->phoneNumber; - $baseNumber = preg_replace('/ *x.*$/', '', $number); // Remove possible extension - $digits = array_values(array_filter(str_split($baseNumber), 'ctype_digit')); - - $this->assertGreaterThan(10, count($digits)); - } - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/uk_UA/AddressTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/uk_UA/AddressTest.php deleted file mode 100644 index 4c4a0612..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/uk_UA/AddressTest.php +++ /dev/null @@ -1,81 +0,0 @@ -addProvider(new Address($faker)); - $this->faker = $faker; - } - - public function testPostCodeIsValid() - { - $main = '[0-9]{5}'; - $pattern = "/^($main)|($main-[0-9]{3})+$/"; - $postcode = $this->faker->postcode; - $this->assertRegExp($pattern, $postcode, 'Post code ' . $postcode . ' is wrong!'); - } - - public function testEmptySuffixes() - { - $this->assertEmpty($this->faker->citySuffix, 'City suffix should be empty!'); - $this->assertEmpty($this->faker->streetSuffix, 'Street suffix should be empty!'); - } - - public function testStreetCyrOnly() - { - $pattern = "/[0-9А-ЩЯІЇЄЮа-щяіїєюьIVXCM][0-9А-ЩЯІЇЄЮа-щяіїєюь \'-.]*[А-Яа-я.]/u"; - $streetName = $this->faker->streetName; - $this->assertSame( - preg_match($pattern, $streetName), - 1, - 'Street name ' . $streetName . ' is wrong!' - ); - } - - public function testCityNameCyrOnly() - { - $pattern = "/[А-ЩЯІЇЄЮа-щяіїєюь][0-9А-ЩЯІЇЄЮа-щяіїєюь \'-]*[А-Яа-я]/u"; - $city = $this->faker->city; - $this->assertSame( - preg_match($pattern, $city), - 1, - 'City name ' . $city . ' is wrong!' - ); - } - - public function testRegionNameCyrOnly() - { - $pattern = "/[А-ЩЯІЇЄЮ][А-ЩЯІЇЄЮа-щяіїєюь]*а$/u"; - $regionName = $this->faker->region; - $this->assertSame( - preg_match($pattern, $regionName), - 1, - 'Region name ' . $regionName . ' is wrong!' - ); - } - - public function testCountryCyrOnly() - { - $pattern = "/[А-ЩЯІЇЄЮа-щяіїєюьIVXCM][А-ЩЯІЇЄЮа-щяіїєюь \'-]*[А-Яа-я.]/u"; - $country = $this->faker->country; - $this->assertSame( - preg_match($pattern, $country), - 1, - 'Country name ' . $country . ' is wrong!' - ); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/uk_UA/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/uk_UA/PersonTest.php deleted file mode 100644 index a8d70f69..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/uk_UA/PersonTest.php +++ /dev/null @@ -1,57 +0,0 @@ -addProvider(new Person($faker)); - $faker->seed(1); - - $this->assertEquals('Максим', $faker->firstNameMale()); - } - - public function testFirstNameFemaleReturns() - { - $faker = new Generator(); - $faker->addProvider(new Person($faker)); - $faker->seed(1); - - $this->assertEquals('Людмила', $faker->firstNameFemale()); - } - - public function testMiddleNameMaleReturns() - { - $faker = new Generator(); - $faker->addProvider(new Person($faker)); - $faker->seed(1); - - $this->assertEquals('Миколайович', $faker->middleNameMale()); - } - - public function testMiddleNameFemaleReturns() - { - $faker = new Generator(); - $faker->addProvider(new Person($faker)); - $faker->seed(1); - - $this->assertEquals('Миколаївна', $faker->middleNameFemale()); - } - - public function testLastNameReturns() - { - $faker = new Generator(); - $faker->addProvider(new Person($faker)); - $faker->seed(1); - - $this->assertEquals('Броваренко', $faker->lastName()); - } - - -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/uk_UA/PhoneNumberTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/uk_UA/PhoneNumberTest.php deleted file mode 100644 index f7f9f14b..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/uk_UA/PhoneNumberTest.php +++ /dev/null @@ -1,36 +0,0 @@ -addProvider(new PhoneNumber($faker)); - $this->faker = $faker; - } - - public function testPhoneNumberFormat() - { - $pattern = "/((\+38)(((\(\d{3}\))\d{7}|(\(\d{4}\))\d{6})|(\d{8})))|0\d{9}/"; - $phoneNumber = $this->faker->phoneNumber; - $this->assertSame( - preg_match($pattern, $phoneNumber), - 1, - 'Phone number format ' . $phoneNumber . ' is wrong!' - ); - - } - -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/zh_TW/CompanyTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/zh_TW/CompanyTest.php deleted file mode 100644 index f2134b9b..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/zh_TW/CompanyTest.php +++ /dev/null @@ -1,27 +0,0 @@ -addProvider(new Company($faker)); - $this->faker = $faker; - } - - public function testVAT() - { - $this->assertEquals(8, floor(log10($this->faker->VAT) + 1)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/zh_TW/PersonTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/zh_TW/PersonTest.php deleted file mode 100644 index 167d0fa0..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/zh_TW/PersonTest.php +++ /dev/null @@ -1,45 +0,0 @@ -addProvider(new Person($faker)); - $this->faker = $faker; - } - - /** - * @see https://zh.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E5%9C%8B%E6%B0%91%E8%BA%AB%E5%88%86%E8%AD%89 - */ - public function testPersonalIdentityNumber() - { - $id = $this->faker->personalIdentityNumber; - - $firstChar = substr($id, 0, 1); - $codesString = Person::$idBirthplaceCode[$firstChar] . substr($id, 1); - - // After transfer the first alphabet word into 2 digit number, there should be totally 11 numbers - $this->assertRegExp("/^[0-9]{11}$/", $codesString); - - $total = 0; - $codesArray = str_split($codesString); - foreach ($codesArray as $key => $code) { - $total += $code * Person::$idDigitValidator[$key]; - } - - // Validate - $this->assertEquals(0, ($total % 10)); - } -} diff --git a/vendor/fzaninotto/faker/test/Faker/Provider/zh_TW/TextTest.php b/vendor/fzaninotto/faker/test/Faker/Provider/zh_TW/TextTest.php deleted file mode 100644 index ab56f83c..00000000 --- a/vendor/fzaninotto/faker/test/Faker/Provider/zh_TW/TextTest.php +++ /dev/null @@ -1,79 +0,0 @@ -textClass = new \ReflectionClass('Faker\Provider\zh_TW\Text'); - } - - protected function getMethod($name) { - $method = $this->textClass->getMethod($name); - - $method->setAccessible(true); - - return $method; - } - - /** @test */ - function testItShouldExplodeTheStringToArray() - { - $this->assertSame( - array('中', '文', '測', '試', '真', '有', '趣'), - $this->getMethod('explode')->invokeArgs(null, array('中文測試真有趣')) - ); - - $this->assertSame( - array('標', '點', ',', '符', '號', '!'), - $this->getMethod('explode')->invokeArgs(null, array('標點,符號!')) - ); - } - - /** @test */ - function testItShouldReturnTheStringLength() - { - $this->assertContains( - $this->getMethod('strlen')->invokeArgs(null, array('中文測試真有趣')), - array(7, 21) - ); - } - - /** @test */ - function testItShouldReturnTheCharacterIsValidStartOrNot() - { - $this->assertTrue($this->getMethod('validStart')->invokeArgs(null, array('中'))); - - $this->assertTrue($this->getMethod('validStart')->invokeArgs(null, array('2'))); - - $this->assertTrue($this->getMethod('validStart')->invokeArgs(null, array('Hello'))); - - $this->assertFalse($this->getMethod('validStart')->invokeArgs(null, array('。'))); - - $this->assertFalse($this->getMethod('validStart')->invokeArgs(null, array('!'))); - } - - /** @test */ - function testItShouldAppendEndPunctToTheEndOfString() - { - $this->assertSame( - '中文測試真有趣。', - $this->getMethod('appendEnd')->invokeArgs(null, array('中文測試真有趣')) - ); - - $this->assertSame( - '中文測試真有趣。', - $this->getMethod('appendEnd')->invokeArgs(null, array('中文測試真有趣,')) - ); - - $this->assertSame( - '中文測試真有趣!', - $this->getMethod('appendEnd')->invokeArgs(null, array('中文測試真有趣!')) - ); - } -} diff --git a/vendor/fzaninotto/faker/test/documentor.php b/vendor/fzaninotto/faker/test/documentor.php deleted file mode 100644 index 1051ea28..00000000 --- a/vendor/fzaninotto/faker/test/documentor.php +++ /dev/null @@ -1,16 +0,0 @@ -seed(1); -$documentor = new Faker\Documentor($generator); -?> -getFormatters() as $provider => $formatters): ?> - -### `` - - $example): ?> - // - - -seed(5); - -echo ''; -?> - - - - -boolean(25)): ?> - - -
- streetAddress ?> - city ?> - postcode ?> - state ?> -
- -boolean(33)): ?> - bs ?> - -boolean(33)): ?> - - - -boolean(15)): ?> -
-text(400) ?> -]]> -
- -
- -
diff --git a/vendor/graham-campbell/bounded-cache/LICENSE b/vendor/graham-campbell/bounded-cache/LICENSE new file mode 100644 index 00000000..a9d0755a --- /dev/null +++ b/vendor/graham-campbell/bounded-cache/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2020 Graham Campbell + +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. diff --git a/vendor/graham-campbell/bounded-cache/composer.json b/vendor/graham-campbell/bounded-cache/composer.json new file mode 100644 index 00000000..d3f9b2af --- /dev/null +++ b/vendor/graham-campbell/bounded-cache/composer.json @@ -0,0 +1,36 @@ +{ + "name": "graham-campbell/bounded-cache", + "description": "A Bounded TTL PSR-16 Cache Implementation", + "keywords": ["psr16", "cache", "bounded cache", "bounded-cache", "Bounded", "Bounded Cache", "Bounded-Cache", "Graham Campbell", "GrahamCampbell"], + "license": "MIT", + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "require": { + "php": "^7.2.5 || ^8.0", + "psr/simple-cache": "^1.0" + }, + "require-dev": { + "graham-campbell/analyzer": "^3.0", + "graham-campbell/testbench-core": "^3.1", + "mockery/mockery": "^1.3.2", + "phpunit/phpunit": "^8.5.8 || ^9.3.7" + }, + "autoload": { + "psr-4": { + "GrahamCampbell\\BoundedCache\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "GrahamCampbell\\Tests\\BoundedCache\\": "tests/" + } + }, + "config": { + "preferred-install": "dist" + } +} diff --git a/vendor/graham-campbell/bounded-cache/src/BoundedCache.php b/vendor/graham-campbell/bounded-cache/src/BoundedCache.php new file mode 100644 index 00000000..3c8eea01 --- /dev/null +++ b/vendor/graham-campbell/bounded-cache/src/BoundedCache.php @@ -0,0 +1,206 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace GrahamCampbell\BoundedCache; + +use Psr\SimpleCache\CacheInterface; + +/** + * This is the bounded cache class. + * + * @author Graham Campbell + */ +final class BoundedCache implements BoundedCacheInterface +{ + /** + * The underlying cache instance. + * + * @var \Psr\SimpleCache\CacheInterface + */ + private $cache; + + /** + * The minimum cache lifetime. + * + * @var int + */ + private $min; + + /** + * The maximum cache lifetime. + * + * @var int + */ + private $max; + + /** + * Create a bounded cache instance. + * + * @param \Psr\SimpleCache\CacheInterface $cache + * @param int $min + * @param int $max + * + * @return void + */ + public function __construct(CacheInterface $cache, int $min, int $max) + { + $this->cache = $cache; + $this->min = $min; + $this->max = $max; + } + + /** + * Get the minimum cache lifetime. + * + * @return int + */ + public function getMinimumLifetime() + { + return $this->min; + } + + /** + * Get the maximum cache lfetime. + * + * @return int + */ + public function getMaximumLifetime() + { + return $this->max; + } + + /** + * Fetches a value from the cache. + * + * @param string $key + * @param mixed $default + * + * @throws \Psr\SimpleCache\InvalidArgumentException + * + * @return mixed + */ + public function get($key, $default = null) + { + return $this->cache->get($key, $default); + } + + /** + * Persists data in the cache, uniquely referenced by a key. + * + * @param string $key + * @param mixed $value + * @param null|int|\DateInterval $ttl + * + * @throws \Psr\SimpleCache\InvalidArgumentException + * + * @return bool + */ + public function set($key, $value, $ttl = null) + { + return $this->cache->set($key, $value, $this->computeTtl($ttl)); + } + + /** + * Delete an item from the cache by its unique key. + * + * @param string $key + * + * @throws \Psr\SimpleCache\InvalidArgumentException + * + * @return bool + */ + public function delete($key) + { + return $this->cache->delete($key); + } + + /** + * Wipes clean the entire cache's keys. + * + * @return bool + */ + public function clear() + { + return $this->cache->clear(); + } + + /** + * Obtains multiple cache items by their unique keys. + * + * @param iterable $keys + * @param mixed $default + * + * @throws \Psr\SimpleCache\InvalidArgumentException + * + * @return iterable + */ + public function getMultiple($keys, $default = null) + { + return $this->cache->getMultiple($keys, $default); + } + + /** + * Persists a set of key => value pairs in the cache. + * + * @param iterable $values + * @param null|int|\DateInterval $ttl + * + * @throws \Psr\SimpleCache\InvalidArgumentException + * + * @return bool + */ + public function setMultiple($values, $ttl = null) + { + return $this->cache->setMultiple($values, $this->computeTtl($ttl)); + } + + /** + * Deletes multiple cache items in a single operation. + * + * @param iterable $keys + * + * @throws \Psr\SimpleCache\InvalidArgumentException + * + * @return bool + */ + public function deleteMultiple($keys) + { + return $this->cache->deleteMultiple($keys); + } + + /** + * Determines whether an item is present in the cache. + * + * @param string $key + * + * @throws \Psr\SimpleCache\InvalidArgumentException + * + * @return bool + */ + public function has($key) + { + return $this->cache->has($key); + } + + /** + * Computes the TTL to use. + * + * @param null|int|\DateInterval $ttl + * + * @return int + */ + private function computeTtl($ttl) + { + return TtlHelper::computeTtl($this->min, $this->max, $ttl); + } +} diff --git a/vendor/graham-campbell/bounded-cache/src/BoundedCacheInterface.php b/vendor/graham-campbell/bounded-cache/src/BoundedCacheInterface.php new file mode 100644 index 00000000..eabdb86f --- /dev/null +++ b/vendor/graham-campbell/bounded-cache/src/BoundedCacheInterface.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace GrahamCampbell\BoundedCache; + +use Psr\SimpleCache\CacheInterface; + +/** + * This is the bounded cache interface. + * + * @author Graham Campbell + */ +interface BoundedCacheInterface extends CacheInterface +{ + /** + * Get the minimum cache lifetime. + * + * @return int + */ + public function getMinimumLifetime(); + + /** + * Get the maximum cache lfetime. + * + * @return int + */ + public function getMaximumLifetime(); +} diff --git a/vendor/graham-campbell/bounded-cache/src/TtlHelper.php b/vendor/graham-campbell/bounded-cache/src/TtlHelper.php new file mode 100644 index 00000000..3d392bd6 --- /dev/null +++ b/vendor/graham-campbell/bounded-cache/src/TtlHelper.php @@ -0,0 +1,57 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace GrahamCampbell\BoundedCache; + +use DateInterval; +use DateTimeImmutable; + +/** + * This is TTL helper. + * + * @author Graham Campbell + */ +final class TtlHelper +{ + /** + * Computes the correct TTL to use. + * + * @param int $min + * @param int $max + * @param null|int|\DateInterval $ttl + * + * @return int + */ + public static function computeTtl(int $min, int $max, $ttl = null) + { + if ($ttl instanceof DateInterval) { + $ttl = self::dateIntervalToSeconds($ttl); + } + + return max($min, min($ttl ?: $min, $max)); + } + + /** + * Convert a date interval to seconds. + * + * @param \DateInterval $ttl + * + * @return int + */ + private static function dateIntervalToSeconds(DateInterval $ttl) + { + $reference = (new DateTimeImmutable())->setTimestamp(0); + + return $reference->add($ttl)->getTimestamp(); + } +} diff --git a/vendor/graham-campbell/cache-plugin/LICENSE b/vendor/graham-campbell/cache-plugin/LICENSE deleted file mode 100644 index c09c5e45..00000000 --- a/vendor/graham-campbell/cache-plugin/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-2019 PHP HTTP Team -Copyright (c) 2018-2019 Graham Campbell - -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. diff --git a/vendor/graham-campbell/cache-plugin/composer.json b/vendor/graham-campbell/cache-plugin/composer.json deleted file mode 100644 index 0aa27d60..00000000 --- a/vendor/graham-campbell/cache-plugin/composer.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "graham-campbell/cache-plugin", - "description": "Provides A Simple HTTP Cache Plugin With Good Defaults", - "keywords": ["http", "cache plugin", "cache-plugin", "Cache", "Cache Plugin", "Cache-Plugin", "Graham Campbell", "GrahamCampbell"], - "license": "MIT", - "authors": [ - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "require": { - "php": "^7.0", - "psr/cache": "^1.0", - "php-http/cache-plugin": "^1.6", - "php-http/client-common": "^1.9|^2.0", - "php-http/message-factory": "^1.0" - }, - "require-dev": { - "graham-campbell/analyzer": "^2.1", - "phpunit/phpunit": "^6.5|^7.0" - }, - "autoload": { - "psr-4": { - "GrahamCampbell\\CachePlugin\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "GrahamCampbell\\Tests\\CachePlugin\\": "tests/" - } - }, - "config": { - "preferred-install": "dist" - }, - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "minimum-stability": "dev", - "prefer-stable": true -} diff --git a/vendor/graham-campbell/cache-plugin/src/CachePlugin.php b/vendor/graham-campbell/cache-plugin/src/CachePlugin.php deleted file mode 100644 index 821634a4..00000000 --- a/vendor/graham-campbell/cache-plugin/src/CachePlugin.php +++ /dev/null @@ -1,241 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace GrahamCampbell\CachePlugin; - -use Exception; -use Http\Client\Common\Plugin; -use Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator; -use Http\Client\Common\Plugin\Cache\Generator\HeaderCacheKeyGenerator; -use Http\Client\Common\Plugin\Exception\RewindStreamException; -use Http\Client\Common\Plugin\VersionBridgePlugin; -use Http\Message\StreamFactory; -use Psr\Cache\CacheItemInterface; -use Psr\Cache\CacheItemPoolInterface; -use Psr\Http\Message\RequestInterface; -use Psr\Http\Message\ResponseInterface; - -/** - * This is the response cache plugin class. - * - * @author Tobias Nyholm - * @author Graham Campbell - */ -class CachePlugin implements Plugin -{ - use VersionBridgePlugin; - - /** - * The cache item pool instance. - * - * @var \Psr\Cache\CacheItemPoolInterface - */ - protected $pool; - - /** - * The steam factory instance. - * - * @var \Http\Message\StreamFactory - */ - protected $streamFactory; - - /** - * The cache key generator instance. - * - * @var \Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator - */ - protected $generator; - - /** - * The cache lifetime in seconds. - * - * @var int - */ - protected $lifetime; - - /** - * Create a new cache plugin. - * - * @param \Psr\Cache\CacheItemPoolInterface $pool - * @param \Http\Message\StreamFactory $streamFactory - * @param \Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator|null $generator - * @param int|null $lifetime - * - * @return void - */ - public function __construct(CacheItemPoolInterface $pool, StreamFactory $streamFactory, CacheKeyGenerator $generator = null, int $lifetime = null) - { - $this->pool = $pool; - $this->streamFactory = $streamFactory; - $this->generator = $generator ?: new HeaderCacheKeyGenerator(['Authorization', 'Cookie', 'Accept', 'Content-type']); - $this->lifetime = $lifetime ?: 3600 * 48; - } - - /** - * Handle the request and return the response coming from the next callable. - * - * @param \Psr\Http\Message\RequestInterface $request - * @param callable $next - * @param callable $first - * - * @return \Http\Promise\Promise - */ - protected function doHandleRequest(RequestInterface $request, callable $next, callable $first) - { - $method = strtoupper($request->getMethod()); - // If the request not is cachable, move to $next - if (!in_array($method, ['GET', 'HEAD'], true)) { - return $next($request); - } - - $cacheItem = $this->createCacheItem($request); - - if ($cacheItem->isHit() && ($etag = $this->getETag($cacheItem))) { - $request = $request->withHeader('If-None-Match', $etag); - } - - return $next($request)->then(function (ResponseInterface $response) use ($cacheItem) { - if (304 === $response->getStatusCode()) { - if (!$cacheItem->isHit()) { - // We do not have the item in cache. This plugin did not - // add If-None-Match headers. Return the response. - return $response; - } - - // The cached response we have is still valid - $cacheItem->set($cacheItem->get())->expiresAfter($this->lifetime); - $this->pool->save($cacheItem); - - return $this->createResponseFromCacheItem($cacheItem); - } - - if ($this->isCacheable($response)) { - $bodyStream = $response->getBody(); - $body = $bodyStream->__toString(); - if ($bodyStream->isSeekable()) { - $bodyStream->rewind(); - } else { - $response = $response->withBody($this->streamFactory->createStream($body)); - } - - $cacheItem - ->expiresAfter($this->lifetime) - ->set([ - 'response' => $response, - 'body' => $body, - 'etag' => $response->getHeader('ETag'), - ]); - $this->pool->save($cacheItem); - } - - return $response; - }); - } - - /** - * Create a cache item for a request. - * - * @param \Psr\Http\Message\RequestInterface $request - * - * @return \Psr\Cache\CacheItemInterface - */ - protected function createCacheItem(RequestInterface $request) - { - $key = sha1($this->generator->generate($request)); - - return $this->pool->getItem($key); - } - - /** - * Verify that we can cache this response. - * - * @param \Psr\Http\Message\ResponseInterface $response - * - * @return bool - */ - protected function isCacheable(ResponseInterface $response) - { - if (!in_array($response->getStatusCode(), [200, 203, 300, 301, 302, 404, 410])) { - return false; - } - - return !$this->getCacheControlDirective($response, 'no-cache'); - } - - /** - * Get the value of a parameter in the cache control header. - * - * @param \Psr\Http\Message\ResponseInterface $response - * @param string $name - * - * @return bool|string - */ - protected function getCacheControlDirective(ResponseInterface $response, string $name) - { - foreach ($response->getHeader('Cache-Control') as $header) { - if (preg_match(sprintf('|%s=?([0-9]+)?|i', $name), $header, $matches)) { - // return the value for $name if it exists - if (isset($matches[1])) { - return $matches[1]; - } - - return true; - } - } - - return false; - } - - /** - * Create a response from a cache item. - * - * @param \Psr\Cache\CacheItemInterface $cacheItem - * - * @return \Psr\Http\Message\ResponseInterface - */ - protected function createResponseFromCacheItem(CacheItemInterface $cacheItem) - { - $data = $cacheItem->get(); - - $response = $data['response']; - $stream = $this->streamFactory->createStream($data['body']); - - try { - $stream->rewind(); - } catch (Exception $e) { - throw new RewindStreamException('Cannot rewind stream.', 0, $e); - } - - $response = $response->withBody($stream); - - return $response; - } - - /** - * Get the ETag from the cached response. - * - * @param \Psr\Cache\CacheItemInterface $cacheItem - * - * @return string|null - */ - protected function getETag(CacheItemInterface $cacheItem) - { - $data = $cacheItem->get(); - - foreach ($data['etag'] as $etag) { - if (!empty($etag)) { - return $etag; - } - } - } -} diff --git a/vendor/graham-campbell/github/LICENSE b/vendor/graham-campbell/github/LICENSE index bf9b4208..98001e68 100644 --- a/vendor/graham-campbell/github/LICENSE +++ b/vendor/graham-campbell/github/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014-2019 Graham Campbell +Copyright (c) 2014-2022 Graham Campbell Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/graham-campbell/github/composer.json b/vendor/graham-campbell/github/composer.json index 95e29490..bdd9eb88 100644 --- a/vendor/graham-campbell/github/composer.json +++ b/vendor/graham-campbell/github/composer.json @@ -1,32 +1,35 @@ { "name": "graham-campbell/github", - "description": "GitHub Is A GitHub Bridge For Laravel 5", + "description": "GitHub Is A GitHub Bridge For Laravel", "keywords": ["laravel", "framework", "github", "php-github-api", "PHP GitHub API", "github bridge", "bridge", "GitHub", "Laravel GitHub", "Laravel-GitHub", "Graham Campbell", "GrahamCampbell"], "license": "MIT", "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.5.*|5.6.*|5.7.*|5.8.*", - "illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*", - "graham-campbell/cache-plugin": "^1.0", - "graham-campbell/manager": "^4.2", - "knplabs/github-api": "2.11.*" + "php": "^7.2.5 || ^8.0", + "graham-campbell/bounded-cache": "^1.1", + "graham-campbell/manager": "^4.7", + "illuminate/contracts": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "illuminate/support": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "knplabs/github-api": "3.5.*", + "symfony/cache": "^4.3 || ^5.0 || ^6.0" }, "require-dev": { - "graham-campbell/analyzer": "^2.1", - "graham-campbell/testbench": "^5.2", - "madewithlove/illuminate-psr-cache-bridge": "^1.0", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.5|^7.0|^8.0", - "php-http/guzzle6-adapter": "^1.0" + "graham-campbell/analyzer": "^3.0", + "graham-campbell/testbench": "^5.7", + "guzzlehttp/guzzle": "^7.4", + "http-interop/http-factory-guzzle": "^1.0", + "lcobucci/jwt": "^3.4 || ^4.0", + "mockery/mockery": "^1.3.1", + "phpunit/phpunit": "^8.5.8 || ^9.3.7" }, "suggest": { - "madewithlove/illuminate-psr-cache-bridge": "Allows caching GitHub HTTP requests" + "lcobucci/jwt": "Allows using the private key authenticator (^3.4 || ^4.0)" }, "autoload": { "psr-4": { @@ -42,9 +45,6 @@ "preferred-install": "dist" }, "extra": { - "branch-alias": { - "dev-master": "7.7-dev" - }, "laravel": { "providers": [ "GrahamCampbell\\GitHub\\GitHubServiceProvider" diff --git a/vendor/graham-campbell/github/config/github.php b/vendor/graham-campbell/github/config/github.php index a903025d..e5488e6e 100644 --- a/vendor/graham-campbell/github/config/github.php +++ b/vendor/graham-campbell/github/config/github.php @@ -5,7 +5,7 @@ declare(strict_types=1); /* * This file is part of Laravel GitHub. * - * (c) Graham Campbell + * (c) Graham Campbell * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -34,15 +34,15 @@ return [ | Here are each of the connections setup for your application. Example | configuration has been included, but you may add as many connections as | you would like. Note that the 5 supported authentication methods are: - | "application", "jwt", "none", "password", and "token". + | "application", "jwt", "none", "private", and "token". | */ 'connections' => [ 'main' => [ - 'token' => 'your-token', 'method' => 'token', + 'token' => 'your-token', // 'backoff' => false, // 'cache' => false, // 'version' => 'v3', @@ -50,9 +50,9 @@ return [ ], 'app' => [ + 'method' => 'application', 'clientId' => 'your-client-id', 'clientSecret' => 'your-client-secret', - 'method' => 'application', // 'backoff' => false, // 'cache' => false, // 'version' => 'v3', @@ -60,18 +60,20 @@ return [ ], 'jwt' => [ - 'token' => 'your-jwt-token', 'method' => 'jwt', + 'token' => 'your-jwt-token', // 'backoff' => false, // 'cache' => false, // 'version' => 'v3', // 'enterprise' => false, ], - 'other' => [ - 'username' => 'your-username', - 'password' => 'your-password', - 'method' => 'password', + 'private' => [ + 'method' => 'private', + 'appId' => 'your-github-app-id', + 'keyPath' => 'your-private-key-path', + // 'key' => 'your-private-key-content', + // 'passphrase' => 'your-private-key-passphrase' // 'backoff' => false, // 'cache' => false, // 'version' => 'v3', @@ -88,4 +90,33 @@ return [ ], + /* + |-------------------------------------------------------------------------- + | HTTP Cache + |-------------------------------------------------------------------------- + | + | Here are each of the cache configurations setup for your application. + | Only the "illuminate" driver is provided out of the box. Example + | configuration has been included. + | + */ + + 'cache' => [ + + 'main' => [ + 'driver' => 'illuminate', + 'connector' => null, // null means use default driver + // 'min' => 43200, + // 'max' => 172800 + ], + + 'bar' => [ + 'driver' => 'illuminate', + 'connector' => 'redis', // config/cache.php + // 'min' => 43200, + // 'max' => 172800 + ], + + ], + ]; diff --git a/vendor/graham-campbell/github/src/Auth/Authenticator/AbstractAuthenticator.php b/vendor/graham-campbell/github/src/Auth/Authenticator/AbstractAuthenticator.php new file mode 100644 index 00000000..9ea2b7d9 --- /dev/null +++ b/vendor/graham-campbell/github/src/Auth/Authenticator/AbstractAuthenticator.php @@ -0,0 +1,45 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace GrahamCampbell\GitHub\Auth\Authenticator; + +use Github\Client; + +/** + * This is the abstract authenticator class. + * + * @author Graham Campbell + */ +abstract class AbstractAuthenticator implements AuthenticatorInterface +{ + /** + * The client to perform the authentication on. + * + * @var \Github\Client|null + */ + protected $client; + + /** + * Set the client to perform the authentication on. + * + * @param \Github\Client $client + * + * @return \GrahamCampbell\GitHub\Auth\Authenticator\AuthenticatorInterface + */ + public function with(Client $client) + { + $this->client = $client; + + return $this; + } +} diff --git a/vendor/graham-campbell/github/src/Auth/Authenticator/ApplicationAuthenticator.php b/vendor/graham-campbell/github/src/Auth/Authenticator/ApplicationAuthenticator.php new file mode 100644 index 00000000..17f14d87 --- /dev/null +++ b/vendor/graham-campbell/github/src/Auth/Authenticator/ApplicationAuthenticator.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace GrahamCampbell\GitHub\Auth\Authenticator; + +use Github\Client; +use InvalidArgumentException; + +/** + * This is the application authenticator class. + * + * @author Graham Campbell + */ +final class ApplicationAuthenticator extends AbstractAuthenticator +{ + /** + * Authenticate the client, and return it. + * + * @param string[] $config + * + * @throws \InvalidArgumentException + * + * @return \Github\Client + */ + public function authenticate(array $config) + { + if (!$this->client) { + throw new InvalidArgumentException('The client instance was not given to the application authenticator.'); + } + + if (!array_key_exists('clientId', $config) || !array_key_exists('clientSecret', $config)) { + throw new InvalidArgumentException('The application authenticator requires a client id and secret.'); + } + + $this->client->authenticate($config['clientId'], $config['clientSecret'], Client::AUTH_CLIENT_ID); + + return $this->client; + } +} diff --git a/vendor/graham-campbell/github/src/Auth/Authenticator/AuthenticatorInterface.php b/vendor/graham-campbell/github/src/Auth/Authenticator/AuthenticatorInterface.php new file mode 100644 index 00000000..cedc61f2 --- /dev/null +++ b/vendor/graham-campbell/github/src/Auth/Authenticator/AuthenticatorInterface.php @@ -0,0 +1,44 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace GrahamCampbell\GitHub\Auth\Authenticator; + +use Github\Client; + +/** + * This is the authenticator interface. + * + * @author Graham Campbell + */ +interface AuthenticatorInterface +{ + /** + * Set the client to perform the authentication on. + * + * @param \Github\Client $client + * + * @return \GrahamCampbell\GitHub\Auth\Authenticator\AuthenticatorInterface + */ + public function with(Client $client); + + /** + * Authenticate the client, and return it. + * + * @param string[] $config + * + * @throws \InvalidArgumentException + * + * @return \Github\Client + */ + public function authenticate(array $config); +} diff --git a/vendor/graham-campbell/github/src/Auth/Authenticator/JwtAuthenticator.php b/vendor/graham-campbell/github/src/Auth/Authenticator/JwtAuthenticator.php new file mode 100644 index 00000000..0be27a2c --- /dev/null +++ b/vendor/graham-campbell/github/src/Auth/Authenticator/JwtAuthenticator.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace GrahamCampbell\GitHub\Auth\Authenticator; + +use Github\Client; +use InvalidArgumentException; + +/** + * This is the jwt authenticator class. + * + * @author Graham Campbell + * @author Lucas Michot + */ +final class JwtAuthenticator extends AbstractAuthenticator +{ + /** + * Authenticate the client, and return it. + * + * @param string[] $config + * + * @throws \InvalidArgumentException + * + * @return \Github\Client + */ + public function authenticate(array $config) + { + if (!$this->client) { + throw new InvalidArgumentException('The client instance was not given to the jwt authenticator.'); + } + + if (!array_key_exists('token', $config)) { + throw new InvalidArgumentException('The jwt authenticator requires a token.'); + } + + $this->client->authenticate($config['token'], Client::AUTH_JWT); + + return $this->client; + } +} diff --git a/vendor/graham-campbell/github/src/Auth/Authenticator/PrivateKeyAuthenticator.php b/vendor/graham-campbell/github/src/Auth/Authenticator/PrivateKeyAuthenticator.php new file mode 100644 index 00000000..2bc63db6 --- /dev/null +++ b/vendor/graham-campbell/github/src/Auth/Authenticator/PrivateKeyAuthenticator.php @@ -0,0 +1,151 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace GrahamCampbell\GitHub\Auth\Authenticator; + +use DateInterval; +use DateTimeImmutable; +use Github\Client; +use InvalidArgumentException; +use Lcobucci\JWT\ClaimsFormatter; +use Lcobucci\JWT\Configuration; +use Lcobucci\JWT\Encoding\ChainedFormatter; +use Lcobucci\JWT\Encoding\UnifyAudience; +use Lcobucci\JWT\Signer\Key\InMemory; +use Lcobucci\JWT\Signer\Key\LocalFileReference; +use Lcobucci\JWT\Signer\Rsa\Sha256; +use Lcobucci\JWT\Token\RegisteredClaims; + +/** + * This is private key github authenticator. + * + * @author Graham Campbell + * @author Pavel Zhytomirsky + */ +final class PrivateKeyAuthenticator extends AbstractAuthenticator +{ + /** + * Build JWT token from provided private key file and authenticate with it. + * + * @param array $config + * + * @throws \Exception + * + * @return \Github\Client + */ + public function authenticate(array $config) + { + if (!$this->client) { + throw new InvalidArgumentException('The client instance was not given to the private key authenticator.'); + } + + if (!array_key_exists('appId', $config)) { + throw new InvalidArgumentException('The private key authenticator requires the application id to be configured.'); + } + + $this->client->authenticate(self::getToken($config)->toString(), Client::AUTH_JWT); + + return $this->client; + } + + /** + * Build JWT token from provided private key file. + * + * @param array $config + * + * @throws \Exception + * + * @return \Lcobucci\JWT\Token + */ + private static function getToken(array $config) + { + $configuration = Configuration::forSymmetricSigner( + new Sha256(), + self::getKey($config) + ); + + $issued = (new DateTimeImmutable()) + ->sub(new DateInterval('PT30S')); + + $expires = $issued + ->add(new DateInterval('PT10M')); + + $builder = self::getBuilder($configuration) + ->expiresAt($expires) + ->issuedAt($issued) + ->issuedBy((string) $config['appId']); + + return $builder->getToken( + $configuration->signer(), + $configuration->signingKey() + ); + } + + /** + * Get the key from the config. + * + * @param array $config + * + * @throws \InvalidArgumentException + * + * @return \Lcobucci\JWT\Signer\Key + */ + private static function getKey(array $config) + { + if ( + !(array_key_exists('key', $config) || array_key_exists('keyPath', $config)) || + (array_key_exists('key', $config) && array_key_exists('keyPath', $config)) + ) { + throw new InvalidArgumentException('The private key authenticator requires the key or key path to be configured.'); + } + + if (array_key_exists('key', $config)) { + return InMemory::plainText($config['key'], $config['passphrase'] ?? ''); + } + + return LocalFileReference::file($config['keyPath'], $config['passphrase'] ?? ''); + } + + /** + * Create a JWT builder. + * + * @param \Lcobucci\JWT\Configuration $configuration + * + * @return \Lcobucci\JWT\Builder + */ + private static function getBuilder(Configuration $configuration) + { + if (!interface_exists(ClaimsFormatter::class)) { + return $configuration->builder(); + } + + $formatter = new class() implements ClaimsFormatter { + public function formatClaims(array $claims): array + { + foreach (RegisteredClaims::DATE_CLAIMS as $claim) { + if (!array_key_exists($claim, $claims)) { + continue; + } + + $claims[$claim] = $claims[$claim]->getTimestamp(); + } + + return $claims; + } + }; + + return $configuration->builder( + new ChainedFormatter(new UnifyAudience(), $formatter) + ); + } +} diff --git a/vendor/graham-campbell/github/src/Auth/Authenticator/TokenAuthenticator.php b/vendor/graham-campbell/github/src/Auth/Authenticator/TokenAuthenticator.php new file mode 100644 index 00000000..077a4283 --- /dev/null +++ b/vendor/graham-campbell/github/src/Auth/Authenticator/TokenAuthenticator.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace GrahamCampbell\GitHub\Auth\Authenticator; + +use Github\Client; +use InvalidArgumentException; + +/** + * This is the token authenticator class. + * + * @author Graham Campbell + */ +final class TokenAuthenticator extends AbstractAuthenticator +{ + /** + * Authenticate the client, and return it. + * + * @param string[] $config + * + * @throws \InvalidArgumentException + * + * @return \Github\Client + */ + public function authenticate(array $config) + { + if (!$this->client) { + throw new InvalidArgumentException('The client instance was not given to the token authenticator.'); + } + + if (!array_key_exists('token', $config)) { + throw new InvalidArgumentException('The token authenticator requires a token.'); + } + + $this->client->authenticate($config['token'], Client::AUTH_ACCESS_TOKEN); + + return $this->client; + } +} diff --git a/vendor/graham-campbell/github/src/Auth/AuthenticatorFactory.php b/vendor/graham-campbell/github/src/Auth/AuthenticatorFactory.php new file mode 100644 index 00000000..d0ab623a --- /dev/null +++ b/vendor/graham-campbell/github/src/Auth/AuthenticatorFactory.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace GrahamCampbell\GitHub\Auth; + +use InvalidArgumentException; + +/** + * This is the authenticator factory class. + * + * @author Graham Campbell + */ +class AuthenticatorFactory +{ + /** + * Make a new authenticator instance. + * + * @param string $method + * + * @throws \InvalidArgumentException + * + * @return \GrahamCampbell\GitHub\Auth\Authenticator\AuthenticatorInterface + */ + public function make(string $method) + { + switch ($method) { + case 'application': + return new Authenticator\ApplicationAuthenticator(); + case 'jwt': + return new Authenticator\JwtAuthenticator(); + case 'private': + return new Authenticator\PrivateKeyAuthenticator(); + case 'token': + return new Authenticator\TokenAuthenticator(); + } + + throw new InvalidArgumentException("Unsupported authentication method [$method]."); + } +} diff --git a/vendor/graham-campbell/github/src/Authenticators/AbstractAuthenticator.php b/vendor/graham-campbell/github/src/Authenticators/AbstractAuthenticator.php deleted file mode 100644 index 99da745e..00000000 --- a/vendor/graham-campbell/github/src/Authenticators/AbstractAuthenticator.php +++ /dev/null @@ -1,45 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace GrahamCampbell\GitHub\Authenticators; - -use Github\Client; - -/** - * This is the abstract authenticator class. - * - * @author Graham Campbell - */ -abstract class AbstractAuthenticator -{ - /** - * The client to perform the authentication on. - * - * @var \Github\Client|null - */ - protected $client; - - /** - * Set the client to perform the authentication on. - * - * @param \Github\Client $client - * - * @return \GrahamCampbell\GitHub\Authenticators\AuthenticatorInterface - */ - public function with(Client $client) - { - $this->client = $client; - - return $this; - } -} diff --git a/vendor/graham-campbell/github/src/Authenticators/ApplicationAuthenticator.php b/vendor/graham-campbell/github/src/Authenticators/ApplicationAuthenticator.php deleted file mode 100644 index b9f995e7..00000000 --- a/vendor/graham-campbell/github/src/Authenticators/ApplicationAuthenticator.php +++ /dev/null @@ -1,49 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace GrahamCampbell\GitHub\Authenticators; - -use GitHub\Client; -use InvalidArgumentException; - -/** - * This is the application authenticator class. - * - * @author Graham Campbell - */ -class ApplicationAuthenticator extends AbstractAuthenticator implements AuthenticatorInterface -{ - /** - * Authenticate the client, and return it. - * - * @param string[] $config - * - * @throws \InvalidArgumentException - * - * @return \Github\Client - */ - public function authenticate(array $config) - { - if (!$this->client) { - throw new InvalidArgumentException('The client instance was not given to the application authenticator.'); - } - - if (!array_key_exists('clientId', $config) || !array_key_exists('clientSecret', $config)) { - throw new InvalidArgumentException('The application authenticator requires a client id and secret.'); - } - - $this->client->authenticate($config['clientId'], $config['clientSecret'], Client::AUTH_URL_CLIENT_ID); - - return $this->client; - } -} diff --git a/vendor/graham-campbell/github/src/Authenticators/AuthenticatorFactory.php b/vendor/graham-campbell/github/src/Authenticators/AuthenticatorFactory.php deleted file mode 100644 index 5991b0d6..00000000 --- a/vendor/graham-campbell/github/src/Authenticators/AuthenticatorFactory.php +++ /dev/null @@ -1,49 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace GrahamCampbell\GitHub\Authenticators; - -use InvalidArgumentException; - -/** - * This is the authenticator factory class. - * - * @author Graham Campbell - */ -class AuthenticatorFactory -{ - /** - * Make a new authenticator instance. - * - * @param string $method - * - * @throws \InvalidArgumentException - * - * @return \GrahamCampbell\GitHub\Authenticators\AuthenticatorInterface - */ - public function make(string $method) - { - switch ($method) { - case 'application': - return new ApplicationAuthenticator(); // AUTH_URL_CLIENT_ID - case 'jwt': - return new JwtAuthenticator(); // AUTH_JWT - case 'password': - return new PasswordAuthenticator(); // AUTH_HTTP_PASSWORD - case 'token': - return new TokenAuthenticator(); // AUTH_HTTP_TOKEN - } - - throw new InvalidArgumentException("Unsupported authentication method [$method]."); - } -} diff --git a/vendor/graham-campbell/github/src/Authenticators/AuthenticatorInterface.php b/vendor/graham-campbell/github/src/Authenticators/AuthenticatorInterface.php deleted file mode 100644 index ac29345c..00000000 --- a/vendor/graham-campbell/github/src/Authenticators/AuthenticatorInterface.php +++ /dev/null @@ -1,44 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace GrahamCampbell\GitHub\Authenticators; - -use Github\Client; - -/** - * This is the authenticator interface. - * - * @author Graham Campbell - */ -interface AuthenticatorInterface -{ - /** - * Set the client to perform the authentication on. - * - * @param \Github\Client $client - * - * @return \GrahamCampbell\GitHub\Authenticators\AuthenticatorInterface - */ - public function with(Client $client); - - /** - * Authenticate the client, and return it. - * - * @param string[] $config - * - * @throws \InvalidArgumentException - * - * @return \Github\Client - */ - public function authenticate(array $config); -} diff --git a/vendor/graham-campbell/github/src/Authenticators/JwtAuthenticator.php b/vendor/graham-campbell/github/src/Authenticators/JwtAuthenticator.php deleted file mode 100644 index eb13a52f..00000000 --- a/vendor/graham-campbell/github/src/Authenticators/JwtAuthenticator.php +++ /dev/null @@ -1,50 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace GrahamCampbell\GitHub\Authenticators; - -use GitHub\Client; -use InvalidArgumentException; - -/** - * This is the jwt authenticator class. - * - * @author Graham Campbell - * @author Lucas Michot - */ -class JwtAuthenticator extends AbstractAuthenticator implements AuthenticatorInterface -{ - /** - * Authenticate the client, and return it. - * - * @param string[] $config - * - * @throws \InvalidArgumentException - * - * @return \Github\Client - */ - public function authenticate(array $config) - { - if (!$this->client) { - throw new InvalidArgumentException('The client instance was not given to the jwt authenticator.'); - } - - if (!array_key_exists('token', $config)) { - throw new InvalidArgumentException('The jwt authenticator requires a token.'); - } - - $this->client->authenticate($config['token'], Client::AUTH_JWT); - - return $this->client; - } -} diff --git a/vendor/graham-campbell/github/src/Authenticators/PasswordAuthenticator.php b/vendor/graham-campbell/github/src/Authenticators/PasswordAuthenticator.php deleted file mode 100644 index 38460f1b..00000000 --- a/vendor/graham-campbell/github/src/Authenticators/PasswordAuthenticator.php +++ /dev/null @@ -1,49 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace GrahamCampbell\GitHub\Authenticators; - -use GitHub\Client; -use InvalidArgumentException; - -/** - * This is the password authenticator class. - * - * @author Graham Campbell - */ -class PasswordAuthenticator extends AbstractAuthenticator implements AuthenticatorInterface -{ - /** - * Authenticate the client, and return it. - * - * @param string[] $config - * - * @throws \InvalidArgumentException - * - * @return \Github\Client - */ - public function authenticate(array $config) - { - if (!$this->client) { - throw new InvalidArgumentException('The client instance was not given to the password authenticator.'); - } - - if (!array_key_exists('username', $config) || !array_key_exists('password', $config)) { - throw new InvalidArgumentException('The password authenticator requires a username and password.'); - } - - $this->client->authenticate($config['username'], $config['password'], Client::AUTH_HTTP_PASSWORD); - - return $this->client; - } -} diff --git a/vendor/graham-campbell/github/src/Authenticators/TokenAuthenticator.php b/vendor/graham-campbell/github/src/Authenticators/TokenAuthenticator.php deleted file mode 100644 index c248adc9..00000000 --- a/vendor/graham-campbell/github/src/Authenticators/TokenAuthenticator.php +++ /dev/null @@ -1,49 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace GrahamCampbell\GitHub\Authenticators; - -use GitHub\Client; -use InvalidArgumentException; - -/** - * This is the token authenticator class. - * - * @author Graham Campbell - */ -class TokenAuthenticator extends AbstractAuthenticator implements AuthenticatorInterface -{ - /** - * Authenticate the client, and return it. - * - * @param string[] $config - * - * @throws \InvalidArgumentException - * - * @return \Github\Client - */ - public function authenticate(array $config) - { - if (!$this->client) { - throw new InvalidArgumentException('The client instance was not given to the token authenticator.'); - } - - if (!array_key_exists('token', $config)) { - throw new InvalidArgumentException('The token authenticator requires a token.'); - } - - $this->client->authenticate($config['token'], Client::AUTH_HTTP_TOKEN); - - return $this->client; - } -} diff --git a/vendor/graham-campbell/github/src/Cache/ConnectionFactory.php b/vendor/graham-campbell/github/src/Cache/ConnectionFactory.php new file mode 100644 index 00000000..f6a9d4e0 --- /dev/null +++ b/vendor/graham-campbell/github/src/Cache/ConnectionFactory.php @@ -0,0 +1,81 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace GrahamCampbell\GitHub\Cache; + +use Illuminate\Contracts\Cache\Factory; +use InvalidArgumentException; + +/** + * This is the cache connection factory class. + * + * @author Graham Campbell + */ +class ConnectionFactory +{ + /** + * The cache factory instance. + * + * @var \Illuminate\Contracts\Cache\Factory|null + */ + protected $cache; + + /** + * Create a new connection factory instance. + * + * @param \Illuminate\Contracts\Cache\Factory|null $cache + * + * @return void + */ + public function __construct(Factory $cache = null) + { + $this->cache = $cache; + } + + /** + * Establish a cache connection. + * + * @param array $config + * + * @throws \InvalidArgumentException + * + * @return \GrahamCampbell\BoundedCache\BoundedCacheInterface + */ + public function make(array $config) + { + return $this->createConnector($config)->connect($config); + } + + /** + * Create a connector instance based on the configuration. + * + * @param array $config + * + * @throws \InvalidArgumentException + * + * @return \GrahamCampbell\Manager\ConnectorInterface + */ + public function createConnector(array $config) + { + if (!isset($config['driver'])) { + throw new InvalidArgumentException('A driver must be specified.'); + } + + switch ($config['driver']) { + case 'illuminate': + return new Connector\IlluminateConnector($this->cache); + } + + throw new InvalidArgumentException("Unsupported driver [{$config['driver']}]."); + } +} diff --git a/vendor/graham-campbell/github/src/Cache/Connector/IlluminateConnector.php b/vendor/graham-campbell/github/src/Cache/Connector/IlluminateConnector.php new file mode 100644 index 00000000..de496fae --- /dev/null +++ b/vendor/graham-campbell/github/src/Cache/Connector/IlluminateConnector.php @@ -0,0 +1,114 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace GrahamCampbell\GitHub\Cache\Connector; + +use GrahamCampbell\BoundedCache\BoundedCache; +use GrahamCampbell\Manager\ConnectorInterface; +use Illuminate\Contracts\Cache\Factory; +use Illuminate\Contracts\Cache\Repository; +use Illuminate\Support\Arr; +use InvalidArgumentException; + +/** + * This is the illuminate connector class. + * + * @author Graham Campbell + */ +final class IlluminateConnector implements ConnectorInterface +{ + /** + * The minimum cache lifetime of 12 hours. + * + * @var int + */ + private const MIN_CACHE_LIFETIME = 43200; + + /** + * The maximum cache lifetime of 48 hours. + * + * @var int + */ + private const MAX_CACHE_LIFETIME = 172800; + + /** + * The cache factory instance. + * + * @var \Illuminate\Contracts\Cache\Factory|null + */ + private $cache; + + /** + * Create a new illuminate connector instance. + * + * @param \Illuminate\Contracts\Cache\Factory|null $cache + * + * @return void + */ + public function __construct(Factory $cache = null) + { + $this->cache = $cache; + } + + /** + * Establish a cache connection. + * + * @param array $config + * + * @throws \InvalidArgumentException + * + * @return \GrahamCampbell\BoundedCache\BoundedCacheInterface + */ + public function connect(array $config) + { + $repository = $this->getRepository($config); + + return self::getBoundedCache($repository, $config); + } + + /** + * Get the cache repository. + * + * @param array $config + * + * @throws \InvalidArgumentException + * + * @return \Illuminate\Contracts\Cache\Repository + */ + private function getRepository(array $config) + { + if (!$this->cache) { + throw new InvalidArgumentException('Illuminate caching support not available.'); + } + + $name = Arr::get($config, 'connector'); + + return $this->cache->store($name); + } + + /** + * Get the bounded cache instance. + * + * @param \Illuminate\Contracts\Cache\Repository $repository + * @param array $config + * + * @return \GrahamCampbell\BoundedCache\BoundedCacheInterface + */ + private static function getBoundedCache(Repository $repository, array $config) + { + $min = Arr::get($config, 'min', self::MIN_CACHE_LIFETIME); + $max = Arr::get($config, 'max', self::MAX_CACHE_LIFETIME); + + return new BoundedCache($repository, $min, $max); + } +} diff --git a/vendor/graham-campbell/github/src/Facades/GitHub.php b/vendor/graham-campbell/github/src/Facades/GitHub.php index 2f2b2763..30c025e5 100644 --- a/vendor/graham-campbell/github/src/Facades/GitHub.php +++ b/vendor/graham-campbell/github/src/Facades/GitHub.php @@ -5,7 +5,7 @@ declare(strict_types=1); /* * This file is part of Laravel GitHub. * - * (c) Graham Campbell + * (c) Graham Campbell * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -18,7 +18,7 @@ use Illuminate\Support\Facades\Facade; /** * This is the github facade class. * - * @author Graham Campbell + * @author Graham Campbell */ class GitHub extends Facade { diff --git a/vendor/graham-campbell/github/src/GitHubFactory.php b/vendor/graham-campbell/github/src/GitHubFactory.php index e9ab9342..f2e58160 100644 --- a/vendor/graham-campbell/github/src/GitHubFactory.php +++ b/vendor/graham-campbell/github/src/GitHubFactory.php @@ -5,7 +5,7 @@ declare(strict_types=1); /* * This file is part of Laravel GitHub. * - * (c) Graham Campbell + * (c) Graham Campbell * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -14,43 +14,44 @@ declare(strict_types=1); namespace GrahamCampbell\GitHub; use Github\Client; -use GrahamCampbell\GitHub\Authenticators\AuthenticatorFactory; -use GrahamCampbell\GitHub\Http\ClientBuilder; +use Github\HttpClient\Builder; +use GrahamCampbell\GitHub\Auth\AuthenticatorFactory; +use GrahamCampbell\GitHub\Cache\ConnectionFactory; use Http\Client\Common\Plugin\RetryPlugin; -use Illuminate\Contracts\Cache\Factory; +use Illuminate\Support\Arr; use InvalidArgumentException; -use Madewithlove\IlluminatePsrCacheBridge\Laravel\CacheItemPool; +use Symfony\Component\Cache\Adapter\Psr16Adapter; /** * This is the github factory class. * - * @author Graham Campbell + * @author Graham Campbell */ class GitHubFactory { /** * The authenticator factory instance. * - * @var \GrahamCampbell\GitHub\Authenticators\AuthenticatorFactory + * @var \GrahamCampbell\GitHub\Auth\AuthenticatorFactory */ protected $auth; /** - * The illuminate cache instance. + * The cache factory instance. * - * @var \Illuminate\Contracts\Cache\Factory|null + * @var \GrahamCampbell\GitHub\Cache\ConnectionFactory */ protected $cache; /** * Create a new github factory instance. * - * @param \GrahamCampbell\GitHub\Authenticators\AuthenticatorFactory $auth - * @param \Illuminate\Contracts\Cache\Factory|null $cache + * @param \GrahamCampbell\GitHub\Auth\AuthenticatorFactory $auth + * @param \GrahamCampbell\GitHub\Cache\ConnectionFactory $cache * * @return void */ - public function __construct(AuthenticatorFactory $auth, Factory $cache = null) + public function __construct(AuthenticatorFactory $auth, ConnectionFactory $cache) { $this->auth = $auth; $this->cache = $cache; @@ -67,7 +68,7 @@ class GitHubFactory */ public function make(array $config) { - $client = new Client($this->getBuilder($config), array_get($config, 'version'), array_get($config, 'enterprise')); + $client = new Client($this->getBuilder($config), Arr::get($config, 'version'), Arr::get($config, 'enterprise')); if (!array_key_exists('method', $config)) { throw new InvalidArgumentException('The github factory requires an auth method.'); @@ -85,18 +86,23 @@ class GitHubFactory * * @param string[] $config * - * @return \GrahamCampbell\GitHub\Http\ClientBuilder + * @return \Github\HttpClient\Builder */ protected function getBuilder(array $config) { - $builder = new ClientBuilder(); + $builder = new Builder(); - if ($backoff = array_get($config, 'backoff')) { + if ($backoff = Arr::get($config, 'backoff')) { $builder->addPlugin(new RetryPlugin(['retries' => $backoff === true ? 2 : $backoff])); } - if ($this->cache && class_exists(CacheItemPool::class) && $cache = array_get($config, 'cache')) { - $builder->addCache(new CacheItemPool($this->cache->store($cache === true ? null : $cache))); + if (is_array($cache = Arr::get($config, 'cache', false))) { + $boundedCache = $this->cache->make($cache); + + $builder->addCache( + new Psr16Adapter($boundedCache), + ['cache_lifetime' => $boundedCache->getMaximumLifetime()] + ); } return $builder; diff --git a/vendor/graham-campbell/github/src/GitHubManager.php b/vendor/graham-campbell/github/src/GitHubManager.php index e030b795..4bf49d89 100644 --- a/vendor/graham-campbell/github/src/GitHubManager.php +++ b/vendor/graham-campbell/github/src/GitHubManager.php @@ -5,7 +5,7 @@ declare(strict_types=1); /* * This file is part of Laravel GitHub. * - * (c) Graham Campbell + * (c) Graham Campbell * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -15,61 +15,67 @@ namespace GrahamCampbell\GitHub; use GrahamCampbell\Manager\AbstractManager; use Illuminate\Contracts\Config\Repository; +use Illuminate\Support\Arr; /** * This is the github manager class. * - * @method \Github\Api\CurrentUser currentUser() - * @method \Github\Api\CurrentUser me() - * @method \Github\Api\Enterprise ent() - * @method \Github\Api\Enterprise enterprise() - * @method \Github\Api\Miscellaneous\CodeOfConduct codeOfConduct() - * @method \Github\Api\Miscellaneous\Emojis emojis() - * @method \Github\Api\GitData git() - * @method \Github\Api\GitData gitData() - * @method \Github\Api\Gists gist() - * @method \Github\Api\Gists gists() - * @method \Github\Api\Miscellaneous\Gitignore gitignore() - * @method \Github\Api\Integrations integration() (deprecated) - * @method \Github\Api\Integrations integrations() (deprecated) - * @method \Github\Api\Apps apps() - * @method \Github\Api\Issue issue() - * @method \Github\Api\Issue issues() - * @method \Github\Api\Markdown markdown() - * @method \Github\Api\Notification notification() - * @method \Github\Api\Notification notifications() - * @method \Github\Api\Organization organization() - * @method \Github\Api\Organization organizations() - * @method \Github\Api\Organization\Projects orgProject() - * @method \Github\Api\Organization\Projects orgProjects() - * @method \Github\Api\Organization\Projects organizationProject() - * @method \Github\Api\Organization\Projects organizationProjects() - * @method \Github\Api\PullRequest pr() - * @method \Github\Api\PullRequest pullRequest() - * @method \Github\Api\PullRequest pullRequests() - * @method \Github\Api\RateLimit rateLimit() - * @method \Github\Api\Repo repo() - * @method \Github\Api\Repo repos() - * @method \Github\Api\Repo repository() - * @method \Github\Api\Repo repositories() - * @method \Github\Api\Search search() - * @method \Github\Api\Organization team() - * @method \Github\Api\Organization teams() - * @method \Github\Api\User user() - * @method \Github\Api\User users() - * @method \Github\Api\Authorizations authorization() - * @method \Github\Api\Authorizations authorizations() - * @method \Github\Api\Meta meta() - * @method \Github\Api\GraphQL graphql() - * @method \Github\Api\ApiInterface api(string $name) - * @method void authenticate(string $tokenOrLogin, string|null $password = null, string|null $authMethod = null) - * @method string getApiVersion() - * @method void addCache(\Psr\Cache\CacheItemPoolInterface $cachePool, array $config = []) - * @method void removeCache() - * @method \Http\Client\Common\HttpMethodsClient getHttpClient() - * @method \Psr\Http\Message\ResponseInterface|null getLastResponse() + * @method \Github\Client connection(string|null $name = null) + * @method \Github\Client reconnect(string|null $name = null) + * @method void disconnect(string|null $name = null) + * @method array getConnections() + * @method \Github\Api\CurrentUser currentUser() + * @method \Github\Api\CurrentUser me() + * @method \Github\Api\Enterprise ent() + * @method \Github\Api\Enterprise enterprise() + * @method \Github\Api\Miscellaneous\CodeOfConduct codeOfConduct() + * @method \Github\Api\Miscellaneous\Emojis emojis() + * @method \Github\Api\Miscellaneous\Licenses licenses() + * @method \Github\Api\GitData git() + * @method \Github\Api\GitData gitData() + * @method \Github\Api\Gists gist() + * @method \Github\Api\Gists gists() + * @method \Github\Api\Miscellaneous\Gitignore gitignore() + * @method \Github\Api\Apps apps() + * @method \Github\Api\Issue issue() + * @method \Github\Api\Issue issues() + * @method \Github\Api\Markdown markdown() + * @method \Github\Api\Notification notification() + * @method \Github\Api\Notification notifications() + * @method \Github\Api\Organization organization() + * @method \Github\Api\Organization organizations() + * @method \Github\Api\Organization\Projects orgProject() + * @method \Github\Api\Organization\Projects orgProjects() + * @method \Github\Api\Organization\Projects organizationProject() + * @method \Github\Api\Organization\Projects organizationProjects() + * @method \Github\Api\Organization\OutsideCollaborators outsideCollaborators() + * @method \Github\Api\PullRequest pr() + * @method \Github\Api\PullRequest pullRequest() + * @method \Github\Api\PullRequest pullRequests() + * @method \Github\Api\RateLimit rateLimit() + * @method \Github\Api\Repo repo() + * @method \Github\Api\Repo repos() + * @method \Github\Api\Repo repository() + * @method \Github\Api\Repo repositories() + * @method \Github\Api\Search search() + * @method \Github\Api\Organization\Teams team() + * @method \Github\Api\Organization\Teams teams() + * @method \Github\Api\User user() + * @method \Github\Api\User users() + * @method \Github\Api\Authorizations authorization() + * @method \Github\Api\Authorizations authorizations() + * @method \Github\Api\Meta meta() + * @method \Github\Api\GraphQL graphql() + * @method \Github\Api\AbstractApi api(string $name) + * @method void authenticate(string $tokenOrLogin, string|null $password = null, string|null $authMethod = null) + * @method void setEnterpriseUrl(string $enterpriseUrl) + * @method string getApiVersion() + * @method void addCache(\Psr\Cache\CacheItemPoolInterface $cachePool, array $config = []) + * @method void removeCache() + * @method \Psr\Http\Message\ResponseInterface|null getLastResponse() + * @method \Http\Client\Common\HttpMethodsClientInterface getHttpClient() * - * @author Graham Campbell + * @author Graham Campbell */ class GitHubManager extends AbstractManager { @@ -116,6 +122,26 @@ class GitHubManager extends AbstractManager return 'github'; } + /** + * Get the configuration for a connection. + * + * @param string|null $name + * + * @throws \InvalidArgumentException + * + * @return array + */ + public function getConnectionConfig(string $name = null) + { + $config = parent::getConnectionConfig($name); + + if (is_string($cache = Arr::get($config, 'cache'))) { + $config['cache'] = $this->getNamedConfig('cache', 'Cache', $cache); + } + + return $config; + } + /** * Get the factory instance. * diff --git a/vendor/graham-campbell/github/src/GitHubServiceProvider.php b/vendor/graham-campbell/github/src/GitHubServiceProvider.php index ca464da2..2d493043 100644 --- a/vendor/graham-campbell/github/src/GitHubServiceProvider.php +++ b/vendor/graham-campbell/github/src/GitHubServiceProvider.php @@ -5,7 +5,7 @@ declare(strict_types=1); /* * This file is part of Laravel GitHub. * - * (c) Graham Campbell + * (c) Graham Campbell * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -14,7 +14,8 @@ declare(strict_types=1); namespace GrahamCampbell\GitHub; use Github\Client; -use GrahamCampbell\GitHub\Authenticators\AuthenticatorFactory; +use GrahamCampbell\GitHub\Auth\AuthenticatorFactory; +use GrahamCampbell\GitHub\Cache\ConnectionFactory; use Illuminate\Contracts\Container\Container; use Illuminate\Foundation\Application as LaravelApplication; use Illuminate\Support\ServiceProvider; @@ -23,7 +24,7 @@ use Laravel\Lumen\Application as LumenApplication; /** * This is the github service provider class. * - * @author Graham Campbell + * @author Graham Campbell */ class GitHubServiceProvider extends ServiceProvider { @@ -63,6 +64,7 @@ class GitHubServiceProvider extends ServiceProvider public function register() { $this->registerAuthFactory(); + $this->registerCacheFactory(); $this->registerGitHubFactory(); $this->registerManager(); $this->registerBindings(); @@ -82,6 +84,22 @@ class GitHubServiceProvider extends ServiceProvider $this->app->alias('github.authfactory', AuthenticatorFactory::class); } + /** + * Register the cache factory class. + * + * @return void + */ + protected function registerCacheFactory() + { + $this->app->singleton('github.cachefactory', function (Container $app) { + $cache = $app->bound('cache') ? $app->make('cache') : null; + + return new ConnectionFactory($cache); + }); + + $this->app->alias('github.cachefactory', ConnectionFactory::class); + } + /** * Register the github factory class. * @@ -91,7 +109,7 @@ class GitHubServiceProvider extends ServiceProvider { $this->app->singleton('github.factory', function (Container $app) { $auth = $app['github.authfactory']; - $cache = $app['cache']; + $cache = $app['github.cachefactory']; return new GitHubFactory($auth, $cache); }); @@ -141,6 +159,7 @@ class GitHubServiceProvider extends ServiceProvider { return [ 'github.authfactory', + 'github.cachefactory', 'github.factory', 'github', 'github.connection', diff --git a/vendor/graham-campbell/github/src/Http/ClientBuilder.php b/vendor/graham-campbell/github/src/Http/ClientBuilder.php deleted file mode 100644 index b739ad26..00000000 --- a/vendor/graham-campbell/github/src/Http/ClientBuilder.php +++ /dev/null @@ -1,100 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace GrahamCampbell\GitHub\Http; - -use Github\HttpClient\Builder; -use GrahamCampbell\CachePlugin\CachePlugin; -use Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator; -use Psr\Cache\CacheItemPoolInterface; -use ReflectionClass; - -/** - * This is the client builder class. - * - * @author Graham Campbell - */ -class ClientBuilder extends Builder -{ - /** - * Add a cache plugin to cache responses locally. - * - * @param \Psr\Cache\CacheItemPoolInterface $cachePool - * @param array $config - * - * @return void - */ - public function addCache(CacheItemPoolInterface $cachePool, array $config = []) - { - $this->setCachePlugin($cachePool, $config['generator'] ?? null, $config['lifetime'] ?? null); - - $this->setPropertyValue('httpClientModified', true); - } - - /** - * Add a cache plugin to cache responses locally. - * - * @param \Psr\Cache\CacheItemPoolInterface $cachePool - * @param \Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator|null $generator - * @param int|null $lifetime - * - * @return void - */ - protected function setCachePlugin(CacheItemPoolInterface $cachePool, CacheKeyGenerator $generator = null, int $lifetime = null) - { - $stream = $this->getPropertyValue('streamFactory'); - - $this->setPropertyValue('cachePlugin', new CachePlugin($cachePool, $stream, $generator, $lifetime)); - } - - /** - * Get the value of the given private property on the builder. - * - * @param string $name - * - * @return mixed - */ - protected function getPropertyValue(string $name) - { - return static::getProperty($name)->getValue($this); - } - - /** - * Set the value of the given private property on the builder. - * - * @param string $name - * @param mixed $value - * - * @return void - */ - protected function setPropertyValue(string $name, $value) - { - return static::getProperty($name)->setValue($this, $value); - } - - /** - * Get the builder reflection property for the given name. - * - * @param string $name - * - * @return \ReflectionProperty - */ - protected static function getProperty(string $name) - { - $prop = (new ReflectionClass(Builder::class))->getProperty($name); - - $prop->setAccessible(true); - - return $prop; - } -} diff --git a/vendor/graham-campbell/manager/LICENSE b/vendor/graham-campbell/manager/LICENSE index bf9b4208..98001e68 100644 --- a/vendor/graham-campbell/manager/LICENSE +++ b/vendor/graham-campbell/manager/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014-2019 Graham Campbell +Copyright (c) 2014-2022 Graham Campbell Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/graham-campbell/manager/composer.json b/vendor/graham-campbell/manager/composer.json index 0fa699bd..18c9795a 100644 --- a/vendor/graham-campbell/manager/composer.json +++ b/vendor/graham-campbell/manager/composer.json @@ -1,24 +1,25 @@ { "name": "graham-campbell/manager", - "description": "Manager Provides Some Manager Functionality For Laravel 5", + "description": "Manager Provides Some Manager Functionality For Laravel", "keywords": ["laravel", "framework", "manager", "connector", "interface", "Manager", "Laravel Manager", "Laravel-Manager", "Graham Campbell", "GrahamCampbell"], "license": "MIT", "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.5.*|5.6.*|5.7.*|5.8.*", - "illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*" + "php": "^7.1.3 || ^8.0", + "illuminate/contracts": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0", + "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "require-dev": { - "graham-campbell/analyzer": "^2.1", - "graham-campbell/testbench-core": "^3.0", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.5|^7.0|^8.0" + "graham-campbell/analyzer": "^2.4 || ^3.0", + "graham-campbell/testbench-core": "^3.4", + "mockery/mockery": "^1.3.1", + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.7" }, "autoload": { "psr-4": { @@ -33,11 +34,6 @@ "config": { "preferred-install": "dist" }, - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, "minimum-stability": "dev", "prefer-stable": true } diff --git a/vendor/graham-campbell/manager/src/AbstractManager.php b/vendor/graham-campbell/manager/src/AbstractManager.php index b05e857b..f16a132b 100644 --- a/vendor/graham-campbell/manager/src/AbstractManager.php +++ b/vendor/graham-campbell/manager/src/AbstractManager.php @@ -5,7 +5,7 @@ declare(strict_types=1); /* * This file is part of Laravel Manager. * - * (c) Graham Campbell + * (c) Graham Campbell * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -15,12 +15,13 @@ namespace GrahamCampbell\Manager; use Closure; use Illuminate\Contracts\Config\Repository; +use Illuminate\Support\Arr; use InvalidArgumentException; /** * This is the abstract manager class. * - * @author Graham Campbell + * @author Graham Campbell */ abstract class AbstractManager implements ManagerInterface { @@ -34,14 +35,14 @@ abstract class AbstractManager implements ManagerInterface /** * The active connection instances. * - * @var object[] + * @var array */ protected $connections = []; /** * The custom connection resolvers. * - * @var callable[] + * @var array */ protected $extensions = []; @@ -62,6 +63,8 @@ abstract class AbstractManager implements ManagerInterface * * @param string|null $name * + * @throws \InvalidArgumentException + * * @return object */ public function connection(string $name = null) @@ -80,6 +83,8 @@ abstract class AbstractManager implements ManagerInterface * * @param string|null $name * + * @throws \InvalidArgumentException + * * @return object */ public function reconnect(string $name = null) @@ -110,6 +115,8 @@ abstract class AbstractManager implements ManagerInterface * * @param array $config * + * @throws \InvalidArgumentException + * * @return object */ abstract protected function createConnection(array $config); @@ -119,6 +126,8 @@ abstract class AbstractManager implements ManagerInterface * * @param string $name * + * @throws \InvalidArgumentException + * * @return object */ protected function makeConnection(string $name) @@ -129,7 +138,7 @@ abstract class AbstractManager implements ManagerInterface return $this->extensions[$name]($config); } - if ($driver = array_get($config, 'driver')) { + if ($driver = Arr::get($config, 'driver')) { if (isset($this->extensions[$driver])) { return $this->extensions[$driver]($config); } @@ -158,10 +167,26 @@ abstract class AbstractManager implements ManagerInterface { $name = $name ?: $this->getDefaultConnection(); - $connections = $this->config->get($this->getConfigName().'.connections'); + return $this->getNamedConfig('connections', 'Connection', $name); + } - if (!is_array($config = array_get($connections, $name)) && !$config) { - throw new InvalidArgumentException("Connection [$name] not configured."); + /** + * Get the given named configuration. + * + * @param string $type + * @param string $desc + * @param string $name + * + * @throws \InvalidArgumentException + * + * @return array + */ + protected function getNamedConfig(string $type, string $desc, string $name) + { + $data = $this->config->get($this->getConfigName().'.'.$type); + + if (!is_array($config = Arr::get($data, $name)) && !$config) { + throw new InvalidArgumentException("$desc [$name] not configured."); } $config['name'] = $name; @@ -211,7 +236,7 @@ abstract class AbstractManager implements ManagerInterface /** * Return all of the created connections. * - * @return object[] + * @return array */ public function getConnections() { diff --git a/vendor/graham-campbell/manager/src/ConnectorInterface.php b/vendor/graham-campbell/manager/src/ConnectorInterface.php index 82c1625a..2e6a0c45 100644 --- a/vendor/graham-campbell/manager/src/ConnectorInterface.php +++ b/vendor/graham-campbell/manager/src/ConnectorInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /* * This file is part of Laravel Manager. * - * (c) Graham Campbell + * (c) Graham Campbell * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -16,7 +16,7 @@ namespace GrahamCampbell\Manager; /** * This is the connector interface. * - * @author Graham Campbell + * @author Graham Campbell */ interface ConnectorInterface { @@ -25,6 +25,8 @@ interface ConnectorInterface * * @param array $config * + * @throws \InvalidArgumentException + * * @return object */ public function connect(array $config); diff --git a/vendor/graham-campbell/manager/src/ManagerInterface.php b/vendor/graham-campbell/manager/src/ManagerInterface.php index e4de03a6..373e8321 100644 --- a/vendor/graham-campbell/manager/src/ManagerInterface.php +++ b/vendor/graham-campbell/manager/src/ManagerInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); /* * This file is part of Laravel Manager. * - * (c) Graham Campbell + * (c) Graham Campbell * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -16,7 +16,7 @@ namespace GrahamCampbell\Manager; /** * This is the manager interface. * - * @author Graham Campbell + * @author Graham Campbell */ interface ManagerInterface { @@ -25,6 +25,8 @@ interface ManagerInterface * * @param string|null $name * + * @throws \InvalidArgumentException + * * @return object */ public function connection(string $name = null); @@ -34,6 +36,8 @@ interface ManagerInterface * * @param string|null $name * + * @throws \InvalidArgumentException + * * @return object */ public function reconnect(string $name = null); @@ -52,6 +56,8 @@ interface ManagerInterface * * @param string|null $name * + * @throws \InvalidArgumentException + * * @return array */ public function getConnectionConfig(string $name = null); @@ -85,7 +91,7 @@ interface ManagerInterface /** * Return all of the created connections. * - * @return object[] + * @return array */ public function getConnections(); } diff --git a/vendor/guzzlehttp/guzzle/CHANGELOG.md b/vendor/guzzlehttp/guzzle/CHANGELOG.md index 17badd75..b278efca 100644 --- a/vendor/guzzlehttp/guzzle/CHANGELOG.md +++ b/vendor/guzzlehttp/guzzle/CHANGELOG.md @@ -1,5 +1,210 @@ # Change Log +Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version. + +## 7.4.1 - 2021-12-06 + +### Changed + +- Replaced implicit URI to string coercion [#2946](https://github.com/guzzle/guzzle/pull/2946) +- Allow `symfony/deprecation-contracts` version 3 [#2961](https://github.com/guzzle/guzzle/pull/2961) + +### Fixed + +- Only close curl handle if it's done [#2950](https://github.com/guzzle/guzzle/pull/2950) + +## 7.4.0 - 2021-10-18 + +### Added + +- Support PHP 8.1 [#2929](https://github.com/guzzle/guzzle/pull/2929), [#2939](https://github.com/guzzle/guzzle/pull/2939) +- Support `psr/log` version 2 and 3 [#2943](https://github.com/guzzle/guzzle/pull/2943) + +### Fixed + +- Make sure we always call `restore_error_handler()` [#2915](https://github.com/guzzle/guzzle/pull/2915) +- Fix progress parameter type compatibility between the cURL and stream handlers [#2936](https://github.com/guzzle/guzzle/pull/2936) +- Throw `InvalidArgumentException` when an incorrect `headers` array is provided [#2916](https://github.com/guzzle/guzzle/pull/2916), [#2942](https://github.com/guzzle/guzzle/pull/2942) + +### Changed + +- Be more strict with types [#2914](https://github.com/guzzle/guzzle/pull/2914), [#2917](https://github.com/guzzle/guzzle/pull/2917), [#2919](https://github.com/guzzle/guzzle/pull/2919), [#2945](https://github.com/guzzle/guzzle/pull/2945) + +## 7.3.0 - 2021-03-23 + +### Added + +- Support for DER and P12 certificates [#2413](https://github.com/guzzle/guzzle/pull/2413) +- Support the cURL (http://) scheme for StreamHandler proxies [#2850](https://github.com/guzzle/guzzle/pull/2850) +- Support for `guzzlehttp/psr7:^2.0` [#2878](https://github.com/guzzle/guzzle/pull/2878) + +### Fixed + +- Handle exceptions on invalid header consistently between PHP versions and handlers [#2872](https://github.com/guzzle/guzzle/pull/2872) + +## 7.2.0 - 2020-10-10 + +### Added + +- Support for PHP 8 [#2712](https://github.com/guzzle/guzzle/pull/2712), [#2715](https://github.com/guzzle/guzzle/pull/2715), [#2789](https://github.com/guzzle/guzzle/pull/2789) +- Support passing a body summarizer to the http errors middleware [#2795](https://github.com/guzzle/guzzle/pull/2795) + +### Fixed + +- Handle exceptions during response creation [#2591](https://github.com/guzzle/guzzle/pull/2591) +- Fix CURLOPT_ENCODING not to be overwritten [#2595](https://github.com/guzzle/guzzle/pull/2595) +- Make sure the Request always has a body object [#2804](https://github.com/guzzle/guzzle/pull/2804) + +### Changed + +- The `TooManyRedirectsException` has a response [#2660](https://github.com/guzzle/guzzle/pull/2660) +- Avoid "functions" from dependencies [#2712](https://github.com/guzzle/guzzle/pull/2712) + +### Deprecated + +- Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [#2786](https://github.com/guzzle/guzzle/pull/2786) + +## 7.1.1 - 2020-09-30 + +### Fixed + +- Incorrect EOF detection for response body streams on Windows. + +### Changed + +- We dont connect curl `sink` on HEAD requests. +- Removed some PHP 5 workarounds + +## 7.1.0 - 2020-09-22 + +### Added + +- `GuzzleHttp\MessageFormatterInterface` + +### Fixed + +- Fixed issue that caused cookies with no value not to be stored. +- On redirects, we allow all safe methods like GET, HEAD and OPTIONS. +- Fixed logging on empty responses. +- Make sure MessageFormatter::format returns string + +### Deprecated + +- All functions in `GuzzleHttp` has been deprecated. Use static methods on `Utils` instead. +- `ClientInterface::getConfig()` +- `Client::getConfig()` +- `Client::__call()` +- `Utils::defaultCaBundle()` +- `CurlFactory::LOW_CURL_VERSION_NUMBER` + +## 7.0.1 - 2020-06-27 + +* Fix multiply defined functions fatal error [#2699](https://github.com/guzzle/guzzle/pull/2699) + +## 7.0.0 - 2020-06-27 + +No changes since 7.0.0-rc1. + +## 7.0.0-rc1 - 2020-06-15 + +### Changed + +* Use error level for logging errors in Middleware [#2629](https://github.com/guzzle/guzzle/pull/2629) +* Disabled IDN support by default and require ext-intl to use it [#2675](https://github.com/guzzle/guzzle/pull/2675) + +## 7.0.0-beta2 - 2020-05-25 + +### Added + +* Using `Utils` class instead of functions in the `GuzzleHttp` namespace. [#2546](https://github.com/guzzle/guzzle/pull/2546) +* `ClientInterface::MAJOR_VERSION` [#2583](https://github.com/guzzle/guzzle/pull/2583) + +### Changed + +* Avoid the `getenv` function when unsafe [#2531](https://github.com/guzzle/guzzle/pull/2531) +* Added real client methods [#2529](https://github.com/guzzle/guzzle/pull/2529) +* Avoid functions due to global install conflicts [#2546](https://github.com/guzzle/guzzle/pull/2546) +* Use Symfony intl-idn polyfill [#2550](https://github.com/guzzle/guzzle/pull/2550) +* Adding methods for HTTP verbs like `Client::get()`, `Client::head()`, `Client::patch()` etc [#2529](https://github.com/guzzle/guzzle/pull/2529) +* `ConnectException` extends `TransferException` [#2541](https://github.com/guzzle/guzzle/pull/2541) +* Updated the default User Agent to "GuzzleHttp/7" [#2654](https://github.com/guzzle/guzzle/pull/2654) + +### Fixed + +* Various intl icu issues [#2626](https://github.com/guzzle/guzzle/pull/2626) + +### Removed + +* Pool option `pool_size` [#2528](https://github.com/guzzle/guzzle/pull/2528) + +## 7.0.0-beta1 - 2019-12-30 + +The diff might look very big but 95% of Guzzle users will be able to upgrade without modification. +Please see [the upgrade document](UPGRADING.md) that describes all BC breaking changes. + +### Added + +* Implement PSR-18 and dropped PHP 5 support [#2421](https://github.com/guzzle/guzzle/pull/2421) [#2474](https://github.com/guzzle/guzzle/pull/2474) +* PHP 7 types [#2442](https://github.com/guzzle/guzzle/pull/2442) [#2449](https://github.com/guzzle/guzzle/pull/2449) [#2466](https://github.com/guzzle/guzzle/pull/2466) [#2497](https://github.com/guzzle/guzzle/pull/2497) [#2499](https://github.com/guzzle/guzzle/pull/2499) +* IDN support for redirects [2424](https://github.com/guzzle/guzzle/pull/2424) + +### Changed + +* Dont allow passing null as third argument to `BadResponseException::__construct()` [#2427](https://github.com/guzzle/guzzle/pull/2427) +* Use SAPI constant instead of method call [#2450](https://github.com/guzzle/guzzle/pull/2450) +* Use native function invocation [#2444](https://github.com/guzzle/guzzle/pull/2444) +* Better defaults for PHP installations with old ICU lib [2454](https://github.com/guzzle/guzzle/pull/2454) +* Added visibility to all constants [#2462](https://github.com/guzzle/guzzle/pull/2462) +* Dont allow passing `null` as URI to `Client::request()` and `Client::requestAsync()` [#2461](https://github.com/guzzle/guzzle/pull/2461) +* Widen the exception argument to throwable [#2495](https://github.com/guzzle/guzzle/pull/2495) + +### Fixed + +* Logging when Promise rejected with a string [#2311](https://github.com/guzzle/guzzle/pull/2311) + +### Removed + +* Class `SeekException` [#2162](https://github.com/guzzle/guzzle/pull/2162) +* `RequestException::getResponseBodySummary()` [#2425](https://github.com/guzzle/guzzle/pull/2425) +* `CookieJar::getCookieValue()` [#2433](https://github.com/guzzle/guzzle/pull/2433) +* `uri_template()` and `UriTemplate` [#2440](https://github.com/guzzle/guzzle/pull/2440) +* Request options `save_to` and `exceptions` [#2464](https://github.com/guzzle/guzzle/pull/2464) + +## 6.5.2 - 2019-12-23 + +* idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489) + +## 6.5.1 - 2019-12-21 + +* Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454) +* IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424) + +## 6.5.0 - 2019-12-07 + +* Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143) +* Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287) +* Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132) +* Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132) +* Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348) +* Deprecated `ClientInterface::VERSION` + +## 6.4.1 - 2019-10-23 + +* No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that +* Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar` + +## 6.4.0 - 2019-10-23 + +* Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108) +* Fix: Test if response is readable before returning a summary in `RequestException::getResponseBodySummary()` [#2081](https://github.com/guzzle/guzzle/pull/2081) +* Fix: Add support for GUZZLE_CURL_SELECT_TIMEOUT environment variable [#2161](https://github.com/guzzle/guzzle/pull/2161) +* Improvement: Added `GuzzleHttp\Exception\InvalidArgumentException` [#2163](https://github.com/guzzle/guzzle/pull/2163) +* Improvement: Added `GuzzleHttp\_current_time()` to use `hrtime()` if that function exists. [#2242](https://github.com/guzzle/guzzle/pull/2242) +* Improvement: Added curl's `appconnect_time` in `TransferStats` [#2284](https://github.com/guzzle/guzzle/pull/2284) +* Improvement: Make GuzzleException extend Throwable wherever it's available [#2273](https://github.com/guzzle/guzzle/pull/2273) +* Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335) +* Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362) + ## 6.3.3 - 2018-04-22 * Fix: Default headers when decode_content is specified @@ -307,7 +512,7 @@ object). * Note: This has been changed in 5.0.3 to now encode query string values by default unless the `rawString` argument is provided when setting the query string on a URL: Now allowing many more characters to be present in the - query string without being percent encoded. See http://tools.ietf.org/html/rfc3986#appendix-A + query string without being percent encoded. See https://tools.ietf.org/html/rfc3986#appendix-A ## 5.0.1 - 2014-10-16 @@ -349,7 +554,7 @@ interfaces. responses, `GuzzleHttp\Collection`, `GuzzleHttp\Url`, `GuzzleHttp\Query`, `GuzzleHttp\Post\PostBody`, and `GuzzleHttp\Cookie\SetCookie`. This blog post provides a good outline of - why I did this: http://ocramius.github.io/blog/fluent-interfaces-are-evil/. + why I did this: https://ocramius.github.io/blog/fluent-interfaces-are-evil/. This also makes the Guzzle message interfaces compatible with the current PSR-7 message proposal. * Removed "functions.php", so that Guzzle is truly PSR-4 compliant. Except @@ -535,8 +740,6 @@ interfaces. ## 4.0.0 - 2014-03-29 -* For more information on the 4.0 transition, see: - http://mtdowling.com/blog/2014/03/15/guzzle-4-rc/ * For information on changes and upgrading, see: https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40 * Added `GuzzleHttp\batch()` as a convenience function for sending requests in @@ -845,7 +1048,7 @@ interfaces. ## 3.4.0 - 2013-04-11 -* Bug fix: URLs are now resolved correctly based on http://tools.ietf.org/html/rfc3986#section-5.2. #289 +* Bug fix: URLs are now resolved correctly based on https://tools.ietf.org/html/rfc3986#section-5.2. #289 * Bug fix: Absolute URLs with a path in a service description will now properly override the base URL. #289 * Bug fix: Parsing a query string with a single PHP array value will now result in an array. #263 * Bug fix: Better normalization of the User-Agent header to prevent duplicate headers. #264. diff --git a/vendor/guzzlehttp/guzzle/LICENSE b/vendor/guzzlehttp/guzzle/LICENSE index 50a177b0..fd2375d8 100644 --- a/vendor/guzzlehttp/guzzle/LICENSE +++ b/vendor/guzzlehttp/guzzle/LICENSE @@ -1,4 +1,12 @@ -Copyright (c) 2011-2018 Michael Dowling, https://github.com/mtdowling +The MIT License (MIT) + +Copyright (c) 2011 Michael Dowling +Copyright (c) 2012 Jeremy Lindblom +Copyright (c) 2014 Graham Campbell +Copyright (c) 2015 Márk Sági-Kazár +Copyright (c) 2015 Tobias Schultze +Copyright (c) 2016 Tobias Nyholm +Copyright (c) 2016 George Mponos Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/guzzlehttp/guzzle/README.md b/vendor/guzzlehttp/guzzle/README.md index bcd18b8e..0025aa7a 100644 --- a/vendor/guzzlehttp/guzzle/README.md +++ b/vendor/guzzlehttp/guzzle/README.md @@ -1,8 +1,9 @@ -Guzzle, PHP HTTP client -======================= +![Guzzle](.github/logo.png?raw=true) + +# Guzzle, PHP HTTP client [![Latest Version](https://img.shields.io/github/release/guzzle/guzzle.svg?style=flat-square)](https://github.com/guzzle/guzzle/releases) -[![Build Status](https://img.shields.io/travis/guzzle/guzzle.svg?style=flat-square)](https://travis-ci.org/guzzle/guzzle) +[![Build Status](https://img.shields.io/github/workflow/status/guzzle/guzzle/CI?label=ci%20build&style=flat-square)](https://github.com/guzzle/guzzle/actions?query=workflow%3ACI) [![Total Downloads](https://img.shields.io/packagist/dt/guzzlehttp/guzzle.svg?style=flat-square)](https://packagist.org/packages/guzzlehttp/guzzle) Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and @@ -14,6 +15,7 @@ trivial to integrate with web services. - Can send both synchronous and asynchronous requests using the same interface. - Uses PSR-7 interfaces for requests, responses, and streams. This allows you to utilize other PSR-7 compatible libraries with Guzzle. +- Supports PSR-18 allowing interoperability between other PSR-18 HTTP Clients. - Abstracts away the underlying HTTP transport, allowing you to write environment and transport agnostic code; i.e., no hard dependency on cURL, PHP streams, sockets, or non-blocking event loops. @@ -21,57 +23,40 @@ trivial to integrate with web services. ```php $client = new \GuzzleHttp\Client(); -$res = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle'); -echo $res->getStatusCode(); -// 200 -echo $res->getHeaderLine('content-type'); -// 'application/json; charset=utf8' -echo $res->getBody(); -// '{"id": 1420053, "name": "guzzle", ...}' +$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle'); + +echo $response->getStatusCode(); // 200 +echo $response->getHeaderLine('content-type'); // 'application/json; charset=utf8' +echo $response->getBody(); // '{"id": 1420053, "name": "guzzle", ...}' // Send an asynchronous request. $request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org'); $promise = $client->sendAsync($request)->then(function ($response) { echo 'I completed! ' . $response->getBody(); }); + $promise->wait(); ``` ## Help and docs +We use GitHub issues only to discuss bugs and new features. For support please refer to: + - [Documentation](http://guzzlephp.org/) - [Stack Overflow](http://stackoverflow.com/questions/tagged/guzzle) +- [#guzzle](https://app.slack.com/client/T0D2S9JCT/CE6UAAKL4) channel on [PHP-HTTP Slack](http://slack.httplug.io/) - [Gitter](https://gitter.im/guzzle/guzzle) ## Installing Guzzle The recommended way to install Guzzle is through -[Composer](http://getcomposer.org). +[Composer](https://getcomposer.org/). ```bash -# Install Composer -curl -sS https://getcomposer.org/installer | php +composer require guzzlehttp/guzzle ``` -Next, run the Composer command to install the latest stable version of Guzzle: - -```bash -php composer.phar require guzzlehttp/guzzle -``` - -After installing, you need to require Composer's autoloader: - -```php -require 'vendor/autoload.php'; -``` - -You can then later update Guzzle using composer: - - ```bash -composer.phar update - ``` - ## Version Guidance @@ -79,13 +64,31 @@ composer.phar update |---------|------------|---------------------|--------------|---------------------|---------------------|-------|-------------| | 3.x | EOL | `guzzle/guzzle` | `Guzzle` | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No | >= 5.3.3 | | 4.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A | No | >= 5.4 | -| 5.x | Maintained | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >= 5.4 | -| 6.x | Latest | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes | >= 5.5 | +| 5.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >= 5.4 | +| 6.x | Security fixes | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes | >= 5.5 | +| 7.x | Latest | `guzzlehttp/guzzle` | `GuzzleHttp` | [v7][guzzle-7-repo] | [v7][guzzle-7-docs] | Yes | >= 7.2 | [guzzle-3-repo]: https://github.com/guzzle/guzzle3 [guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x [guzzle-5-repo]: https://github.com/guzzle/guzzle/tree/5.3 -[guzzle-6-repo]: https://github.com/guzzle/guzzle -[guzzle-3-docs]: http://guzzle3.readthedocs.org/en/latest/ -[guzzle-5-docs]: http://guzzle.readthedocs.org/en/5.3/ -[guzzle-6-docs]: http://guzzle.readthedocs.org/en/latest/ +[guzzle-6-repo]: https://github.com/guzzle/guzzle/tree/6.5 +[guzzle-7-repo]: https://github.com/guzzle/guzzle +[guzzle-3-docs]: http://guzzle3.readthedocs.org +[guzzle-5-docs]: http://docs.guzzlephp.org/en/5.3/ +[guzzle-6-docs]: http://docs.guzzlephp.org/en/6.5/ +[guzzle-7-docs]: http://docs.guzzlephp.org/en/latest/ + + +## Security + +If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/guzzle/security/policy) for more information. + +## License + +Guzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information. + +## For Enterprise + +Available as part of the Tidelift Subscription + +The maintainers of Guzzle and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-guzzle?utm_source=packagist-guzzlehttp-guzzle&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/vendor/guzzlehttp/guzzle/UPGRADING.md b/vendor/guzzlehttp/guzzle/UPGRADING.md index 91d1dcc9..45417a7e 100644 --- a/vendor/guzzlehttp/guzzle/UPGRADING.md +++ b/vendor/guzzlehttp/guzzle/UPGRADING.md @@ -1,10 +1,60 @@ Guzzle Upgrade Guide ==================== +6.0 to 7.0 +---------- + +In order to take advantage of the new features of PHP, Guzzle dropped the support +of PHP 5. The minimum supported PHP version is now PHP 7.2. Type hints and return +types for functions and methods have been added wherever possible. + +Please make sure: +- You are calling a function or a method with the correct type. +- If you extend a class of Guzzle; update all signatures on methods you override. + +#### Other backwards compatibility breaking changes + +- Class `GuzzleHttp\UriTemplate` is removed. +- Class `GuzzleHttp\Exception\SeekException` is removed. +- Classes `GuzzleHttp\Exception\BadResponseException`, `GuzzleHttp\Exception\ClientException`, + `GuzzleHttp\Exception\ServerException` can no longer be initialized with an empty + Response as argument. +- Class `GuzzleHttp\Exception\ConnectException` now extends `GuzzleHttp\Exception\TransferException` + instead of `GuzzleHttp\Exception\RequestException`. +- Function `GuzzleHttp\Exception\ConnectException::getResponse()` is removed. +- Function `GuzzleHttp\Exception\ConnectException::hasResponse()` is removed. +- Constant `GuzzleHttp\ClientInterface::VERSION` is removed. Added `GuzzleHttp\ClientInterface::MAJOR_VERSION` instead. +- Function `GuzzleHttp\Exception\RequestException::getResponseBodySummary` is removed. + Use `\GuzzleHttp\Psr7\get_message_body_summary` as an alternative. +- Function `GuzzleHttp\Cookie\CookieJar::getCookieValue` is removed. +- Request option `exception` is removed. Please use `http_errors`. +- Request option `save_to` is removed. Please use `sink`. +- Pool option `pool_size` is removed. Please use `concurrency`. +- We now look for environment variables in the `$_SERVER` super global, due to thread safety issues with `getenv`. We continue to fallback to `getenv` in CLI environments, for maximum compatibility. +- The `get`, `head`, `put`, `post`, `patch`, `delete`, `getAsync`, `headAsync`, `putAsync`, `postAsync`, `patchAsync`, and `deleteAsync` methods are now implemented as genuine methods on `GuzzleHttp\Client`, with strong typing. The original `__call` implementation remains unchanged for now, for maximum backwards compatibility, but won't be invoked under normal operation. +- The `log` middleware will log the errors with level `error` instead of `notice` +- Support for international domain names (IDN) is now disabled by default, and enabling it requires installing ext-intl, linked against a modern version of the C library (ICU 4.6 or higher). + +#### Native functions calls + +All internal native functions calls of Guzzle are now prefixed with a slash. This +change makes it impossible for method overloading by other libraries or applications. +Example: + +```php +// Before: +curl_version(); + +// After: +\curl_version(); +``` + +For the full diff you can check [here](https://github.com/guzzle/guzzle/compare/6.5.4..master). + 5.0 to 6.0 ---------- -Guzzle now uses [PSR-7](http://www.php-fig.org/psr/psr-7/) for HTTP messages. +Guzzle now uses [PSR-7](https://www.php-fig.org/psr/psr-7/) for HTTP messages. Due to the fact that these messages are immutable, this prompted a refactoring of Guzzle to use a middleware based system rather than an event system. Any HTTP message interaction (e.g., `GuzzleHttp\Message\Request`) need to be @@ -167,7 +217,7 @@ passing a `GuzzleHttp\Adapter\AdapterInterface`, you must now pass a PHP ## Removed Fluent Interfaces -[Fluent interfaces were removed](http://ocramius.github.io/blog/fluent-interfaces-are-evil) +[Fluent interfaces were removed](https://ocramius.github.io/blog/fluent-interfaces-are-evil/) from the following classes: - `GuzzleHttp\Collection` @@ -820,7 +870,7 @@ HeaderInterface (e.g. toArray(), getAll(), etc.). 3.3 to 3.4 ---------- -Base URLs of a client now follow the rules of http://tools.ietf.org/html/rfc3986#section-5.2.2 when merging URLs. +Base URLs of a client now follow the rules of https://tools.ietf.org/html/rfc3986#section-5.2.2 when merging URLs. 3.2 to 3.3 ---------- diff --git a/vendor/guzzlehttp/guzzle/composer.json b/vendor/guzzlehttp/guzzle/composer.json index 1f328e30..2549f78b 100644 --- a/vendor/guzzlehttp/guzzle/composer.json +++ b/vendor/guzzlehttp/guzzle/composer.json @@ -1,44 +1,98 @@ { "name": "guzzlehttp/guzzle", - "type": "library", "description": "Guzzle is a PHP HTTP client library", - "keywords": ["framework", "http", "rest", "web service", "curl", "client", "HTTP client"], - "homepage": "http://guzzlephp.org/", + "keywords": [ + "framework", + "http", + "rest", + "web service", + "curl", + "client", + "HTTP client", + "PSR-7", + "PSR-18" + ], "license": "MIT", "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "require": { - "php": ">=5.5", - "guzzlehttp/psr7": "^1.4", - "guzzlehttp/promises": "^1.0" + "php": "^7.2.5 || ^8.0", + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" + "bamarni/composer-bin-plugin": "^1.4.1", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "config": { + "preferred-install": "dist", + "sort-packages": true + }, + "extra": { + "branch-alias": { + "dev-master": "7.4-dev" + } }, "autoload": { - "files": ["src/functions_include.php"], "psr-4": { "GuzzleHttp\\": "src/" - } + }, + "files": [ + "src/functions_include.php" + ] }, "autoload-dev": { "psr-4": { "GuzzleHttp\\Tests\\": "tests/" } - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "extra": { - "branch-alias": { - "dev-master": "6.3-dev" - } } } diff --git a/vendor/guzzlehttp/guzzle/src/BodySummarizer.php b/vendor/guzzlehttp/guzzle/src/BodySummarizer.php new file mode 100644 index 00000000..6eca94ef --- /dev/null +++ b/vendor/guzzlehttp/guzzle/src/BodySummarizer.php @@ -0,0 +1,28 @@ +truncateAt = $truncateAt; + } + + /** + * Returns a summarized message body. + */ + public function summarize(MessageInterface $message): ?string + { + return $this->truncateAt === null + ? \GuzzleHttp\Psr7\Message::bodySummary($message) + : \GuzzleHttp\Psr7\Message::bodySummary($message, $this->truncateAt); + } +} diff --git a/vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php b/vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php new file mode 100644 index 00000000..3e02e036 --- /dev/null +++ b/vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php @@ -0,0 +1,13 @@ +configureDefaults($config); } + /** + * @param string $method + * @param array $args + * + * @return PromiseInterface|ResponseInterface + * + * @deprecated Client::__call will be removed in guzzlehttp/guzzle:8.0. + */ public function __call($method, $args) { - if (count($args) < 1) { - throw new \InvalidArgumentException('Magic request methods require a URI and optional options array'); + if (\count($args) < 1) { + throw new InvalidArgumentException('Magic request methods require a URI and optional options array'); } $uri = $args[0]; - $opts = isset($args[1]) ? $args[1] : []; + $opts = $args[1] ?? []; - return substr($method, -5) === 'Async' - ? $this->requestAsync(substr($method, 0, -5), $uri, $opts) + return \substr($method, -5) === 'Async' + ? $this->requestAsync(\substr($method, 0, -5), $uri, $opts) : $this->request($method, $uri, $opts); } - public function sendAsync(RequestInterface $request, array $options = []) + /** + * Asynchronously send an HTTP request. + * + * @param array $options Request options to apply to the given + * request and to the transfer. See \GuzzleHttp\RequestOptions. + */ + public function sendAsync(RequestInterface $request, array $options = []): PromiseInterface { // Merge the base URI into the request URI if needed. $options = $this->prepareDefaults($options); @@ -100,23 +109,57 @@ class Client implements ClientInterface ); } - public function send(RequestInterface $request, array $options = []) + /** + * Send an HTTP request. + * + * @param array $options Request options to apply to the given + * request and to the transfer. See \GuzzleHttp\RequestOptions. + * + * @throws GuzzleException + */ + public function send(RequestInterface $request, array $options = []): ResponseInterface { $options[RequestOptions::SYNCHRONOUS] = true; return $this->sendAsync($request, $options)->wait(); } - public function requestAsync($method, $uri = '', array $options = []) + /** + * The HttpClient PSR (PSR-18) specify this method. + * + * @inheritDoc + */ + public function sendRequest(RequestInterface $request): ResponseInterface + { + $options[RequestOptions::SYNCHRONOUS] = true; + $options[RequestOptions::ALLOW_REDIRECTS] = false; + $options[RequestOptions::HTTP_ERRORS] = false; + + return $this->sendAsync($request, $options)->wait(); + } + + /** + * Create and send an asynchronous HTTP request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string $method HTTP method + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. See \GuzzleHttp\RequestOptions. + */ + public function requestAsync(string $method, $uri = '', array $options = []): PromiseInterface { $options = $this->prepareDefaults($options); // Remove request modifying parameter because it can be done up-front. - $headers = isset($options['headers']) ? $options['headers'] : []; - $body = isset($options['body']) ? $options['body'] : null; - $version = isset($options['version']) ? $options['version'] : '1.1'; + $headers = $options['headers'] ?? []; + $body = $options['body'] ?? null; + $version = $options['version'] ?? '1.1'; // Merge the URI into the base URI. - $uri = $this->buildUri($uri, $options); - if (is_array($body)) { - $this->invalidBody(); + $uri = $this->buildUri(Psr7\Utils::uriFor($uri), $options); + if (\is_array($body)) { + throw $this->invalidBody(); } $request = new Psr7\Request($method, $uri, $headers, $body, $version); // Remove the option so that they are not doubly-applied. @@ -125,26 +168,54 @@ class Client implements ClientInterface return $this->transfer($request, $options); } - public function request($method, $uri = '', array $options = []) + /** + * Create and send an HTTP request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string $method HTTP method. + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. See \GuzzleHttp\RequestOptions. + * + * @throws GuzzleException + */ + public function request(string $method, $uri = '', array $options = []): ResponseInterface { $options[RequestOptions::SYNCHRONOUS] = true; return $this->requestAsync($method, $uri, $options)->wait(); } - public function getConfig($option = null) + /** + * Get a client configuration option. + * + * These options include default request options of the client, a "handler" + * (if utilized by the concrete client), and a "base_uri" if utilized by + * the concrete client. + * + * @param string|null $option The config option to retrieve. + * + * @return mixed + * + * @deprecated Client::getConfig will be removed in guzzlehttp/guzzle:8.0. + */ + public function getConfig(?string $option = null) { return $option === null ? $this->config - : (isset($this->config[$option]) ? $this->config[$option] : null); + : ($this->config[$option] ?? null); } - private function buildUri($uri, array $config) + private function buildUri(UriInterface $uri, array $config): UriInterface { - // for BC we accept null which would otherwise fail in uri_for - $uri = Psr7\uri_for($uri === null ? '' : $uri); - if (isset($config['base_uri'])) { - $uri = Psr7\UriResolver::resolve(Psr7\uri_for($config['base_uri']), $uri); + $uri = Psr7\UriResolver::resolve(Psr7\Utils::uriFor($config['base_uri']), $uri); + } + + if (isset($config['idn_conversion']) && ($config['idn_conversion'] !== false)) { + $idnOptions = ($config['idn_conversion'] === true) ? \IDNA_DEFAULT : $config['idn_conversion']; + $uri = Utils::idnUriConvert($uri, $idnOptions); } return $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri; @@ -152,17 +223,16 @@ class Client implements ClientInterface /** * Configures the default options for a client. - * - * @param array $config */ - private function configureDefaults(array $config) + private function configureDefaults(array $config): void { $defaults = [ 'allow_redirects' => RedirectMiddleware::$defaultSettings, 'http_errors' => true, 'decode_content' => true, 'verify' => true, - 'cookies' => false + 'cookies' => false, + 'idn_conversion' => false, ]; // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set. @@ -170,17 +240,17 @@ class Client implements ClientInterface // We can only trust the HTTP_PROXY environment variable in a CLI // process due to the fact that PHP has no reliable mechanism to // get environment variables that start with "HTTP_". - if (php_sapi_name() == 'cli' && getenv('HTTP_PROXY')) { - $defaults['proxy']['http'] = getenv('HTTP_PROXY'); + if (\PHP_SAPI === 'cli' && ($proxy = Utils::getenv('HTTP_PROXY'))) { + $defaults['proxy']['http'] = $proxy; } - if ($proxy = getenv('HTTPS_PROXY')) { + if ($proxy = Utils::getenv('HTTPS_PROXY')) { $defaults['proxy']['https'] = $proxy; } - if ($noProxy = getenv('NO_PROXY')) { - $cleanedNoProxy = str_replace(' ', '', $noProxy); - $defaults['proxy']['no'] = explode(',', $cleanedNoProxy); + if ($noProxy = Utils::getenv('NO_PROXY')) { + $cleanedNoProxy = \str_replace(' ', '', $noProxy); + $defaults['proxy']['no'] = \explode(',', $cleanedNoProxy); } $this->config = $config + $defaults; @@ -191,15 +261,15 @@ class Client implements ClientInterface // Add the default user-agent header. if (!isset($this->config['headers'])) { - $this->config['headers'] = ['User-Agent' => default_user_agent()]; + $this->config['headers'] = ['User-Agent' => Utils::defaultUserAgent()]; } else { // Add the User-Agent header if one was not already set. - foreach (array_keys($this->config['headers']) as $name) { - if (strtolower($name) === 'user-agent') { + foreach (\array_keys($this->config['headers']) as $name) { + if (\strtolower($name) === 'user-agent') { return; } } - $this->config['headers']['User-Agent'] = default_user_agent(); + $this->config['headers']['User-Agent'] = Utils::defaultUserAgent(); } } @@ -207,10 +277,8 @@ class Client implements ClientInterface * Merges default options into the array. * * @param array $options Options to modify by reference - * - * @return array */ - private function prepareDefaults($options) + private function prepareDefaults(array $options): array { $defaults = $this->config; @@ -222,13 +290,13 @@ class Client implements ClientInterface // Special handling for headers is required as they are added as // conditional headers and as headers passed to a request ctor. - if (array_key_exists('headers', $options)) { + if (\array_key_exists('headers', $options)) { // Allows default headers to be unset. if ($options['headers'] === null) { - $defaults['_conditional'] = null; + $defaults['_conditional'] = []; unset($options['headers']); - } elseif (!is_array($options['headers'])) { - throw new \InvalidArgumentException('headers must be an array'); + } elseif (!\is_array($options['headers'])) { + throw new InvalidArgumentException('headers must be an array'); } } @@ -251,66 +319,50 @@ class Client implements ClientInterface * The URI of the request is not modified and the request options are used * as-is without merging in default options. * - * @param RequestInterface $request - * @param array $options - * - * @return Promise\PromiseInterface + * @param array $options See \GuzzleHttp\RequestOptions. */ - private function transfer(RequestInterface $request, array $options) + private function transfer(RequestInterface $request, array $options): PromiseInterface { - // save_to -> sink - if (isset($options['save_to'])) { - $options['sink'] = $options['save_to']; - unset($options['save_to']); - } - - // exceptions -> http_errors - if (isset($options['exceptions'])) { - $options['http_errors'] = $options['exceptions']; - unset($options['exceptions']); - } - $request = $this->applyOptions($request, $options); + /** @var HandlerStack $handler */ $handler = $options['handler']; try { - return Promise\promise_for($handler($request, $options)); + return P\Create::promiseFor($handler($request, $options)); } catch (\Exception $e) { - return Promise\rejection_for($e); + return P\Create::rejectionFor($e); } } /** * Applies the array of request options to a request. - * - * @param RequestInterface $request - * @param array $options - * - * @return RequestInterface */ - private function applyOptions(RequestInterface $request, array &$options) + private function applyOptions(RequestInterface $request, array &$options): RequestInterface { $modify = [ 'set_headers' => [], ]; if (isset($options['headers'])) { + if (array_keys($options['headers']) === range(0, count($options['headers']) - 1)) { + throw new InvalidArgumentException('The headers array must have header name as keys.'); + } $modify['set_headers'] = $options['headers']; unset($options['headers']); } if (isset($options['form_params'])) { if (isset($options['multipart'])) { - throw new \InvalidArgumentException('You cannot use ' + throw new InvalidArgumentException('You cannot use ' . 'form_params and multipart at the same time. Use the ' . 'form_params option if you want to send application/' . 'x-www-form-urlencoded requests, and the multipart ' . 'option to send multipart/form-data requests.'); } - $options['body'] = http_build_query($options['form_params'], '', '&'); + $options['body'] = \http_build_query($options['form_params'], '', '&'); unset($options['form_params']); // Ensure that we don't have the header in different case and set the new value. - $options['_conditional'] = Psr7\_caseless_remove(['Content-Type'], $options['_conditional']); + $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']); $options['_conditional']['Content-Type'] = 'application/x-www-form-urlencoded'; } @@ -320,10 +372,10 @@ class Client implements ClientInterface } if (isset($options['json'])) { - $options['body'] = \GuzzleHttp\json_encode($options['json']); + $options['body'] = Utils::jsonEncode($options['json']); unset($options['json']); // Ensure that we don't have the header in different case and set the new value. - $options['_conditional'] = Psr7\_caseless_remove(['Content-Type'], $options['_conditional']); + $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']); $options['_conditional']['Content-Type'] = 'application/json'; } @@ -331,47 +383,47 @@ class Client implements ClientInterface && $options['decode_content'] !== true ) { // Ensure that we don't have the header in different case and set the new value. - $options['_conditional'] = Psr7\_caseless_remove(['Accept-Encoding'], $options['_conditional']); + $options['_conditional'] = Psr7\Utils::caselessRemove(['Accept-Encoding'], $options['_conditional']); $modify['set_headers']['Accept-Encoding'] = $options['decode_content']; } if (isset($options['body'])) { - if (is_array($options['body'])) { - $this->invalidBody(); + if (\is_array($options['body'])) { + throw $this->invalidBody(); } - $modify['body'] = Psr7\stream_for($options['body']); + $modify['body'] = Psr7\Utils::streamFor($options['body']); unset($options['body']); } - if (!empty($options['auth']) && is_array($options['auth'])) { + if (!empty($options['auth']) && \is_array($options['auth'])) { $value = $options['auth']; - $type = isset($value[2]) ? strtolower($value[2]) : 'basic'; + $type = isset($value[2]) ? \strtolower($value[2]) : 'basic'; switch ($type) { case 'basic': // Ensure that we don't have the header in different case and set the new value. - $modify['set_headers'] = Psr7\_caseless_remove(['Authorization'], $modify['set_headers']); + $modify['set_headers'] = Psr7\Utils::caselessRemove(['Authorization'], $modify['set_headers']); $modify['set_headers']['Authorization'] = 'Basic ' - . base64_encode("$value[0]:$value[1]"); + . \base64_encode("$value[0]:$value[1]"); break; case 'digest': // @todo: Do not rely on curl - $options['curl'][CURLOPT_HTTPAUTH] = CURLAUTH_DIGEST; - $options['curl'][CURLOPT_USERPWD] = "$value[0]:$value[1]"; + $options['curl'][\CURLOPT_HTTPAUTH] = \CURLAUTH_DIGEST; + $options['curl'][\CURLOPT_USERPWD] = "$value[0]:$value[1]"; break; case 'ntlm': - $options['curl'][CURLOPT_HTTPAUTH] = CURLAUTH_NTLM; - $options['curl'][CURLOPT_USERPWD] = "$value[0]:$value[1]"; + $options['curl'][\CURLOPT_HTTPAUTH] = \CURLAUTH_NTLM; + $options['curl'][\CURLOPT_USERPWD] = "$value[0]:$value[1]"; break; } } if (isset($options['query'])) { $value = $options['query']; - if (is_array($value)) { - $value = http_build_query($value, null, '&', PHP_QUERY_RFC3986); + if (\is_array($value)) { + $value = \http_build_query($value, '', '&', \PHP_QUERY_RFC3986); } - if (!is_string($value)) { - throw new \InvalidArgumentException('query must be a string or array'); + if (!\is_string($value)) { + throw new InvalidArgumentException('query must be a string or array'); } $modify['query'] = $value; unset($options['query']); @@ -380,16 +432,16 @@ class Client implements ClientInterface // Ensure that sink is not an invalid value. if (isset($options['sink'])) { // TODO: Add more sink validation? - if (is_bool($options['sink'])) { - throw new \InvalidArgumentException('sink must not be a boolean'); + if (\is_bool($options['sink'])) { + throw new InvalidArgumentException('sink must not be a boolean'); } } - $request = Psr7\modify_request($request, $modify); + $request = Psr7\Utils::modifyRequest($request, $modify); if ($request->getBody() instanceof Psr7\MultipartStream) { // Use a multipart/form-data POST if a Content-Type is not set. // Ensure that we don't have the header in different case and set the new value. - $options['_conditional'] = Psr7\_caseless_remove(['Content-Type'], $options['_conditional']); + $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']); $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary=' . $request->getBody()->getBoundary(); } @@ -403,7 +455,7 @@ class Client implements ClientInterface $modify['set_headers'][$k] = $v; } } - $request = Psr7\modify_request($request, $modify); + $request = Psr7\Utils::modifyRequest($request, $modify); // Don't pass this internal value along to middleware/handlers. unset($options['_conditional']); } @@ -411,10 +463,13 @@ class Client implements ClientInterface return $request; } - private function invalidBody() + /** + * Return an InvalidArgumentException with pre-set message. + */ + private function invalidBody(): InvalidArgumentException { - throw new \InvalidArgumentException('Passing in the "body" request ' - . 'option as an array to send a POST request has been deprecated. ' + return new InvalidArgumentException('Passing in the "body" request ' + . 'option as an array to send a request is not supported. ' . 'Please use the "form_params" request option to send a ' . 'application/x-www-form-urlencoded request, or the "multipart" ' . 'request option to send a multipart/form-data request.'); diff --git a/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/vendor/guzzlehttp/guzzle/src/ClientInterface.php index 2dbcffa4..6aaee61a 100644 --- a/vendor/guzzlehttp/guzzle/src/ClientInterface.php +++ b/vendor/guzzlehttp/guzzle/src/ClientInterface.php @@ -1,8 +1,9 @@ request('GET', $uri, $options); + } + + /** + * Create and send an HTTP HEAD request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + * + * @throws GuzzleException + */ + public function head($uri, array $options = []): ResponseInterface + { + return $this->request('HEAD', $uri, $options); + } + + /** + * Create and send an HTTP PUT request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + * + * @throws GuzzleException + */ + public function put($uri, array $options = []): ResponseInterface + { + return $this->request('PUT', $uri, $options); + } + + /** + * Create and send an HTTP POST request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + * + * @throws GuzzleException + */ + public function post($uri, array $options = []): ResponseInterface + { + return $this->request('POST', $uri, $options); + } + + /** + * Create and send an HTTP PATCH request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + * + * @throws GuzzleException + */ + public function patch($uri, array $options = []): ResponseInterface + { + return $this->request('PATCH', $uri, $options); + } + + /** + * Create and send an HTTP DELETE request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + * + * @throws GuzzleException + */ + public function delete($uri, array $options = []): ResponseInterface + { + return $this->request('DELETE', $uri, $options); + } + + /** + * Create and send an asynchronous HTTP request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string $method HTTP method + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + abstract public function requestAsync(string $method, $uri, array $options = []): PromiseInterface; + + /** + * Create and send an asynchronous HTTP GET request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + public function getAsync($uri, array $options = []): PromiseInterface + { + return $this->requestAsync('GET', $uri, $options); + } + + /** + * Create and send an asynchronous HTTP HEAD request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + public function headAsync($uri, array $options = []): PromiseInterface + { + return $this->requestAsync('HEAD', $uri, $options); + } + + /** + * Create and send an asynchronous HTTP PUT request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + public function putAsync($uri, array $options = []): PromiseInterface + { + return $this->requestAsync('PUT', $uri, $options); + } + + /** + * Create and send an asynchronous HTTP POST request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + public function postAsync($uri, array $options = []): PromiseInterface + { + return $this->requestAsync('POST', $uri, $options); + } + + /** + * Create and send an asynchronous HTTP PATCH request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + public function patchAsync($uri, array $options = []): PromiseInterface + { + return $this->requestAsync('PATCH', $uri, $options); + } + + /** + * Create and send an asynchronous HTTP DELETE request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + */ + public function deleteAsync($uri, array $options = []): PromiseInterface + { + return $this->requestAsync('DELETE', $uri, $options); + } +} diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php index 78f2b79f..d6757c65 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php @@ -1,4 +1,5 @@ strictMode = $strictMode; @@ -39,10 +44,8 @@ class CookieJar implements CookieJarInterface * * @param array $cookies Cookies to create the jar from * @param string $domain Domain to set the cookies to - * - * @return self */ - public static function fromArray(array $cookies, $domain) + public static function fromArray(array $cookies, string $domain): self { $cookieJar = new self(); foreach ($cookies as $name => $value) { @@ -57,26 +60,15 @@ class CookieJar implements CookieJarInterface return $cookieJar; } - /** - * @deprecated - */ - public static function getCookieValue($value) - { - return $value; - } - /** * Evaluate if this cookie should be persisted to storage * that survives between requests. * - * @param SetCookie $cookie Being evaluated. - * @param bool $allowSessionCookies If we should persist session cookies - * @return bool + * @param SetCookie $cookie Being evaluated. + * @param bool $allowSessionCookies If we should persist session cookies */ - public static function shouldPersist( - SetCookie $cookie, - $allowSessionCookies = false - ) { + public static function shouldPersist(SetCookie $cookie, bool $allowSessionCookies = false): bool + { if ($cookie->getExpires() || $allowSessionCookies) { if (!$cookie->getDiscard()) { return true; @@ -90,52 +82,57 @@ class CookieJar implements CookieJarInterface * Finds and returns the cookie based on the name * * @param string $name cookie name to search for + * * @return SetCookie|null cookie that was found or null if not found */ - public function getCookieByName($name) + public function getCookieByName(string $name): ?SetCookie { - // don't allow a null name - if ($name === null) { - return null; - } foreach ($this->cookies as $cookie) { - if ($cookie->getName() !== null && strcasecmp($cookie->getName(), $name) === 0) { + if ($cookie->getName() !== null && \strcasecmp($cookie->getName(), $name) === 0) { return $cookie; } } + + return null; } - public function toArray() + /** + * @inheritDoc + */ + public function toArray(): array { - return array_map(function (SetCookie $cookie) { + return \array_map(static function (SetCookie $cookie): array { return $cookie->toArray(); }, $this->getIterator()->getArrayCopy()); } - public function clear($domain = null, $path = null, $name = null) + /** + * @inheritDoc + */ + public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void { if (!$domain) { $this->cookies = []; return; } elseif (!$path) { - $this->cookies = array_filter( + $this->cookies = \array_filter( $this->cookies, - function (SetCookie $cookie) use ($path, $domain) { + static function (SetCookie $cookie) use ($domain): bool { return !$cookie->matchesDomain($domain); } ); } elseif (!$name) { - $this->cookies = array_filter( + $this->cookies = \array_filter( $this->cookies, - function (SetCookie $cookie) use ($path, $domain) { + static function (SetCookie $cookie) use ($path, $domain): bool { return !($cookie->matchesPath($path) && $cookie->matchesDomain($domain)); } ); } else { - $this->cookies = array_filter( + $this->cookies = \array_filter( $this->cookies, - function (SetCookie $cookie) use ($path, $domain, $name) { + static function (SetCookie $cookie) use ($path, $domain, $name) { return !($cookie->getName() == $name && $cookie->matchesPath($path) && $cookie->matchesDomain($domain)); @@ -144,17 +141,23 @@ class CookieJar implements CookieJarInterface } } - public function clearSessionCookies() + /** + * @inheritDoc + */ + public function clearSessionCookies(): void { - $this->cookies = array_filter( + $this->cookies = \array_filter( $this->cookies, - function (SetCookie $cookie) { + static function (SetCookie $cookie): bool { return !$cookie->getDiscard() && $cookie->getExpires(); } ); } - public function setCookie(SetCookie $cookie) + /** + * @inheritDoc + */ + public function setCookie(SetCookie $cookie): bool { // If the name string is empty (but not 0), ignore the set-cookie // string entirely. @@ -168,10 +171,9 @@ class CookieJar implements CookieJarInterface if ($result !== true) { if ($this->strictMode) { throw new \RuntimeException('Invalid cookie: ' . $result); - } else { - $this->removeCookieIfEmpty($cookie); - return false; } + $this->removeCookieIfEmpty($cookie); + return false; } // Resolve conflicts with previously set cookies @@ -215,27 +217,28 @@ class CookieJar implements CookieJarInterface return true; } - public function count() + public function count(): int { - return count($this->cookies); + return \count($this->cookies); } - public function getIterator() + /** + * @return \ArrayIterator + */ + public function getIterator(): \ArrayIterator { - return new \ArrayIterator(array_values($this->cookies)); + return new \ArrayIterator(\array_values($this->cookies)); } - public function extractCookies( - RequestInterface $request, - ResponseInterface $response - ) { + public function extractCookies(RequestInterface $request, ResponseInterface $response): void + { if ($cookieHeader = $response->getHeader('Set-Cookie')) { foreach ($cookieHeader as $cookie) { $sc = SetCookie::fromString($cookie); if (!$sc->getDomain()) { $sc->setDomain($request->getUri()->getHost()); } - if (0 !== strpos($sc->getPath(), '/')) { + if (0 !== \strpos($sc->getPath(), '/')) { $sc->setPath($this->getCookiePathFromRequest($request)); } $this->setCookie($sc); @@ -247,30 +250,28 @@ class CookieJar implements CookieJarInterface * Computes cookie path following RFC 6265 section 5.1.4 * * @link https://tools.ietf.org/html/rfc6265#section-5.1.4 - * - * @param RequestInterface $request - * @return string */ - private function getCookiePathFromRequest(RequestInterface $request) + private function getCookiePathFromRequest(RequestInterface $request): string { $uriPath = $request->getUri()->getPath(); - if ('' === $uriPath) { + if ('' === $uriPath) { return '/'; } - if (0 !== strpos($uriPath, '/')) { + if (0 !== \strpos($uriPath, '/')) { return '/'; } if ('/' === $uriPath) { return '/'; } - if (0 === $lastSlashPos = strrpos($uriPath, '/')) { + $lastSlashPos = \strrpos($uriPath, '/'); + if (0 === $lastSlashPos || false === $lastSlashPos) { return '/'; } - return substr($uriPath, 0, $lastSlashPos); + return \substr($uriPath, 0, $lastSlashPos); } - public function withCookieHeader(RequestInterface $request) + public function withCookieHeader(RequestInterface $request): RequestInterface { $values = []; $uri = $request->getUri(); @@ -290,17 +291,15 @@ class CookieJar implements CookieJarInterface } return $values - ? $request->withHeader('Cookie', implode('; ', $values)) + ? $request->withHeader('Cookie', \implode('; ', $values)) : $request; } /** * If a cookie already exists and the server asks to set it again with a * null value, the cookie must be deleted. - * - * @param SetCookie $cookie */ - private function removeCookieIfEmpty(SetCookie $cookie) + private function removeCookieIfEmpty(SetCookie $cookie): void { $cookieValue = $cookie->getValue(); if ($cookieValue === null || $cookieValue === '') { diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php index 2cf298a8..7df374b5 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php @@ -1,4 +1,5 @@ */ interface CookieJarInterface extends \Countable, \IteratorAggregate { @@ -26,7 +28,7 @@ interface CookieJarInterface extends \Countable, \IteratorAggregate * * @return RequestInterface returns the modified request. */ - public function withCookieHeader(RequestInterface $request); + public function withCookieHeader(RequestInterface $request): RequestInterface; /** * Extract cookies from an HTTP response and store them in the CookieJar. @@ -34,10 +36,7 @@ interface CookieJarInterface extends \Countable, \IteratorAggregate * @param RequestInterface $request Request that was sent * @param ResponseInterface $response Response that was received */ - public function extractCookies( - RequestInterface $request, - ResponseInterface $response - ); + public function extractCookies(RequestInterface $request, ResponseInterface $response): void; /** * Sets a cookie in the cookie jar. @@ -46,7 +45,7 @@ interface CookieJarInterface extends \Countable, \IteratorAggregate * * @return bool Returns true on success or false on failure */ - public function setCookie(SetCookie $cookie); + public function setCookie(SetCookie $cookie): bool; /** * Remove cookies currently held in the cookie jar. @@ -58,13 +57,11 @@ interface CookieJarInterface extends \Countable, \IteratorAggregate * arguments, then the cookie with the specified name, path and domain is * removed. * - * @param string $domain Clears cookies matching a domain - * @param string $path Clears cookies matching a domain and path - * @param string $name Clears cookies matching a domain, path, and name - * - * @return CookieJarInterface + * @param string|null $domain Clears cookies matching a domain + * @param string|null $path Clears cookies matching a domain and path + * @param string|null $name Clears cookies matching a domain, path, and name */ - public function clear($domain = null, $path = null, $name = null); + public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void; /** * Discard all sessions cookies. @@ -73,12 +70,10 @@ interface CookieJarInterface extends \Countable, \IteratorAggregate * field set to true. To be called when the user agent shuts down according * to RFC 2965. */ - public function clearSessionCookies(); + public function clearSessionCookies(): void; /** * Converts the cookie jar to an array. - * - * @return array */ - public function toArray(); + public function toArray(): array; } diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php b/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php index 9887c1d5..290236d5 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php @@ -1,32 +1,40 @@ filename = $cookieFile; $this->storeSessionCookies = $storeSessionCookies; - if (file_exists($cookieFile)) { + if (\file_exists($cookieFile)) { $this->load($cookieFile); } } @@ -43,20 +51,21 @@ class FileCookieJar extends CookieJar * Saves the cookies to a file. * * @param string $filename File to save + * * @throws \RuntimeException if the file cannot be found or created */ - public function save($filename) + public function save(string $filename): void { $json = []; + /** @var SetCookie $cookie */ foreach ($this as $cookie) { - /** @var SetCookie $cookie */ if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) { $json[] = $cookie->toArray(); } } - $jsonStr = \GuzzleHttp\json_encode($json); - if (false === file_put_contents($filename, $jsonStr)) { + $jsonStr = Utils::jsonEncode($json); + if (false === \file_put_contents($filename, $jsonStr, \LOCK_EX)) { throw new \RuntimeException("Unable to save file {$filename}"); } } @@ -67,23 +76,25 @@ class FileCookieJar extends CookieJar * Old cookies are kept unless overwritten by newly loaded ones. * * @param string $filename Cookie file to load. + * * @throws \RuntimeException if the file cannot be loaded. */ - public function load($filename) + public function load(string $filename): void { - $json = file_get_contents($filename); + $json = \file_get_contents($filename); if (false === $json) { throw new \RuntimeException("Unable to load file {$filename}"); - } elseif ($json === '') { + } + if ($json === '') { return; } - $data = \GuzzleHttp\json_decode($json, true); - if (is_array($data)) { - foreach (json_decode($json, true) as $cookie) { + $data = Utils::jsonDecode($json, true); + if (\is_array($data)) { + foreach ($data as $cookie) { $this->setCookie(new SetCookie($cookie)); } - } elseif (strlen($data)) { + } elseif (\is_scalar($data) && !empty($data)) { throw new \RuntimeException("Invalid cookie file: {$filename}"); } } diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php index 4497bcf0..5d51ca98 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php @@ -1,4 +1,5 @@ sessionKey = $sessionKey; $this->storeSessionCookies = $storeSessionCookies; $this->load(); @@ -38,33 +44,33 @@ class SessionCookieJar extends CookieJar /** * Save cookies to the client session */ - public function save() + public function save(): void { $json = []; + /** @var SetCookie $cookie */ foreach ($this as $cookie) { - /** @var SetCookie $cookie */ if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) { $json[] = $cookie->toArray(); } } - $_SESSION[$this->sessionKey] = json_encode($json); + $_SESSION[$this->sessionKey] = \json_encode($json); } /** * Load the contents of the client session into the data array */ - protected function load() + protected function load(): void { if (!isset($_SESSION[$this->sessionKey])) { return; } - $data = json_decode($_SESSION[$this->sessionKey], true); - if (is_array($data)) { + $data = \json_decode($_SESSION[$this->sessionKey], true); + if (\is_array($data)) { foreach ($data as $cookie) { $this->setCookie(new SetCookie($cookie)); } - } elseif (strlen($data)) { + } elseif (\strlen($data)) { throw new \RuntimeException("Invalid cookie data"); } } diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php index f6993943..7c04034d 100644 --- a/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php +++ b/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php @@ -1,4 +1,5 @@ null, 'Value' => null, @@ -19,42 +22,42 @@ class SetCookie 'HttpOnly' => false ]; - /** @var array Cookie data */ + /** + * @var array Cookie data + */ private $data; /** - * Create a new SetCookie object from a string + * Create a new SetCookie object from a string. * * @param string $cookie Set-Cookie header string - * - * @return self */ - public static function fromString($cookie) + public static function fromString(string $cookie): self { // Create the default return array $data = self::$defaults; // Explode the cookie string using a series of semicolons - $pieces = array_filter(array_map('trim', explode(';', $cookie))); + $pieces = \array_filter(\array_map('trim', \explode(';', $cookie))); // The name of the cookie (first kvp) must exist and include an equal sign. - if (empty($pieces[0]) || !strpos($pieces[0], '=')) { + if (!isset($pieces[0]) || \strpos($pieces[0], '=') === false) { return new self($data); } // Add the cookie pieces into the parsed data array foreach ($pieces as $part) { - $cookieParts = explode('=', $part, 2); - $key = trim($cookieParts[0]); + $cookieParts = \explode('=', $part, 2); + $key = \trim($cookieParts[0]); $value = isset($cookieParts[1]) - ? trim($cookieParts[1], " \n\r\t\0\x0B") + ? \trim($cookieParts[1], " \n\r\t\0\x0B") : true; // Only check for non-cookies when cookies have been found - if (empty($data['Name'])) { + if (!isset($data['Name'])) { $data['Name'] = $key; $data['Value'] = $value; } else { - foreach (array_keys(self::$defaults) as $search) { - if (!strcasecmp($search, $key)) { + foreach (\array_keys(self::$defaults) as $search) { + if (!\strcasecmp($search, $key)) { $data[$search] = $value; continue 2; } @@ -71,39 +74,45 @@ class SetCookie */ public function __construct(array $data = []) { - $this->data = array_replace(self::$defaults, $data); + /** @var array|null $replaced will be null in case of replace error */ + $replaced = \array_replace(self::$defaults, $data); + if ($replaced === null) { + throw new \InvalidArgumentException('Unable to replace the default values for the Cookie.'); + } + + $this->data = $replaced; // Extract the Expires value and turn it into a UNIX timestamp if needed if (!$this->getExpires() && $this->getMaxAge()) { // Calculate the Expires date - $this->setExpires(time() + $this->getMaxAge()); - } elseif ($this->getExpires() && !is_numeric($this->getExpires())) { - $this->setExpires($this->getExpires()); + $this->setExpires(\time() + $this->getMaxAge()); + } elseif (null !== ($expires = $this->getExpires()) && !\is_numeric($expires)) { + $this->setExpires($expires); } } public function __toString() { - $str = $this->data['Name'] . '=' . $this->data['Value'] . '; '; + $str = $this->data['Name'] . '=' . ($this->data['Value'] ?? '') . '; '; foreach ($this->data as $k => $v) { if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== false) { if ($k === 'Expires') { - $str .= 'Expires=' . gmdate('D, d M Y H:i:s \G\M\T', $v) . '; '; + $str .= 'Expires=' . \gmdate('D, d M Y H:i:s \G\M\T', $v) . '; '; } else { $str .= ($v === true ? $k : "{$k}={$v}") . '; '; } } } - return rtrim($str, '; '); + return \rtrim($str, '; '); } - public function toArray() + public function toArray(): array { return $this->data; } /** - * Get the cookie name + * Get the cookie name. * * @return string */ @@ -113,19 +122,23 @@ class SetCookie } /** - * Set the cookie name + * Set the cookie name. * * @param string $name Cookie name */ - public function setName($name) + public function setName($name): void { - $this->data['Name'] = $name; + if (!is_string($name)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + + $this->data['Name'] = (string) $name; } /** - * Get the cookie value + * Get the cookie value. * - * @return string + * @return string|null */ public function getValue() { @@ -133,17 +146,21 @@ class SetCookie } /** - * Set the cookie value + * Set the cookie value. * * @param string $value Cookie value */ - public function setValue($value) + public function setValue($value): void { - $this->data['Value'] = $value; + if (!is_string($value)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + + $this->data['Value'] = (string) $value; } /** - * Get the domain + * Get the domain. * * @return string|null */ @@ -153,17 +170,21 @@ class SetCookie } /** - * Set the domain of the cookie + * Set the domain of the cookie. * - * @param string $domain + * @param string|null $domain */ - public function setDomain($domain) + public function setDomain($domain): void { - $this->data['Domain'] = $domain; + if (!is_string($domain) && null !== $domain) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + + $this->data['Domain'] = null === $domain ? null : (string) $domain; } /** - * Get the path + * Get the path. * * @return string */ @@ -173,39 +194,47 @@ class SetCookie } /** - * Set the path of the cookie + * Set the path of the cookie. * * @param string $path Path of the cookie */ - public function setPath($path) + public function setPath($path): void { - $this->data['Path'] = $path; + if (!is_string($path)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + + $this->data['Path'] = (string) $path; } /** - * Maximum lifetime of the cookie in seconds + * Maximum lifetime of the cookie in seconds. * * @return int|null */ public function getMaxAge() { - return $this->data['Max-Age']; + return null === $this->data['Max-Age'] ? null : (int) $this->data['Max-Age']; } /** - * Set the max-age of the cookie + * Set the max-age of the cookie. * - * @param int $maxAge Max age of the cookie in seconds + * @param int|null $maxAge Max age of the cookie in seconds */ - public function setMaxAge($maxAge) + public function setMaxAge($maxAge): void { - $this->data['Max-Age'] = $maxAge; + if (!is_int($maxAge) && null !== $maxAge) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an int or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + + $this->data['Max-Age'] = $maxAge === null ? null : (int) $maxAge; } /** - * The UNIX timestamp when the cookie Expires + * The UNIX timestamp when the cookie Expires. * - * @return mixed + * @return string|int|null */ public function getExpires() { @@ -213,21 +242,23 @@ class SetCookie } /** - * Set the unix timestamp for which the cookie will expire + * Set the unix timestamp for which the cookie will expire. * - * @param int $timestamp Unix timestamp + * @param int|string|null $timestamp Unix timestamp or any English textual datetime description. */ - public function setExpires($timestamp) + public function setExpires($timestamp): void { - $this->data['Expires'] = is_numeric($timestamp) - ? (int) $timestamp - : strtotime($timestamp); + if (!is_int($timestamp) && !is_string($timestamp) && null !== $timestamp) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an int, string or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + + $this->data['Expires'] = null === $timestamp ? null : (\is_numeric($timestamp) ? (int) $timestamp : \strtotime((string) $timestamp)); } /** - * Get whether or not this is a secure cookie + * Get whether or not this is a secure cookie. * - * @return null|bool + * @return bool */ public function getSecure() { @@ -235,19 +266,23 @@ class SetCookie } /** - * Set whether or not the cookie is secure + * Set whether or not the cookie is secure. * * @param bool $secure Set to true or false if secure */ - public function setSecure($secure) + public function setSecure($secure): void { - $this->data['Secure'] = $secure; + if (!is_bool($secure)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + + $this->data['Secure'] = (bool) $secure; } /** - * Get whether or not this is a session cookie + * Get whether or not this is a session cookie. * - * @return null|bool + * @return bool|null */ public function getDiscard() { @@ -255,17 +290,21 @@ class SetCookie } /** - * Set whether or not this is a session cookie + * Set whether or not this is a session cookie. * * @param bool $discard Set to true or false if this is a session cookie */ - public function setDiscard($discard) + public function setDiscard($discard): void { - $this->data['Discard'] = $discard; + if (!is_bool($discard)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + + $this->data['Discard'] = (bool) $discard; } /** - * Get whether or not this is an HTTP only cookie + * Get whether or not this is an HTTP only cookie. * * @return bool */ @@ -275,13 +314,17 @@ class SetCookie } /** - * Set whether or not this is an HTTP only cookie + * Set whether or not this is an HTTP only cookie. * * @param bool $httpOnly Set to true or false if this is HTTP only */ - public function setHttpOnly($httpOnly) + public function setHttpOnly($httpOnly): void { - $this->data['HttpOnly'] = $httpOnly; + if (!is_bool($httpOnly)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + + $this->data['HttpOnly'] = (bool) $httpOnly; } /** @@ -298,10 +341,8 @@ class SetCookie * path is a %x2F ("/") character. * * @param string $requestPath Path to check against - * - * @return bool */ - public function matchesPath($requestPath) + public function matchesPath(string $requestPath): bool { $cookiePath = $this->getPath(); @@ -311,71 +352,71 @@ class SetCookie } // Ensure that the cookie-path is a prefix of the request path. - if (0 !== strpos($requestPath, $cookiePath)) { + if (0 !== \strpos($requestPath, $cookiePath)) { return false; } // Match if the last character of the cookie-path is "/" - if (substr($cookiePath, -1, 1) === '/') { + if (\substr($cookiePath, -1, 1) === '/') { return true; } // Match if the first character not included in cookie path is "/" - return substr($requestPath, strlen($cookiePath), 1) === '/'; + return \substr($requestPath, \strlen($cookiePath), 1) === '/'; } /** - * Check if the cookie matches a domain value + * Check if the cookie matches a domain value. * * @param string $domain Domain to check against - * - * @return bool */ - public function matchesDomain($domain) + public function matchesDomain(string $domain): bool { + $cookieDomain = $this->getDomain(); + if (null === $cookieDomain) { + return true; + } + // Remove the leading '.' as per spec in RFC 6265. - // http://tools.ietf.org/html/rfc6265#section-5.2.3 - $cookieDomain = ltrim($this->getDomain(), '.'); + // https://tools.ietf.org/html/rfc6265#section-5.2.3 + $cookieDomain = \ltrim($cookieDomain, '.'); // Domain not set or exact match. - if (!$cookieDomain || !strcasecmp($domain, $cookieDomain)) { + if (!$cookieDomain || !\strcasecmp($domain, $cookieDomain)) { return true; } // Matching the subdomain according to RFC 6265. - // http://tools.ietf.org/html/rfc6265#section-5.1.3 - if (filter_var($domain, FILTER_VALIDATE_IP)) { + // https://tools.ietf.org/html/rfc6265#section-5.1.3 + if (\filter_var($domain, \FILTER_VALIDATE_IP)) { return false; } - return (bool) preg_match('/\.' . preg_quote($cookieDomain, '/') . '$/', $domain); + return (bool) \preg_match('/\.' . \preg_quote($cookieDomain, '/') . '$/', $domain); } /** - * Check if the cookie is expired - * - * @return bool + * Check if the cookie is expired. */ - public function isExpired() + public function isExpired(): bool { - return $this->getExpires() !== null && time() > $this->getExpires(); + return $this->getExpires() !== null && \time() > $this->getExpires(); } /** - * Check if the cookie is valid according to RFC 6265 + * Check if the cookie is valid according to RFC 6265. * * @return bool|string Returns true if valid or an error message if invalid */ public function validate() { - // Names must not be empty, but can be 0 $name = $this->getName(); - if (empty($name) && !is_numeric($name)) { + if ($name === '') { return 'The cookie name must not be empty'; } // Check if any of the invalid characters are present in the cookie name - if (preg_match( + if (\preg_match( '/[\x00-\x20\x22\x28-\x29\x2c\x2f\x3a-\x40\x5c\x7b\x7d\x7f]/', $name )) { @@ -384,17 +425,17 @@ class SetCookie . 'following characters: ()<>@,;:\"/?={}'; } - // Value must not be empty, but can be 0 + // Value must not be null. 0 and empty string are valid. Empty strings + // are technically against RFC 6265, but known to happen in the wild. $value = $this->getValue(); - if (empty($value) && !is_numeric($value)) { + if ($value === null) { return 'The cookie value must not be empty'; } - // Domains must not be empty, but can be 0 - // A "0" is not a valid internet domain, but may be used as server name - // in a private network. + // Domains must not be empty, but can be 0. "0" is not a valid internet + // domain, but may be used as server name in a private network. $domain = $this->getDomain(); - if (empty($domain) && !is_numeric($domain)) { + if ($domain === null || $domain === '') { return 'The cookie domain must not be empty'; } diff --git a/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php b/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php index 427d896f..a80956c9 100644 --- a/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php +++ b/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php @@ -1,4 +1,5 @@ request = $request; + $this->handlerContext = $handlerContext; } /** - * @return null + * Get the request that caused the exception */ - public function getResponse() + public function getRequest(): RequestInterface { - return null; + return $this->request; } /** - * @return bool + * Get contextual information about the error from the underlying handler. + * + * The contents of this array will vary depending on which handler you are + * using. It may also be just an empty array. Relying on this data will + * couple you to a specific handler, but can give more debug information + * when needed. */ - public function hasResponse() + public function getHandlerContext(): array { - return false; + return $this->handlerContext; } } diff --git a/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php b/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php index 510778f6..fa3ed699 100644 --- a/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php +++ b/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php @@ -1,13 +1,9 @@ getStatusCode() - : 0; + $code = $response ? $response->getStatusCode() : 0; parent::__construct($message, $code, $previous); $this->request = $request; $this->response = $response; @@ -39,46 +46,39 @@ class RequestException extends TransferException /** * Wrap non-RequestExceptions with a RequestException - * - * @param RequestInterface $request - * @param \Exception $e - * - * @return RequestException */ - public static function wrapException(RequestInterface $request, \Exception $e) + public static function wrapException(RequestInterface $request, \Throwable $e): RequestException { - return $e instanceof RequestException - ? $e - : new RequestException($e->getMessage(), $request, null, $e); + return $e instanceof RequestException ? $e : new RequestException($e->getMessage(), $request, null, $e); } /** * Factory method to create a new exception with a normalized error message * - * @param RequestInterface $request Request - * @param ResponseInterface $response Response received - * @param \Exception $previous Previous exception - * @param array $ctx Optional handler context. - * - * @return self + * @param RequestInterface $request Request sent + * @param ResponseInterface $response Response received + * @param \Throwable|null $previous Previous exception + * @param array $handlerContext Optional handler context + * @param BodySummarizerInterface|null $bodySummarizer Optional body summarizer */ public static function create( RequestInterface $request, ResponseInterface $response = null, - \Exception $previous = null, - array $ctx = [] - ) { + \Throwable $previous = null, + array $handlerContext = [], + BodySummarizerInterface $bodySummarizer = null + ): self { if (!$response) { return new self( 'Error completing request', $request, null, $previous, - $ctx + $handlerContext ); } - $level = (int) floor($response->getStatusCode() / 100); + $level = (int) \floor($response->getStatusCode() / 100); if ($level === 4) { $label = 'Client error'; $className = ClientException::class; @@ -95,76 +95,33 @@ class RequestException extends TransferException // Client Error: `GET /` resulted in a `404 Not Found` response: // ... (truncated) - $message = sprintf( + $message = \sprintf( '%s: `%s %s` resulted in a `%s %s` response', $label, $request->getMethod(), - $uri, + $uri->__toString(), $response->getStatusCode(), $response->getReasonPhrase() ); - $summary = static::getResponseBodySummary($response); + $summary = ($bodySummarizer ?? new BodySummarizer())->summarize($response); if ($summary !== null) { $message .= ":\n{$summary}\n"; } - return new $className($message, $request, $response, $previous, $ctx); + return new $className($message, $request, $response, $previous, $handlerContext); } /** - * Get a short summary of the response - * - * Will return `null` if the response is not printable. - * - * @param ResponseInterface $response - * - * @return string|null + * Obfuscates URI if there is a username and a password present */ - public static function getResponseBodySummary(ResponseInterface $response) - { - $body = $response->getBody(); - - if (!$body->isSeekable()) { - return null; - } - - $size = $body->getSize(); - - if ($size === 0) { - return null; - } - - $summary = $body->read(120); - $body->rewind(); - - if ($size > 120) { - $summary .= ' (truncated...)'; - } - - // Matches any printable character, including unicode characters: - // letters, marks, numbers, punctuation, spacing, and separators. - if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/', $summary)) { - return null; - } - - return $summary; - } - - /** - * Obfuscates URI if there is an username and a password present - * - * @param UriInterface $uri - * - * @return UriInterface - */ - private static function obfuscateUri($uri) + private static function obfuscateUri(UriInterface $uri): UriInterface { $userInfo = $uri->getUserInfo(); - if (false !== ($pos = strpos($userInfo, ':'))) { - return $uri->withUserInfo(substr($userInfo, 0, $pos), '***'); + if (false !== ($pos = \strpos($userInfo, ':'))) { + return $uri->withUserInfo(\substr($userInfo, 0, $pos), '***'); } return $uri; @@ -172,30 +129,24 @@ class RequestException extends TransferException /** * Get the request that caused the exception - * - * @return RequestInterface */ - public function getRequest() + public function getRequest(): RequestInterface { return $this->request; } /** * Get the associated response - * - * @return ResponseInterface|null */ - public function getResponse() + public function getResponse(): ?ResponseInterface { return $this->response; } /** * Check if a response was received - * - * @return bool */ - public function hasResponse() + public function hasResponse(): bool { return $this->response !== null; } @@ -207,10 +158,8 @@ class RequestException extends TransferException * using. It may also be just an empty array. Relying on this data will * couple you to a specific handler, but can give more debug information * when needed. - * - * @return array */ - public function getHandlerContext() + public function getHandlerContext(): array { return $this->handlerContext; } diff --git a/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php b/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php deleted file mode 100644 index a77c2892..00000000 --- a/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php +++ /dev/null @@ -1,27 +0,0 @@ -stream = $stream; - $msg = $msg ?: 'Could not seek the stream to position ' . $pos; - parent::__construct($msg); - } - - /** - * @return StreamInterface - */ - public function getStream() - { - return $this->stream; - } -} diff --git a/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php b/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php index 7cdd3408..8055e067 100644 --- a/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php +++ b/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php @@ -1,7 +1,10 @@ maxHandles = $maxHandles; } - public function create(RequestInterface $request, array $options) + public function create(RequestInterface $request, array $options): EasyHandle { if (isset($options['curl']['body_as_string'])) { $options['_body_as_string'] = $options['curl']['body_as_string']; @@ -46,35 +62,33 @@ class CurlFactory implements CurlFactoryInterface // Add handler options from the request configuration options if (isset($options['curl'])) { - $conf = array_replace($conf, $options['curl']); + $conf = \array_replace($conf, $options['curl']); } - $conf[CURLOPT_HEADERFUNCTION] = $this->createHeaderFn($easy); - $easy->handle = $this->handles - ? array_pop($this->handles) - : curl_init(); + $conf[\CURLOPT_HEADERFUNCTION] = $this->createHeaderFn($easy); + $easy->handle = $this->handles ? \array_pop($this->handles) : \curl_init(); curl_setopt_array($easy->handle, $conf); return $easy; } - public function release(EasyHandle $easy) + public function release(EasyHandle $easy): void { $resource = $easy->handle; unset($easy->handle); - if (count($this->handles) >= $this->maxHandles) { - curl_close($resource); + if (\count($this->handles) >= $this->maxHandles) { + \curl_close($resource); } else { // Remove all callback functions as they can hold onto references // and are not cleaned up by curl_reset. Using curl_setopt_array // does not work for some reason, so removing each one // individually. - curl_setopt($resource, CURLOPT_HEADERFUNCTION, null); - curl_setopt($resource, CURLOPT_READFUNCTION, null); - curl_setopt($resource, CURLOPT_WRITEFUNCTION, null); - curl_setopt($resource, CURLOPT_PROGRESSFUNCTION, null); - curl_reset($resource); + \curl_setopt($resource, \CURLOPT_HEADERFUNCTION, null); + \curl_setopt($resource, \CURLOPT_READFUNCTION, null); + \curl_setopt($resource, \CURLOPT_WRITEFUNCTION, null); + \curl_setopt($resource, \CURLOPT_PROGRESSFUNCTION, null); + \curl_reset($resource); $this->handles[] = $resource; } } @@ -83,17 +97,11 @@ class CurlFactory implements CurlFactoryInterface * Completes a cURL transaction, either returning a response promise or a * rejected promise. * - * @param callable $handler - * @param EasyHandle $easy - * @param CurlFactoryInterface $factory Dictates how the handle is released - * - * @return \GuzzleHttp\Promise\PromiseInterface + * @param callable(RequestInterface, array): PromiseInterface $handler + * @param CurlFactoryInterface $factory Dictates how the handle is released */ - public static function finish( - callable $handler, - EasyHandle $easy, - CurlFactoryInterface $factory - ) { + public static function finish(callable $handler, EasyHandle $easy, CurlFactoryInterface $factory): PromiseInterface + { if (isset($easy->options['on_stats'])) { self::invokeStats($easy); } @@ -114,9 +122,10 @@ class CurlFactory implements CurlFactoryInterface return new FulfilledPromise($easy->response); } - private static function invokeStats(EasyHandle $easy) + private static function invokeStats(EasyHandle $easy): void { - $curlStats = curl_getinfo($easy->handle); + $curlStats = \curl_getinfo($easy->handle); + $curlStats['appconnect_time'] = \curl_getinfo($easy->handle, \CURLINFO_APPCONNECT_TIME); $stats = new TransferStats( $easy->request, $easy->response, @@ -124,45 +133,57 @@ class CurlFactory implements CurlFactoryInterface $easy->errno, $curlStats ); - call_user_func($easy->options['on_stats'], $stats); + ($easy->options['on_stats'])($stats); } - private static function finishError( - callable $handler, - EasyHandle $easy, - CurlFactoryInterface $factory - ) { + /** + * @param callable(RequestInterface, array): PromiseInterface $handler + */ + private static function finishError(callable $handler, EasyHandle $easy, CurlFactoryInterface $factory): PromiseInterface + { // Get error information and release the handle to the factory. $ctx = [ 'errno' => $easy->errno, - 'error' => curl_error($easy->handle), - ] + curl_getinfo($easy->handle); + 'error' => \curl_error($easy->handle), + 'appconnect_time' => \curl_getinfo($easy->handle, \CURLINFO_APPCONNECT_TIME), + ] + \curl_getinfo($easy->handle); + $ctx[self::CURL_VERSION_STR] = \curl_version()['version']; $factory->release($easy); // Retry when nothing is present or when curl failed to rewind. - if (empty($easy->options['_err_message']) - && (!$easy->errno || $easy->errno == 65) - ) { + if (empty($easy->options['_err_message']) && (!$easy->errno || $easy->errno == 65)) { return self::retryFailedRewind($handler, $easy, $ctx); } return self::createRejection($easy, $ctx); } - private static function createRejection(EasyHandle $easy, array $ctx) + private static function createRejection(EasyHandle $easy, array $ctx): PromiseInterface { static $connectionErrors = [ - CURLE_OPERATION_TIMEOUTED => true, - CURLE_COULDNT_RESOLVE_HOST => true, - CURLE_COULDNT_CONNECT => true, - CURLE_SSL_CONNECT_ERROR => true, - CURLE_GOT_NOTHING => true, + \CURLE_OPERATION_TIMEOUTED => true, + \CURLE_COULDNT_RESOLVE_HOST => true, + \CURLE_COULDNT_CONNECT => true, + \CURLE_SSL_CONNECT_ERROR => true, + \CURLE_GOT_NOTHING => true, ]; + if ($easy->createResponseException) { + return P\Create::rejectionFor( + new RequestException( + 'An error was encountered while creating the response', + $easy->request, + $easy->response, + $easy->createResponseException, + $ctx + ) + ); + } + // If an exception was encountered during the onHeaders event, then // return a rejected promise that wraps that exception. if ($easy->onHeadersException) { - return \GuzzleHttp\Promise\rejection_for( + return P\Create::rejectionFor( new RequestException( 'An error was encountered during the on_headers event', $easy->request, @@ -173,49 +194,56 @@ class CurlFactory implements CurlFactoryInterface ); } - $message = sprintf( + $message = \sprintf( 'cURL error %s: %s (%s)', $ctx['errno'], $ctx['error'], - 'see http://curl.haxx.se/libcurl/c/libcurl-errors.html' + 'see https://curl.haxx.se/libcurl/c/libcurl-errors.html' ); + $uriString = (string) $easy->request->getUri(); + if ($uriString !== '' && false === \strpos($ctx['error'], $uriString)) { + $message .= \sprintf(' for %s', $uriString); + } // Create a connection exception if it was a specific error code. $error = isset($connectionErrors[$easy->errno]) ? new ConnectException($message, $easy->request, null, $ctx) : new RequestException($message, $easy->request, $easy->response, null, $ctx); - return \GuzzleHttp\Promise\rejection_for($error); + return P\Create::rejectionFor($error); } - private function getDefaultConf(EasyHandle $easy) + /** + * @return array + */ + private function getDefaultConf(EasyHandle $easy): array { $conf = [ - '_headers' => $easy->request->getHeaders(), - CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(), - CURLOPT_URL => (string) $easy->request->getUri()->withFragment(''), - CURLOPT_RETURNTRANSFER => false, - CURLOPT_HEADER => false, - CURLOPT_CONNECTTIMEOUT => 150, + '_headers' => $easy->request->getHeaders(), + \CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(), + \CURLOPT_URL => (string) $easy->request->getUri()->withFragment(''), + \CURLOPT_RETURNTRANSFER => false, + \CURLOPT_HEADER => false, + \CURLOPT_CONNECTTIMEOUT => 150, ]; - if (defined('CURLOPT_PROTOCOLS')) { - $conf[CURLOPT_PROTOCOLS] = CURLPROTO_HTTP | CURLPROTO_HTTPS; + if (\defined('CURLOPT_PROTOCOLS')) { + $conf[\CURLOPT_PROTOCOLS] = \CURLPROTO_HTTP | \CURLPROTO_HTTPS; } $version = $easy->request->getProtocolVersion(); if ($version == 1.1) { - $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_1; + $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_1_1; } elseif ($version == 2.0) { - $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_2_0; + $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_2_0; } else { - $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_0; + $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_1_0; } return $conf; } - private function applyMethod(EasyHandle $easy, array &$conf) + private function applyMethod(EasyHandle $easy, array &$conf): void { $body = $easy->request->getBody(); $size = $body->getSize(); @@ -227,22 +255,22 @@ class CurlFactory implements CurlFactoryInterface $method = $easy->request->getMethod(); if ($method === 'PUT' || $method === 'POST') { - // See http://tools.ietf.org/html/rfc7230#section-3.3.2 + // See https://tools.ietf.org/html/rfc7230#section-3.3.2 if (!$easy->request->hasHeader('Content-Length')) { - $conf[CURLOPT_HTTPHEADER][] = 'Content-Length: 0'; + $conf[\CURLOPT_HTTPHEADER][] = 'Content-Length: 0'; } } elseif ($method === 'HEAD') { - $conf[CURLOPT_NOBODY] = true; + $conf[\CURLOPT_NOBODY] = true; unset( - $conf[CURLOPT_WRITEFUNCTION], - $conf[CURLOPT_READFUNCTION], - $conf[CURLOPT_FILE], - $conf[CURLOPT_INFILE] + $conf[\CURLOPT_WRITEFUNCTION], + $conf[\CURLOPT_READFUNCTION], + $conf[\CURLOPT_FILE], + $conf[\CURLOPT_INFILE] ); } } - private function applyBody(RequestInterface $request, array $options, array &$conf) + private function applyBody(RequestInterface $request, array $options, array &$conf): void { $size = $request->hasHeader('Content-Length') ? (int) $request->getHeaderLine('Content-Length') @@ -250,40 +278,38 @@ class CurlFactory implements CurlFactoryInterface // Send the body as a string if the size is less than 1MB OR if the // [curl][body_as_string] request value is set. - if (($size !== null && $size < 1000000) || - !empty($options['_body_as_string']) - ) { - $conf[CURLOPT_POSTFIELDS] = (string) $request->getBody(); + if (($size !== null && $size < 1000000) || !empty($options['_body_as_string'])) { + $conf[\CURLOPT_POSTFIELDS] = (string) $request->getBody(); // Don't duplicate the Content-Length header $this->removeHeader('Content-Length', $conf); $this->removeHeader('Transfer-Encoding', $conf); } else { - $conf[CURLOPT_UPLOAD] = true; + $conf[\CURLOPT_UPLOAD] = true; if ($size !== null) { - $conf[CURLOPT_INFILESIZE] = $size; + $conf[\CURLOPT_INFILESIZE] = $size; $this->removeHeader('Content-Length', $conf); } $body = $request->getBody(); if ($body->isSeekable()) { $body->rewind(); } - $conf[CURLOPT_READFUNCTION] = function ($ch, $fd, $length) use ($body) { + $conf[\CURLOPT_READFUNCTION] = static function ($ch, $fd, $length) use ($body) { return $body->read($length); }; } // If the Expect header is not present, prevent curl from adding it if (!$request->hasHeader('Expect')) { - $conf[CURLOPT_HTTPHEADER][] = 'Expect:'; + $conf[\CURLOPT_HTTPHEADER][] = 'Expect:'; } // cURL sometimes adds a content-type by default. Prevent this. if (!$request->hasHeader('Content-Type')) { - $conf[CURLOPT_HTTPHEADER][] = 'Content-Type:'; + $conf[\CURLOPT_HTTPHEADER][] = 'Content-Type:'; } } - private function applyHeaders(EasyHandle $easy, array &$conf) + private function applyHeaders(EasyHandle $easy, array &$conf): void { foreach ($conf['_headers'] as $name => $values) { foreach ($values as $value) { @@ -291,16 +317,16 @@ class CurlFactory implements CurlFactoryInterface if ($value === '') { // cURL requires a special format for empty headers. // See https://github.com/guzzle/guzzle/issues/1882 for more details. - $conf[CURLOPT_HTTPHEADER][] = "$name;"; + $conf[\CURLOPT_HTTPHEADER][] = "$name;"; } else { - $conf[CURLOPT_HTTPHEADER][] = "$name: $value"; + $conf[\CURLOPT_HTTPHEADER][] = "$name: $value"; } } } // Remove the Accept header if one was not set if (!$easy->request->hasHeader('Accept')) { - $conf[CURLOPT_HTTPHEADER][] = 'Accept:'; + $conf[\CURLOPT_HTTPHEADER][] = 'Accept:'; } } @@ -310,115 +336,115 @@ class CurlFactory implements CurlFactoryInterface * @param string $name Case-insensitive header to remove * @param array $options Array of options to modify */ - private function removeHeader($name, array &$options) + private function removeHeader(string $name, array &$options): void { - foreach (array_keys($options['_headers']) as $key) { - if (!strcasecmp($key, $name)) { + foreach (\array_keys($options['_headers']) as $key) { + if (!\strcasecmp($key, $name)) { unset($options['_headers'][$key]); return; } } } - private function applyHandlerOptions(EasyHandle $easy, array &$conf) + private function applyHandlerOptions(EasyHandle $easy, array &$conf): void { $options = $easy->options; if (isset($options['verify'])) { if ($options['verify'] === false) { - unset($conf[CURLOPT_CAINFO]); - $conf[CURLOPT_SSL_VERIFYHOST] = 0; - $conf[CURLOPT_SSL_VERIFYPEER] = false; + unset($conf[\CURLOPT_CAINFO]); + $conf[\CURLOPT_SSL_VERIFYHOST] = 0; + $conf[\CURLOPT_SSL_VERIFYPEER] = false; } else { - $conf[CURLOPT_SSL_VERIFYHOST] = 2; - $conf[CURLOPT_SSL_VERIFYPEER] = true; - if (is_string($options['verify'])) { + $conf[\CURLOPT_SSL_VERIFYHOST] = 2; + $conf[\CURLOPT_SSL_VERIFYPEER] = true; + if (\is_string($options['verify'])) { // Throw an error if the file/folder/link path is not valid or doesn't exist. - if (!file_exists($options['verify'])) { - throw new \InvalidArgumentException( - "SSL CA bundle not found: {$options['verify']}" - ); + if (!\file_exists($options['verify'])) { + throw new \InvalidArgumentException("SSL CA bundle not found: {$options['verify']}"); } // If it's a directory or a link to a directory use CURLOPT_CAPATH. // If not, it's probably a file, or a link to a file, so use CURLOPT_CAINFO. - if (is_dir($options['verify']) || - (is_link($options['verify']) && is_dir(readlink($options['verify'])))) { - $conf[CURLOPT_CAPATH] = $options['verify']; + if ( + \is_dir($options['verify']) || + ( + \is_link($options['verify']) === true && + ($verifyLink = \readlink($options['verify'])) !== false && + \is_dir($verifyLink) + ) + ) { + $conf[\CURLOPT_CAPATH] = $options['verify']; } else { - $conf[CURLOPT_CAINFO] = $options['verify']; + $conf[\CURLOPT_CAINFO] = $options['verify']; } } } } - if (!empty($options['decode_content'])) { + if (!isset($options['curl'][\CURLOPT_ENCODING]) && !empty($options['decode_content'])) { $accept = $easy->request->getHeaderLine('Accept-Encoding'); if ($accept) { - $conf[CURLOPT_ENCODING] = $accept; + $conf[\CURLOPT_ENCODING] = $accept; } else { - $conf[CURLOPT_ENCODING] = ''; - // Don't let curl send the header over the wire - $conf[CURLOPT_HTTPHEADER][] = 'Accept-Encoding:'; + // The empty string enables all available decoders and implicitly + // sets a matching 'Accept-Encoding' header. + $conf[\CURLOPT_ENCODING] = ''; + // But as the user did not specify any acceptable encodings we need + // to overwrite this implicit header with an empty one. + $conf[\CURLOPT_HTTPHEADER][] = 'Accept-Encoding:'; } } - if (isset($options['sink'])) { - $sink = $options['sink']; - if (!is_string($sink)) { - $sink = \GuzzleHttp\Psr7\stream_for($sink); - } elseif (!is_dir(dirname($sink))) { - // Ensure that the directory exists before failing in curl. - throw new \RuntimeException(sprintf( - 'Directory %s does not exist for sink value of %s', - dirname($sink), - $sink - )); - } else { - $sink = new LazyOpenStream($sink, 'w+'); - } - $easy->sink = $sink; - $conf[CURLOPT_WRITEFUNCTION] = function ($ch, $write) use ($sink) { - return $sink->write($write); - }; - } else { + if (!isset($options['sink'])) { // Use a default temp stream if no sink was set. - $conf[CURLOPT_FILE] = fopen('php://temp', 'w+'); - $easy->sink = Psr7\stream_for($conf[CURLOPT_FILE]); + $options['sink'] = \GuzzleHttp\Psr7\Utils::tryFopen('php://temp', 'w+'); } + $sink = $options['sink']; + if (!\is_string($sink)) { + $sink = \GuzzleHttp\Psr7\Utils::streamFor($sink); + } elseif (!\is_dir(\dirname($sink))) { + // Ensure that the directory exists before failing in curl. + throw new \RuntimeException(\sprintf('Directory %s does not exist for sink value of %s', \dirname($sink), $sink)); + } else { + $sink = new LazyOpenStream($sink, 'w+'); + } + $easy->sink = $sink; + $conf[\CURLOPT_WRITEFUNCTION] = static function ($ch, $write) use ($sink): int { + return $sink->write($write); + }; + $timeoutRequiresNoSignal = false; if (isset($options['timeout'])) { $timeoutRequiresNoSignal |= $options['timeout'] < 1; - $conf[CURLOPT_TIMEOUT_MS] = $options['timeout'] * 1000; + $conf[\CURLOPT_TIMEOUT_MS] = $options['timeout'] * 1000; } // CURL default value is CURL_IPRESOLVE_WHATEVER if (isset($options['force_ip_resolve'])) { if ('v4' === $options['force_ip_resolve']) { - $conf[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4; + $conf[\CURLOPT_IPRESOLVE] = \CURL_IPRESOLVE_V4; } elseif ('v6' === $options['force_ip_resolve']) { - $conf[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V6; + $conf[\CURLOPT_IPRESOLVE] = \CURL_IPRESOLVE_V6; } } if (isset($options['connect_timeout'])) { $timeoutRequiresNoSignal |= $options['connect_timeout'] < 1; - $conf[CURLOPT_CONNECTTIMEOUT_MS] = $options['connect_timeout'] * 1000; + $conf[\CURLOPT_CONNECTTIMEOUT_MS] = $options['connect_timeout'] * 1000; } - if ($timeoutRequiresNoSignal && strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') { - $conf[CURLOPT_NOSIGNAL] = true; + if ($timeoutRequiresNoSignal && \strtoupper(\substr(\PHP_OS, 0, 3)) !== 'WIN') { + $conf[\CURLOPT_NOSIGNAL] = true; } if (isset($options['proxy'])) { - if (!is_array($options['proxy'])) { - $conf[CURLOPT_PROXY] = $options['proxy']; + if (!\is_array($options['proxy'])) { + $conf[\CURLOPT_PROXY] = $options['proxy']; } else { $scheme = $easy->request->getUri()->getScheme(); if (isset($options['proxy'][$scheme])) { $host = $easy->request->getUri()->getHost(); - if (!isset($options['proxy']['no']) || - !\GuzzleHttp\is_host_in_noproxy($host, $options['proxy']['no']) - ) { - $conf[CURLOPT_PROXY] = $options['proxy'][$scheme]; + if (!isset($options['proxy']['no']) || !Utils::isHostInNoProxy($host, $options['proxy']['no'])) { + $conf[\CURLOPT_PROXY] = $options['proxy'][$scheme]; } } } @@ -426,53 +452,53 @@ class CurlFactory implements CurlFactoryInterface if (isset($options['cert'])) { $cert = $options['cert']; - if (is_array($cert)) { - $conf[CURLOPT_SSLCERTPASSWD] = $cert[1]; + if (\is_array($cert)) { + $conf[\CURLOPT_SSLCERTPASSWD] = $cert[1]; $cert = $cert[0]; } - if (!file_exists($cert)) { - throw new \InvalidArgumentException( - "SSL certificate not found: {$cert}" - ); + if (!\file_exists($cert)) { + throw new \InvalidArgumentException("SSL certificate not found: {$cert}"); } - $conf[CURLOPT_SSLCERT] = $cert; + # OpenSSL (versions 0.9.3 and later) also support "P12" for PKCS#12-encoded files. + # see https://curl.se/libcurl/c/CURLOPT_SSLCERTTYPE.html + $ext = pathinfo($cert, \PATHINFO_EXTENSION); + if (preg_match('#^(der|p12)$#i', $ext)) { + $conf[\CURLOPT_SSLCERTTYPE] = strtoupper($ext); + } + $conf[\CURLOPT_SSLCERT] = $cert; } if (isset($options['ssl_key'])) { - $sslKey = $options['ssl_key']; - if (is_array($sslKey)) { - $conf[CURLOPT_SSLKEYPASSWD] = $sslKey[1]; - $sslKey = $sslKey[0]; + if (\is_array($options['ssl_key'])) { + if (\count($options['ssl_key']) === 2) { + [$sslKey, $conf[\CURLOPT_SSLKEYPASSWD]] = $options['ssl_key']; + } else { + [$sslKey] = $options['ssl_key']; + } } - if (!file_exists($sslKey)) { - throw new \InvalidArgumentException( - "SSL private key not found: {$sslKey}" - ); + + $sslKey = $sslKey ?? $options['ssl_key']; + + if (!\file_exists($sslKey)) { + throw new \InvalidArgumentException("SSL private key not found: {$sslKey}"); } - $conf[CURLOPT_SSLKEY] = $sslKey; + $conf[\CURLOPT_SSLKEY] = $sslKey; } if (isset($options['progress'])) { $progress = $options['progress']; - if (!is_callable($progress)) { - throw new \InvalidArgumentException( - 'progress client option must be callable' - ); + if (!\is_callable($progress)) { + throw new \InvalidArgumentException('progress client option must be callable'); } - $conf[CURLOPT_NOPROGRESS] = false; - $conf[CURLOPT_PROGRESSFUNCTION] = function () use ($progress) { - $args = func_get_args(); - // PHP 5.5 pushed the handle onto the start of the args - if (is_resource($args[0])) { - array_shift($args); - } - call_user_func_array($progress, $args); + $conf[\CURLOPT_NOPROGRESS] = false; + $conf[\CURLOPT_PROGRESSFUNCTION] = static function ($resource, int $downloadSize, int $downloaded, int $uploadSize, int $uploaded) use ($progress) { + $progress($downloadSize, $downloaded, $uploadSize, $uploaded); }; } if (!empty($options['debug'])) { - $conf[CURLOPT_STDERR] = \GuzzleHttp\debug_resource($options['debug']); - $conf[CURLOPT_VERBOSE] = true; + $conf[\CURLOPT_STDERR] = Utils::debugResource($options['debug']); + $conf[\CURLOPT_VERBOSE] = true; } } @@ -484,12 +510,11 @@ class CurlFactory implements CurlFactoryInterface * stream, and then encountered a "necessary data rewind wasn't possible" * error, causing the request to be sent through curl_multi_info_read() * without an error status. + * + * @param callable(RequestInterface, array): PromiseInterface $handler */ - private static function retryFailedRewind( - callable $handler, - EasyHandle $easy, - array $ctx - ) { + private static function retryFailedRewind(callable $handler, EasyHandle $easy, array $ctx): PromiseInterface + { try { // Only rewind if the body has been read from. $body = $easy->request->getBody(); @@ -522,27 +547,32 @@ class CurlFactory implements CurlFactoryInterface return $handler($easy->request, $easy->options); } - private function createHeaderFn(EasyHandle $easy) + private function createHeaderFn(EasyHandle $easy): callable { if (isset($easy->options['on_headers'])) { $onHeaders = $easy->options['on_headers']; - if (!is_callable($onHeaders)) { + if (!\is_callable($onHeaders)) { throw new \InvalidArgumentException('on_headers must be callable'); } } else { $onHeaders = null; } - return function ($ch, $h) use ( + return static function ($ch, $h) use ( $onHeaders, $easy, &$startingResponse ) { - $value = trim($h); + $value = \trim($h); if ($value === '') { $startingResponse = true; - $easy->createResponse(); + try { + $easy->createResponse(); + } catch (\Exception $e) { + $easy->createResponseException = $e; + return -1; + } if ($onHeaders !== null) { try { $onHeaders($easy->response); @@ -559,7 +589,7 @@ class CurlFactory implements CurlFactoryInterface } else { $easy->headers[] = $value; } - return strlen($h); + return \strlen($h); }; } } diff --git a/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php b/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php index b0fc2368..fe57ed5d 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php @@ -1,4 +1,5 @@ factory = isset($options['handle_factory']) - ? $options['handle_factory'] - : new CurlFactory(3); + $this->factory = $options['handle_factory'] + ?? new CurlFactory(3); } - public function __invoke(RequestInterface $request, array $options) + public function __invoke(RequestInterface $request, array $options): PromiseInterface { if (isset($options['delay'])) { - usleep($options['delay'] * 1000); + \usleep($options['delay'] * 1000); } $easy = $this->factory->create($request, $options); - curl_exec($easy->handle); - $easy->errno = curl_errno($easy->handle); + \curl_exec($easy->handle); + $easy->errno = \curl_errno($easy->handle); return CurlFactory::finish($this, $easy, $this->factory); } diff --git a/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php index 2754d8e4..9e2e4703 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php @@ -1,9 +1,11 @@ An array of delay times, indexed by handle id in `addRequest`. + * + * @see CurlMultiHandler::addRequest + */ private $delays = []; + /** + * @var array An associative array of CURLMOPT_* options and corresponding values for curl_multi_setopt() + */ + private $options = []; + /** * This handler accepts the following options: * * - handle_factory: An optional factory used to create curl handles * - select_timeout: Optional timeout (in seconds) to block before timing * out while selecting curl handles. Defaults to 1 second. - * - * @param array $options + * - options: An associative array of CURLMOPT_* options and + * corresponding values for curl_multi_setopt() */ public function __construct(array $options = []) { - $this->factory = isset($options['handle_factory']) - ? $options['handle_factory'] : new CurlFactory(50); - $this->selectTimeout = isset($options['select_timeout']) - ? $options['select_timeout'] : 1; - } + $this->factory = $options['handle_factory'] ?? new CurlFactory(50); - public function __get($name) - { - if ($name === '_mh') { - return $this->_mh = curl_multi_init(); + if (isset($options['select_timeout'])) { + $this->selectTimeout = $options['select_timeout']; + } elseif ($selectTimeout = Utils::getenv('GUZZLE_CURL_SELECT_TIMEOUT')) { + @trigger_error('Since guzzlehttp/guzzle 7.2.0: Using environment variable GUZZLE_CURL_SELECT_TIMEOUT is deprecated. Use option "select_timeout" instead.', \E_USER_DEPRECATED); + $this->selectTimeout = (int) $selectTimeout; + } else { + $this->selectTimeout = 1; } - throw new \BadMethodCallException(); + $this->options = $options['options'] ?? []; + } + + /** + * @param string $name + * + * @return resource|\CurlMultiHandle + * + * @throws \BadMethodCallException when another field as `_mh` will be gotten + * @throws \RuntimeException when curl can not initialize a multi handle + */ + public function __get($name) + { + if ($name !== '_mh') { + throw new \BadMethodCallException("Can not get other property as '_mh'."); + } + + $multiHandle = \curl_multi_init(); + + if (false === $multiHandle) { + throw new \RuntimeException('Can not initialize curl multi handle.'); + } + + $this->_mh = $multiHandle; + + foreach ($this->options as $option => $value) { + // A warning is raised in case of a wrong option. + curl_multi_setopt($this->_mh, $option, $value); + } + + return $this->_mh; } public function __destruct() { if (isset($this->_mh)) { - curl_multi_close($this->_mh); + \curl_multi_close($this->_mh); unset($this->_mh); } } - public function __invoke(RequestInterface $request, array $options) + public function __invoke(RequestInterface $request, array $options): PromiseInterface { $easy = $this->factory->create($request, $options); $id = (int) $easy->handle; @@ -78,15 +138,15 @@ class CurlMultiHandler /** * Ticks the curl event loop. */ - public function tick() + public function tick(): void { // Add any delayed handles if needed. if ($this->delays) { - $currentTime = microtime(true); + $currentTime = Utils::currentTime(); foreach ($this->delays as $id => $delay) { if ($currentTime >= $delay) { unset($this->delays[$id]); - curl_multi_add_handle( + \curl_multi_add_handle( $this->_mh, $this->handles[$id]['easy']->handle ); @@ -95,17 +155,15 @@ class CurlMultiHandler } // Step through the task queue which may add additional requests. - P\queue()->run(); + P\Utils::queue()->run(); - if ($this->active && - curl_multi_select($this->_mh, $this->selectTimeout) === -1 - ) { + if ($this->active && \curl_multi_select($this->_mh, $this->selectTimeout) === -1) { // Perform a usleep if a select returns -1. // See: https://bugs.php.net/bug.php?id=61141 - usleep(250); + \usleep(250); } - while (curl_multi_exec($this->_mh, $this->active) === CURLM_CALL_MULTI_PERFORM); + while (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM); $this->processMessages(); } @@ -113,28 +171,28 @@ class CurlMultiHandler /** * Runs until all outstanding connections have completed. */ - public function execute() + public function execute(): void { - $queue = P\queue(); + $queue = P\Utils::queue(); while ($this->handles || !$queue->isEmpty()) { // If there are no transfers, then sleep for the next delay if (!$this->active && $this->delays) { - usleep($this->timeToNext()); + \usleep($this->timeToNext()); } $this->tick(); } } - private function addRequest(array $entry) + private function addRequest(array $entry): void { $easy = $entry['easy']; $id = (int) $easy->handle; $this->handles[$id] = $entry; if (empty($easy->options['delay'])) { - curl_multi_add_handle($this->_mh, $easy->handle); + \curl_multi_add_handle($this->_mh, $easy->handle); } else { - $this->delays[$id] = microtime(true) + ($easy->options['delay'] / 1000); + $this->delays[$id] = Utils::currentTime() + ($easy->options['delay'] / 1000); } } @@ -145,8 +203,12 @@ class CurlMultiHandler * * @return bool True on success, false on failure. */ - private function cancel($id) + private function cancel($id): bool { + if (!is_int($id)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an integer to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + // Cannot cancel if it has been processed. if (!isset($this->handles[$id])) { return false; @@ -154,17 +216,21 @@ class CurlMultiHandler $handle = $this->handles[$id]['easy']->handle; unset($this->delays[$id], $this->handles[$id]); - curl_multi_remove_handle($this->_mh, $handle); - curl_close($handle); + \curl_multi_remove_handle($this->_mh, $handle); + \curl_close($handle); return true; } - private function processMessages() + private function processMessages(): void { - while ($done = curl_multi_info_read($this->_mh)) { + while ($done = \curl_multi_info_read($this->_mh)) { + if ($done['msg'] !== \CURLMSG_DONE) { + // if it's not done, then it would be premature to remove the handle. ref https://github.com/guzzle/guzzle/pull/2892#issuecomment-945150216 + continue; + } $id = (int) $done['handle']; - curl_multi_remove_handle($this->_mh, $done['handle']); + \curl_multi_remove_handle($this->_mh, $done['handle']); if (!isset($this->handles[$id])) { // Probably was cancelled. @@ -175,25 +241,21 @@ class CurlMultiHandler unset($this->handles[$id], $this->delays[$id]); $entry['easy']->errno = $done['result']; $entry['deferred']->resolve( - CurlFactory::finish( - $this, - $entry['easy'], - $this->factory - ) + CurlFactory::finish($this, $entry['easy'], $this->factory) ); } } - private function timeToNext() + private function timeToNext(): int { - $currentTime = microtime(true); - $nextTime = PHP_INT_MAX; + $currentTime = Utils::currentTime(); + $nextTime = \PHP_INT_MAX; foreach ($this->delays as $time) { if ($time < $nextTime) { $nextTime = $time; } } - return max(0, $nextTime - $currentTime) * 1000000; + return ((int) \max(0, $nextTime - $currentTime)) * 1000000; } } diff --git a/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php b/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php index 7754e911..224344d7 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php @@ -1,7 +1,9 @@ headers)) { - throw new \RuntimeException('No headers have been received'); - } + [$ver, $status, $reason, $headers] = HeaderProcessor::parseHeaders($this->headers); - // HTTP-version SP status-code SP reason-phrase - $startLine = explode(' ', array_shift($this->headers), 3); - $headers = \GuzzleHttp\headers_from_lines($this->headers); - $normalizedKeys = \GuzzleHttp\normalize_header_keys($headers); + $normalizedKeys = Utils::normalizeHeaderKeys($headers); - if (!empty($this->options['decode_content']) - && isset($normalizedKeys['content-encoding']) - ) { - $headers['x-encoded-content-encoding'] - = $headers[$normalizedKeys['content-encoding']]; + if (!empty($this->options['decode_content']) && isset($normalizedKeys['content-encoding'])) { + $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']]; unset($headers[$normalizedKeys['content-encoding']]); if (isset($normalizedKeys['content-length'])) { - $headers['x-encoded-content-length'] - = $headers[$normalizedKeys['content-length']]; + $headers['x-encoded-content-length'] = $headers[$normalizedKeys['content-length']]; $bodyLength = (int) $this->sink->getSize(); if ($bodyLength) { @@ -74,19 +89,24 @@ final class EasyHandle // Attach a response to the easy handle with the parsed headers. $this->response = new Response( - $startLine[1], + $status, $headers, $this->sink, - substr($startLine[0], 5), - isset($startLine[2]) ? (string) $startLine[2] : null + $ver, + $reason ); } + /** + * @param string $name + * + * @return void + * + * @throws \BadMethodCallException + */ public function __get($name) { - $msg = $name === 'handle' - ? 'The EasyHandle has been released' - : 'Invalid property: ' . $name; + $msg = $name === 'handle' ? 'The EasyHandle has been released' : 'Invalid property: ' . $name; throw new \BadMethodCallException($msg); } } diff --git a/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php b/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php new file mode 100644 index 00000000..a0988845 --- /dev/null +++ b/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php @@ -0,0 +1,42 @@ +|null $queue The parameters to be passed to the append function, as an indexed array. + * @param callable|null $onFulfilled Callback to invoke when the return value is fulfilled. + * @param callable|null $onRejected Callback to invoke when the return value is rejected. */ - public function __construct( - array $queue = null, - callable $onFulfilled = null, - callable $onRejected = null - ) { + public function __construct(array $queue = null, callable $onFulfilled = null, callable $onRejected = null) + { $this->onFulfilled = $onFulfilled; $this->onRejected = $onRejected; if ($queue) { - call_user_func_array([$this, 'append'], $queue); + // array_values included for BC + $this->append(...array_values($queue)); } } - public function __invoke(RequestInterface $request, array $options) + public function __invoke(RequestInterface $request, array $options): PromiseInterface { if (!$this->queue) { throw new \OutOfBoundsException('Mock queue is empty'); } - if (isset($options['delay'])) { - usleep($options['delay'] * 1000); + if (isset($options['delay']) && \is_numeric($options['delay'])) { + \usleep((int) $options['delay'] * 1000); } $this->lastRequest = $request; $this->lastOptions = $options; - $response = array_shift($this->queue); + $response = \array_shift($this->queue); if (isset($options['on_headers'])) { - if (!is_callable($options['on_headers'])) { + if (!\is_callable($options['on_headers'])) { throw new \InvalidArgumentException('on_headers must be callable'); } try { @@ -86,29 +103,30 @@ class MockHandler implements \Countable } } - if (is_callable($response)) { - $response = call_user_func($response, $request, $options); + if (\is_callable($response)) { + $response = $response($request, $options); } - $response = $response instanceof \Exception - ? \GuzzleHttp\Promise\rejection_for($response) - : \GuzzleHttp\Promise\promise_for($response); + $response = $response instanceof \Throwable + ? P\Create::rejectionFor($response) + : P\Create::promiseFor($response); return $response->then( - function ($value) use ($request, $options) { + function (?ResponseInterface $value) use ($request, $options) { $this->invokeStats($request, $options, $value); if ($this->onFulfilled) { - call_user_func($this->onFulfilled, $value); + ($this->onFulfilled)($value); } - if (isset($options['sink'])) { + + if ($value !== null && isset($options['sink'])) { $contents = (string) $value->getBody(); $sink = $options['sink']; - if (is_resource($sink)) { - fwrite($sink, $contents); - } elseif (is_string($sink)) { - file_put_contents($sink, $contents); - } elseif ($sink instanceof \Psr\Http\Message\StreamInterface) { + if (\is_resource($sink)) { + \fwrite($sink, $contents); + } elseif (\is_string($sink)) { + \file_put_contents($sink, $contents); + } elseif ($sink instanceof StreamInterface) { $sink->write($contents); } } @@ -118,9 +136,9 @@ class MockHandler implements \Countable function ($reason) use ($request, $options) { $this->invokeStats($request, $options, null, $reason); if ($this->onRejected) { - call_user_func($this->onRejected, $reason); + ($this->onRejected)($reason); } - return \GuzzleHttp\Promise\rejection_for($reason); + return P\Create::rejectionFor($reason); } ); } @@ -128,62 +146,66 @@ class MockHandler implements \Countable /** * Adds one or more variadic requests, exceptions, callables, or promises * to the queue. + * + * @param mixed ...$values */ - public function append() + public function append(...$values): void { - foreach (func_get_args() as $value) { + foreach ($values as $value) { if ($value instanceof ResponseInterface - || $value instanceof \Exception + || $value instanceof \Throwable || $value instanceof PromiseInterface - || is_callable($value) + || \is_callable($value) ) { $this->queue[] = $value; } else { - throw new \InvalidArgumentException('Expected a response or ' - . 'exception. Found ' . \GuzzleHttp\describe_type($value)); + throw new \TypeError('Expected a Response, Promise, Throwable or callable. Found ' . Utils::describeType($value)); } } } /** * Get the last received request. - * - * @return RequestInterface */ - public function getLastRequest() + public function getLastRequest(): ?RequestInterface { return $this->lastRequest; } /** * Get the last received request options. - * - * @return array */ - public function getLastOptions() + public function getLastOptions(): array { return $this->lastOptions; } /** * Returns the number of remaining items in the queue. - * - * @return int */ - public function count() + public function count(): int { - return count($this->queue); + return \count($this->queue); } + public function reset(): void + { + $this->queue = []; + } + + /** + * @param mixed $reason Promise or reason. + */ private function invokeStats( RequestInterface $request, array $options, ResponseInterface $response = null, $reason = null - ) { + ): void { if (isset($options['on_stats'])) { - $stats = new TransferStats($request, $response, 0, $reason); - call_user_func($options['on_stats'], $stats); + $transferTime = $options['transfer_time'] ?? 0; + $stats = new TransferStats($request, $response, $transferTime, $reason); + ($options['on_stats'])($stats); } } } diff --git a/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php b/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php index f8b00be0..f045b526 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php @@ -1,11 +1,15 @@ getBody()->getSize()) { - $request = $request->withHeader('Content-Length', 0); + $request = $request->withHeader('Content-Length', '0'); } return $this->createResponse( @@ -57,80 +64,80 @@ class StreamHandler // Determine if the error was a networking error. $message = $e->getMessage(); // This list can probably get more comprehensive. - if (strpos($message, 'getaddrinfo') // DNS lookup failed - || strpos($message, 'Connection refused') - || strpos($message, "couldn't connect to host") // error on HHVM - || strpos($message, "connection attempt failed") + if (false !== \strpos($message, 'getaddrinfo') // DNS lookup failed + || false !== \strpos($message, 'Connection refused') + || false !== \strpos($message, "couldn't connect to host") // error on HHVM + || false !== \strpos($message, "connection attempt failed") ) { $e = new ConnectException($e->getMessage(), $request, $e); + } else { + $e = RequestException::wrapException($request, $e); } - $e = RequestException::wrapException($request, $e); $this->invokeStats($options, $request, $startTime, null, $e); - return \GuzzleHttp\Promise\rejection_for($e); + return P\Create::rejectionFor($e); } } private function invokeStats( array $options, RequestInterface $request, - $startTime, + ?float $startTime, ResponseInterface $response = null, - $error = null - ) { + \Throwable $error = null + ): void { if (isset($options['on_stats'])) { - $stats = new TransferStats( - $request, - $response, - microtime(true) - $startTime, - $error, - [] - ); - call_user_func($options['on_stats'], $stats); + $stats = new TransferStats($request, $response, Utils::currentTime() - $startTime, $error, []); + ($options['on_stats'])($stats); } } - private function createResponse( - RequestInterface $request, - array $options, - $stream, - $startTime - ) { + /** + * @param resource $stream + */ + private function createResponse(RequestInterface $request, array $options, $stream, ?float $startTime): PromiseInterface + { $hdrs = $this->lastHeaders; $this->lastHeaders = []; - $parts = explode(' ', array_shift($hdrs), 3); - $ver = explode('/', $parts[0])[1]; - $status = $parts[1]; - $reason = isset($parts[2]) ? $parts[2] : null; - $headers = \GuzzleHttp\headers_from_lines($hdrs); - list($stream, $headers) = $this->checkDecode($options, $headers, $stream); - $stream = Psr7\stream_for($stream); + + try { + [$ver, $status, $reason, $headers] = HeaderProcessor::parseHeaders($hdrs); + } catch (\Exception $e) { + return P\Create::rejectionFor( + new RequestException('An error was encountered while creating the response', $request, null, $e) + ); + } + + [$stream, $headers] = $this->checkDecode($options, $headers, $stream); + $stream = Psr7\Utils::streamFor($stream); $sink = $stream; - if (strcasecmp('HEAD', $request->getMethod())) { + if (\strcasecmp('HEAD', $request->getMethod())) { $sink = $this->createSink($stream, $options); } - $response = new Psr7\Response($status, $headers, $sink, $ver, $reason); + try { + $response = new Psr7\Response($status, $headers, $sink, $ver, $reason); + } catch (\Exception $e) { + return P\Create::rejectionFor( + new RequestException('An error was encountered while creating the response', $request, null, $e) + ); + } if (isset($options['on_headers'])) { try { $options['on_headers']($response); } catch (\Exception $e) { - $msg = 'An error was encountered during the on_headers event'; - $ex = new RequestException($msg, $request, $response, $e); - return \GuzzleHttp\Promise\rejection_for($ex); + return P\Create::rejectionFor( + new RequestException('An error was encountered during the on_headers event', $request, $response, $e) + ); } } // Do not drain when the request is a HEAD request because they have // no body. if ($sink !== $stream) { - $this->drain( - $stream, - $sink, - $response->getHeaderLine('Content-Length') - ); + $this->drain($stream, $sink, $response->getHeaderLine('Content-Length')); } $this->invokeStats($options, $request, $startTime, $response, null); @@ -138,41 +145,37 @@ class StreamHandler return new FulfilledPromise($response); } - private function createSink(StreamInterface $stream, array $options) + private function createSink(StreamInterface $stream, array $options): StreamInterface { if (!empty($options['stream'])) { return $stream; } - $sink = isset($options['sink']) - ? $options['sink'] - : fopen('php://temp', 'r+'); + $sink = $options['sink'] ?? Psr7\Utils::tryFopen('php://temp', 'r+'); - return is_string($sink) - ? new Psr7\LazyOpenStream($sink, 'w+') - : Psr7\stream_for($sink); + return \is_string($sink) ? new Psr7\LazyOpenStream($sink, 'w+') : Psr7\Utils::streamFor($sink); } - private function checkDecode(array $options, array $headers, $stream) + /** + * @param resource $stream + */ + private function checkDecode(array $options, array $headers, $stream): array { // Automatically decode responses when instructed. if (!empty($options['decode_content'])) { - $normalizedKeys = \GuzzleHttp\normalize_header_keys($headers); + $normalizedKeys = Utils::normalizeHeaderKeys($headers); if (isset($normalizedKeys['content-encoding'])) { $encoding = $headers[$normalizedKeys['content-encoding']]; if ($encoding[0] === 'gzip' || $encoding[0] === 'deflate') { - $stream = new Psr7\InflateStream( - Psr7\stream_for($stream) - ); - $headers['x-encoded-content-encoding'] - = $headers[$normalizedKeys['content-encoding']]; + $stream = new Psr7\InflateStream(Psr7\Utils::streamFor($stream)); + $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']]; + // Remove content-encoding header unset($headers[$normalizedKeys['content-encoding']]); + // Fix content-length header if (isset($normalizedKeys['content-length'])) { - $headers['x-encoded-content-length'] - = $headers[$normalizedKeys['content-length']]; - + $headers['x-encoded-content-length'] = $headers[$normalizedKeys['content-length']]; $length = (int) $stream->getSize(); if ($length === 0) { unset($headers[$normalizedKeys['content-length']]); @@ -190,27 +193,21 @@ class StreamHandler /** * Drains the source stream into the "sink" client option. * - * @param StreamInterface $source - * @param StreamInterface $sink - * @param string $contentLength Header specifying the amount of - * data to read. + * @param string $contentLength Header specifying the amount of + * data to read. * - * @return StreamInterface * @throws \RuntimeException when the sink option is invalid. */ - private function drain( - StreamInterface $source, - StreamInterface $sink, - $contentLength - ) { + private function drain(StreamInterface $source, StreamInterface $sink, string $contentLength): StreamInterface + { // If a content-length header is provided, then stop reading once // that number of bytes has been read. This can prevent infinitely // reading from a stream when dealing with servers that do not honor // Connection: Close headers. - Psr7\copy_to_stream( + Psr7\Utils::copyToStream( $source, $sink, - (strlen($contentLength) > 0 && (int) $contentLength > 0) ? (int) $contentLength : -1 + (\strlen($contentLength) > 0 && (int) $contentLength > 0) ? (int) $contentLength : -1 ); $sink->seek(0); @@ -225,12 +222,13 @@ class StreamHandler * @param callable $callback Callable that returns stream resource * * @return resource + * * @throws \RuntimeException on error */ private function createResource(callable $callback) { - $errors = null; - set_error_handler(function ($_, $msg, $file, $line) use (&$errors) { + $errors = []; + \set_error_handler(static function ($_, $msg, $file, $line) use (&$errors): bool { $errors[] = [ 'message' => $msg, 'file' => $file, @@ -239,27 +237,33 @@ class StreamHandler return true; }); - $resource = $callback(); - restore_error_handler(); + try { + $resource = $callback(); + } finally { + \restore_error_handler(); + } if (!$resource) { $message = 'Error creating resource: '; foreach ($errors as $err) { foreach ($err as $key => $value) { - $message .= "[$key] $value" . PHP_EOL; + $message .= "[$key] $value" . \PHP_EOL; } } - throw new \RuntimeException(trim($message)); + throw new \RuntimeException(\trim($message)); } return $resource; } + /** + * @return resource + */ private function createStream(RequestInterface $request, array $options) { static $methods; if (!$methods) { - $methods = array_flip(get_class_methods(__CLASS__)); + $methods = \array_flip(\get_class_methods(__CLASS__)); } // HTTP/1.1 streams using the PHP stream wrapper require a @@ -278,7 +282,7 @@ class StreamHandler $params = []; $context = $this->getDefaultContext($request); - if (isset($options['on_headers']) && !is_callable($options['on_headers'])) { + if (isset($options['on_headers']) && !\is_callable($options['on_headers'])) { throw new \InvalidArgumentException('on_headers must be callable'); } @@ -292,42 +296,39 @@ class StreamHandler } if (isset($options['stream_context'])) { - if (!is_array($options['stream_context'])) { + if (!\is_array($options['stream_context'])) { throw new \InvalidArgumentException('stream_context must be an array'); } - $context = array_replace_recursive( - $context, - $options['stream_context'] - ); + $context = \array_replace_recursive($context, $options['stream_context']); } // Microsoft NTLM authentication only supported with curl handler - if (isset($options['auth']) - && is_array($options['auth']) - && isset($options['auth'][2]) - && 'ntlm' == $options['auth'][2] - ) { + if (isset($options['auth'][2]) && 'ntlm' === $options['auth'][2]) { throw new \InvalidArgumentException('Microsoft NTLM authentication only supported with curl handler'); } $uri = $this->resolveHost($request, $options); - $context = $this->createResource( - function () use ($context, $params) { - return stream_context_create($context, $params); + $contextResource = $this->createResource( + static function () use ($context, $params) { + return \stream_context_create($context, $params); } ); return $this->createResource( - function () use ($uri, &$http_response_header, $context, $options) { - $resource = fopen((string) $uri, 'r', null, $context); + function () use ($uri, &$http_response_header, $contextResource, $context, $options, $request) { + $resource = @\fopen((string) $uri, 'r', false, $contextResource); $this->lastHeaders = $http_response_header; + if (false === $resource) { + throw new ConnectException(sprintf('Connection refused for URI %s', $uri), $request, null, $context); + } + if (isset($options['read_timeout'])) { $readTimeout = $options['read_timeout']; $sec = (int) $readTimeout; $usec = ($readTimeout - $sec) * 100000; - stream_set_timeout($resource, $sec, $usec); + \stream_set_timeout($resource, $sec, $usec); } return $resource; @@ -335,30 +336,31 @@ class StreamHandler ); } - private function resolveHost(RequestInterface $request, array $options) + private function resolveHost(RequestInterface $request, array $options): UriInterface { $uri = $request->getUri(); - if (isset($options['force_ip_resolve']) && !filter_var($uri->getHost(), FILTER_VALIDATE_IP)) { + if (isset($options['force_ip_resolve']) && !\filter_var($uri->getHost(), \FILTER_VALIDATE_IP)) { if ('v4' === $options['force_ip_resolve']) { - $records = dns_get_record($uri->getHost(), DNS_A); - if (!isset($records[0]['ip'])) { - throw new ConnectException(sprintf("Could not resolve IPv4 address for host '%s'", $uri->getHost()), $request); + $records = \dns_get_record($uri->getHost(), \DNS_A); + if (false === $records || !isset($records[0]['ip'])) { + throw new ConnectException(\sprintf("Could not resolve IPv4 address for host '%s'", $uri->getHost()), $request); } - $uri = $uri->withHost($records[0]['ip']); - } elseif ('v6' === $options['force_ip_resolve']) { - $records = dns_get_record($uri->getHost(), DNS_AAAA); - if (!isset($records[0]['ipv6'])) { - throw new ConnectException(sprintf("Could not resolve IPv6 address for host '%s'", $uri->getHost()), $request); + return $uri->withHost($records[0]['ip']); + } + if ('v6' === $options['force_ip_resolve']) { + $records = \dns_get_record($uri->getHost(), \DNS_AAAA); + if (false === $records || !isset($records[0]['ipv6'])) { + throw new ConnectException(\sprintf("Could not resolve IPv6 address for host '%s'", $uri->getHost()), $request); } - $uri = $uri->withHost('[' . $records[0]['ipv6'] . ']'); + return $uri->withHost('[' . $records[0]['ipv6'] . ']'); } } return $uri; } - private function getDefaultContext(RequestInterface $request) + private function getDefaultContext(RequestInterface $request): array { $headers = ''; foreach ($request->getHeaders() as $name => $value) { @@ -387,55 +389,100 @@ class StreamHandler } } - $context['http']['header'] = rtrim($context['http']['header']); + $context['http']['header'] = \rtrim($context['http']['header']); return $context; } - private function add_proxy(RequestInterface $request, &$options, $value, &$params) + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_proxy(RequestInterface $request, array &$options, $value, array &$params): void { - if (!is_array($value)) { - $options['http']['proxy'] = $value; + $uri = null; + + if (!\is_array($value)) { + $uri = $value; } else { $scheme = $request->getUri()->getScheme(); if (isset($value[$scheme])) { - if (!isset($value['no']) - || !\GuzzleHttp\is_host_in_noproxy( - $request->getUri()->getHost(), - $value['no'] - ) - ) { - $options['http']['proxy'] = $value[$scheme]; + if (!isset($value['no']) || !Utils::isHostInNoProxy($request->getUri()->getHost(), $value['no'])) { + $uri = $value[$scheme]; } } } + + if (!$uri) { + return; + } + + $parsed = $this->parse_proxy($uri); + $options['http']['proxy'] = $parsed['proxy']; + + if ($parsed['auth']) { + if (!isset($options['http']['header'])) { + $options['http']['header'] = []; + } + $options['http']['header'] .= "\r\nProxy-Authorization: {$parsed['auth']}"; + } } - private function add_timeout(RequestInterface $request, &$options, $value, &$params) + /** + * Parses the given proxy URL to make it compatible with the format PHP's stream context expects. + */ + private function parse_proxy(string $url): array + { + $parsed = \parse_url($url); + + if ($parsed !== false && isset($parsed['scheme']) && $parsed['scheme'] === 'http') { + if (isset($parsed['host']) && isset($parsed['port'])) { + $auth = null; + if (isset($parsed['user']) && isset($parsed['pass'])) { + $auth = \base64_encode("{$parsed['user']}:{$parsed['pass']}"); + } + + return [ + 'proxy' => "tcp://{$parsed['host']}:{$parsed['port']}", + 'auth' => $auth ? "Basic {$auth}" : null, + ]; + } + } + + // Return proxy as-is. + return [ + 'proxy' => $url, + 'auth' => null, + ]; + } + + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_timeout(RequestInterface $request, array &$options, $value, array &$params): void { if ($value > 0) { $options['http']['timeout'] = $value; } } - private function add_verify(RequestInterface $request, &$options, $value, &$params) + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_verify(RequestInterface $request, array &$options, $value, array &$params): void { - if ($value === true) { - // PHP 5.6 or greater will find the system cert by default. When - // < 5.6, use the Guzzle bundled cacert. - if (PHP_VERSION_ID < 50600) { - $options['ssl']['cafile'] = \GuzzleHttp\default_ca_bundle(); - } - } elseif (is_string($value)) { - $options['ssl']['cafile'] = $value; - if (!file_exists($value)) { - throw new \RuntimeException("SSL CA bundle not found: $value"); - } - } elseif ($value === false) { + if ($value === false) { $options['ssl']['verify_peer'] = false; $options['ssl']['verify_peer_name'] = false; + return; - } else { + } + + if (\is_string($value)) { + $options['ssl']['cafile'] = $value; + if (!\file_exists($value)) { + throw new \RuntimeException("SSL CA bundle not found: $value"); + } + } elseif ($value !== true) { throw new \InvalidArgumentException('Invalid verify request option'); } @@ -444,88 +491,95 @@ class StreamHandler $options['ssl']['allow_self_signed'] = false; } - private function add_cert(RequestInterface $request, &$options, $value, &$params) + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_cert(RequestInterface $request, array &$options, $value, array &$params): void { - if (is_array($value)) { + if (\is_array($value)) { $options['ssl']['passphrase'] = $value[1]; $value = $value[0]; } - if (!file_exists($value)) { + if (!\file_exists($value)) { throw new \RuntimeException("SSL certificate not found: {$value}"); } $options['ssl']['local_cert'] = $value; } - private function add_progress(RequestInterface $request, &$options, $value, &$params) + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_progress(RequestInterface $request, array &$options, $value, array &$params): void { - $this->addNotification( + self::addNotification( $params, - function ($code, $a, $b, $c, $transferred, $total) use ($value) { - if ($code == STREAM_NOTIFY_PROGRESS) { - $value($total, $transferred, null, null); + static function ($code, $a, $b, $c, $transferred, $total) use ($value) { + if ($code == \STREAM_NOTIFY_PROGRESS) { + // The upload progress cannot be determined. Use 0 for cURL compatibility: + // https://curl.se/libcurl/c/CURLOPT_PROGRESSFUNCTION.html + $value($total, $transferred, 0, 0); } } ); } - private function add_debug(RequestInterface $request, &$options, $value, &$params) + /** + * @param mixed $value as passed via Request transfer options. + */ + private function add_debug(RequestInterface $request, array &$options, $value, array &$params): void { if ($value === false) { return; } static $map = [ - STREAM_NOTIFY_CONNECT => 'CONNECT', - STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED', - STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT', - STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS', - STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS', - STREAM_NOTIFY_REDIRECTED => 'REDIRECTED', - STREAM_NOTIFY_PROGRESS => 'PROGRESS', - STREAM_NOTIFY_FAILURE => 'FAILURE', - STREAM_NOTIFY_COMPLETED => 'COMPLETED', - STREAM_NOTIFY_RESOLVE => 'RESOLVE', + \STREAM_NOTIFY_CONNECT => 'CONNECT', + \STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED', + \STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT', + \STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS', + \STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS', + \STREAM_NOTIFY_REDIRECTED => 'REDIRECTED', + \STREAM_NOTIFY_PROGRESS => 'PROGRESS', + \STREAM_NOTIFY_FAILURE => 'FAILURE', + \STREAM_NOTIFY_COMPLETED => 'COMPLETED', + \STREAM_NOTIFY_RESOLVE => 'RESOLVE', ]; - static $args = ['severity', 'message', 'message_code', - 'bytes_transferred', 'bytes_max']; + static $args = ['severity', 'message', 'message_code', 'bytes_transferred', 'bytes_max']; - $value = \GuzzleHttp\debug_resource($value); + $value = Utils::debugResource($value); $ident = $request->getMethod() . ' ' . $request->getUri()->withFragment(''); - $this->addNotification( + self::addNotification( $params, - function () use ($ident, $value, $map, $args) { - $passed = func_get_args(); - $code = array_shift($passed); - fprintf($value, '<%s> [%s] ', $ident, $map[$code]); - foreach (array_filter($passed) as $i => $v) { - fwrite($value, $args[$i] . ': "' . $v . '" '); + static function (int $code, ...$passed) use ($ident, $value, $map, $args): void { + \fprintf($value, '<%s> [%s] ', $ident, $map[$code]); + foreach (\array_filter($passed) as $i => $v) { + \fwrite($value, $args[$i] . ': "' . $v . '" '); } - fwrite($value, "\n"); + \fwrite($value, "\n"); } ); } - private function addNotification(array &$params, callable $notify) + private static function addNotification(array &$params, callable $notify): void { // Wrap the existing function if needed. if (!isset($params['notification'])) { $params['notification'] = $notify; } else { - $params['notification'] = $this->callArray([ + $params['notification'] = self::callArray([ $params['notification'], $notify ]); } } - private function callArray(array $functions) + private static function callArray(array $functions): callable { - return function () use ($functions) { - $args = func_get_args(); + return static function (...$args) use ($functions) { foreach ($functions as $fn) { - call_user_func_array($fn, $args); + $fn(...$args); } }; } diff --git a/vendor/guzzlehttp/guzzle/src/HandlerStack.php b/vendor/guzzlehttp/guzzle/src/HandlerStack.php index 24c46fd9..e0a1d119 100644 --- a/vendor/guzzlehttp/guzzle/src/HandlerStack.php +++ b/vendor/guzzlehttp/guzzle/src/HandlerStack.php @@ -1,21 +1,32 @@ push(Middleware::httpErrors(), 'http_errors'); $stack->push(Middleware::redirect(), 'allow_redirects'); $stack->push(Middleware::cookies(), 'cookies'); @@ -47,7 +56,7 @@ class HandlerStack } /** - * @param callable $handler Underlying HTTP handler. + * @param (callable(RequestInterface, array): PromiseInterface)|null $handler Underlying HTTP handler. */ public function __construct(callable $handler = null) { @@ -57,8 +66,7 @@ class HandlerStack /** * Invokes the handler stack as a composed handler * - * @param RequestInterface $request - * @param array $options + * @return ResponseInterface|PromiseInterface */ public function __invoke(RequestInterface $request, array $options) { @@ -76,12 +84,13 @@ class HandlerStack { $depth = 0; $stack = []; - if ($this->handler) { + + if ($this->handler !== null) { $stack[] = "0) Handler: " . $this->debugCallable($this->handler); } $result = ''; - foreach (array_reverse($this->stack) as $tuple) { + foreach (\array_reverse($this->stack) as $tuple) { $depth++; $str = "{$depth}) Name: '{$tuple[1]}', "; $str .= "Function: " . $this->debugCallable($tuple[0]); @@ -89,7 +98,7 @@ class HandlerStack $stack[] = $str; } - foreach (array_keys($stack) as $k) { + foreach (\array_keys($stack) as $k) { $result .= "< {$stack[$k]}\n"; } @@ -99,10 +108,10 @@ class HandlerStack /** * Set the HTTP handler that actually returns a promise. * - * @param callable $handler Accepts a request and array of options and - * returns a Promise. + * @param callable(RequestInterface, array): PromiseInterface $handler Accepts a request and array of options and + * returns a Promise. */ - public function setHandler(callable $handler) + public function setHandler(callable $handler): void { $this->handler = $handler; $this->cached = null; @@ -110,33 +119,31 @@ class HandlerStack /** * Returns true if the builder has a handler. - * - * @return bool */ - public function hasHandler() + public function hasHandler(): bool { - return (bool) $this->handler; + return $this->handler !== null ; } /** * Unshift a middleware to the bottom of the stack. * - * @param callable $middleware Middleware function - * @param string $name Name to register for this middleware. + * @param callable(callable): callable $middleware Middleware function + * @param string $name Name to register for this middleware. */ - public function unshift(callable $middleware, $name = null) + public function unshift(callable $middleware, ?string $name = null): void { - array_unshift($this->stack, [$middleware, $name]); + \array_unshift($this->stack, [$middleware, $name]); $this->cached = null; } /** * Push a middleware to the top of the stack. * - * @param callable $middleware Middleware function - * @param string $name Name to register for this middleware. + * @param callable(callable): callable $middleware Middleware function + * @param string $name Name to register for this middleware. */ - public function push(callable $middleware, $name = '') + public function push(callable $middleware, string $name = ''): void { $this->stack[] = [$middleware, $name]; $this->cached = null; @@ -145,11 +152,11 @@ class HandlerStack /** * Add a middleware before another middleware by name. * - * @param string $findName Middleware to find - * @param callable $middleware Middleware function - * @param string $withName Name to register for this middleware. + * @param string $findName Middleware to find + * @param callable(callable): callable $middleware Middleware function + * @param string $withName Name to register for this middleware. */ - public function before($findName, callable $middleware, $withName = '') + public function before(string $findName, callable $middleware, string $withName = ''): void { $this->splice($findName, $withName, $middleware, true); } @@ -157,11 +164,11 @@ class HandlerStack /** * Add a middleware after another middleware by name. * - * @param string $findName Middleware to find - * @param callable $middleware Middleware function - * @param string $withName Name to register for this middleware. + * @param string $findName Middleware to find + * @param callable(callable): callable $middleware Middleware function + * @param string $withName Name to register for this middleware. */ - public function after($findName, callable $middleware, $withName = '') + public function after(string $findName, callable $middleware, string $withName = ''): void { $this->splice($findName, $withName, $middleware, false); } @@ -171,13 +178,17 @@ class HandlerStack * * @param callable|string $remove Middleware to remove by instance or name. */ - public function remove($remove) + public function remove($remove): void { + if (!is_string($remove) && !is_callable($remove)) { + trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a callable or string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__); + } + $this->cached = null; - $idx = is_callable($remove) ? 0 : 1; - $this->stack = array_values(array_filter( + $idx = \is_callable($remove) ? 0 : 1; + $this->stack = \array_values(\array_filter( $this->stack, - function ($tuple) use ($idx, $remove) { + static function ($tuple) use ($idx, $remove) { return $tuple[$idx] !== $remove; } )); @@ -186,16 +197,17 @@ class HandlerStack /** * Compose the middleware and handler into a single callable function. * - * @return callable + * @return callable(RequestInterface, array): PromiseInterface */ - public function resolve() + public function resolve(): callable { - if (!$this->cached) { - if (!($prev = $this->handler)) { + if ($this->cached === null) { + if (($prev = $this->handler) === null) { throw new \LogicException('No handler has been specified'); } - foreach (array_reverse($this->stack) as $fn) { + foreach (\array_reverse($this->stack) as $fn) { + /** @var callable(RequestInterface, array): PromiseInterface $prev */ $prev = $fn[0]($prev); } @@ -205,11 +217,7 @@ class HandlerStack return $this->cached; } - /** - * @param $name - * @return int - */ - private function findByName($name) + private function findByName(string $name): int { foreach ($this->stack as $k => $v) { if ($v[1] === $name) { @@ -222,13 +230,8 @@ class HandlerStack /** * Splices a function into the middleware list at a specific position. - * - * @param $findName - * @param $withName - * @param callable $middleware - * @param $before */ - private function splice($findName, $withName, callable $middleware, $before) + private function splice(string $findName, string $withName, callable $middleware, bool $before): void { $this->cached = null; $idx = $this->findByName($findName); @@ -236,38 +239,37 @@ class HandlerStack if ($before) { if ($idx === 0) { - array_unshift($this->stack, $tuple); + \array_unshift($this->stack, $tuple); } else { $replacement = [$tuple, $this->stack[$idx]]; - array_splice($this->stack, $idx, 1, $replacement); + \array_splice($this->stack, $idx, 1, $replacement); } - } elseif ($idx === count($this->stack) - 1) { + } elseif ($idx === \count($this->stack) - 1) { $this->stack[] = $tuple; } else { $replacement = [$this->stack[$idx], $tuple]; - array_splice($this->stack, $idx, 1, $replacement); + \array_splice($this->stack, $idx, 1, $replacement); } } /** * Provides a debug string for a given callable. * - * @param array|callable $fn Function to write as a string. - * - * @return string + * @param callable|string $fn Function to write as a string. */ - private function debugCallable($fn) + private function debugCallable($fn): string { - if (is_string($fn)) { + if (\is_string($fn)) { return "callable({$fn})"; } - if (is_array($fn)) { - return is_string($fn[0]) + if (\is_array($fn)) { + return \is_string($fn[0]) ? "callable({$fn[0]}::{$fn[1]})" - : "callable(['" . get_class($fn[0]) . "', '{$fn[1]}'])"; + : "callable(['" . \get_class($fn[0]) . "', '{$fn[1]}'])"; } - return 'callable(' . spl_object_hash($fn) . ')'; + /** @var object $fn */ + return 'callable(' . \spl_object_hash($fn) . ')'; } } diff --git a/vendor/guzzlehttp/guzzle/src/MessageFormatter.php b/vendor/guzzlehttp/guzzle/src/MessageFormatter.php index 663ac739..da499547 100644 --- a/vendor/guzzlehttp/guzzle/src/MessageFormatter.php +++ b/vendor/guzzlehttp/guzzle/src/MessageFormatter.php @@ -1,4 +1,5 @@ >>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}"; - const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}'; + public const CLF = "{hostname} {req_header_User-Agent} - [{date_common_log}] \"{method} {target} HTTP/{version}\" {code} {res_header_Content-Length}"; + public const DEBUG = ">>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}"; + public const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}'; - /** @var string Template used to format log messages */ + /** + * @var string Template used to format log messages + */ private $template; /** * @param string $template Log message template */ - public function __construct($template = self::CLF) + public function __construct(?string $template = self::CLF) { $this->template = $template ?: self::CLF; } @@ -57,20 +64,16 @@ class MessageFormatter /** * Returns a formatted message string. * - * @param RequestInterface $request Request that was sent - * @param ResponseInterface $response Response that was received - * @param \Exception $error Exception that was received - * - * @return string + * @param RequestInterface $request Request that was sent + * @param ResponseInterface|null $response Response that was received + * @param \Throwable|null $error Exception that was received */ - public function format( - RequestInterface $request, - ResponseInterface $response = null, - \Exception $error = null - ) { + public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\Throwable $error = null): string + { $cache = []; - return preg_replace_callback( + /** @var string */ + return \preg_replace_callback( '/{\s*([A-Za-z_\-\.0-9]+)\s*}/', function (array $matches) use ($request, $response, $error, &$cache) { if (isset($cache[$matches[1]])) { @@ -80,20 +83,20 @@ class MessageFormatter $result = ''; switch ($matches[1]) { case 'request': - $result = Psr7\str($request); + $result = Psr7\Message::toString($request); break; case 'response': - $result = $response ? Psr7\str($response) : ''; + $result = $response ? Psr7\Message::toString($response) : ''; break; case 'req_headers': - $result = trim($request->getMethod() + $result = \trim($request->getMethod() . ' ' . $request->getRequestTarget()) . ' HTTP/' . $request->getProtocolVersion() . "\r\n" . $this->headers($request); break; case 'res_headers': $result = $response ? - sprintf( + \sprintf( 'HTTP/%s %d %s', $response->getProtocolVersion(), $response->getStatusCode(), @@ -102,17 +105,29 @@ class MessageFormatter : 'NULL'; break; case 'req_body': - $result = $request->getBody(); + $result = $request->getBody()->__toString(); break; case 'res_body': - $result = $response ? $response->getBody() : 'NULL'; + if (!$response instanceof ResponseInterface) { + $result = 'NULL'; + break; + } + + $body = $response->getBody(); + + if (!$body->isSeekable()) { + $result = 'RESPONSE_NOT_LOGGEABLE'; + break; + } + + $result = $response->getBody()->__toString(); break; case 'ts': case 'date_iso_8601': - $result = gmdate('c'); + $result = \gmdate('c'); break; case 'date_common_log': - $result = date('d/M/Y:H:i:s O'); + $result = \date('d/M/Y:H:i:s O'); break; case 'method': $result = $request->getMethod(); @@ -122,7 +137,7 @@ class MessageFormatter break; case 'uri': case 'url': - $result = $request->getUri(); + $result = $request->getUri()->__toString(); break; case 'target': $result = $request->getRequestTarget(); @@ -139,7 +154,7 @@ class MessageFormatter $result = $request->getHeaderLine('Host'); break; case 'hostname': - $result = gethostname(); + $result = \gethostname(); break; case 'code': $result = $response ? $response->getStatusCode() : 'NULL'; @@ -152,11 +167,11 @@ class MessageFormatter break; default: // handle prefixed dynamic headers - if (strpos($matches[1], 'req_header_') === 0) { - $result = $request->getHeaderLine(substr($matches[1], 11)); - } elseif (strpos($matches[1], 'res_header_') === 0) { + if (\strpos($matches[1], 'req_header_') === 0) { + $result = $request->getHeaderLine(\substr($matches[1], 11)); + } elseif (\strpos($matches[1], 'res_header_') === 0) { $result = $response - ? $response->getHeaderLine(substr($matches[1], 11)) + ? $response->getHeaderLine(\substr($matches[1], 11)) : 'NULL'; } } @@ -168,13 +183,16 @@ class MessageFormatter ); } - private function headers(MessageInterface $message) + /** + * Get headers from message as string + */ + private function headers(MessageInterface $message): string { $result = ''; foreach ($message->getHeaders() as $name => $values) { - $result .= $name . ': ' . implode(', ', $values) . "\r\n"; + $result .= $name . ': ' . \implode(', ', $values) . "\r\n"; } - return trim($result); + return \trim($result); } } diff --git a/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php b/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php new file mode 100644 index 00000000..a39ac248 --- /dev/null +++ b/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php @@ -0,0 +1,18 @@ +withCookieHeader($request); return $handler($request, $options) ->then( - function ($response) use ($cookieJar, $request) { + static function (ResponseInterface $response) use ($cookieJar, $request): ResponseInterface { $cookieJar->extractCookies($request, $response); return $response; } - ); + ); }; }; } /** * Middleware that throws exceptions for 4xx or 5xx responses when the - * "http_error" request option is set to true. + * "http_errors" request option is set to true. * - * @return callable Returns a function that accepts the next handler. + * @param BodySummarizerInterface|null $bodySummarizer The body summarizer to use in exception messages. + * + * @return callable(callable): callable Returns a function that accepts the next handler. */ - public static function httpErrors() + public static function httpErrors(BodySummarizerInterface $bodySummarizer = null): callable { - return function (callable $handler) { - return function ($request, array $options) use ($handler) { + return static function (callable $handler) use ($bodySummarizer): callable { + return static function ($request, array $options) use ($handler, $bodySummarizer) { if (empty($options['http_errors'])) { return $handler($request, $options); } return $handler($request, $options)->then( - function (ResponseInterface $response) use ($request, $handler) { + static function (ResponseInterface $response) use ($request, $bodySummarizer) { $code = $response->getStatusCode(); if ($code < 400) { return $response; } - throw RequestException::create($request, $response); + throw RequestException::create($request, $response, null, [], $bodySummarizer); } ); }; @@ -73,21 +76,22 @@ final class Middleware /** * Middleware that pushes history data to an ArrayAccess container. * - * @param array|\ArrayAccess $container Container to hold the history (by reference). + * @param array|\ArrayAccess $container Container to hold the history (by reference). + * + * @return callable(callable): callable Returns a function that accepts the next handler. * - * @return callable Returns a function that accepts the next handler. * @throws \InvalidArgumentException if container is not an array or ArrayAccess. */ - public static function history(&$container) + public static function history(&$container): callable { - if (!is_array($container) && !$container instanceof \ArrayAccess) { + if (!\is_array($container) && !$container instanceof \ArrayAccess) { throw new \InvalidArgumentException('history container must be an array or object implementing ArrayAccess'); } - return function (callable $handler) use (&$container) { - return function ($request, array $options) use ($handler, &$container) { + return static function (callable $handler) use (&$container): callable { + return static function (RequestInterface $request, array $options) use ($handler, &$container) { return $handler($request, $options)->then( - function ($value) use ($request, &$container, $options) { + static function ($value) use ($request, &$container, $options) { $container[] = [ 'request' => $request, 'response' => $value, @@ -96,14 +100,14 @@ final class Middleware ]; return $value; }, - function ($reason) use ($request, &$container, $options) { + static function ($reason) use ($request, &$container, $options) { $container[] = [ 'request' => $request, 'response' => null, 'error' => $reason, 'options' => $options ]; - return \GuzzleHttp\Promise\rejection_for($reason); + return P\Create::rejectionFor($reason); } ); }; @@ -123,10 +127,10 @@ final class Middleware * * @return callable Returns a function that accepts the next handler. */ - public static function tap(callable $before = null, callable $after = null) + public static function tap(callable $before = null, callable $after = null): callable { - return function (callable $handler) use ($before, $after) { - return function ($request, array $options) use ($handler, $before, $after) { + return static function (callable $handler) use ($before, $after): callable { + return static function (RequestInterface $request, array $options) use ($handler, $before, $after) { if ($before) { $before($request, $options); } @@ -144,9 +148,9 @@ final class Middleware * * @return callable Returns a function that accepts the next handler. */ - public static function redirect() + public static function redirect(): callable { - return function (callable $handler) { + return static function (callable $handler): RedirectMiddleware { return new RedirectMiddleware($handler); }; } @@ -166,9 +170,9 @@ final class Middleware * * @return callable Returns a function that accepts the next handler. */ - public static function retry(callable $decider, callable $delay = null) + public static function retry(callable $decider, callable $delay = null): callable { - return function (callable $handler) use ($decider, $delay) { + return static function (callable $handler) use ($decider, $delay): RetryMiddleware { return new RetryMiddleware($decider, $handler, $delay); }; } @@ -177,29 +181,34 @@ final class Middleware * Middleware that logs requests, responses, and errors using a message * formatter. * - * @param LoggerInterface $logger Logs messages. - * @param MessageFormatter $formatter Formatter used to create message strings. - * @param string $logLevel Level at which to log requests. + * @phpstan-param \Psr\Log\LogLevel::* $logLevel Level at which to log requests. + * + * @param LoggerInterface $logger Logs messages. + * @param MessageFormatterInterface|MessageFormatter $formatter Formatter used to create message strings. + * @param string $logLevel Level at which to log requests. * * @return callable Returns a function that accepts the next handler. */ - public static function log(LoggerInterface $logger, MessageFormatter $formatter, $logLevel = LogLevel::INFO) + public static function log(LoggerInterface $logger, $formatter, string $logLevel = 'info'): callable { - return function (callable $handler) use ($logger, $formatter, $logLevel) { - return function ($request, array $options) use ($handler, $logger, $formatter, $logLevel) { + // To be compatible with Guzzle 7.1.x we need to allow users to pass a MessageFormatter + if (!$formatter instanceof MessageFormatter && !$formatter instanceof MessageFormatterInterface) { + throw new \LogicException(sprintf('Argument 2 to %s::log() must be of type %s', self::class, MessageFormatterInterface::class)); + } + + return static function (callable $handler) use ($logger, $formatter, $logLevel): callable { + return static function (RequestInterface $request, array $options = []) use ($handler, $logger, $formatter, $logLevel) { return $handler($request, $options)->then( - function ($response) use ($logger, $request, $formatter, $logLevel) { + static function ($response) use ($logger, $request, $formatter, $logLevel): ResponseInterface { $message = $formatter->format($request, $response); $logger->log($logLevel, $message); return $response; }, - function ($reason) use ($logger, $request, $formatter) { - $response = $reason instanceof RequestException - ? $reason->getResponse() - : null; - $message = $formatter->format($request, $response, $reason); - $logger->notice($message); - return \GuzzleHttp\Promise\rejection_for($reason); + static function ($reason) use ($logger, $request, $formatter): PromiseInterface { + $response = $reason instanceof RequestException ? $reason->getResponse() : null; + $message = $formatter->format($request, $response, P\Create::exceptionFor($reason)); + $logger->error($message); + return P\Create::rejectionFor($reason); } ); }; @@ -209,12 +218,10 @@ final class Middleware /** * This middleware adds a default content-type if possible, a default * content-length or transfer-encoding header, and the expect header. - * - * @return callable */ - public static function prepareBody() + public static function prepareBody(): callable { - return function (callable $handler) { + return static function (callable $handler): PrepareBodyMiddleware { return new PrepareBodyMiddleware($handler); }; } @@ -225,12 +232,11 @@ final class Middleware * * @param callable $fn Function that accepts a RequestInterface and returns * a RequestInterface. - * @return callable */ - public static function mapRequest(callable $fn) + public static function mapRequest(callable $fn): callable { - return function (callable $handler) use ($fn) { - return function ($request, array $options) use ($handler, $fn) { + return static function (callable $handler) use ($fn): callable { + return static function (RequestInterface $request, array $options) use ($handler, $fn) { return $handler($fn($request), $options); }; }; @@ -242,12 +248,11 @@ final class Middleware * * @param callable $fn Function that accepts a ResponseInterface and * returns a ResponseInterface. - * @return callable */ - public static function mapResponse(callable $fn) + public static function mapResponse(callable $fn): callable { - return function (callable $handler) use ($fn) { - return function ($request, array $options) use ($handler, $fn) { + return static function (callable $handler) use ($fn): callable { + return static function (RequestInterface $request, array $options) use ($handler, $fn) { return $handler($request, $options)->then($fn); }; }; diff --git a/vendor/guzzlehttp/guzzle/src/Pool.php b/vendor/guzzlehttp/guzzle/src/Pool.php index 8f1be33c..6277c61f 100644 --- a/vendor/guzzlehttp/guzzle/src/Pool.php +++ b/vendor/guzzlehttp/guzzle/src/Pool.php @@ -1,12 +1,15 @@ $rfn) { if ($rfn instanceof RequestInterface) { yield $key => $client->sendAsync($rfn, $opts); - } elseif (is_callable($rfn)) { + } elseif (\is_callable($rfn)) { yield $key => $rfn($opts); } else { - throw new \InvalidArgumentException('Each value yielded by ' - . 'the iterator must be a Psr7\Http\Message\RequestInterface ' - . 'or a callable that returns a promise that fulfills ' - . 'with a Psr7\Message\Http\ResponseInterface object.'); + throw new \InvalidArgumentException('Each value yielded by the iterator must be a Psr7\Http\Message\RequestInterface or a callable that returns a promise that fulfills with a Psr7\Message\Http\ResponseInterface object.'); } } }; @@ -69,7 +67,10 @@ class Pool implements PromisorInterface $this->each = new EachPromise($requests(), $config); } - public function promise() + /** + * Get promise + */ + public function promise(): PromiseInterface { return $this->each->promise(); } @@ -85,36 +86,37 @@ class Pool implements PromisorInterface * @param ClientInterface $client Client used to send the requests * @param array|\Iterator $requests Requests to send concurrently. * @param array $options Passes through the options available in - * {@see GuzzleHttp\Pool::__construct} + * {@see \GuzzleHttp\Pool::__construct} * * @return array Returns an array containing the response or an exception * in the same order that the requests were sent. + * * @throws \InvalidArgumentException if the event format is incorrect. */ - public static function batch( - ClientInterface $client, - $requests, - array $options = [] - ) { + public static function batch(ClientInterface $client, $requests, array $options = []): array + { $res = []; self::cmpCallback($options, 'fulfilled', $res); self::cmpCallback($options, 'rejected', $res); $pool = new static($client, $requests, $options); $pool->promise()->wait(); - ksort($res); + \ksort($res); return $res; } - private static function cmpCallback(array &$options, $name, array &$results) + /** + * Execute callback(s) + */ + private static function cmpCallback(array &$options, string $name, array &$results): void { if (!isset($options[$name])) { - $options[$name] = function ($v, $k) use (&$results) { + $options[$name] = static function ($v, $k) use (&$results) { $results[$k] = $v; }; } else { $currentFn = $options[$name]; - $options[$name] = function ($v, $k) use (&$results, $currentFn) { + $options[$name] = static function ($v, $k) use (&$results, $currentFn) { $currentFn($v, $k); $results[$k] = $v; }; diff --git a/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php b/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php index 2eb95f9b..7ca62833 100644 --- a/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php +++ b/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php @@ -1,34 +1,32 @@ nextHandler = $nextHandler; } - /** - * @param RequestInterface $request - * @param array $options - * - * @return PromiseInterface - */ - public function __invoke(RequestInterface $request, array $options) + public function __invoke(RequestInterface $request, array $options): PromiseInterface { $fn = $this->nextHandler; @@ -42,7 +40,7 @@ class PrepareBodyMiddleware // Add a default content-type if possible. if (!$request->hasHeader('Content-Type')) { if ($uri = $request->getBody()->getMetadata('uri')) { - if ($type = Psr7\mimetype_from_filename($uri)) { + if (is_string($uri) && $type = Psr7\MimeType::fromFilename($uri)) { $modify['set_headers']['Content-Type'] = $type; } } @@ -63,20 +61,20 @@ class PrepareBodyMiddleware // Add the expect header if needed. $this->addExpectHeader($request, $options, $modify); - return $fn(Psr7\modify_request($request, $modify), $options); + return $fn(Psr7\Utils::modifyRequest($request, $modify), $options); } - private function addExpectHeader( - RequestInterface $request, - array $options, - array &$modify - ) { + /** + * Add expect header + */ + private function addExpectHeader(RequestInterface $request, array $options, array &$modify): void + { // Determine if the Expect header should be used if ($request->hasHeader('Expect')) { return; } - $expect = isset($options['expect']) ? $options['expect'] : null; + $expect = $options['expect'] ?? null; // Return if disabled or if you're not using HTTP/1.1 or HTTP/2.0 if ($expect === false || $request->getProtocolVersion() < 1.1) { diff --git a/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php b/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php index 131b7717..1dd38614 100644 --- a/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php +++ b/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php @@ -1,10 +1,10 @@ 5, 'protocols' => ['http', 'https'], @@ -29,24 +34,20 @@ class RedirectMiddleware 'track_redirects' => false, ]; - /** @var callable */ + /** + * @var callable(RequestInterface, array): PromiseInterface + */ private $nextHandler; /** - * @param callable $nextHandler Next handler to invoke. + * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke. */ public function __construct(callable $nextHandler) { $this->nextHandler = $nextHandler; } - /** - * @param RequestInterface $request - * @param array $options - * - * @return PromiseInterface - */ - public function __invoke(RequestInterface $request, array $options) + public function __invoke(RequestInterface $request, array $options): PromiseInterface { $fn = $this->nextHandler; @@ -56,7 +57,7 @@ class RedirectMiddleware if ($options['allow_redirects'] === true) { $options['allow_redirects'] = self::$defaultSettings; - } elseif (!is_array($options['allow_redirects'])) { + } elseif (!\is_array($options['allow_redirects'])) { throw new \InvalidArgumentException('allow_redirects must be true, false, or array'); } else { // Merge the default settings with the provided settings @@ -74,36 +75,27 @@ class RedirectMiddleware } /** - * @param RequestInterface $request - * @param array $options - * @param ResponseInterface|PromiseInterface $response - * * @return ResponseInterface|PromiseInterface */ - public function checkRedirect( - RequestInterface $request, - array $options, - ResponseInterface $response - ) { - if (substr($response->getStatusCode(), 0, 1) != '3' + public function checkRedirect(RequestInterface $request, array $options, ResponseInterface $response) + { + if (\strpos((string) $response->getStatusCode(), '3') !== 0 || !$response->hasHeader('Location') ) { return $response; } - $this->guardMax($request, $options); + $this->guardMax($request, $response, $options); $nextRequest = $this->modifyRequest($request, $options, $response); if (isset($options['allow_redirects']['on_redirect'])) { - call_user_func( - $options['allow_redirects']['on_redirect'], + ($options['allow_redirects']['on_redirect'])( $request, $response, $nextRequest->getUri() ); } - /** @var PromiseInterface|ResponseInterface $promise */ $promise = $this($nextRequest, $options); // Add headers to be able to track history of redirects. @@ -118,51 +110,46 @@ class RedirectMiddleware return $promise; } - private function withTracking(PromiseInterface $promise, $uri, $statusCode) + /** + * Enable tracking on promise. + */ + private function withTracking(PromiseInterface $promise, string $uri, int $statusCode): PromiseInterface { return $promise->then( - function (ResponseInterface $response) use ($uri, $statusCode) { + static function (ResponseInterface $response) use ($uri, $statusCode) { // Note that we are pushing to the front of the list as this // would be an earlier response than what is currently present // in the history header. $historyHeader = $response->getHeader(self::HISTORY_HEADER); $statusHeader = $response->getHeader(self::STATUS_HISTORY_HEADER); - array_unshift($historyHeader, $uri); - array_unshift($statusHeader, $statusCode); + \array_unshift($historyHeader, $uri); + \array_unshift($statusHeader, (string) $statusCode); + return $response->withHeader(self::HISTORY_HEADER, $historyHeader) ->withHeader(self::STATUS_HISTORY_HEADER, $statusHeader); } ); } - private function guardMax(RequestInterface $request, array &$options) + /** + * Check for too many redirects + * + * @throws TooManyRedirectsException Too many redirects. + */ + private function guardMax(RequestInterface $request, ResponseInterface $response, array &$options): void { - $current = isset($options['__redirect_count']) - ? $options['__redirect_count'] - : 0; + $current = $options['__redirect_count'] + ?? 0; $options['__redirect_count'] = $current + 1; $max = $options['allow_redirects']['max']; if ($options['__redirect_count'] > $max) { - throw new TooManyRedirectsException( - "Will not follow more than {$max} redirects", - $request - ); + throw new TooManyRedirectsException("Will not follow more than {$max} redirects", $request, $response); } } - /** - * @param RequestInterface $request - * @param array $options - * @param ResponseInterface $response - * - * @return RequestInterface - */ - public function modifyRequest( - RequestInterface $request, - array $options, - ResponseInterface $response - ) { + public function modifyRequest(RequestInterface $request, array $options, ResponseInterface $response): RequestInterface + { // Request modifications to apply. $modify = []; $protocols = $options['allow_redirects']['protocols']; @@ -172,21 +159,30 @@ class RedirectMiddleware // would do. $statusCode = $response->getStatusCode(); if ($statusCode == 303 || - ($statusCode <= 302 && $request->getBody() && !$options['allow_redirects']['strict']) + ($statusCode <= 302 && !$options['allow_redirects']['strict']) ) { - $modify['method'] = 'GET'; + $safeMethods = ['GET', 'HEAD', 'OPTIONS']; + $requestMethod = $request->getMethod(); + + $modify['method'] = in_array($requestMethod, $safeMethods) ? $requestMethod : 'GET'; $modify['body'] = ''; } - $modify['uri'] = $this->redirectUri($request, $response, $protocols); - Psr7\rewind_body($request); + $uri = $this->redirectUri($request, $response, $protocols); + if (isset($options['idn_conversion']) && ($options['idn_conversion'] !== false)) { + $idnOptions = ($options['idn_conversion'] === true) ? \IDNA_DEFAULT : $options['idn_conversion']; + $uri = Utils::idnUriConvert($uri, $idnOptions); + } + + $modify['uri'] = $uri; + Psr7\Message::rewindBody($request); // Add the Referer header if it is told to do so and only // add the header if we are not redirecting from https to http. if ($options['allow_redirects']['referer'] && $modify['uri']->getScheme() === $request->getUri()->getScheme() ) { - $uri = $request->getUri()->withUserInfo('', ''); + $uri = $request->getUri()->withUserInfo(''); $modify['set_headers']['Referer'] = (string) $uri; } else { $modify['remove_headers'][] = 'Referer'; @@ -197,39 +193,22 @@ class RedirectMiddleware $modify['remove_headers'][] = 'Authorization'; } - return Psr7\modify_request($request, $modify); + return Psr7\Utils::modifyRequest($request, $modify); } /** * Set the appropriate URL on the request based on the location header - * - * @param RequestInterface $request - * @param ResponseInterface $response - * @param array $protocols - * - * @return UriInterface */ - private function redirectUri( - RequestInterface $request, - ResponseInterface $response, - array $protocols - ) { + private function redirectUri(RequestInterface $request, ResponseInterface $response, array $protocols): UriInterface + { $location = Psr7\UriResolver::resolve( $request->getUri(), new Psr7\Uri($response->getHeaderLine('Location')) ); // Ensure that the redirect URI is allowed based on the protocols. - if (!in_array($location->getScheme(), $protocols)) { - throw new BadResponseException( - sprintf( - 'Redirect URI, %s, does not use one of the allowed redirect protocols: %s', - $location, - implode(', ', $protocols) - ), - $request, - $response - ); + if (!\in_array($location->getScheme(), $protocols)) { + throw new BadResponseException(\sprintf('Redirect URI, %s, does not use one of the allowed redirect protocols: %s', $location, \implode(', ', $protocols)), $request, $response); } return $location; diff --git a/vendor/guzzlehttp/guzzle/src/RequestOptions.php b/vendor/guzzlehttp/guzzle/src/RequestOptions.php index c6aacfb1..20b31bc2 100644 --- a/vendor/guzzlehttp/guzzle/src/RequestOptions.php +++ b/vendor/guzzlehttp/guzzle/src/RequestOptions.php @@ -1,4 +1,5 @@ decider = $decider; $this->nextHandler = $nextHandler; $this->delay = $delay ?: __CLASS__ . '::exponentialDelay'; @@ -42,22 +50,14 @@ class RetryMiddleware /** * Default exponential backoff delay function. * - * @param $retries - * - * @return int + * @return int milliseconds. */ - public static function exponentialDelay($retries) + public static function exponentialDelay(int $retries): int { - return (int) pow(2, $retries - 1); + return (int) \pow(2, $retries - 1) * 1000; } - /** - * @param RequestInterface $request - * @param array $options - * - * @return PromiseInterface - */ - public function __invoke(RequestInterface $request, array $options) + public function __invoke(RequestInterface $request, array $options): PromiseInterface { if (!isset($options['retries'])) { $options['retries'] = 0; @@ -71,41 +71,45 @@ class RetryMiddleware ); } - private function onFulfilled(RequestInterface $req, array $options) + /** + * Execute fulfilled closure + */ + private function onFulfilled(RequestInterface $request, array $options): callable { - return function ($value) use ($req, $options) { - if (!call_user_func( - $this->decider, + return function ($value) use ($request, $options) { + if (!($this->decider)( $options['retries'], - $req, + $request, $value, null )) { return $value; } - return $this->doRetry($req, $options, $value); + return $this->doRetry($request, $options, $value); }; } - private function onRejected(RequestInterface $req, array $options) + /** + * Execute rejected closure + */ + private function onRejected(RequestInterface $req, array $options): callable { return function ($reason) use ($req, $options) { - if (!call_user_func( - $this->decider, + if (!($this->decider)( $options['retries'], $req, null, $reason )) { - return \GuzzleHttp\Promise\rejection_for($reason); + return P\Create::rejectionFor($reason); } return $this->doRetry($req, $options); }; } - private function doRetry(RequestInterface $request, array $options, ResponseInterface $response = null) + private function doRetry(RequestInterface $request, array $options, ResponseInterface $response = null): PromiseInterface { - $options['delay'] = call_user_func($this->delay, ++$options['retries'], $response); + $options['delay'] = ($this->delay)(++$options['retries'], $response); return $this($request, $options); } diff --git a/vendor/guzzlehttp/guzzle/src/TransferStats.php b/vendor/guzzlehttp/guzzle/src/TransferStats.php index 15f717e1..93fa334c 100644 --- a/vendor/guzzlehttp/guzzle/src/TransferStats.php +++ b/vendor/guzzlehttp/guzzle/src/TransferStats.php @@ -1,4 +1,5 @@ request = $request; $this->response = $response; @@ -38,30 +58,23 @@ final class TransferStats $this->handlerStats = $handlerStats; } - /** - * @return RequestInterface - */ - public function getRequest() + public function getRequest(): RequestInterface { return $this->request; } /** * Returns the response that was received (if any). - * - * @return ResponseInterface|null */ - public function getResponse() + public function getResponse(): ?ResponseInterface { return $this->response; } /** * Returns true if a response was received. - * - * @return bool */ - public function hasResponse() + public function hasResponse(): bool { return $this->response !== null; } @@ -82,10 +95,8 @@ final class TransferStats /** * Get the effective URI the request was sent to. - * - * @return UriInterface */ - public function getEffectiveUri() + public function getEffectiveUri(): UriInterface { return $this->request->getUri(); } @@ -93,19 +104,17 @@ final class TransferStats /** * Get the estimated time the request was being transferred by the handler. * - * @return float Time in seconds. + * @return float|null Time in seconds. */ - public function getTransferTime() + public function getTransferTime(): ?float { return $this->transferTime; } /** * Gets an array of all of the handler specific transfer data. - * - * @return array */ - public function getHandlerStats() + public function getHandlerStats(): array { return $this->handlerStats; } @@ -117,10 +126,8 @@ final class TransferStats * * @return mixed|null */ - public function getHandlerStat($stat) + public function getHandlerStat(string $stat) { - return isset($this->handlerStats[$stat]) - ? $this->handlerStats[$stat] - : null; + return $this->handlerStats[$stat] ?? null; } } diff --git a/vendor/guzzlehttp/guzzle/src/UriTemplate.php b/vendor/guzzlehttp/guzzle/src/UriTemplate.php deleted file mode 100644 index 96dcfd09..00000000 --- a/vendor/guzzlehttp/guzzle/src/UriTemplate.php +++ /dev/null @@ -1,237 +0,0 @@ - ['prefix' => '', 'joiner' => ',', 'query' => false], - '+' => ['prefix' => '', 'joiner' => ',', 'query' => false], - '#' => ['prefix' => '#', 'joiner' => ',', 'query' => false], - '.' => ['prefix' => '.', 'joiner' => '.', 'query' => false], - '/' => ['prefix' => '/', 'joiner' => '/', 'query' => false], - ';' => ['prefix' => ';', 'joiner' => ';', 'query' => true], - '?' => ['prefix' => '?', 'joiner' => '&', 'query' => true], - '&' => ['prefix' => '&', 'joiner' => '&', 'query' => true] - ]; - - /** @var array Delimiters */ - private static $delims = [':', '/', '?', '#', '[', ']', '@', '!', '$', - '&', '\'', '(', ')', '*', '+', ',', ';', '=']; - - /** @var array Percent encoded delimiters */ - private static $delimsPct = ['%3A', '%2F', '%3F', '%23', '%5B', '%5D', - '%40', '%21', '%24', '%26', '%27', '%28', '%29', '%2A', '%2B', '%2C', - '%3B', '%3D']; - - public function expand($template, array $variables) - { - if (false === strpos($template, '{')) { - return $template; - } - - $this->template = $template; - $this->variables = $variables; - - return preg_replace_callback( - '/\{([^\}]+)\}/', - [$this, 'expandMatch'], - $this->template - ); - } - - /** - * Parse an expression into parts - * - * @param string $expression Expression to parse - * - * @return array Returns an associative array of parts - */ - private function parseExpression($expression) - { - $result = []; - - if (isset(self::$operatorHash[$expression[0]])) { - $result['operator'] = $expression[0]; - $expression = substr($expression, 1); - } else { - $result['operator'] = ''; - } - - foreach (explode(',', $expression) as $value) { - $value = trim($value); - $varspec = []; - if ($colonPos = strpos($value, ':')) { - $varspec['value'] = substr($value, 0, $colonPos); - $varspec['modifier'] = ':'; - $varspec['position'] = (int) substr($value, $colonPos + 1); - } elseif (substr($value, -1) === '*') { - $varspec['modifier'] = '*'; - $varspec['value'] = substr($value, 0, -1); - } else { - $varspec['value'] = (string) $value; - $varspec['modifier'] = ''; - } - $result['values'][] = $varspec; - } - - return $result; - } - - /** - * Process an expansion - * - * @param array $matches Matches met in the preg_replace_callback - * - * @return string Returns the replacement string - */ - private function expandMatch(array $matches) - { - static $rfc1738to3986 = ['+' => '%20', '%7e' => '~']; - - $replacements = []; - $parsed = self::parseExpression($matches[1]); - $prefix = self::$operatorHash[$parsed['operator']]['prefix']; - $joiner = self::$operatorHash[$parsed['operator']]['joiner']; - $useQuery = self::$operatorHash[$parsed['operator']]['query']; - - foreach ($parsed['values'] as $value) { - if (!isset($this->variables[$value['value']])) { - continue; - } - - $variable = $this->variables[$value['value']]; - $actuallyUseQuery = $useQuery; - $expanded = ''; - - if (is_array($variable)) { - $isAssoc = $this->isAssoc($variable); - $kvp = []; - foreach ($variable as $key => $var) { - if ($isAssoc) { - $key = rawurlencode($key); - $isNestedArray = is_array($var); - } else { - $isNestedArray = false; - } - - if (!$isNestedArray) { - $var = rawurlencode($var); - if ($parsed['operator'] === '+' || - $parsed['operator'] === '#' - ) { - $var = $this->decodeReserved($var); - } - } - - if ($value['modifier'] === '*') { - if ($isAssoc) { - if ($isNestedArray) { - // Nested arrays must allow for deeply nested - // structures. - $var = strtr( - http_build_query([$key => $var]), - $rfc1738to3986 - ); - } else { - $var = $key . '=' . $var; - } - } elseif ($key > 0 && $actuallyUseQuery) { - $var = $value['value'] . '=' . $var; - } - } - - $kvp[$key] = $var; - } - - if (empty($variable)) { - $actuallyUseQuery = false; - } elseif ($value['modifier'] === '*') { - $expanded = implode($joiner, $kvp); - if ($isAssoc) { - // Don't prepend the value name when using the explode - // modifier with an associative array. - $actuallyUseQuery = false; - } - } else { - if ($isAssoc) { - // When an associative array is encountered and the - // explode modifier is not set, then the result must be - // a comma separated list of keys followed by their - // respective values. - foreach ($kvp as $k => &$v) { - $v = $k . ',' . $v; - } - } - $expanded = implode(',', $kvp); - } - } else { - if ($value['modifier'] === ':') { - $variable = substr($variable, 0, $value['position']); - } - $expanded = rawurlencode($variable); - if ($parsed['operator'] === '+' || $parsed['operator'] === '#') { - $expanded = $this->decodeReserved($expanded); - } - } - - if ($actuallyUseQuery) { - if (!$expanded && $joiner !== '&') { - $expanded = $value['value']; - } else { - $expanded = $value['value'] . '=' . $expanded; - } - } - - $replacements[] = $expanded; - } - - $ret = implode($joiner, $replacements); - if ($ret && $prefix) { - return $prefix . $ret; - } - - return $ret; - } - - /** - * Determines if an array is associative. - * - * This makes the assumption that input arrays are sequences or hashes. - * This assumption is a tradeoff for accuracy in favor of speed, but it - * should work in almost every case where input is supplied for a URI - * template. - * - * @param array $array Array to check - * - * @return bool - */ - private function isAssoc(array $array) - { - return $array && array_keys($array)[0] !== 0; - } - - /** - * Removes percent encoding on reserved characters (used with + and # - * modifiers). - * - * @param string $string String to fix - * - * @return string - */ - private function decodeReserved($string) - { - return str_replace(self::$delimsPct, self::$delims, $string); - } -} diff --git a/vendor/guzzlehttp/guzzle/src/Utils.php b/vendor/guzzlehttp/guzzle/src/Utils.php new file mode 100644 index 00000000..91591da2 --- /dev/null +++ b/vendor/guzzlehttp/guzzle/src/Utils.php @@ -0,0 +1,382 @@ +getHost()) { + $asciiHost = self::idnToAsci($uri->getHost(), $options, $info); + if ($asciiHost === false) { + $errorBitSet = $info['errors'] ?? 0; + + $errorConstants = array_filter(array_keys(get_defined_constants()), static function (string $name): bool { + return substr($name, 0, 11) === 'IDNA_ERROR_'; + }); + + $errors = []; + foreach ($errorConstants as $errorConstant) { + if ($errorBitSet & constant($errorConstant)) { + $errors[] = $errorConstant; + } + } + + $errorMessage = 'IDN conversion failed'; + if ($errors) { + $errorMessage .= ' (errors: ' . implode(', ', $errors) . ')'; + } + + throw new InvalidArgumentException($errorMessage); + } + if ($uri->getHost() !== $asciiHost) { + // Replace URI only if the ASCII version is different + $uri = $uri->withHost($asciiHost); + } + } + + return $uri; + } + + /** + * @internal + */ + public static function getenv(string $name): ?string + { + if (isset($_SERVER[$name])) { + return (string) $_SERVER[$name]; + } + + if (\PHP_SAPI === 'cli' && ($value = \getenv($name)) !== false && $value !== null) { + return (string) $value; + } + + return null; + } + + /** + * @return string|false + */ + private static function idnToAsci(string $domain, int $options, ?array &$info = []) + { + if (\function_exists('idn_to_ascii') && \defined('INTL_IDNA_VARIANT_UTS46')) { + return \idn_to_ascii($domain, $options, \INTL_IDNA_VARIANT_UTS46, $info); + } + + throw new \Error('ext-idn or symfony/polyfill-intl-idn not loaded or too old'); + } +} diff --git a/vendor/guzzlehttp/guzzle/src/functions.php b/vendor/guzzlehttp/guzzle/src/functions.php index a3ac450d..a70d2cbf 100644 --- a/vendor/guzzlehttp/guzzle/src/functions.php +++ b/vendor/guzzlehttp/guzzle/src/functions.php @@ -1,77 +1,34 @@ expand($template, $variables); -} - /** * Debug function used to describe the provided value type and class. * - * @param mixed $input + * @param mixed $input Any type of variable to describe the type of. This + * parameter misses a typehint because of that. * * @return string Returns a string containing the type of the variable and * if a class is provided, the class name. + * + * @deprecated describe_type will be removed in guzzlehttp/guzzle:8.0. Use Utils::describeType instead. */ -function describe_type($input) +function describe_type($input): string { - switch (gettype($input)) { - case 'object': - return 'object(' . get_class($input) . ')'; - case 'array': - return 'array(' . count($input) . ')'; - default: - ob_start(); - var_dump($input); - // normalize float vs double - return str_replace('double(', 'float(', rtrim(ob_get_clean())); - } + return Utils::describeType($input); } /** * Parses an array of header lines into an associative array of headers. * - * @param array $lines Header lines array of strings in the following - * format: "Name: Value" - * @return array + * @param iterable $lines Header lines array of strings in the following + * format: "Name: Value" + * + * @deprecated headers_from_lines will be removed in guzzlehttp/guzzle:8.0. Use Utils::headersFromLines instead. */ -function headers_from_lines($lines) +function headers_from_lines(iterable $lines): array { - $headers = []; - - foreach ($lines as $line) { - $parts = explode(':', $line, 2); - $headers[trim($parts[0])][] = isset($parts[1]) - ? trim($parts[1]) - : null; - } - - return $headers; + return Utils::headersFromLines($lines); } /** @@ -80,16 +37,12 @@ function headers_from_lines($lines) * @param mixed $value Optional value * * @return resource + * + * @deprecated debug_resource will be removed in guzzlehttp/guzzle:8.0. Use Utils::debugResource instead. */ function debug_resource($value = null) { - if (is_resource($value)) { - return $value; - } elseif (defined('STDOUT')) { - return STDOUT; - } - - return fopen('php://output', 'w'); + return Utils::debugResource($value); } /** @@ -98,49 +51,24 @@ function debug_resource($value = null) * The returned handler is not wrapped by any default middlewares. * * @throws \RuntimeException if no viable Handler is available. - * @return callable Returns the best handler for the given system. + * + * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the best handler for the given system. + * + * @deprecated choose_handler will be removed in guzzlehttp/guzzle:8.0. Use Utils::chooseHandler instead. */ -function choose_handler() +function choose_handler(): callable { - $handler = null; - if (function_exists('curl_multi_exec') && function_exists('curl_exec')) { - $handler = Proxy::wrapSync(new CurlMultiHandler(), new CurlHandler()); - } elseif (function_exists('curl_exec')) { - $handler = new CurlHandler(); - } elseif (function_exists('curl_multi_exec')) { - $handler = new CurlMultiHandler(); - } - - if (ini_get('allow_url_fopen')) { - $handler = $handler - ? Proxy::wrapStreaming($handler, new StreamHandler()) - : new StreamHandler(); - } elseif (!$handler) { - throw new \RuntimeException('GuzzleHttp requires cURL, the ' - . 'allow_url_fopen ini setting, or a custom HTTP handler.'); - } - - return $handler; + return Utils::chooseHandler(); } /** - * Get the default User-Agent string to use with Guzzle + * Get the default User-Agent string to use with Guzzle. * - * @return string + * @deprecated default_user_agent will be removed in guzzlehttp/guzzle:8.0. Use Utils::defaultUserAgent instead. */ -function default_user_agent() +function default_user_agent(): string { - static $defaultAgent = ''; - - if (!$defaultAgent) { - $defaultAgent = 'GuzzleHttp/' . Client::VERSION; - if (extension_loaded('curl') && function_exists('curl_version')) { - $defaultAgent .= ' curl/' . \curl_version()['version']; - } - $defaultAgent .= ' PHP/' . PHP_VERSION; - } - - return $defaultAgent; + return Utils::defaultUserAgent(); } /** @@ -154,81 +82,24 @@ function default_user_agent() * * Note: the result of this function is cached for subsequent calls. * - * @return string * @throws \RuntimeException if no bundle can be found. + * + * @deprecated default_ca_bundle will be removed in guzzlehttp/guzzle:8.0. This function is not needed in PHP 5.6+. */ -function default_ca_bundle() +function default_ca_bundle(): string { - static $cached = null; - static $cafiles = [ - // Red Hat, CentOS, Fedora (provided by the ca-certificates package) - '/etc/pki/tls/certs/ca-bundle.crt', - // Ubuntu, Debian (provided by the ca-certificates package) - '/etc/ssl/certs/ca-certificates.crt', - // FreeBSD (provided by the ca_root_nss package) - '/usr/local/share/certs/ca-root-nss.crt', - // SLES 12 (provided by the ca-certificates package) - '/var/lib/ca-certificates/ca-bundle.pem', - // OS X provided by homebrew (using the default path) - '/usr/local/etc/openssl/cert.pem', - // Google app engine - '/etc/ca-certificates.crt', - // Windows? - 'C:\\windows\\system32\\curl-ca-bundle.crt', - 'C:\\windows\\curl-ca-bundle.crt', - ]; - - if ($cached) { - return $cached; - } - - if ($ca = ini_get('openssl.cafile')) { - return $cached = $ca; - } - - if ($ca = ini_get('curl.cainfo')) { - return $cached = $ca; - } - - foreach ($cafiles as $filename) { - if (file_exists($filename)) { - return $cached = $filename; - } - } - - throw new \RuntimeException(<<< EOT -No system CA bundle could be found in any of the the common system locations. -PHP versions earlier than 5.6 are not properly configured to use the system's -CA bundle by default. In order to verify peer certificates, you will need to -supply the path on disk to a certificate bundle to the 'verify' request -option: http://docs.guzzlephp.org/en/latest/clients.html#verify. If you do not -need a specific certificate bundle, then Mozilla provides a commonly used CA -bundle which can be downloaded here (provided by the maintainer of cURL): -https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt. Once -you have a CA bundle available on disk, you can set the 'openssl.cafile' PHP -ini setting to point to the path to the file, allowing you to omit the 'verify' -request option. See http://curl.haxx.se/docs/sslcerts.html for more -information. -EOT - ); + return Utils::defaultCaBundle(); } /** * Creates an associative array of lowercase header names to the actual * header casing. * - * @param array $headers - * - * @return array + * @deprecated normalize_header_keys will be removed in guzzlehttp/guzzle:8.0. Use Utils::normalizeHeaderKeys instead. */ -function normalize_header_keys(array $headers) +function normalize_header_keys(array $headers): array { - $result = []; - foreach (array_keys($headers) as $key) { - $result[strtolower($key)] = $key; - } - - return $result; + return Utils::normalizeHeaderKeys($headers); } /** @@ -245,89 +116,52 @@ function normalize_header_keys(array $headers) * 3. The area starts with "." and the area is the last part of the host. e.g. * '.mit.edu' will match any host that ends with '.mit.edu'. * - * @param string $host Host to check against the patterns. - * @param array $noProxyArray An array of host patterns. + * @param string $host Host to check against the patterns. + * @param string[] $noProxyArray An array of host patterns. * - * @return bool + * @throws Exception\InvalidArgumentException + * + * @deprecated is_host_in_noproxy will be removed in guzzlehttp/guzzle:8.0. Use Utils::isHostInNoProxy instead. */ -function is_host_in_noproxy($host, array $noProxyArray) +function is_host_in_noproxy(string $host, array $noProxyArray): bool { - if (strlen($host) === 0) { - throw new \InvalidArgumentException('Empty host provided'); - } - - // Strip port if present. - if (strpos($host, ':')) { - $host = explode($host, ':', 2)[0]; - } - - foreach ($noProxyArray as $area) { - // Always match on wildcards. - if ($area === '*') { - return true; - } elseif (empty($area)) { - // Don't match on empty values. - continue; - } elseif ($area === $host) { - // Exact matches. - return true; - } else { - // Special match if the area when prefixed with ".". Remove any - // existing leading "." and add a new leading ".". - $area = '.' . ltrim($area, '.'); - if (substr($host, -(strlen($area))) === $area) { - return true; - } - } - } - - return false; + return Utils::isHostInNoProxy($host, $noProxyArray); } /** * Wrapper for json_decode that throws when an error occurs. * * @param string $json JSON data to parse - * @param bool $assoc When true, returned objects will be converted + * @param bool $assoc When true, returned objects will be converted * into associative arrays. * @param int $depth User specified recursion depth. * @param int $options Bitmask of JSON decode options. * - * @return mixed - * @throws \InvalidArgumentException if the JSON cannot be decoded. - * @link http://www.php.net/manual/en/function.json-decode.php + * @return object|array|string|int|float|bool|null + * + * @throws Exception\InvalidArgumentException if the JSON cannot be decoded. + * + * @link https://www.php.net/manual/en/function.json-decode.php + * @deprecated json_decode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonDecode instead. */ -function json_decode($json, $assoc = false, $depth = 512, $options = 0) +function json_decode(string $json, bool $assoc = false, int $depth = 512, int $options = 0) { - $data = \json_decode($json, $assoc, $depth, $options); - if (JSON_ERROR_NONE !== json_last_error()) { - throw new \InvalidArgumentException( - 'json_decode error: ' . json_last_error_msg() - ); - } - - return $data; + return Utils::jsonDecode($json, $assoc, $depth, $options); } /** * Wrapper for JSON encoding that throws when an error occurs. * * @param mixed $value The value being encoded - * @param int $options JSON encode option bitmask - * @param int $depth Set the maximum depth. Must be greater than zero. + * @param int $options JSON encode option bitmask + * @param int $depth Set the maximum depth. Must be greater than zero. * - * @return string - * @throws \InvalidArgumentException if the JSON cannot be encoded. - * @link http://www.php.net/manual/en/function.json-encode.php + * @throws Exception\InvalidArgumentException if the JSON cannot be encoded. + * + * @link https://www.php.net/manual/en/function.json-encode.php + * @deprecated json_encode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonEncode instead. */ -function json_encode($value, $options = 0, $depth = 512) +function json_encode($value, int $options = 0, int $depth = 512): string { - $json = \json_encode($value, $options, $depth); - if (JSON_ERROR_NONE !== json_last_error()) { - throw new \InvalidArgumentException( - 'json_encode error: ' . json_last_error_msg() - ); - } - - return $json; + return Utils::jsonEncode($value, $options, $depth); } diff --git a/vendor/guzzlehttp/guzzle/src/functions_include.php b/vendor/guzzlehttp/guzzle/src/functions_include.php index a93393ac..6636a422 100644 --- a/vendor/guzzlehttp/guzzle/src/functions_include.php +++ b/vendor/guzzlehttp/guzzle/src/functions_include.php @@ -1,6 +1,6 @@ +The MIT License (MIT) + +Copyright (c) 2015 Michael Dowling +Copyright (c) 2015 Graham Campbell +Copyright (c) 2017 Tobias Schultze +Copyright (c) 2020 Tobias Nyholm Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/guzzlehttp/promises/README.md b/vendor/guzzlehttp/promises/README.md index 7b607e28..c175fec7 100644 --- a/vendor/guzzlehttp/promises/README.md +++ b/vendor/guzzlehttp/promises/README.md @@ -26,7 +26,7 @@ for a general introduction to promises. - Promises can be cancelled. - Works with any object that has a `then` function. - C# style async/await coroutine promises using - `GuzzleHttp\Promise\coroutine()`. + `GuzzleHttp\Promise\Coroutine::of()`. # Quick start @@ -88,7 +88,7 @@ $promise }); // Resolving the promise triggers the $onFulfilled callbacks and outputs -// "Hello, reader". +// "Hello, reader." $promise->resolve('reader.'); ``` @@ -150,7 +150,7 @@ use GuzzleHttp\Promise\Promise; $promise = new Promise(); $promise->then(null, function ($reason) { - throw new \Exception($reason); + throw new Exception($reason); })->then(null, function ($reason) { assert($reason->getMessage() === 'Error!'); }); @@ -182,7 +182,6 @@ invoked using the value returned from the `$onRejected` callback. ```php use GuzzleHttp\Promise\Promise; -use GuzzleHttp\Promise\RejectedPromise; $promise = new Promise(); $promise @@ -220,7 +219,7 @@ the promise is rejected with the exception and the exception is thrown. ```php $promise = new Promise(function () use (&$promise) { - throw new \Exception('foo'); + throw new Exception('foo'); }); $promise->wait(); // throws the exception. @@ -397,7 +396,7 @@ $deferred = new React\Promise\Deferred(); $reactPromise = $deferred->promise(); // Create a Guzzle promise that is fulfilled with a React promise. -$guzzlePromise = new \GuzzleHttp\Promise\Promise(); +$guzzlePromise = new GuzzleHttp\Promise\Promise(); $guzzlePromise->then(function ($value) use ($reactPromise) { // Do something something with the value... // Return the React promise @@ -424,7 +423,7 @@ instance. ```php // Get the global task queue -$queue = \GuzzleHttp\Promise\queue(); +$queue = GuzzleHttp\Promise\Utils::queue(); $queue->run(); ``` @@ -502,3 +501,47 @@ $promise->then(function ($value) { echo $value; }); $promise->resolve('foo'); // prints "foo" ``` + + +## Upgrading from Function API + +A static API was first introduced in 1.4.0, in order to mitigate problems with functions conflicting between global and local copies of the package. The function API will be removed in 2.0.0. A migration table has been provided here for your convenience: + +| Original Function | Replacement Method | +|----------------|----------------| +| `queue` | `Utils::queue` | +| `task` | `Utils::task` | +| `promise_for` | `Create::promiseFor` | +| `rejection_for` | `Create::rejectionFor` | +| `exception_for` | `Create::exceptionFor` | +| `iter_for` | `Create::iterFor` | +| `inspect` | `Utils::inspect` | +| `inspect_all` | `Utils::inspectAll` | +| `unwrap` | `Utils::unwrap` | +| `all` | `Utils::all` | +| `some` | `Utils::some` | +| `any` | `Utils::any` | +| `settle` | `Utils::settle` | +| `each` | `Each::of` | +| `each_limit` | `Each::ofLimit` | +| `each_limit_all` | `Each::ofLimitAll` | +| `!is_fulfilled` | `Is::pending` | +| `is_fulfilled` | `Is::fulfilled` | +| `is_rejected` | `Is::rejected` | +| `is_settled` | `Is::settled` | +| `coroutine` | `Coroutine::of` | + + +## Security + +If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/promises/security/policy) for more information. + +## License + +Guzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information. + +## For Enterprise + +Available as part of the Tidelift Subscription + +The maintainers of Guzzle and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-promises?utm_source=packagist-guzzlehttp-promises&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/vendor/guzzlehttp/promises/composer.json b/vendor/guzzlehttp/promises/composer.json index ec41a61e..c959fb32 100644 --- a/vendor/guzzlehttp/promises/composer.json +++ b/vendor/guzzlehttp/promises/composer.json @@ -4,17 +4,32 @@ "keywords": ["promise"], "license": "MIT", "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "require": { - "php": ">=5.5.0" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "autoload": { "psr-4": { @@ -22,13 +37,22 @@ }, "files": ["src/functions_include.php"] }, + "autoload-dev": { + "psr-4": { + "GuzzleHttp\\Promise\\Tests\\": "tests/" + } + }, "scripts": { - "test": "vendor/bin/phpunit", - "test-ci": "vendor/bin/phpunit --coverage-text" + "test": "vendor/bin/simple-phpunit", + "test-ci": "vendor/bin/simple-phpunit --coverage-text" }, "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } + }, + "config": { + "preferred-install": "dist", + "sort-packages": true } } diff --git a/vendor/guzzlehttp/promises/src/AggregateException.php b/vendor/guzzlehttp/promises/src/AggregateException.php index 6a5690c3..d2b5712b 100644 --- a/vendor/guzzlehttp/promises/src/AggregateException.php +++ b/vendor/guzzlehttp/promises/src/AggregateException.php @@ -1,4 +1,5 @@ currentPromise->wait(); } }); - $this->nextCoroutine($this->generator->current()); + try { + $this->nextCoroutine($this->generator->current()); + } catch (\Exception $exception) { + $this->result->reject($exception); + } catch (Throwable $throwable) { + $this->result->reject($throwable); + } + } + + /** + * Create a new coroutine. + * + * @return self + */ + public static function of(callable $generatorFn) + { + return new self($generatorFn); } public function then( @@ -108,7 +126,7 @@ final class Coroutine implements PromiseInterface private function nextCoroutine($yielded) { - $this->currentPromise = promise_for($yielded) + $this->currentPromise = Create::promiseFor($yielded) ->then([$this, '_handleSuccess'], [$this, '_handleFailure']); } @@ -139,7 +157,7 @@ final class Coroutine implements PromiseInterface { unset($this->currentPromise); try { - $nextYield = $this->generator->throw(exception_for($reason)); + $nextYield = $this->generator->throw(Create::exceptionFor($reason)); // The throw was caught, so keep iterating on the coroutine $this->nextCoroutine($nextYield); } catch (Exception $exception) { diff --git a/vendor/guzzlehttp/promises/src/Create.php b/vendor/guzzlehttp/promises/src/Create.php new file mode 100644 index 00000000..8d038e9c --- /dev/null +++ b/vendor/guzzlehttp/promises/src/Create.php @@ -0,0 +1,84 @@ +then([$promise, 'resolve'], [$promise, 'reject']); + return $promise; + } + + return new FulfilledPromise($value); + } + + /** + * Creates a rejected promise for a reason if the reason is not a promise. + * If the provided reason is a promise, then it is returned as-is. + * + * @param mixed $reason Promise or reason. + * + * @return PromiseInterface + */ + public static function rejectionFor($reason) + { + if ($reason instanceof PromiseInterface) { + return $reason; + } + + return new RejectedPromise($reason); + } + + /** + * Create an exception for a rejected promise value. + * + * @param mixed $reason + * + * @return \Exception|\Throwable + */ + public static function exceptionFor($reason) + { + if ($reason instanceof \Exception || $reason instanceof \Throwable) { + return $reason; + } + + return new RejectionException($reason); + } + + /** + * Returns an iterator for the given value. + * + * @param mixed $value + * + * @return \Iterator + */ + public static function iterFor($value) + { + if ($value instanceof \Iterator) { + return $value; + } + + if (is_array($value)) { + return new \ArrayIterator($value); + } + + return new \ArrayIterator([$value]); + } +} diff --git a/vendor/guzzlehttp/promises/src/Each.php b/vendor/guzzlehttp/promises/src/Each.php new file mode 100644 index 00000000..1dda3549 --- /dev/null +++ b/vendor/guzzlehttp/promises/src/Each.php @@ -0,0 +1,90 @@ + $onFulfilled, + 'rejected' => $onRejected + ]))->promise(); + } + + /** + * Like of, but only allows a certain number of outstanding promises at any + * given time. + * + * $concurrency may be an integer or a function that accepts the number of + * pending promises and returns a numeric concurrency limit value to allow + * for dynamic a concurrency size. + * + * @param mixed $iterable + * @param int|callable $concurrency + * @param callable $onFulfilled + * @param callable $onRejected + * + * @return PromiseInterface + */ + public static function ofLimit( + $iterable, + $concurrency, + callable $onFulfilled = null, + callable $onRejected = null + ) { + return (new EachPromise($iterable, [ + 'fulfilled' => $onFulfilled, + 'rejected' => $onRejected, + 'concurrency' => $concurrency + ]))->promise(); + } + + /** + * Like limit, but ensures that no promise in the given $iterable argument + * is rejected. If any promise is rejected, then the aggregate promise is + * rejected with the encountered rejection. + * + * @param mixed $iterable + * @param int|callable $concurrency + * @param callable $onFulfilled + * + * @return PromiseInterface + */ + public static function ofLimitAll( + $iterable, + $concurrency, + callable $onFulfilled = null + ) { + return each_limit( + $iterable, + $concurrency, + $onFulfilled, + function ($reason, $idx, PromiseInterface $aggregate) { + $aggregate->reject($reason); + } + ); + } +} diff --git a/vendor/guzzlehttp/promises/src/EachPromise.php b/vendor/guzzlehttp/promises/src/EachPromise.php index d0ddf603..38ecb59b 100644 --- a/vendor/guzzlehttp/promises/src/EachPromise.php +++ b/vendor/guzzlehttp/promises/src/EachPromise.php @@ -1,4 +1,5 @@ iterable = iter_for($iterable); + $this->iterable = Create::iterFor($iterable); if (isset($config['concurrency'])) { $this->concurrency = $config['concurrency']; @@ -65,6 +68,7 @@ class EachPromise implements PromisorInterface } } + /** @psalm-suppress InvalidNullableReturnType */ public function promise() { if ($this->aggregate) { @@ -73,14 +77,27 @@ class EachPromise implements PromisorInterface try { $this->createPromise(); + /** @psalm-assert Promise $this->aggregate */ $this->iterable->rewind(); $this->refillPending(); } catch (\Throwable $e) { + /** + * @psalm-suppress NullReference + * @phpstan-ignore-next-line + */ $this->aggregate->reject($e); } catch (\Exception $e) { + /** + * @psalm-suppress NullReference + * @phpstan-ignore-next-line + */ $this->aggregate->reject($e); } + /** + * @psalm-suppress NullableReturnStatement + * @phpstan-ignore-next-line + */ return $this->aggregate; } @@ -88,18 +105,16 @@ class EachPromise implements PromisorInterface { $this->mutex = false; $this->aggregate = new Promise(function () { - reset($this->pending); - if (empty($this->pending) && !$this->iterable->valid()) { - $this->aggregate->resolve(null); + if ($this->checkIfFinished()) { return; } - + reset($this->pending); // Consume a potentially fluctuating list of promises while // ensuring that indexes are maintained (precluding array_shift). while ($promise = current($this->pending)) { next($this->pending); $promise->wait(); - if ($this->aggregate->getState() !== PromiseInterface::PENDING) { + if (Is::settled($this->aggregate)) { return; } } @@ -109,6 +124,7 @@ class EachPromise implements PromisorInterface $clearFn = function () { $this->iterable = $this->concurrency = $this->pending = null; $this->onFulfilled = $this->onRejected = null; + $this->nextPendingIndex = 0; }; $this->aggregate->then($clearFn, $clearFn); @@ -148,22 +164,32 @@ class EachPromise implements PromisorInterface return false; } - $promise = promise_for($this->iterable->current()); - $idx = $this->iterable->key(); + $promise = Create::promiseFor($this->iterable->current()); + $key = $this->iterable->key(); + + // Iterable keys may not be unique, so we use a counter to + // guarantee uniqueness + $idx = $this->nextPendingIndex++; $this->pending[$idx] = $promise->then( - function ($value) use ($idx) { + function ($value) use ($idx, $key) { if ($this->onFulfilled) { call_user_func( - $this->onFulfilled, $value, $idx, $this->aggregate + $this->onFulfilled, + $value, + $key, + $this->aggregate ); } $this->step($idx); }, - function ($reason) use ($idx) { + function ($reason) use ($idx, $key) { if ($this->onRejected) { call_user_func( - $this->onRejected, $reason, $idx, $this->aggregate + $this->onRejected, + $reason, + $key, + $this->aggregate ); } $this->step($idx); @@ -201,7 +227,7 @@ class EachPromise implements PromisorInterface private function step($idx) { // If the promise was already resolved, then ignore this step. - if ($this->aggregate->getState() !== PromiseInterface::PENDING) { + if (Is::settled($this->aggregate)) { return; } diff --git a/vendor/guzzlehttp/promises/src/FulfilledPromise.php b/vendor/guzzlehttp/promises/src/FulfilledPromise.php index dbbeeb9f..98f72a62 100644 --- a/vendor/guzzlehttp/promises/src/FulfilledPromise.php +++ b/vendor/guzzlehttp/promises/src/FulfilledPromise.php @@ -1,4 +1,5 @@ value = $value; @@ -30,11 +32,11 @@ class FulfilledPromise implements PromiseInterface return $this; } - $queue = queue(); + $queue = Utils::queue(); $p = new Promise([$queue, 'run']); $value = $this->value; $queue->add(static function () use ($p, $value, $onFulfilled) { - if ($p->getState() === self::PENDING) { + if (Is::pending($p)) { try { $p->resolve($onFulfilled($value)); } catch (\Throwable $e) { diff --git a/vendor/guzzlehttp/promises/src/Is.php b/vendor/guzzlehttp/promises/src/Is.php new file mode 100644 index 00000000..c3ed8d01 --- /dev/null +++ b/vendor/guzzlehttp/promises/src/Is.php @@ -0,0 +1,46 @@ +getState() === PromiseInterface::PENDING; + } + + /** + * Returns true if a promise is fulfilled or rejected. + * + * @return bool + */ + public static function settled(PromiseInterface $promise) + { + return $promise->getState() !== PromiseInterface::PENDING; + } + + /** + * Returns true if a promise is fulfilled. + * + * @return bool + */ + public static function fulfilled(PromiseInterface $promise) + { + return $promise->getState() === PromiseInterface::FULFILLED; + } + + /** + * Returns true if a promise is rejected. + * + * @return bool + */ + public static function rejected(PromiseInterface $promise) + { + return $promise->getState() === PromiseInterface::REJECTED; + } +} diff --git a/vendor/guzzlehttp/promises/src/Promise.php b/vendor/guzzlehttp/promises/src/Promise.php index 844ada07..75939057 100644 --- a/vendor/guzzlehttp/promises/src/Promise.php +++ b/vendor/guzzlehttp/promises/src/Promise.php @@ -1,4 +1,5 @@ state === self::FULFILLED) { - return $onFulfilled - ? promise_for($this->result)->then($onFulfilled) - : promise_for($this->result); + $promise = Create::promiseFor($this->result); + return $onFulfilled ? $promise->then($onFulfilled) : $promise; } // It's either cancelled or rejected, so return a rejected promise // and immediately invoke any callbacks. - $rejection = rejection_for($this->result); + $rejection = Create::rejectionFor($this->result); return $onRejected ? $rejection->then(null, $onRejected) : $rejection; } @@ -61,19 +61,15 @@ class Promise implements PromiseInterface { $this->waitIfPending(); - $inner = $this->result instanceof PromiseInterface - ? $this->result->wait($unwrap) - : $this->result; - + if ($this->result instanceof PromiseInterface) { + return $this->result->wait($unwrap); + } if ($unwrap) { - if ($this->result instanceof PromiseInterface - || $this->state === self::FULFILLED - ) { - return $inner; - } else { - // It's rejected so "unwrap" and throw an exception. - throw exception_for($inner); + if ($this->state === self::FULFILLED) { + return $this->result; } + // It's rejected so "unwrap" and throw an exception. + throw Create::exceptionFor($this->result); } } @@ -103,6 +99,7 @@ class Promise implements PromiseInterface } // Reject the promise only if it wasn't rejected in a then callback. + /** @psalm-suppress RedundantCondition */ if ($this->state === self::PENDING) { $this->reject(new CancellationException('Promise has been cancelled')); } @@ -148,17 +145,15 @@ class Promise implements PromiseInterface // If the value was not a settled promise or a thenable, then resolve // it in the task queue using the correct ID. - if (!method_exists($value, 'then')) { + if (!is_object($value) || !method_exists($value, 'then')) { $id = $state === self::FULFILLED ? 1 : 2; // It's a success, so resolve the handlers in the queue. - queue()->add(static function () use ($id, $value, $handlers) { + Utils::queue()->add(static function () use ($id, $value, $handlers) { foreach ($handlers as $handler) { self::callHandler($id, $value, $handler); } }); - } elseif ($value instanceof Promise - && $value->getState() === self::PENDING - ) { + } elseif ($value instanceof Promise && Is::pending($value)) { // We can just merge our handlers onto the next promise. $value->handlers = array_merge($value->handlers, $handlers); } else { @@ -184,8 +179,6 @@ class Promise implements PromiseInterface * @param int $index 1 (resolve) or 2 (reject). * @param mixed $value Value to pass to the callback. * @param array $handler Array of handler data (promise and callbacks). - * - * @return array Returns the next group to resolve. */ private static function callHandler($index, $value, array $handler) { @@ -194,13 +187,21 @@ class Promise implements PromiseInterface // The promise may have been cancelled or resolved before placing // this thunk in the queue. - if ($promise->getState() !== self::PENDING) { + if (Is::settled($promise)) { return; } try { if (isset($handler[$index])) { - $promise->resolve($handler[$index]($value)); + /* + * If $f throws an exception, then $handler will be in the exception + * stack trace. Since $handler contains a reference to the callable + * itself we get a circular reference. We clear the $handler + * here to avoid that memory leak. + */ + $f = $handler[$index]; + unset($handler); + $promise->resolve($f($value)); } elseif ($index === 1) { // Forward resolution values as-is. $promise->resolve($value); @@ -224,15 +225,16 @@ class Promise implements PromiseInterface } elseif ($this->waitList) { $this->invokeWaitList(); } else { - // If there's not wait function, then reject the promise. + // If there's no wait function, then reject the promise. $this->reject('Cannot wait on a promise that has ' . 'no internal wait function. You must provide a wait ' . 'function when constructing the promise to be able to ' . 'wait on a promise.'); } - queue()->run(); + Utils::queue()->run(); + /** @psalm-suppress RedundantCondition */ if ($this->state === self::PENDING) { $this->reject('Invoking the wait callback did not resolve the promise'); } @@ -263,17 +265,13 @@ class Promise implements PromiseInterface $this->waitList = null; foreach ($waitList as $result) { - while (true) { + do { $result->waitIfPending(); + $result = $result->result; + } while ($result instanceof Promise); - if ($result->result instanceof Promise) { - $result = $result->result; - } else { - if ($result->result instanceof PromiseInterface) { - $result->result->wait(false); - } - break; - } + if ($result instanceof PromiseInterface) { + $result->wait(false); } } } diff --git a/vendor/guzzlehttp/promises/src/PromiseInterface.php b/vendor/guzzlehttp/promises/src/PromiseInterface.php index 8f5f4b99..e5983314 100644 --- a/vendor/guzzlehttp/promises/src/PromiseInterface.php +++ b/vendor/guzzlehttp/promises/src/PromiseInterface.php @@ -1,4 +1,5 @@ reason = $reason; @@ -30,11 +32,11 @@ class RejectedPromise implements PromiseInterface return $this; } - $queue = queue(); + $queue = Utils::queue(); $reason = $this->reason; $p = new Promise([$queue, 'run']); $queue->add(static function () use ($p, $reason, $onRejected) { - if ($p->getState() === self::PENDING) { + if (Is::pending($p)) { try { // Return a resolved promise if onRejected does not throw. $p->resolve($onRejected($reason)); @@ -59,8 +61,10 @@ class RejectedPromise implements PromiseInterface public function wait($unwrap = true, $defaultDelivery = null) { if ($unwrap) { - throw exception_for($this->reason); + throw Create::exceptionFor($this->reason); } + + return null; } public function getState() diff --git a/vendor/guzzlehttp/promises/src/RejectionException.php b/vendor/guzzlehttp/promises/src/RejectionException.php index 07c1136d..e2f13770 100644 --- a/vendor/guzzlehttp/promises/src/RejectionException.php +++ b/vendor/guzzlehttp/promises/src/RejectionException.php @@ -1,4 +1,5 @@ run(); + * GuzzleHttp\Promise\Utils::queue()->run(); */ class TaskQueue implements TaskQueueInterface { @@ -42,8 +43,8 @@ class TaskQueue implements TaskQueueInterface public function run() { - /** @var callable $task */ while ($task = array_shift($this->queue)) { + /** @var callable $task */ $task(); } } diff --git a/vendor/guzzlehttp/promises/src/TaskQueueInterface.php b/vendor/guzzlehttp/promises/src/TaskQueueInterface.php index ac8306e1..723d4d54 100644 --- a/vendor/guzzlehttp/promises/src/TaskQueueInterface.php +++ b/vendor/guzzlehttp/promises/src/TaskQueueInterface.php @@ -1,4 +1,5 @@ + * while ($eventLoop->isRunning()) { + * GuzzleHttp\Promise\Utils::queue()->run(); + * } + * + * + * @param TaskQueueInterface $assign Optionally specify a new queue instance. + * + * @return TaskQueueInterface + */ + public static function queue(TaskQueueInterface $assign = null) + { + static $queue; + + if ($assign) { + $queue = $assign; + } elseif (!$queue) { + $queue = new TaskQueue(); + } + + return $queue; + } + + /** + * Adds a function to run in the task queue when it is next `run()` and + * returns a promise that is fulfilled or rejected with the result. + * + * @param callable $task Task function to run. + * + * @return PromiseInterface + */ + public static function task(callable $task) + { + $queue = self::queue(); + $promise = new Promise([$queue, 'run']); + $queue->add(function () use ($task, $promise) { + try { + if (Is::pending($promise)) { + $promise->resolve($task()); + } + } catch (\Throwable $e) { + $promise->reject($e); + } catch (\Exception $e) { + $promise->reject($e); + } + }); + + return $promise; + } + + /** + * Synchronously waits on a promise to resolve and returns an inspection + * state array. + * + * Returns a state associative array containing a "state" key mapping to a + * valid promise state. If the state of the promise is "fulfilled", the + * array will contain a "value" key mapping to the fulfilled value of the + * promise. If the promise is rejected, the array will contain a "reason" + * key mapping to the rejection reason of the promise. + * + * @param PromiseInterface $promise Promise or value. + * + * @return array + */ + public static function inspect(PromiseInterface $promise) + { + try { + return [ + 'state' => PromiseInterface::FULFILLED, + 'value' => $promise->wait() + ]; + } catch (RejectionException $e) { + return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()]; + } catch (\Throwable $e) { + return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; + } catch (\Exception $e) { + return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; + } + } + + /** + * Waits on all of the provided promises, but does not unwrap rejected + * promises as thrown exception. + * + * Returns an array of inspection state arrays. + * + * @see inspect for the inspection state array format. + * + * @param PromiseInterface[] $promises Traversable of promises to wait upon. + * + * @return array + */ + public static function inspectAll($promises) + { + $results = []; + foreach ($promises as $key => $promise) { + $results[$key] = inspect($promise); + } + + return $results; + } + + /** + * Waits on all of the provided promises and returns the fulfilled values. + * + * Returns an array that contains the value of each promise (in the same + * order the promises were provided). An exception is thrown if any of the + * promises are rejected. + * + * @param iterable $promises Iterable of PromiseInterface objects to wait on. + * + * @return array + * + * @throws \Exception on error + * @throws \Throwable on error in PHP >=7 + */ + public static function unwrap($promises) + { + $results = []; + foreach ($promises as $key => $promise) { + $results[$key] = $promise->wait(); + } + + return $results; + } + + /** + * Given an array of promises, return a promise that is fulfilled when all + * the items in the array are fulfilled. + * + * The promise's fulfillment value is an array with fulfillment values at + * respective positions to the original array. If any promise in the array + * rejects, the returned promise is rejected with the rejection reason. + * + * @param mixed $promises Promises or values. + * @param bool $recursive If true, resolves new promises that might have been added to the stack during its own resolution. + * + * @return PromiseInterface + */ + public static function all($promises, $recursive = false) + { + $results = []; + $promise = Each::of( + $promises, + function ($value, $idx) use (&$results) { + $results[$idx] = $value; + }, + function ($reason, $idx, Promise $aggregate) { + $aggregate->reject($reason); + } + )->then(function () use (&$results) { + ksort($results); + return $results; + }); + + if (true === $recursive) { + $promise = $promise->then(function ($results) use ($recursive, &$promises) { + foreach ($promises as $promise) { + if (Is::pending($promise)) { + return self::all($promises, $recursive); + } + } + return $results; + }); + } + + return $promise; + } + + /** + * Initiate a competitive race between multiple promises or values (values + * will become immediately fulfilled promises). + * + * When count amount of promises have been fulfilled, the returned promise + * is fulfilled with an array that contains the fulfillment values of the + * winners in order of resolution. + * + * This promise is rejected with a {@see AggregateException} if the number + * of fulfilled promises is less than the desired $count. + * + * @param int $count Total number of promises. + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + */ + public static function some($count, $promises) + { + $results = []; + $rejections = []; + + return Each::of( + $promises, + function ($value, $idx, PromiseInterface $p) use (&$results, $count) { + if (Is::settled($p)) { + return; + } + $results[$idx] = $value; + if (count($results) >= $count) { + $p->resolve(null); + } + }, + function ($reason) use (&$rejections) { + $rejections[] = $reason; + } + )->then( + function () use (&$results, &$rejections, $count) { + if (count($results) !== $count) { + throw new AggregateException( + 'Not enough promises to fulfill count', + $rejections + ); + } + ksort($results); + return array_values($results); + } + ); + } + + /** + * Like some(), with 1 as count. However, if the promise fulfills, the + * fulfillment value is not an array of 1 but the value directly. + * + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + */ + public static function any($promises) + { + return self::some(1, $promises)->then(function ($values) { + return $values[0]; + }); + } + + /** + * Returns a promise that is fulfilled when all of the provided promises have + * been fulfilled or rejected. + * + * The returned promise is fulfilled with an array of inspection state arrays. + * + * @see inspect for the inspection state array format. + * + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + */ + public static function settle($promises) + { + $results = []; + + return Each::of( + $promises, + function ($value, $idx) use (&$results) { + $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value]; + }, + function ($reason, $idx) use (&$results) { + $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason]; + } + )->then(function () use (&$results) { + ksort($results); + return $results; + }); + } +} diff --git a/vendor/guzzlehttp/promises/src/functions.php b/vendor/guzzlehttp/promises/src/functions.php index 4e27709a..c03d39d0 100644 --- a/vendor/guzzlehttp/promises/src/functions.php +++ b/vendor/guzzlehttp/promises/src/functions.php @@ -1,4 +1,5 @@ add(function () use ($task, $promise) { - try { - $promise->resolve($task()); - } catch (\Throwable $e) { - $promise->reject($e); - } catch (\Exception $e) { - $promise->reject($e); - } - }); - - return $promise; + return Utils::task($task); } /** @@ -62,23 +47,12 @@ function task(callable $task) * @param mixed $value Promise or value. * * @return PromiseInterface + * + * @deprecated promise_for will be removed in guzzlehttp/promises:2.0. Use Create::promiseFor instead. */ function promise_for($value) { - if ($value instanceof PromiseInterface) { - return $value; - } - - // Return a Guzzle promise that shadows the given promise. - if (method_exists($value, 'then')) { - $wfn = method_exists($value, 'wait') ? [$value, 'wait'] : null; - $cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null; - $promise = new Promise($wfn, $cfn); - $value->then([$promise, 'resolve'], [$promise, 'reject']); - return $promise; - } - - return new FulfilledPromise($value); + return Create::promiseFor($value); } /** @@ -88,14 +62,12 @@ function promise_for($value) * @param mixed $reason Promise or reason. * * @return PromiseInterface + * + * @deprecated rejection_for will be removed in guzzlehttp/promises:2.0. Use Create::rejectionFor instead. */ function rejection_for($reason) { - if ($reason instanceof PromiseInterface) { - return $reason; - } - - return new RejectedPromise($reason); + return Create::rejectionFor($reason); } /** @@ -104,12 +76,12 @@ function rejection_for($reason) * @param mixed $reason * * @return \Exception|\Throwable + * + * @deprecated exception_for will be removed in guzzlehttp/promises:2.0. Use Create::exceptionFor instead. */ function exception_for($reason) { - return $reason instanceof \Exception || $reason instanceof \Throwable - ? $reason - : new RejectionException($reason); + return Create::exceptionFor($reason); } /** @@ -118,16 +90,12 @@ function exception_for($reason) * @param mixed $value * * @return \Iterator + * + * @deprecated iter_for will be removed in guzzlehttp/promises:2.0. Use Create::iterFor instead. */ function iter_for($value) { - if ($value instanceof \Iterator) { - return $value; - } elseif (is_array($value)) { - return new \ArrayIterator($value); - } else { - return new \ArrayIterator([$value]); - } + return Create::iterFor($value); } /** @@ -143,21 +111,12 @@ function iter_for($value) * @param PromiseInterface $promise Promise or value. * * @return array + * + * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspect instead. */ function inspect(PromiseInterface $promise) { - try { - return [ - 'state' => PromiseInterface::FULFILLED, - 'value' => $promise->wait() - ]; - } catch (RejectionException $e) { - return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()]; - } catch (\Throwable $e) { - return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; - } catch (\Exception $e) { - return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; - } + return Utils::inspect($promise); } /** @@ -166,19 +125,17 @@ function inspect(PromiseInterface $promise) * * Returns an array of inspection state arrays. * + * @see inspect for the inspection state array format. + * * @param PromiseInterface[] $promises Traversable of promises to wait upon. * * @return array - * @see GuzzleHttp\Promise\inspect for the inspection state array format. + * + * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspectAll instead. */ function inspect_all($promises) { - $results = []; - foreach ($promises as $key => $promise) { - $results[$key] = inspect($promise); - } - - return $results; + return Utils::inspectAll($promises); } /** @@ -188,20 +145,18 @@ function inspect_all($promises) * the promises were provided). An exception is thrown if any of the promises * are rejected. * - * @param mixed $promises Iterable of PromiseInterface objects to wait on. + * @param iterable $promises Iterable of PromiseInterface objects to wait on. * * @return array + * * @throws \Exception on error * @throws \Throwable on error in PHP >=7 + * + * @deprecated unwrap will be removed in guzzlehttp/promises:2.0. Use Utils::unwrap instead. */ function unwrap($promises) { - $results = []; - foreach ($promises as $key => $promise) { - $results[$key] = $promise->wait(); - } - - return $results; + return Utils::unwrap($promises); } /** @@ -212,25 +167,16 @@ function unwrap($promises) * respective positions to the original array. If any promise in the array * rejects, the returned promise is rejected with the rejection reason. * - * @param mixed $promises Promises or values. + * @param mixed $promises Promises or values. + * @param bool $recursive If true, resolves new promises that might have been added to the stack during its own resolution. * * @return PromiseInterface + * + * @deprecated all will be removed in guzzlehttp/promises:2.0. Use Utils::all instead. */ -function all($promises) +function all($promises, $recursive = false) { - $results = []; - return each( - $promises, - function ($value, $idx) use (&$results) { - $results[$idx] = $value; - }, - function ($reason, $idx, Promise $aggregate) { - $aggregate->reject($reason); - } - )->then(function () use (&$results) { - ksort($results); - return $results; - }); + return Utils::all($promises, $recursive); } /** @@ -241,45 +187,19 @@ function all($promises) * fulfilled with an array that contains the fulfillment values of the winners * in order of resolution. * - * This prommise is rejected with a {@see GuzzleHttp\Promise\AggregateException} - * if the number of fulfilled promises is less than the desired $count. + * This promise is rejected with a {@see AggregateException} if the number of + * fulfilled promises is less than the desired $count. * * @param int $count Total number of promises. * @param mixed $promises Promises or values. * * @return PromiseInterface + * + * @deprecated some will be removed in guzzlehttp/promises:2.0. Use Utils::some instead. */ function some($count, $promises) { - $results = []; - $rejections = []; - - return each( - $promises, - function ($value, $idx, PromiseInterface $p) use (&$results, $count) { - if ($p->getState() !== PromiseInterface::PENDING) { - return; - } - $results[$idx] = $value; - if (count($results) >= $count) { - $p->resolve(null); - } - }, - function ($reason) use (&$rejections) { - $rejections[] = $reason; - } - )->then( - function () use (&$results, &$rejections, $count) { - if (count($results) !== $count) { - throw new AggregateException( - 'Not enough promises to fulfill count', - $rejections - ); - } - ksort($results); - return array_values($results); - } - ); + return Utils::some($count, $promises); } /** @@ -289,10 +209,12 @@ function some($count, $promises) * @param mixed $promises Promises or values. * * @return PromiseInterface + * + * @deprecated any will be removed in guzzlehttp/promises:2.0. Use Utils::any instead. */ function any($promises) { - return some(1, $promises)->then(function ($values) { return $values[0]; }); + return Utils::any($promises); } /** @@ -301,27 +223,17 @@ function any($promises) * * The returned promise is fulfilled with an array of inspection state arrays. * + * @see inspect for the inspection state array format. + * * @param mixed $promises Promises or values. * * @return PromiseInterface - * @see GuzzleHttp\Promise\inspect for the inspection state array format. + * + * @deprecated settle will be removed in guzzlehttp/promises:2.0. Use Utils::settle instead. */ function settle($promises) { - $results = []; - - return each( - $promises, - function ($value, $idx) use (&$results) { - $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value]; - }, - function ($reason, $idx) use (&$results) { - $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason]; - } - )->then(function () use (&$results) { - ksort($results); - return $results; - }); + return Utils::settle($promises); } /** @@ -329,29 +241,28 @@ function settle($promises) * fulfilled with a null value when the iterator has been consumed or the * aggregate promise has been fulfilled or rejected. * - * $onFulfilled is a function that accepts the fulfilled value, iterator - * index, and the aggregate promise. The callback can invoke any necessary side - * effects and choose to resolve or reject the aggregate promise if needed. + * $onFulfilled is a function that accepts the fulfilled value, iterator index, + * and the aggregate promise. The callback can invoke any necessary side + * effects and choose to resolve or reject the aggregate if needed. * - * $onRejected is a function that accepts the rejection reason, iterator - * index, and the aggregate promise. The callback can invoke any necessary side - * effects and choose to resolve or reject the aggregate promise if needed. + * $onRejected is a function that accepts the rejection reason, iterator index, + * and the aggregate promise. The callback can invoke any necessary side + * effects and choose to resolve or reject the aggregate if needed. * * @param mixed $iterable Iterator or array to iterate over. * @param callable $onFulfilled * @param callable $onRejected * * @return PromiseInterface + * + * @deprecated each will be removed in guzzlehttp/promises:2.0. Use Each::of instead. */ function each( $iterable, callable $onFulfilled = null, callable $onRejected = null ) { - return (new EachPromise($iterable, [ - 'fulfilled' => $onFulfilled, - 'rejected' => $onRejected - ]))->promise(); + return Each::of($iterable, $onFulfilled, $onRejected); } /** @@ -368,6 +279,8 @@ function each( * @param callable $onRejected * * @return PromiseInterface + * + * @deprecated each_limit will be removed in guzzlehttp/promises:2.0. Use Each::ofLimit instead. */ function each_limit( $iterable, @@ -375,11 +288,7 @@ function each_limit( callable $onFulfilled = null, callable $onRejected = null ) { - return (new EachPromise($iterable, [ - 'fulfilled' => $onFulfilled, - 'rejected' => $onRejected, - 'concurrency' => $concurrency - ]))->promise(); + return Each::ofLimit($iterable, $concurrency, $onFulfilled, $onRejected); } /** @@ -392,66 +301,63 @@ function each_limit( * @param callable $onFulfilled * * @return PromiseInterface + * + * @deprecated each_limit_all will be removed in guzzlehttp/promises:2.0. Use Each::ofLimitAll instead. */ function each_limit_all( $iterable, $concurrency, callable $onFulfilled = null ) { - return each_limit( - $iterable, - $concurrency, - $onFulfilled, - function ($reason, $idx, PromiseInterface $aggregate) { - $aggregate->reject($reason); - } - ); + return Each::ofLimitAll($iterable, $concurrency, $onFulfilled); } /** * Returns true if a promise is fulfilled. * - * @param PromiseInterface $promise - * * @return bool + * + * @deprecated is_fulfilled will be removed in guzzlehttp/promises:2.0. Use Is::fulfilled instead. */ function is_fulfilled(PromiseInterface $promise) { - return $promise->getState() === PromiseInterface::FULFILLED; + return Is::fulfilled($promise); } /** * Returns true if a promise is rejected. * - * @param PromiseInterface $promise - * * @return bool + * + * @deprecated is_rejected will be removed in guzzlehttp/promises:2.0. Use Is::rejected instead. */ function is_rejected(PromiseInterface $promise) { - return $promise->getState() === PromiseInterface::REJECTED; + return Is::rejected($promise); } /** * Returns true if a promise is fulfilled or rejected. * - * @param PromiseInterface $promise - * * @return bool + * + * @deprecated is_settled will be removed in guzzlehttp/promises:2.0. Use Is::settled instead. */ function is_settled(PromiseInterface $promise) { - return $promise->getState() !== PromiseInterface::PENDING; + return Is::settled($promise); } /** + * Create a new coroutine. + * * @see Coroutine * - * @param callable $generatorFn - * * @return PromiseInterface + * + * @deprecated coroutine will be removed in guzzlehttp/promises:2.0. Use Coroutine::of instead. */ function coroutine(callable $generatorFn) { - return new Coroutine($generatorFn); + return Coroutine::of($generatorFn); } diff --git a/vendor/guzzlehttp/psr7/.editorconfig b/vendor/guzzlehttp/psr7/.editorconfig deleted file mode 100644 index 677e36e2..00000000 --- a/vendor/guzzlehttp/psr7/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -indent_size = 4 -indent_style = space -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/vendor/guzzlehttp/psr7/CHANGELOG.md b/vendor/guzzlehttp/psr7/CHANGELOG.md index 27b65f09..740b2877 100644 --- a/vendor/guzzlehttp/psr7/CHANGELOG.md +++ b/vendor/guzzlehttp/psr7/CHANGELOG.md @@ -1,13 +1,114 @@ # Change Log - All notable changes to this project will be documented in this file. -The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## Unreleased + +## 2.1.0 - 2021-10-06 + +### Changed + +- Attempting to create a `Uri` object from a malformed URI will no longer throw a generic + `InvalidArgumentException`, but rather a `MalformedUriException`, which inherits from the former + for backwards compatibility. Callers relying on the exception being thrown to detect invalid + URIs should catch the new exception. + +### Fixed + +- Return `null` in caching stream size if remote size is `null` + +## 2.0.0 - 2021-06-30 + +Identical to the RC release. + +## 2.0.0@RC-1 - 2021-04-29 + +### Fixed + +- Handle possibly unset `url` in `stream_get_meta_data` + +## 2.0.0@beta-1 - 2021-03-21 + +### Added + +- PSR-17 factories +- Made classes final +- PHP7 type hints + +### Changed + +- When building a query string, booleans are represented as 1 and 0. + +### Removed + +- PHP < 7.2 support +- All functions in the Guzzle\Psr7 namespace + +## 1.8.1 - 2021-03-21 + +### Fixed + +- Issue parsing IPv6 URLs +- Issue modifying ServerRequest lost all its attributes + +## 1.8.0 - 2021-03-21 + +### Added + +- Locale independent URL parsing +- Most classes got a `@final` annotation to prepare for 2.0 + +### Fixed + +- Issue when creating stream from `php://input` and curl-ext is not installed +- Broken `Utils::tryFopen()` on PHP 8 + +## 1.7.0 - 2020-09-30 + +### Added + +- Replaced functions by static methods + +### Fixed + +- Converting a non-seekable stream to a string +- Handle multiple Set-Cookie correctly +- Ignore array keys in header values when merging +- Allow multibyte characters to be parsed in `Message:bodySummary()` + +### Changed + +- Restored partial HHVM 3 support -## [Unreleased] +## [1.6.1] - 2019-07-02 + +### Fixed + +- Accept null and bool header values again + + +## [1.6.0] - 2019-06-30 + +### Added + +- Allowed version `^3.0` of `ralouphie/getallheaders` dependency (#244) +- Added MIME type for WEBP image format (#246) +- Added more validation of values according to PSR-7 and RFC standards, e.g. status code range (#250, #272) + +### Changed + +- Tests don't pass with HHVM 4.0, so HHVM support got dropped. Other libraries like composer have done the same. (#262) +- Accept port number 0 to be valid (#270) + +### Fixed + +- Fixed subsequent reads from `php://input` in ServerRequest (#247) +- Fixed readable/writable detection for certain stream modes (#248) +- Fixed encoding of special characters in the `userInfo` component of an URI (#253) ## [1.5.2] - 2018-12-04 @@ -209,7 +310,7 @@ Currently unsupported: -[Unreleased]: https://github.com/guzzle/psr7/compare/1.5.2...HEAD +[1.6.0]: https://github.com/guzzle/psr7/compare/1.5.2...1.6.0 [1.5.2]: https://github.com/guzzle/psr7/compare/1.5.1...1.5.2 [1.5.1]: https://github.com/guzzle/psr7/compare/1.5.0...1.5.1 [1.5.0]: https://github.com/guzzle/psr7/compare/1.4.2...1.5.0 diff --git a/vendor/guzzlehttp/psr7/LICENSE b/vendor/guzzlehttp/psr7/LICENSE index 581d95f9..51c7ec81 100644 --- a/vendor/guzzlehttp/psr7/LICENSE +++ b/vendor/guzzlehttp/psr7/LICENSE @@ -1,4 +1,11 @@ -Copyright (c) 2015 Michael Dowling, https://github.com/mtdowling +The MIT License (MIT) + +Copyright (c) 2015 Michael Dowling +Copyright (c) 2015 Márk Sági-Kazár +Copyright (c) 2015 Graham Campbell +Copyright (c) 2016 Tobias Schultze +Copyright (c) 2016 George Mponos +Copyright (c) 2018 Tobias Nyholm Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/guzzlehttp/psr7/README.md b/vendor/guzzlehttp/psr7/README.md index c60a6a38..ed81c927 100644 --- a/vendor/guzzlehttp/psr7/README.md +++ b/vendor/guzzlehttp/psr7/README.md @@ -4,8 +4,8 @@ This repository contains a full [PSR-7](http://www.php-fig.org/psr/psr-7/) message implementation, several stream decorators, and some helpful functionality like query string parsing. - -[![Build Status](https://travis-ci.org/guzzle/psr7.svg?branch=master)](https://travis-ci.org/guzzle/psr7) +![CI](https://github.com/guzzle/psr7/workflows/CI/badge.svg) +![Static analysis](https://github.com/guzzle/psr7/workflows/Static%20analysis/badge.svg) # Stream implementation @@ -23,11 +23,11 @@ Reads from multiple streams, one after the other. ```php use GuzzleHttp\Psr7; -$a = Psr7\stream_for('abc, '); -$b = Psr7\stream_for('123.'); +$a = Psr7\Utils::streamFor('abc, '); +$b = Psr7\Utils::streamFor('123.'); $composed = new Psr7\AppendStream([$a, $b]); -$composed->addStream(Psr7\stream_for(' Above all listen to me')); +$composed->addStream(Psr7\Utils::streamFor(' Above all listen to me')); echo $composed; // abc, 123. Above all listen to me. ``` @@ -65,7 +65,7 @@ then on disk. ```php use GuzzleHttp\Psr7; -$original = Psr7\stream_for(fopen('http://www.google.com', 'r')); +$original = Psr7\Utils::streamFor(fopen('http://www.google.com', 'r')); $stream = new Psr7\CachingStream($original); $stream->read(1024); @@ -89,7 +89,7 @@ stream becomes too full. use GuzzleHttp\Psr7; // Create an empty stream -$stream = Psr7\stream_for(); +$stream = Psr7\Utils::streamFor(); // Start dropping data when the stream has more than 10 bytes $dropping = new Psr7\DroppingStream($stream, 10); @@ -112,7 +112,7 @@ to create a concrete class for a simple extension point. use GuzzleHttp\Psr7; -$stream = Psr7\stream_for('hi'); +$stream = Psr7\Utils::streamFor('hi'); $fnStream = Psr7\FnStream::decorate($stream, [ 'rewind' => function () use ($stream) { echo 'About to rewind - '; @@ -130,10 +130,9 @@ $fnStream->rewind(); `GuzzleHttp\Psr7\InflateStream` -Uses PHP's zlib.inflate filter to inflate deflate or gzipped content. +Uses PHP's zlib.inflate filter to inflate zlib (HTTP deflate, RFC1950) or gzipped (RFC1952) content. -This stream decorator skips the first 10 bytes of the given stream to remove -the gzip header, converts the provided stream to a PHP stream resource, +This stream decorator converts the provided stream to a PHP stream resource, then appends the zlib.inflate filter. The stream is then converted back to a Guzzle stream resource to be used as a Guzzle stream. @@ -167,7 +166,7 @@ chunks (e.g. Amazon S3's multipart upload API). ```php use GuzzleHttp\Psr7; -$original = Psr7\stream_for(fopen('/tmp/test.txt', 'r+')); +$original = Psr7\Utils::streamFor(fopen('/tmp/test.txt', 'r+')); echo $original->getSize(); // >>> 1048576 @@ -197,7 +196,7 @@ NoSeekStream wraps a stream and does not allow seeking. ```php use GuzzleHttp\Psr7; -$original = Psr7\stream_for('foo'); +$original = Psr7\Utils::streamFor('foo'); $noSeek = new Psr7\NoSeekStream($original); echo $noSeek->read(3); @@ -271,7 +270,7 @@ This decorator could be added to any existing stream and used like so: ```php use GuzzleHttp\Psr7; -$original = Psr7\stream_for('foo'); +$original = Psr7\Utils::streamFor('foo'); $eofStream = new EofCallbackStream($original, function () { echo 'EOF!'; @@ -297,53 +296,189 @@ stream from a PSR-7 stream. ```php use GuzzleHttp\Psr7\StreamWrapper; -$stream = GuzzleHttp\Psr7\stream_for('hello!'); +$stream = GuzzleHttp\Psr7\Utils::streamFor('hello!'); $resource = StreamWrapper::getResource($stream); echo fread($resource, 6); // outputs hello! ``` -# Function API +# Static API -There are various functions available under the `GuzzleHttp\Psr7` namespace. +There are various static methods available under the `GuzzleHttp\Psr7` namespace. -## `function str` +## `GuzzleHttp\Psr7\Message::toString` -`function str(MessageInterface $message)` +`public static function toString(MessageInterface $message): string` Returns the string representation of an HTTP message. ```php $request = new GuzzleHttp\Psr7\Request('GET', 'http://example.com'); -echo GuzzleHttp\Psr7\str($request); +echo GuzzleHttp\Psr7\Message::toString($request); ``` -## `function uri_for` +## `GuzzleHttp\Psr7\Message::bodySummary` -`function uri_for($uri)` +`public static function bodySummary(MessageInterface $message, int $truncateAt = 120): string|null` -This function accepts a string or `Psr\Http\Message\UriInterface` and returns a -UriInterface for the given value. If the value is already a `UriInterface`, it -is returned as-is. +Get a short summary of the message body. -```php -$uri = GuzzleHttp\Psr7\uri_for('http://example.com'); -assert($uri === GuzzleHttp\Psr7\uri_for($uri)); -``` +Will return `null` if the response is not printable. -## `function stream_for` +## `GuzzleHttp\Psr7\Message::rewindBody` -`function stream_for($resource = '', array $options = [])` +`public static function rewindBody(MessageInterface $message): void` + +Attempts to rewind a message body and throws an exception on failure. + +The body of the message will only be rewound if a call to `tell()` +returns a value other than `0`. + + +## `GuzzleHttp\Psr7\Message::parseMessage` + +`public static function parseMessage(string $message): array` + +Parses an HTTP message into an associative array. + +The array contains the "start-line" key containing the start line of +the message, "headers" key containing an associative array of header +array values, and a "body" key containing the body of the message. + + +## `GuzzleHttp\Psr7\Message::parseRequestUri` + +`public static function parseRequestUri(string $path, array $headers): string` + +Constructs a URI for an HTTP request message. + + +## `GuzzleHttp\Psr7\Message::parseRequest` + +`public static function parseRequest(string $message): Request` + +Parses a request message string into a request object. + + +## `GuzzleHttp\Psr7\Message::parseResponse` + +`public static function parseResponse(string $message): Response` + +Parses a response message string into a response object. + + +## `GuzzleHttp\Psr7\Header::parse` + +`public static function parse(string|array $header): array` + +Parse an array of header values containing ";" separated data into an +array of associative arrays representing the header key value pair data +of the header. When a parameter does not contain a value, but just +contains a key, this function will inject a key with a '' string value. + + +## `GuzzleHttp\Psr7\Header::normalize` + +`public static function normalize(string|array $header): array` + +Converts an array of header values that may contain comma separated +headers into an array of headers with no comma separated values. + + +## `GuzzleHttp\Psr7\Query::parse` + +`public static function parse(string $str, int|bool $urlEncoding = true): array` + +Parse a query string into an associative array. + +If multiple values are found for the same key, the value of that key +value pair will become an array. This function does not parse nested +PHP style arrays into an associative array (e.g., `foo[a]=1&foo[b]=2` +will be parsed into `['foo[a]' => '1', 'foo[b]' => '2'])`. + + +## `GuzzleHttp\Psr7\Query::build` + +`public static function build(array $params, int|false $encoding = PHP_QUERY_RFC3986): string` + +Build a query string from an array of key value pairs. + +This function can use the return value of `parse()` to build a query +string. This function does not modify the provided keys when an array is +encountered (like `http_build_query()` would). + + +## `GuzzleHttp\Psr7\Utils::caselessRemove` + +`public static function caselessRemove(iterable $keys, $keys, array $data): array` + +Remove the items given by the keys, case insensitively from the data. + + +## `GuzzleHttp\Psr7\Utils::copyToStream` + +`public static function copyToStream(StreamInterface $source, StreamInterface $dest, int $maxLen = -1): void` + +Copy the contents of a stream into another stream until the given number +of bytes have been read. + + +## `GuzzleHttp\Psr7\Utils::copyToString` + +`public static function copyToString(StreamInterface $stream, int $maxLen = -1): string` + +Copy the contents of a stream into a string until the given number of +bytes have been read. + + +## `GuzzleHttp\Psr7\Utils::hash` + +`public static function hash(StreamInterface $stream, string $algo, bool $rawOutput = false): string` + +Calculate a hash of a stream. + +This method reads the entire stream to calculate a rolling hash, based on +PHP's `hash_init` functions. + + +## `GuzzleHttp\Psr7\Utils::modifyRequest` + +`public static function modifyRequest(RequestInterface $request, array $changes): RequestInterface` + +Clone and modify a request with the given changes. + +This method is useful for reducing the number of clones needed to mutate +a message. + +- method: (string) Changes the HTTP method. +- set_headers: (array) Sets the given headers. +- remove_headers: (array) Remove the given headers. +- body: (mixed) Sets the given body. +- uri: (UriInterface) Set the URI. +- query: (string) Set the query string value of the URI. +- version: (string) Set the protocol version. + + +## `GuzzleHttp\Psr7\Utils::readLine` + +`public static function readLine(StreamInterface $stream, int $maxLength = null): string` + +Read a line from the stream up to the maximum allowed buffer length. + + +## `GuzzleHttp\Psr7\Utils::streamFor` + +`public static function streamFor(resource|string|null|int|float|bool|StreamInterface|callable|\Iterator $resource = '', array $options = []): StreamInterface` Create a new stream based on the input type. Options is an associative array that can contain the following keys: -* - metadata: Array of custom metadata. -* - size: Size of the stream. +- metadata: Array of custom metadata. +- size: Size of the stream. This method accepts the following `$resource` types: @@ -369,8 +504,8 @@ This method accepts the following `$resource` types: buffered and used in subsequent reads. ```php -$stream = GuzzleHttp\Psr7\stream_for('foo'); -$stream = GuzzleHttp\Psr7\stream_for(fopen('/path/to/file', 'r')); +$stream = GuzzleHttp\Psr7\Utils::streamFor('foo'); +$stream = GuzzleHttp\Psr7\Utils::streamFor(fopen('/path/to/file', 'r')); $generator = function ($bytes) { for ($i = 0; $i < $bytes; $i++) { @@ -378,147 +513,75 @@ $generator = function ($bytes) { } } -$stream = GuzzleHttp\Psr7\stream_for($generator(100)); +$stream = GuzzleHttp\Psr7\Utils::streamFor($generator(100)); ``` -## `function parse_header` +## `GuzzleHttp\Psr7\Utils::tryFopen` -`function parse_header($header)` - -Parse an array of header values containing ";" separated data into an array of -associative arrays representing the header key value pair data of the header. -When a parameter does not contain a value, but just contains a key, this -function will inject a key with a '' string value. - - -## `function normalize_header` - -`function normalize_header($header)` - -Converts an array of header values that may contain comma separated headers -into an array of headers with no comma separated values. - - -## `function modify_request` - -`function modify_request(RequestInterface $request, array $changes)` - -Clone and modify a request with the given changes. This method is useful for -reducing the number of clones needed to mutate a message. - -The changes can be one of: - -- method: (string) Changes the HTTP method. -- set_headers: (array) Sets the given headers. -- remove_headers: (array) Remove the given headers. -- body: (mixed) Sets the given body. -- uri: (UriInterface) Set the URI. -- query: (string) Set the query string value of the URI. -- version: (string) Set the protocol version. - - -## `function rewind_body` - -`function rewind_body(MessageInterface $message)` - -Attempts to rewind a message body and throws an exception on failure. The body -of the message will only be rewound if a call to `tell()` returns a value other -than `0`. - - -## `function try_fopen` - -`function try_fopen($filename, $mode)` +`public static function tryFopen(string $filename, string $mode): resource` Safely opens a PHP stream resource using a filename. -When fopen fails, PHP normally raises a warning. This function adds an error -handler that checks for errors and throws an exception instead. +When fopen fails, PHP normally raises a warning. This function adds an +error handler that checks for errors and throws an exception instead. -## `function copy_to_string` +## `GuzzleHttp\Psr7\Utils::uriFor` -`function copy_to_string(StreamInterface $stream, $maxLen = -1)` +`public static function uriFor(string|UriInterface $uri): UriInterface` -Copy the contents of a stream into a string until the given number of bytes -have been read. +Returns a UriInterface for the given value. + +This function accepts a string or UriInterface and returns a +UriInterface for the given value. If the value is already a +UriInterface, it is returned as-is. -## `function copy_to_stream` +## `GuzzleHttp\Psr7\MimeType::fromFilename` -`function copy_to_stream(StreamInterface $source, StreamInterface $dest, $maxLen = -1)` - -Copy the contents of a stream into another stream until the given number of -bytes have been read. - - -## `function hash` - -`function hash(StreamInterface $stream, $algo, $rawOutput = false)` - -Calculate a hash of a Stream. This method reads the entire stream to calculate -a rolling hash (based on PHP's hash_init functions). - - -## `function readline` - -`function readline(StreamInterface $stream, $maxLength = null)` - -Read a line from the stream up to the maximum allowed buffer length. - - -## `function parse_request` - -`function parse_request($message)` - -Parses a request message string into a request object. - - -## `function parse_response` - -`function parse_response($message)` - -Parses a response message string into a response object. - - -## `function parse_query` - -`function parse_query($str, $urlEncoding = true)` - -Parse a query string into an associative array. - -If multiple values are found for the same key, the value of that key value pair -will become an array. This function does not parse nested PHP style arrays into -an associative array (e.g., `foo[a]=1&foo[b]=2` will be parsed into -`['foo[a]' => '1', 'foo[b]' => '2']`). - - -## `function build_query` - -`function build_query(array $params, $encoding = PHP_QUERY_RFC3986)` - -Build a query string from an array of key value pairs. - -This function can use the return value of parse_query() to build a query string. -This function does not modify the provided keys when an array is encountered -(like http_build_query would). - - -## `function mimetype_from_filename` - -`function mimetype_from_filename($filename)` +`public static function fromFilename(string $filename): string|null` Determines the mimetype of a file by looking at its extension. -## `function mimetype_from_extension` +## `GuzzleHttp\Psr7\MimeType::fromExtension` -`function mimetype_from_extension($extension)` +`public static function fromExtension(string $extension): string|null` Maps a file extensions to a mimetype. +## Upgrading from Function API + +The static API was first introduced in 1.7.0, in order to mitigate problems with functions conflicting between global and local copies of the package. The function API was removed in 2.0.0. A migration table has been provided here for your convenience: + +| Original Function | Replacement Method | +|----------------|----------------| +| `str` | `Message::toString` | +| `uri_for` | `Utils::uriFor` | +| `stream_for` | `Utils::streamFor` | +| `parse_header` | `Header::parse` | +| `normalize_header` | `Header::normalize` | +| `modify_request` | `Utils::modifyRequest` | +| `rewind_body` | `Message::rewindBody` | +| `try_fopen` | `Utils::tryFopen` | +| `copy_to_string` | `Utils::copyToString` | +| `copy_to_stream` | `Utils::copyToStream` | +| `hash` | `Utils::hash` | +| `readline` | `Utils::readLine` | +| `parse_request` | `Message::parseRequest` | +| `parse_response` | `Message::parseResponse` | +| `parse_query` | `Query::parse` | +| `build_query` | `Query::build` | +| `mimetype_from_filename` | `MimeType::fromFilename` | +| `mimetype_from_extension` | `MimeType::fromExtension` | +| `_parse_message` | `Message::parseMessage` | +| `_parse_request_uri` | `Message::parseRequestUri` | +| `get_message_body_summary` | `Message::bodySummary` | +| `_caseless_remove` | `Utils::caselessRemove` | + + # Additional URI Methods Aside from the standard `Psr\Http\Message\UriInterface` implementation in form of the `GuzzleHttp\Psr7\Uri` class, @@ -743,3 +806,18 @@ Whether two URIs can be considered equivalent. Both URIs are normalized automati `$normalizations` bitmask. The method also accepts relative URI references and returns true when they are equivalent. This of course assumes they will be resolved against the same base URI. If this is not the case, determination of equivalence or difference of relative references does not mean anything. + + +## Security + +If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/psr7/security/policy) for more information. + +## License + +Guzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information. + +## For Enterprise + +Available as part of the Tidelift Subscription + +The maintainers of Guzzle and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-psr7?utm_source=packagist-guzzlehttp-psr7&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/vendor/guzzlehttp/psr7/composer.json b/vendor/guzzlehttp/psr7/composer.json index 2add153e..885aa1da 100644 --- a/vendor/guzzlehttp/psr7/composer.json +++ b/vendor/guzzlehttp/psr7/composer.json @@ -1,36 +1,76 @@ { "name": "guzzlehttp/psr7", - "type": "library", "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": ["request", "response", "message", "stream", "http", "uri", "url", "psr-7"], + "keywords": [ + "request", + "response", + "message", + "stream", + "http", + "uri", + "url", + "psr-7" + ], "license": "MIT", "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, { "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" }, "provide": { + "psr/http-factory-implementation": "1.0", "psr/http-message-implementation": "1.0" }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, "autoload": { "psr-4": { "GuzzleHttp\\Psr7\\": "src/" - }, - "files": ["src/functions_include.php"] + } }, "autoload-dev": { "psr-4": { @@ -39,7 +79,11 @@ }, "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "2.1-dev" } + }, + "config": { + "preferred-install": "dist", + "sort-packages": true } } diff --git a/vendor/guzzlehttp/psr7/src/AppendStream.php b/vendor/guzzlehttp/psr7/src/AppendStream.php index 472a0d61..967925f3 100644 --- a/vendor/guzzlehttp/psr7/src/AppendStream.php +++ b/vendor/guzzlehttp/psr7/src/AppendStream.php @@ -1,4 +1,7 @@ rewind(); return $this->getContents(); - } catch (\Exception $e) { + } catch (\Throwable $e) { + if (\PHP_VERSION_ID >= 70400) { + throw $e; + } + trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); return ''; } } @@ -45,7 +57,7 @@ class AppendStream implements StreamInterface * * @throws \InvalidArgumentException if the stream is not readable */ - public function addStream(StreamInterface $stream) + public function addStream(StreamInterface $stream): void { if (!$stream->isReadable()) { throw new \InvalidArgumentException('Each stream must be readable'); @@ -59,17 +71,15 @@ class AppendStream implements StreamInterface $this->streams[] = $stream; } - public function getContents() + public function getContents(): string { - return copy_to_string($this); + return Utils::copyToString($this); } /** * Closes each attached stream. - * - * {@inheritdoc} */ - public function close() + public function close(): void { $this->pos = $this->current = 0; $this->seekable = true; @@ -85,8 +95,6 @@ class AppendStream implements StreamInterface * Detaches each attached stream. * * Returns null as it's not clear which underlying stream resource to return. - * - * {@inheritdoc} */ public function detach() { @@ -98,9 +106,11 @@ class AppendStream implements StreamInterface } $this->streams = []; + + return null; } - public function tell() + public function tell(): int { return $this->pos; } @@ -110,10 +120,8 @@ class AppendStream implements StreamInterface * * If any of the streams do not return a valid number, then the size of the * append stream cannot be determined and null is returned. - * - * {@inheritdoc} */ - public function getSize() + public function getSize(): ?int { $size = 0; @@ -128,24 +136,22 @@ class AppendStream implements StreamInterface return $size; } - public function eof() + public function eof(): bool { return !$this->streams || ($this->current >= count($this->streams) - 1 && $this->streams[$this->current]->eof()); } - public function rewind() + public function rewind(): void { $this->seek(0); } /** * Attempts to seek to the given position. Only supports SEEK_SET. - * - * {@inheritdoc} */ - public function seek($offset, $whence = SEEK_SET) + public function seek($offset, $whence = SEEK_SET): void { if (!$this->seekable) { throw new \RuntimeException('This AppendStream is not seekable'); @@ -176,10 +182,8 @@ class AppendStream implements StreamInterface /** * Reads from all of the appended streams until the length is met or EOF. - * - * {@inheritdoc} */ - public function read($length) + public function read($length): string { $buffer = ''; $total = count($this->streams) - 1; @@ -199,8 +203,7 @@ class AppendStream implements StreamInterface $result = $this->streams[$this->current]->read($remaining); - // Using a loose comparison here to match on '', false, and null - if ($result == null) { + if ($result === '') { $progressToNext = true; continue; } @@ -214,26 +217,31 @@ class AppendStream implements StreamInterface return $buffer; } - public function isReadable() + public function isReadable(): bool { return true; } - public function isWritable() + public function isWritable(): bool { return false; } - public function isSeekable() + public function isSeekable(): bool { return $this->seekable; } - public function write($string) + public function write($string): int { throw new \RuntimeException('Cannot write to an AppendStream'); } + /** + * {@inheritdoc} + * + * @return mixed + */ public function getMetadata($key = null) { return $key ? null : []; diff --git a/vendor/guzzlehttp/psr7/src/BufferStream.php b/vendor/guzzlehttp/psr7/src/BufferStream.php index af4d4c22..21be8c0a 100644 --- a/vendor/guzzlehttp/psr7/src/BufferStream.php +++ b/vendor/guzzlehttp/psr7/src/BufferStream.php @@ -1,4 +1,7 @@ hwm = $hwm; } - public function __toString() + public function __toString(): string { return $this->getContents(); } - public function getContents() + public function getContents(): string { $buffer = $this->buffer; $this->buffer = ''; @@ -41,7 +47,7 @@ class BufferStream implements StreamInterface return $buffer; } - public function close() + public function close(): void { $this->buffer = ''; } @@ -49,44 +55,46 @@ class BufferStream implements StreamInterface public function detach() { $this->close(); + + return null; } - public function getSize() + public function getSize(): ?int { return strlen($this->buffer); } - public function isReadable() + public function isReadable(): bool { return true; } - public function isWritable() + public function isWritable(): bool { return true; } - public function isSeekable() + public function isSeekable(): bool { return false; } - public function rewind() + public function rewind(): void { $this->seek(0); } - public function seek($offset, $whence = SEEK_SET) + public function seek($offset, $whence = SEEK_SET): void { throw new \RuntimeException('Cannot seek a BufferStream'); } - public function eof() + public function eof(): bool { return strlen($this->buffer) === 0; } - public function tell() + public function tell(): int { throw new \RuntimeException('Cannot determine the position of a BufferStream'); } @@ -94,7 +102,7 @@ class BufferStream implements StreamInterface /** * Reads data from the buffer. */ - public function read($length) + public function read($length): string { $currentLength = strlen($this->buffer); @@ -114,21 +122,25 @@ class BufferStream implements StreamInterface /** * Writes data to the buffer. */ - public function write($string) + public function write($string): int { $this->buffer .= $string; - // TODO: What should happen here? if (strlen($this->buffer) >= $this->hwm) { - return false; + return 0; } return strlen($string); } + /** + * {@inheritdoc} + * + * @return mixed + */ public function getMetadata($key = null) { - if ($key == 'hwm') { + if ($key === 'hwm') { return $this->hwm; } diff --git a/vendor/guzzlehttp/psr7/src/CachingStream.php b/vendor/guzzlehttp/psr7/src/CachingStream.php index ed68f086..7a70ee94 100644 --- a/vendor/guzzlehttp/psr7/src/CachingStream.php +++ b/vendor/guzzlehttp/psr7/src/CachingStream.php @@ -1,4 +1,7 @@ remoteStream = $stream; - $this->stream = $target ?: new Stream(fopen('php://temp', 'r+')); + $this->stream = $target ?: new Stream(Utils::tryFopen('php://temp', 'r+')); } - public function getSize() + public function getSize(): ?int { - return max($this->stream->getSize(), $this->remoteStream->getSize()); + $remoteSize = $this->remoteStream->getSize(); + + if (null === $remoteSize) { + return null; + } + + return max($this->stream->getSize(), $remoteSize); } - public function rewind() + public function rewind(): void { $this->seek(0); } - public function seek($offset, $whence = SEEK_SET) + public function seek($offset, $whence = SEEK_SET): void { - if ($whence == SEEK_SET) { + if ($whence === SEEK_SET) { $byte = $offset; - } elseif ($whence == SEEK_CUR) { + } elseif ($whence === SEEK_CUR) { $byte = $offset + $this->tell(); - } elseif ($whence == SEEK_END) { + } elseif ($whence === SEEK_END) { $size = $this->remoteStream->getSize(); if ($size === null) { $size = $this->cacheEntireStream(); @@ -72,7 +81,7 @@ class CachingStream implements StreamInterface } } - public function read($length) + public function read($length): string { // Perform a regular read on any previously read data from the buffer $data = $this->stream->read($length); @@ -101,7 +110,7 @@ class CachingStream implements StreamInterface return $data; } - public function write($string) + public function write($string): int { // When appending to the end of the currently read stream, you'll want // to skip bytes from being read from the remote stream to emulate @@ -115,7 +124,7 @@ class CachingStream implements StreamInterface return $this->stream->write($string); } - public function eof() + public function eof(): bool { return $this->stream->eof() && $this->remoteStream->eof(); } @@ -123,15 +132,16 @@ class CachingStream implements StreamInterface /** * Close both the remote stream and buffer stream */ - public function close() + public function close(): void { - $this->remoteStream->close() && $this->stream->close(); + $this->remoteStream->close(); + $this->stream->close(); } - private function cacheEntireStream() + private function cacheEntireStream(): int { $target = new FnStream(['write' => 'strlen']); - copy_to_stream($this, $target); + Utils::copyToStream($this, $target); return $this->tell(); } diff --git a/vendor/guzzlehttp/psr7/src/DroppingStream.php b/vendor/guzzlehttp/psr7/src/DroppingStream.php index 8935c80d..d78070ae 100644 --- a/vendor/guzzlehttp/psr7/src/DroppingStream.php +++ b/vendor/guzzlehttp/psr7/src/DroppingStream.php @@ -1,4 +1,7 @@ stream = $stream; $this->maxLength = $maxLength; } - public function write($string) + public function write($string): int { $diff = $this->maxLength - $this->stream->getSize(); diff --git a/vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php b/vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php new file mode 100644 index 00000000..3a084779 --- /dev/null +++ b/vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php @@ -0,0 +1,14 @@ + */ private $methods; - /** @var array Methods that must be implemented in the given array */ - private static $slots = ['__toString', 'close', 'detach', 'rewind', - 'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write', - 'isReadable', 'read', 'getContents', 'getMetadata']; - /** - * @param array $methods Hash of method name to a callable. + * @param array $methods Hash of method name to a callable. */ public function __construct(array $methods) { @@ -34,9 +38,10 @@ class FnStream implements StreamInterface /** * Lazily determine which methods are not implemented. + * * @throws \BadMethodCallException */ - public function __get($name) + public function __get(string $name): void { throw new \BadMethodCallException(str_replace('_fn_', '', $name) . '() is not implemented in the FnStream'); @@ -54,9 +59,10 @@ class FnStream implements StreamInterface /** * An unserialize would allow the __destruct to run when the unserialized value goes out of scope. + * * @throws \LogicException */ - public function __wakeup() + public function __wakeup(): void { throw new \LogicException('FnStream should never be unserialized'); } @@ -65,8 +71,8 @@ class FnStream implements StreamInterface * Adds custom functionality to an underlying stream by intercepting * specific method calls. * - * @param StreamInterface $stream Stream to decorate - * @param array $methods Hash of method name to a closure + * @param StreamInterface $stream Stream to decorate + * @param array $methods Hash of method name to a closure * * @return FnStream */ @@ -74,21 +80,31 @@ class FnStream implements StreamInterface { // If any of the required methods were not provided, then simply // proxy to the decorated stream. - foreach (array_diff(self::$slots, array_keys($methods)) as $diff) { - $methods[$diff] = [$stream, $diff]; + foreach (array_diff(self::SLOTS, array_keys($methods)) as $diff) { + /** @var callable $callable */ + $callable = [$stream, $diff]; + $methods[$diff] = $callable; } return new self($methods); } - public function __toString() + public function __toString(): string { - return call_user_func($this->_fn___toString); + try { + return call_user_func($this->_fn___toString); + } catch (\Throwable $e) { + if (\PHP_VERSION_ID >= 70400) { + throw $e; + } + trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); + return ''; + } } - public function close() + public function close(): void { - return call_user_func($this->_fn_close); + call_user_func($this->_fn_close); } public function detach() @@ -96,61 +112,66 @@ class FnStream implements StreamInterface return call_user_func($this->_fn_detach); } - public function getSize() + public function getSize(): ?int { return call_user_func($this->_fn_getSize); } - public function tell() + public function tell(): int { return call_user_func($this->_fn_tell); } - public function eof() + public function eof(): bool { return call_user_func($this->_fn_eof); } - public function isSeekable() + public function isSeekable(): bool { return call_user_func($this->_fn_isSeekable); } - public function rewind() + public function rewind(): void { call_user_func($this->_fn_rewind); } - public function seek($offset, $whence = SEEK_SET) + public function seek($offset, $whence = SEEK_SET): void { call_user_func($this->_fn_seek, $offset, $whence); } - public function isWritable() + public function isWritable(): bool { return call_user_func($this->_fn_isWritable); } - public function write($string) + public function write($string): int { return call_user_func($this->_fn_write, $string); } - public function isReadable() + public function isReadable(): bool { return call_user_func($this->_fn_isReadable); } - public function read($length) + public function read($length): string { return call_user_func($this->_fn_read, $length); } - public function getContents() + public function getContents(): string { return call_user_func($this->_fn_getContents); } + /** + * {@inheritdoc} + * + * @return mixed + */ public function getMetadata($key = null) { return call_user_func($this->_fn_getMetadata, $key); diff --git a/vendor/guzzlehttp/psr7/src/Header.php b/vendor/guzzlehttp/psr7/src/Header.php new file mode 100644 index 00000000..0e79a71a --- /dev/null +++ b/vendor/guzzlehttp/psr7/src/Header.php @@ -0,0 +1,69 @@ +]+>|[^=]+/', $kvp, $matches)) { + $m = $matches[0]; + if (isset($m[1])) { + $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed); + } else { + $part[] = trim($m[0], $trimmed); + } + } + } + if ($part) { + $params[] = $part; + } + } + + return $params; + } + + /** + * Converts an array of header values that may contain comma separated + * headers into an array of headers with no comma separated values. + * + * @param string|array $header Header to normalize. + */ + public static function normalize($header): array + { + if (!is_array($header)) { + return array_map('trim', explode(',', $header)); + } + + $result = []; + foreach ($header as $value) { + foreach ((array) $value as $v) { + if (strpos($v, ',') === false) { + $result[] = $v; + continue; + } + foreach (preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $v) as $vv) { + $result[] = trim($vv); + } + } + } + + return $result; + } +} diff --git a/vendor/guzzlehttp/psr7/src/HttpFactory.php b/vendor/guzzlehttp/psr7/src/HttpFactory.php new file mode 100644 index 00000000..30be222f --- /dev/null +++ b/vendor/guzzlehttp/psr7/src/HttpFactory.php @@ -0,0 +1,100 @@ +getSize(); + } + + return new UploadedFile($stream, $size, $error, $clientFilename, $clientMediaType); + } + + public function createStream(string $content = ''): StreamInterface + { + return Utils::streamFor($content); + } + + public function createStreamFromFile(string $file, string $mode = 'r'): StreamInterface + { + try { + $resource = Utils::tryFopen($file, $mode); + } catch (\RuntimeException $e) { + if ('' === $mode || false === \in_array($mode[0], ['r', 'w', 'a', 'x', 'c'], true)) { + throw new \InvalidArgumentException(sprintf('Invalid file opening mode "%s"', $mode), 0, $e); + } + + throw $e; + } + + return Utils::streamFor($resource); + } + + public function createStreamFromResource($resource): StreamInterface + { + return Utils::streamFor($resource); + } + + public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface + { + if (empty($method)) { + if (!empty($serverParams['REQUEST_METHOD'])) { + $method = $serverParams['REQUEST_METHOD']; + } else { + throw new \InvalidArgumentException('Cannot determine HTTP method'); + } + } + + return new ServerRequest($method, $uri, [], null, '1.1', $serverParams); + } + + public function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface + { + return new Response($code, [], null, '1.1', $reasonPhrase); + } + + public function createRequest(string $method, $uri): RequestInterface + { + return new Request($method, $uri); + } + + public function createUri(string $uri = ''): UriInterface + { + return new Uri($uri); + } +} diff --git a/vendor/guzzlehttp/psr7/src/InflateStream.php b/vendor/guzzlehttp/psr7/src/InflateStream.php index 5e4f6028..8e3cf171 100644 --- a/vendor/guzzlehttp/psr7/src/InflateStream.php +++ b/vendor/guzzlehttp/psr7/src/InflateStream.php @@ -1,52 +1,34 @@ read(10); - $filenameHeaderLength = $this->getLengthOfPossibleFilenameHeader($stream, $header); - // Skip the header, that is 10 + length of filename + 1 (nil) bytes - $stream = new LimitStream($stream, -1, 10 + $filenameHeaderLength); $resource = StreamWrapper::getResource($stream); - stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ); + // Specify window=15+32, so zlib will use header detection to both gzip (with header) and zlib data + // See http://www.zlib.net/manual.html#Advanced definition of inflateInit2 + // "Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection" + // Default window size is 15. + stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ, ['window' => 15 + 32]); $this->stream = $stream->isSeekable() ? new Stream($resource) : new NoSeekStream(new Stream($resource)); } - - /** - * @param StreamInterface $stream - * @param $header - * @return int - */ - private function getLengthOfPossibleFilenameHeader(StreamInterface $stream, $header) - { - $filename_header_length = 0; - - if (substr(bin2hex($header), 6, 2) === '08') { - // we have a filename, read until nil - $filename_header_length = 1; - while ($stream->read(1) !== chr(0)) { - $filename_header_length++; - } - } - - return $filename_header_length; - } } diff --git a/vendor/guzzlehttp/psr7/src/LazyOpenStream.php b/vendor/guzzlehttp/psr7/src/LazyOpenStream.php index 02cec3af..6b604296 100644 --- a/vendor/guzzlehttp/psr7/src/LazyOpenStream.php +++ b/vendor/guzzlehttp/psr7/src/LazyOpenStream.php @@ -1,4 +1,7 @@ filename = $filename; $this->mode = $mode; @@ -29,11 +32,9 @@ class LazyOpenStream implements StreamInterface /** * Creates the underlying stream lazily when required. - * - * @return StreamInterface */ - protected function createStream() + protected function createStream(): StreamInterface { - return stream_for(try_fopen($this->filename, $this->mode)); + return Utils::streamFor(Utils::tryFopen($this->filename, $this->mode)); } } diff --git a/vendor/guzzlehttp/psr7/src/LimitStream.php b/vendor/guzzlehttp/psr7/src/LimitStream.php index 3c13d4f4..9762d38a 100644 --- a/vendor/guzzlehttp/psr7/src/LimitStream.php +++ b/vendor/guzzlehttp/psr7/src/LimitStream.php @@ -1,13 +1,15 @@ stream = $stream; $this->setLimit($limit); $this->setOffset($offset); } - public function eof() + public function eof(): bool { // Always return true if the underlying stream is EOF if ($this->stream->eof()) { @@ -42,7 +44,7 @@ class LimitStream implements StreamInterface } // No limit and the underlying stream is not at EOF - if ($this->limit == -1) { + if ($this->limit === -1) { return false; } @@ -51,13 +53,12 @@ class LimitStream implements StreamInterface /** * Returns the size of the limited subset of data - * {@inheritdoc} */ - public function getSize() + public function getSize(): ?int { if (null === ($length = $this->stream->getSize())) { return null; - } elseif ($this->limit == -1) { + } elseif ($this->limit === -1) { return $length - $this->offset; } else { return min($this->limit, $length - $this->offset); @@ -66,13 +67,12 @@ class LimitStream implements StreamInterface /** * Allow for a bounded seek on the read limited stream - * {@inheritdoc} */ - public function seek($offset, $whence = SEEK_SET) + public function seek($offset, $whence = SEEK_SET): void { if ($whence !== SEEK_SET || $offset < 0) { throw new \RuntimeException(sprintf( - 'Cannot seek to offset % with whence %s', + 'Cannot seek to offset %s with whence %s', $offset, $whence )); @@ -91,9 +91,8 @@ class LimitStream implements StreamInterface /** * Give a relative tell() - * {@inheritdoc} */ - public function tell() + public function tell(): int { return $this->stream->tell() - $this->offset; } @@ -105,7 +104,7 @@ class LimitStream implements StreamInterface * * @throws \RuntimeException if the stream cannot be seeked. */ - public function setOffset($offset) + public function setOffset(int $offset): void { $current = $this->stream->tell(); @@ -130,14 +129,14 @@ class LimitStream implements StreamInterface * @param int $limit Number of bytes to allow to be read from the stream. * Use -1 for no limit. */ - public function setLimit($limit) + public function setLimit(int $limit): void { $this->limit = $limit; } - public function read($length) + public function read($length): string { - if ($this->limit == -1) { + if ($this->limit === -1) { return $this->stream->read($length); } diff --git a/vendor/guzzlehttp/psr7/src/Message.php b/vendor/guzzlehttp/psr7/src/Message.php new file mode 100644 index 00000000..9b825b30 --- /dev/null +++ b/vendor/guzzlehttp/psr7/src/Message.php @@ -0,0 +1,242 @@ +getMethod() . ' ' + . $message->getRequestTarget()) + . ' HTTP/' . $message->getProtocolVersion(); + if (!$message->hasHeader('host')) { + $msg .= "\r\nHost: " . $message->getUri()->getHost(); + } + } elseif ($message instanceof ResponseInterface) { + $msg = 'HTTP/' . $message->getProtocolVersion() . ' ' + . $message->getStatusCode() . ' ' + . $message->getReasonPhrase(); + } else { + throw new \InvalidArgumentException('Unknown message type'); + } + + foreach ($message->getHeaders() as $name => $values) { + if (strtolower($name) === 'set-cookie') { + foreach ($values as $value) { + $msg .= "\r\n{$name}: " . $value; + } + } else { + $msg .= "\r\n{$name}: " . implode(', ', $values); + } + } + + return "{$msg}\r\n\r\n" . $message->getBody(); + } + + /** + * Get a short summary of the message body. + * + * Will return `null` if the response is not printable. + * + * @param MessageInterface $message The message to get the body summary + * @param int $truncateAt The maximum allowed size of the summary + */ + public static function bodySummary(MessageInterface $message, int $truncateAt = 120): ?string + { + $body = $message->getBody(); + + if (!$body->isSeekable() || !$body->isReadable()) { + return null; + } + + $size = $body->getSize(); + + if ($size === 0) { + return null; + } + + $summary = $body->read($truncateAt); + $body->rewind(); + + if ($size > $truncateAt) { + $summary .= ' (truncated...)'; + } + + // Matches any printable character, including unicode characters: + // letters, marks, numbers, punctuation, spacing, and separators. + if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/u', $summary)) { + return null; + } + + return $summary; + } + + /** + * Attempts to rewind a message body and throws an exception on failure. + * + * The body of the message will only be rewound if a call to `tell()` + * returns a value other than `0`. + * + * @param MessageInterface $message Message to rewind + * + * @throws \RuntimeException + */ + public static function rewindBody(MessageInterface $message): void + { + $body = $message->getBody(); + + if ($body->tell()) { + $body->rewind(); + } + } + + /** + * Parses an HTTP message into an associative array. + * + * The array contains the "start-line" key containing the start line of + * the message, "headers" key containing an associative array of header + * array values, and a "body" key containing the body of the message. + * + * @param string $message HTTP request or response to parse. + */ + public static function parseMessage(string $message): array + { + if (!$message) { + throw new \InvalidArgumentException('Invalid message'); + } + + $message = ltrim($message, "\r\n"); + + $messageParts = preg_split("/\r?\n\r?\n/", $message, 2); + + if ($messageParts === false || count($messageParts) !== 2) { + throw new \InvalidArgumentException('Invalid message: Missing header delimiter'); + } + + [$rawHeaders, $body] = $messageParts; + $rawHeaders .= "\r\n"; // Put back the delimiter we split previously + $headerParts = preg_split("/\r?\n/", $rawHeaders, 2); + + if ($headerParts === false || count($headerParts) !== 2) { + throw new \InvalidArgumentException('Invalid message: Missing status line'); + } + + [$startLine, $rawHeaders] = $headerParts; + + if (preg_match("/(?:^HTTP\/|^[A-Z]+ \S+ HTTP\/)(\d+(?:\.\d+)?)/i", $startLine, $matches) && $matches[1] === '1.0') { + // Header folding is deprecated for HTTP/1.1, but allowed in HTTP/1.0 + $rawHeaders = preg_replace(Rfc7230::HEADER_FOLD_REGEX, ' ', $rawHeaders); + } + + /** @var array[] $headerLines */ + $count = preg_match_all(Rfc7230::HEADER_REGEX, $rawHeaders, $headerLines, PREG_SET_ORDER); + + // If these aren't the same, then one line didn't match and there's an invalid header. + if ($count !== substr_count($rawHeaders, "\n")) { + // Folding is deprecated, see https://tools.ietf.org/html/rfc7230#section-3.2.4 + if (preg_match(Rfc7230::HEADER_FOLD_REGEX, $rawHeaders)) { + throw new \InvalidArgumentException('Invalid header syntax: Obsolete line folding'); + } + + throw new \InvalidArgumentException('Invalid header syntax'); + } + + $headers = []; + + foreach ($headerLines as $headerLine) { + $headers[$headerLine[1]][] = $headerLine[2]; + } + + return [ + 'start-line' => $startLine, + 'headers' => $headers, + 'body' => $body, + ]; + } + + /** + * Constructs a URI for an HTTP request message. + * + * @param string $path Path from the start-line + * @param array $headers Array of headers (each value an array). + */ + public static function parseRequestUri(string $path, array $headers): string + { + $hostKey = array_filter(array_keys($headers), function ($k) { + return strtolower($k) === 'host'; + }); + + // If no host is found, then a full URI cannot be constructed. + if (!$hostKey) { + return $path; + } + + $host = $headers[reset($hostKey)][0]; + $scheme = substr($host, -4) === ':443' ? 'https' : 'http'; + + return $scheme . '://' . $host . '/' . ltrim($path, '/'); + } + + /** + * Parses a request message string into a request object. + * + * @param string $message Request message string. + */ + public static function parseRequest(string $message): RequestInterface + { + $data = self::parseMessage($message); + $matches = []; + if (!preg_match('/^[\S]+\s+([a-zA-Z]+:\/\/|\/).*/', $data['start-line'], $matches)) { + throw new \InvalidArgumentException('Invalid request string'); + } + $parts = explode(' ', $data['start-line'], 3); + $version = isset($parts[2]) ? explode('/', $parts[2])[1] : '1.1'; + + $request = new Request( + $parts[0], + $matches[1] === '/' ? self::parseRequestUri($parts[1], $data['headers']) : $parts[1], + $data['headers'], + $data['body'], + $version + ); + + return $matches[1] === '/' ? $request : $request->withRequestTarget($parts[1]); + } + + /** + * Parses a response message string into a response object. + * + * @param string $message Response message string. + */ + public static function parseResponse(string $message): ResponseInterface + { + $data = self::parseMessage($message); + // According to https://tools.ietf.org/html/rfc7230#section-3.1.2 the space + // between status-code and reason-phrase is required. But browsers accept + // responses without space and reason as well. + if (!preg_match('/^HTTP\/.* [0-9]{3}( .*|$)/', $data['start-line'])) { + throw new \InvalidArgumentException('Invalid response string: ' . $data['start-line']); + } + $parts = explode(' ', $data['start-line'], 3); + + return new Response( + (int) $parts[1], + $data['headers'], + $data['body'], + explode('/', $parts[0])[1], + $parts[2] ?? null + ); + } +} diff --git a/vendor/guzzlehttp/psr7/src/MessageTrait.php b/vendor/guzzlehttp/psr7/src/MessageTrait.php index 1e4da649..503c280b 100644 --- a/vendor/guzzlehttp/psr7/src/MessageTrait.php +++ b/vendor/guzzlehttp/psr7/src/MessageTrait.php @@ -1,6 +1,10 @@ array of values */ + /** @var array Map of all registered headers, as original name => array of values */ private $headers = []; - /** @var array Map of lowercase header name => original name at registration */ + /** @var array Map of lowercase header name => original name at registration */ private $headerNames = []; /** @var string */ private $protocol = '1.1'; - /** @var StreamInterface */ + /** @var StreamInterface|null */ private $stream; - public function getProtocolVersion() + public function getProtocolVersion(): string { return $this->protocol; } - public function withProtocolVersion($version) + public function withProtocolVersion($version): MessageInterface { if ($this->protocol === $version) { return $this; @@ -36,17 +40,17 @@ trait MessageTrait return $new; } - public function getHeaders() + public function getHeaders(): array { return $this->headers; } - public function hasHeader($header) + public function hasHeader($header): bool { return isset($this->headerNames[strtolower($header)]); } - public function getHeader($header) + public function getHeader($header): array { $header = strtolower($header); @@ -59,18 +63,15 @@ trait MessageTrait return $this->headers[$header]; } - public function getHeaderLine($header) + public function getHeaderLine($header): string { return implode(', ', $this->getHeader($header)); } - public function withHeader($header, $value) + public function withHeader($header, $value): MessageInterface { - if (!is_array($value)) { - $value = [$value]; - } - - $value = $this->trimHeaderValues($value); + $this->assertHeader($header); + $value = $this->normalizeHeaderValue($value); $normalized = strtolower($header); $new = clone $this; @@ -83,13 +84,10 @@ trait MessageTrait return $new; } - public function withAddedHeader($header, $value) + public function withAddedHeader($header, $value): MessageInterface { - if (!is_array($value)) { - $value = [$value]; - } - - $value = $this->trimHeaderValues($value); + $this->assertHeader($header); + $value = $this->normalizeHeaderValue($value); $normalized = strtolower($header); $new = clone $this; @@ -104,7 +102,7 @@ trait MessageTrait return $new; } - public function withoutHeader($header) + public function withoutHeader($header): MessageInterface { $normalized = strtolower($header); @@ -120,16 +118,16 @@ trait MessageTrait return $new; } - public function getBody() + public function getBody(): StreamInterface { if (!$this->stream) { - $this->stream = stream_for(''); + $this->stream = Utils::streamFor(''); } return $this->stream; } - public function withBody(StreamInterface $body) + public function withBody(StreamInterface $body): MessageInterface { if ($body === $this->stream) { return $this; @@ -140,15 +138,20 @@ trait MessageTrait return $new; } - private function setHeaders(array $headers) + /** + * @param array $headers + */ + private function setHeaders(array $headers): void { $this->headerNames = $this->headers = []; foreach ($headers as $header => $value) { - if (!is_array($value)) { - $value = [$value]; + if (is_int($header)) { + // Numeric array keys are converted to int by PHP but having a header name '123' is not forbidden by the spec + // and also allowed in withHeader(). So we need to cast it to string again for the following assertion to pass. + $header = (string) $header; } - - $value = $this->trimHeaderValues($value); + $this->assertHeader($header); + $value = $this->normalizeHeaderValue($value); $normalized = strtolower($header); if (isset($this->headerNames[$normalized])) { $header = $this->headerNames[$normalized]; @@ -160,6 +163,24 @@ trait MessageTrait } } + /** + * @param mixed $value + * + * @return string[] + */ + private function normalizeHeaderValue($value): array + { + if (!is_array($value)) { + return $this->trimHeaderValues([$value]); + } + + if (count($value) === 0) { + throw new \InvalidArgumentException('Header value can not be an empty array.'); + } + + return $this->trimHeaderValues($value); + } + /** * Trims whitespace from the header values. * @@ -168,16 +189,47 @@ trait MessageTrait * header-field = field-name ":" OWS field-value OWS * OWS = *( SP / HTAB ) * - * @param string[] $values Header values + * @param mixed[] $values Header values * * @return string[] Trimmed header values * * @see https://tools.ietf.org/html/rfc7230#section-3.2.4 */ - private function trimHeaderValues(array $values) + private function trimHeaderValues(array $values): array { return array_map(function ($value) { - return trim($value, " \t"); - }, $values); + if (!is_scalar($value) && null !== $value) { + throw new \InvalidArgumentException(sprintf( + 'Header value must be scalar or null but %s provided.', + is_object($value) ? get_class($value) : gettype($value) + )); + } + + return trim((string) $value, " \t"); + }, array_values($values)); + } + + /** + * @see https://tools.ietf.org/html/rfc7230#section-3.2 + * + * @param mixed $header + */ + private function assertHeader($header): void + { + if (!is_string($header)) { + throw new \InvalidArgumentException(sprintf( + 'Header name must be a string but %s provided.', + is_object($header) ? get_class($header) : gettype($header) + )); + } + + if (! preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/', $header)) { + throw new \InvalidArgumentException( + sprintf( + '"%s" is not valid header name', + $header + ) + ); + } } } diff --git a/vendor/guzzlehttp/psr7/src/MimeType.php b/vendor/guzzlehttp/psr7/src/MimeType.php new file mode 100644 index 00000000..dfa94251 --- /dev/null +++ b/vendor/guzzlehttp/psr7/src/MimeType.php @@ -0,0 +1,130 @@ + 'video/3gpp', + '7z' => 'application/x-7z-compressed', + 'aac' => 'audio/x-aac', + 'ai' => 'application/postscript', + 'aif' => 'audio/x-aiff', + 'asc' => 'text/plain', + 'asf' => 'video/x-ms-asf', + 'atom' => 'application/atom+xml', + 'avi' => 'video/x-msvideo', + 'bmp' => 'image/bmp', + 'bz2' => 'application/x-bzip2', + 'cer' => 'application/pkix-cert', + 'crl' => 'application/pkix-crl', + 'crt' => 'application/x-x509-ca-cert', + 'css' => 'text/css', + 'csv' => 'text/csv', + 'cu' => 'application/cu-seeme', + 'deb' => 'application/x-debian-package', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dvi' => 'application/x-dvi', + 'eot' => 'application/vnd.ms-fontobject', + 'eps' => 'application/postscript', + 'epub' => 'application/epub+zip', + 'etx' => 'text/x-setext', + 'flac' => 'audio/flac', + 'flv' => 'video/x-flv', + 'gif' => 'image/gif', + 'gz' => 'application/gzip', + 'htm' => 'text/html', + 'html' => 'text/html', + 'ico' => 'image/x-icon', + 'ics' => 'text/calendar', + 'ini' => 'text/plain', + 'iso' => 'application/x-iso9660-image', + 'jar' => 'application/java-archive', + 'jpe' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'js' => 'text/javascript', + 'json' => 'application/json', + 'latex' => 'application/x-latex', + 'log' => 'text/plain', + 'm4a' => 'audio/mp4', + 'm4v' => 'video/mp4', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mov' => 'video/quicktime', + 'mkv' => 'video/x-matroska', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mp4', + 'mp4a' => 'audio/mp4', + 'mp4v' => 'video/mp4', + 'mpe' => 'video/mpeg', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpg4' => 'video/mp4', + 'oga' => 'audio/ogg', + 'ogg' => 'audio/ogg', + 'ogv' => 'video/ogg', + 'ogx' => 'application/ogg', + 'pbm' => 'image/x-portable-bitmap', + 'pdf' => 'application/pdf', + 'pgm' => 'image/x-portable-graymap', + 'png' => 'image/png', + 'pnm' => 'image/x-portable-anymap', + 'ppm' => 'image/x-portable-pixmap', + 'ppt' => 'application/vnd.ms-powerpoint', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'ps' => 'application/postscript', + 'qt' => 'video/quicktime', + 'rar' => 'application/x-rar-compressed', + 'ras' => 'image/x-cmu-raster', + 'rss' => 'application/rss+xml', + 'rtf' => 'application/rtf', + 'sgm' => 'text/sgml', + 'sgml' => 'text/sgml', + 'svg' => 'image/svg+xml', + 'swf' => 'application/x-shockwave-flash', + 'tar' => 'application/x-tar', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'torrent' => 'application/x-bittorrent', + 'ttf' => 'application/x-font-ttf', + 'txt' => 'text/plain', + 'wav' => 'audio/x-wav', + 'webm' => 'video/webm', + 'webp' => 'image/webp', + 'wma' => 'audio/x-ms-wma', + 'wmv' => 'video/x-ms-wmv', + 'woff' => 'application/x-font-woff', + 'wsdl' => 'application/wsdl+xml', + 'xbm' => 'image/x-xbitmap', + 'xls' => 'application/vnd.ms-excel', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xml' => 'application/xml', + 'xpm' => 'image/x-xpixmap', + 'xwd' => 'image/x-xwindowdump', + 'yaml' => 'text/yaml', + 'yml' => 'text/yaml', + 'zip' => 'application/zip', + ]; + + /** + * Determines the mimetype of a file by looking at its extension. + */ + public static function fromFilename(string $filename): ?string + { + return self::fromExtension(pathinfo($filename, PATHINFO_EXTENSION)); + } + + /** + * Maps a file extensions to a mimetype. + * + * @link http://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types + */ + public static function fromExtension(string $extension): ?string + { + return self::MIME_TYPES[strtolower($extension)] ?? null; + } +} diff --git a/vendor/guzzlehttp/psr7/src/MultipartStream.php b/vendor/guzzlehttp/psr7/src/MultipartStream.php index c0fd584f..f76d7c61 100644 --- a/vendor/guzzlehttp/psr7/src/MultipartStream.php +++ b/vendor/guzzlehttp/psr7/src/MultipartStream.php @@ -1,4 +1,7 @@ boundary = $boundary ?: sha1(uniqid('', true)); $this->stream = $this->createStream($elements); } - /** - * Get the boundary - * - * @return string - */ - public function getBoundary() + public function getBoundary(): string { return $this->boundary; } - public function isWritable() + public function isWritable(): bool { return false; } /** * Get the headers needed before transferring the content of a POST file + * + * @param array $headers */ - private function getHeaders(array $headers) + private function getHeaders(array $headers): string { $str = ''; foreach ($headers as $key => $value) { @@ -62,7 +63,7 @@ class MultipartStream implements StreamInterface /** * Create the aggregate stream that will be used to upload the POST data */ - protected function createStream(array $elements) + protected function createStream(array $elements = []): StreamInterface { $stream = new AppendStream(); @@ -71,12 +72,12 @@ class MultipartStream implements StreamInterface } // Add the trailing boundary with CRLF - $stream->addStream(stream_for("--{$this->boundary}--\r\n")); + $stream->addStream(Utils::streamFor("--{$this->boundary}--\r\n")); return $stream; } - private function addElement(AppendStream $stream, array $element) + private function addElement(AppendStream $stream, array $element): void { foreach (['contents', 'name'] as $key) { if (!array_key_exists($key, $element)) { @@ -84,7 +85,7 @@ class MultipartStream implements StreamInterface } } - $element['contents'] = stream_for($element['contents']); + $element['contents'] = Utils::streamFor($element['contents']); if (empty($element['filename'])) { $uri = $element['contents']->getMetadata('uri'); @@ -93,30 +94,29 @@ class MultipartStream implements StreamInterface } } - list($body, $headers) = $this->createElement( + [$body, $headers] = $this->createElement( $element['name'], $element['contents'], - isset($element['filename']) ? $element['filename'] : null, - isset($element['headers']) ? $element['headers'] : [] + $element['filename'] ?? null, + $element['headers'] ?? [] ); - $stream->addStream(stream_for($this->getHeaders($headers))); + $stream->addStream(Utils::streamFor($this->getHeaders($headers))); $stream->addStream($body); - $stream->addStream(stream_for("\r\n")); + $stream->addStream(Utils::streamFor("\r\n")); } - /** - * @return array - */ - private function createElement($name, StreamInterface $stream, $filename, array $headers) + private function createElement(string $name, StreamInterface $stream, ?string $filename, array $headers): array { // Set a default content-disposition header if one was no provided $disposition = $this->getHeader($headers, 'content-disposition'); if (!$disposition) { $headers['Content-Disposition'] = ($filename === '0' || $filename) - ? sprintf('form-data; name="%s"; filename="%s"', + ? sprintf( + 'form-data; name="%s"; filename="%s"', $name, - basename($filename)) + basename($filename) + ) : "form-data; name=\"{$name}\""; } @@ -131,7 +131,7 @@ class MultipartStream implements StreamInterface // Set a default Content-Type if one was not supplied $type = $this->getHeader($headers, 'content-type'); if (!$type && ($filename === '0' || $filename)) { - if ($type = mimetype_from_filename($filename)) { + if ($type = MimeType::fromFilename($filename)) { $headers['Content-Type'] = $type; } } @@ -139,7 +139,7 @@ class MultipartStream implements StreamInterface return [$stream, $headers]; } - private function getHeader(array $headers, $key) + private function getHeader(array $headers, string $key) { $lowercaseHeader = strtolower($key); foreach ($headers as $k => $v) { diff --git a/vendor/guzzlehttp/psr7/src/NoSeekStream.php b/vendor/guzzlehttp/psr7/src/NoSeekStream.php index 23322180..99e25b9e 100644 --- a/vendor/guzzlehttp/psr7/src/NoSeekStream.php +++ b/vendor/guzzlehttp/psr7/src/NoSeekStream.php @@ -1,21 +1,24 @@ source = $source; - $this->size = isset($options['size']) ? $options['size'] : null; - $this->metadata = isset($options['metadata']) ? $options['metadata'] : []; + $this->size = $options['size'] ?? null; + $this->metadata = $options['metadata'] ?? []; $this->buffer = new BufferStream(); } - public function __toString() + public function __toString(): string { try { - return copy_to_string($this); - } catch (\Exception $e) { + return Utils::copyToString($this); + } catch (\Throwable $e) { + if (\PHP_VERSION_ID >= 70400) { + throw $e; + } + trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); return ''; } } - public function close() + public function close(): void { $this->detach(); } public function detach() { - $this->tellPos = false; + $this->tellPos = 0; $this->source = null; + + return null; } - public function getSize() + public function getSize(): ?int { return $this->size; } - public function tell() + public function tell(): int { return $this->tellPos; } - public function eof() + public function eof(): bool { - return !$this->source; + return $this->source === null; } - public function isSeekable() + public function isSeekable(): bool { return false; } - public function rewind() + public function rewind(): void { $this->seek(0); } - public function seek($offset, $whence = SEEK_SET) + public function seek($offset, $whence = SEEK_SET): void { throw new \RuntimeException('Cannot seek a PumpStream'); } - public function isWritable() + public function isWritable(): bool { return false; } - public function write($string) + public function write($string): int { throw new \RuntimeException('Cannot write to a PumpStream'); } - public function isReadable() + public function isReadable(): bool { return true; } - public function read($length) + public function read($length): string { $data = $this->buffer->read($length); $readLen = strlen($data); @@ -129,7 +138,7 @@ class PumpStream implements StreamInterface return $data; } - public function getContents() + public function getContents(): string { $result = ''; while (!$this->eof()) { @@ -139,16 +148,21 @@ class PumpStream implements StreamInterface return $result; } + /** + * {@inheritdoc} + * + * @return mixed + */ public function getMetadata($key = null) { if (!$key) { return $this->metadata; } - return isset($this->metadata[$key]) ? $this->metadata[$key] : null; + return $this->metadata[$key] ?? null; } - private function pump($length) + private function pump(int $length): void { if ($this->source) { do { diff --git a/vendor/guzzlehttp/psr7/src/Query.php b/vendor/guzzlehttp/psr7/src/Query.php new file mode 100644 index 00000000..4fd0ca96 --- /dev/null +++ b/vendor/guzzlehttp/psr7/src/Query.php @@ -0,0 +1,113 @@ + '1', 'foo[b]' => '2'])`. + * + * @param string $str Query string to parse + * @param int|bool $urlEncoding How the query string is encoded + */ + public static function parse(string $str, $urlEncoding = true): array + { + $result = []; + + if ($str === '') { + return $result; + } + + if ($urlEncoding === true) { + $decoder = function ($value) { + return rawurldecode(str_replace('+', ' ', (string) $value)); + }; + } elseif ($urlEncoding === PHP_QUERY_RFC3986) { + $decoder = 'rawurldecode'; + } elseif ($urlEncoding === PHP_QUERY_RFC1738) { + $decoder = 'urldecode'; + } else { + $decoder = function ($str) { + return $str; + }; + } + + foreach (explode('&', $str) as $kvp) { + $parts = explode('=', $kvp, 2); + $key = $decoder($parts[0]); + $value = isset($parts[1]) ? $decoder($parts[1]) : null; + if (!isset($result[$key])) { + $result[$key] = $value; + } else { + if (!is_array($result[$key])) { + $result[$key] = [$result[$key]]; + } + $result[$key][] = $value; + } + } + + return $result; + } + + /** + * Build a query string from an array of key value pairs. + * + * This function can use the return value of `parse()` to build a query + * string. This function does not modify the provided keys when an array is + * encountered (like `http_build_query()` would). + * + * @param array $params Query string parameters. + * @param int|false $encoding Set to false to not encode, PHP_QUERY_RFC3986 + * to encode using RFC3986, or PHP_QUERY_RFC1738 + * to encode using RFC1738. + */ + public static function build(array $params, $encoding = PHP_QUERY_RFC3986): string + { + if (!$params) { + return ''; + } + + if ($encoding === false) { + $encoder = function (string $str): string { + return $str; + }; + } elseif ($encoding === PHP_QUERY_RFC3986) { + $encoder = 'rawurlencode'; + } elseif ($encoding === PHP_QUERY_RFC1738) { + $encoder = 'urlencode'; + } else { + throw new \InvalidArgumentException('Invalid type'); + } + + $qs = ''; + foreach ($params as $k => $v) { + $k = $encoder((string) $k); + if (!is_array($v)) { + $qs .= $k; + $v = is_bool($v) ? (int) $v : $v; + if ($v !== null) { + $qs .= '=' . $encoder((string) $v); + } + $qs .= '&'; + } else { + foreach ($v as $vv) { + $qs .= $k; + $vv = is_bool($vv) ? (int) $vv : $vv; + if ($vv !== null) { + $qs .= '=' . $encoder((string) $vv); + } + $qs .= '&'; + } + } + } + + return $qs ? (string) substr($qs, 0, -1) : ''; + } +} diff --git a/vendor/guzzlehttp/psr7/src/Request.php b/vendor/guzzlehttp/psr7/src/Request.php index 00066424..b17af66a 100644 --- a/vendor/guzzlehttp/psr7/src/Request.php +++ b/vendor/guzzlehttp/psr7/src/Request.php @@ -1,4 +1,7 @@ $headers Request headers + * @param string|resource|StreamInterface|null $body Request body * @param string $version Protocol version */ public function __construct( - $method, + string $method, $uri, array $headers = [], $body = null, - $version = '1.1' + string $version = '1.1' ) { + $this->assertMethod($method); if (!($uri instanceof UriInterface)) { $uri = new Uri($uri); } @@ -50,18 +54,18 @@ class Request implements RequestInterface } if ($body !== '' && $body !== null) { - $this->stream = stream_for($body); + $this->stream = Utils::streamFor($body); } } - public function getRequestTarget() + public function getRequestTarget(): string { if ($this->requestTarget !== null) { return $this->requestTarget; } $target = $this->uri->getPath(); - if ($target == '') { + if ($target === '') { $target = '/'; } if ($this->uri->getQuery() != '') { @@ -71,7 +75,7 @@ class Request implements RequestInterface return $target; } - public function withRequestTarget($requestTarget) + public function withRequestTarget($requestTarget): RequestInterface { if (preg_match('#\s#', $requestTarget)) { throw new InvalidArgumentException( @@ -84,24 +88,25 @@ class Request implements RequestInterface return $new; } - public function getMethod() + public function getMethod(): string { return $this->method; } - public function withMethod($method) + public function withMethod($method): RequestInterface { + $this->assertMethod($method); $new = clone $this; $new->method = strtoupper($method); return $new; } - public function getUri() + public function getUri(): UriInterface { return $this->uri; } - public function withUri(UriInterface $uri, $preserveHost = false) + public function withUri(UriInterface $uri, $preserveHost = false): RequestInterface { if ($uri === $this->uri) { return $this; @@ -117,7 +122,7 @@ class Request implements RequestInterface return $new; } - private function updateHostFromUri() + private function updateHostFromUri(): void { $host = $this->uri->getHost(); @@ -139,4 +144,14 @@ class Request implements RequestInterface // See: http://tools.ietf.org/html/rfc7230#section-5.4 $this->headers = [$header => [$host]] + $this->headers; } + + /** + * @param mixed $method + */ + private function assertMethod($method): void + { + if (!is_string($method) || $method === '') { + throw new InvalidArgumentException('Method must be a non-empty string.'); + } + } } diff --git a/vendor/guzzlehttp/psr7/src/Response.php b/vendor/guzzlehttp/psr7/src/Response.php index 6e72c06b..4c6ee6f0 100644 --- a/vendor/guzzlehttp/psr7/src/Response.php +++ b/vendor/guzzlehttp/psr7/src/Response.php @@ -1,4 +1,7 @@ 'Continue', 101 => 'Switching Protocols', 102 => 'Processing', @@ -33,6 +36,7 @@ class Response implements ResponseInterface 305 => 'Use Proxy', 306 => 'Switch Proxy', 307 => 'Temporary Redirect', + 308 => 'Permanent Redirect', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', @@ -70,42 +74,41 @@ class Response implements ResponseInterface 506 => 'Variant Also Negotiates', 507 => 'Insufficient Storage', 508 => 'Loop Detected', + 510 => 'Not Extended', 511 => 'Network Authentication Required', ]; /** @var string */ - private $reasonPhrase = ''; + private $reasonPhrase; /** @var int */ - private $statusCode = 200; + private $statusCode; /** * @param int $status Status code - * @param array $headers Response headers - * @param string|null|resource|StreamInterface $body Response body + * @param array $headers Response headers + * @param string|resource|StreamInterface|null $body Response body * @param string $version Protocol version * @param string|null $reason Reason phrase (when empty a default will be used based on the status code) */ public function __construct( - $status = 200, + int $status = 200, array $headers = [], $body = null, - $version = '1.1', - $reason = null + string $version = '1.1', + string $reason = null ) { - if (filter_var($status, FILTER_VALIDATE_INT) === false) { - throw new \InvalidArgumentException('Status code must be an integer value.'); - } + $this->assertStatusCodeRange($status); - $this->statusCode = (int) $status; + $this->statusCode = $status; if ($body !== '' && $body !== null) { - $this->stream = stream_for($body); + $this->stream = Utils::streamFor($body); } $this->setHeaders($headers); - if ($reason == '' && isset(self::$phrases[$this->statusCode])) { - $this->reasonPhrase = self::$phrases[$this->statusCode]; + if ($reason == '' && isset(self::PHRASES[$this->statusCode])) { + $this->reasonPhrase = self::PHRASES[$this->statusCode]; } else { $this->reasonPhrase = (string) $reason; } @@ -113,24 +116,45 @@ class Response implements ResponseInterface $this->protocol = $version; } - public function getStatusCode() + public function getStatusCode(): int { return $this->statusCode; } - public function getReasonPhrase() + public function getReasonPhrase(): string { return $this->reasonPhrase; } - public function withStatus($code, $reasonPhrase = '') + public function withStatus($code, $reasonPhrase = ''): ResponseInterface { + $this->assertStatusCodeIsInteger($code); + $code = (int) $code; + $this->assertStatusCodeRange($code); + $new = clone $this; - $new->statusCode = (int) $code; - if ($reasonPhrase == '' && isset(self::$phrases[$new->statusCode])) { - $reasonPhrase = self::$phrases[$new->statusCode]; + $new->statusCode = $code; + if ($reasonPhrase == '' && isset(self::PHRASES[$new->statusCode])) { + $reasonPhrase = self::PHRASES[$new->statusCode]; } - $new->reasonPhrase = $reasonPhrase; + $new->reasonPhrase = (string) $reasonPhrase; return $new; } + + /** + * @param mixed $statusCode + */ + private function assertStatusCodeIsInteger($statusCode): void + { + if (filter_var($statusCode, FILTER_VALIDATE_INT) === false) { + throw new \InvalidArgumentException('Status code must be an integer value.'); + } + } + + private function assertStatusCodeRange(int $statusCode): void + { + if ($statusCode < 100 || $statusCode >= 600) { + throw new \InvalidArgumentException('Status code must be an integer value between 1xx and 5xx.'); + } + } } diff --git a/vendor/guzzlehttp/psr7/src/Rfc7230.php b/vendor/guzzlehttp/psr7/src/Rfc7230.php index 505e4742..30224018 100644 --- a/vendor/guzzlehttp/psr7/src/Rfc7230.php +++ b/vendor/guzzlehttp/psr7/src/Rfc7230.php @@ -1,18 +1,23 @@ @,;:\\\"/[\]?={}\x01-\x20\x7F]++):[ \t]*+((?:[ \t]*+[\x21-\x7E\x80-\xFF]++)*+)[ \t]*+\r?\n)m"; - const HEADER_FOLD_REGEX = "(\r?\n[ \t]++)"; + public const HEADER_REGEX = "(^([^()<>@,;:\\\"/[\]?={}\x01-\x20\x7F]++):[ \t]*+((?:[ \t]*+[\x21-\x7E\x80-\xFF]++)*+)[ \t]*+\r?\n)m"; + public const HEADER_FOLD_REGEX = "(\r?\n[ \t]++)"; } diff --git a/vendor/guzzlehttp/psr7/src/ServerRequest.php b/vendor/guzzlehttp/psr7/src/ServerRequest.php index 99f453a5..6ae3f9be 100644 --- a/vendor/guzzlehttp/psr7/src/ServerRequest.php +++ b/vendor/guzzlehttp/psr7/src/ServerRequest.php @@ -1,12 +1,14 @@ $headers Request headers + * @param string|resource|StreamInterface|null $body Request body * @param string $version Protocol version * @param array $serverParams Typically the $_SERVER superglobal */ public function __construct( - $method, + string $method, $uri, array $headers = [], $body = null, - $version = '1.1', + string $version = '1.1', array $serverParams = [] ) { $this->serverParams = $serverParams; @@ -79,10 +81,10 @@ class ServerRequest extends Request implements ServerRequestInterface * Return an UploadedFile instance array. * * @param array $files A array which respect $_FILES structure + * * @throws InvalidArgumentException for unrecognized values - * @return array */ - public static function normalizeFiles(array $files) + public static function normalizeFiles(array $files): array { $normalized = []; @@ -109,7 +111,8 @@ class ServerRequest extends Request implements ServerRequestInterface * delegate to normalizeNestedFileSpec() and return that return value. * * @param array $value $_FILES struct - * @return array|UploadedFileInterface + * + * @return UploadedFileInterface|UploadedFileInterface[] */ private static function createUploadedFileFromSpec(array $value) { @@ -132,10 +135,9 @@ class ServerRequest extends Request implements ServerRequestInterface * Loops through all nested files and returns a normalized array of * UploadedFileInterface instances. * - * @param array $files * @return UploadedFileInterface[] */ - private static function normalizeNestedFileSpec(array $files = []) + private static function normalizeNestedFileSpec(array $files = []): array { $normalizedFiles = []; @@ -160,15 +162,13 @@ class ServerRequest extends Request implements ServerRequestInterface * $_COOKIE * $_FILES * $_SERVER - * - * @return ServerRequestInterface */ - public static function fromGlobals() + public static function fromGlobals(): ServerRequestInterface { - $method = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET'; + $method = $_SERVER['REQUEST_METHOD'] ?? 'GET'; $headers = getallheaders(); $uri = self::getUriFromGlobals(); - $body = new LazyOpenStream('php://input', 'r+'); + $body = new CachingStream(new LazyOpenStream('php://input', 'r+')); $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? str_replace('HTTP/', '', $_SERVER['SERVER_PROTOCOL']) : '1.1'; $serverRequest = new ServerRequest($method, $uri, $headers, $body, $protocol, $_SERVER); @@ -180,26 +180,24 @@ class ServerRequest extends Request implements ServerRequestInterface ->withUploadedFiles(self::normalizeFiles($_FILES)); } - private static function extractHostAndPortFromAuthority($authority) + private static function extractHostAndPortFromAuthority(string $authority): array { - $uri = 'http://'.$authority; + $uri = 'http://' . $authority; $parts = parse_url($uri); if (false === $parts) { return [null, null]; } - $host = isset($parts['host']) ? $parts['host'] : null; - $port = isset($parts['port']) ? $parts['port'] : null; + $host = $parts['host'] ?? null; + $port = $parts['port'] ?? null; return [$host, $port]; } /** * Get a Uri populated with values from $_SERVER. - * - * @return UriInterface */ - public static function getUriFromGlobals() + public static function getUriFromGlobals(): UriInterface { $uri = new Uri(''); @@ -207,7 +205,7 @@ class ServerRequest extends Request implements ServerRequestInterface $hasPort = false; if (isset($_SERVER['HTTP_HOST'])) { - list($host, $port) = self::extractHostAndPortFromAuthority($_SERVER['HTTP_HOST']); + [$host, $port] = self::extractHostAndPortFromAuthority($_SERVER['HTTP_HOST']); if ($host !== null) { $uri = $uri->withHost($host); } @@ -243,27 +241,17 @@ class ServerRequest extends Request implements ServerRequestInterface return $uri; } - - /** - * {@inheritdoc} - */ - public function getServerParams() + public function getServerParams(): array { return $this->serverParams; } - /** - * {@inheritdoc} - */ - public function getUploadedFiles() + public function getUploadedFiles(): array { return $this->uploadedFiles; } - /** - * {@inheritdoc} - */ - public function withUploadedFiles(array $uploadedFiles) + public function withUploadedFiles(array $uploadedFiles): ServerRequestInterface { $new = clone $this; $new->uploadedFiles = $uploadedFiles; @@ -271,18 +259,12 @@ class ServerRequest extends Request implements ServerRequestInterface return $new; } - /** - * {@inheritdoc} - */ - public function getCookieParams() + public function getCookieParams(): array { return $this->cookieParams; } - /** - * {@inheritdoc} - */ - public function withCookieParams(array $cookies) + public function withCookieParams(array $cookies): ServerRequestInterface { $new = clone $this; $new->cookieParams = $cookies; @@ -290,18 +272,12 @@ class ServerRequest extends Request implements ServerRequestInterface return $new; } - /** - * {@inheritdoc} - */ - public function getQueryParams() + public function getQueryParams(): array { return $this->queryParams; } - /** - * {@inheritdoc} - */ - public function withQueryParams(array $query) + public function withQueryParams(array $query): ServerRequestInterface { $new = clone $this; $new->queryParams = $query; @@ -311,16 +287,15 @@ class ServerRequest extends Request implements ServerRequestInterface /** * {@inheritdoc} + * + * @return array|object|null */ public function getParsedBody() { return $this->parsedBody; } - /** - * {@inheritdoc} - */ - public function withParsedBody($data) + public function withParsedBody($data): ServerRequestInterface { $new = clone $this; $new->parsedBody = $data; @@ -328,16 +303,15 @@ class ServerRequest extends Request implements ServerRequestInterface return $new; } - /** - * {@inheritdoc} - */ - public function getAttributes() + public function getAttributes(): array { return $this->attributes; } /** * {@inheritdoc} + * + * @return mixed */ public function getAttribute($attribute, $default = null) { @@ -348,10 +322,7 @@ class ServerRequest extends Request implements ServerRequestInterface return $this->attributes[$attribute]; } - /** - * {@inheritdoc} - */ - public function withAttribute($attribute, $value) + public function withAttribute($attribute, $value): ServerRequestInterface { $new = clone $this; $new->attributes[$attribute] = $value; @@ -359,10 +330,7 @@ class ServerRequest extends Request implements ServerRequestInterface return $new; } - /** - * {@inheritdoc} - */ - public function withoutAttribute($attribute) + public function withoutAttribute($attribute): ServerRequestInterface { if (false === array_key_exists($attribute, $this->attributes)) { return $this; diff --git a/vendor/guzzlehttp/psr7/src/Stream.php b/vendor/guzzlehttp/psr7/src/Stream.php index 111795eb..d389427c 100644 --- a/vendor/guzzlehttp/psr7/src/Stream.php +++ b/vendor/guzzlehttp/psr7/src/Stream.php @@ -1,38 +1,37 @@ [ - 'r' => true, 'w+' => true, 'r+' => true, 'x+' => true, 'c+' => true, - 'rb' => true, 'w+b' => true, 'r+b' => true, 'x+b' => true, - 'c+b' => true, 'rt' => true, 'w+t' => true, 'r+t' => true, - 'x+t' => true, 'c+t' => true, 'a+' => true, 'rb+' => true, - ], - 'write' => [ - 'w' => true, 'w+' => true, 'rw' => true, 'r+' => true, 'x+' => true, - 'c+' => true, 'wb' => true, 'w+b' => true, 'r+b' => true, 'rb+' => true, - 'x+b' => true, 'c+b' => true, 'w+t' => true, 'r+t' => true, - 'x+t' => true, 'c+t' => true, 'a' => true, 'a+' => true - ] - ]; + /** @var resource */ + private $stream; + /** @var int|null */ + private $size; + /** @var bool */ + private $seekable; + /** @var bool */ + private $readable; + /** @var bool */ + private $writable; + /** @var string|null */ + private $uri; + /** @var mixed[] */ + private $customMetadata; /** * This constructor accepts an associative array of options. @@ -43,12 +42,12 @@ class Stream implements StreamInterface * - metadata: (array) Any additional metadata to return when the metadata * of the stream is accessed. * - * @param resource $stream Stream resource to wrap. - * @param array $options Associative array of options. + * @param resource $stream Stream resource to wrap. + * @param array{size?: int, metadata?: array} $options Associative array of options. * * @throws \InvalidArgumentException if the stream is not a stream resource */ - public function __construct($stream, $options = []) + public function __construct($stream, array $options = []) { if (!is_resource($stream)) { throw new \InvalidArgumentException('Stream must be a resource'); @@ -58,15 +57,12 @@ class Stream implements StreamInterface $this->size = $options['size']; } - $this->customMetadata = isset($options['metadata']) - ? $options['metadata'] - : []; - + $this->customMetadata = $options['metadata'] ?? []; $this->stream = $stream; $meta = stream_get_meta_data($this->stream); $this->seekable = $meta['seekable']; - $this->readable = isset(self::$readWriteHash['read'][$meta['mode']]); - $this->writable = isset(self::$readWriteHash['write'][$meta['mode']]); + $this->readable = (bool)preg_match(self::READABLE_MODES, $meta['mode']); + $this->writable = (bool)preg_match(self::WRITABLE_MODES, $meta['mode']); $this->uri = $this->getMetadata('uri'); } @@ -78,17 +74,23 @@ class Stream implements StreamInterface $this->close(); } - public function __toString() + public function __toString(): string { try { - $this->seek(0); - return (string) stream_get_contents($this->stream); - } catch (\Exception $e) { + if ($this->isSeekable()) { + $this->seek(0); + } + return $this->getContents(); + } catch (\Throwable $e) { + if (\PHP_VERSION_ID >= 70400) { + throw $e; + } + trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); return ''; } } - public function getContents() + public function getContents(): string { if (!isset($this->stream)) { throw new \RuntimeException('Stream is detached'); @@ -103,7 +105,7 @@ class Stream implements StreamInterface return $contents; } - public function close() + public function close(): void { if (isset($this->stream)) { if (is_resource($this->stream)) { @@ -127,7 +129,7 @@ class Stream implements StreamInterface return $result; } - public function getSize() + public function getSize(): ?int { if ($this->size !== null) { return $this->size; @@ -143,7 +145,7 @@ class Stream implements StreamInterface } $stats = fstat($this->stream); - if (isset($stats['size'])) { + if (is_array($stats) && isset($stats['size'])) { $this->size = $stats['size']; return $this->size; } @@ -151,22 +153,22 @@ class Stream implements StreamInterface return null; } - public function isReadable() + public function isReadable(): bool { return $this->readable; } - public function isWritable() + public function isWritable(): bool { return $this->writable; } - public function isSeekable() + public function isSeekable(): bool { return $this->seekable; } - public function eof() + public function eof(): bool { if (!isset($this->stream)) { throw new \RuntimeException('Stream is detached'); @@ -175,7 +177,7 @@ class Stream implements StreamInterface return feof($this->stream); } - public function tell() + public function tell(): int { if (!isset($this->stream)) { throw new \RuntimeException('Stream is detached'); @@ -190,13 +192,15 @@ class Stream implements StreamInterface return $result; } - public function rewind() + public function rewind(): void { $this->seek(0); } - public function seek($offset, $whence = SEEK_SET) + public function seek($offset, $whence = SEEK_SET): void { + $whence = (int) $whence; + if (!isset($this->stream)) { throw new \RuntimeException('Stream is detached'); } @@ -209,7 +213,7 @@ class Stream implements StreamInterface } } - public function read($length) + public function read($length): string { if (!isset($this->stream)) { throw new \RuntimeException('Stream is detached'); @@ -233,7 +237,7 @@ class Stream implements StreamInterface return $string; } - public function write($string) + public function write($string): int { if (!isset($this->stream)) { throw new \RuntimeException('Stream is detached'); @@ -253,6 +257,11 @@ class Stream implements StreamInterface return $result; } + /** + * {@inheritdoc} + * + * @return mixed + */ public function getMetadata($key = null) { if (!isset($this->stream)) { @@ -265,6 +274,6 @@ class Stream implements StreamInterface $meta = stream_get_meta_data($this->stream); - return isset($meta[$key]) ? $meta[$key] : null; + return $meta[$key] ?? null; } } diff --git a/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php b/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php index daec6f52..56d4104d 100644 --- a/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php +++ b/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php @@ -1,11 +1,15 @@ stream = $this->createStream(); return $this->stream; } @@ -35,47 +37,52 @@ trait StreamDecoratorTrait throw new \UnexpectedValueException("$name not found on class"); } - public function __toString() + public function __toString(): string { try { if ($this->isSeekable()) { $this->seek(0); } return $this->getContents(); - } catch (\Exception $e) { - // Really, PHP? https://bugs.php.net/bug.php?id=53648 - trigger_error('StreamDecorator::__toString exception: ' - . (string) $e, E_USER_ERROR); + } catch (\Throwable $e) { + if (\PHP_VERSION_ID >= 70400) { + throw $e; + } + trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); return ''; } } - public function getContents() + public function getContents(): string { - return copy_to_string($this); + return Utils::copyToString($this); } /** * Allow decorators to implement custom methods * - * @param string $method Missing method name - * @param array $args Method arguments - * * @return mixed */ - public function __call($method, array $args) + public function __call(string $method, array $args) { - $result = call_user_func_array([$this->stream, $method], $args); + /** @var callable $callable */ + $callable = [$this->stream, $method]; + $result = call_user_func_array($callable, $args); // Always return the wrapped object if the result is a return $this return $result === $this->stream ? $this : $result; } - public function close() + public function close(): void { $this->stream->close(); } + /** + * {@inheritdoc} + * + * @return mixed + */ public function getMetadata($key = null) { return $this->stream->getMetadata($key); @@ -86,52 +93,52 @@ trait StreamDecoratorTrait return $this->stream->detach(); } - public function getSize() + public function getSize(): ?int { return $this->stream->getSize(); } - public function eof() + public function eof(): bool { return $this->stream->eof(); } - public function tell() + public function tell(): int { return $this->stream->tell(); } - public function isReadable() + public function isReadable(): bool { return $this->stream->isReadable(); } - public function isWritable() + public function isWritable(): bool { return $this->stream->isWritable(); } - public function isSeekable() + public function isSeekable(): bool { return $this->stream->isSeekable(); } - public function rewind() + public function rewind(): void { $this->seek(0); } - public function seek($offset, $whence = SEEK_SET) + public function seek($offset, $whence = SEEK_SET): void { $this->stream->seek($offset, $whence); } - public function read($length) + public function read($length): string { return $this->stream->read($length); } - public function write($string) + public function write($string): int { return $this->stream->write($string); } @@ -139,10 +146,9 @@ trait StreamDecoratorTrait /** * Implement in subclasses to dynamically create streams when requested. * - * @return StreamInterface * @throws \BadMethodCallException */ - protected function createStream() + protected function createStream(): StreamInterface { throw new \BadMethodCallException('Not implemented'); } diff --git a/vendor/guzzlehttp/psr7/src/StreamWrapper.php b/vendor/guzzlehttp/psr7/src/StreamWrapper.php index 0f3a2856..2a934640 100644 --- a/vendor/guzzlehttp/psr7/src/StreamWrapper.php +++ b/vendor/guzzlehttp/psr7/src/StreamWrapper.php @@ -1,12 +1,17 @@ context); @@ -79,41 +83,48 @@ class StreamWrapper return true; } - public function stream_read($count) + public function stream_read(int $count): string { return $this->stream->read($count); } - public function stream_write($data) + public function stream_write(string $data): int { - return (int) $this->stream->write($data); + return $this->stream->write($data); } - public function stream_tell() + public function stream_tell(): int { return $this->stream->tell(); } - public function stream_eof() + public function stream_eof(): bool { return $this->stream->eof(); } - public function stream_seek($offset, $whence) + public function stream_seek(int $offset, int $whence): bool { $this->stream->seek($offset, $whence); return true; } - public function stream_cast($cast_as) + /** + * @return resource|false + */ + public function stream_cast(int $cast_as) { $stream = clone($this->stream); + $resource = $stream->detach(); - return $stream->detach(); + return $resource ?? false; } - public function stream_stat() + /** + * @return array + */ + public function stream_stat(): array { static $modeMap = [ 'r' => 33060, @@ -140,7 +151,10 @@ class StreamWrapper ]; } - public function url_stat($path, $flags) + /** + * @return array + */ + public function url_stat(string $path, int $flags): array { return [ 'dev' => 0, diff --git a/vendor/guzzlehttp/psr7/src/UploadedFile.php b/vendor/guzzlehttp/psr7/src/UploadedFile.php index e62bd5c8..b1521bcf 100644 --- a/vendor/guzzlehttp/psr7/src/UploadedFile.php +++ b/vendor/guzzlehttp/psr7/src/UploadedFile.php @@ -1,4 +1,7 @@ setError($errorStatus); - $this->setSize($size); - $this->setClientFilename($clientFilename); - $this->setClientMediaType($clientMediaType); + $this->size = $size; + $this->clientFilename = $clientFilename; + $this->clientMediaType = $clientMediaType; if ($this->isOk()) { $this->setStreamOrFile($streamOrFile); @@ -84,10 +80,11 @@ class UploadedFile implements UploadedFileInterface /** * Depending on the value set file or stream variable * - * @param mixed $streamOrFile + * @param StreamInterface|string|resource $streamOrFile + * * @throws InvalidArgumentException */ - private function setStreamOrFile($streamOrFile) + private function setStreamOrFile($streamOrFile): void { if (is_string($streamOrFile)) { $this->file = $streamOrFile; @@ -103,18 +100,11 @@ class UploadedFile implements UploadedFileInterface } /** - * @param int $error * @throws InvalidArgumentException */ - private function setError($error) + private function setError(int $error): void { - if (false === is_int($error)) { - throw new InvalidArgumentException( - 'Upload file error status must be an integer' - ); - } - - if (false === in_array($error, UploadedFile::$errors)) { + if (false === in_array($error, UploadedFile::ERRORS, true)) { throw new InvalidArgumentException( 'Invalid error status for UploadedFile' ); @@ -123,83 +113,20 @@ class UploadedFile implements UploadedFileInterface $this->error = $error; } - /** - * @param int $size - * @throws InvalidArgumentException - */ - private function setSize($size) - { - if (false === is_int($size)) { - throw new InvalidArgumentException( - 'Upload file size must be an integer' - ); - } - - $this->size = $size; - } - - /** - * @param mixed $param - * @return boolean - */ - private function isStringOrNull($param) - { - return in_array(gettype($param), ['string', 'NULL']); - } - - /** - * @param mixed $param - * @return boolean - */ - private function isStringNotEmpty($param) + private function isStringNotEmpty($param): bool { return is_string($param) && false === empty($param); } - /** - * @param string|null $clientFilename - * @throws InvalidArgumentException - */ - private function setClientFilename($clientFilename) - { - if (false === $this->isStringOrNull($clientFilename)) { - throw new InvalidArgumentException( - 'Upload file client filename must be a string or null' - ); - } - - $this->clientFilename = $clientFilename; - } - - /** - * @param string|null $clientMediaType - * @throws InvalidArgumentException - */ - private function setClientMediaType($clientMediaType) - { - if (false === $this->isStringOrNull($clientMediaType)) { - throw new InvalidArgumentException( - 'Upload file client media type must be a string or null' - ); - } - - $this->clientMediaType = $clientMediaType; - } - /** * Return true if there is no upload error - * - * @return boolean */ - private function isOk() + private function isOk(): bool { return $this->error === UPLOAD_ERR_OK; } - /** - * @return boolean - */ - public function isMoved() + public function isMoved(): bool { return $this->moved; } @@ -207,7 +134,7 @@ class UploadedFile implements UploadedFileInterface /** * @throws RuntimeException if is moved or not ok */ - private function validateActive() + private function validateActive(): void { if (false === $this->isOk()) { throw new RuntimeException('Cannot retrieve stream due to upload error'); @@ -218,11 +145,7 @@ class UploadedFile implements UploadedFileInterface } } - /** - * {@inheritdoc} - * @throws RuntimeException if the upload was not successful. - */ - public function getStream() + public function getStream(): StreamInterface { $this->validateActive(); @@ -230,21 +153,13 @@ class UploadedFile implements UploadedFileInterface return $this->stream; } - return new LazyOpenStream($this->file, 'r+'); + /** @var string $file */ + $file = $this->file; + + return new LazyOpenStream($file, 'r+'); } - /** - * {@inheritdoc} - * - * @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 RuntimeException if the upload was not successful. - * @throws InvalidArgumentException if the $path 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($targetPath) + public function moveTo($targetPath): void { $this->validateActive(); @@ -255,11 +170,11 @@ class UploadedFile implements UploadedFileInterface } if ($this->file) { - $this->moved = php_sapi_name() == 'cli' + $this->moved = PHP_SAPI === 'cli' ? rename($this->file, $targetPath) : move_uploaded_file($this->file, $targetPath); } else { - copy_to_stream( + Utils::copyToStream( $this->getStream(), new LazyOpenStream($targetPath, 'w') ); @@ -274,42 +189,22 @@ class UploadedFile implements UploadedFileInterface } } - /** - * {@inheritdoc} - * - * @return int|null The file size in bytes or null if unknown. - */ - public function getSize() + public function getSize(): ?int { return $this->size; } - /** - * {@inheritdoc} - * - * @see http://php.net/manual/en/features.file-upload.errors.php - * @return int One of PHP's UPLOAD_ERR_XXX constants. - */ - public function getError() + public function getError(): int { return $this->error; } - /** - * {@inheritdoc} - * - * @return string|null The filename sent by the client or null if none - * was provided. - */ - public function getClientFilename() + public function getClientFilename(): ?string { return $this->clientFilename; } - /** - * {@inheritdoc} - */ - public function getClientMediaType() + public function getClientMediaType(): ?string { return $this->clientMediaType; } diff --git a/vendor/guzzlehttp/psr7/src/Uri.php b/vendor/guzzlehttp/psr7/src/Uri.php index 36219568..3898f783 100644 --- a/vendor/guzzlehttp/psr7/src/Uri.php +++ b/vendor/guzzlehttp/psr7/src/Uri.php @@ -1,6 +1,10 @@ 80, 'https' => 443, 'ftp' => 21, @@ -34,9 +38,20 @@ class Uri implements UriInterface 'ldap' => 389, ]; - private static $charUnreserved = 'a-zA-Z0-9_\-\.~'; - private static $charSubDelims = '!\$&\'\(\)\*\+,;='; - private static $replaceQuery = ['=' => '%3D', '&' => '%26']; + /** + * Unreserved characters for use in a regex. + * + * @link https://tools.ietf.org/html/rfc3986#section-2.3 + */ + private const CHAR_UNRESERVED = 'a-zA-Z0-9_\-\.~'; + + /** + * Sub-delims for use in a regex. + * + * @link https://tools.ietf.org/html/rfc3986#section-2.2 + */ + private const CHAR_SUB_DELIMS = '!\$&\'\(\)\*\+,;='; + private const QUERY_SEPARATORS_REPLACEMENT = ['=' => '%3D', '&' => '%26']; /** @var string Uri scheme. */ private $scheme = ''; @@ -59,30 +74,75 @@ class Uri implements UriInterface /** @var string Uri fragment. */ private $fragment = ''; - /** - * @param string $uri URI to parse - */ - public function __construct($uri = '') + /** @var string|null String representation */ + private $composedComponents; + + public function __construct(string $uri = '') { - // weak type check to also accept null until we can add scalar type hints - if ($uri != '') { - $parts = parse_url($uri); + if ($uri !== '') { + $parts = self::parse($uri); if ($parts === false) { - throw new \InvalidArgumentException("Unable to parse URI: $uri"); + throw new MalformedUriException("Unable to parse URI: $uri"); } $this->applyParts($parts); } } - - public function __toString() + /** + * UTF-8 aware \parse_url() replacement. + * + * The internal function produces broken output for non ASCII domain names + * (IDN) when used with locales other than "C". + * + * On the other hand, cURL understands IDN correctly only when UTF-8 locale + * is configured ("C.UTF-8", "en_US.UTF-8", etc.). + * + * @see https://bugs.php.net/bug.php?id=52923 + * @see https://www.php.net/manual/en/function.parse-url.php#114817 + * @see https://curl.haxx.se/libcurl/c/CURLOPT_URL.html#ENCODING + * + * @return array|false + */ + private static function parse(string $url) { - return self::composeComponents( - $this->scheme, - $this->getAuthority(), - $this->path, - $this->query, - $this->fragment + // If IPv6 + $prefix = ''; + if (preg_match('%^(.*://\[[0-9:a-f]+\])(.*?)$%', $url, $matches)) { + /** @var array{0:string, 1:string, 2:string} $matches */ + $prefix = $matches[1]; + $url = $matches[2]; + } + + /** @var string */ + $encodedUrl = preg_replace_callback( + '%[^:/@?&=#]+%usD', + static function ($matches) { + return urlencode($matches[0]); + }, + $url ); + + $result = parse_url($prefix . $encodedUrl); + + if ($result === false) { + return false; + } + + return array_map('urldecode', $result); + } + + public function __toString(): string + { + if ($this->composedComponents === null) { + $this->composedComponents = self::composeComponents( + $this->scheme, + $this->getAuthority(), + $this->path, + $this->query, + $this->fragment + ); + } + + return $this->composedComponents; } /** @@ -101,17 +161,9 @@ class Uri implements UriInterface * `file:///` is the more common syntax for the file scheme anyway (Chrome for example redirects to * that format). * - * @param string $scheme - * @param string $authority - * @param string $path - * @param string $query - * @param string $fragment - * - * @return string - * * @link https://tools.ietf.org/html/rfc3986#section-5.3 */ - public static function composeComponents($scheme, $authority, $path, $query, $fragment) + public static function composeComponents(?string $scheme, ?string $authority, string $path, ?string $query, ?string $fragment): string { $uri = ''; @@ -142,15 +194,11 @@ class Uri implements UriInterface * * `Psr\Http\Message\UriInterface::getPort` may return null or the standard port. This method can be used * independently of the implementation. - * - * @param UriInterface $uri - * - * @return bool */ - public static function isDefaultPort(UriInterface $uri) + public static function isDefaultPort(UriInterface $uri): bool { return $uri->getPort() === null - || (isset(self::$defaultPorts[$uri->getScheme()]) && $uri->getPort() === self::$defaultPorts[$uri->getScheme()]); + || (isset(self::DEFAULT_PORTS[$uri->getScheme()]) && $uri->getPort() === self::DEFAULT_PORTS[$uri->getScheme()]); } /** @@ -163,15 +211,12 @@ class Uri implements UriInterface * - absolute-path references, e.g. '/path' * - relative-path references, e.g. 'subpath' * - * @param UriInterface $uri - * - * @return bool * @see Uri::isNetworkPathReference * @see Uri::isAbsolutePathReference * @see Uri::isRelativePathReference * @link https://tools.ietf.org/html/rfc3986#section-4 */ - public static function isAbsolute(UriInterface $uri) + public static function isAbsolute(UriInterface $uri): bool { return $uri->getScheme() !== ''; } @@ -181,12 +226,9 @@ class Uri implements UriInterface * * A relative reference that begins with two slash characters is termed an network-path reference. * - * @param UriInterface $uri - * - * @return bool * @link https://tools.ietf.org/html/rfc3986#section-4.2 */ - public static function isNetworkPathReference(UriInterface $uri) + public static function isNetworkPathReference(UriInterface $uri): bool { return $uri->getScheme() === '' && $uri->getAuthority() !== ''; } @@ -196,12 +238,9 @@ class Uri implements UriInterface * * A relative reference that begins with a single slash character is termed an absolute-path reference. * - * @param UriInterface $uri - * - * @return bool * @link https://tools.ietf.org/html/rfc3986#section-4.2 */ - public static function isAbsolutePathReference(UriInterface $uri) + public static function isAbsolutePathReference(UriInterface $uri): bool { return $uri->getScheme() === '' && $uri->getAuthority() === '' @@ -214,12 +253,9 @@ class Uri implements UriInterface * * A relative reference that does not begin with a slash character is termed a relative-path reference. * - * @param UriInterface $uri - * - * @return bool * @link https://tools.ietf.org/html/rfc3986#section-4.2 */ - public static function isRelativePathReference(UriInterface $uri) + public static function isRelativePathReference(UriInterface $uri): bool { return $uri->getScheme() === '' && $uri->getAuthority() === '' @@ -236,10 +272,9 @@ class Uri implements UriInterface * @param UriInterface $uri The URI to check * @param UriInterface|null $base An optional base URI to compare against * - * @return bool * @link https://tools.ietf.org/html/rfc3986#section-4.4 */ - public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null) + public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null): bool { if ($base !== null) { $uri = UriResolver::resolve($base, $uri); @@ -253,41 +288,6 @@ class Uri implements UriInterface return $uri->getScheme() === '' && $uri->getAuthority() === '' && $uri->getPath() === '' && $uri->getQuery() === ''; } - /** - * Removes dot segments from a path and returns the new path. - * - * @param string $path - * - * @return string - * - * @deprecated since version 1.4. Use UriResolver::removeDotSegments instead. - * @see UriResolver::removeDotSegments - */ - public static function removeDotSegments($path) - { - return UriResolver::removeDotSegments($path); - } - - /** - * Converts the relative URI into a new URI that is resolved against the base URI. - * - * @param UriInterface $base Base URI - * @param string|UriInterface $rel Relative URI - * - * @return UriInterface - * - * @deprecated since version 1.4. Use UriResolver::resolve instead. - * @see UriResolver::resolve - */ - public static function resolve(UriInterface $base, $rel) - { - if (!($rel instanceof UriInterface)) { - $rel = new self($rel); - } - - return UriResolver::resolve($base, $rel); - } - /** * Creates a new URI with a specific query string value removed. * @@ -296,10 +296,8 @@ class Uri implements UriInterface * * @param UriInterface $uri URI to use as a base. * @param string $key Query string key to remove. - * - * @return UriInterface */ - public static function withoutQueryValue(UriInterface $uri, $key) + public static function withoutQueryValue(UriInterface $uri, string $key): UriInterface { $result = self::getFilteredQueryString($uri, [$key]); @@ -318,10 +316,8 @@ class Uri implements UriInterface * @param UriInterface $uri URI to use as a base. * @param string $key Key to set. * @param string|null $value Value to set - * - * @return UriInterface */ - public static function withQueryValue(UriInterface $uri, $key, $value) + public static function withQueryValue(UriInterface $uri, string $key, ?string $value): UriInterface { $result = self::getFilteredQueryString($uri, [$key]); @@ -335,17 +331,15 @@ class Uri implements UriInterface * * It has the same behavior as withQueryValue() but for an associative array of key => value. * - * @param UriInterface $uri URI to use as a base. - * @param array $keyValueArray Associative array of key and values - * - * @return UriInterface + * @param UriInterface $uri URI to use as a base. + * @param array $keyValueArray Associative array of key and values */ - public static function withQueryValues(UriInterface $uri, array $keyValueArray) + public static function withQueryValues(UriInterface $uri, array $keyValueArray): UriInterface { $result = self::getFilteredQueryString($uri, array_keys($keyValueArray)); foreach ($keyValueArray as $key => $value) { - $result[] = self::generateQueryString($key, $value); + $result[] = self::generateQueryString((string) $key, $value !== null ? (string) $value : null); } return $uri->withQuery(implode('&', $result)); @@ -354,14 +348,11 @@ class Uri implements UriInterface /** * Creates a URI from a hash of `parse_url` components. * - * @param array $parts - * - * @return UriInterface * @link http://php.net/manual/en/function.parse-url.php * - * @throws \InvalidArgumentException If the components do not form a valid URI. + * @throws MalformedUriException If the components do not form a valid URI. */ - public static function fromParts(array $parts) + public static function fromParts(array $parts): UriInterface { $uri = new self(); $uri->applyParts($parts); @@ -370,12 +361,12 @@ class Uri implements UriInterface return $uri; } - public function getScheme() + public function getScheme(): string { return $this->scheme; } - public function getAuthority() + public function getAuthority(): string { $authority = $this->host; if ($this->userInfo !== '') { @@ -389,37 +380,37 @@ class Uri implements UriInterface return $authority; } - public function getUserInfo() + public function getUserInfo(): string { return $this->userInfo; } - public function getHost() + public function getHost(): string { return $this->host; } - public function getPort() + public function getPort(): ?int { return $this->port; } - public function getPath() + public function getPath(): string { return $this->path; } - public function getQuery() + public function getQuery(): string { return $this->query; } - public function getFragment() + public function getFragment(): string { return $this->fragment; } - public function withScheme($scheme) + public function withScheme($scheme): UriInterface { $scheme = $this->filterScheme($scheme); @@ -429,17 +420,18 @@ class Uri implements UriInterface $new = clone $this; $new->scheme = $scheme; + $new->composedComponents = null; $new->removeDefaultPort(); $new->validateState(); return $new; } - public function withUserInfo($user, $password = null) + public function withUserInfo($user, $password = null): UriInterface { - $info = $user; - if ($password != '') { - $info .= ':' . $password; + $info = $this->filterUserInfoComponent($user); + if ($password !== null) { + $info .= ':' . $this->filterUserInfoComponent($password); } if ($this->userInfo === $info) { @@ -448,12 +440,13 @@ class Uri implements UriInterface $new = clone $this; $new->userInfo = $info; + $new->composedComponents = null; $new->validateState(); return $new; } - public function withHost($host) + public function withHost($host): UriInterface { $host = $this->filterHost($host); @@ -463,12 +456,13 @@ class Uri implements UriInterface $new = clone $this; $new->host = $host; + $new->composedComponents = null; $new->validateState(); return $new; } - public function withPort($port) + public function withPort($port): UriInterface { $port = $this->filterPort($port); @@ -478,13 +472,14 @@ class Uri implements UriInterface $new = clone $this; $new->port = $port; + $new->composedComponents = null; $new->removeDefaultPort(); $new->validateState(); return $new; } - public function withPath($path) + public function withPath($path): UriInterface { $path = $this->filterPath($path); @@ -494,12 +489,13 @@ class Uri implements UriInterface $new = clone $this; $new->path = $path; + $new->composedComponents = null; $new->validateState(); return $new; } - public function withQuery($query) + public function withQuery($query): UriInterface { $query = $this->filterQueryAndFragment($query); @@ -509,11 +505,12 @@ class Uri implements UriInterface $new = clone $this; $new->query = $query; + $new->composedComponents = null; return $new; } - public function withFragment($fragment) + public function withFragment($fragment): UriInterface { $fragment = $this->filterQueryAndFragment($fragment); @@ -523,6 +520,7 @@ class Uri implements UriInterface $new = clone $this; $new->fragment = $fragment; + $new->composedComponents = null; return $new; } @@ -532,12 +530,14 @@ class Uri implements UriInterface * * @param array $parts Array of parse_url parts to apply. */ - private function applyParts(array $parts) + private function applyParts(array $parts): void { $this->scheme = isset($parts['scheme']) ? $this->filterScheme($parts['scheme']) : ''; - $this->userInfo = isset($parts['user']) ? $parts['user'] : ''; + $this->userInfo = isset($parts['user']) + ? $this->filterUserInfoComponent($parts['user']) + : ''; $this->host = isset($parts['host']) ? $this->filterHost($parts['host']) : ''; @@ -554,61 +554,73 @@ class Uri implements UriInterface ? $this->filterQueryAndFragment($parts['fragment']) : ''; if (isset($parts['pass'])) { - $this->userInfo .= ':' . $parts['pass']; + $this->userInfo .= ':' . $this->filterUserInfoComponent($parts['pass']); } $this->removeDefaultPort(); } /** - * @param string $scheme - * - * @return string + * @param mixed $scheme * * @throws \InvalidArgumentException If the scheme is invalid. */ - private function filterScheme($scheme) + private function filterScheme($scheme): string { if (!is_string($scheme)) { throw new \InvalidArgumentException('Scheme must be a string'); } - return strtolower($scheme); + return \strtr($scheme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); } /** - * @param string $host + * @param mixed $component * - * @return string + * @throws \InvalidArgumentException If the user info is invalid. + */ + private function filterUserInfoComponent($component): string + { + if (!is_string($component)) { + throw new \InvalidArgumentException('User info must be a string'); + } + + return preg_replace_callback( + '/(?:[^%' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . ']+|%(?![A-Fa-f0-9]{2}))/', + [$this, 'rawurlencodeMatchZero'], + $component + ); + } + + /** + * @param mixed $host * * @throws \InvalidArgumentException If the host is invalid. */ - private function filterHost($host) + private function filterHost($host): string { if (!is_string($host)) { throw new \InvalidArgumentException('Host must be a string'); } - return strtolower($host); + return \strtr($host, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); } /** - * @param int|null $port - * - * @return int|null + * @param mixed $port * * @throws \InvalidArgumentException If the port is invalid. */ - private function filterPort($port) + private function filterPort($port): ?int { if ($port === null) { return null; } $port = (int) $port; - if (1 > $port || 0xffff < $port) { + if (0 > $port || 0xffff < $port) { throw new \InvalidArgumentException( - sprintf('Invalid port: %d. Must be between 1 and 65535', $port) + sprintf('Invalid port: %d. Must be between 0 and 65535', $port) ); } @@ -616,12 +628,11 @@ class Uri implements UriInterface } /** - * @param UriInterface $uri - * @param array $keys - * - * @return array + * @param string[] $keys + * + * @return string[] */ - private static function getFilteredQueryString(UriInterface $uri, array $keys) + private static function getFilteredQueryString(UriInterface $uri, array $keys): array { $current = $uri->getQuery(); @@ -636,27 +647,21 @@ class Uri implements UriInterface }); } - /** - * @param string $key - * @param string|null $value - * - * @return string - */ - private static function generateQueryString($key, $value) + private static function generateQueryString(string $key, ?string $value): string { // Query string separators ("=", "&") within the key or value need to be encoded // (while preventing double-encoding) before setting the query string. All other // chars that need percent-encoding will be encoded by withQuery(). - $queryString = strtr($key, self::$replaceQuery); + $queryString = strtr($key, self::QUERY_SEPARATORS_REPLACEMENT); if ($value !== null) { - $queryString .= '=' . strtr($value, self::$replaceQuery); + $queryString .= '=' . strtr($value, self::QUERY_SEPARATORS_REPLACEMENT); } return $queryString; } - private function removeDefaultPort() + private function removeDefaultPort(): void { if ($this->port !== null && self::isDefaultPort($this)) { $this->port = null; @@ -666,20 +671,18 @@ class Uri implements UriInterface /** * Filters the path of a URI * - * @param string $path - * - * @return string + * @param mixed $path * * @throws \InvalidArgumentException If the path is invalid. */ - private function filterPath($path) + private function filterPath($path): string { if (!is_string($path)) { throw new \InvalidArgumentException('Path must be a string'); } return preg_replace_callback( - '/(?:[^' . self::$charUnreserved . self::$charSubDelims . '%:@\/]++|%(?![A-Fa-f0-9]{2}))/', + '/(?:[^' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . '%:@\/]++|%(?![A-Fa-f0-9]{2}))/', [$this, 'rawurlencodeMatchZero'], $path ); @@ -688,31 +691,29 @@ class Uri implements UriInterface /** * Filters the query string or fragment of a URI. * - * @param string $str - * - * @return string + * @param mixed $str * * @throws \InvalidArgumentException If the query or fragment is invalid. */ - private function filterQueryAndFragment($str) + private function filterQueryAndFragment($str): string { if (!is_string($str)) { throw new \InvalidArgumentException('Query and fragment must be a string'); } return preg_replace_callback( - '/(?:[^' . self::$charUnreserved . self::$charSubDelims . '%:@\/\?]++|%(?![A-Fa-f0-9]{2}))/', + '/(?:[^' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . '%:@\/\?]++|%(?![A-Fa-f0-9]{2}))/', [$this, 'rawurlencodeMatchZero'], $str ); } - private function rawurlencodeMatchZero(array $match) + private function rawurlencodeMatchZero(array $match): string { return rawurlencode($match[0]); } - private function validateState() + private function validateState(): void { if ($this->host === '' && ($this->scheme === 'http' || $this->scheme === 'https')) { $this->host = self::HTTP_DEFAULT_HOST; @@ -720,19 +721,13 @@ class Uri implements UriInterface if ($this->getAuthority() === '') { if (0 === strpos($this->path, '//')) { - throw new \InvalidArgumentException('The path of a URI without an authority must not start with two slashes "//"'); + throw new MalformedUriException('The path of a URI without an authority must not start with two slashes "//"'); } if ($this->scheme === '' && false !== strpos(explode('/', $this->path, 2)[0], ':')) { - throw new \InvalidArgumentException('A relative URI must not have a path beginning with a segment containing a colon'); + throw new MalformedUriException('A relative URI must not have a path beginning with a segment containing a colon'); } } elseif (isset($this->path[0]) && $this->path[0] !== '/') { - @trigger_error( - 'The path of a URI with an authority must start with a slash "/" or be empty. Automagically fixing the URI ' . - 'by adding a leading slash to the path is deprecated since version 1.4 and will throw an exception instead.', - E_USER_DEPRECATED - ); - $this->path = '/'. $this->path; - //throw new \InvalidArgumentException('The path of a URI with an authority must start with a slash "/" or be empty'); + throw new MalformedUriException('The path of a URI with an authority must start with a slash "/" or be empty'); } } } diff --git a/vendor/guzzlehttp/psr7/src/UriNormalizer.php b/vendor/guzzlehttp/psr7/src/UriNormalizer.php index 384c29e5..e12971ed 100644 --- a/vendor/guzzlehttp/psr7/src/UriNormalizer.php +++ b/vendor/guzzlehttp/psr7/src/UriNormalizer.php @@ -1,4 +1,7 @@ getScheme() !== '' && ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '') @@ -171,6 +162,7 @@ final class UriResolver // inherit the base query component when resolving. if ($target->getQuery() === '') { $segments = explode('/', $target->getPath()); + /** @var string $lastSegment */ $lastSegment = end($segments); return $emptyPathUri->withPath($lastSegment === '' ? './' : $lastSegment); @@ -179,7 +171,7 @@ final class UriResolver return $emptyPathUri; } - private static function getRelativePath(UriInterface $base, UriInterface $target) + private static function getRelativePath(UriInterface $base, UriInterface $target): string { $sourceSegments = explode('/', $base->getPath()); $targetSegments = explode('/', $target->getPath()); diff --git a/vendor/guzzlehttp/psr7/src/Utils.php b/vendor/guzzlehttp/psr7/src/Utils.php new file mode 100644 index 00000000..6cc04ee4 --- /dev/null +++ b/vendor/guzzlehttp/psr7/src/Utils.php @@ -0,0 +1,412 @@ + $v) { + if (!is_string($k) || !in_array(strtolower($k), $keys)) { + $result[$k] = $v; + } + } + + return $result; + } + + /** + * Copy the contents of a stream into another stream until the given number + * of bytes have been read. + * + * @param StreamInterface $source Stream to read from + * @param StreamInterface $dest Stream to write to + * @param int $maxLen Maximum number of bytes to read. Pass -1 + * to read the entire stream. + * + * @throws \RuntimeException on error. + */ + public static function copyToStream(StreamInterface $source, StreamInterface $dest, int $maxLen = -1): void + { + $bufferSize = 8192; + + if ($maxLen === -1) { + while (!$source->eof()) { + if (!$dest->write($source->read($bufferSize))) { + break; + } + } + } else { + $remaining = $maxLen; + while ($remaining > 0 && !$source->eof()) { + $buf = $source->read(min($bufferSize, $remaining)); + $len = strlen($buf); + if (!$len) { + break; + } + $remaining -= $len; + $dest->write($buf); + } + } + } + + /** + * Copy the contents of a stream into a string until the given number of + * bytes have been read. + * + * @param StreamInterface $stream Stream to read + * @param int $maxLen Maximum number of bytes to read. Pass -1 + * to read the entire stream. + * + * @throws \RuntimeException on error. + */ + public static function copyToString(StreamInterface $stream, int $maxLen = -1): string + { + $buffer = ''; + + if ($maxLen === -1) { + while (!$stream->eof()) { + $buf = $stream->read(1048576); + if ($buf === '') { + break; + } + $buffer .= $buf; + } + return $buffer; + } + + $len = 0; + while (!$stream->eof() && $len < $maxLen) { + $buf = $stream->read($maxLen - $len); + if ($buf === '') { + break; + } + $buffer .= $buf; + $len = strlen($buffer); + } + + return $buffer; + } + + /** + * Calculate a hash of a stream. + * + * This method reads the entire stream to calculate a rolling hash, based + * on PHP's `hash_init` functions. + * + * @param StreamInterface $stream Stream to calculate the hash for + * @param string $algo Hash algorithm (e.g. md5, crc32, etc) + * @param bool $rawOutput Whether or not to use raw output + * + * @throws \RuntimeException on error. + */ + public static function hash(StreamInterface $stream, string $algo, bool $rawOutput = false): string + { + $pos = $stream->tell(); + + if ($pos > 0) { + $stream->rewind(); + } + + $ctx = hash_init($algo); + while (!$stream->eof()) { + hash_update($ctx, $stream->read(1048576)); + } + + $out = hash_final($ctx, (bool) $rawOutput); + $stream->seek($pos); + + return $out; + } + + /** + * Clone and modify a request with the given changes. + * + * This method is useful for reducing the number of clones needed to mutate + * a message. + * + * The changes can be one of: + * - method: (string) Changes the HTTP method. + * - set_headers: (array) Sets the given headers. + * - remove_headers: (array) Remove the given headers. + * - body: (mixed) Sets the given body. + * - uri: (UriInterface) Set the URI. + * - query: (string) Set the query string value of the URI. + * - version: (string) Set the protocol version. + * + * @param RequestInterface $request Request to clone and modify. + * @param array $changes Changes to apply. + */ + public static function modifyRequest(RequestInterface $request, array $changes): RequestInterface + { + if (!$changes) { + return $request; + } + + $headers = $request->getHeaders(); + + if (!isset($changes['uri'])) { + $uri = $request->getUri(); + } else { + // Remove the host header if one is on the URI + if ($host = $changes['uri']->getHost()) { + $changes['set_headers']['Host'] = $host; + + if ($port = $changes['uri']->getPort()) { + $standardPorts = ['http' => 80, 'https' => 443]; + $scheme = $changes['uri']->getScheme(); + if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) { + $changes['set_headers']['Host'] .= ':' . $port; + } + } + } + $uri = $changes['uri']; + } + + if (!empty($changes['remove_headers'])) { + $headers = self::caselessRemove($changes['remove_headers'], $headers); + } + + if (!empty($changes['set_headers'])) { + $headers = self::caselessRemove(array_keys($changes['set_headers']), $headers); + $headers = $changes['set_headers'] + $headers; + } + + if (isset($changes['query'])) { + $uri = $uri->withQuery($changes['query']); + } + + if ($request instanceof ServerRequestInterface) { + $new = (new ServerRequest( + $changes['method'] ?? $request->getMethod(), + $uri, + $headers, + $changes['body'] ?? $request->getBody(), + $changes['version'] ?? $request->getProtocolVersion(), + $request->getServerParams() + )) + ->withParsedBody($request->getParsedBody()) + ->withQueryParams($request->getQueryParams()) + ->withCookieParams($request->getCookieParams()) + ->withUploadedFiles($request->getUploadedFiles()); + + foreach ($request->getAttributes() as $key => $value) { + $new = $new->withAttribute($key, $value); + } + + return $new; + } + + return new Request( + $changes['method'] ?? $request->getMethod(), + $uri, + $headers, + $changes['body'] ?? $request->getBody(), + $changes['version'] ?? $request->getProtocolVersion() + ); + } + + /** + * Read a line from the stream up to the maximum allowed buffer length. + * + * @param StreamInterface $stream Stream to read from + * @param int|null $maxLength Maximum buffer length + */ + public static function readLine(StreamInterface $stream, ?int $maxLength = null): string + { + $buffer = ''; + $size = 0; + + while (!$stream->eof()) { + if ('' === ($byte = $stream->read(1))) { + return $buffer; + } + $buffer .= $byte; + // Break when a new line is found or the max length - 1 is reached + if ($byte === "\n" || ++$size === $maxLength - 1) { + break; + } + } + + return $buffer; + } + + /** + * Create a new stream based on the input type. + * + * Options is an associative array that can contain the following keys: + * - metadata: Array of custom metadata. + * - size: Size of the stream. + * + * This method accepts the following `$resource` types: + * - `Psr\Http\Message\StreamInterface`: Returns the value as-is. + * - `string`: Creates a stream object that uses the given string as the contents. + * - `resource`: Creates a stream object that wraps the given PHP stream resource. + * - `Iterator`: If the provided value implements `Iterator`, then a read-only + * stream object will be created that wraps the given iterable. Each time the + * stream is read from, data from the iterator will fill a buffer and will be + * continuously called until the buffer is equal to the requested read size. + * Subsequent read calls will first read from the buffer and then call `next` + * on the underlying iterator until it is exhausted. + * - `object` with `__toString()`: If the object has the `__toString()` method, + * the object will be cast to a string and then a stream will be returned that + * uses the string value. + * - `NULL`: When `null` is passed, an empty stream object is returned. + * - `callable` When a callable is passed, a read-only stream object will be + * created that invokes the given callable. The callable is invoked with the + * number of suggested bytes to read. The callable can return any number of + * bytes, but MUST return `false` when there is no more data to return. The + * stream object that wraps the callable will invoke the callable until the + * number of requested bytes are available. Any additional bytes will be + * buffered and used in subsequent reads. + * + * @param resource|string|int|float|bool|StreamInterface|callable|\Iterator|null $resource Entity body data + * @param array{size?: int, metadata?: array} $options Additional options + * + * @throws \InvalidArgumentException if the $resource arg is not valid. + */ + public static function streamFor($resource = '', array $options = []): StreamInterface + { + if (is_scalar($resource)) { + $stream = self::tryFopen('php://temp', 'r+'); + if ($resource !== '') { + fwrite($stream, (string) $resource); + fseek($stream, 0); + } + return new Stream($stream, $options); + } + + switch (gettype($resource)) { + case 'resource': + /* + * The 'php://input' is a special stream with quirks and inconsistencies. + * We avoid using that stream by reading it into php://temp + */ + + /** @var resource $resource */ + if ((\stream_get_meta_data($resource)['uri'] ?? '') === 'php://input') { + $stream = self::tryFopen('php://temp', 'w+'); + fwrite($stream, stream_get_contents($resource)); + fseek($stream, 0); + $resource = $stream; + } + return new Stream($resource, $options); + case 'object': + /** @var object $resource */ + if ($resource instanceof StreamInterface) { + return $resource; + } elseif ($resource instanceof \Iterator) { + return new PumpStream(function () use ($resource) { + if (!$resource->valid()) { + return false; + } + $result = $resource->current(); + $resource->next(); + return $result; + }, $options); + } elseif (method_exists($resource, '__toString')) { + return self::streamFor((string) $resource, $options); + } + break; + case 'NULL': + return new Stream(self::tryFopen('php://temp', 'r+'), $options); + } + + if (is_callable($resource)) { + return new PumpStream($resource, $options); + } + + throw new \InvalidArgumentException('Invalid resource type: ' . gettype($resource)); + } + + /** + * Safely opens a PHP stream resource using a filename. + * + * When fopen fails, PHP normally raises a warning. This function adds an + * error handler that checks for errors and throws an exception instead. + * + * @param string $filename File to open + * @param string $mode Mode used to open the file + * + * @return resource + * + * @throws \RuntimeException if the file cannot be opened + */ + public static function tryFopen(string $filename, string $mode) + { + $ex = null; + set_error_handler(static function (int $errno, string $errstr) use ($filename, $mode, &$ex): bool { + $ex = new \RuntimeException(sprintf( + 'Unable to open "%s" using mode "%s": %s', + $filename, + $mode, + $errstr + )); + + return true; + }); + + try { + /** @var resource $handle */ + $handle = fopen($filename, $mode); + } catch (\Throwable $e) { + $ex = new \RuntimeException(sprintf( + 'Unable to open "%s" using mode "%s": %s', + $filename, + $mode, + $e->getMessage() + ), 0, $e); + } + + restore_error_handler(); + + if ($ex) { + /** @var $ex \RuntimeException */ + throw $ex; + } + + return $handle; + } + + /** + * Returns a UriInterface for the given value. + * + * This function accepts a string or UriInterface and returns a + * UriInterface for the given value. If the value is already a + * UriInterface, it is returned as-is. + * + * @param string|UriInterface $uri + * + * @throws \InvalidArgumentException + */ + public static function uriFor($uri): UriInterface + { + if ($uri instanceof UriInterface) { + return $uri; + } + + if (is_string($uri)) { + return new Uri($uri); + } + + throw new \InvalidArgumentException('URI must be a string or UriInterface'); + } +} diff --git a/vendor/guzzlehttp/psr7/src/functions.php b/vendor/guzzlehttp/psr7/src/functions.php deleted file mode 100644 index 957bfb42..00000000 --- a/vendor/guzzlehttp/psr7/src/functions.php +++ /dev/null @@ -1,898 +0,0 @@ -getMethod() . ' ' - . $message->getRequestTarget()) - . ' HTTP/' . $message->getProtocolVersion(); - if (!$message->hasHeader('host')) { - $msg .= "\r\nHost: " . $message->getUri()->getHost(); - } - } elseif ($message instanceof ResponseInterface) { - $msg = 'HTTP/' . $message->getProtocolVersion() . ' ' - . $message->getStatusCode() . ' ' - . $message->getReasonPhrase(); - } else { - throw new \InvalidArgumentException('Unknown message type'); - } - - foreach ($message->getHeaders() as $name => $values) { - $msg .= "\r\n{$name}: " . implode(', ', $values); - } - - return "{$msg}\r\n\r\n" . $message->getBody(); -} - -/** - * Returns a UriInterface for the given value. - * - * This function accepts a string or {@see Psr\Http\Message\UriInterface} and - * returns a UriInterface for the given value. If the value is already a - * `UriInterface`, it is returned as-is. - * - * @param string|UriInterface $uri - * - * @return UriInterface - * @throws \InvalidArgumentException - */ -function uri_for($uri) -{ - if ($uri instanceof UriInterface) { - return $uri; - } elseif (is_string($uri)) { - return new Uri($uri); - } - - throw new \InvalidArgumentException('URI must be a string or UriInterface'); -} - -/** - * Create a new stream based on the input type. - * - * Options is an associative array that can contain the following keys: - * - metadata: Array of custom metadata. - * - size: Size of the stream. - * - * @param resource|string|null|int|float|bool|StreamInterface|callable|\Iterator $resource Entity body data - * @param array $options Additional options - * - * @return StreamInterface - * @throws \InvalidArgumentException if the $resource arg is not valid. - */ -function stream_for($resource = '', array $options = []) -{ - if (is_scalar($resource)) { - $stream = fopen('php://temp', 'r+'); - if ($resource !== '') { - fwrite($stream, $resource); - fseek($stream, 0); - } - return new Stream($stream, $options); - } - - switch (gettype($resource)) { - case 'resource': - return new Stream($resource, $options); - case 'object': - if ($resource instanceof StreamInterface) { - return $resource; - } elseif ($resource instanceof \Iterator) { - return new PumpStream(function () use ($resource) { - if (!$resource->valid()) { - return false; - } - $result = $resource->current(); - $resource->next(); - return $result; - }, $options); - } elseif (method_exists($resource, '__toString')) { - return stream_for((string) $resource, $options); - } - break; - case 'NULL': - return new Stream(fopen('php://temp', 'r+'), $options); - } - - if (is_callable($resource)) { - return new PumpStream($resource, $options); - } - - throw new \InvalidArgumentException('Invalid resource type: ' . gettype($resource)); -} - -/** - * Parse an array of header values containing ";" separated data into an - * array of associative arrays representing the header key value pair - * data of the header. When a parameter does not contain a value, but just - * contains a key, this function will inject a key with a '' string value. - * - * @param string|array $header Header to parse into components. - * - * @return array Returns the parsed header values. - */ -function parse_header($header) -{ - static $trimmed = "\"' \n\t\r"; - $params = $matches = []; - - foreach (normalize_header($header) as $val) { - $part = []; - foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) { - if (preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) { - $m = $matches[0]; - if (isset($m[1])) { - $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed); - } else { - $part[] = trim($m[0], $trimmed); - } - } - } - if ($part) { - $params[] = $part; - } - } - - return $params; -} - -/** - * Converts an array of header values that may contain comma separated - * headers into an array of headers with no comma separated values. - * - * @param string|array $header Header to normalize. - * - * @return array Returns the normalized header field values. - */ -function normalize_header($header) -{ - if (!is_array($header)) { - return array_map('trim', explode(',', $header)); - } - - $result = []; - foreach ($header as $value) { - foreach ((array) $value as $v) { - if (strpos($v, ',') === false) { - $result[] = $v; - continue; - } - foreach (preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $v) as $vv) { - $result[] = trim($vv); - } - } - } - - return $result; -} - -/** - * Clone and modify a request with the given changes. - * - * The changes can be one of: - * - method: (string) Changes the HTTP method. - * - set_headers: (array) Sets the given headers. - * - remove_headers: (array) Remove the given headers. - * - body: (mixed) Sets the given body. - * - uri: (UriInterface) Set the URI. - * - query: (string) Set the query string value of the URI. - * - version: (string) Set the protocol version. - * - * @param RequestInterface $request Request to clone and modify. - * @param array $changes Changes to apply. - * - * @return RequestInterface - */ -function modify_request(RequestInterface $request, array $changes) -{ - if (!$changes) { - return $request; - } - - $headers = $request->getHeaders(); - - if (!isset($changes['uri'])) { - $uri = $request->getUri(); - } else { - // Remove the host header if one is on the URI - if ($host = $changes['uri']->getHost()) { - $changes['set_headers']['Host'] = $host; - - if ($port = $changes['uri']->getPort()) { - $standardPorts = ['http' => 80, 'https' => 443]; - $scheme = $changes['uri']->getScheme(); - if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) { - $changes['set_headers']['Host'] .= ':'.$port; - } - } - } - $uri = $changes['uri']; - } - - if (!empty($changes['remove_headers'])) { - $headers = _caseless_remove($changes['remove_headers'], $headers); - } - - if (!empty($changes['set_headers'])) { - $headers = _caseless_remove(array_keys($changes['set_headers']), $headers); - $headers = $changes['set_headers'] + $headers; - } - - if (isset($changes['query'])) { - $uri = $uri->withQuery($changes['query']); - } - - if ($request instanceof ServerRequestInterface) { - return (new ServerRequest( - isset($changes['method']) ? $changes['method'] : $request->getMethod(), - $uri, - $headers, - isset($changes['body']) ? $changes['body'] : $request->getBody(), - isset($changes['version']) - ? $changes['version'] - : $request->getProtocolVersion(), - $request->getServerParams() - )) - ->withParsedBody($request->getParsedBody()) - ->withQueryParams($request->getQueryParams()) - ->withCookieParams($request->getCookieParams()) - ->withUploadedFiles($request->getUploadedFiles()); - } - - return new Request( - isset($changes['method']) ? $changes['method'] : $request->getMethod(), - $uri, - $headers, - isset($changes['body']) ? $changes['body'] : $request->getBody(), - isset($changes['version']) - ? $changes['version'] - : $request->getProtocolVersion() - ); -} - -/** - * Attempts to rewind a message body and throws an exception on failure. - * - * The body of the message will only be rewound if a call to `tell()` returns a - * value other than `0`. - * - * @param MessageInterface $message Message to rewind - * - * @throws \RuntimeException - */ -function rewind_body(MessageInterface $message) -{ - $body = $message->getBody(); - - if ($body->tell()) { - $body->rewind(); - } -} - -/** - * Safely opens a PHP stream resource using a filename. - * - * When fopen fails, PHP normally raises a warning. This function adds an - * error handler that checks for errors and throws an exception instead. - * - * @param string $filename File to open - * @param string $mode Mode used to open the file - * - * @return resource - * @throws \RuntimeException if the file cannot be opened - */ -function try_fopen($filename, $mode) -{ - $ex = null; - set_error_handler(function () use ($filename, $mode, &$ex) { - $ex = new \RuntimeException(sprintf( - 'Unable to open %s using mode %s: %s', - $filename, - $mode, - func_get_args()[1] - )); - }); - - $handle = fopen($filename, $mode); - restore_error_handler(); - - if ($ex) { - /** @var $ex \RuntimeException */ - throw $ex; - } - - return $handle; -} - -/** - * Copy the contents of a stream into a string until the given number of - * bytes have been read. - * - * @param StreamInterface $stream Stream to read - * @param int $maxLen Maximum number of bytes to read. Pass -1 - * to read the entire stream. - * @return string - * @throws \RuntimeException on error. - */ -function copy_to_string(StreamInterface $stream, $maxLen = -1) -{ - $buffer = ''; - - if ($maxLen === -1) { - while (!$stream->eof()) { - $buf = $stream->read(1048576); - // Using a loose equality here to match on '' and false. - if ($buf == null) { - break; - } - $buffer .= $buf; - } - return $buffer; - } - - $len = 0; - while (!$stream->eof() && $len < $maxLen) { - $buf = $stream->read($maxLen - $len); - // Using a loose equality here to match on '' and false. - if ($buf == null) { - break; - } - $buffer .= $buf; - $len = strlen($buffer); - } - - return $buffer; -} - -/** - * Copy the contents of a stream into another stream until the given number - * of bytes have been read. - * - * @param StreamInterface $source Stream to read from - * @param StreamInterface $dest Stream to write to - * @param int $maxLen Maximum number of bytes to read. Pass -1 - * to read the entire stream. - * - * @throws \RuntimeException on error. - */ -function copy_to_stream( - StreamInterface $source, - StreamInterface $dest, - $maxLen = -1 -) { - $bufferSize = 8192; - - if ($maxLen === -1) { - while (!$source->eof()) { - if (!$dest->write($source->read($bufferSize))) { - break; - } - } - } else { - $remaining = $maxLen; - while ($remaining > 0 && !$source->eof()) { - $buf = $source->read(min($bufferSize, $remaining)); - $len = strlen($buf); - if (!$len) { - break; - } - $remaining -= $len; - $dest->write($buf); - } - } -} - -/** - * Calculate a hash of a Stream - * - * @param StreamInterface $stream Stream to calculate the hash for - * @param string $algo Hash algorithm (e.g. md5, crc32, etc) - * @param bool $rawOutput Whether or not to use raw output - * - * @return string Returns the hash of the stream - * @throws \RuntimeException on error. - */ -function hash( - StreamInterface $stream, - $algo, - $rawOutput = false -) { - $pos = $stream->tell(); - - if ($pos > 0) { - $stream->rewind(); - } - - $ctx = hash_init($algo); - while (!$stream->eof()) { - hash_update($ctx, $stream->read(1048576)); - } - - $out = hash_final($ctx, (bool) $rawOutput); - $stream->seek($pos); - - return $out; -} - -/** - * Read a line from the stream up to the maximum allowed buffer length - * - * @param StreamInterface $stream Stream to read from - * @param int $maxLength Maximum buffer length - * - * @return string - */ -function readline(StreamInterface $stream, $maxLength = null) -{ - $buffer = ''; - $size = 0; - - while (!$stream->eof()) { - // Using a loose equality here to match on '' and false. - if (null == ($byte = $stream->read(1))) { - return $buffer; - } - $buffer .= $byte; - // Break when a new line is found or the max length - 1 is reached - if ($byte === "\n" || ++$size === $maxLength - 1) { - break; - } - } - - return $buffer; -} - -/** - * Parses a request message string into a request object. - * - * @param string $message Request message string. - * - * @return Request - */ -function parse_request($message) -{ - $data = _parse_message($message); - $matches = []; - if (!preg_match('/^[\S]+\s+([a-zA-Z]+:\/\/|\/).*/', $data['start-line'], $matches)) { - throw new \InvalidArgumentException('Invalid request string'); - } - $parts = explode(' ', $data['start-line'], 3); - $version = isset($parts[2]) ? explode('/', $parts[2])[1] : '1.1'; - - $request = new Request( - $parts[0], - $matches[1] === '/' ? _parse_request_uri($parts[1], $data['headers']) : $parts[1], - $data['headers'], - $data['body'], - $version - ); - - return $matches[1] === '/' ? $request : $request->withRequestTarget($parts[1]); -} - -/** - * Parses a response message string into a response object. - * - * @param string $message Response message string. - * - * @return Response - */ -function parse_response($message) -{ - $data = _parse_message($message); - // According to https://tools.ietf.org/html/rfc7230#section-3.1.2 the space - // between status-code and reason-phrase is required. But browsers accept - // responses without space and reason as well. - if (!preg_match('/^HTTP\/.* [0-9]{3}( .*|$)/', $data['start-line'])) { - throw new \InvalidArgumentException('Invalid response string: ' . $data['start-line']); - } - $parts = explode(' ', $data['start-line'], 3); - - return new Response( - $parts[1], - $data['headers'], - $data['body'], - explode('/', $parts[0])[1], - isset($parts[2]) ? $parts[2] : null - ); -} - -/** - * Parse a query string into an associative array. - * - * If multiple values are found for the same key, the value of that key - * value pair will become an array. This function does not parse nested - * PHP style arrays into an associative array (e.g., foo[a]=1&foo[b]=2 will - * be parsed into ['foo[a]' => '1', 'foo[b]' => '2']). - * - * @param string $str Query string to parse - * @param int|bool $urlEncoding How the query string is encoded - * - * @return array - */ -function parse_query($str, $urlEncoding = true) -{ - $result = []; - - if ($str === '') { - return $result; - } - - if ($urlEncoding === true) { - $decoder = function ($value) { - return rawurldecode(str_replace('+', ' ', $value)); - }; - } elseif ($urlEncoding === PHP_QUERY_RFC3986) { - $decoder = 'rawurldecode'; - } elseif ($urlEncoding === PHP_QUERY_RFC1738) { - $decoder = 'urldecode'; - } else { - $decoder = function ($str) { return $str; }; - } - - foreach (explode('&', $str) as $kvp) { - $parts = explode('=', $kvp, 2); - $key = $decoder($parts[0]); - $value = isset($parts[1]) ? $decoder($parts[1]) : null; - if (!isset($result[$key])) { - $result[$key] = $value; - } else { - if (!is_array($result[$key])) { - $result[$key] = [$result[$key]]; - } - $result[$key][] = $value; - } - } - - return $result; -} - -/** - * Build a query string from an array of key value pairs. - * - * This function can use the return value of parse_query() to build a query - * string. This function does not modify the provided keys when an array is - * encountered (like http_build_query would). - * - * @param array $params Query string parameters. - * @param int|false $encoding Set to false to not encode, PHP_QUERY_RFC3986 - * to encode using RFC3986, or PHP_QUERY_RFC1738 - * to encode using RFC1738. - * @return string - */ -function build_query(array $params, $encoding = PHP_QUERY_RFC3986) -{ - if (!$params) { - return ''; - } - - if ($encoding === false) { - $encoder = function ($str) { return $str; }; - } elseif ($encoding === PHP_QUERY_RFC3986) { - $encoder = 'rawurlencode'; - } elseif ($encoding === PHP_QUERY_RFC1738) { - $encoder = 'urlencode'; - } else { - throw new \InvalidArgumentException('Invalid type'); - } - - $qs = ''; - foreach ($params as $k => $v) { - $k = $encoder($k); - if (!is_array($v)) { - $qs .= $k; - if ($v !== null) { - $qs .= '=' . $encoder($v); - } - $qs .= '&'; - } else { - foreach ($v as $vv) { - $qs .= $k; - if ($vv !== null) { - $qs .= '=' . $encoder($vv); - } - $qs .= '&'; - } - } - } - - return $qs ? (string) substr($qs, 0, -1) : ''; -} - -/** - * Determines the mimetype of a file by looking at its extension. - * - * @param $filename - * - * @return null|string - */ -function mimetype_from_filename($filename) -{ - return mimetype_from_extension(pathinfo($filename, PATHINFO_EXTENSION)); -} - -/** - * Maps a file extensions to a mimetype. - * - * @param $extension string The file extension. - * - * @return string|null - * @link http://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types - */ -function mimetype_from_extension($extension) -{ - static $mimetypes = [ - '3gp' => 'video/3gpp', - '7z' => 'application/x-7z-compressed', - 'aac' => 'audio/x-aac', - 'ai' => 'application/postscript', - 'aif' => 'audio/x-aiff', - 'asc' => 'text/plain', - 'asf' => 'video/x-ms-asf', - 'atom' => 'application/atom+xml', - 'avi' => 'video/x-msvideo', - 'bmp' => 'image/bmp', - 'bz2' => 'application/x-bzip2', - 'cer' => 'application/pkix-cert', - 'crl' => 'application/pkix-crl', - 'crt' => 'application/x-x509-ca-cert', - 'css' => 'text/css', - 'csv' => 'text/csv', - 'cu' => 'application/cu-seeme', - 'deb' => 'application/x-debian-package', - 'doc' => 'application/msword', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'dvi' => 'application/x-dvi', - 'eot' => 'application/vnd.ms-fontobject', - 'eps' => 'application/postscript', - 'epub' => 'application/epub+zip', - 'etx' => 'text/x-setext', - 'flac' => 'audio/flac', - 'flv' => 'video/x-flv', - 'gif' => 'image/gif', - 'gz' => 'application/gzip', - 'htm' => 'text/html', - 'html' => 'text/html', - 'ico' => 'image/x-icon', - 'ics' => 'text/calendar', - 'ini' => 'text/plain', - 'iso' => 'application/x-iso9660-image', - 'jar' => 'application/java-archive', - 'jpe' => 'image/jpeg', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'js' => 'text/javascript', - 'json' => 'application/json', - 'latex' => 'application/x-latex', - 'log' => 'text/plain', - 'm4a' => 'audio/mp4', - 'm4v' => 'video/mp4', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mov' => 'video/quicktime', - 'mkv' => 'video/x-matroska', - 'mp3' => 'audio/mpeg', - 'mp4' => 'video/mp4', - 'mp4a' => 'audio/mp4', - 'mp4v' => 'video/mp4', - 'mpe' => 'video/mpeg', - 'mpeg' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'mpg4' => 'video/mp4', - 'oga' => 'audio/ogg', - 'ogg' => 'audio/ogg', - 'ogv' => 'video/ogg', - 'ogx' => 'application/ogg', - 'pbm' => 'image/x-portable-bitmap', - 'pdf' => 'application/pdf', - 'pgm' => 'image/x-portable-graymap', - 'png' => 'image/png', - 'pnm' => 'image/x-portable-anymap', - 'ppm' => 'image/x-portable-pixmap', - 'ppt' => 'application/vnd.ms-powerpoint', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'ps' => 'application/postscript', - 'qt' => 'video/quicktime', - 'rar' => 'application/x-rar-compressed', - 'ras' => 'image/x-cmu-raster', - 'rss' => 'application/rss+xml', - 'rtf' => 'application/rtf', - 'sgm' => 'text/sgml', - 'sgml' => 'text/sgml', - 'svg' => 'image/svg+xml', - 'swf' => 'application/x-shockwave-flash', - 'tar' => 'application/x-tar', - 'tif' => 'image/tiff', - 'tiff' => 'image/tiff', - 'torrent' => 'application/x-bittorrent', - 'ttf' => 'application/x-font-ttf', - 'txt' => 'text/plain', - 'wav' => 'audio/x-wav', - 'webm' => 'video/webm', - 'wma' => 'audio/x-ms-wma', - 'wmv' => 'video/x-ms-wmv', - 'woff' => 'application/x-font-woff', - 'wsdl' => 'application/wsdl+xml', - 'xbm' => 'image/x-xbitmap', - 'xls' => 'application/vnd.ms-excel', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'xml' => 'application/xml', - 'xpm' => 'image/x-xpixmap', - 'xwd' => 'image/x-xwindowdump', - 'yaml' => 'text/yaml', - 'yml' => 'text/yaml', - 'zip' => 'application/zip', - ]; - - $extension = strtolower($extension); - - return isset($mimetypes[$extension]) - ? $mimetypes[$extension] - : null; -} - -/** - * Parses an HTTP message into an associative array. - * - * The array contains the "start-line" key containing the start line of - * the message, "headers" key containing an associative array of header - * array values, and a "body" key containing the body of the message. - * - * @param string $message HTTP request or response to parse. - * - * @return array - * @internal - */ -function _parse_message($message) -{ - if (!$message) { - throw new \InvalidArgumentException('Invalid message'); - } - - $message = ltrim($message, "\r\n"); - - $messageParts = preg_split("/\r?\n\r?\n/", $message, 2); - - if ($messageParts === false || count($messageParts) !== 2) { - throw new \InvalidArgumentException('Invalid message: Missing header delimiter'); - } - - list($rawHeaders, $body) = $messageParts; - $rawHeaders .= "\r\n"; // Put back the delimiter we split previously - $headerParts = preg_split("/\r?\n/", $rawHeaders, 2); - - if ($headerParts === false || count($headerParts) !== 2) { - throw new \InvalidArgumentException('Invalid message: Missing status line'); - } - - list($startLine, $rawHeaders) = $headerParts; - - if (preg_match("/(?:^HTTP\/|^[A-Z]+ \S+ HTTP\/)(\d+(?:\.\d+)?)/i", $startLine, $matches) && $matches[1] === '1.0') { - // Header folding is deprecated for HTTP/1.1, but allowed in HTTP/1.0 - $rawHeaders = preg_replace(Rfc7230::HEADER_FOLD_REGEX, ' ', $rawHeaders); - } - - /** @var array[] $headerLines */ - $count = preg_match_all(Rfc7230::HEADER_REGEX, $rawHeaders, $headerLines, PREG_SET_ORDER); - - // If these aren't the same, then one line didn't match and there's an invalid header. - if ($count !== substr_count($rawHeaders, "\n")) { - // Folding is deprecated, see https://tools.ietf.org/html/rfc7230#section-3.2.4 - if (preg_match(Rfc7230::HEADER_FOLD_REGEX, $rawHeaders)) { - throw new \InvalidArgumentException('Invalid header syntax: Obsolete line folding'); - } - - throw new \InvalidArgumentException('Invalid header syntax'); - } - - $headers = []; - - foreach ($headerLines as $headerLine) { - $headers[$headerLine[1]][] = $headerLine[2]; - } - - return [ - 'start-line' => $startLine, - 'headers' => $headers, - 'body' => $body, - ]; -} - -/** - * Constructs a URI for an HTTP request message. - * - * @param string $path Path from the start-line - * @param array $headers Array of headers (each value an array). - * - * @return string - * @internal - */ -function _parse_request_uri($path, array $headers) -{ - $hostKey = array_filter(array_keys($headers), function ($k) { - return strtolower($k) === 'host'; - }); - - // If no host is found, then a full URI cannot be constructed. - if (!$hostKey) { - return $path; - } - - $host = $headers[reset($hostKey)][0]; - $scheme = substr($host, -4) === ':443' ? 'https' : 'http'; - - return $scheme . '://' . $host . '/' . ltrim($path, '/'); -} - -/** - * Get a short summary of the message body - * - * Will return `null` if the response is not printable. - * - * @param MessageInterface $message The message to get the body summary - * @param int $truncateAt The maximum allowed size of the summary - * - * @return null|string - */ -function get_message_body_summary(MessageInterface $message, $truncateAt = 120) -{ - $body = $message->getBody(); - - if (!$body->isSeekable() || !$body->isReadable()) { - return null; - } - - $size = $body->getSize(); - - if ($size === 0) { - return null; - } - - $summary = $body->read($truncateAt); - $body->rewind(); - - if ($size > $truncateAt) { - $summary .= ' (truncated...)'; - } - - // Matches any printable character, including unicode characters: - // letters, marks, numbers, punctuation, spacing, and separators. - if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/', $summary)) { - return null; - } - - return $summary; -} - -/** @internal */ -function _caseless_remove($keys, array $data) -{ - $result = []; - - foreach ($keys as &$key) { - $key = strtolower($key); - } - - foreach ($data as $k => $v) { - if (!in_array(strtolower($k), $keys)) { - $result[$k] = $v; - } - } - - return $result; -} diff --git a/vendor/guzzlehttp/psr7/src/functions_include.php b/vendor/guzzlehttp/psr7/src/functions_include.php deleted file mode 100644 index 96a4a83a..00000000 --- a/vendor/guzzlehttp/psr7/src/functions_include.php +++ /dev/null @@ -1,6 +0,0 @@ - 'foobar'], hasKeyInArray('name')); +``` + +* `hasKey` - alias of hasKeyInArray + +* `hasKeyValuePair` - check if arary has given key, value pair +```php +assertThat(['name'=> 'foobar'], hasKeyValuePair('name', 'foobar')); +``` +* `hasEntry` - same as hasKeyValuePair + +* `arrayWithSize` - check array has given size +```php +assertthat([2, 4, 6], arrayWithSize(3)); +``` +* `emptyArray` - check if array is emtpy +```php +assertThat([], emptyArray()); +``` + +* `nonEmptyArray` +```php +assertThat([1], nonEmptyArray()); +``` + +### Collection + +* `emptyTraversable` - check if traversable is empty +```php +$empty_it = new EmptyIterator; +assertThat($empty_it, emptyTraversable()); +``` + +* `nonEmptyTraversable` - check if traversable isn't empty +```php +$non_empty_it = new ArrayIterator(range(1, 10)); +assertThat($non_empty_it, nonEmptyTraversable()); +a +``` + +* `traversableWithSize` +```php +$non_empty_it = new ArrayIterator(range(1, 10)); +assertThat($non_empty_it, traversableWithSize(count(range(1, 10)))); +` +``` + +### Core + +* `allOf` - Evaluates to true only if ALL of the passed in matchers evaluate to true. +```php +assertThat([2,4,6], allOf(hasValue(2), arrayWithSize(3))); +``` + +* `anyOf` - Evaluates to true if ANY of the passed in matchers evaluate to true. +```php +assertThat([2, 4, 6], anyOf(hasValue(8), hasValue(2))); +``` + +* `noneOf` - Evaluates to false if ANY of the passed in matchers evaluate to true. +```php +assertThat([2, 4, 6], noneOf(hasValue(1), hasValue(3))); +``` + +* `both` + `andAlso` - This is useful for fluently combining matchers that must both pass. +```php +assertThat([2, 4, 6], both(hasValue(2))->andAlso(hasValue(4))); +``` + +* `either` + `orElse` - This is useful for fluently combining matchers where either may pass, +```php +assertThat([2, 4, 6], either(hasValue(2))->orElse(hasValue(4))); +``` + +* `describedAs` - Wraps an existing matcher and overrides the description when it fails. +```php +$expected = "Dog"; +$found = null; +// this assertion would result error message as Expected: is not null but: was null +//assertThat("Expected {$expected}, got {$found}", $found, is(notNullValue())); +// and this assertion would result error message as Expected: Dog but: was null +//assertThat($found, describedAs($expected, notNullValue())); +``` + +* `everyItem` - A matcher to apply to every element in an array. +```php +assertThat([2, 4, 6], everyItem(notNullValue())); +``` + +* `hasItem` - check array has given item, it can take a matcher argument +```php +assertThat([2, 4, 6], hasItem(equalTo(2))); +``` + +* `hasItems` - check array has givem items, it can take multiple matcher as arguments +```php +assertThat([1, 3, 5], hasItems(equalTo(1), equalTo(3))); +``` + +### Object + +* `hasToString` - check `__toString` or `toString` method +```php +class Foo { + public $name = null; + + public function __toString() { + return "[Foo]Instance"; + } +} +$foo = new Foo; +assertThat($foo, hasToString(equalTo("[Foo]Instance"))); +``` + +* `equalTo` - compares two instances using comparison operator '==' +```php +$foo = new Foo; +$foo2 = new Foo; +assertThat($foo, equalTo($foo2)); +``` + +* `identicalTo` - compares two instances using identity operator '===' +```php +assertThat($foo, is(not(identicalTo($foo2)))); +``` + +* `anInstanceOf` - check instance is an instance|sub-class of given class +```php +assertThat($foo, anInstanceOf(Foo::class)); +``` + +* `any` - alias of `anInstanceOf` + +* `nullValue` check null +```php +assertThat(null, is(nullValue())); +``` + +* `notNullValue` check not null +```php +assertThat("", notNullValue()); +``` + +* `sameInstance` - check for same instance +```php +assertThat($foo, is(not(sameInstance($foo2)))); +assertThat($foo, is(sameInstance($foo))); +``` + +* `typeOf`- check type +```php +assertThat(1, typeOf("integer")); +``` + +* `notSet` - check if instance property is not set +```php +assertThat($foo, notSet("name")); +``` + +* `set` - check if instance property is set +```php +$foo->name = "bar"; +assertThat($foo, set("name")); +``` + +### Numbers + +* `closeTo` - check value close to a range +```php +assertThat(3, closeTo(3, 0.5)); +``` + +* `comparesEqualTo` - check with '==' +```php +assertThat(2, comparesEqualTo(2)); +``` + +* `greaterThan` - check '>' +``` +assertThat(2, greaterThan(1)); +``` + +* `greaterThanOrEqualTo` +```php +assertThat(2, greaterThanOrEqualTo(2)); +``` + +* `atLeast` - The value is >= given value +```php +assertThat(3, atLeast(2)); +``` +* `lessThan` +```php +assertThat(2, lessThan(3)); +``` + +* `lessThanOrEqualTo` +```php +assertThat(2, lessThanOrEqualTo(3)); +``` + +* `atMost` - The value is <= given value +```php +assertThat(2, atMost(3)); +``` + +### String + +* `emptyString` - check for empty string +```php +assertThat("", emptyString()); +``` + +* `isEmptyOrNullString` +```php +assertThat(null, isEmptyOrNullString()); +``` + +* `nullOrEmptyString` +```php +assertThat("", nullOrEmptyString()); +``` + +* `isNonEmptyString` +```php +assertThat("foo", isNonEmptyString()); +``` + +* `nonEmptyString` +```php +assertThat("foo", nonEmptyString()); +``` + +* `equalToIgnoringCase` +```php +assertThat("Foo", equalToIgnoringCase("foo")); +``` +* `equalToIgnoringWhiteSpace` +```php +assertThat(" Foo ", equalToIgnoringWhiteSpace("Foo")); +``` + +* `matchesPattern` - matches with regex pattern +```php +assertThat("foobarbaz", matchesPattern('/(foo)(bar)(baz)/')); +``` + +* `containsString` - check for substring +```php +assertThat("foobar", containsString("foo")); +``` + +* `containsStringIgnoringCase` +```php +assertThat("fooBar", containsStringIgnoringCase("bar")); +``` + +* `stringContainsInOrder` +```php +assertThat("foo", stringContainsInOrder("foo")); +``` + +* `endsWith` - check string that ends with given value +```php +assertThat("foo", endsWith("oo")); +``` + +* `startsWith` - check string that starts with given value +```php +assertThat("bar", startsWith("ba")); +``` + +### Type-checking + +* `arrayValue` - check array type +```php +assertThat([], arrayValue()); +``` + +* `booleanValue` +```php +assertThat(true, booleanValue()); +``` +* `boolValue` - alias of booleanValue + +* `callableValue` - check if value is callable +```php +$func = function () {}; +assertThat($func, callableValue()); +``` +* `doubleValue` +```php +assertThat(3.14, doubleValue()); +``` + +* `floatValue` +```php +assertThat(3.14, floatValue()); +``` + +* `integerValue` +```php +assertThat(1, integerValue()); +``` + +* `intValue` - alias of `integerValue` + +* `numericValue` - check if value is numeric +```php +assertThat("123", numericValue()); +``` + +* `objectValue` - check for object +```php +$obj = new stdClass; +assertThat($obj, objectValue()); +``` +* `anObject` +```php +assertThat($obj, anObject()); +``` + +* `resourceValue` - check resource type +```php +$fp = fopen("/tmp/foo", "w+"); +assertThat($fp, resourceValue()); +``` + +* `scalarValue` - check for scaler value +```php +assertThat(1, scalarValue()); +``` + +* `stringValue` +```php +assertThat("", stringValue()); +``` + +### XML + +* `hasXPath` - check xml with a xpath +```php +$xml = << + + 1 + + + 2 + + +XML; + +$doc = new DOMDocument; +$doc->loadXML($xml); +assertThat($doc, hasXPath("book", 2)); +``` + diff --git a/vendor/hamcrest/hamcrest-php/TODO.txt b/vendor/hamcrest/hamcrest-php/TODO.txt deleted file mode 100644 index 92e1190d..00000000 --- a/vendor/hamcrest/hamcrest-php/TODO.txt +++ /dev/null @@ -1,22 +0,0 @@ -Still TODO Before Complete for PHP ----------------------------------- - -Port: - - - Hamcrest_Collection_* - - IsCollectionWithSize - - IsEmptyCollection - - IsIn - - IsTraversableContainingInAnyOrder - - IsTraversableContainingInOrder - - IsMapContaining (aliases) - -Aliasing/Deprecation (questionable): - - - Find and fix any factory methods that start with "is". - -Namespaces: - - - Investigate adding PHP 5.3+ namespace support in a way that still permits - use in PHP 5.2. - - Other than a parallel codebase, I don't see how this could be possible. diff --git a/vendor/hamcrest/hamcrest-php/composer.json b/vendor/hamcrest/hamcrest-php/composer.json index 5349f5fd..712ad965 100644 --- a/vendor/hamcrest/hamcrest-php/composer.json +++ b/vendor/hamcrest/hamcrest-php/composer.json @@ -3,7 +3,7 @@ "type": "library", "description": "This is the PHP port of Hamcrest Matchers", "keywords": ["test"], - "license": "BSD", + "license": "BSD-3-Clause", "authors": [ ], @@ -15,13 +15,12 @@ }, "require": { - "php": "^5.3|^7.0" + "php": "^5.3|^7.0|^8.0" }, "require-dev": { - "satooshi/php-coveralls": "^1.0", - "phpunit/php-file-iterator": "1.3.3", - "phpunit/phpunit": "~4.0" + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" }, "replace": { @@ -32,7 +31,7 @@ "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } } } diff --git a/vendor/hamcrest/hamcrest-php/composer.lock b/vendor/hamcrest/hamcrest-php/composer.lock deleted file mode 100644 index 0581a4ed..00000000 --- a/vendor/hamcrest/hamcrest-php/composer.lock +++ /dev/null @@ -1,1493 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", - "This file is @generated automatically" - ], - "hash": "52d9e3c2e238bdc2aab7f6e1d322e31d", - "content-hash": "ed113672807f01f40b4d9809b102dc31", - "packages": [], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2015-06-14 21:17:01" - }, - { - "name": "guzzle/guzzle", - "version": "v3.9.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle3.git", - "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", - "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "php": ">=5.3.3", - "symfony/event-dispatcher": "~2.1" - }, - "replace": { - "guzzle/batch": "self.version", - "guzzle/cache": "self.version", - "guzzle/common": "self.version", - "guzzle/http": "self.version", - "guzzle/inflection": "self.version", - "guzzle/iterator": "self.version", - "guzzle/log": "self.version", - "guzzle/parser": "self.version", - "guzzle/plugin": "self.version", - "guzzle/plugin-async": "self.version", - "guzzle/plugin-backoff": "self.version", - "guzzle/plugin-cache": "self.version", - "guzzle/plugin-cookie": "self.version", - "guzzle/plugin-curlauth": "self.version", - "guzzle/plugin-error-response": "self.version", - "guzzle/plugin-history": "self.version", - "guzzle/plugin-log": "self.version", - "guzzle/plugin-md5": "self.version", - "guzzle/plugin-mock": "self.version", - "guzzle/plugin-oauth": "self.version", - "guzzle/service": "self.version", - "guzzle/stream": "self.version" - }, - "require-dev": { - "doctrine/cache": "~1.3", - "monolog/monolog": "~1.0", - "phpunit/phpunit": "3.7.*", - "psr/log": "~1.0", - "symfony/class-loader": "~2.1", - "zendframework/zend-cache": "2.*,<2.3", - "zendframework/zend-log": "2.*,<2.3" - }, - "suggest": { - "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.9-dev" - } - }, - "autoload": { - "psr-0": { - "Guzzle": "src/", - "Guzzle\\Tests": "tests/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Guzzle Community", - "homepage": "https://github.com/guzzle/guzzle/contributors" - } - ], - "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2015-03-18 18:23:50" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "time": "2015-02-03 12:10:50" - }, - { - "name": "phpspec/prophecy", - "version": "v1.5.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4745ded9307786b730d7a60df5cb5a6c43cf95f7", - "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "phpdocumentor/reflection-docblock": "~2.0", - "sebastian/comparator": "~1.1" - }, - "require-dev": { - "phpspec/phpspec": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Prophecy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2015-08-13 10:07:40" - }, - { - "name": "phpunit/php-code-coverage", - "version": "2.2.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "^1.3.2", - "sebastian/version": "~1.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2015-10-06 15:47:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.3.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "16a78140ed2fc01b945cfa539665fadc6a038029" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/16a78140ed2fc01b945cfa539665fadc6a038029", - "reference": "16a78140ed2fc01b945cfa539665fadc6a038029", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "File/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "http://www.phpunit.de/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2012-10-11 11:44:38" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21 13:50:34" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2015-06-21 08:01:12" - }, - { - "name": "phpunit/php-token-stream", - "version": "1.4.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2015-09-15 10:49:45" - }, - { - "name": "phpunit/phpunit", - "version": "4.5.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d6429b0995b24a2d9dfe5587ee3a7071c1161af4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d6429b0995b24a2d9dfe5587ee3a7071c1161af4", - "reference": "d6429b0995b24a2d9dfe5587ee3a7071c1161af4", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpspec/prophecy": "~1.3,>=1.3.1", - "phpunit/php-code-coverage": "~2.0,>=2.0.11", - "phpunit/php-file-iterator": "~1.3.2", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "~1.0.2", - "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.1", - "sebastian/environment": "~1.2", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.0" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.5.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2015-03-29 09:24:05" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "2.3.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2015-10-02 06:51:40" - }, - { - "name": "psr/log", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-0": { - "Psr\\Log\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2012-12-21 11:40:51" - }, - { - "name": "satooshi/php-coveralls", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/satooshi/php-coveralls.git", - "reference": "3edbdbdb4f4cfab5cb9ce83655ff81432f2221a6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/satooshi/php-coveralls/zipball/3edbdbdb4f4cfab5cb9ce83655ff81432f2221a6", - "reference": "3edbdbdb4f4cfab5cb9ce83655ff81432f2221a6", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-simplexml": "*", - "guzzle/guzzle": "^2.8|^3.0", - "php": ">=5.3.3", - "psr/log": "^1.0", - "symfony/config": "^2.4|^3.0", - "symfony/console": "^2.1|^3.0", - "symfony/stopwatch": "^2.2|^3.0", - "symfony/yaml": "^2.1|^3.0" - }, - "suggest": { - "symfony/http-kernel": "Allows Symfony integration" - }, - "bin": [ - "bin/coveralls" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.8-dev" - } - }, - "autoload": { - "psr-4": { - "Satooshi\\": "src/Satooshi/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kitamura Satoshi", - "email": "with.no.parachute@gmail.com", - "homepage": "https://www.facebook.com/satooshi.jp" - } - ], - "description": "PHP client library for Coveralls API", - "homepage": "https://github.com/satooshi/php-coveralls", - "keywords": [ - "ci", - "coverage", - "github", - "test" - ], - "time": "2015-12-28 09:07:32" - }, - { - "name": "sebastian/comparator", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2015-07-26 15:48:44" - }, - { - "name": "sebastian/diff", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2015-12-08 07:14:41" - }, - { - "name": "sebastian/environment", - "version": "1.3.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "6e7133793a8e5a5714a551a8324337374be209df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6e7133793a8e5a5714a551a8324337374be209df", - "reference": "6e7133793a8e5a5714a551a8324337374be209df", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2015-12-02 08:37:27" - }, - { - "name": "sebastian/exporter", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2015-06-21 07:55:53" - }, - { - "name": "sebastian/global-state", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2015-10-12 03:26:01" - }, - { - "name": "sebastian/recursion-context", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-11-11 19:50:13" - }, - { - "name": "sebastian/version", - "version": "1.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "shasum": "" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-06-21 13:59:46" - }, - { - "name": "symfony/config", - "version": "v2.8.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "17d4b2e64ce1c6ba7caa040f14469b3c44d7f7d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/17d4b2e64ce1c6ba7caa040f14469b3c44d7f7d2", - "reference": "17d4b2e64ce1c6ba7caa040f14469b3c44d7f7d2", - "shasum": "" - }, - "require": { - "php": ">=5.3.9", - "symfony/filesystem": "~2.3|~3.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Config Component", - "homepage": "https://symfony.com", - "time": "2015-12-26 13:37:56" - }, - { - "name": "symfony/console", - "version": "v2.8.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "2e06a5ccb19dcf9b89f1c6a677a39a8df773635a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/2e06a5ccb19dcf9b89f1c6a677a39a8df773635a", - "reference": "2e06a5ccb19dcf9b89f1c6a677a39a8df773635a", - "shasum": "" - }, - "require": { - "php": ">=5.3.9", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1|~3.0.0", - "symfony/process": "~2.1|~3.0.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2015-12-22 10:25:57" - }, - { - "name": "symfony/event-dispatcher", - "version": "v2.8.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a5eb815363c0388e83247e7e9853e5dbc14999cc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a5eb815363c0388e83247e7e9853e5dbc14999cc", - "reference": "a5eb815363c0388e83247e7e9853e5dbc14999cc", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.0,>=2.0.5|~3.0.0", - "symfony/dependency-injection": "~2.6|~3.0.0", - "symfony/expression-language": "~2.6|~3.0.0", - "symfony/stopwatch": "~2.3|~3.0.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "time": "2015-10-30 20:15:42" - }, - { - "name": "symfony/filesystem", - "version": "v2.8.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "a7ad724530a764d70c168d321ac226ba3d2f10fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/a7ad724530a764d70c168d321ac226ba3d2f10fc", - "reference": "a7ad724530a764d70c168d321ac226ba3d2f10fc", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2015-12-22 10:25:57" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "49ff736bd5d41f45240cec77b44967d76e0c3d25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/49ff736bd5d41f45240cec77b44967d76e0c3d25", - "reference": "49ff736bd5d41f45240cec77b44967d76e0c3d25", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "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" - ], - "time": "2015-11-20 09:19:13" - }, - { - "name": "symfony/stopwatch", - "version": "v2.8.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "5f1e2ebd1044da542d2b9510527836e8be92b1cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5f1e2ebd1044da542d2b9510527836e8be92b1cb", - "reference": "5f1e2ebd1044da542d2b9510527836e8be92b1cb", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Stopwatch Component", - "homepage": "https://symfony.com", - "time": "2015-10-30 20:15:42" - }, - { - "name": "symfony/yaml", - "version": "v2.8.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "ac84cbb98b68a6abbc9f5149eb96ccc7b07b8966" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/ac84cbb98b68a6abbc9f5149eb96ccc7b07b8966", - "reference": "ac84cbb98b68a6abbc9f5149eb96ccc7b07b8966", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2015-12-26 13:37:56" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.3.2" - }, - "platform-dev": [] -} diff --git a/vendor/hamcrest/hamcrest-php/generator/FactoryClass.php b/vendor/hamcrest/hamcrest-php/generator/FactoryClass.php index 0c6bf78d..a09cb73c 100644 --- a/vendor/hamcrest/hamcrest-php/generator/FactoryClass.php +++ b/vendor/hamcrest/hamcrest-php/generator/FactoryClass.php @@ -33,7 +33,6 @@ class FactoryClass $this->methods = array(); foreach ($this->getPublicStaticMethods() as $method) { if ($method->isFactory()) { -// echo $this->getName() . '::' . $method->getName() . ' : ' . count($method->getCalls()) . PHP_EOL; $this->methods[] = $method; } } diff --git a/vendor/hamcrest/hamcrest-php/generator/FactoryFile.php b/vendor/hamcrest/hamcrest-php/generator/FactoryFile.php index ac3d6c7d..dd6109b1 100644 --- a/vendor/hamcrest/hamcrest-php/generator/FactoryFile.php +++ b/vendor/hamcrest/hamcrest-php/generator/FactoryFile.php @@ -53,9 +53,8 @@ abstract class FactoryFile public function generateFactoryCall(FactoryCall $call) { $method = $call->getMethod(); - $code = $method->getComment($this->indent) . PHP_EOL; + $code = $method->getComment($this->indent) . "\n"; $code .= $this->generateDeclaration($call->getName(), $method); - // $code .= $this->generateImport($method); $code .= $this->generateCall($method); $code .= $this->generateClosing(); return $code; @@ -66,7 +65,7 @@ abstract class FactoryFile $code = $this->indent . $this->getDeclarationModifiers() . 'function ' . $name . '(' . $this->generateDeclarationArguments($method) - . ')' . PHP_EOL . $this->indent . '{' . PHP_EOL; + . ')' . "\n" . $this->indent . '{' . "\n"; return $code; } @@ -86,25 +85,25 @@ abstract class FactoryFile public function generateImport(FactoryMethod $method) { - return $this->indent . self::INDENT . "require_once '" . $method->getClass()->getFile() . "';" . PHP_EOL; + return $this->indent . self::INDENT . "require_once '" . $method->getClass()->getFile() . "';" . "\n"; } public function generateCall(FactoryMethod $method) { $code = ''; if ($method->acceptsVariableArguments()) { - $code .= $this->indent . self::INDENT . '$args = func_get_args();' . PHP_EOL; + $code .= $this->indent . self::INDENT . '$args = func_get_args();' . "\n"; } $code .= $this->indent . self::INDENT . 'return '; if ($method->acceptsVariableArguments()) { $code .= 'call_user_func_array(array(\'' . '\\' . $method->getClassName() . '\', \'' - . $method->getName() . '\'), $args);' . PHP_EOL; + . $method->getName() . '\'), $args);' . "\n"; } else { $code .= '\\' . $method->getClassName() . '::' . $method->getName() . '(' - . $method->getParameterInvocations() . ');' . PHP_EOL; + . $method->getParameterInvocations() . ');' . "\n"; } return $code; @@ -112,7 +111,7 @@ abstract class FactoryFile public function generateClosing() { - return $this->indent . '}' . PHP_EOL; + return $this->indent . '}' . "\n"; } public function write() diff --git a/vendor/hamcrest/hamcrest-php/generator/FactoryGenerator.php b/vendor/hamcrest/hamcrest-php/generator/FactoryGenerator.php index 37f80b6e..242875a0 100644 --- a/vendor/hamcrest/hamcrest-php/generator/FactoryGenerator.php +++ b/vendor/hamcrest/hamcrest-php/generator/FactoryGenerator.php @@ -73,7 +73,7 @@ class FactoryGenerator public function getSortedFiles() { - $iter = \File_Iterator_Factory::getFileIterator($this->path, '.php'); + $iter = $this->getFileIterator(); $files = array(); foreach ($iter as $file) { $files[] = $file; @@ -83,6 +83,15 @@ class FactoryGenerator return $files; } + private function getFileIterator() + { + $factoryClass = class_exists('File_Iterator_Factory') ? 'File_Iterator_Factory' : 'SebastianBergmann\FileIterator\Factory'; + + $factory = new $factoryClass(); + + return $factory->getFileIterator($this->path, '.php'); + } + public function getFactoryClass($file) { $name = $this->getFactoryClassName($file); diff --git a/vendor/hamcrest/hamcrest-php/generator/FactoryMethod.php b/vendor/hamcrest/hamcrest-php/generator/FactoryMethod.php index 44f8dc51..8a05371b 100644 --- a/vendor/hamcrest/hamcrest-php/generator/FactoryMethod.php +++ b/vendor/hamcrest/hamcrest-php/generator/FactoryMethod.php @@ -216,16 +216,16 @@ class FactoryMethod public function getCommentText() { - return implode(PHP_EOL, $this->comment); + return implode("\n", $this->comment); } public function getComment($indent = '') { $comment = $indent . '/**'; foreach ($this->comment as $line) { - $comment .= PHP_EOL . rtrim($indent . ' * ' . $line); + $comment .= "\n" . rtrim($indent . ' * ' . $line); } - $comment .= PHP_EOL . $indent . ' */'; + $comment .= "\n" . $indent . ' */'; return $comment; } } diff --git a/vendor/hamcrest/hamcrest-php/generator/FactoryParameter.php b/vendor/hamcrest/hamcrest-php/generator/FactoryParameter.php index 93a76b38..82b707ac 100644 --- a/vendor/hamcrest/hamcrest-php/generator/FactoryParameter.php +++ b/vendor/hamcrest/hamcrest-php/generator/FactoryParameter.php @@ -22,19 +22,15 @@ class FactoryParameter $this->reflector = $reflector; } + /** + * Compute the declaration code. + * + * @return string + */ public function getDeclaration() { - if ($this->reflector->isArray()) { - $code = 'array '; - } else { - $class = $this->reflector->getClass(); - if ($class !== null) { - $code = '\\' . $class->name . ' '; - } else { - $code = ''; - } - } - $code .= '$' . $this->reflector->name; + $code = $this->getTypeCode() . $this->getInvocation(); + if ($this->reflector->isOptional()) { $default = $this->reflector->getDefaultValue(); if (is_null($default)) { @@ -48,7 +44,7 @@ class FactoryParameter } elseif (is_array($default)) { $default = 'array()'; } else { - echo 'Warning: unknown default type for ' . $this->getMethod()->getFullName() . PHP_EOL; + echo 'Warning: unknown default type for ' . $this->getMethod()->getFullName() . "\n"; var_dump($default); $default = 'null'; } @@ -57,11 +53,77 @@ class FactoryParameter return $code; } - public function getInvocation() + /** + * Compute the type code for the paramater. + * + * @return string + */ + private function getTypeCode() { - return '$' . $this->reflector->name; + // Handle PHP 5 separately + if (PHP_VERSION_ID < 70000) { + if ($this->reflector->isArray()) { + return 'array'; + } + + $class = $this->reflector->getClass(); + + return $class ? sprintf('\\%s ', $class->getName()) : ''; + } + + if (!$this->reflector->hasType()) { + return ''; + } + + $type = $this->reflector->getType(); + $name = self::getQualifiedName($type); + + // PHP 7.1+ supports nullable types via a leading question mark + return (PHP_VERSION_ID >= 70100 && $type->allowsNull()) ? sprintf('?%s ', $name) : sprintf('%s ', $name); } + /** + * Compute qualified name for the given type. + * + * This function knows how to prefix class names with a leading slash and + * also how to handle PHP 8's union types. + * + * @param ReflectionType $type + * + * @return string + */ + private static function getQualifiedName(ReflectionType $type) + { + // PHP 8 union types can be recursively processed + if ($type instanceof ReflectionUnionType) { + return implode('|', array_map(function (ReflectionType $type) { + // The "self::" call within a Closure is fine here because this + // code will only ever be executed on PHP 7.0+ + return self::getQualifiedName($type); + }, $type->getTypes())); + } + + // PHP 7.0 doesn't have named types, but 7.1+ does + $name = $type instanceof ReflectionNamedType ? $type->getName() : (string) $type; + + return $type->isBuiltin() ? $name : sprintf('\\%s', $name); + } + + /** + * Compute the invocation code. + * + * @return string + */ + public function getInvocation() + { + return sprintf('$%s', $this->reflector->getName()); + } + + /** + * Compute the method name. + * + * @return string + */ public function getMethod() { return $this->method; diff --git a/vendor/hamcrest/hamcrest-php/generator/GlobalFunctionFile.php b/vendor/hamcrest/hamcrest-php/generator/GlobalFunctionFile.php index 5ee1b69f..ec8b1b39 100644 --- a/vendor/hamcrest/hamcrest-php/generator/GlobalFunctionFile.php +++ b/vendor/hamcrest/hamcrest-php/generator/GlobalFunctionFile.php @@ -19,7 +19,7 @@ class GlobalFunctionFile extends FactoryFile public function addCall(FactoryCall $call) { - $this->functions .= PHP_EOL . $this->generateFactoryCall($call); + $this->functions .= "\n" . $this->generateFactoryCall($call); } public function build() @@ -33,7 +33,7 @@ class GlobalFunctionFile extends FactoryFile public function generateFactoryCall(FactoryCall $call) { - $code = "if (!function_exists('{$call->getName()}')) {"; + $code = "if (!function_exists('{$call->getName()}')) {\n"; $code.= parent::generateFactoryCall($call); $code.= "}\n"; diff --git a/vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest.php b/vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest.php index 8a719eb3..55a2dd8c 100644 --- a/vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest.php +++ b/vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest.php @@ -30,7 +30,8 @@ if (!function_exists('assertThat')) { } } -if (!function_exists('anArray')) { /** +if (!function_exists('anArray')) { + /** * Evaluates to true only if each $matcher[$i] is satisfied by $array[$i]. */ function anArray(/* args... */) @@ -40,7 +41,8 @@ if (!function_exists('anArray')) { /** } } -if (!function_exists('hasItemInArray')) { /** +if (!function_exists('hasItemInArray')) { + /** * Evaluates to true if any item in an array satisfies the given matcher. * * @param mixed $item as a {@link Hamcrest\Matcher} or a value. @@ -53,7 +55,8 @@ if (!function_exists('hasItemInArray')) { /** } } -if (!function_exists('hasValue')) { /** +if (!function_exists('hasValue')) { + /** * Evaluates to true if any item in an array satisfies the given matcher. * * @param mixed $item as a {@link Hamcrest\Matcher} or a value. @@ -66,7 +69,8 @@ if (!function_exists('hasValue')) { /** } } -if (!function_exists('arrayContainingInAnyOrder')) { /** +if (!function_exists('arrayContainingInAnyOrder')) { + /** * An array with elements that match the given matchers. */ function arrayContainingInAnyOrder(/* args... */) @@ -76,7 +80,8 @@ if (!function_exists('arrayContainingInAnyOrder')) { /** } } -if (!function_exists('containsInAnyOrder')) { /** +if (!function_exists('containsInAnyOrder')) { + /** * An array with elements that match the given matchers. */ function containsInAnyOrder(/* args... */) @@ -86,7 +91,8 @@ if (!function_exists('containsInAnyOrder')) { /** } } -if (!function_exists('arrayContaining')) { /** +if (!function_exists('arrayContaining')) { + /** * An array with elements that match the given matchers in the same order. */ function arrayContaining(/* args... */) @@ -96,7 +102,8 @@ if (!function_exists('arrayContaining')) { /** } } -if (!function_exists('contains')) { /** +if (!function_exists('contains')) { + /** * An array with elements that match the given matchers in the same order. */ function contains(/* args... */) @@ -106,7 +113,8 @@ if (!function_exists('contains')) { /** } } -if (!function_exists('hasKeyInArray')) { /** +if (!function_exists('hasKeyInArray')) { + /** * Evaluates to true if any key in an array matches the given matcher. * * @param mixed $key as a {@link Hamcrest\Matcher} or a value. @@ -119,7 +127,8 @@ if (!function_exists('hasKeyInArray')) { /** } } -if (!function_exists('hasKey')) { /** +if (!function_exists('hasKey')) { + /** * Evaluates to true if any key in an array matches the given matcher. * * @param mixed $key as a {@link Hamcrest\Matcher} or a value. @@ -132,7 +141,8 @@ if (!function_exists('hasKey')) { /** } } -if (!function_exists('hasKeyValuePair')) { /** +if (!function_exists('hasKeyValuePair')) { + /** * Test if an array has both an key and value in parity with each other. */ function hasKeyValuePair($key, $value) @@ -141,7 +151,8 @@ if (!function_exists('hasKeyValuePair')) { /** } } -if (!function_exists('hasEntry')) { /** +if (!function_exists('hasEntry')) { + /** * Test if an array has both an key and value in parity with each other. */ function hasEntry($key, $value) @@ -150,7 +161,8 @@ if (!function_exists('hasEntry')) { /** } } -if (!function_exists('arrayWithSize')) { /** +if (!function_exists('arrayWithSize')) { + /** * Does array size satisfy a given matcher? * * @param \Hamcrest\Matcher|int $size as a {@link Hamcrest\Matcher} or a value. @@ -163,7 +175,8 @@ if (!function_exists('arrayWithSize')) { /** } } -if (!function_exists('emptyArray')) { /** +if (!function_exists('emptyArray')) { + /** * Matches an empty array. */ function emptyArray() @@ -172,7 +185,8 @@ if (!function_exists('emptyArray')) { /** } } -if (!function_exists('nonEmptyArray')) { /** +if (!function_exists('nonEmptyArray')) { + /** * Matches an empty array. */ function nonEmptyArray() @@ -181,7 +195,8 @@ if (!function_exists('nonEmptyArray')) { /** } } -if (!function_exists('emptyTraversable')) { /** +if (!function_exists('emptyTraversable')) { + /** * Returns true if traversable is empty. */ function emptyTraversable() @@ -190,7 +205,8 @@ if (!function_exists('emptyTraversable')) { /** } } -if (!function_exists('nonEmptyTraversable')) { /** +if (!function_exists('nonEmptyTraversable')) { + /** * Returns true if traversable is not empty. */ function nonEmptyTraversable() @@ -199,7 +215,8 @@ if (!function_exists('nonEmptyTraversable')) { /** } } -if (!function_exists('traversableWithSize')) { /** +if (!function_exists('traversableWithSize')) { + /** * Does traversable size satisfy a given matcher? */ function traversableWithSize($size) @@ -208,7 +225,8 @@ if (!function_exists('traversableWithSize')) { /** } } -if (!function_exists('allOf')) { /** +if (!function_exists('allOf')) { + /** * Evaluates to true only if ALL of the passed in matchers evaluate to true. */ function allOf(/* args... */) @@ -218,7 +236,8 @@ if (!function_exists('allOf')) { /** } } -if (!function_exists('anyOf')) { /** +if (!function_exists('anyOf')) { + /** * Evaluates to true if ANY of the passed in matchers evaluate to true. */ function anyOf(/* args... */) @@ -228,7 +247,8 @@ if (!function_exists('anyOf')) { /** } } -if (!function_exists('noneOf')) { /** +if (!function_exists('noneOf')) { + /** * Evaluates to false if ANY of the passed in matchers evaluate to true. */ function noneOf(/* args... */) @@ -238,7 +258,8 @@ if (!function_exists('noneOf')) { /** } } -if (!function_exists('both')) { /** +if (!function_exists('both')) { + /** * This is useful for fluently combining matchers that must both pass. * For example: *
@@ -251,7 +272,8 @@ if (!function_exists('both')) {    /**
     }
 }
 
-if (!function_exists('either')) {    /**
+if (!function_exists('either')) {
+    /**
      * This is useful for fluently combining matchers where either may pass,
      * for example:
      * 
@@ -264,7 +286,8 @@ if (!function_exists('either')) {    /**
     }
 }
 
-if (!function_exists('describedAs')) {    /**
+if (!function_exists('describedAs')) {
+    /**
      * Wraps an existing matcher and overrides the description when it fails.
      */
     function describedAs(/* args... */)
@@ -274,7 +297,8 @@ if (!function_exists('describedAs')) {    /**
     }
 }
 
-if (!function_exists('everyItem')) {    /**
+if (!function_exists('everyItem')) {
+    /**
      * @param Matcher $itemMatcher
      *   A matcher to apply to every element in an array.
      *
@@ -287,7 +311,8 @@ if (!function_exists('everyItem')) {    /**
     }
 }
 
-if (!function_exists('hasToString')) {    /**
+if (!function_exists('hasToString')) {
+    /**
      * Does array size satisfy a given matcher?
      */
     function hasToString($matcher)
@@ -296,7 +321,8 @@ if (!function_exists('hasToString')) {    /**
     }
 }
 
-if (!function_exists('is')) {    /**
+if (!function_exists('is')) {
+    /**
      * Decorates another Matcher, retaining the behavior but allowing tests
      * to be slightly more expressive.
      *
@@ -309,7 +335,8 @@ if (!function_exists('is')) {    /**
     }
 }
 
-if (!function_exists('anything')) {    /**
+if (!function_exists('anything')) {
+    /**
      * This matcher always evaluates to true.
      *
      * @param string $description A meaningful string used when describing itself.
@@ -322,7 +349,8 @@ if (!function_exists('anything')) {    /**
     }
 }
 
-if (!function_exists('hasItem')) {    /**
+if (!function_exists('hasItem')) {
+    /**
      * Test if the value is an array containing this matcher.
      *
      * Example:
@@ -339,7 +367,8 @@ if (!function_exists('hasItem')) {    /**
     }
 }
 
-if (!function_exists('hasItems')) {    /**
+if (!function_exists('hasItems')) {
+    /**
      * Test if the value is an array containing elements that match all of these
      * matchers.
      *
@@ -355,7 +384,8 @@ if (!function_exists('hasItems')) {    /**
     }
 }
 
-if (!function_exists('equalTo')) {    /**
+if (!function_exists('equalTo')) {
+    /**
      * Is the value equal to another value, as tested by the use of the "=="
      * comparison operator?
      */
@@ -365,7 +395,8 @@ if (!function_exists('equalTo')) {    /**
     }
 }
 
-if (!function_exists('identicalTo')) {    /**
+if (!function_exists('identicalTo')) {
+    /**
      * Tests of the value is identical to $value as tested by the "===" operator.
      */
     function identicalTo($value)
@@ -374,7 +405,8 @@ if (!function_exists('identicalTo')) {    /**
     }
 }
 
-if (!function_exists('anInstanceOf')) {    /**
+if (!function_exists('anInstanceOf')) {
+    /**
      * Is the value an instance of a particular type?
      * This version assumes no relationship between the required type and
      * the signature of the method that sets it up, for example in
@@ -386,7 +418,8 @@ if (!function_exists('anInstanceOf')) {    /**
     }
 }
 
-if (!function_exists('any')) {    /**
+if (!function_exists('any')) {
+    /**
      * Is the value an instance of a particular type?
      * This version assumes no relationship between the required type and
      * the signature of the method that sets it up, for example in
@@ -398,7 +431,8 @@ if (!function_exists('any')) {    /**
     }
 }
 
-if (!function_exists('not')) {    /**
+if (!function_exists('not')) {
+    /**
      * Matches if value does not match $value.
      */
     function not($value)
@@ -407,7 +441,8 @@ if (!function_exists('not')) {    /**
     }
 }
 
-if (!function_exists('nullValue')) {    /**
+if (!function_exists('nullValue')) {
+    /**
      * Matches if value is null.
      */
     function nullValue()
@@ -416,7 +451,8 @@ if (!function_exists('nullValue')) {    /**
     }
 }
 
-if (!function_exists('notNullValue')) {    /**
+if (!function_exists('notNullValue')) {
+    /**
      * Matches if value is not null.
      */
     function notNullValue()
@@ -425,7 +461,8 @@ if (!function_exists('notNullValue')) {    /**
     }
 }
 
-if (!function_exists('sameInstance')) {    /**
+if (!function_exists('sameInstance')) {
+    /**
      * Creates a new instance of IsSame.
      *
      * @param mixed $object
@@ -440,7 +477,8 @@ if (!function_exists('sameInstance')) {    /**
     }
 }
 
-if (!function_exists('typeOf')) {    /**
+if (!function_exists('typeOf')) {
+    /**
      * Is the value a particular built-in type?
      */
     function typeOf($theType)
@@ -449,7 +487,8 @@ if (!function_exists('typeOf')) {    /**
     }
 }
 
-if (!function_exists('set')) {    /**
+if (!function_exists('set')) {
+    /**
      * Matches if value (class, object, or array) has named $property.
      */
     function set($property)
@@ -458,7 +497,8 @@ if (!function_exists('set')) {    /**
     }
 }
 
-if (!function_exists('notSet')) {    /**
+if (!function_exists('notSet')) {
+    /**
      * Matches if value (class, object, or array) does not have named $property.
      */
     function notSet($property)
@@ -467,7 +507,8 @@ if (!function_exists('notSet')) {    /**
     }
 }
 
-if (!function_exists('closeTo')) {    /**
+if (!function_exists('closeTo')) {
+    /**
      * Matches if value is a number equal to $value within some range of
      * acceptable error $delta.
      */
@@ -477,7 +518,8 @@ if (!function_exists('closeTo')) {    /**
     }
 }
 
-if (!function_exists('comparesEqualTo')) {    /**
+if (!function_exists('comparesEqualTo')) {
+    /**
      * The value is not > $value, nor < $value.
      */
     function comparesEqualTo($value)
@@ -486,7 +528,8 @@ if (!function_exists('comparesEqualTo')) {    /**
     }
 }
 
-if (!function_exists('greaterThan')) {    /**
+if (!function_exists('greaterThan')) {
+    /**
      * The value is > $value.
      */
     function greaterThan($value)
@@ -495,7 +538,8 @@ if (!function_exists('greaterThan')) {    /**
     }
 }
 
-if (!function_exists('greaterThanOrEqualTo')) {    /**
+if (!function_exists('greaterThanOrEqualTo')) {
+    /**
      * The value is >= $value.
      */
     function greaterThanOrEqualTo($value)
@@ -504,7 +548,8 @@ if (!function_exists('greaterThanOrEqualTo')) {    /**
     }
 }
 
-if (!function_exists('atLeast')) {    /**
+if (!function_exists('atLeast')) {
+    /**
      * The value is >= $value.
      */
     function atLeast($value)
@@ -513,7 +558,8 @@ if (!function_exists('atLeast')) {    /**
     }
 }
 
-if (!function_exists('lessThan')) {    /**
+if (!function_exists('lessThan')) {
+    /**
      * The value is < $value.
      */
     function lessThan($value)
@@ -522,7 +568,8 @@ if (!function_exists('lessThan')) {    /**
     }
 }
 
-if (!function_exists('lessThanOrEqualTo')) {    /**
+if (!function_exists('lessThanOrEqualTo')) {
+    /**
      * The value is <= $value.
      */
     function lessThanOrEqualTo($value)
@@ -531,7 +578,8 @@ if (!function_exists('lessThanOrEqualTo')) {    /**
     }
 }
 
-if (!function_exists('atMost')) {    /**
+if (!function_exists('atMost')) {
+    /**
      * The value is <= $value.
      */
     function atMost($value)
@@ -540,7 +588,8 @@ if (!function_exists('atMost')) {    /**
     }
 }
 
-if (!function_exists('isEmptyString')) {    /**
+if (!function_exists('isEmptyString')) {
+    /**
      * Matches if value is a zero-length string.
      */
     function isEmptyString()
@@ -549,7 +598,8 @@ if (!function_exists('isEmptyString')) {    /**
     }
 }
 
-if (!function_exists('emptyString')) {    /**
+if (!function_exists('emptyString')) {
+    /**
      * Matches if value is a zero-length string.
      */
     function emptyString()
@@ -558,7 +608,8 @@ if (!function_exists('emptyString')) {    /**
     }
 }
 
-if (!function_exists('isEmptyOrNullString')) {    /**
+if (!function_exists('isEmptyOrNullString')) {
+    /**
      * Matches if value is null or a zero-length string.
      */
     function isEmptyOrNullString()
@@ -567,7 +618,8 @@ if (!function_exists('isEmptyOrNullString')) {    /**
     }
 }
 
-if (!function_exists('nullOrEmptyString')) {    /**
+if (!function_exists('nullOrEmptyString')) {
+    /**
      * Matches if value is null or a zero-length string.
      */
     function nullOrEmptyString()
@@ -576,7 +628,8 @@ if (!function_exists('nullOrEmptyString')) {    /**
     }
 }
 
-if (!function_exists('isNonEmptyString')) {    /**
+if (!function_exists('isNonEmptyString')) {
+    /**
      * Matches if value is a non-zero-length string.
      */
     function isNonEmptyString()
@@ -585,7 +638,8 @@ if (!function_exists('isNonEmptyString')) {    /**
     }
 }
 
-if (!function_exists('nonEmptyString')) {    /**
+if (!function_exists('nonEmptyString')) {
+    /**
      * Matches if value is a non-zero-length string.
      */
     function nonEmptyString()
@@ -594,7 +648,8 @@ if (!function_exists('nonEmptyString')) {    /**
     }
 }
 
-if (!function_exists('equalToIgnoringCase')) {    /**
+if (!function_exists('equalToIgnoringCase')) {
+    /**
      * Matches if value is a string equal to $string, regardless of the case.
      */
     function equalToIgnoringCase($string)
@@ -603,7 +658,8 @@ if (!function_exists('equalToIgnoringCase')) {    /**
     }
 }
 
-if (!function_exists('equalToIgnoringWhiteSpace')) {    /**
+if (!function_exists('equalToIgnoringWhiteSpace')) {
+    /**
      * Matches if value is a string equal to $string, regardless of whitespace.
      */
     function equalToIgnoringWhiteSpace($string)
@@ -612,7 +668,8 @@ if (!function_exists('equalToIgnoringWhiteSpace')) {    /**
     }
 }
 
-if (!function_exists('matchesPattern')) {    /**
+if (!function_exists('matchesPattern')) {
+    /**
      * Matches if value is a string that matches regular expression $pattern.
      */
     function matchesPattern($pattern)
@@ -621,7 +678,8 @@ if (!function_exists('matchesPattern')) {    /**
     }
 }
 
-if (!function_exists('containsString')) {    /**
+if (!function_exists('containsString')) {
+    /**
      * Matches if value is a string that contains $substring.
      */
     function containsString($substring)
@@ -630,7 +688,8 @@ if (!function_exists('containsString')) {    /**
     }
 }
 
-if (!function_exists('containsStringIgnoringCase')) {    /**
+if (!function_exists('containsStringIgnoringCase')) {
+    /**
      * Matches if value is a string that contains $substring regardless of the case.
      */
     function containsStringIgnoringCase($substring)
@@ -639,7 +698,8 @@ if (!function_exists('containsStringIgnoringCase')) {    /**
     }
 }
 
-if (!function_exists('stringContainsInOrder')) {    /**
+if (!function_exists('stringContainsInOrder')) {
+    /**
      * Matches if value contains $substrings in a constrained order.
      */
     function stringContainsInOrder(/* args... */)
@@ -649,7 +709,8 @@ if (!function_exists('stringContainsInOrder')) {    /**
     }
 }
 
-if (!function_exists('endsWith')) {    /**
+if (!function_exists('endsWith')) {
+    /**
      * Matches if value is a string that ends with $substring.
      */
     function endsWith($substring)
@@ -658,7 +719,8 @@ if (!function_exists('endsWith')) {    /**
     }
 }
 
-if (!function_exists('startsWith')) {    /**
+if (!function_exists('startsWith')) {
+    /**
      * Matches if value is a string that starts with $substring.
      */
     function startsWith($substring)
@@ -667,7 +729,8 @@ if (!function_exists('startsWith')) {    /**
     }
 }
 
-if (!function_exists('arrayValue')) {    /**
+if (!function_exists('arrayValue')) {
+    /**
      * Is the value an array?
      */
     function arrayValue()
@@ -676,7 +739,8 @@ if (!function_exists('arrayValue')) {    /**
     }
 }
 
-if (!function_exists('booleanValue')) {    /**
+if (!function_exists('booleanValue')) {
+    /**
      * Is the value a boolean?
      */
     function booleanValue()
@@ -685,7 +749,8 @@ if (!function_exists('booleanValue')) {    /**
     }
 }
 
-if (!function_exists('boolValue')) {    /**
+if (!function_exists('boolValue')) {
+    /**
      * Is the value a boolean?
      */
     function boolValue()
@@ -694,7 +759,8 @@ if (!function_exists('boolValue')) {    /**
     }
 }
 
-if (!function_exists('callableValue')) {    /**
+if (!function_exists('callableValue')) {
+    /**
      * Is the value callable?
      */
     function callableValue()
@@ -703,7 +769,8 @@ if (!function_exists('callableValue')) {    /**
     }
 }
 
-if (!function_exists('doubleValue')) {    /**
+if (!function_exists('doubleValue')) {
+    /**
      * Is the value a float/double?
      */
     function doubleValue()
@@ -712,7 +779,8 @@ if (!function_exists('doubleValue')) {    /**
     }
 }
 
-if (!function_exists('floatValue')) {    /**
+if (!function_exists('floatValue')) {
+    /**
      * Is the value a float/double?
      */
     function floatValue()
@@ -721,7 +789,8 @@ if (!function_exists('floatValue')) {    /**
     }
 }
 
-if (!function_exists('integerValue')) {    /**
+if (!function_exists('integerValue')) {
+    /**
      * Is the value an integer?
      */
     function integerValue()
@@ -730,7 +799,8 @@ if (!function_exists('integerValue')) {    /**
     }
 }
 
-if (!function_exists('intValue')) {    /**
+if (!function_exists('intValue')) {
+    /**
      * Is the value an integer?
      */
     function intValue()
@@ -739,7 +809,8 @@ if (!function_exists('intValue')) {    /**
     }
 }
 
-if (!function_exists('numericValue')) {    /**
+if (!function_exists('numericValue')) {
+    /**
      * Is the value a numeric?
      */
     function numericValue()
@@ -748,7 +819,8 @@ if (!function_exists('numericValue')) {    /**
     }
 }
 
-if (!function_exists('objectValue')) {    /**
+if (!function_exists('objectValue')) {
+    /**
      * Is the value an object?
      */
     function objectValue()
@@ -757,7 +829,8 @@ if (!function_exists('objectValue')) {    /**
     }
 }
 
-if (!function_exists('anObject')) {    /**
+if (!function_exists('anObject')) {
+    /**
      * Is the value an object?
      */
     function anObject()
@@ -766,7 +839,8 @@ if (!function_exists('anObject')) {    /**
     }
 }
 
-if (!function_exists('resourceValue')) {    /**
+if (!function_exists('resourceValue')) {
+    /**
      * Is the value a resource?
      */
     function resourceValue()
@@ -775,7 +849,8 @@ if (!function_exists('resourceValue')) {    /**
     }
 }
 
-if (!function_exists('scalarValue')) {    /**
+if (!function_exists('scalarValue')) {
+    /**
      * Is the value a scalar (boolean, integer, double, or string)?
      */
     function scalarValue()
@@ -784,7 +859,8 @@ if (!function_exists('scalarValue')) {    /**
     }
 }
 
-if (!function_exists('stringValue')) {    /**
+if (!function_exists('stringValue')) {
+    /**
      * Is the value a string?
      */
     function stringValue()
@@ -793,7 +869,8 @@ if (!function_exists('stringValue')) {    /**
     }
 }
 
-if (!function_exists('hasXPath')) {    /**
+if (!function_exists('hasXPath')) {
+    /**
      * Wraps $matcher with {@link Hamcrest\Core\IsEqual)
      * if it's not a matcher and the XPath in count()
      * if it's an integer.
diff --git a/vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/BaseMatcher.php b/vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/BaseMatcher.php
index 286db3e1..06055698 100644
--- a/vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/BaseMatcher.php
+++ b/vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/BaseMatcher.php
@@ -22,4 +22,9 @@ abstract class BaseMatcher implements Matcher
     {
         return StringDescription::toString($this);
     }
+
+    public function __invoke()
+    {
+        return call_user_func_array(array($this, 'matches'), func_get_args());
+    }
 }
diff --git a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/AbstractMatcherTest.php b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/AbstractMatcherTest.php
index 6c52c0e5..8a1fb2a9 100644
--- a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/AbstractMatcherTest.php
+++ b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/AbstractMatcherTest.php
@@ -1,10 +1,12 @@
 markTestSkipped('Broken on HHVM.');
+        }
+
         $matcher = arrayContaining(array(1, 2, 3));
         $this->assertMismatchDescription('was null', $matcher, null);
         $this->assertMismatchDescription('No item matched: <1>', $matcher, array());
diff --git a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Core/CombinableMatcherTest.php b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Core/CombinableMatcherTest.php
index 4c226149..463c7543 100644
--- a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Core/CombinableMatcherTest.php
+++ b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Core/CombinableMatcherTest.php
@@ -7,7 +7,7 @@ class CombinableMatcherTest extends \Hamcrest\AbstractMatcherTest
     private $_either_3_or_4;
     private $_not_3_and_not_4;
 
-    public function setUp()
+    protected function setUp()
     {
         $this->_either_3_or_4 = \Hamcrest\Core\CombinableMatcher::either(equalTo(3))->orElse(equalTo(4));
         $this->_not_3_and_not_4 = \Hamcrest\Core\CombinableMatcher::both(not(equalTo(3)))->andAlso(not(equalTo(4)));
diff --git a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Core/IsInstanceOfTest.php b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Core/IsInstanceOfTest.php
index 7a5f095a..f74cfdb5 100644
--- a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Core/IsInstanceOfTest.php
+++ b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Core/IsInstanceOfTest.php
@@ -7,7 +7,7 @@ class IsInstanceOfTest extends \Hamcrest\AbstractMatcherTest
     private $_baseClassInstance;
     private $_subClassInstance;
 
-    public function setUp()
+    protected function setUp()
     {
         $this->_baseClassInstance = new \Hamcrest\Core\SampleBaseClass('good');
         $this->_subClassInstance = new \Hamcrest\Core\SampleSubClass('good');
diff --git a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/FeatureMatcherTest.php b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/FeatureMatcherTest.php
index 7543294a..1b023049 100644
--- a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/FeatureMatcherTest.php
+++ b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/FeatureMatcherTest.php
@@ -34,7 +34,7 @@ class FeatureMatcherTest extends \Hamcrest\AbstractMatcherTest
 
     private $_resultMatcher;
 
-    public function setUp()
+    protected function setUp()
     {
         $this->_resultMatcher = $this->_resultMatcher();
     }
diff --git a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/InvokedMatcherTest.php b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/InvokedMatcherTest.php
new file mode 100644
index 00000000..dfa77006
--- /dev/null
+++ b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/InvokedMatcherTest.php
@@ -0,0 +1,31 @@
+matchAgainst = $matchAgainst;
+    }
+
+    public function matches($item)
+    {
+        return $item == $this->matchAgainst;
+    }
+
+}
+
+class InvokedMatcherTest extends TestCase
+{
+    public function testInvokedMatchersCallMatches()
+    {
+        $sampleMatcher = new SampleInvokeMatcher('foo');
+
+        $this->assertTrue($sampleMatcher('foo'));
+        $this->assertFalse($sampleMatcher('bar'));
+    }
+}
diff --git a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/MatcherAssertTest.php b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/MatcherAssertTest.php
index 21837121..dc12fba5 100644
--- a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/MatcherAssertTest.php
+++ b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/MatcherAssertTest.php
@@ -1,7 +1,9 @@
 _description = new \Hamcrest\StringDescription();
     }
diff --git a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/IsEqualIgnoringWhiteSpaceTest.php b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/IsEqualIgnoringWhiteSpaceTest.php
index 6c2304f4..27ad338b 100644
--- a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/IsEqualIgnoringWhiteSpaceTest.php
+++ b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/IsEqualIgnoringWhiteSpaceTest.php
@@ -6,7 +6,7 @@ class IsEqualIgnoringWhiteSpaceTest extends \Hamcrest\AbstractMatcherTest
 
     private $_matcher;
 
-    public function setUp()
+    protected function setUp()
     {
         $this->_matcher = \Hamcrest\Text\IsEqualIgnoringWhiteSpace::equalToIgnoringWhiteSpace(
             "Hello World   how\n are we? "
diff --git a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringContainsIgnoringCaseTest.php b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringContainsIgnoringCaseTest.php
index 3b5b08e3..73023007 100644
--- a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringContainsIgnoringCaseTest.php
+++ b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringContainsIgnoringCaseTest.php
@@ -8,7 +8,7 @@ class StringContainsIgnoringCaseTest extends \Hamcrest\AbstractMatcherTest
 
     private $_stringContains;
 
-    public function setUp()
+    protected function setUp()
     {
         $this->_stringContains = \Hamcrest\Text\StringContainsIgnoringCase::containsStringIgnoringCase(
             strtolower(self::EXCERPT)
diff --git a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringContainsInOrderTest.php b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringContainsInOrderTest.php
index 0be70629..4c465b29 100644
--- a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringContainsInOrderTest.php
+++ b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringContainsInOrderTest.php
@@ -6,7 +6,7 @@ class StringContainsInOrderTest extends \Hamcrest\AbstractMatcherTest
 
     private $_m;
 
-    public function setUp()
+    protected function setUp()
     {
         $this->_m = \Hamcrest\Text\StringContainsInOrder::stringContainsInOrder(array('a', 'b', 'c'));
     }
diff --git a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringContainsTest.php b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringContainsTest.php
index 203fd918..bf4afa3c 100644
--- a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringContainsTest.php
+++ b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringContainsTest.php
@@ -8,7 +8,7 @@ class StringContainsTest extends \Hamcrest\AbstractMatcherTest
 
     private $_stringContains;
 
-    public function setUp()
+    protected function setUp()
     {
         $this->_stringContains = \Hamcrest\Text\StringContains::containsString(self::EXCERPT);
     }
diff --git a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringEndsWithTest.php b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringEndsWithTest.php
index fffa3c9c..9a30f952 100644
--- a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringEndsWithTest.php
+++ b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringEndsWithTest.php
@@ -8,7 +8,7 @@ class StringEndsWithTest extends \Hamcrest\AbstractMatcherTest
 
     private $_stringEndsWith;
 
-    public function setUp()
+    protected function setUp()
     {
         $this->_stringEndsWith = \Hamcrest\Text\StringEndsWith::endsWith(self::EXCERPT);
     }
diff --git a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringStartsWithTest.php b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringStartsWithTest.php
index fc3761bd..3be201f1 100644
--- a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringStartsWithTest.php
+++ b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/Text/StringStartsWithTest.php
@@ -8,7 +8,7 @@ class StringStartsWithTest extends \Hamcrest\AbstractMatcherTest
 
     private $_stringStartsWith;
 
-    public function setUp()
+    protected function setUp()
     {
         $this->_stringStartsWith = \Hamcrest\Text\StringStartsWith::startsWith(self::EXCERPT);
     }
diff --git a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/UtilTest.php b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/UtilTest.php
index 0c2cd043..7248978c 100644
--- a/vendor/hamcrest/hamcrest-php/tests/Hamcrest/UtilTest.php
+++ b/vendor/hamcrest/hamcrest-php/tests/Hamcrest/UtilTest.php
@@ -1,7 +1,9 @@
 
+         stopOnFailure="false">
   
     
       .
diff --git a/vendor/jakub-onderka/php-console-color/.gitignore b/vendor/jakub-onderka/php-console-color/.gitignore
deleted file mode 100644
index 05ab16b8..00000000
--- a/vendor/jakub-onderka/php-console-color/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-build
-vendor
-composer.lock
diff --git a/vendor/jakub-onderka/php-console-color/.travis.yml b/vendor/jakub-onderka/php-console-color/.travis.yml
deleted file mode 100644
index 49175a99..00000000
--- a/vendor/jakub-onderka/php-console-color/.travis.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-language: php
-
-php:
-  - 5.4
-  - 5.5
-  - 5.6
-  - 7.0
-  - 7.1
-  - 7.2
-
-sudo: false
-
-cache:
-  directories:
-    - vendor
-    - $HOME/.composer/cache
-
-before_script:
-  - composer install --no-interaction --prefer-source
-
-script:
-  - ant phplint
-  - ant phpcs
-  - ant phpunit
diff --git a/vendor/jakub-onderka/php-console-color/LICENSE b/vendor/jakub-onderka/php-console-color/LICENSE
deleted file mode 100644
index 0954fc94..00000000
--- a/vendor/jakub-onderka/php-console-color/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2014-2018, Jakub Onderka
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-  * Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
-  * Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/jakub-onderka/php-console-color/README.md b/vendor/jakub-onderka/php-console-color/README.md
deleted file mode 100644
index 39e55d92..00000000
--- a/vendor/jakub-onderka/php-console-color/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-PHP Console Color
-=================
-
-[![Build Status](https://travis-ci.org/JakubOnderka/PHP-Console-Color.svg?branch=master)](https://travis-ci.org/JakubOnderka/PHP-Console-Color)
-
-Simple library for creating colored console ouput.
-
-See `example.php` how to use this library.
-
-![Example from Windows 10](https://user-images.githubusercontent.com/89590/40762008-687f909a-646c-11e8-88d6-e268a064be4c.png)
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-color/build.xml b/vendor/jakub-onderka/php-console-color/build.xml
deleted file mode 100644
index bb4ba66d..00000000
--- a/vendor/jakub-onderka/php-console-color/build.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-    
-    
-        
-    
-
-    
-        
-    
-
-    
-        
-    
-
-    
-        
-    
-
-    
-    
-
-    
-        
-    
-
-    
-        
-    
-
-    
-    
-        
-    
-
-    
-        
-            
-            
-            
-        
-    
-
-    
-        
-            
-            
-            
-        
-    
-
-    
-        
-
-        
-            
-            
-            
-            
-            
-        
-    
-
-    
-        
-
-        
-            
-            
-            
-            
-        
-    
-
-    
-        
-        
-        
-        
-
-        
-            
-            
-            
-            
-            
-            
-        
-    
-
-    
-
-
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-color/composer.json b/vendor/jakub-onderka/php-console-color/composer.json
deleted file mode 100644
index 6481cb51..00000000
--- a/vendor/jakub-onderka/php-console-color/composer.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-    "name": "jakub-onderka/php-console-color",
-    "license": "BSD-2-Clause",
-    "authors": [
-        {
-            "name": "Jakub Onderka",
-            "email": "jakub.onderka@gmail.com"
-        }
-    ],
-    "autoload": {
-        "psr-4": {"JakubOnderka\\PhpConsoleColor\\": "src/"}
-    },
-    "require": {
-        "php": ">=5.4.0"
-    },
-    "require-dev": {
-        "phpunit/phpunit": "~4.3",
-        "jakub-onderka/php-parallel-lint": "1.0",
-        "jakub-onderka/php-var-dump-check": "0.*",
-        "squizlabs/php_codesniffer": "1.*",
-        "jakub-onderka/php-code-style": "1.0"
-    }
-}
diff --git a/vendor/jakub-onderka/php-console-color/example.php b/vendor/jakub-onderka/php-console-color/example.php
deleted file mode 100644
index 5e698a24..00000000
--- a/vendor/jakub-onderka/php-console-color/example.php
+++ /dev/null
@@ -1,38 +0,0 @@
-isSupported() ? 'Yes' : 'No') . "\n";
-echo "256 colors are supported: " . ($consoleColor->are256ColorsSupported() ? 'Yes' : 'No') . "\n\n";
-
-if ($consoleColor->isSupported()) {
-    foreach ($consoleColor->getPossibleStyles() as $style) {
-        echo $consoleColor->apply($style, $style) . "\n";
-    }
-}
-
-echo "\n";
-
-if ($consoleColor->are256ColorsSupported()) {
-    echo "Foreground colors:\n";
-    for ($i = 1; $i <= 255; $i++) {
-        echo $consoleColor->apply("color_$i", str_pad($i, 6, ' ', STR_PAD_BOTH));
-
-        if ($i % 15 === 0) {
-            echo "\n";
-        }
-    }
-
-    echo "\nBackground colors:\n";
-
-    for ($i = 1; $i <= 255; $i++) {
-        echo $consoleColor->apply("bg_color_$i", str_pad($i, 6, ' ', STR_PAD_BOTH));
-
-        if ($i % 15 === 0) {
-            echo "\n";
-        }
-    }
-
-    echo "\n";
-}
diff --git a/vendor/jakub-onderka/php-console-color/phpunit.xml b/vendor/jakub-onderka/php-console-color/phpunit.xml
deleted file mode 100644
index f1105cc4..00000000
--- a/vendor/jakub-onderka/php-console-color/phpunit.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-    
-        
-            tests
-        
-    
-
-    
-    
-        
-            vendor
-        
-    
-
diff --git a/vendor/jakub-onderka/php-console-color/src/ConsoleColor.php b/vendor/jakub-onderka/php-console-color/src/ConsoleColor.php
deleted file mode 100644
index 90fd1252..00000000
--- a/vendor/jakub-onderka/php-console-color/src/ConsoleColor.php
+++ /dev/null
@@ -1,287 +0,0 @@
- null,
-        'bold' => '1',
-        'dark' => '2',
-        'italic' => '3',
-        'underline' => '4',
-        'blink' => '5',
-        'reverse' => '7',
-        'concealed' => '8',
-
-        'default' => '39',
-        'black' => '30',
-        'red' => '31',
-        'green' => '32',
-        'yellow' => '33',
-        'blue' => '34',
-        'magenta' => '35',
-        'cyan' => '36',
-        'light_gray' => '37',
-
-        'dark_gray' => '90',
-        'light_red' => '91',
-        'light_green' => '92',
-        'light_yellow' => '93',
-        'light_blue' => '94',
-        'light_magenta' => '95',
-        'light_cyan' => '96',
-        'white' => '97',
-
-        'bg_default' => '49',
-        'bg_black' => '40',
-        'bg_red' => '41',
-        'bg_green' => '42',
-        'bg_yellow' => '43',
-        'bg_blue' => '44',
-        'bg_magenta' => '45',
-        'bg_cyan' => '46',
-        'bg_light_gray' => '47',
-
-        'bg_dark_gray' => '100',
-        'bg_light_red' => '101',
-        'bg_light_green' => '102',
-        'bg_light_yellow' => '103',
-        'bg_light_blue' => '104',
-        'bg_light_magenta' => '105',
-        'bg_light_cyan' => '106',
-        'bg_white' => '107',
-    );
-
-    /** @var array */
-    private $themes = array();
-
-    public function __construct()
-    {
-        $this->isSupported = $this->isSupported();
-    }
-
-    /**
-     * @param string|array $style
-     * @param string $text
-     * @return string
-     * @throws InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function apply($style, $text)
-    {
-        if (!$this->isStyleForced() && !$this->isSupported()) {
-            return $text;
-        }
-
-        if (is_string($style)) {
-            $style = array($style);
-        }
-        if (!is_array($style)) {
-            throw new \InvalidArgumentException("Style must be string or array.");
-        }
-
-        $sequences = array();
-
-        foreach ($style as $s) {
-            if (isset($this->themes[$s])) {
-                $sequences = array_merge($sequences, $this->themeSequence($s));
-            } else if ($this->isValidStyle($s)) {
-                $sequences[] = $this->styleSequence($s);
-            } else {
-                throw new InvalidStyleException($s);
-            }
-        }
-
-        $sequences = array_filter($sequences, function ($val) {
-            return $val !== null;
-        });
-
-        if (empty($sequences)) {
-            return $text;
-        }
-
-        return $this->escSequence(implode(';', $sequences)) . $text . $this->escSequence(self::RESET_STYLE);
-    }
-
-    /**
-     * @param bool $forceStyle
-     */
-    public function setForceStyle($forceStyle)
-    {
-        $this->forceStyle = (bool) $forceStyle;
-    }
-
-    /**
-     * @return bool
-     */
-    public function isStyleForced()
-    {
-        return $this->forceStyle;
-    }
-
-    /**
-     * @param array $themes
-     * @throws InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function setThemes(array $themes)
-    {
-        $this->themes = array();
-        foreach ($themes as $name => $styles) {
-            $this->addTheme($name, $styles);
-        }
-    }
-
-    /**
-     * @param string $name
-     * @param array|string $styles
-     * @throws \InvalidArgumentException
-     * @throws InvalidStyleException
-     */
-    public function addTheme($name, $styles)
-    {
-        if (is_string($styles)) {
-            $styles = array($styles);
-        }
-        if (!is_array($styles)) {
-            throw new \InvalidArgumentException("Style must be string or array.");
-        }
-
-        foreach ($styles as $style) {
-            if (!$this->isValidStyle($style)) {
-                throw new InvalidStyleException($style);
-            }
-        }
-
-        $this->themes[$name] = $styles;
-    }
-
-    /**
-     * @return array
-     */
-    public function getThemes()
-    {
-        return $this->themes;
-    }
-
-    /**
-     * @param string $name
-     * @return bool
-     */
-    public function hasTheme($name)
-    {
-        return isset($this->themes[$name]);
-    }
-
-    /**
-     * @param string $name
-     */
-    public function removeTheme($name)
-    {
-        unset($this->themes[$name]);
-    }
-
-    /**
-     * @return bool
-     */
-    public function isSupported()
-    {
-        if (DIRECTORY_SEPARATOR === '\\') {
-            if (function_exists('sapi_windows_vt100_support') && @sapi_windows_vt100_support(STDOUT)) {
-                return true;
-            } elseif (getenv('ANSICON') !== false || getenv('ConEmuANSI') === 'ON') {
-                return true;
-            }
-            return false;
-        } else {
-            return function_exists('posix_isatty') && @posix_isatty(STDOUT);
-        }
-    }
-
-    /**
-     * @return bool
-     */
-    public function are256ColorsSupported()
-    {
-        if (DIRECTORY_SEPARATOR === '\\') {
-            return function_exists('sapi_windows_vt100_support') && @sapi_windows_vt100_support(STDOUT);
-        } else {
-            return strpos(getenv('TERM'), '256color') !== false;
-        }
-    }
-
-    /**
-     * @return array
-     */
-    public function getPossibleStyles()
-    {
-        return array_keys($this->styles);
-    }
-
-    /**
-     * @param string $name
-     * @return string[]
-     */
-    private function themeSequence($name)
-    {
-        $sequences = array();
-        foreach ($this->themes[$name] as $style) {
-            $sequences[] = $this->styleSequence($style);
-        }
-        return $sequences;
-    }
-
-    /**
-     * @param string $style
-     * @return string
-     */
-    private function styleSequence($style)
-    {
-        if (array_key_exists($style, $this->styles)) {
-            return $this->styles[$style];
-        }
-
-        if (!$this->are256ColorsSupported()) {
-            return null;
-        }
-
-        preg_match(self::COLOR256_REGEXP, $style, $matches);
-
-        $type = $matches[1] === 'bg_' ? self::BACKGROUND : self::FOREGROUND;
-        $value = $matches[2];
-
-        return "$type;5;$value";
-    }
-
-    /**
-     * @param string $style
-     * @return bool
-     */
-    private function isValidStyle($style)
-    {
-        return array_key_exists($style, $this->styles) || preg_match(self::COLOR256_REGEXP, $style);
-    }
-
-    /**
-     * @param string|int $value
-     * @return string
-     */
-    private function escSequence($value)
-    {
-        return "\033[{$value}m";
-    }
-}
diff --git a/vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php b/vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php
deleted file mode 100644
index 6f1586f6..00000000
--- a/vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php
+++ /dev/null
@@ -1,10 +0,0 @@
-isSupportedForce = $isSupported;
-    }
-
-    public function isSupported()
-    {
-        return $this->isSupportedForce;
-    }
-
-    public function setAre256ColorsSupported($are256ColorsSupported)
-    {
-        $this->are256ColorsSupportedForce = $are256ColorsSupported;
-    }
-
-    public function are256ColorsSupported()
-    {
-        return $this->are256ColorsSupportedForce;
-    }
-}
-
-class ConsoleColorTest extends \PHPUnit_Framework_TestCase
-{
-    /** @var ConsoleColorWithForceSupport */
-    private $uut;
-
-    protected function setUp()
-    {
-        $this->uut = new ConsoleColorWithForceSupport();
-    }
-
-    public function testNone()
-    {
-        $output = $this->uut->apply('none', 'text');
-        $this->assertEquals("text", $output);
-    }
-
-    public function testBold()
-    {
-        $output = $this->uut->apply('bold', 'text');
-        $this->assertEquals("\033[1mtext\033[0m", $output);
-    }
-
-    public function testBoldColorsAreNotSupported()
-    {
-        $this->uut->setIsSupported(false);
-
-        $output = $this->uut->apply('bold', 'text');
-        $this->assertEquals("text", $output);
-    }
-
-    public function testBoldColorsAreNotSupportedButAreForced()
-    {
-        $this->uut->setIsSupported(false);
-        $this->uut->setForceStyle(true);
-
-        $output = $this->uut->apply('bold', 'text');
-        $this->assertEquals("\033[1mtext\033[0m", $output);
-    }
-
-    public function testDark()
-    {
-        $output = $this->uut->apply('dark', 'text');
-        $this->assertEquals("\033[2mtext\033[0m", $output);
-    }
-
-    public function testBoldAndDark()
-    {
-        $output = $this->uut->apply(array('bold', 'dark'), 'text');
-        $this->assertEquals("\033[1;2mtext\033[0m", $output);
-    }
-
-    public function test256ColorForeground()
-    {
-        $output = $this->uut->apply('color_255', 'text');
-        $this->assertEquals("\033[38;5;255mtext\033[0m", $output);
-    }
-
-    public function test256ColorWithoutSupport()
-    {
-        $this->uut->setAre256ColorsSupported(false);
-
-        $output = $this->uut->apply('color_255', 'text');
-        $this->assertEquals("text", $output);
-    }
-
-    public function test256ColorBackground()
-    {
-        $output = $this->uut->apply('bg_color_255', 'text');
-        $this->assertEquals("\033[48;5;255mtext\033[0m", $output);
-    }
-
-    public function test256ColorForegroundAndBackground()
-    {
-        $output = $this->uut->apply(array('color_200', 'bg_color_255'), 'text');
-        $this->assertEquals("\033[38;5;200;48;5;255mtext\033[0m", $output);
-    }
-
-    public function testSetOwnTheme()
-    {
-        $this->uut->setThemes(array('bold_dark' => array('bold', 'dark')));
-        $output = $this->uut->apply(array('bold_dark'), 'text');
-        $this->assertEquals("\033[1;2mtext\033[0m", $output);
-    }
-
-    public function testAddOwnTheme()
-    {
-        $this->uut->addTheme('bold_own', 'bold');
-        $output = $this->uut->apply(array('bold_own'), 'text');
-        $this->assertEquals("\033[1mtext\033[0m", $output);
-    }
-
-    public function testAddOwnThemeArray()
-    {
-        $this->uut->addTheme('bold_dark', array('bold', 'dark'));
-        $output = $this->uut->apply(array('bold_dark'), 'text');
-        $this->assertEquals("\033[1;2mtext\033[0m", $output);
-    }
-
-    public function testOwnWithStyle()
-    {
-        $this->uut->addTheme('bold_dark', array('bold', 'dark'));
-        $output = $this->uut->apply(array('bold_dark', 'italic'), 'text');
-        $this->assertEquals("\033[1;2;3mtext\033[0m", $output);
-    }
-
-    public function testHasAndRemoveTheme()
-    {
-        $this->assertFalse($this->uut->hasTheme('bold_dark'));
-
-        $this->uut->addTheme('bold_dark', array('bold', 'dark'));
-        $this->assertTrue($this->uut->hasTheme('bold_dark'));
-
-        $this->uut->removeTheme('bold_dark');
-        $this->assertFalse($this->uut->hasTheme('bold_dark'));
-    }
-
-    public function testApplyInvalidArgument()
-    {
-        $this->setExpectedException('\InvalidArgumentException');
-        $this->uut->apply(new stdClass(), 'text');
-    }
-
-    public function testApplyInvalidStyleName()
-    {
-        $this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException');
-        $this->uut->apply('invalid', 'text');
-    }
-
-    public function testApplyInvalid256Color()
-    {
-        $this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException');
-        $this->uut->apply('color_2134', 'text');
-    }
-
-    public function testThemeInvalidStyle()
-    {
-        $this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException');
-        $this->uut->addTheme('invalid', array('invalid'));
-    }
-
-    public function testForceStyle()
-    {
-        $this->assertFalse($this->uut->isStyleForced());
-        $this->uut->setForceStyle(true);
-        $this->assertTrue($this->uut->isStyleForced());
-    }
-
-    public function testGetPossibleStyles()
-    {
-        $this->assertInternalType('array', $this->uut->getPossibleStyles());
-        $this->assertNotEmpty($this->uut->getPossibleStyles());
-    }
-}
-
diff --git a/vendor/jakub-onderka/php-console-highlighter/.gitignore b/vendor/jakub-onderka/php-console-highlighter/.gitignore
deleted file mode 100644
index 70f6ec06..00000000
--- a/vendor/jakub-onderka/php-console-highlighter/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/.idea/
-/build/
-/vendor/
-/composer.lock
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/.travis.yml b/vendor/jakub-onderka/php-console-highlighter/.travis.yml
deleted file mode 100644
index c88c4ec9..00000000
--- a/vendor/jakub-onderka/php-console-highlighter/.travis.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-language: php
-
-php:
-  - 5.4
-  - 5.5
-  - 5.6
-  - 7.0
-  - 7.1
-  - 7.2
-  
-sudo: false
-
-cache:
-  directories:
-    - vendor
-    - $HOME/.composer/cache
-
-before_script:
-  - composer install --no-interaction --prefer-source
-
-script:
-  - ant
diff --git a/vendor/jakub-onderka/php-console-highlighter/LICENSE b/vendor/jakub-onderka/php-console-highlighter/LICENSE
deleted file mode 100644
index 1a8317fa..00000000
--- a/vendor/jakub-onderka/php-console-highlighter/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2013 Jakub Onderka
-
-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.
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/README.md b/vendor/jakub-onderka/php-console-highlighter/README.md
deleted file mode 100644
index 1ef3d134..00000000
--- a/vendor/jakub-onderka/php-console-highlighter/README.md
+++ /dev/null
@@ -1,42 +0,0 @@
-PHP Console Highlighter
-=======================
-
-Highlight PHP code in console (terminal).
-
-Example
--------
-![Example](http://jakubonderka.github.io/php-console-highlight-example.png)
-
-Install
--------
-
-Just create a `composer.json` file and run the `php composer.phar install` command to install it:
-
-```json
-{
-    "require": {
-        "jakub-onderka/php-console-highlighter": "0.*"
-    }
-}
-```
-
-Usage
--------
-```php
-getWholeFile($fileContent);
-```
-
-------
-
-[![Downloads this Month](https://img.shields.io/packagist/dm/jakub-onderka/php-console-highlighter.svg)](https://packagist.org/packages/jakub-onderka/php-console-highlighter)
-[![Build Status](https://travis-ci.org/JakubOnderka/PHP-Console-Highlighter.svg?branch=master)](https://travis-ci.org/JakubOnderka/PHP-Console-Highlighter)
-[![License](https://poser.pugx.org/jakub-onderka/php-console-highlighter/license.svg)](https://packagist.org/packages/jakub-onderka/php-console-highlighter)
diff --git a/vendor/jakub-onderka/php-console-highlighter/build.xml b/vendor/jakub-onderka/php-console-highlighter/build.xml
deleted file mode 100644
index d656ea9d..00000000
--- a/vendor/jakub-onderka/php-console-highlighter/build.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-    
-    
-        
-    
-
-    
-        
-    
-
-    
-        
-    
-
-    
-        
-    
-
-    
-    
-
-    
-        
-    
-
-    
-        
-    
-
-    
-    
-        
-    
-
-    
-        
-            
-            
-            
-        
-    
-
-    
-        
-            
-            
-            
-        
-    
-
-    
-        
-
-        
-            
-            
-            
-            
-            
-        
-    
-
-    
-        
-
-        
-            
-            
-            
-            
-        
-    
-
-    
-        
-        
-        
-        
-
-        
-            
-            
-            
-            
-            
-            
-        
-    
-
-    
-
-
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/composer.json b/vendor/jakub-onderka/php-console-highlighter/composer.json
deleted file mode 100644
index 21c29f71..00000000
--- a/vendor/jakub-onderka/php-console-highlighter/composer.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-    "name": "jakub-onderka/php-console-highlighter",
-    "description": "Highlight PHP code in terminal",
-    "type": "library",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "Jakub Onderka",
-            "email": "acci@acci.cz",
-            "homepage": "http://www.acci.cz/"
-        }
-    ],
-    "autoload": {
-        "psr-4": {"JakubOnderka\\PhpConsoleHighlighter\\": "src/"}
-    },
-    "require": {
-        "php": ">=5.4.0",
-        "ext-tokenizer": "*",
-        "jakub-onderka/php-console-color": "~0.2"
-    },
-    "require-dev": {
-        "phpunit/phpunit": "~4.0",
-        "jakub-onderka/php-parallel-lint": "~1.0",
-        "jakub-onderka/php-var-dump-check": "~0.1",
-        "squizlabs/php_codesniffer": "~1.5",
-        "jakub-onderka/php-code-style": "~1.0"
-    }
-}
diff --git a/vendor/jakub-onderka/php-console-highlighter/examples/snippet.php b/vendor/jakub-onderka/php-console-highlighter/examples/snippet.php
deleted file mode 100644
index 1bf6ac3b..00000000
--- a/vendor/jakub-onderka/php-console-highlighter/examples/snippet.php
+++ /dev/null
@@ -1,10 +0,0 @@
-getCodeSnippet($fileContent, 3);
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php b/vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php
deleted file mode 100644
index 2a023d80..00000000
--- a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php
+++ /dev/null
@@ -1,10 +0,0 @@
-getWholeFile($fileContent);
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php b/vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php
deleted file mode 100644
index f9178f2d..00000000
--- a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php
+++ /dev/null
@@ -1,10 +0,0 @@
-getWholeFileWithLineNumbers($fileContent);
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/phpunit.xml b/vendor/jakub-onderka/php-console-highlighter/phpunit.xml
deleted file mode 100644
index 9c653a68..00000000
--- a/vendor/jakub-onderka/php-console-highlighter/phpunit.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-    
-        
-            tests
-        
-    
-
-    
-    
-        
-            vendor
-        
-    
-
diff --git a/vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php b/vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php
deleted file mode 100644
index 47ce30d2..00000000
--- a/vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php
+++ /dev/null
@@ -1,263 +0,0 @@
- 'red',
-        self::TOKEN_COMMENT => 'yellow',
-        self::TOKEN_KEYWORD => 'green',
-        self::TOKEN_DEFAULT => 'default',
-        self::TOKEN_HTML => 'cyan',
-
-        self::ACTUAL_LINE_MARK  => 'red',
-        self::LINE_NUMBER => 'dark_gray',
-    );
-
-    /**
-     * @param ConsoleColor $color
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     */
-    public function __construct(ConsoleColor $color)
-    {
-        $this->color = $color;
-
-        foreach ($this->defaultTheme as $name => $styles) {
-            if (!$this->color->hasTheme($name)) {
-                $this->color->addTheme($name, $styles);
-            }
-        }
-    }
-
-    /**
-     * @param string $source
-     * @param int $lineNumber
-     * @param int $linesBefore
-     * @param int $linesAfter
-     * @return string
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function getCodeSnippet($source, $lineNumber, $linesBefore = 2, $linesAfter = 2)
-    {
-        $tokenLines = $this->getHighlightedLines($source);
-
-        $offset = $lineNumber - $linesBefore - 1;
-        $offset = max($offset, 0);
-        $length = $linesAfter + $linesBefore + 1;
-        $tokenLines = array_slice($tokenLines, $offset, $length, $preserveKeys = true);
-
-        $lines = $this->colorLines($tokenLines);
-
-        return $this->lineNumbers($lines, $lineNumber);
-    }
-
-    /**
-     * @param string $source
-     * @return string
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function getWholeFile($source)
-    {
-        $tokenLines = $this->getHighlightedLines($source);
-        $lines = $this->colorLines($tokenLines);
-        return implode(PHP_EOL, $lines);
-    }
-
-    /**
-     * @param string $source
-     * @return string
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function getWholeFileWithLineNumbers($source)
-    {
-        $tokenLines = $this->getHighlightedLines($source);
-        $lines = $this->colorLines($tokenLines);
-        return $this->lineNumbers($lines);
-    }
-
-    /**
-     * @param string $source
-     * @return array
-     */
-    private function getHighlightedLines($source)
-    {
-        $source = str_replace(array("\r\n", "\r"), "\n", $source);
-        $tokens = $this->tokenize($source);
-        return $this->splitToLines($tokens);
-    }
-
-    /**
-     * @param string $source
-     * @return array
-     */
-    private function tokenize($source)
-    {
-        $tokens = token_get_all($source);
-
-        $output = array();
-        $currentType = null;
-        $buffer = '';
-
-        foreach ($tokens as $token) {
-            if (is_array($token)) {
-                switch ($token[0]) {
-                    case T_WHITESPACE:
-                        break;
-
-                    case T_OPEN_TAG:
-                    case T_OPEN_TAG_WITH_ECHO:
-                    case T_CLOSE_TAG:
-                    case T_STRING:
-                    case T_VARIABLE:
-
-                    // Constants
-                    case T_DIR:
-                    case T_FILE:
-                    case T_METHOD_C:
-                    case T_DNUMBER:
-                    case T_LNUMBER:
-                    case T_NS_C:
-                    case T_LINE:
-                    case T_CLASS_C:
-                    case T_FUNC_C:
-                    case T_TRAIT_C:
-                        $newType = self::TOKEN_DEFAULT;
-                        break;
-
-                    case T_COMMENT:
-                    case T_DOC_COMMENT:
-                        $newType = self::TOKEN_COMMENT;
-                        break;
-
-                    case T_ENCAPSED_AND_WHITESPACE:
-                    case T_CONSTANT_ENCAPSED_STRING:
-                        $newType = self::TOKEN_STRING;
-                        break;
-
-                    case T_INLINE_HTML:
-                        $newType = self::TOKEN_HTML;
-                        break;
-
-                    default:
-                        $newType = self::TOKEN_KEYWORD;
-                }
-            } else {
-                $newType = $token === '"' ? self::TOKEN_STRING : self::TOKEN_KEYWORD;
-            }
-
-            if ($currentType === null) {
-                $currentType = $newType;
-            }
-
-            if ($currentType !== $newType) {
-                $output[] = array($currentType, $buffer);
-                $buffer = '';
-                $currentType = $newType;
-            }
-
-            $buffer .= is_array($token) ? $token[1] : $token;
-        }
-
-        if (isset($newType)) {
-            $output[] = array($newType, $buffer);
-        }
-
-        return $output;
-    }
-
-    /**
-     * @param array $tokens
-     * @return array
-     */
-    private function splitToLines(array $tokens)
-    {
-        $lines = array();
-
-        $line = array();
-        foreach ($tokens as $token) {
-            foreach (explode("\n", $token[1]) as $count => $tokenLine) {
-                if ($count > 0) {
-                    $lines[] = $line;
-                    $line = array();
-                }
-
-                if ($tokenLine === '') {
-                    continue;
-                }
-
-                $line[] = array($token[0], $tokenLine);
-            }
-        }
-
-        $lines[] = $line;
-
-        return $lines;
-    }
-
-    /**
-     * @param array $tokenLines
-     * @return array
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    private function colorLines(array $tokenLines)
-    {
-        $lines = array();
-        foreach ($tokenLines as $lineCount => $tokenLine) {
-            $line = '';
-            foreach ($tokenLine as $token) {
-                list($tokenType, $tokenValue) = $token;
-                if ($this->color->hasTheme($tokenType)) {
-                    $line .= $this->color->apply($tokenType, $tokenValue);
-                } else {
-                    $line .= $tokenValue;
-                }
-            }
-            $lines[$lineCount] = $line;
-        }
-
-        return $lines;
-    }
-
-    /**
-     * @param array $lines
-     * @param null|int $markLine
-     * @return string
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     */
-    private function lineNumbers(array $lines, $markLine = null)
-    {
-        end($lines);
-        $lineStrlen = strlen(key($lines) + 1);
-
-        $snippet = '';
-        foreach ($lines as $i => $line) {
-            if ($markLine !== null) {
-                $snippet .= ($markLine === $i + 1 ? $this->color->apply(self::ACTUAL_LINE_MARK, '  > ') : '    ');
-            }
-
-            $snippet .= $this->color->apply(self::LINE_NUMBER, str_pad($i + 1, $lineStrlen, ' ', STR_PAD_LEFT) . '| ');
-            $snippet .= $line . PHP_EOL;
-        }
-
-        return $snippet;
-    }
-}
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php b/vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php
deleted file mode 100644
index 187beb67..00000000
--- a/vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php
+++ /dev/null
@@ -1,274 +0,0 @@
-createMock('\JakubOnderka\PhpConsoleColor\ConsoleColor')
-            : $this->getMock('\JakubOnderka\PhpConsoleColor\ConsoleColor');
-
-        $mock->expects($this->any())
-            ->method('apply')
-            ->will($this->returnCallback(function ($style, $text) {
-                return "<$style>$text";
-            }));
-
-        $mock->expects($this->any())
-            ->method('hasTheme')
-            ->will($this->returnValue(true));
-
-        return $mock;
-    }
-
-    protected function setUp()
-    {
-        $this->uut = new Highlighter($this->getConsoleColorMock());
-    }
-
-    protected function compare($original, $expected)
-    {
-        $output = $this->uut->getWholeFile($original);
-        $this->assertEquals($expected, $output);
-    }
-
-    public function testVariable()
-    {
-        $this->compare(
-            <<
-echo \$a;
-EOL
-        );
-    }
-
-    public function testInteger()
-    {
-        $this->compare(
-            <<
-echo 43;
-EOL
-        );
-    }
-
-    public function testFloat()
-    {
-        $this->compare(
-            <<
-echo 43.3;
-EOL
-        );
-    }
-
-    public function testHex()
-    {
-        $this->compare(
-            <<
-echo 0x43;
-EOL
-        );
-    }
-
-    public function testBasicFunction()
-    {
-        $this->compare(
-            <<
-function plus(\$a, \$b) {
-    return \$a + \$b;
-}
-EOL
-        );
-    }
-
-    public function testStringNormal()
-    {
-        $this->compare(
-            <<
-echo 'Ahoj světe';
-EOL
-        );
-    }
-
-    public function testStringDouble()
-    {
-        $this->compare(
-            <<
-echo "Ahoj světe";
-EOL
-        );
-    }
-
-    public function testInstanceof()
-    {
-        $this->compare(
-            <<
-\$a instanceof stdClass;
-EOL
-        );
-    }
-
-    /*
-     * Constants
-     */
-    public function testConstant()
-    {
-        $constants = array(
-            '__FILE__',
-            '__LINE__',
-            '__CLASS__',
-            '__FUNCTION__',
-            '__METHOD__',
-            '__TRAIT__',
-            '__DIR__',
-            '__NAMESPACE__'
-        );
-
-        foreach ($constants as $constant) {
-            $this->compare(
-                <<
-$constant;
-EOL
-            );
-        }
-    }
-
-    /*
-     * Comments
-     */
-    public function testComment()
-    {
-        $this->compare(
-            <<
-/* Ahoj */
-EOL
-        );
-    }
-
-    public function testDocComment()
-    {
-        $this->compare(
-            <<
-/** Ahoj */
-EOL
-        );
-    }
-
-    public function testInlineComment()
-    {
-        $this->compare(
-            <<
-// Ahoj
-EOL
-        );
-    }
-
-    public function testHashComment()
-    {
-        $this->compare(
-            <<
-# Ahoj
-EOL
-        );
-    }
-
-    public function testEmpty()
-    {
-        $this->compare(
-            ''
-            ,
-            ''
-        );
-    }
-
-    public function testWhitespace()
-    {
-        $this->compare(
-            ' '
-            ,
-            ' '
-        );
-    }
-}
diff --git a/vendor/knplabs/github-api/.editorconfig b/vendor/knplabs/github-api/.editorconfig
deleted file mode 100644
index ed1247ac..00000000
--- a/vendor/knplabs/github-api/.editorconfig
+++ /dev/null
@@ -1,13 +0,0 @@
-root = true
-
-[*]
-charset = utf-8
-end_of_line = lf
-insert_final_newline = true
-indent_style = space
-indent_size = 4
-trim_trailing_whitespace = true
-
-[*.yml]
-indent_style = space
-indent_size = 2
diff --git a/vendor/knplabs/github-api/.php_cs b/vendor/knplabs/github-api/.php_cs
deleted file mode 100644
index 83782b0f..00000000
--- a/vendor/knplabs/github-api/.php_cs
+++ /dev/null
@@ -1,14 +0,0 @@
-in(__DIR__);
-
-$config = PhpCsFixer\Config::create()
-    ->setRiskyAllowed(true)
-    ->setRules([
-
-    ])
-    ->setFinder($finder)
-;
-
-return $config;
diff --git a/vendor/knplabs/github-api/.styleci.yml b/vendor/knplabs/github-api/.styleci.yml
deleted file mode 100644
index 504456e7..00000000
--- a/vendor/knplabs/github-api/.styleci.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-preset: recommended
-
-disabled:
-  - align_double_arrow
-  - no_multiline_whitespace_before_semicolons
diff --git a/vendor/knplabs/github-api/CHANGELOG-3.X.md b/vendor/knplabs/github-api/CHANGELOG-3.X.md
new file mode 100644
index 00000000..8155111b
--- /dev/null
+++ b/vendor/knplabs/github-api/CHANGELOG-3.X.md
@@ -0,0 +1,114 @@
+# Changelog
+
+## 3.5.1
+
+### Fixed
+- Boolean private needed to create private repo! ([mruell](https://github.com/mruell)) [#1051](https://github.com/KnpLabs/php-github-api/issues/1051)
+
+## 3.5.0
+
+### Added
+- added support for psr\cache 3.0  ([rconfig](https://github.com/rconfig)) [#1046](https://github.com/KnpLabs/php-github-api/issues/1046)
+- Symfony: allow deprecation-contracts version 3 ([glaubinix](https://github.com/glaubinix)) [#1049](https://github.com/KnpLabs/php-github-api/issues/1049)
+
+### Changed
+- Fix internal doc link ([staudenmeir](https://github.com/staudenmeir)) [#1044](https://github.com/KnpLabs/php-github-api/issues/1044)
+
+### Fixed
+- Fix Client URL Prepending For GraphQL Endpoint on Enterprise ([asher-goldberg](https://github.com/asher-goldberg), [acrobat](https://github.com/acrobat)) [#1048](https://github.com/KnpLabs/php-github-api/issues/1048)
+
+## 3.4.0
+
+### Added
+- Add create a repository using a template endpoint ([martinbean](https://github.com/martinbean)) [#994](https://github.com/KnpLabs/php-github-api/issues/994)
+- Allow fetching repo readme for a specific ref ([bery](https://github.com/bery)) [#1019](https://github.com/KnpLabs/php-github-api/issues/1019)
+- allow assigning role to organisation members ([luceos](https://github.com/luceos)) [#1018](https://github.com/KnpLabs/php-github-api/issues/1018)
+- Branch lists . ( ? query  per_page) ([pitonic](https://github.com/pitonic)) [#1020](https://github.com/KnpLabs/php-github-api/issues/1020)
+- Php8.1 support ([acrobat](https://github.com/acrobat)) [#1025](https://github.com/KnpLabs/php-github-api/issues/1025)
+- Allow psr/cache 2.0 as well as 1.0 ([johnnoel](https://github.com/johnnoel)) [#1029](https://github.com/KnpLabs/php-github-api/issues/1029)
+- adding code_with_match (#1024) ([QuentinRa](https://github.com/QuentinRa)) [#1031](https://github.com/KnpLabs/php-github-api/issues/1031)
+- Added dir parameter for Repo readme ([AlexandrePavy](https://github.com/AlexandrePavy)) [#1032](https://github.com/KnpLabs/php-github-api/issues/1032)
+- refs #955: deprecate Client::AUTH_* constants and replace them with AuthMethod::AUTH_* const ([ipalo](https://github.com/ipalo)) [#1036](https://github.com/KnpLabs/php-github-api/issues/1036)
+- feat: Add `visibility` option to repo create ([gerdemann](https://github.com/gerdemann)) [#1038](https://github.com/KnpLabs/php-github-api/issues/1038)
+- Feature get authenticated app ([kdaniel95](https://github.com/kdaniel95)) [#1041](https://github.com/KnpLabs/php-github-api/issues/1041)
+
+### Changed
+- Fix up typos ([dereuromark](https://github.com/dereuromark)) [#1011](https://github.com/KnpLabs/php-github-api/issues/1011)
+- Update integration authentication documentation for usage with lcobucci/jwt ^4 ([glaubinix](https://github.com/glaubinix)) [#1017](https://github.com/KnpLabs/php-github-api/issues/1017)
+- Update result_pager.md ([tomsowerby](https://github.com/tomsowerby)) [#1023](https://github.com/KnpLabs/php-github-api/issues/1023)
+- fix(doc): links to doc in CurrentUser class ([Nek-](https://github.com/Nek-)) [#1026](https://github.com/KnpLabs/php-github-api/issues/1026)
+- Fix incorrect phpdoc ([gemal](https://github.com/gemal)) [#1034](https://github.com/KnpLabs/php-github-api/issues/1034)
+
+### Fixed
+- Add accept header for creating repo from template ([davidpeach](https://github.com/davidpeach)) [#1030](https://github.com/KnpLabs/php-github-api/issues/1030)
+
+## 3.3.0
+
+### Added
+- Allow costume accept headers for GraphQL Endpoint. ([Necmttn](https://github.com/Necmttn)) [#1001](https://github.com/KnpLabs/php-github-api/issues/1001)
+- Add endpoint for approve workflow run ([Nyholm](https://github.com/Nyholm)) [#1006](https://github.com/KnpLabs/php-github-api/issues/1006)
+
+### Changed
+- Update readme and add example for different http client usage ([acrobat](https://github.com/acrobat)) [#1002](https://github.com/KnpLabs/php-github-api/issues/1002)
+- Bumped branch alias after new feature merged ([GrahamCampbell](https://github.com/GrahamCampbell)) [#1004](https://github.com/KnpLabs/php-github-api/issues/1004)
+- Add comment on AbstractApi::$perPage() ([Nyholm](https://github.com/Nyholm)) [#1007](https://github.com/KnpLabs/php-github-api/issues/1007)
+
+### Fixed
+- Fix publicKey ([Yurunsoft](https://github.com/Yurunsoft)) [#1005](https://github.com/KnpLabs/php-github-api/issues/1005)
+
+## 3.2.0
+
+### Added
+- Deprecate ResultPager::postFetch method ([acrobat](https://github.com/acrobat)) [#986](https://github.com/KnpLabs/php-github-api/issues/986)
+- Add deprecations to the PR review methods to allow cleanup ([acrobat](https://github.com/acrobat)) [#984](https://github.com/KnpLabs/php-github-api/issues/984)
+- Allow binary content downloads of assets ([acrobat](https://github.com/acrobat)) [#990](https://github.com/KnpLabs/php-github-api/issues/990)
+- Deployments: added missing 'delete deployment' endpoint ([clxmstaab](https://github.com/clxmstaab)) [#991](https://github.com/KnpLabs/php-github-api/issues/991)
+- Events list per authenticated user for all repos ([richard015ar](https://github.com/richard015ar)) [#1000](https://github.com/KnpLabs/php-github-api/issues/1000)
+
+### Changed
+- Fixed branch alias ([GrahamCampbell](https://github.com/GrahamCampbell)) [#975](https://github.com/KnpLabs/php-github-api/issues/975)
+- fix typo ([staabm](https://github.com/staabm)) [#977](https://github.com/KnpLabs/php-github-api/issues/977)
+- Improved bc check ([acrobat](https://github.com/acrobat)) [#982](https://github.com/KnpLabs/php-github-api/issues/982)
+- Correctly link to github actions docs and fix backlinks ([acrobat](https://github.com/acrobat)) [#983](https://github.com/KnpLabs/php-github-api/issues/983)
+- Add missing repo hooks documentation ([acrobat](https://github.com/acrobat)) [#987](https://github.com/KnpLabs/php-github-api/issues/987)
+- Fix incorrect public key documentation ([acrobat](https://github.com/acrobat)) [#988](https://github.com/KnpLabs/php-github-api/issues/988)
+- Fixed incorrect parameters in apps docs ([acrobat](https://github.com/acrobat)) [#989](https://github.com/KnpLabs/php-github-api/issues/989)
+- phpdoc: fix typo ([clxmstaab](https://github.com/clxmstaab)) [#993](https://github.com/KnpLabs/php-github-api/issues/993)
+- Fix upmerged usage of deprecated phpunit assert ([acrobat](https://github.com/acrobat)) [#995](https://github.com/KnpLabs/php-github-api/issues/995)
+- Fix typo ([romainneutron](https://github.com/romainneutron)) [#997](https://github.com/KnpLabs/php-github-api/issues/997)
+
+### Fixed
+- Deployments: use proper media-type for in_progress/queued, inactive state ([staabm](https://github.com/staabm)) [#979](https://github.com/KnpLabs/php-github-api/issues/979)
+- [952] doc - Specify lcobucci/jwt version, fix deprecation ([amacrobert-meq](https://github.com/amacrobert-meq), [acrobat](https://github.com/acrobat)) [#953](https://github.com/KnpLabs/php-github-api/issues/953)
+- Replace deprecated organization team repository add/remove urls ([acrobat](https://github.com/acrobat)) [#985](https://github.com/KnpLabs/php-github-api/issues/985)
+- fixed php warning in GithubExceptionThrower ([clxmstaab](https://github.com/clxmstaab), [acrobat](https://github.com/acrobat)) [#992](https://github.com/KnpLabs/php-github-api/issues/992)
+
+## 3.1.0
+
+### Added
+- Add workflow dispatch and allow workflow names. ([fodinabor](https://github.com/fodinabor)) [#969](https://github.com/KnpLabs/php-github-api/issues/969)
+
+### Changed
+- Re-enable roave bc check for 3.x ([acrobat](https://github.com/acrobat)) [#958](https://github.com/KnpLabs/php-github-api/issues/958)
+- Cleanup 3.0.0 changelog ([acrobat](https://github.com/acrobat)) [#957](https://github.com/KnpLabs/php-github-api/issues/957)
+- Update new GitHub doc links in repo. ([fodinabor](https://github.com/fodinabor)) [#974](https://github.com/KnpLabs/php-github-api/issues/974)
+
+### Fixed
+- Add accept header for the checks API ([Agares](https://github.com/Agares)) [#968](https://github.com/KnpLabs/php-github-api/issues/968)
+- ExceptionThrower: adjust rate limit detection ([glaubinix](https://github.com/glaubinix)) [#959](https://github.com/KnpLabs/php-github-api/issues/959)
+
+## 3.0.0
+
+### Added
+- Switch to PSR18 client implementation and bump httplug minimum version to ^2.0 ([GrahamCampbell](https://github.com/GrahamCampbell)) [#885](https://github.com/KnpLabs/php-github-api/issues/885)
+- Switch to PSR-17 and remove deprecated code ([GrahamCampbell](https://github.com/GrahamCampbell)) [#888](https://github.com/KnpLabs/php-github-api/issues/888)
+- Allow PHP8 ([acrobat](https://github.com/acrobat)) [#934](https://github.com/KnpLabs/php-github-api/issues/934)
+- [3.x] Make PHP 7.2.5 the minimum version ([GrahamCampbell](https://github.com/GrahamCampbell)) [#942](https://github.com/KnpLabs/php-github-api/issues/942)
+- [3.x] Re-worked pagination to not mutate the api classes ([GrahamCampbell](https://github.com/GrahamCampbell)) [#907](https://github.com/KnpLabs/php-github-api/issues/907) & ([acrobat](https://github.com/acrobat)) [#956](https://github.com/KnpLabs/php-github-api/issues/956)
+- Prepare 3.0 release and remove remaining deprecated code ([acrobat](https://github.com/acrobat)) [#948](https://github.com/KnpLabs/php-github-api/issues/948)
+
+### Changed
+- Remove BC check on 3.x ([GrahamCampbell](https://github.com/GrahamCampbell)) [#900](https://github.com/KnpLabs/php-github-api/issues/900)
+- [3.x] Fix the HTTP methods client ([GrahamCampbell](https://github.com/GrahamCampbell)) [#910](https://github.com/KnpLabs/php-github-api/issues/910)
+- fix typo ([michielkempen](https://github.com/michielkempen)) [#920](https://github.com/KnpLabs/php-github-api/issues/920)
+- [3.x] Added some additional scalar types and return types ([GrahamCampbell](https://github.com/GrahamCampbell)) [#949](https://github.com/KnpLabs/php-github-api/issues/949)
diff --git a/vendor/knplabs/github-api/CHANGELOG.md b/vendor/knplabs/github-api/CHANGELOG.md
index 0424c953..47980eff 100644
--- a/vendor/knplabs/github-api/CHANGELOG.md
+++ b/vendor/knplabs/github-api/CHANGELOG.md
@@ -1,6 +1,173 @@
-# Change Log
+# Changelog
 
-The change log describes what is "Added", "Removed", "Changed" or "Fixed" between each release.
+## 2.20.0
+
+### Added
+- Deployments: added missing 'delete deployment' endpoint ([clxmstaab](https://github.com/clxmstaab)) [#991](https://github.com/KnpLabs/php-github-api/issues/991)
+
+### Changed
+- phpdoc: fix typo ([clxmstaab](https://github.com/clxmstaab)) [#993](https://github.com/KnpLabs/php-github-api/issues/993)
+
+### Fixed
+- fixed php warning in GithubExceptionThrower ([clxmstaab](https://github.com/clxmstaab), [acrobat](https://github.com/acrobat)) [#992](https://github.com/KnpLabs/php-github-api/issues/992)
+
+## 2.19.2
+
+### Changed
+- Improved bc check ([acrobat](https://github.com/acrobat)) [#982](https://github.com/KnpLabs/php-github-api/issues/982)
+- Correctly link to github actions docs and fix backlinks ([acrobat](https://github.com/acrobat)) [#983](https://github.com/KnpLabs/php-github-api/issues/983)
+- Add missing repo hooks documentation ([acrobat](https://github.com/acrobat)) [#987](https://github.com/KnpLabs/php-github-api/issues/987)
+- Fix incorrect public key documentation ([acrobat](https://github.com/acrobat)) [#988](https://github.com/KnpLabs/php-github-api/issues/988)
+- Fixed incorrect parameters in apps docs ([acrobat](https://github.com/acrobat)) [#989](https://github.com/KnpLabs/php-github-api/issues/989)
+
+### Fixed
+- Deployments: use proper media-type for in_progress/queued, inactive state ([staabm](https://github.com/staabm)) [#979](https://github.com/KnpLabs/php-github-api/issues/979)
+- backported #979 into 2.x ([staabm](https://github.com/staabm)) [#981](https://github.com/KnpLabs/php-github-api/issues/981)
+- [952] doc - Specify lcobucci/jwt version, fix deprecation ([amacrobert-meq](https://github.com/amacrobert-meq), [acrobat](https://github.com/acrobat)) [#953](https://github.com/KnpLabs/php-github-api/issues/953)
+- Replace deprecated organization team repository add/remove urls ([acrobat](https://github.com/acrobat)) [#985](https://github.com/KnpLabs/php-github-api/issues/985)
+
+## 2.19.1
+
+### Fixed
+- ExceptionThrower: adjust rate limit detection ([glaubinix](https://github.com/glaubinix)) [#959](https://github.com/KnpLabs/php-github-api/issues/959)
+
+## 2.19.0
+
+### Added
+- Mark some classes as final ([acrobat](https://github.com/acrobat)) [#954](https://github.com/KnpLabs/php-github-api/issues/954)
+
+## 2.18.0
+
+### Added
+- Add parameters to PullRequest commits method ([seanmtaylor](https://github.com/seanmtaylor)) [#938](https://github.com/KnpLabs/php-github-api/issues/938)
+- Actions (#872) ([lexor](https://github.com/lexor)) [#939](https://github.com/KnpLabs/php-github-api/issues/939)
+- automated security endpoints (#868) ([lexor](https://github.com/lexor)) [#944](https://github.com/KnpLabs/php-github-api/issues/944)
+
+### Changed
+- Update apps.md ([clarkeash](https://github.com/clarkeash)) [#936](https://github.com/KnpLabs/php-github-api/issues/936)
+
+### Fixed
+- Throw exception for graphql errors ([acrobat](https://github.com/acrobat)) [#941](https://github.com/KnpLabs/php-github-api/issues/941)
+
+## 2.17.0
+
+### Added
+
+- Improve checks api implementation ([acrobat](https://github.com/acrobat)) [#932](https://github.com/KnpLabs/php-github-api/issues/932)
+
+### Changed
+- Missing auth method in list of omitted passwords. ([tobyS](https://github.com/tobyS)) [#933](https://github.com/KnpLabs/php-github-api/issues/933)
+- Improve github actions setup ([acrobat](https://github.com/acrobat)) [#935](https://github.com/KnpLabs/php-github-api/issues/935)
+
+## 2.16.0
+
+### Added
+- Add support for SSO errors coming from the API ([eiriksm](https://github.com/eiriksm)) [#913](https://github.com/KnpLabs/php-github-api/issues/913)
+- Add OutsideCollaborators api ([Matth--](https://github.com/Matth--)) [#925](https://github.com/KnpLabs/php-github-api/issues/925)
+- Add support for creating a repo dispatch event ([Nyholm](https://github.com/Nyholm)) [#931](https://github.com/KnpLabs/php-github-api/issues/931)
+
+### Changed
+- Fix: Wrong PHPDoc description ([OskarStark](https://github.com/OskarStark)) [#922](https://github.com/KnpLabs/php-github-api/issues/922)
+- Adding GitHub authentication to GraphQL documentation ([legionth](https://github.com/legionth)) [#927](https://github.com/KnpLabs/php-github-api/issues/927)
+
+### Fixed
+- Use RFC3986 for building URI query strings ([GrahamCampbell](https://github.com/GrahamCampbell)) [#908](https://github.com/KnpLabs/php-github-api/issues/908)
+- Fix call to test a webhook method ([morrislaptop](https://github.com/morrislaptop)) [#915](https://github.com/KnpLabs/php-github-api/issues/915)
+
+## 2.15.0
+
+### Added
+- Prepare deprecation of authentication methods ([acrobat](https://github.com/acrobat)) [#870](https://github.com/KnpLabs/php-github-api/issues/870)
+- Add Support For GitData Reference Matching Methods ([nickpoulos](https://github.com/nickpoulos)) [#875](https://github.com/KnpLabs/php-github-api/issues/875)
+- Make invalid request error more clear ([acrobat](https://github.com/acrobat)) [#880](https://github.com/KnpLabs/php-github-api/issues/880)
+- Show user by ID ([genintho](https://github.com/genintho)) [#894](https://github.com/KnpLabs/php-github-api/issues/894)
+- add additional check run methods ([bobeagan](https://github.com/bobeagan), [acrobat](https://github.com/acrobat)) [#865](https://github.com/KnpLabs/php-github-api/issues/865)
+
+### Changed
+- Added phpstan ([clxkoders](https://github.com/clxkoders)) [#871](https://github.com/KnpLabs/php-github-api/issues/871)
+- Increase phpstan to level 4 ([acrobat](https://github.com/acrobat)) [#874](https://github.com/KnpLabs/php-github-api/issues/874)
+- [Documentation] Add Missing Children to Pull Request Index ([jimlind](https://github.com/jimlind)) [#877](https://github.com/KnpLabs/php-github-api/issues/877)
+- [Documentation] Include links to Pull Request Children on Pull Request Doc. ([jimlind](https://github.com/jimlind)) [#878](https://github.com/KnpLabs/php-github-api/issues/878)
+- Fix typo in /lib/Github/Api/RateLimit.php ([yoonper](https://github.com/yoonper)) [#886](https://github.com/KnpLabs/php-github-api/issues/886)
+- Don't use deprecated auth in examples ([GrahamCampbell](https://github.com/GrahamCampbell)) [#892](https://github.com/KnpLabs/php-github-api/issues/892)
+- Removed shadow-cat ([GrahamCampbell](https://github.com/GrahamCampbell)) [#893](https://github.com/KnpLabs/php-github-api/issues/893)
+- Don't urlencode integer values ([acrobat](https://github.com/acrobat)) [#895](https://github.com/KnpLabs/php-github-api/issues/895)
+- phpstan level 6 fixes ([acrobat](https://github.com/acrobat), [GrahamCampbell](https://github.com/GrahamCampbell)) [#897](https://github.com/KnpLabs/php-github-api/issues/897)
+
+### Fixed
+- fix: use new media type for branch protections ([iBotPeaches](https://github.com/iBotPeaches)) [#881](https://github.com/KnpLabs/php-github-api/issues/881)
+- Added missing 'machine-man-preview' accept headers ([vovayatsyuk](https://github.com/vovayatsyuk)) [#883](https://github.com/KnpLabs/php-github-api/issues/883)
+- Fix broken roave/bc-check test ([acrobat](https://github.com/acrobat)) [#890](https://github.com/KnpLabs/php-github-api/issues/890)
+- Fixed incorrect MissingArgumentException parent constructor values ([acrobat](https://github.com/acrobat)) [#896](https://github.com/KnpLabs/php-github-api/issues/896)
+- Added AUTH_ACCESS_TOKEN to allowed methods ([GrahamCampbell](https://github.com/GrahamCampbell)) [#899](https://github.com/KnpLabs/php-github-api/issues/899)
+
+## 2.14.0
+
+### Added
+- Replace deprecated Organization\Teams api calls ([lolos](https://github.com/lolos)) [#860](https://github.com/KnpLabs/php-github-api/issues/860)
+- Add sort and direction for fetching organizations repos ([pgrimaud](https://github.com/pgrimaud)) [#863](https://github.com/KnpLabs/php-github-api/issues/863)
+- Added parameters to Repo/milestones() method ([dereuromark](https://github.com/dereuromark)) [#856](https://github.com/KnpLabs/php-github-api/issues/856)
+
+### Fixed 
+
+- Remove incorrect MissingArgumentException in Labels api ([bobeagan](https://github.com/bobeagan)) [#861](https://github.com/KnpLabs/php-github-api/issues/861)
+
+### Changed
+- Fix typos in test/Github/Tests/Api/RepoTest.php ([pgrimaud](https://github.com/pgrimaud)) [#862](https://github.com/KnpLabs/php-github-api/issues/862)
+- further detail on ResultPager parameters ([sepiariver](https://github.com/sepiariver)) [#843](https://github.com/KnpLabs/php-github-api/issues/843)
+- fix phpdoc in labels api ([staabm](https://github.com/staabm)) [#854](https://github.com/KnpLabs/php-github-api/issues/854)
+- fix api link in Issue\Labels::add() phpdoc ([staabm](https://github.com/staabm)) [#853](https://github.com/KnpLabs/php-github-api/issues/853)
+
+## 2.13.0
+
+### Added
+
+- Support the new authorizations API
+- Repo community profile API endpoint
+- Support for draft PRs
+- Missing Apps endpoints
+- Test against php 7.4
+
+### Changed
+
+- Allow create & remove to set and remove requests for teams
+
+## 2.12.1
+
+### Fixed
+
+- Fixed bug in handling of validation errors
+- Updated docs to not use deprected string parameter in issue assignee call
+
+## 2.12.0
+
+### Added
+
+- Support for HTTPlug 2.0 and PSR-18
+- Add support for GitHub Checks
+- Add support for GitHub Pages
+- Add support to update a Pull Request Review
+- Add support to get specific revision of a gist
+- Added a 4th argument `$parameters` to `PullRequest::files()`
+- Added `Accept` headers to Github Apps 
+
+### Removed
+
+- Active support for HHVM
+- Support for PHP <7.1
+
+### Changed
+
+- Allow tags to be created without the `Tagger` object
+- When updating DeployKeys we will first remove existing then add a new DeployKey
+
+### Fixed
+
+- In `Trees` we should check if `array_key_exists('sha', $tree)` instead of `isset` to avoid issues with `null`.  (#822)
+
+### Deprecated
+
+- Passing an integer (`$page`) as 4th arugment in `Comments::all()` is deprecated. It should be an array.
 
 ## 2.11.0
 
diff --git a/vendor/knplabs/github-api/README.md b/vendor/knplabs/github-api/README.md
index aa6bdc9b..de79112b 100644
--- a/vendor/knplabs/github-api/README.md
+++ b/vendor/knplabs/github-api/README.md
@@ -1,10 +1,9 @@
 # PHP GitHub API
 
-[![Build Status](https://travis-ci.org/KnpLabs/php-github-api.svg?branch=master)](https://travis-ci.org/KnpLabs/php-github-api)
+![Build Status](https://github.com/KnpLabs/php-github-api/actions/workflows/ci.yml/badge.svg)
 [![StyleCI](https://styleci.io/repos/3948501/shield?style=flat)](https://styleci.io/repos/3948501)
 [![Latest Stable Version](https://poser.pugx.org/knplabs/github-api/v/stable)](https://packagist.org/packages/knplabs/github-api)
 [![Total Downloads](https://poser.pugx.org/knplabs/github-api/downloads)](https://packagist.org/packages/knplabs/github-api)
-[![Latest Unstable Version](https://poser.pugx.org/knplabs/github-api/v/unstable)](https://packagist.org/packages/knplabs/github-api)
 [![Monthly Downloads](https://poser.pugx.org/knplabs/github-api/d/monthly)](https://packagist.org/packages/knplabs/github-api)
 [![Daily Downloads](https://poser.pugx.org/knplabs/github-api/d/daily)](https://packagist.org/packages/knplabs/github-api)
 
@@ -19,25 +18,46 @@ Uses [GitHub API v3](http://developer.github.com/v3/) & supports [GitHub API v4]
 
 ## Requirements
 
-* PHP >= 5.6
-* A [HTTP client](https://packagist.org/providers/php-http/client-implementation)
-* A [PSR-7 implementation](https://packagist.org/providers/psr/http-message-implementation)
-* (optional) PHPUnit to run tests.
+* PHP >= 7.2
+* A [PSR-17 implementation](https://packagist.org/providers/psr/http-factory-implementation)
+* A [PSR-18 implementation](https://packagist.org/providers/psr/http-client-implementation)
 
-## Install
+## Quick install
 
-Via Composer:
+Via [Composer](https://getcomposer.org).
+
+This command will get you up and running quickly with a Guzzle HTTP client.
 
 ```bash
-$ composer require knplabs/github-api php-http/guzzle6-adapter "^1.1"
+composer require knplabs/github-api:^3.0 guzzlehttp/guzzle:^7.0.1 http-interop/http-factory-guzzle:^1.0
 ```
 
-Why `php-http/guzzle6-adapter`? We are decoupled from any HTTP messaging client with help by [HTTPlug](http://httplug.io/). Read about clients in our [docs](doc/customize.md).
+## Advanced install
 
+We are decoupled from any HTTP messaging client with help by [HTTPlug](https://httplug.io). 
 
-## Using Laravel?
+### Using a different http client
 
-[Laravel GitHub](https://github.com/GrahamCampbell/Laravel-GitHub) by [Graham Campbell](https://github.com/GrahamCampbell) might interest you.
+```bash
+composer require knplabs/github-api:^3.0 symfony/http-client nyholm/psr7
+```
+
+To set up the Github client with this HTTP client
+
+```php
+use Github\Client;
+use Symfony\Component\HttpClient\HttplugClient;
+
+$client = Client::createWithHttpClient(new HttplugClient());
+```
+
+Read more about [using different clients in our docs](doc/customize.md).
+
+## Framework integrations
+
+### Laravel
+
+To integrate this library in laravel [Graham Campbell](https://github.com/GrahamCampbell) created [graham-campbell/github](https://github.com/GrahamCampbell/Laravel-GitHub). See the [installation instructions](https://github.com/GrahamCampbell/Laravel-GitHub#installation) to get started in laravel.
 
 ## Basic usage of `php-github-api` client
 
@@ -51,7 +71,7 @@ $client = new \Github\Client();
 $repositories = $client->api('user')->repositories('ornicar');
 ```
 
-From `$client` object, you can access to all GitHub.
+From `$client` object, you have access to all available GitHub api endpoints.
 
 ## Cache usage
 
@@ -91,21 +111,24 @@ See the [`doc` directory](doc/) for more detailed documentation.
 
 `php-github-api` is licensed under the MIT License - see the LICENSE file for details
 
-## Credits
+## Maintainers
 
-### Sponsored by
+Please read [this post](https://knplabs.com/en/blog/news-for-our-foss-projects-maintenance) first.
 
-[![KnpLabs Team](http://knplabs.com/front/images/knp-labs-logo.png)](http://knplabs.com)
+This library is maintained by the following people (alphabetically sorted) :
+- [@acrobat](https://github.com/acrobat)
+- [@Nyholm](https://github.com/Nyholm)
 
-### Contributors
+## Contributors
 
-- Thanks to [Thibault Duplessis aka. ornicar](http://github.com/ornicar) for his first version of this library.
-- Thanks to [Joseph Bielawski aka. stloyd](http://github.com/stloyd) for his contributions and support.
-- Thanks to [noloh](http://github.com/noloh) for his contribution on the Object API.
-- Thanks to [bshaffer](http://github.com/bshaffer) for his contribution on the Repo API.
-- Thanks to [Rolf van de Krol](http://github.com/rolfvandekrol) for his countless contributions.
-- Thanks to [Nicolas Pastorino](http://github.com/jeanvoye) for his contribution on the Pull Request API.
-- Thanks to [Edoardo Rivello](http://github.com/erivello) for his contribution on the Gists API.
+- Thanks to [Thibault Duplessis aka. ornicar](https://github.com/ornicar) for his first version of this library.
+- Thanks to [Joseph Bielawski aka. stloyd](https://github.com/stloyd) for his contributions and support.
+- Thanks to [noloh](https://github.com/noloh) for his contribution on the Object API.
+- Thanks to [bshaffer](https://github.com/bshaffer) for his contribution on the Repo API.
+- Thanks to [Rolf van de Krol](https://github.com/rolfvandekrol) for his countless contributions.
+- Thanks to [Nicolas Pastorino](https://github.com/jeanvoye) for his contribution on the Pull Request API.
+- Thanks to [Edoardo Rivello](https://github.com/erivello) for his contribution on the Gists API.
 - Thanks to [Miguel Piedrafita](https://github.com/m1guelpf) for his contribution to the v4 & Apps API.
+- Thanks to [Emre DEGER](https://github.com/lexor) for his contribution to the Actions API.
 
 Thanks to GitHub for the high quality API and documentation.
diff --git a/vendor/knplabs/github-api/UPGRADE-3.0.md b/vendor/knplabs/github-api/UPGRADE-3.0.md
new file mode 100644
index 00000000..738343d6
--- /dev/null
+++ b/vendor/knplabs/github-api/UPGRADE-3.0.md
@@ -0,0 +1,21 @@
+## UPGRADE from 2.x to 3.0
+
+### General
+
+* The `php-http/httplug` dependency requires is bumped to minimum ^2.1.
+* A client implementing `psr/http-client-implementation` is required.
+  To upgrade your application (default install) switch from guzzle 6 to guzzle 7 (or replace `php-http/guzzle6-adapter` with any `psr/http-client-implementation`), see the install instructions in the [README file](README.md)
+* All previous deprecated code in version 2 is removed.
+* The following classes are now final
+    * `Github\HttpClient\Message\ResponseMediator`
+    * `Github\HttpClient\Plugin\Authentication`
+    * `Github\HttpClient\Plugin\GithubExceptionThrower`
+    * `Github\HttpClient\Plugin\History`
+    * `Github\HttpClient\Plugin\PathPrepend`
+
+### Authentication methods
+
+* `Github\Client::AUTH_URL_TOKEN` use `Github\Client::AUTH_ACCESS_TOKEN` instead.
+* `Github\Client::AUTH_URL_CLIENT_ID` use `Github\Client::AUTH_CLIENT_ID` instead.
+* `Github\Client::AUTH_HTTP_TOKEN` use `Github\Client::AUTH_ACCESS_TOKEN` instead.
+* `Github\Client::AUTH_HTTP_PASSWORD` use `Github\Client::AUTH_ACCESS_TOKEN` instead.
diff --git a/vendor/knplabs/github-api/UPGRADE-4.0.md b/vendor/knplabs/github-api/UPGRADE-4.0.md
new file mode 100644
index 00000000..6ede78de
--- /dev/null
+++ b/vendor/knplabs/github-api/UPGRADE-4.0.md
@@ -0,0 +1,11 @@
+## UPGRADE from 3.x to 4.0
+
+### ResultPager
+
+* `\Github\ResultPagerInterface::postFetch` is deprecated, and the method will be removed from the ResultPager interface/class.
+
+### Authentication methods
+
+* `Github\Client::AUTH_CLIENT_ID` is deprecated, use `Github\AuthMethod::CLIENT_ID` instead.
+* `Github\Client::AUTH_ACCESS_TOKEN` is deprecated, use `Github\AuthMethod::ACCESS_TOKEN` instead.
+* `Github\Client::AUTH_JWT` is deprecated, use `Github\AuthMethod::JWT` instead.
diff --git a/vendor/knplabs/github-api/composer.json b/vendor/knplabs/github-api/composer.json
index 4c1fcea4..b54537bd 100644
--- a/vendor/knplabs/github-api/composer.json
+++ b/vendor/knplabs/github-api/composer.json
@@ -17,21 +17,31 @@
         }
     ],
     "require": {
-        "php": "^5.6 || ^7.0",
+        "php": "^7.2.5 || ^8.0",
+        "ext-json": "*",
+        "php-http/cache-plugin": "^1.7.1",
+        "php-http/client-common": "^2.3",
+        "php-http/discovery": "^1.12",
+        "php-http/httplug": "^2.2",
+        "php-http/multipart-stream-builder": "^1.1.2",
+        "psr/cache": "^1.0|^2.0|^3.0",
+        "psr/http-client-implementation": "^1.0",
+        "psr/http-factory-implementation": "^1.0",
         "psr/http-message": "^1.0",
-        "psr/cache": "^1.0",
-        "php-http/httplug": "^1.1",
-        "php-http/discovery": "^1.0",
-        "php-http/client-implementation": "^1.0",
-        "php-http/client-common": "^1.6",
-        "php-http/cache-plugin": "^1.4"
+        "symfony/polyfill-php80": "^1.17",
+        "symfony/deprecation-contracts": "^2.2|^3.0"
     },
     "require-dev": {
-        "phpunit/phpunit": "^5.5 || ^6.0",
-        "php-http/guzzle6-adapter": "^1.0",
-        "php-http/mock-client": "^1.0",
-        "guzzlehttp/psr7": "^1.2",
-        "cache/array-adapter": "^0.4"
+        "symfony/cache": "^5.1.8",
+        "guzzlehttp/psr7": "^1.7",
+        "http-interop/http-factory-guzzle": "^1.0",
+        "guzzlehttp/guzzle": "^7.2",
+        "php-http/mock-client": "^1.4.1",
+        "phpstan/phpstan": "^0.12.57",
+        "phpstan/extension-installer": "^1.0.5",
+        "phpstan/phpstan-deprecation-rules": "^0.12.5",
+        "phpunit/phpunit": "^8.5 || ^9.4",
+        "symfony/phpunit-bridge": "^5.2"
     },
     "autoload": {
         "psr-4": { "Github\\": "lib/Github/" }
@@ -39,11 +49,15 @@
     "autoload-dev": {
         "psr-4": { "Github\\Tests\\": "test/Github/Tests/"}
     },
-    "minimum-stability": "dev",
-    "prefer-stable": true,
     "extra": {
         "branch-alias": {
-            "dev-master": "2.11.x-dev"
+            "dev-2.x": "2.20.x-dev",
+            "dev-master": "3.4.x-dev"
+        }
+    },
+    "config": {
+        "allow-plugins": {
+            "phpstan/extension-installer": true
         }
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/AbstractApi.php b/vendor/knplabs/github-api/lib/Github/Api/AbstractApi.php
index 492e44ca..71f71cce 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/AbstractApi.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/AbstractApi.php
@@ -4,80 +4,65 @@ namespace Github\Api;
 
 use Github\Client;
 use Github\HttpClient\Message\ResponseMediator;
+use Psr\Http\Message\ResponseInterface;
 
 /**
- * Abstract class for Api classes.
- *
  * @author Joseph Bielawski 
+ * @author Graham Campbell 
  */
-abstract class AbstractApi implements ApiInterface
+abstract class AbstractApi
 {
     /**
-     * The client.
+     * The client instance.
      *
      * @var Client
      */
-    protected $client;
+    private $client;
 
     /**
-     * The requested page (GitHub pagination).
+     * The per page parameter. It is used by the ResultPager.
      *
-     * @var null|int
+     * @var int|null
      */
-    private $page;
+    private $perPage;
 
     /**
-     * Number of items per page (GitHub pagination).
+     * Create a new API instance.
      *
-     * @var null|int
-     */
-    protected $perPage;
-
-    /**
      * @param Client $client
+     *
+     * @return void
      */
     public function __construct(Client $client)
     {
         $this->client = $client;
     }
 
+    /**
+     * Get the client instance.
+     *
+     * @return Client
+     */
+    protected function getClient(): Client
+    {
+        return $this->client;
+    }
+
+    /**
+     * Get the API version.
+     *
+     * @return string
+     */
+    protected function getApiVersion(): string
+    {
+        return $this->client->getApiVersion();
+    }
+
+    /**
+     * @return $this
+     */
     public function configure()
     {
-    }
-
-    /**
-     * @return null|int
-     */
-    public function getPage()
-    {
-        return $this->page;
-    }
-
-    /**
-     * @param null|int $page
-     */
-    public function setPage($page)
-    {
-        $this->page = (null === $page ? $page : (int) $page);
-
-        return $this;
-    }
-
-    /**
-     * @return null|int
-     */
-    public function getPerPage()
-    {
-        return $this->perPage;
-    }
-
-    /**
-     * @param null|int $perPage
-     */
-    public function setPerPage($perPage)
-    {
-        $this->perPage = (null === $perPage ? $perPage : (int) $perPage);
-
         return $this;
     }
 
@@ -90,20 +75,18 @@ abstract class AbstractApi implements ApiInterface
      *
      * @return array|string
      */
-    protected function get($path, array $parameters = [], array $requestHeaders = [])
+    protected function get(string $path, array $parameters = [], array $requestHeaders = [])
     {
-        if (null !== $this->page && !isset($parameters['page'])) {
-            $parameters['page'] = $this->page;
-        }
         if (null !== $this->perPage && !isset($parameters['per_page'])) {
             $parameters['per_page'] = $this->perPage;
         }
+
         if (array_key_exists('ref', $parameters) && null === $parameters['ref']) {
             unset($parameters['ref']);
         }
 
         if (count($parameters) > 0) {
-            $path .= '?'.http_build_query($parameters);
+            $path .= '?'.http_build_query($parameters, '', '&', PHP_QUERY_RFC3986);
         }
 
         $response = $this->client->getHttpClient()->get($path, $requestHeaders);
@@ -118,17 +101,15 @@ abstract class AbstractApi implements ApiInterface
      * @param array  $parameters     HEAD parameters.
      * @param array  $requestHeaders Request headers.
      *
-     * @return \Psr\Http\Message\ResponseInterface
+     * @return ResponseInterface
      */
-    protected function head($path, array $parameters = [], array $requestHeaders = [])
+    protected function head(string $path, array $parameters = [], array $requestHeaders = []): ResponseInterface
     {
         if (array_key_exists('ref', $parameters) && null === $parameters['ref']) {
             unset($parameters['ref']);
         }
 
-        $response = $this->client->getHttpClient()->head($path.'?'.http_build_query($parameters), $requestHeaders);
-
-        return $response;
+        return $this->client->getHttpClient()->head($path.'?'.http_build_query($parameters, '', '&', PHP_QUERY_RFC3986), $requestHeaders);
     }
 
     /**
@@ -140,7 +121,7 @@ abstract class AbstractApi implements ApiInterface
      *
      * @return array|string
      */
-    protected function post($path, array $parameters = [], array $requestHeaders = [])
+    protected function post(string $path, array $parameters = [], array $requestHeaders = [])
     {
         return $this->postRaw(
             $path,
@@ -158,7 +139,7 @@ abstract class AbstractApi implements ApiInterface
      *
      * @return array|string
      */
-    protected function postRaw($path, $body, array $requestHeaders = [])
+    protected function postRaw(string $path, $body, array $requestHeaders = [])
     {
         $response = $this->client->getHttpClient()->post(
             $path,
@@ -178,7 +159,7 @@ abstract class AbstractApi implements ApiInterface
      *
      * @return array|string
      */
-    protected function patch($path, array $parameters = [], array $requestHeaders = [])
+    protected function patch(string $path, array $parameters = [], array $requestHeaders = [])
     {
         $response = $this->client->getHttpClient()->patch(
             $path,
@@ -198,7 +179,7 @@ abstract class AbstractApi implements ApiInterface
      *
      * @return array|string
      */
-    protected function put($path, array $parameters = [], array $requestHeaders = [])
+    protected function put(string $path, array $parameters = [], array $requestHeaders = [])
     {
         $response = $this->client->getHttpClient()->put(
             $path,
@@ -218,7 +199,7 @@ abstract class AbstractApi implements ApiInterface
      *
      * @return array|string
      */
-    protected function delete($path, array $parameters = [], array $requestHeaders = [])
+    protected function delete(string $path, array $parameters = [], array $requestHeaders = [])
     {
         $response = $this->client->getHttpClient()->delete(
             $path,
@@ -234,9 +215,9 @@ abstract class AbstractApi implements ApiInterface
      *
      * @param array $parameters Request parameters
      *
-     * @return null|string
+     * @return string|null
      */
-    protected function createJsonBody(array $parameters)
+    protected function createJsonBody(array $parameters): ?string
     {
         return (count($parameters) === 0) ? null : json_encode($parameters, empty($parameters) ? JSON_FORCE_OBJECT : 0);
     }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/AcceptHeaderTrait.php b/vendor/knplabs/github-api/lib/Github/Api/AcceptHeaderTrait.php
index e788fd1c..6a990a56 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/AcceptHeaderTrait.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/AcceptHeaderTrait.php
@@ -2,6 +2,8 @@
 
 namespace Github\Api;
 
+use Psr\Http\Message\ResponseInterface;
+
 /**
  * A trait to make sure we add accept headers on all requests.
  *
@@ -9,39 +11,40 @@ namespace Github\Api;
  */
 trait AcceptHeaderTrait
 {
+    /** @var string */
     protected $acceptHeaderValue;
 
-    protected function get($path, array $parameters = [], array $requestHeaders = [])
+    protected function get(string $path, array $parameters = [], array $requestHeaders = [])
     {
         return parent::get($path, $parameters, $this->mergeHeaders($requestHeaders));
     }
 
-    protected function head($path, array $parameters = [], array $requestHeaders = [])
+    protected function head(string $path, array $parameters = [], array $requestHeaders = []): ResponseInterface
     {
         return parent::head($path, $parameters, $this->mergeHeaders($requestHeaders));
     }
 
-    protected function post($path, array $parameters = [], array $requestHeaders = [])
+    protected function post(string $path, array $parameters = [], array $requestHeaders = [])
     {
         return parent::post($path, $parameters, $this->mergeHeaders($requestHeaders));
     }
 
-    protected function postRaw($path, $body, array $requestHeaders = [])
+    protected function postRaw(string $path, $body, array $requestHeaders = [])
     {
         return parent::postRaw($path, $body, $this->mergeHeaders($requestHeaders));
     }
 
-    protected function patch($path, array $parameters = [], array $requestHeaders = [])
+    protected function patch(string $path, array $parameters = [], array $requestHeaders = [])
     {
         return parent::patch($path, $parameters, $this->mergeHeaders($requestHeaders));
     }
 
-    protected function put($path, array $parameters = [], array $requestHeaders = [])
+    protected function put(string $path, array $parameters = [], array $requestHeaders = [])
     {
         return parent::put($path, $parameters, $this->mergeHeaders($requestHeaders));
     }
 
-    protected function delete($path, array $parameters = [], array $requestHeaders = [])
+    protected function delete(string $path, array $parameters = [], array $requestHeaders = [])
     {
         return parent::delete($path, $parameters, $this->mergeHeaders($requestHeaders));
     }
@@ -51,7 +54,7 @@ trait AcceptHeaderTrait
      *
      * @return array
      */
-    private function mergeHeaders(array $headers = [])
+    private function mergeHeaders(array $headers = []): array
     {
         $default = [];
         if ($this->acceptHeaderValue) {
diff --git a/vendor/knplabs/github-api/lib/Github/Api/ApiInterface.php b/vendor/knplabs/github-api/lib/Github/Api/ApiInterface.php
deleted file mode 100644
index 49d5167c..00000000
--- a/vendor/knplabs/github-api/lib/Github/Api/ApiInterface.php
+++ /dev/null
@@ -1,15 +0,0 @@
-
- */
-interface ApiInterface
-{
-    public function getPerPage();
-
-    public function setPerPage($perPage);
-}
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Apps.php b/vendor/knplabs/github-api/lib/Github/Api/Apps.php
index 1467d2aa..9e9a4b6a 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Apps.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Apps.php
@@ -9,6 +9,13 @@ namespace Github\Api;
  */
 class Apps extends AbstractApi
 {
+    use AcceptHeaderTrait;
+
+    private function configurePreviewHeader()
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.machine-man-preview+json';
+    }
+
     /**
      * Create an access token for an installation.
      *
@@ -27,7 +34,9 @@ class Apps extends AbstractApi
             $parameters['user_id'] = $userId;
         }
 
-        return $this->post('/app/installations/'.rawurlencode($installationId).'/access_tokens', $parameters);
+        $this->configurePreviewHeader();
+
+        return $this->post('/app/installations/'.$installationId.'/access_tokens', $parameters);
     }
 
     /**
@@ -39,9 +48,90 @@ class Apps extends AbstractApi
      */
     public function findInstallations()
     {
+        $this->configurePreviewHeader();
+
         return $this->get('/app/installations');
     }
 
+    /**
+     * Get an installation of the application.
+     *
+     * @link https://developer.github.com/v3/apps/#get-an-installation
+     *
+     * @param int $installationId An integration installation id
+     *
+     * @return array
+     */
+    public function getInstallation($installationId)
+    {
+        $this->configurePreviewHeader();
+
+        return $this->get('/app/installations/'.$installationId);
+    }
+
+    /**
+     * Get an installation of the application for an organization.
+     *
+     * @link https://developer.github.com/v3/apps/#get-an-organization-installation
+     *
+     * @param string $org An organization
+     *
+     * @return array
+     */
+    public function getInstallationForOrganization($org)
+    {
+        $this->configurePreviewHeader();
+
+        return $this->get('/org/'.rawurldecode($org).'/installation');
+    }
+
+    /**
+     * Get an installation of the application for a repository.
+     *
+     * @link https://developer.github.com/v3/apps/#get-a-repository-installation
+     *
+     * @param string $owner the owner of a repository
+     * @param string $repo  the name of the repository
+     *
+     * @return array
+     */
+    public function getInstallationForRepo($owner, $repo)
+    {
+        $this->configurePreviewHeader();
+
+        return $this->get('/repos/'.rawurldecode($owner).'/'.rawurldecode($repo).'/installation');
+    }
+
+    /**
+     * Get an installation of the application for a user.
+     *
+     * @link https://developer.github.com/v3/apps/#get-a-user-installation
+     *
+     * @param string $username
+     *
+     * @return array
+     */
+    public function getInstallationForUser($username)
+    {
+        $this->configurePreviewHeader();
+
+        return $this->get('/users/'.rawurldecode($username).'/installation');
+    }
+
+    /**
+     * Delete an installation of the application.
+     *
+     * @link https://developer.github.com/v3/apps/#delete-an-installation
+     *
+     * @param int $installationId An integration installation id
+     */
+    public function removeInstallation($installationId)
+    {
+        $this->configurePreviewHeader();
+
+        $this->delete('/app/installations/'.$installationId);
+    }
+
     /**
      * List repositories that are accessible to the authenticated installation.
      *
@@ -58,6 +148,8 @@ class Apps extends AbstractApi
             $parameters['user_id'] = $userId;
         }
 
+        $this->configurePreviewHeader();
+
         return $this->get('/installation/repositories', $parameters);
     }
 
@@ -73,7 +165,9 @@ class Apps extends AbstractApi
      */
     public function addRepository($installationId, $repositoryId)
     {
-        return $this->put('/installations/'.rawurlencode($installationId).'/repositories/'.rawurlencode($repositoryId));
+        $this->configurePreviewHeader();
+
+        return $this->put('/installations/'.$installationId.'/repositories/'.$repositoryId);
     }
 
     /**
@@ -88,6 +182,20 @@ class Apps extends AbstractApi
      */
     public function removeRepository($installationId, $repositoryId)
     {
-        return $this->delete('/installations/'.rawurlencode($installationId).'/repositories/'.rawurlencode($repositoryId));
+        $this->configurePreviewHeader();
+
+        return $this->delete('/installations/'.$installationId.'/repositories/'.$repositoryId);
+    }
+
+    /**
+     * Get the currently authenticated app.
+     *
+     * @link https://docs.github.com/en/rest/reference/apps#get-the-authenticated-app
+     *
+     * @return array
+     */
+    public function getAuthenticatedApp()
+    {
+        return $this->get('/app');
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Authorizations.php b/vendor/knplabs/github-api/lib/Github/Api/Authorizations.php
index f53b9eb4..6032c7fa 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Authorizations.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Authorizations.php
@@ -12,111 +12,54 @@ namespace Github\Api;
 class Authorizations extends AbstractApi
 {
     /**
-     * List all authorizations.
+     * Check an application token.
+     *
+     * @param string      $clientId
+     * @param string|null $token
      *
      * @return array
      */
-    public function all()
+    public function checkToken($clientId, $token = null)
     {
-        return $this->get('/authorizations');
+        return $this->post('/applications/'.rawurlencode($clientId).'/token', $token ? ['access_token' => $token] : []);
     }
 
     /**
-     * Show a single authorization.
+     * Reset an application token.
      *
-     * @param string $clientId
+     * @param string      $clientId
+     * @param string|null $token
      *
      * @return array
      */
-    public function show($clientId)
+    public function resetToken($clientId, $token = null)
     {
-        return $this->get('/authorizations/'.rawurlencode($clientId));
+        return $this->patch('/applications/'.rawurlencode($clientId).'/token', $token ? ['access_token' => $token] : []);
     }
 
     /**
-     * Create an authorization.
+     * Revoke an application token.
      *
-     * @param array $params
-     * @param null  $OTPCode
+     * @param string      $clientId
+     * @param string|null $token
      *
-     * @return array
+     * @return void
      */
-    public function create(array $params, $OTPCode = null)
+    public function deleteToken($clientId, $token = null)
     {
-        $headers = null === $OTPCode ? [] : ['X-GitHub-OTP' => $OTPCode];
-
-        return $this->post('/authorizations', $params, $headers);
+        $this->delete('/applications/'.rawurlencode($clientId).'/token', $token ? ['access_token' => $token] : []);
     }
 
     /**
-     * Update an authorization.
+     * Revoke an application authorization.
      *
-     * @param string $clientId
-     * @param array  $params
+     * @param string      $clientId
+     * @param string|null $token
      *
-     * @return array
+     * @return void
      */
-    public function update($clientId, array $params)
+    public function deleteGrant($clientId, $token = null)
     {
-        return $this->patch('/authorizations/'.rawurlencode($clientId), $params);
-    }
-
-    /**
-     * Remove an authorization.
-     *
-     * @param string $clientId
-     *
-     * @return array
-     */
-    public function remove($clientId)
-    {
-        return $this->delete('/authorizations/'.rawurlencode($clientId));
-    }
-
-    /**
-     * Check an authorization.
-     *
-     * @param string $clientId
-     * @param string $token
-     *
-     * @return array
-     */
-    public function check($clientId, $token)
-    {
-        return $this->get('/applications/'.rawurlencode($clientId).'/tokens/'.rawurlencode($token));
-    }
-
-    /**
-     * Reset an authorization.
-     *
-     * @param string $clientId
-     * @param string $token
-     *
-     * @return array
-     */
-    public function reset($clientId, $token)
-    {
-        return $this->post('/applications/'.rawurlencode($clientId).'/tokens/'.rawurlencode($token));
-    }
-
-    /**
-     * Remove an authorization.
-     *
-     * @param string $clientId
-     * @param string $token
-     */
-    public function revoke($clientId, $token)
-    {
-        $this->delete('/applications/'.rawurlencode($clientId).'/tokens/'.rawurlencode($token));
-    }
-
-    /**
-     * Revoke all authorizations.
-     *
-     * @param string $clientId
-     */
-    public function revokeAll($clientId)
-    {
-        $this->delete('/applications/'.rawurlencode($clientId).'/tokens');
+        $this->delete('/applications/'.rawurlencode($clientId).'/grant', $token ? ['access_token' => $token] : []);
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/CurrentUser.php b/vendor/knplabs/github-api/lib/Github/Api/CurrentUser.php
index 0c858b07..b5cbc89a 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/CurrentUser.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/CurrentUser.php
@@ -18,6 +18,8 @@ use Github\Api\CurrentUser\Watchers;
  */
 class CurrentUser extends AbstractApi
 {
+    use AcceptHeaderTrait;
+
     public function show()
     {
         return $this->get('/user');
@@ -33,7 +35,7 @@ class CurrentUser extends AbstractApi
      */
     public function emails()
     {
-        return new Emails($this->client);
+        return new Emails($this->getClient());
     }
 
     /**
@@ -41,7 +43,7 @@ class CurrentUser extends AbstractApi
      */
     public function follow()
     {
-        return new Followers($this->client);
+        return new Followers($this->getClient());
     }
 
     public function followers($page = 1)
@@ -52,7 +54,7 @@ class CurrentUser extends AbstractApi
     }
 
     /**
-     * @link http://developer.github.com/v3/issues/#list-issues
+     * @link https://docs.github.com/en/rest/reference/issues#list-user-account-issues-assigned-to-the-authenticated-user
      *
      * @param array $params
      * @param bool  $includeOrgIssues
@@ -69,7 +71,7 @@ class CurrentUser extends AbstractApi
      */
     public function keys()
     {
-        return new PublicKeys($this->client);
+        return new PublicKeys($this->getClient());
     }
 
     /**
@@ -77,7 +79,7 @@ class CurrentUser extends AbstractApi
      */
     public function notifications()
     {
-        return new Notifications($this->client);
+        return new Notifications($this->getClient());
     }
 
     /**
@@ -85,11 +87,11 @@ class CurrentUser extends AbstractApi
      */
     public function memberships()
     {
-        return new Memberships($this->client);
+        return new Memberships($this->getClient());
     }
 
     /**
-     * @link http://developer.github.com/v3/orgs/#list-user-organizations
+     * @link https://docs.github.com/en/rest/reference/orgs#list-organizations-for-the-authenticated-user
      *
      * @return array
      */
@@ -109,7 +111,7 @@ class CurrentUser extends AbstractApi
     }
 
     /**
-     * @link http://developer.github.com/v3/repos/#list-your-repositories
+     * @link https://docs.github.com/en/rest/reference/repos#list-repositories-for-the-authenticated-user
      *
      * @param string $type        role in the repository
      * @param string $sort        sort by
@@ -145,17 +147,7 @@ class CurrentUser extends AbstractApi
      */
     public function watchers()
     {
-        return new Watchers($this->client);
-    }
-
-    /**
-     * @deprecated Use watchers() instead
-     */
-    public function watched($page = 1)
-    {
-        return $this->get('/user/watched', [
-            'page' => $page,
-        ]);
+        return new Watchers($this->getClient());
     }
 
     /**
@@ -163,21 +155,11 @@ class CurrentUser extends AbstractApi
      */
     public function starring()
     {
-        return new Starring($this->client);
+        return new Starring($this->getClient());
     }
 
     /**
-     * @deprecated Use starring() instead
-     */
-    public function starred($page = 1)
-    {
-        return $this->get('/user/starred', [
-            'page' => $page,
-        ]);
-    }
-
-    /**
-     *  @link https://developer.github.com/v3/activity/watching/#list-repositories-being-watched
+     *  @link https://docs.github.com/en/rest/reference/activity#list-repositories-watched-by-the-authenticated-user
      */
     public function subscriptions()
     {
@@ -185,23 +167,27 @@ class CurrentUser extends AbstractApi
     }
 
     /**
-     * @link https://developer.github.com/v3/integrations/#list-installations-for-user
+     * @link https://docs.github.com/en/rest/reference/apps#list-app-installations-accessible-to-the-user-access-token
      *
      * @param array $params
      */
     public function installations(array $params = [])
     {
+        $this->acceptHeaderValue = 'application/vnd.github.machine-man-preview+json';
+
         return $this->get('/user/installations', array_merge(['page' => 1], $params));
     }
 
     /**
-     * @link https://developer.github.com/v3/integrations/installations/#list-repositories-accessible-to-the-user-for-an-installation
+     * @link https://developer.github.com/v3/apps/installations/#list-repositories-accessible-to-the-user-access-token
      *
      * @param string $installationId the ID of the Installation
      * @param array  $params
      */
     public function repositoriesByInstallation($installationId, array $params = [])
     {
+        $this->acceptHeaderValue = 'application/vnd.github.machine-man-preview+json';
+
         return $this->get(sprintf('/user/installations/%s/repositories', $installationId), array_merge(['page' => 1], $params));
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/CurrentUser/Notifications.php b/vendor/knplabs/github-api/lib/Github/Api/CurrentUser/Notifications.php
index 36dfb57e..9f3f2ce7 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/CurrentUser/Notifications.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/CurrentUser/Notifications.php
@@ -83,7 +83,7 @@ class Notifications extends AbstractApi
      */
     public function markAsRead($id, array $params)
     {
-        return $this->patch('/notifications/threads/'.rawurlencode($id), $params);
+        return $this->patch('/notifications/threads/'.$id, $params);
     }
 
     /**
@@ -97,7 +97,7 @@ class Notifications extends AbstractApi
      */
     public function show($id)
     {
-        return $this->get('/notifications/threads/'.rawurlencode($id));
+        return $this->get('/notifications/threads/'.$id);
     }
 
     /**
@@ -111,7 +111,7 @@ class Notifications extends AbstractApi
      */
     public function showSubscription($id)
     {
-        return $this->get('/notifications/threads/'.rawurlencode($id).'/subscription');
+        return $this->get('/notifications/threads/'.$id.'/subscription');
     }
 
     /**
@@ -126,7 +126,7 @@ class Notifications extends AbstractApi
      */
     public function createSubscription($id, array $params)
     {
-        return $this->put('/notifications/threads/'.rawurlencode($id).'/subscription', $params);
+        return $this->put('/notifications/threads/'.$id.'/subscription', $params);
     }
 
     /**
@@ -140,6 +140,6 @@ class Notifications extends AbstractApi
      */
     public function removeSubscription($id)
     {
-        return $this->delete('/notifications/threads/'.rawurlencode($id).'/subscription');
+        return $this->delete('/notifications/threads/'.$id.'/subscription');
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/CurrentUser/PublicKeys.php b/vendor/knplabs/github-api/lib/Github/Api/CurrentUser/PublicKeys.php
index 706e1405..cb24dec9 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/CurrentUser/PublicKeys.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/CurrentUser/PublicKeys.php
@@ -35,7 +35,7 @@ class PublicKeys extends AbstractApi
      */
     public function show($id)
     {
-        return $this->get('/user/keys/'.rawurlencode($id));
+        return $this->get('/user/keys/'.$id);
     }
 
     /**
@@ -69,6 +69,6 @@ class PublicKeys extends AbstractApi
      */
     public function remove($id)
     {
-        return $this->delete('/user/keys/'.rawurlencode($id));
+        return $this->delete('/user/keys/'.$id);
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/CurrentUser/Starring.php b/vendor/knplabs/github-api/lib/Github/Api/CurrentUser/Starring.php
index 5fb6435f..ee2c5023 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/CurrentUser/Starring.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/CurrentUser/Starring.php
@@ -21,12 +21,12 @@ class Starring extends AbstractApi
      *
      * @param string $bodyType
      *
-     * @return self
+     * @return $this
      */
     public function configure($bodyType = null)
     {
         if ('star' === $bodyType) {
-            $this->acceptHeaderValue = sprintf('application/vnd.github.%s.star+json', $this->client->getApiVersion());
+            $this->acceptHeaderValue = sprintf('application/vnd.github.%s.star+json', $this->getApiVersion());
         }
 
         return $this;
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Deployment.php b/vendor/knplabs/github-api/lib/Github/Api/Deployment.php
index a6e9bacd..f6127357 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Deployment.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Deployment.php
@@ -11,6 +11,8 @@ use Github\Exception\MissingArgumentException;
  */
 class Deployment extends AbstractApi
 {
+    use AcceptHeaderTrait;
+
     /**
      * List deployments for a particular repository.
      *
@@ -38,7 +40,7 @@ class Deployment extends AbstractApi
      */
     public function show($username, $repository, $id)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/deployments/'.rawurlencode($id));
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/deployments/'.$id);
     }
 
     /**
@@ -66,6 +68,21 @@ class Deployment extends AbstractApi
         return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/deployments', $params);
     }
 
+    /**
+     * Delete a deployment for the given username and repo.
+     *
+     * @link https://docs.github.com/en/rest/reference/repos#delete-a-deployment
+     *
+     * Important: Deployments can only be deleted when in inactive state
+     * @see updateStatus
+     *
+     * @return mixed null on success, array on error with 'message'
+     */
+    public function remove(string $username, string $repository, int $id)
+    {
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/deployments/'.$id);
+    }
+
     /**
      * Updates a deployment by creating a new status update.
      *
@@ -76,7 +93,7 @@ class Deployment extends AbstractApi
      * @param int    $id         the deployment number
      * @param array  $params     The information about the deployment update.
      *                           Must include a "state" field of pending, success, error, or failure.
-     *                           May also be given a target_url and description, ßee link for more details.
+     *                           May also be given a target_url and description, see link for more details.
      *
      * @throws MissingArgumentException
      *
@@ -88,7 +105,16 @@ class Deployment extends AbstractApi
             throw new MissingArgumentException(['state']);
         }
 
-        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/deployments/'.rawurlencode($id).'/statuses', $params);
+        // adjust media-type per github docs
+        // https://docs.github.com/en/rest/reference/repos#create-a-deployment-status
+        if ($params['state'] === 'inactive') {
+            $this->acceptHeaderValue = 'application/vnd.github.ant-man-preview+json';
+        }
+        if ($params['state'] === 'in_progress' || $params['state'] === 'queued') {
+            $this->acceptHeaderValue = 'application/vnd.github.flash-preview+json';
+        }
+
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/deployments/'.$id.'/statuses', $params);
     }
 
     /**
@@ -102,6 +128,6 @@ class Deployment extends AbstractApi
      */
     public function getStatuses($username, $repository, $id)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/deployments/'.rawurlencode($id).'/statuses');
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/deployments/'.$id.'/statuses');
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Enterprise.php b/vendor/knplabs/github-api/lib/Github/Api/Enterprise.php
index 3dbbee3e..b3daf95a 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Enterprise.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Enterprise.php
@@ -22,7 +22,7 @@ class Enterprise extends AbstractApi
      */
     public function stats()
     {
-        return new Stats($this->client);
+        return new Stats($this->getClient());
     }
 
     /**
@@ -30,7 +30,7 @@ class Enterprise extends AbstractApi
      */
     public function license()
     {
-        return new License($this->client);
+        return new License($this->getClient());
     }
 
     /**
@@ -38,7 +38,7 @@ class Enterprise extends AbstractApi
      */
     public function console()
     {
-        return new ManagementConsole($this->client);
+        return new ManagementConsole($this->getClient());
     }
 
     /**
@@ -46,6 +46,6 @@ class Enterprise extends AbstractApi
      */
     public function userAdmin()
     {
-        return new UserAdmin($this->client);
+        return new UserAdmin($this->getClient());
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Gist/Comments.php b/vendor/knplabs/github-api/lib/Github/Api/Gist/Comments.php
index 0e022622..31587d94 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Gist/Comments.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Gist/Comments.php
@@ -21,7 +21,7 @@ class Comments extends AbstractApi
      *
      * @param string|null $bodyType
      *
-     * @return self
+     * @return $this
      */
     public function configure($bodyType = null)
     {
@@ -29,7 +29,7 @@ class Comments extends AbstractApi
             $bodyType = 'raw';
         }
 
-        $this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s+json', $this->client->getApiVersion(), $bodyType);
+        $this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s+json', $this->getApiVersion(), $bodyType);
 
         return $this;
     }
@@ -56,7 +56,7 @@ class Comments extends AbstractApi
      */
     public function show($gist, $comment)
     {
-        return $this->get('/gists/'.rawurlencode($gist).'/comments/'.rawurlencode($comment));
+        return $this->get('/gists/'.rawurlencode($gist).'/comments/'.$comment);
     }
 
     /**
@@ -83,7 +83,7 @@ class Comments extends AbstractApi
      */
     public function update($gist, $comment_id, $body)
     {
-        return $this->patch('/gists/'.rawurlencode($gist).'/comments/'.rawurlencode($comment_id), ['body' => $body]);
+        return $this->patch('/gists/'.rawurlencode($gist).'/comments/'.$comment_id, ['body' => $body]);
     }
 
     /**
@@ -96,6 +96,6 @@ class Comments extends AbstractApi
      */
     public function remove($gist, $comment)
     {
-        return $this->delete('/gists/'.rawurlencode($gist).'/comments/'.rawurlencode($comment));
+        return $this->delete('/gists/'.rawurlencode($gist).'/comments/'.$comment);
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Gists.php b/vendor/knplabs/github-api/lib/Github/Api/Gists.php
index a6f4ffa6..42bbdb9c 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Gists.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Gists.php
@@ -24,7 +24,7 @@ class Gists extends AbstractApi
      *
      * @param string|null $bodyType
      *
-     * @return self
+     * @return $this
      */
     public function configure($bodyType = null)
     {
@@ -32,11 +32,16 @@ class Gists extends AbstractApi
             $bodyType = 'raw';
         }
 
-        $this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s', $this->client->getApiVersion(), $bodyType);
+        $this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s', $this->getApiVersion(), $bodyType);
 
         return $this;
     }
 
+    /**
+     * @param string|null $type
+     *
+     * @return array|string
+     */
     public function all($type = null)
     {
         if (!in_array($type, ['public', 'starred'])) {
@@ -46,11 +51,31 @@ class Gists extends AbstractApi
         return $this->get('/gists/'.rawurlencode($type));
     }
 
+    /**
+     * @param string $number
+     *
+     * @return array
+     */
     public function show($number)
     {
         return $this->get('/gists/'.rawurlencode($number));
     }
 
+    /**
+     * Get a specific revision of a gist.
+     *
+     * @param string $number
+     * @param string $sha
+     *
+     * @link https://developer.github.com/v3/gists/#get-a-specific-revision-of-a-gist
+     *
+     * @return array
+     */
+    public function revision($number, $sha)
+    {
+        return $this->get('/gists/'.rawurlencode($number).'/'.rawurlencode($sha));
+    }
+
     public function create(array $params)
     {
         if (!isset($params['files']) || (!is_array($params['files']) || 0 === count($params['files']))) {
@@ -62,41 +87,82 @@ class Gists extends AbstractApi
         return $this->post('/gists', $params);
     }
 
+    /**
+     * @param string $id
+     * @param array  $params
+     *
+     * @return array
+     */
     public function update($id, array $params)
     {
         return $this->patch('/gists/'.rawurlencode($id), $params);
     }
 
+    /**
+     * @param string $id
+     *
+     * @return array
+     */
     public function commits($id)
     {
         return $this->get('/gists/'.rawurlencode($id).'/commits');
     }
 
+    /**
+     * @param string $id
+     *
+     * @return array
+     */
     public function fork($id)
     {
         return $this->post('/gists/'.rawurlencode($id).'/fork');
     }
 
+    /**
+     * @param string $id
+     *
+     * @return array
+     */
     public function forks($id)
     {
         return $this->get('/gists/'.rawurlencode($id).'/forks');
     }
 
+    /**
+     * @param string $id
+     *
+     * @return array
+     */
     public function remove($id)
     {
         return $this->delete('/gists/'.rawurlencode($id));
     }
 
+    /**
+     * @param string $id
+     *
+     * @return array
+     */
     public function check($id)
     {
         return $this->get('/gists/'.rawurlencode($id).'/star');
     }
 
+    /**
+     * @param string $id
+     *
+     * @return array
+     */
     public function star($id)
     {
         return $this->put('/gists/'.rawurlencode($id).'/star');
     }
 
+    /**
+     * @param string $id
+     *
+     * @return array
+     */
     public function unstar($id)
     {
         return $this->delete('/gists/'.rawurlencode($id).'/star');
@@ -111,6 +177,6 @@ class Gists extends AbstractApi
      */
     public function comments()
     {
-        return new Comments($this->client);
+        return new Comments($this->getClient());
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/GitData.php b/vendor/knplabs/github-api/lib/Github/Api/GitData.php
index d431b788..b7a9f48c 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/GitData.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/GitData.php
@@ -22,7 +22,7 @@ class GitData extends AbstractApi
      */
     public function blobs()
     {
-        return new Blobs($this->client);
+        return new Blobs($this->getClient());
     }
 
     /**
@@ -30,7 +30,7 @@ class GitData extends AbstractApi
      */
     public function commits()
     {
-        return new Commits($this->client);
+        return new Commits($this->getClient());
     }
 
     /**
@@ -38,7 +38,7 @@ class GitData extends AbstractApi
      */
     public function references()
     {
-        return new References($this->client);
+        return new References($this->getClient());
     }
 
     /**
@@ -46,7 +46,7 @@ class GitData extends AbstractApi
      */
     public function tags()
     {
-        return new Tags($this->client);
+        return new Tags($this->getClient());
     }
 
     /**
@@ -54,6 +54,6 @@ class GitData extends AbstractApi
      */
     public function trees()
     {
-        return new Trees($this->client);
+        return new Trees($this->getClient());
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/GitData/Blobs.php b/vendor/knplabs/github-api/lib/Github/Api/GitData/Blobs.php
index be68771d..3b7357f3 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/GitData/Blobs.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/GitData/Blobs.php
@@ -21,12 +21,12 @@ class Blobs extends AbstractApi
      *
      * @param string|null $bodyType
      *
-     * @return self
+     * @return $this
      */
     public function configure($bodyType = null)
     {
         if ('raw' === $bodyType) {
-            $this->acceptHeaderValue = sprintf('application/vnd.github.%s.raw', $this->client->getApiVersion());
+            $this->acceptHeaderValue = sprintf('application/vnd.github.%s.raw', $this->getApiVersion());
         }
 
         return $this;
@@ -43,9 +43,7 @@ class Blobs extends AbstractApi
      */
     public function show($username, $repository, $sha)
     {
-        $response = $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/blobs/'.rawurlencode($sha));
-
-        return $response;
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/blobs/'.rawurlencode($sha));
     }
 
     /**
diff --git a/vendor/knplabs/github-api/lib/Github/Api/GitData/References.php b/vendor/knplabs/github-api/lib/Github/Api/GitData/References.php
index c54c0c8a..d67cbe51 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/GitData/References.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/GitData/References.php
@@ -25,6 +25,22 @@ class References extends AbstractApi
         return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/refs');
     }
 
+    /**
+     * Get all matching references for the supplied reference name.
+     *
+     * @param string $username
+     * @param string $repository
+     * @param string $reference
+     *
+     * @return array
+     */
+    public function matching(string $username, string $repository, string $reference): array
+    {
+        $reference = $this->encodeReference($reference);
+
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/matching-refs/'.$reference);
+    }
+
     /**
      * Get all branches of a repository.
      *
diff --git a/vendor/knplabs/github-api/lib/Github/Api/GitData/Tags.php b/vendor/knplabs/github-api/lib/Github/Api/GitData/Tags.php
index 09f48bc0..11bf200a 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/GitData/Tags.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/GitData/Tags.php
@@ -56,11 +56,7 @@ class Tags extends AbstractApi
             throw new MissingArgumentException(['tag', 'message', 'object', 'type']);
         }
 
-        if (!isset($params['tagger'])) {
-            throw new MissingArgumentException('tagger');
-        }
-
-        if (!isset($params['tagger']['name'], $params['tagger']['email'], $params['tagger']['date'])) {
+        if (isset($params['tagger']) && !isset($params['tagger']['name'], $params['tagger']['email'], $params['tagger']['date'])) {
             throw new MissingArgumentException(['tagger.name', 'tagger.email', 'tagger.date']);
         }
 
diff --git a/vendor/knplabs/github-api/lib/Github/Api/GitData/Trees.php b/vendor/knplabs/github-api/lib/Github/Api/GitData/Trees.php
index d514d9f8..939e8619 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/GitData/Trees.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/GitData/Trees.php
@@ -54,7 +54,7 @@ class Trees extends AbstractApi
             }
 
             // If `sha` is not set, `content` is required
-            if (!isset($tree['sha']) && !isset($tree['content'])) {
+            if (!array_key_exists('sha', $tree) && !isset($tree['content'])) {
                 throw new MissingArgumentException("tree.$key.content");
             }
         }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/GraphQL.php b/vendor/knplabs/github-api/lib/Github/Api/GraphQL.php
index 9d66b512..02499ad8 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/GraphQL.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/GraphQL.php
@@ -18,12 +18,13 @@ class GraphQL extends AbstractApi
     /**
      * @param string $query
      * @param array  $variables
+     * @param string $acceptHeaderValue
      *
      * @return array
      */
-    public function execute($query, array $variables = [])
+    public function execute($query, array $variables = [], string $acceptHeaderValue = 'application/vnd.github.v4+json')
     {
-        $this->acceptHeaderValue = 'application/vnd.github.v4+json';
+        $this->acceptHeaderValue = $acceptHeaderValue;
         $params = [
             'query' => $query,
         ];
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Integrations.php b/vendor/knplabs/github-api/lib/Github/Api/Integrations.php
deleted file mode 100644
index bd4f78a4..00000000
--- a/vendor/knplabs/github-api/lib/Github/Api/Integrations.php
+++ /dev/null
@@ -1,26 +0,0 @@
-
- */
-class Integrations extends Apps
-{
-    /**
-     * @deprecated
-     * Configure the accept header for Early Access to the integrations api (DEPRECATED)
-     * @see https://developer.github.com/v3/apps/
-     *
-     * @return self
-     */
-    public function configure()
-    {
-        return $this;
-    }
-}
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Issue.php b/vendor/knplabs/github-api/lib/Github/Api/Issue.php
index 9b7d1d04..764f5e44 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Issue.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Issue.php
@@ -29,7 +29,7 @@ class Issue extends AbstractApi
      *
      * @param string|null $bodyType
      *
-     * @return self
+     * @return $this
      */
     public function configure($bodyType = null)
     {
@@ -37,7 +37,7 @@ class Issue extends AbstractApi
             $bodyType = 'raw';
         }
 
-        $this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s+json', $this->client->getApiVersion(), $bodyType);
+        $this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s+json', $this->getApiVersion(), $bodyType);
 
         return $this;
     }
@@ -58,28 +58,6 @@ class Issue extends AbstractApi
         return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues', array_merge(['page' => 1], $params));
     }
 
-    /**
-     * Search issues by username, repo, state and keyword.
-     *
-     * @deprecated This method is deprecated use the Search api instead. See https://developer.github.com/v3/search/legacy/#legacy-search-api-is-deprecated
-     * @link http://developer.github.com/v3/search/#search-issues
-     *
-     * @param string $username   the username
-     * @param string $repository the repository
-     * @param string $state      the issue state, can be open or closed
-     * @param string $keyword    the keyword to filter issues by
-     *
-     * @return array list of issues found
-     */
-    public function find($username, $repository, $state, $keyword)
-    {
-        if (!in_array($state, ['open', 'closed'])) {
-            $state = 'open';
-        }
-
-        return $this->get('/legacy/issues/search/'.rawurlencode($username).'/'.rawurlencode($repository).'/'.rawurlencode($state).'/'.rawurlencode($keyword));
-    }
-
     /**
      * List issues by organization.
      *
@@ -113,7 +91,7 @@ class Issue extends AbstractApi
      */
     public function show($username, $repository, $id)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($id));
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.$id);
     }
 
     /**
@@ -154,7 +132,7 @@ class Issue extends AbstractApi
      */
     public function update($username, $repository, $id, array $params)
     {
-        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($id), $params);
+        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.$id, $params);
     }
 
     /**
@@ -170,7 +148,7 @@ class Issue extends AbstractApi
      */
     public function lock($username, $repository, $id)
     {
-        return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($id).'/lock');
+        return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.$id.'/lock');
     }
 
     /**
@@ -186,7 +164,7 @@ class Issue extends AbstractApi
      */
     public function unlock($username, $repository, $id)
     {
-        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($id).'/lock');
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.$id.'/lock');
     }
 
     /**
@@ -198,7 +176,7 @@ class Issue extends AbstractApi
      */
     public function comments()
     {
-        return new Comments($this->client);
+        return new Comments($this->getClient());
     }
 
     /**
@@ -210,7 +188,7 @@ class Issue extends AbstractApi
      */
     public function events()
     {
-        return new Events($this->client);
+        return new Events($this->getClient());
     }
 
     /**
@@ -222,7 +200,7 @@ class Issue extends AbstractApi
      */
     public function labels()
     {
-        return new Labels($this->client);
+        return new Labels($this->getClient());
     }
 
     /**
@@ -234,7 +212,7 @@ class Issue extends AbstractApi
      */
     public function milestones()
     {
-        return new Milestones($this->client);
+        return new Milestones($this->getClient());
     }
 
     /**
@@ -246,7 +224,7 @@ class Issue extends AbstractApi
      */
     public function assignees()
     {
-        return new Assignees($this->client);
+        return new Assignees($this->getClient());
     }
 
     /**
@@ -258,6 +236,6 @@ class Issue extends AbstractApi
      */
     public function timeline()
     {
-        return new Timeline($this->client);
+        return new Timeline($this->getClient());
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Issue/Assignees.php b/vendor/knplabs/github-api/lib/Github/Api/Issue/Assignees.php
index 1e5e0b72..8ae86d1c 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Issue/Assignees.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Issue/Assignees.php
@@ -3,6 +3,7 @@
 namespace Github\Api\Issue;
 
 use Github\Api\AbstractApi;
+use Github\Exception\InvalidArgumentException;
 use Github\Exception\MissingArgumentException;
 
 class Assignees extends AbstractApi
@@ -47,6 +48,7 @@ class Assignees extends AbstractApi
      * @param string $issue
      * @param array  $parameters
      *
+     * @throws InvalidArgumentException
      * @throws MissingArgumentException
      *
      * @return string
@@ -58,9 +60,7 @@ class Assignees extends AbstractApi
         }
 
         if (!is_array($parameters['assignees'])) {
-            @trigger_error(sprintf('Passing the "assignees" parameter as a string in "%s" is deprecated and will throw an exception in php-github-api version 3.0. Pass an array of strings instead', __METHOD__), E_USER_DEPRECATED);
-
-            $parameters['assignees'] = [$parameters['assignees']];
+            throw new InvalidArgumentException('The assignees parameter should be an array of assignees');
         }
 
         return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/assignees', $parameters);
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Issue/Comments.php b/vendor/knplabs/github-api/lib/Github/Api/Issue/Comments.php
index a664d533..b0fe8787 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Issue/Comments.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Issue/Comments.php
@@ -23,7 +23,7 @@ class Comments extends AbstractApi
      *
      * @param string|null $bodyType
      *
-     * @return self
+     * @return $this
      */
     public function configure($bodyType = null)
     {
@@ -31,7 +31,7 @@ class Comments extends AbstractApi
             $bodyType = 'full';
         }
 
-        $this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s+json', $this->client->getApiVersion(), $bodyType);
+        $this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s+json', $this->getApiVersion(), $bodyType);
 
         return $this;
     }
@@ -44,15 +44,13 @@ class Comments extends AbstractApi
      * @param string $username
      * @param string $repository
      * @param int    $issue
-     * @param int    $page
+     * @param array  $params
      *
      * @return array
      */
-    public function all($username, $repository, $issue, $page = 1)
+    public function all($username, $repository, $issue, array $params = [])
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/comments', [
-            'page' => $page,
-        ]);
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.$issue.'/comments', $params);
     }
 
     /**
@@ -68,7 +66,7 @@ class Comments extends AbstractApi
      */
     public function show($username, $repository, $comment)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/comments/'.rawurlencode($comment));
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/comments/'.$comment);
     }
 
     /**
@@ -91,7 +89,7 @@ class Comments extends AbstractApi
             throw new MissingArgumentException('body');
         }
 
-        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/comments', $params);
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.$issue.'/comments', $params);
     }
 
     /**
@@ -114,7 +112,7 @@ class Comments extends AbstractApi
             throw new MissingArgumentException('body');
         }
 
-        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/comments/'.rawurlencode($comment), $params);
+        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/comments/'.$comment, $params);
     }
 
     /**
@@ -130,6 +128,6 @@ class Comments extends AbstractApi
      */
     public function remove($username, $repository, $comment)
     {
-        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/comments/'.rawurlencode($comment));
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/comments/'.$comment);
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Issue/Events.php b/vendor/knplabs/github-api/lib/Github/Api/Issue/Events.php
index c846147e..a628b2c6 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Issue/Events.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Issue/Events.php
@@ -26,7 +26,7 @@ class Events extends AbstractApi
     public function all($username, $repository, $issue = null, $page = 1)
     {
         if (null !== $issue) {
-            $path = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/events';
+            $path = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.$issue.'/events';
         } else {
             $path = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/events';
         }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Issue/Labels.php b/vendor/knplabs/github-api/lib/Github/Api/Issue/Labels.php
index f1f68b76..d719578d 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Issue/Labels.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Issue/Labels.php
@@ -29,7 +29,7 @@ class Labels extends AbstractApi
         if ($issue === null) {
             $path = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/labels';
         } else {
-            $path = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/labels';
+            $path = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.$issue.'/labels';
         }
 
         return $this->get($path);
@@ -118,7 +118,7 @@ class Labels extends AbstractApi
     /**
      * Add a label to an issue.
      *
-     * @link https://developer.github.com/v3/issues/labels/#remove-a-label-from-an-issue
+     * @link https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue
      *
      * @param string       $username
      * @param string       $repository
@@ -137,7 +137,7 @@ class Labels extends AbstractApi
             throw new InvalidArgumentException('The labels parameter should be a single label or an array of labels');
         }
 
-        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/labels', $labels);
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.$issue.'/labels', $labels);
     }
 
     /**
@@ -154,7 +154,7 @@ class Labels extends AbstractApi
      */
     public function replace($username, $repository, $issue, array $params)
     {
-        return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/labels', $params);
+        return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.$issue.'/labels', $params);
     }
 
     /**
@@ -164,14 +164,14 @@ class Labels extends AbstractApi
      *
      * @param string $username
      * @param string $repository
-     * @param string $issue
+     * @param int    $issue
      * @param string $label
      *
      * @return array|string
      */
     public function remove($username, $repository, $issue, $label)
     {
-        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/labels/'.rawurlencode($label));
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.$issue.'/labels/'.rawurlencode($label));
     }
 
     /**
@@ -181,12 +181,12 @@ class Labels extends AbstractApi
      *
      * @param string $username
      * @param string $repository
-     * @param string $issue
+     * @param int    $issue
      *
      * @return array|string
      */
     public function clear($username, $repository, $issue)
     {
-        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/labels');
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.$issue.'/labels');
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Issue/Milestones.php b/vendor/knplabs/github-api/lib/Github/Api/Issue/Milestones.php
index 0e0e067c..4cf2a3d5 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Issue/Milestones.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Issue/Milestones.php
@@ -56,7 +56,7 @@ class Milestones extends AbstractApi
      */
     public function show($username, $repository, $id)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones/'.rawurlencode($id));
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones/'.$id);
     }
 
     /**
@@ -102,7 +102,7 @@ class Milestones extends AbstractApi
             $params['state'] = 'open';
         }
 
-        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones/'.rawurlencode($id), $params);
+        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones/'.$id, $params);
     }
 
     /**
@@ -118,7 +118,7 @@ class Milestones extends AbstractApi
      */
     public function remove($username, $repository, $id)
     {
-        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones/'.rawurlencode($id));
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones/'.$id);
     }
 
     /**
@@ -134,6 +134,6 @@ class Milestones extends AbstractApi
      */
     public function labels($username, $repository, $id)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones/'.rawurlencode($id).'/labels');
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones/'.$id.'/labels');
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Issue/Timeline.php b/vendor/knplabs/github-api/lib/Github/Api/Issue/Timeline.php
index c0f76f2f..16ec4b06 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Issue/Timeline.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Issue/Timeline.php
@@ -29,6 +29,6 @@ class Timeline extends AbstractApi
      */
     public function all($username, $repository, $issue)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/timeline');
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.$issue.'/timeline');
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Notification.php b/vendor/knplabs/github-api/lib/Github/Api/Notification.php
index 0d73d607..e8c9b246 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Notification.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Notification.php
@@ -23,6 +23,7 @@ class Notification extends AbstractApi
      * @param bool          $includingRead
      * @param bool          $participating
      * @param DateTime|null $since
+     * @param DateTime|null $before
      *
      * @return array array of notifications
      */
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Organization.php b/vendor/knplabs/github-api/lib/Github/Api/Organization.php
index 29b71d14..d3e76466 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Organization.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Organization.php
@@ -2,8 +2,10 @@
 
 namespace Github\Api;
 
+use Github\Api\Organization\Actions\Secrets;
 use Github\Api\Organization\Hooks;
 use Github\Api\Organization\Members;
+use Github\Api\Organization\OutsideCollaborators;
 use Github\Api\Organization\Teams;
 
 /**
@@ -53,15 +55,27 @@ class Organization extends AbstractApi
      * @param string $organization the user name
      * @param string $type         the type of repositories
      * @param int    $page         the page
+     * @param string $sort         sort by
+     * @param string $direction    direction of sort, asc or desc
      *
      * @return array the repositories
      */
-    public function repositories($organization, $type = 'all', $page = 1)
+    public function repositories($organization, $type = 'all', $page = 1, $sort = null, $direction = null)
     {
-        return $this->get('/orgs/'.rawurlencode($organization).'/repos', [
+        $parameters = [
             'type' => $type,
             'page' => $page,
-        ]);
+        ];
+
+        if ($sort !== null) {
+            $parameters['sort'] = $sort;
+        }
+
+        if ($direction !== null) {
+            $parameters['direction'] = $direction;
+        }
+
+        return $this->get('/orgs/'.rawurlencode($organization).'/repos', $parameters);
     }
 
     /**
@@ -69,7 +83,7 @@ class Organization extends AbstractApi
      */
     public function members()
     {
-        return new Members($this->client);
+        return new Members($this->getClient());
     }
 
     /**
@@ -77,7 +91,7 @@ class Organization extends AbstractApi
      */
     public function hooks()
     {
-        return new Hooks($this->client);
+        return new Hooks($this->getClient());
     }
 
     /**
@@ -85,7 +99,23 @@ class Organization extends AbstractApi
      */
     public function teams()
     {
-        return new Teams($this->client);
+        return new Teams($this->getClient());
+    }
+
+    /**
+     * @return Secrets
+     */
+    public function secrets(): Secrets
+    {
+        return new Secrets($this->getClient());
+    }
+
+    /**
+     * @return OutsideCollaborators
+     */
+    public function outsideCollaborators()
+    {
+        return new OutsideCollaborators($this->getClient());
     }
 
     /**
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Organization/Actions/Secrets.php b/vendor/knplabs/github-api/lib/Github/Api/Organization/Actions/Secrets.php
new file mode 100644
index 00000000..819e2c46
--- /dev/null
+++ b/vendor/knplabs/github-api/lib/Github/Api/Organization/Actions/Secrets.php
@@ -0,0 +1,144 @@
+get('/orgs/'.rawurlencode($organization).'/actions/secrets');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#get-an-organization-secret
+     *
+     * @param string $organization
+     * @param string $secretName
+     *
+     * @return array|string
+     */
+    public function show(string $organization, string $secretName)
+    {
+        return $this->get('/orgs/'.rawurlencode($organization).'/actions/secrets/'.rawurlencode($secretName));
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#create-or-update-an-organization-secret
+     *
+     * @param string $organization
+     * @param string $secretName
+     * @param array  $parameters
+     *
+     * @return array|string
+     */
+    public function create(string $organization, string $secretName, array $parameters = [])
+    {
+        return $this->put('/orgs/'.rawurlencode($organization).'/actions/secrets/'.rawurlencode($secretName), $parameters);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#create-or-update-an-organization-secret
+     *
+     * @param string $organization
+     * @param string $secretName
+     * @param array  $parameters
+     *
+     * @return array|string
+     */
+    public function update(string $organization, string $secretName, array $parameters = [])
+    {
+        return $this->put('/orgs/'.rawurlencode($organization).'/actions/secrets/'.rawurlencode($secretName), $parameters);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#delete-an-organization-secret
+     *
+     * @param string $organization
+     * @param string $secretName
+     *
+     * @return array|string
+     */
+    public function remove(string $organization, string $secretName)
+    {
+        return $this->delete('/orgs/'.rawurlencode($organization).'/actions/secrets/'.rawurlencode($secretName));
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#list-selected-repositories-for-an-organization-secret
+     *
+     * @param string $organization
+     * @param string $secretName
+     *
+     * @return array|string
+     */
+    public function selectedRepositories(string $organization, string $secretName)
+    {
+        return $this->get('/orgs/'.rawurlencode($organization).'/actions/secrets/'.rawurlencode($secretName).'/repositories');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#set-selected-repositories-for-an-organization-secret
+     *
+     * @param string $organization
+     * @param string $secretName
+     * @param array  $parameters
+     *
+     * @return array|string
+     */
+    public function setSelectedRepositories(string $organization, string $secretName, array $parameters = [])
+    {
+        return $this->put('/orgs/'.rawurlencode($organization).'/actions/secrets/'.rawurlencode($secretName).'/repositories', $parameters);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#add-selected-repository-to-an-organization-secret
+     *
+     * @param string $organization
+     * @param string $repositoryId
+     * @param string $secretName
+     *
+     * @return array|string
+     */
+    public function addSecret(string $organization, string $repositoryId, string $secretName)
+    {
+        return $this->put('/orgs/'.rawurlencode($organization).'/actions/secrets/'.rawurlencode($secretName).'/repositories/'.$repositoryId);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#remove-selected-repository-from-an-organization-secret
+     *
+     * @param string $organization
+     * @param string $repositoryId
+     * @param string $secretName
+     *
+     * @return array|string
+     */
+    public function removeSecret(string $organization, string $repositoryId, string $secretName)
+    {
+        return $this->delete('/orgs/'.rawurlencode($organization).'/actions/secrets/'.rawurlencode($secretName).'/repositories/'.$repositoryId);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#get-an-organization-public-key
+     *
+     * @param string $organization
+     *
+     * @return array|string
+     */
+    public function publicKey(string $organization)
+    {
+        return $this->get('/orgs/'.rawurlencode($organization).'/actions/secrets/public-key');
+    }
+}
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Organization/Hooks.php b/vendor/knplabs/github-api/lib/Github/Api/Organization/Hooks.php
index fc9318a3..945cabc8 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Organization/Hooks.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Organization/Hooks.php
@@ -33,7 +33,7 @@ class Hooks extends AbstractApi
      */
     public function show($organization, $id)
     {
-        return $this->get('/orgs/'.rawurlencode($organization).'/hooks/'.rawurlencode($id));
+        return $this->get('/orgs/'.rawurlencode($organization).'/hooks/'.$id);
     }
 
     /**
@@ -76,7 +76,7 @@ class Hooks extends AbstractApi
             throw new MissingArgumentException(['config']);
         }
 
-        return $this->patch('/orgs/'.rawurlencode($organization).'/hooks/'.rawurlencode($id), $params);
+        return $this->patch('/orgs/'.rawurlencode($organization).'/hooks/'.$id, $params);
     }
 
     /**
@@ -91,7 +91,7 @@ class Hooks extends AbstractApi
      */
     public function ping($organization, $id)
     {
-        return $this->post('/orgs/'.rawurlencode($organization).'/hooks/'.rawurlencode($id).'/pings');
+        return $this->post('/orgs/'.rawurlencode($organization).'/hooks/'.$id.'/pings');
     }
 
     /**
@@ -106,6 +106,6 @@ class Hooks extends AbstractApi
      */
     public function remove($organization, $id)
     {
-        return $this->delete('/orgs/'.rawurlencode($organization).'/hooks/'.rawurlencode($id));
+        return $this->delete('/orgs/'.rawurlencode($organization).'/hooks/'.$id);
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Organization/Members.php b/vendor/knplabs/github-api/lib/Github/Api/Organization/Members.php
index 3639e3ba..023e3f8d 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Organization/Members.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Organization/Members.php
@@ -58,9 +58,9 @@ class Members extends AbstractApi
     /*
      * Add user to organization
      */
-    public function add($organization, $username)
+    public function add($organization, $username, array $params = [])
     {
-        return $this->put('/orgs/'.rawurlencode($organization).'/memberships/'.rawurlencode($username));
+        return $this->put('/orgs/'.rawurlencode($organization).'/memberships/'.rawurlencode($username), $params);
     }
 
     public function addMember($organization, $username)
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Organization/OutsideCollaborators.php b/vendor/knplabs/github-api/lib/Github/Api/Organization/OutsideCollaborators.php
new file mode 100644
index 00000000..958100a5
--- /dev/null
+++ b/vendor/knplabs/github-api/lib/Github/Api/Organization/OutsideCollaborators.php
@@ -0,0 +1,52 @@
+
+ */
+class OutsideCollaborators extends AbstractApi
+{
+    /**
+     * @link https://developer.github.com/v3/orgs/outside_collaborators/#list-outside-collaborators-for-an-organization
+     *
+     * @param string $organization the organization
+     * @param array  $params
+     *
+     * @return array the organizations
+     */
+    public function all($organization, array $params = [])
+    {
+        return $this->get('/orgs/'.rawurlencode($organization).'/outside_collaborators', $params);
+    }
+
+    /**
+     * @link https://developer.github.com/v3/orgs/outside_collaborators/#convert-an-organization-member-to-outside-collaborator
+     *
+     * @param string $organization the organization
+     * @param string $username     the github username
+     *
+     * @return array
+     */
+    public function convert($organization, $username)
+    {
+        return $this->put('/orgs/'.rawurlencode($organization).'/outside_collaborators/'.rawurldecode($username));
+    }
+
+    /**
+     * @link https://developer.github.com/v3/orgs/outside_collaborators/#remove-outside-collaborator-from-an-organization
+     *
+     * @param string $organization the organization
+     * @param string $username     the username
+     *
+     * @return array
+     */
+    public function remove($organization, $username)
+    {
+        return $this->delete('/orgs/'.rawurlencode($organization).'/outside_collaborators/'.rawurldecode($username));
+    }
+}
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Organization/Teams.php b/vendor/knplabs/github-api/lib/Github/Api/Organization/Teams.php
index 401dbe4f..3af63b73 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Organization/Teams.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Organization/Teams.php
@@ -32,12 +32,18 @@ class Teams extends AbstractApi
         return $this->post('/orgs/'.rawurlencode($organization).'/teams', $params);
     }
 
-    public function show($team)
+    /**
+     * @link https://developer.github.com/v3/teams/#list-teams
+     */
+    public function show($team, $organization)
     {
-        return $this->get('/teams/'.rawurlencode($team));
+        return $this->get('/orgs/'.rawurlencode($organization).'/teams/'.rawurlencode($team));
     }
 
-    public function update($team, array $params)
+    /**
+     * @link https://developer.github.com/v3/teams/#edit-team
+     */
+    public function update($team, array $params, $organization)
     {
         if (!isset($params['name'])) {
             throw new MissingArgumentException('name');
@@ -46,32 +52,47 @@ class Teams extends AbstractApi
             $params['permission'] = 'pull';
         }
 
-        return $this->patch('/teams/'.rawurlencode($team), $params);
+        return $this->patch('/orgs/'.rawurlencode($organization).'/teams/'.rawurlencode($team), $params);
     }
 
-    public function remove($team)
+    /**
+     * @link https://developer.github.com/v3/teams/#delete-team
+     */
+    public function remove($team, $organization)
     {
-        return $this->delete('/teams/'.rawurlencode($team));
+        return $this->delete('/orgs/'.rawurlencode($organization).'/teams/'.rawurlencode($team));
     }
 
-    public function members($team)
+    /**
+     * @link https://developer.github.com/v3/teams/members/#list-team-members
+     */
+    public function members($team, $organization)
     {
-        return $this->get('/teams/'.rawurlencode($team).'/members');
+        return $this->get('/orgs/'.rawurlencode($organization).'/teams/'.rawurlencode($team).'/members');
     }
 
-    public function check($team, $username)
+    /**
+     * @link https://developer.github.com/v3/teams/members/#get-team-membership
+     */
+    public function check($team, $username, $organization)
     {
-        return $this->get('/teams/'.rawurlencode($team).'/memberships/'.rawurlencode($username));
+        return $this->get('/orgs/'.rawurlencode($organization).'/teams/'.rawurlencode($team).'/memberships/'.rawurlencode($username));
     }
 
-    public function addMember($team, $username)
+    /**
+     * @link https://developer.github.com/v3/teams/members/#add-or-update-team-membership
+     */
+    public function addMember($team, $username, $organization)
     {
-        return $this->put('/teams/'.rawurlencode($team).'/memberships/'.rawurlencode($username));
+        return $this->put('/orgs/'.rawurlencode($organization).'/teams/'.rawurlencode($team).'/memberships/'.rawurlencode($username));
     }
 
-    public function removeMember($team, $username)
+    /**
+     * @link https://developer.github.com/v3/teams/members/#remove-team-membership
+     */
+    public function removeMember($team, $username, $organization)
     {
-        return $this->delete('/teams/'.rawurlencode($team).'/memberships/'.rawurlencode($username));
+        return $this->delete('/orgs/'.rawurlencode($organization).'/teams/'.rawurlencode($team).'/memberships/'.rawurlencode($username));
     }
 
     public function repositories($team)
@@ -86,15 +107,15 @@ class Teams extends AbstractApi
 
     public function addRepository($team, $organization, $repository, $params = [])
     {
-        if (isset($params['permission']) && !in_array($params['permission'], ['pull', 'push', 'admin'])) {
+        if (isset($params['permission']) && !in_array($params['permission'], ['pull', 'push', 'admin', 'maintain', 'triage'])) {
             $params['permission'] = 'pull';
         }
 
-        return $this->put('/teams/'.rawurlencode($team).'/repos/'.rawurlencode($organization).'/'.rawurlencode($repository), $params);
+        return $this->put('/orgs/'.rawurlencode($organization).'/teams/'.rawurlencode($team).'/repos/'.rawurlencode($organization).'/'.rawurlencode($repository), $params);
     }
 
     public function removeRepository($team, $organization, $repository)
     {
-        return $this->delete('/teams/'.rawurlencode($team).'/repos/'.rawurlencode($organization).'/'.rawurlencode($repository));
+        return $this->delete('/orgs/'.rawurlencode($organization).'/teams/'.rawurlencode($team).'/repos/'.rawurlencode($organization).'/'.rawurlencode($repository));
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Project/AbstractProjectApi.php b/vendor/knplabs/github-api/lib/Github/Api/Project/AbstractProjectApi.php
index 15274d7d..049d6756 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Project/AbstractProjectApi.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Project/AbstractProjectApi.php
@@ -14,7 +14,7 @@ abstract class AbstractProjectApi extends AbstractApi
      *
      * @see https://developer.github.com/v3/repos/projects/#projects
      *
-     * @return self
+     * @return $this
      */
     public function configure()
     {
@@ -40,6 +40,6 @@ abstract class AbstractProjectApi extends AbstractApi
 
     public function columns()
     {
-        return new Columns($this->client);
+        return new Columns($this->getClient());
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Project/Cards.php b/vendor/knplabs/github-api/lib/Github/Api/Project/Cards.php
index 758e7708..0d670f93 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Project/Cards.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Project/Cards.php
@@ -15,7 +15,7 @@ class Cards extends AbstractApi
      *
      * @see https://developer.github.com/v3/repos/projects/#projects
      *
-     * @return self
+     * @return $this
      */
     public function configure()
     {
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Project/Columns.php b/vendor/knplabs/github-api/lib/Github/Api/Project/Columns.php
index 22e5cbaf..5146ac22 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Project/Columns.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Project/Columns.php
@@ -68,6 +68,6 @@ class Columns extends AbstractApi
 
     public function cards()
     {
-        return new Cards($this->client);
+        return new Cards($this->getClient());
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/PullRequest.php b/vendor/knplabs/github-api/lib/Github/Api/PullRequest.php
index 1f22137a..ce1c2b1d 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/PullRequest.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/PullRequest.php
@@ -27,12 +27,12 @@ class PullRequest extends AbstractApi
      * @param string|null $bodyType
      * @param string|null $apiVersion
      *
-     * @return self
+     * @return $this
      */
     public function configure($bodyType = null, $apiVersion = null)
     {
         if (null === $apiVersion) {
-            $apiVersion = $this->client->getApiVersion();
+            $apiVersion = $this->getApiVersion();
         }
 
         if (!in_array($bodyType, ['text', 'html', 'full', 'diff', 'patch'])) {
@@ -55,17 +55,12 @@ class PullRequest extends AbstractApi
      *
      * @param string $username   the username
      * @param string $repository the repository
-     * @param array  $params     a list of extra parameters.
+     * @param array  $parameters a list of extra parameters.
      *
      * @return array array of pull requests for the project
      */
-    public function all($username, $repository, array $params = [])
+    public function all($username, $repository, array $parameters = [])
     {
-        $parameters = array_merge([
-            'page' => 1,
-            'per_page' => 30,
-        ], $params);
-
         return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls', $parameters);
     }
 
@@ -82,17 +77,17 @@ class PullRequest extends AbstractApi
      */
     public function show($username, $repository, $id)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($id));
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$id);
     }
 
-    public function commits($username, $repository, $id)
+    public function commits($username, $repository, $id, array $parameters = [])
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($id).'/commits');
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($id).'/commits', $parameters);
     }
 
-    public function files($username, $repository, $id)
+    public function files($username, $repository, $id, array $parameters = [])
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($id).'/files');
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($id).'/files', $parameters);
     }
 
     /**
@@ -115,17 +110,17 @@ class PullRequest extends AbstractApi
 
     public function comments()
     {
-        return new Comments($this->client);
+        return new Comments($this->getClient());
     }
 
     public function reviews()
     {
-        return new Review($this->client);
+        return new Review($this->getClient());
     }
 
     public function reviewRequests()
     {
-        return new ReviewRequest($this->client);
+        return new ReviewRequest($this->getClient());
     }
 
     /**
diff --git a/vendor/knplabs/github-api/lib/Github/Api/PullRequest/Comments.php b/vendor/knplabs/github-api/lib/Github/Api/PullRequest/Comments.php
index 992fcd93..3ded9456 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/PullRequest/Comments.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/PullRequest/Comments.php
@@ -23,12 +23,12 @@ class Comments extends AbstractApi
      * @param string|null $bodyType
      * @param string|null $apiVersion
      *
-     * @return self
+     * @return $this
      */
     public function configure($bodyType = null, $apiVersion = null)
     {
         if ($apiVersion !== 'squirrel-girl-preview') {
-            $apiVersion = $this->client->getApiVersion();
+            $apiVersion = $this->getApiVersion();
         }
 
         if (!in_array($bodyType, ['text', 'html', 'full'])) {
@@ -57,7 +57,7 @@ class Comments extends AbstractApi
     public function all($username, $repository, $pullRequest = null, array $params = [])
     {
         if (null !== $pullRequest) {
-            return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($pullRequest).'/comments');
+            return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/comments');
         }
 
         $parameters = array_merge([
@@ -81,7 +81,7 @@ class Comments extends AbstractApi
      */
     public function show($username, $repository, $comment)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/comments/'.rawurlencode($comment));
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/comments/'.$comment);
     }
 
     /**
@@ -109,7 +109,7 @@ class Comments extends AbstractApi
             throw new MissingArgumentException(['commit_id', 'path', 'position']);
         }
 
-        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($pullRequest).'/comments', $params);
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/comments', $params);
     }
 
     /**
@@ -132,7 +132,7 @@ class Comments extends AbstractApi
             throw new MissingArgumentException('body');
         }
 
-        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/comments/'.rawurlencode($comment), $params);
+        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/comments/'.$comment, $params);
     }
 
     /**
@@ -148,6 +148,6 @@ class Comments extends AbstractApi
      */
     public function remove($username, $repository, $comment)
     {
-        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/comments/'.rawurlencode($comment));
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/comments/'.$comment);
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/PullRequest/Review.php b/vendor/knplabs/github-api/lib/Github/Api/PullRequest/Review.php
index f9795de0..ed586ddf 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/PullRequest/Review.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/PullRequest/Review.php
@@ -20,6 +20,8 @@ class Review extends AbstractApi
 
     public function configure()
     {
+        trigger_deprecation('KnpLabs/php-github-api', '3.2', 'The "%s" is deprecated and will be removed.', __METHOD__);
+
         return $this;
     }
 
@@ -37,6 +39,10 @@ class Review extends AbstractApi
      */
     public function all($username, $repository, $pullRequest, array $params = [])
     {
+        if (!empty($params)) {
+            trigger_deprecation('KnpLabs/php-github-api', '3.2', 'The "$params" parameter is deprecated, to paginate the results use the "ResultPager" instead.');
+        }
+
         $parameters = array_merge([
             'page' => 1,
             'per_page' => 30,
@@ -93,7 +99,7 @@ class Review extends AbstractApi
      */
     public function comments($username, $repository, $pullRequest, $id)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($pullRequest).'/reviews/'.rawurlencode($id).'/comments');
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/reviews/'.$id.'/comments');
     }
 
     /**
@@ -171,7 +177,35 @@ class Review extends AbstractApi
         }
 
         return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/reviews/'.$id.'/dismissals', [
-          'message' => $message,
+            'message' => $message,
+        ]);
+    }
+
+    /**
+     * Update a pull request review by the username, repository, pull request number and the review id.
+     *
+     * @link https://developer.github.com/v3/pulls/reviews/#update-a-pull-request-review
+     *
+     * @param string $username    the username
+     * @param string $repository  the repository
+     * @param int    $pullRequest the pull request number
+     * @param int    $id          the review id
+     * @param string $body        a mandatory dismissal message
+     *
+     * @return array|string
+     */
+    public function update($username, $repository, $pullRequest, $id, $body)
+    {
+        if (!is_string($body)) {
+            throw new InvalidArgumentException(sprintf('"body" must be a valid string ("%s" given).', gettype($body)));
+        }
+
+        if (empty($body)) {
+            throw new InvalidArgumentException('"body" is mandatory and cannot be empty');
+        }
+
+        return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/reviews/'.$id, [
+            'body' => $body,
         ]);
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/PullRequest/ReviewRequest.php b/vendor/knplabs/github-api/lib/Github/Api/PullRequest/ReviewRequest.php
index 8321fd27..d95913cc 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/PullRequest/ReviewRequest.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/PullRequest/ReviewRequest.php
@@ -14,6 +14,8 @@ class ReviewRequest extends AbstractApi
 
     public function configure()
     {
+        trigger_deprecation('KnpLabs/php-github-api', '3.2', 'The "%s" is deprecated and will be removed.', __METHOD__);
+
         return $this;
     }
 
@@ -29,6 +31,10 @@ class ReviewRequest extends AbstractApi
      */
     public function all($username, $repository, $pullRequest, array $params = [])
     {
+        if (!empty($params)) {
+            trigger_deprecation('KnpLabs/php-github-api', '3.2', 'The "$params" parameter is deprecated, to paginate the results use the "ResultPager" instead.');
+        }
+
         return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/requested_reviewers', $params);
     }
 
@@ -39,12 +45,13 @@ class ReviewRequest extends AbstractApi
      * @param string $repository
      * @param int    $pullRequest
      * @param array  $reviewers
+     * @param array  $teamReviewers
      *
      * @return string
      */
-    public function create($username, $repository, $pullRequest, array $reviewers)
+    public function create($username, $repository, $pullRequest, array $reviewers = [], array $teamReviewers = [])
     {
-        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/requested_reviewers', ['reviewers' => $reviewers]);
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/requested_reviewers', ['reviewers' => $reviewers, 'team_reviewers' => $teamReviewers]);
     }
 
     /**
@@ -54,11 +61,12 @@ class ReviewRequest extends AbstractApi
      * @param string $repository
      * @param int    $pullRequest
      * @param array  $reviewers
+     * @param array  $teamReviewers
      *
      * @return string
      */
-    public function remove($username, $repository, $pullRequest, array $reviewers)
+    public function remove($username, $repository, $pullRequest, array $reviewers = [], array $teamReviewers = [])
     {
-        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/requested_reviewers', ['reviewers' => $reviewers]);
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.$pullRequest.'/requested_reviewers', ['reviewers' => $reviewers, 'team_reviewers' => $teamReviewers]);
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/RateLimit.php b/vendor/knplabs/github-api/lib/Github/Api/RateLimit.php
index e0550899..10b8b5b3 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/RateLimit.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/RateLimit.php
@@ -18,18 +18,6 @@ class RateLimit extends AbstractApi
      */
     protected $resources = [];
 
-    /**
-     * Get rate limits data in an array.
-     *
-     * @deprecated since 2.11.0 Use `->getResources()` instead
-     *
-     * @return array
-     */
-    public function getRateLimits()
-    {
-        return $this->fetchLimits();
-    }
-
     /**
      * Gets the rate limit resource objects.
      *
@@ -79,28 +67,4 @@ class RateLimit extends AbstractApi
 
         return $result;
     }
-
-    /**
-     * Get core rate limit.
-     *
-     * @deprecated since 2.11.0 Use `->getResource('core')->getLimit()` instead
-     *
-     * @return int
-     */
-    public function getCoreLimit()
-    {
-        return $this->getResource('core')->getLimit();
-    }
-
-    /**
-     * Get search rate limit.
-     *
-     * @deprecated since 2.11.0 Use `->getResource('core')->getLimit()` instead
-     *
-     * @return int
-     */
-    public function getSearchLimit()
-    {
-        return $this->getResource('search')->getLimit();
-    }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repo.php b/vendor/knplabs/github-api/lib/Github/Api/Repo.php
index c8e6a24d..12fe726b 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Repo.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repo.php
@@ -2,6 +2,14 @@
 
 namespace Github\Api;
 
+use Github\Api\Repository\Actions\Artifacts;
+use Github\Api\Repository\Actions\Secrets;
+use Github\Api\Repository\Actions\SelfHostedRunners;
+use Github\Api\Repository\Actions\WorkflowJobs;
+use Github\Api\Repository\Actions\WorkflowRuns;
+use Github\Api\Repository\Actions\Workflows;
+use Github\Api\Repository\Checks\CheckRuns;
+use Github\Api\Repository\Checks\CheckSuites;
 use Github\Api\Repository\Collaborators;
 use Github\Api\Repository\Comments;
 use Github\Api\Repository\Commits;
@@ -11,6 +19,7 @@ use Github\Api\Repository\Downloads;
 use Github\Api\Repository\Forks;
 use Github\Api\Repository\Hooks;
 use Github\Api\Repository\Labels;
+use Github\Api\Repository\Pages;
 use Github\Api\Repository\Projects;
 use Github\Api\Repository\Protection;
 use Github\Api\Repository\Releases;
@@ -31,22 +40,6 @@ class Repo extends AbstractApi
 {
     use AcceptHeaderTrait;
 
-    /**
-     * Search repositories by keyword.
-     *
-     * @deprecated This method is deprecated use the Search api instead. See https://developer.github.com/v3/search/legacy/#legacy-search-api-is-deprecated
-     * @link http://developer.github.com/v3/search/#search-repositories
-     *
-     * @param string $keyword the search query
-     * @param array  $params
-     *
-     * @return array list of found repositories
-     */
-    public function find($keyword, array $params = [])
-    {
-        return $this->get('/legacy/repos/search/'.rawurlencode($keyword), array_merge(['start_page' => 1], $params));
-    }
-
     /**
      * List all public repositories.
      *
@@ -62,7 +55,7 @@ class Repo extends AbstractApi
             return $this->get('/repositories');
         }
 
-        return $this->get('/repositories?since='.rawurldecode($id));
+        return $this->get('/repositories', ['since' => $id]);
     }
 
     /**
@@ -169,7 +162,7 @@ class Repo extends AbstractApi
      */
     public function showById($id)
     {
-        return $this->get('/repositories/'.rawurlencode($id));
+        return $this->get('/repositories/'.$id);
     }
 
     /**
@@ -181,13 +174,14 @@ class Repo extends AbstractApi
      * @param string      $description  repository description
      * @param string      $homepage     homepage url
      * @param bool        $public       `true` for public, `false` for private
-     * @param null|string $organization username of organization if applicable
+     * @param string|null $organization username of organization if applicable
      * @param bool        $hasIssues    `true` to enable issues for this repository, `false` to disable them
      * @param bool        $hasWiki      `true` to enable the wiki for this repository, `false` to disable it
      * @param bool        $hasDownloads `true` to enable downloads for this repository, `false` to disable them
      * @param int         $teamId       The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization.
      * @param bool        $autoInit     `true` to create an initial commit with empty README, `false` for no initial commit
      * @param bool        $hasProjects  `true` to enable projects for this repository or false to disable them.
+     * @param string|null $visibility
      *
      * @return array returns repository data
      */
@@ -202,7 +196,8 @@ class Repo extends AbstractApi
         $hasDownloads = false,
         $teamId = null,
         $autoInit = false,
-        $hasProjects = true
+        $hasProjects = true,
+        $visibility = null
     ) {
         $path = null !== $organization ? '/orgs/'.$organization.'/repos' : '/user/repos';
 
@@ -210,7 +205,8 @@ class Repo extends AbstractApi
             'name'          => $name,
             'description'   => $description,
             'homepage'      => $homepage,
-            'private'       => !$public,
+            'private'       => ($visibility ?? ($public ? 'public' : 'private')) === 'private',
+            'visibility'    => $visibility ?? ($public ? 'public' : 'private'),
             'has_issues'    => $hasIssues,
             'has_wiki'      => $hasWiki,
             'has_downloads' => $hasDownloads,
@@ -264,16 +260,43 @@ class Repo extends AbstractApi
      * @param string $username   the user who owns the repository
      * @param string $repository the name of the repository
      * @param string $format     one of formats: "raw", "html", or "v3+json"
+     * @param string $dir        The alternate path to look for a README file
+     * @param array  $params     additional query params like "ref" to fetch readme for branch/tag
      *
      * @return string|array the readme content
      */
-    public function readme($username, $repository, $format = 'raw')
+    public function readme($username, $repository, $format = 'raw', $dir = null, $params = [])
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/readme', [], [
+        $path = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/readme';
+
+        if (null !== $dir) {
+            $path .= '/'.rawurlencode($dir);
+        }
+
+        return $this->get($path, $params, [
             'Accept' => "application/vnd.github.$format",
         ]);
     }
 
+    /**
+     * Create a repository dispatch event.
+     *
+     * @link https://developer.github.com/v3/repos/#create-a-repository-dispatch-event
+     *
+     * @param string $username   the user who owns the repository
+     * @param string $repository the name of the repository
+     * @param string $eventType  A custom webhook event name
+     *
+     * @return mixed null on success, array on error with 'message'
+     */
+    public function dispatch($username, $repository, $eventType, array $clientPayload)
+    {
+        return $this->post(\sprintf('/repos/%s/%s/dispatches', rawurlencode($username), rawurlencode($repository)), [
+            'event_type' => $eventType,
+            'client_payload' => $clientPayload,
+        ]);
+    }
+
     /**
      * Manage the collaborators of a repository.
      *
@@ -283,7 +306,7 @@ class Repo extends AbstractApi
      */
     public function collaborators()
     {
-        return new Collaborators($this->client);
+        return new Collaborators($this->getClient());
     }
 
     /**
@@ -295,7 +318,7 @@ class Repo extends AbstractApi
      */
     public function comments()
     {
-        return new Comments($this->client);
+        return new Comments($this->getClient());
     }
 
     /**
@@ -307,7 +330,71 @@ class Repo extends AbstractApi
      */
     public function commits()
     {
-        return new Commits($this->client);
+        return new Commits($this->getClient());
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/checks#check-runs
+     */
+    public function checkRuns(): CheckRuns
+    {
+        return new CheckRuns($this->getClient());
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/checks#check-suites
+     */
+    public function checkSuites(): CheckSuites
+    {
+        return new CheckSuites($this->getClient());
+    }
+
+    /**
+     * @link https://developer.github.com/v3/actions/artifacts/#artifacts
+     */
+    public function artifacts(): Artifacts
+    {
+        return new Artifacts($this->getClient());
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#workflows
+     */
+    public function workflows(): Workflows
+    {
+        return new Workflows($this->getClient());
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#workflow-runs
+     */
+    public function workflowRuns(): WorkflowRuns
+    {
+        return new WorkflowRuns($this->getClient());
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#workflow-jobs
+     */
+    public function workflowJobs(): WorkflowJobs
+    {
+        return new WorkflowJobs($this->getClient());
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#self-hosted-runners
+     */
+    public function selfHostedRunners(): SelfHostedRunners
+    {
+        return new SelfHostedRunners($this->getClient());
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#secrets
+     */
+    public function secrets(): Secrets
+    {
+        return new Secrets($this->getClient());
     }
 
     /**
@@ -319,7 +406,7 @@ class Repo extends AbstractApi
      */
     public function contents()
     {
-        return new Contents($this->client);
+        return new Contents($this->getClient());
     }
 
     /**
@@ -331,7 +418,7 @@ class Repo extends AbstractApi
      */
     public function downloads()
     {
-        return new Downloads($this->client);
+        return new Downloads($this->getClient());
     }
 
     /**
@@ -343,7 +430,7 @@ class Repo extends AbstractApi
      */
     public function releases()
     {
-        return new Releases($this->client);
+        return new Releases($this->getClient());
     }
 
     /**
@@ -355,7 +442,7 @@ class Repo extends AbstractApi
      */
     public function keys()
     {
-        return new DeployKeys($this->client);
+        return new DeployKeys($this->getClient());
     }
 
     /**
@@ -367,7 +454,7 @@ class Repo extends AbstractApi
      */
     public function forks()
     {
-        return new Forks($this->client);
+        return new Forks($this->getClient());
     }
 
     /**
@@ -379,7 +466,7 @@ class Repo extends AbstractApi
      */
     public function stargazers()
     {
-        return new Stargazers($this->client);
+        return new Stargazers($this->getClient());
     }
 
     /**
@@ -391,7 +478,7 @@ class Repo extends AbstractApi
      */
     public function hooks()
     {
-        return new Hooks($this->client);
+        return new Hooks($this->getClient());
     }
 
     /**
@@ -403,7 +490,7 @@ class Repo extends AbstractApi
      */
     public function labels()
     {
-        return new Labels($this->client);
+        return new Labels($this->getClient());
     }
 
     /**
@@ -415,7 +502,7 @@ class Repo extends AbstractApi
      */
     public function statuses()
     {
-        return new Statuses($this->client);
+        return new Statuses($this->getClient());
     }
 
     /**
@@ -426,17 +513,18 @@ class Repo extends AbstractApi
      * @param string $username   the username
      * @param string $repository the name of the repository
      * @param string $branch     the name of the branch
+     * @param array  $parameters parameters for the query string
      *
      * @return array list of the repository branches
      */
-    public function branches($username, $repository, $branch = null)
+    public function branches($username, $repository, $branch = null, array $parameters = [])
     {
         $url = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/branches';
         if (null !== $branch) {
             $url .= '/'.rawurlencode($branch);
         }
 
-        return $this->get($url);
+        return $this->get($url, $parameters);
     }
 
     /**
@@ -448,7 +536,7 @@ class Repo extends AbstractApi
      */
     public function protection()
     {
-        return new Protection($this->client);
+        return new Protection($this->getClient());
     }
 
     /**
@@ -516,22 +604,6 @@ class Repo extends AbstractApi
         return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/teams');
     }
 
-    /**
-     * @deprecated see subscribers method
-     *
-     * @param string $username
-     * @param string $repository
-     * @param int    $page
-     *
-     * @return array
-     */
-    public function watchers($username, $repository, $page = 1)
-    {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/watchers', [
-            'page' => $page,
-        ]);
-    }
-
     /**
      * @param string $username
      * @param string $repository
@@ -557,7 +629,7 @@ class Repo extends AbstractApi
      * @param string $head       The head to merge. This can be a branch name or a commit SHA1.
      * @param string $message    Commit message to use for the merge commit. If omitted, a default message will be used.
      *
-     * @return array|null
+     * @return array|string
      */
     public function merge($username, $repository, $base, $head, $message = null)
     {
@@ -576,22 +648,58 @@ class Repo extends AbstractApi
     /**
      * @param string $username
      * @param string $repository
+     * @param array  $parameters
      *
      * @return array
      */
-    public function milestones($username, $repository)
+    public function milestones($username, $repository, array $parameters = [])
     {
-        return $this->get('/repos/'.rawurldecode($username).'/'.rawurldecode($repository).'/milestones');
+        return $this->get('/repos/'.rawurldecode($username).'/'.rawurldecode($repository).'/milestones', $parameters);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/repos#enable-automated-security-fixes
+     *
+     * @param string $username
+     * @param string $repository
+     *
+     * @return array|string
+     */
+    public function enableAutomatedSecurityFixes(string $username, string $repository)
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.london-preview+json';
+
+        return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/automated-security-fixes');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/repos#disable-automated-security-fixes
+     *
+     * @param string $username
+     * @param string $repository
+     *
+     * @return array|string
+     */
+    public function disableAutomatedSecurityFixes(string $username, string $repository)
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.london-preview+json';
+
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/automated-security-fixes');
     }
 
     public function projects()
     {
-        return new Projects($this->client);
+        return new Projects($this->getClient());
     }
 
     public function traffic()
     {
-        return new Traffic($this->client);
+        return new Traffic($this->getClient());
+    }
+
+    public function pages()
+    {
+        return new Pages($this->getClient());
     }
 
     /**
@@ -608,6 +716,24 @@ class Repo extends AbstractApi
         return $this->get('/repos/'.rawurldecode($username).'/'.rawurldecode($repository).'/events', ['page' => $page]);
     }
 
+    /**
+     * Get the community profile metrics for a repository.
+     *
+     * @link https://developer.github.com/v3/repos/community/#retrieve-community-profile-metrics
+     *
+     * @param string $username
+     * @param string $repository
+     *
+     * @return array
+     */
+    public function communityProfile($username, $repository)
+    {
+        //This api is in preview mode, so set the correct accept-header
+        $this->acceptHeaderValue = 'application/vnd.github.black-panther-preview+json';
+
+        return $this->get('/repos/'.rawurldecode($username).'/'.rawurldecode($repository).'/community/profile');
+    }
+
     /**
      * Get the contents of a repository's code of conduct.
      *
@@ -677,9 +803,21 @@ class Repo extends AbstractApi
      */
     public function transfer($username, $repository, $newOwner, $teamId = [])
     {
-        //This api is in preview mode, so set the correct accept-header
-        $this->acceptHeaderValue = 'application/vnd.github.nightshade-preview+json';
-
         return $this->post('/repos/'.rawurldecode($username).'/'.rawurldecode($repository).'/transfer', ['new_owner' => $newOwner, 'team_id' => $teamId]);
     }
+
+    /**
+     * Create a repository using a template.
+     *
+     * @link https://developer.github.com/v3/repos/#create-a-repository-using-a-template
+     *
+     * @return array
+     */
+    public function createFromTemplate(string $templateOwner, string $templateRepo, array $parameters = [])
+    {
+        //This api is in preview mode, so set the correct accept-header
+        $this->acceptHeaderValue = 'application/vnd.github.baptiste-preview+json';
+
+        return $this->post('/repos/'.rawurldecode($templateOwner).'/'.rawurldecode($templateRepo).'/generate', $parameters);
+    }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/Artifacts.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/Artifacts.php
new file mode 100644
index 00000000..84f3b060
--- /dev/null
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/Artifacts.php
@@ -0,0 +1,82 @@
+get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/artifacts', $parameters);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#list-workflow-run-artifacts
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $runId
+     *
+     * @return array
+     */
+    public function runArtifacts(string $username, string $repository, int $runId)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/runs/'.$runId.'/artifacts');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#get-an-artifact
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $artifactId
+     *
+     * @return array
+     */
+    public function show(string $username, string $repository, int $artifactId)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/artifacts/'.$artifactId);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#delete-an-artifact
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $artifactId
+     *
+     * @return array
+     */
+    public function remove(string $username, string $repository, int $artifactId)
+    {
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/artifacts/'.$artifactId);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#download-an-artifact
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $artifactId
+     * @param string $format
+     *
+     * @return array
+     */
+    public function download(string $username, string $repository, int $artifactId, string $format = 'zip')
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/artifacts/'.$artifactId.'/'.$format);
+    }
+}
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/Secrets.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/Secrets.php
new file mode 100644
index 00000000..2085a133
--- /dev/null
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/Secrets.php
@@ -0,0 +1,95 @@
+get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/secrets');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#get-a-repository-secret
+     *
+     * @param string $username
+     * @param string $repository
+     * @param string $secretName
+     *
+     * @return array|string
+     */
+    public function show(string $username, string $repository, string $secretName)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/secrets/'.rawurlencode($secretName));
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#create-or-update-a-repository-secret
+     *
+     * @param string $username
+     * @param string $repository
+     * @param string $secretName
+     * @param array  $parameters
+     *
+     * @return array|string
+     */
+    public function create(string $username, string $repository, string $secretName, array $parameters = [])
+    {
+        return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/secrets/'.rawurlencode($secretName), $parameters);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#create-or-update-a-repository-secret
+     *
+     * @param string $username
+     * @param string $repository
+     * @param string $secretName
+     * @param array  $parameters
+     *
+     * @return array|string
+     */
+    public function update(string $username, string $repository, string $secretName, array $parameters = [])
+    {
+        return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/secrets/'.rawurlencode($secretName), $parameters);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#delete-a-repository-secret
+     *
+     * @param string $username
+     * @param string $repository
+     * @param string $secretName
+     *
+     * @return array|string
+     */
+    public function remove(string $username, string $repository, string $secretName)
+    {
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/secrets/'.rawurlencode($secretName));
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#get-a-repository-public-key
+     *
+     * @param string $username
+     * @param string $repository
+     *
+     * @return array|string
+     */
+    public function publicKey(string $username, string $repository)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/secrets/public-key');
+    }
+}
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/SelfHostedRunners.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/SelfHostedRunners.php
new file mode 100644
index 00000000..7eb1a9d4
--- /dev/null
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/SelfHostedRunners.php
@@ -0,0 +1,65 @@
+get('/repos/'.rawurlencode($username).'/'.rawurldecode($repository).'/actions/runners');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#get-a-self-hosted-runner-for-a-repository
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $runnerId
+     *
+     * @return array|string
+     */
+    public function show(string $username, string $repository, int $runnerId)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurldecode($repository).'/actions/runners/'.$runnerId);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#delete-a-self-hosted-runner-from-a-repository
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $runnerId
+     *
+     * @return array|string
+     */
+    public function remove(string $username, string $repository, int $runnerId)
+    {
+        return $this->delete('/repos/'.rawurldecode($username).'/'.rawurldecode($repository).'/actions/runners/'.$runnerId);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#list-runner-applications-for-a-repository
+     *
+     * @param string $username
+     * @param string $repository
+     *
+     * @return array|string
+     */
+    public function applications(string $username, string $repository)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/runners/downloads');
+    }
+}
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/WorkflowJobs.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/WorkflowJobs.php
new file mode 100644
index 00000000..3167d3db
--- /dev/null
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/WorkflowJobs.php
@@ -0,0 +1,54 @@
+get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/runs/'.$runId.'/jobs', $parameters);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#get-a-job-for-a-workflow-run
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $jobId
+     *
+     * @return array
+     */
+    public function show(string $username, string $repository, int $jobId)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/jobs/'.$jobId);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#download-job-logs-for-a-workflow-run
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $jobId
+     *
+     * @return array
+     */
+    public function downloadLogs(string $username, string $repository, int $jobId)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/jobs/'.$jobId.'/logs');
+    }
+}
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/WorkflowRuns.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/WorkflowRuns.php
new file mode 100644
index 00000000..d6f95f1e
--- /dev/null
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/WorkflowRuns.php
@@ -0,0 +1,155 @@
+get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/runs', $parameters);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#list-workflow-runs
+     *
+     * @param string $username
+     * @param string $repository
+     * @param string $workflow
+     * @param array  $parameters
+     *
+     * @return array
+     */
+    public function listRuns(string $username, string $repository, string $workflow, array $parameters = [])
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/workflows/'.rawurlencode($workflow).'/runs', $parameters);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#get-a-workflow-run
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $runId
+     * @param array  $parameters
+     *
+     * @return array
+     */
+    public function show(string $username, string $repository, int $runId, array $parameters = [])
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/runs/'.$runId, $parameters);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#delete-a-workflow-run
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $runId
+     *
+     * @return array|string
+     */
+    public function remove(string $username, string $repository, int $runId)
+    {
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/runs/'.$runId);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#re-run-a-workflow
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $runId
+     *
+     * @return array
+     */
+    public function rerun(string $username, string $repository, int $runId)
+    {
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/runs/'.$runId.'/rerun');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#cancel-a-workflow-run
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $runId
+     *
+     * @return array
+     */
+    public function cancel(string $username, string $repository, int $runId)
+    {
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/runs/'.$runId.'/cancel');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#get-workflow-run-usage
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $runId
+     *
+     * @return array
+     */
+    public function usage(string $username, string $repository, int $runId)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/runs/'.$runId.'/timing');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#download-workflow-run-logs
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $runId
+     *
+     * @return array|string
+     */
+    public function downloadLogs(string $username, string $repository, int $runId)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/runs/'.$runId.'/logs');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#delete-workflow-run-logs
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $runId
+     *
+     * @return array|string
+     */
+    public function deleteLogs(string $username, string $repository, int $runId)
+    {
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/runs/'.$runId.'/logs');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#approve-a-workflow-run-for-a-fork-pull-request
+     *
+     * @param string $username
+     * @param string $repository
+     * @param int    $runId
+     *
+     * @return array|string
+     *
+     * @experimental This endpoint is currently in beta.
+     */
+    public function approve(string $username, string $repository, int $runId)
+    {
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/runs/'.$runId.'/approve');
+    }
+}
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/Workflows.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/Workflows.php
new file mode 100644
index 00000000..e425f9d2
--- /dev/null
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Actions/Workflows.php
@@ -0,0 +1,82 @@
+get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/workflows', $parameters);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#get-a-workflow
+     *
+     * @param string     $username
+     * @param string     $repository
+     * @param string|int $workflow
+     *
+     * @return array
+     */
+    public function show(string $username, string $repository, $workflow)
+    {
+        if (is_string($workflow)) {
+            $workflow = rawurlencode($workflow);
+        }
+
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/workflows/'.$workflow);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#get-workflow-usage
+     *
+     * @param string     $username
+     * @param string     $repository
+     * @param string|int $workflow
+     *
+     * @return array|string
+     */
+    public function usage(string $username, string $repository, $workflow)
+    {
+        if (is_string($workflow)) {
+            $workflow = rawurlencode($workflow);
+        }
+
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/workflows/'.$workflow.'/timing');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/actions#create-a-workflow-dispatch-event
+     *
+     * @param string     $username
+     * @param string     $repository
+     * @param string|int $workflow
+     * @param string     $ref
+     * @param array      $inputs
+     *
+     * @return array|string empty
+     */
+    public function dispatches(string $username, string $repository, $workflow, string $ref, array $inputs = null)
+    {
+        if (is_string($workflow)) {
+            $workflow = rawurlencode($workflow);
+        }
+        $parameters = array_filter(['ref' => $ref, 'inputs' => $inputs]);
+
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/actions/workflows/'.$workflow.'/dispatches', $parameters);
+    }
+}
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Assets.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Assets.php
index dbe6da22..043016e7 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Repository/Assets.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Assets.php
@@ -3,6 +3,7 @@
 namespace Github\Api\Repository;
 
 use Github\Api\AbstractApi;
+use Github\Api\AcceptHeaderTrait;
 use Github\Exception\ErrorException;
 use Github\Exception\MissingArgumentException;
 
@@ -13,6 +14,8 @@ use Github\Exception\MissingArgumentException;
  */
 class Assets extends AbstractApi
 {
+    use AcceptHeaderTrait;
+
     /**
      * Get all release's assets in selected repository
      * GET /repos/:owner/:repo/releases/:id/assets.
@@ -25,7 +28,7 @@ class Assets extends AbstractApi
      */
     public function all($username, $repository, $id)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/'.rawurlencode($id).'/assets');
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/'.$id.'/assets');
     }
 
     /**
@@ -36,11 +39,15 @@ class Assets extends AbstractApi
      * @param string $repository the name of the repo
      * @param int    $id         the id of the asset
      *
-     * @return array
+     * @return array|string
      */
-    public function show($username, $repository, $id)
+    public function show($username, $repository, $id, bool $returnBinaryContent = false)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/assets/'.rawurlencode($id));
+        if ($returnBinaryContent) {
+            $this->acceptHeaderValue = 'application/octet-stream';
+        }
+
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/assets/'.$id);
     }
 
     /**
@@ -67,16 +74,14 @@ class Assets extends AbstractApi
      */
     public function create($username, $repository, $id, $name, $contentType, $content)
     {
-        if (!defined('OPENSSL_TLSEXT_SERVER_NAME') || !OPENSSL_TLSEXT_SERVER_NAME) {
-            throw new ErrorException('Asset upload support requires Server Name Indication. This is not supported by your PHP version. See http://php.net/manual/en/openssl.constsni.php.');
+        if (!defined('OPENSSL_TLSEXT_SERVER_NAME') || OPENSSL_TLSEXT_SERVER_NAME == 0) {
+            throw new ErrorException('Asset upload support requires Server Name Indication. This is not supported by your PHP version. See https://www.php.net/manual/en/openssl.constsni.php.');
         }
 
         // Asset creation requires a separate endpoint, uploads.github.com.
         // Change the base url for the HTTP client temporarily while we execute
         // this request.
-        $response = $this->postRaw('https://uploads.github.com/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/'.rawurlencode($id).'/assets?name='.$name, $content, ['Content-Type' => $contentType]);
-
-        return $response;
+        return $this->postRaw('https://uploads.github.com/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/'.$id.'/assets?name='.$name, $content, ['Content-Type' => $contentType]);
     }
 
     /**
@@ -98,7 +103,7 @@ class Assets extends AbstractApi
             throw new MissingArgumentException('name');
         }
 
-        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/assets/'.rawurlencode($id), $params);
+        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/assets/'.$id, $params);
     }
 
     /**
@@ -113,6 +118,6 @@ class Assets extends AbstractApi
      */
     public function remove($username, $repository, $id)
     {
-        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/assets/'.rawurlencode($id));
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/assets/'.$id);
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Checks/CheckRuns.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Checks/CheckRuns.php
new file mode 100644
index 00000000..37968a01
--- /dev/null
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Checks/CheckRuns.php
@@ -0,0 +1,86 @@
+acceptHeaderValue = 'application/vnd.github.antiope-preview+json';
+
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/check-runs', $params);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/checks#get-a-check-run
+     *
+     * @return array
+     */
+    public function show(string $username, string $repository, int $checkRunId)
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.antiope-preview+json';
+
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/check-runs/'.$checkRunId);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/checks#update-a-check-run
+     *
+     * @return array
+     */
+    public function update(string $username, string $repository, int $checkRunId, array $params = [])
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.antiope-preview+json';
+
+        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/check-runs/'.$checkRunId, $params);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/checks#list-check-run-annotations
+     *
+     * @return array
+     */
+    public function annotations(string $username, string $repository, int $checkRunId)
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.antiope-preview+json';
+
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/check-runs/'.$checkRunId.'/annotations');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/checks#list-check-runs-in-a-check-suite
+     *
+     * @return array
+     */
+    public function allForCheckSuite(string $username, string $repository, int $checkSuiteId, array $params = [])
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.antiope-preview+json';
+
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/check-suites/'.$checkSuiteId.'/check-runs', $params);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/checks#list-check-runs-for-a-git-reference
+     *
+     * @return array
+     */
+    public function allForReference(string $username, string $repository, string $ref, array $params = [])
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.antiope-preview+json';
+
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/commits/'.rawurlencode($ref).'/check-runs', $params);
+    }
+}
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Checks/CheckSuites.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Checks/CheckSuites.php
new file mode 100644
index 00000000..40c83a56
--- /dev/null
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Checks/CheckSuites.php
@@ -0,0 +1,74 @@
+acceptHeaderValue = 'application/vnd.github.antiope-preview+json';
+
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/check-suites', $params);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/checks#update-repository-preferences-for-check-suites
+     *
+     * @return array
+     */
+    public function updatePreferences(string $username, string $repository, array $params = [])
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.antiope-preview+json';
+
+        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/check-suites/preferences', $params);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/checks#get-a-check-suite
+     *
+     * @return array
+     */
+    public function getCheckSuite(string $username, string $repository, int $checkSuiteId)
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.antiope-preview+json';
+
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/check-suites/'.$checkSuiteId);
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/checks#rerequest-a-check-suite
+     *
+     * @return array
+     */
+    public function rerequest(string $username, string $repository, int $checkSuiteId)
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.antiope-preview+json';
+
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/check-suites/'.$checkSuiteId.'/rerequest');
+    }
+
+    /**
+     * @link https://docs.github.com/en/rest/reference/checks#list-check-suites-for-a-git-reference
+     *
+     * @return array
+     */
+    public function allForReference(string $username, string $repository, string $ref, array $params = [])
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.antiope-preview+json';
+
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/commits/'.rawurlencode($ref).'/check-suites', $params);
+    }
+}
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Comments.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Comments.php
index 53feb72c..40eb2b53 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Repository/Comments.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Comments.php
@@ -23,7 +23,7 @@ class Comments extends AbstractApi
      *
      * @param string|null $bodyType
      *
-     * @return self
+     * @return $this
      */
     public function configure($bodyType = null)
     {
@@ -31,7 +31,7 @@ class Comments extends AbstractApi
             $bodyType = 'full';
         }
 
-        $this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s+json', $this->client->getApiVersion(), $bodyType);
+        $this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s+json', $this->getApiVersion(), $bodyType);
 
         return $this;
     }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Contents.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Contents.php
index 631fff2c..bc78503b 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Repository/Contents.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Contents.php
@@ -25,7 +25,7 @@ class Contents extends AbstractApi
      *
      * @param string|null $bodyType
      *
-     * @return self
+     * @return $this
      */
     public function configure($bodyType = null)
     {
@@ -33,7 +33,7 @@ class Contents extends AbstractApi
             $bodyType = 'raw';
         }
 
-        $this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s', $this->client->getApiVersion(), $bodyType);
+        $this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s', $this->getApiVersion(), $bodyType);
 
         return $this;
     }
@@ -45,7 +45,7 @@ class Contents extends AbstractApi
      *
      * @param string      $username   the user who owns the repository
      * @param string      $repository the name of the repository
-     * @param null|string $reference  reference to a branch or commit
+     * @param string|null $reference  reference to a branch or commit
      *
      * @return array information for README file
      */
@@ -63,8 +63,8 @@ class Contents extends AbstractApi
      *
      * @param string      $username   the user who owns the repository
      * @param string      $repository the name of the repository
-     * @param null|string $path       path to file or directory
-     * @param null|string $reference  reference to a branch or commit
+     * @param string|null $path       path to file or directory
+     * @param string|null $reference  reference to a branch or commit
      *
      * @return array|string information for file | information for each item in directory
      */
@@ -90,7 +90,7 @@ class Contents extends AbstractApi
      * @param string      $path       path to file
      * @param string      $content    contents of the new file
      * @param string      $message    the commit message
-     * @param null|string $branch     name of a branch
+     * @param string|null $branch     name of a branch
      * @param null|array  $committer  information about the committer
      *
      * @throws MissingArgumentException
@@ -102,8 +102,8 @@ class Contents extends AbstractApi
         $url = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/contents/'.rawurlencode($path);
 
         $parameters = [
-          'content' => base64_encode($content),
-          'message' => $message,
+            'content' => base64_encode($content),
+            'message' => $message,
         ];
 
         if (null !== $branch) {
@@ -126,7 +126,7 @@ class Contents extends AbstractApi
      * @param string      $username   the user who owns the repository
      * @param string      $repository the name of the repository
      * @param string      $path       path of file to check
-     * @param null|string $reference  reference to a branch or commit
+     * @param string|null $reference  reference to a branch or commit
      *
      * @return bool
      */
@@ -166,7 +166,7 @@ class Contents extends AbstractApi
      * @param string      $content    contents of the new file
      * @param string      $message    the commit message
      * @param string      $sha        blob SHA of the file being replaced
-     * @param null|string $branch     name of a branch
+     * @param string|null $branch     name of a branch
      * @param null|array  $committer  information about the committer
      *
      * @throws MissingArgumentException
@@ -178,9 +178,9 @@ class Contents extends AbstractApi
         $url = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/contents/'.rawurlencode($path);
 
         $parameters = [
-          'content' => base64_encode($content),
-          'message' => $message,
-          'sha'     => $sha,
+            'content' => base64_encode($content),
+            'message' => $message,
+            'sha'     => $sha,
         ];
 
         if (null !== $branch) {
@@ -207,7 +207,7 @@ class Contents extends AbstractApi
      * @param string      $path       path to file
      * @param string      $message    the commit message
      * @param string      $sha        blob SHA of the file being deleted
-     * @param null|string $branch     name of a branch
+     * @param string|null $branch     name of a branch
      * @param null|array  $committer  information about the committer
      *
      * @throws MissingArgumentException
@@ -219,8 +219,8 @@ class Contents extends AbstractApi
         $url = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/contents/'.rawurlencode($path);
 
         $parameters = [
-          'message' => $message,
-          'sha'     => $sha,
+            'message' => $message,
+            'sha'     => $sha,
         ];
 
         if (null !== $branch) {
@@ -245,7 +245,7 @@ class Contents extends AbstractApi
      * @param string      $username   the user who owns the repository
      * @param string      $repository the name of the repository
      * @param string      $format     format of archive: tarball or zipball
-     * @param null|string $reference  reference to a branch or commit
+     * @param string|null $reference  reference to a branch or commit
      *
      * @return string repository archive binary data
      */
@@ -265,12 +265,12 @@ class Contents extends AbstractApi
      * @param string      $username   the user who owns the repository
      * @param string      $repository the name of the repository
      * @param string      $path       path to file
-     * @param null|string $reference  reference to a branch or commit
+     * @param string|null $reference  reference to a branch or commit
      *
      * @throws InvalidArgumentException If $path is not a file or if its encoding is different from base64
      * @throws ErrorException           If $path doesn't include a 'content' index
      *
-     * @return null|string content of file, or null in case of base64_decode failure
+     * @return string|null content of file, or null in case of base64_decode failure
      */
     public function download($username, $repository, $path, $reference = null)
     {
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/DeployKeys.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/DeployKeys.php
index c6c8a2ce..0e45ccb6 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Repository/DeployKeys.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/DeployKeys.php
@@ -37,7 +37,9 @@ class DeployKeys extends AbstractApi
             throw new MissingArgumentException(['title', 'key']);
         }
 
-        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/keys/'.rawurlencode($id), $params);
+        $this->remove($username, $repository, $id);
+
+        return $this->create($username, $repository, $params);
     }
 
     public function remove($username, $repository, $id)
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Downloads.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Downloads.php
index ed4c42f2..c959c615 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Repository/Downloads.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Downloads.php
@@ -39,7 +39,7 @@ class Downloads extends AbstractApi
      */
     public function show($username, $repository, $id)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/downloads/'.rawurlencode($id));
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/downloads/'.$id);
     }
 
     /**
@@ -55,6 +55,6 @@ class Downloads extends AbstractApi
      */
     public function remove($username, $repository, $id)
     {
-        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/downloads/'.rawurlencode($id));
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/downloads/'.$id);
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Hooks.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Hooks.php
index db67f402..be87e014 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Repository/Hooks.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Hooks.php
@@ -47,7 +47,7 @@ class Hooks extends AbstractApi
 
     public function test($username, $repository, $id)
     {
-        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/hooks/'.rawurlencode($id).'/test');
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/hooks/'.rawurlencode($id).'/tests');
     }
 
     public function remove($username, $repository, $id)
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Labels.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Labels.php
index 7829e551..28ca4d53 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Repository/Labels.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Labels.php
@@ -33,10 +33,6 @@ class Labels extends AbstractApi
 
     public function update($username, $repository, $label, array $params)
     {
-        if (!isset($params['name'], $params['color'])) {
-            throw new MissingArgumentException(['name', 'color']);
-        }
-
         return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/labels/'.rawurlencode($label), $params);
     }
 
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Pages.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Pages.php
new file mode 100644
index 00000000..b641cb95
--- /dev/null
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Pages.php
@@ -0,0 +1,60 @@
+
+ */
+class Pages extends AbstractApi
+{
+    use AcceptHeaderTrait;
+
+    public function show($username, $repository)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pages');
+    }
+
+    public function enable($username, $repository, array $params = [])
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.switcheroo-preview+json';
+
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pages', $params);
+    }
+
+    public function disable($username, $repository)
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.switcheroo-preview+json';
+
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pages');
+    }
+
+    public function update($username, $repository, array $params = [])
+    {
+        return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pages', $params);
+    }
+
+    public function requestBuild($username, $repository)
+    {
+        return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pages/builds');
+    }
+
+    public function builds($username, $repository)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pages/builds');
+    }
+
+    public function showLatestBuild($username, $repository)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pages/builds/latest');
+    }
+
+    public function showBuild($username, $repository, $id)
+    {
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pages/builds/'.rawurlencode($id));
+    }
+}
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Protection.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Protection.php
index 73d1e6b5..b559557a 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Repository/Protection.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Protection.php
@@ -14,13 +14,6 @@ class Protection extends AbstractApi
 {
     use AcceptHeaderTrait;
 
-    public function configure()
-    {
-        $this->acceptHeaderValue = 'application/vnd.github.loki-preview+json';
-
-        return $this;
-    }
-
     /**
      * Retrieves configured protection for the provided branch.
      *
@@ -34,6 +27,9 @@ class Protection extends AbstractApi
      */
     public function show($username, $repository, $branch)
     {
+        // Preview endpoint
+        $this->acceptHeaderValue = 'application/vnd.github.luke-cage-preview+json';
+
         return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/branches/'.rawurlencode($branch).'/protection');
     }
 
@@ -51,6 +47,9 @@ class Protection extends AbstractApi
      */
     public function update($username, $repository, $branch, array $params = [])
     {
+        // Preview endpoint
+        $this->acceptHeaderValue = 'application/vnd.github.luke-cage-preview+json';
+
         return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/branches/'.rawurlencode($branch).'/protection', $params);
     }
 
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Releases.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Releases.php
index 4657bfa7..10dfe09d 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Repository/Releases.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Releases.php
@@ -65,7 +65,7 @@ class Releases extends AbstractApi
      */
     public function show($username, $repository, $id)
     {
-        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/'.rawurlencode($id));
+        return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/'.$id);
     }
 
     /**
@@ -100,7 +100,7 @@ class Releases extends AbstractApi
      */
     public function edit($username, $repository, $id, array $params)
     {
-        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/'.rawurlencode($id), $params);
+        return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/'.$id, $params);
     }
 
     /**
@@ -114,7 +114,7 @@ class Releases extends AbstractApi
      */
     public function remove($username, $repository, $id)
     {
-        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/'.rawurlencode($id));
+        return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/releases/'.$id);
     }
 
     /**
@@ -122,6 +122,6 @@ class Releases extends AbstractApi
      */
     public function assets()
     {
-        return new Assets($this->client);
+        return new Assets($this->getClient());
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Repository/Stargazers.php b/vendor/knplabs/github-api/lib/Github/Api/Repository/Stargazers.php
index e7177774..bef73b9a 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Repository/Stargazers.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Repository/Stargazers.php
@@ -22,12 +22,12 @@ class Stargazers extends AbstractApi
      *
      * @param string $bodyType
      *
-     * @return self
+     * @return $this
      */
     public function configure($bodyType = null)
     {
         if ('star' === $bodyType) {
-            $this->acceptHeaderValue = sprintf('application/vnd.github.%s.star+json', $this->client->getApiVersion());
+            $this->acceptHeaderValue = sprintf('application/vnd.github.%s.star+json', $this->getApiVersion());
         }
 
         return $this;
diff --git a/vendor/knplabs/github-api/lib/Github/Api/Search.php b/vendor/knplabs/github-api/lib/Github/Api/Search.php
index 84626ae3..96a51ea6 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/Search.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/Search.php
@@ -61,6 +61,21 @@ class Search extends AbstractApi
         return $this->get('/search/code', ['q' => $q, 'sort' => $sort, 'order' => $order]);
     }
 
+    /**
+     * Search code by filter (q), but will return additional data to highlight
+     * the matched results.
+     *
+     * @link https://docs.github.com/en/rest/reference/search#text-match-metadata
+     *
+     * @return array list of code found
+     */
+    public function codeWithMatch(string $q, string $sort = 'updated', string $order = 'desc'): array
+    {
+        $this->acceptHeaderValue = 'application/vnd.github.v3.text-match+json';
+
+        return $this->code($q, $sort, $order);
+    }
+
     /**
      * Search users by filter (q).
      *
@@ -90,14 +105,14 @@ class Search extends AbstractApi
      */
     public function commits($q, $sort = null, $order = 'desc')
     {
-        //This api is in preview mode, so set the correct accept-header
+        // This api is in preview mode, so set the correct accept-header
         $this->acceptHeaderValue = 'application/vnd.github.cloak-preview';
 
         return $this->get('/search/commits', ['q' => $q, 'sort' => $sort, 'order' => $order]);
     }
 
     /**
-     * Search commits by filter (q).
+     * Search topics by filter (q).
      *
      * @link https://developer.github.com/v3/search/#search-topics
      *
@@ -107,7 +122,7 @@ class Search extends AbstractApi
      */
     public function topics($q)
     {
-        //This api is in preview mode, so set the correct accept-header
+        // This api is in preview mode, so set the correct accept-header
         $this->acceptHeaderValue = 'application/vnd.github.mercy-preview+json';
 
         return $this->get('/search/topics', ['q' => $q]);
diff --git a/vendor/knplabs/github-api/lib/Github/Api/User.php b/vendor/knplabs/github-api/lib/Github/Api/User.php
index c4414c56..c1ccc89e 100644
--- a/vendor/knplabs/github-api/lib/Github/Api/User.php
+++ b/vendor/knplabs/github-api/lib/Github/Api/User.php
@@ -12,21 +12,6 @@ namespace Github\Api;
  */
 class User extends AbstractApi
 {
-    /**
-     * Search users by username.
-     *
-     * @deprecated This method is deprecated use the Search api instead. See https://developer.github.com/v3/search/legacy/#legacy-search-api-is-deprecated
-     * @link http://developer.github.com/v3/search/#search-users
-     *
-     * @param string $keyword the keyword to search
-     *
-     * @return array list of users found
-     */
-    public function find($keyword)
-    {
-        return $this->get('/legacy/user/search/'.rawurlencode($keyword));
-    }
-
     /**
      * Request all users.
      *
@@ -42,7 +27,7 @@ class User extends AbstractApi
             return $this->get('/users');
         }
 
-        return $this->get('/users', ['since' => rawurldecode($id)]);
+        return $this->get('/users', ['since' => $id]);
     }
 
     /**
@@ -59,6 +44,21 @@ class User extends AbstractApi
         return $this->get('/users/'.rawurlencode($username));
     }
 
+    /**
+     * Get extended information about a user by its id.
+     * Note: at time of writing this is an undocumented feature but GitHub support have advised that it can be relied on.
+     *
+     * @link http://developer.github.com/v3/users/
+     *
+     * @param int $id the id of the user to show
+     *
+     * @return array information about the user
+     */
+    public function showById($id)
+    {
+        return $this->get('/user/'.$id);
+    }
+
     /**
      * Get extended information about a user by its username.
      *
@@ -117,20 +117,6 @@ class User extends AbstractApi
         return $this->get('/users/'.rawurlencode($username).'/followers', $parameters, $requestHeaders);
     }
 
-    /**
-     * Request the repository that a specific user is watching.
-     *
-     * @deprecated see subscriptions method
-     *
-     * @param string $username the username
-     *
-     * @return array list of watched repositories
-     */
-    public function watched($username)
-    {
-        return $this->get('/users/'.rawurlencode($username).'/watched');
-    }
-
     /**
      * Request starred repositories that a specific user has starred.
      *
@@ -248,4 +234,16 @@ class User extends AbstractApi
     {
         return $this->get('/users/'.rawurlencode($username).'/events/public');
     }
+
+    /**
+     * List events performed by an authenticated user.
+     *
+     * @link https://docs.github.com/en/rest/reference/activity#list-events-for-the-authenticated-user
+     *
+     * @return array
+     */
+    public function events(string $username)
+    {
+        return $this->get('/users/'.rawurlencode($username).'/events');
+    }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/AuthMethod.php b/vendor/knplabs/github-api/lib/Github/AuthMethod.php
new file mode 100644
index 00000000..4a390699
--- /dev/null
+++ b/vendor/knplabs/github-api/lib/Github/AuthMethod.php
@@ -0,0 +1,30 @@
+
  *
@@ -70,34 +70,34 @@ use Psr\Cache\CacheItemPoolInterface;
 class Client
 {
     /**
-     * Constant for authentication method. Indicates the default, but deprecated
-     * login with username and token in URL.
+     * Authenticate using a client_id/client_secret combination.
+     *
+     * @var string
+     *
+     * @deprecated Use the AuthMethod const
      */
-    const AUTH_URL_TOKEN = 'url_token';
+    const AUTH_CLIENT_ID = AuthMethod::CLIENT_ID;
 
     /**
-     * Constant for authentication method. Not indicates the new login, but allows
-     * usage of unauthenticated rate limited requests for given client_id + client_secret.
+     * Authenticate using a GitHub access token.
+     *
+     * @var string
+     *
+     * @deprecated Use the AuthMethod const
      */
-    const AUTH_URL_CLIENT_ID = 'url_client_id';
+    const AUTH_ACCESS_TOKEN = AuthMethod::ACCESS_TOKEN;
 
     /**
-     * Constant for authentication method. Indicates the new favored login method
-     * with username and password via HTTP Authentication.
+     * Constant for authentication method.
+     *
+     * Indicates JSON Web Token authentication required for GitHub apps access
+     * to the API.
+     *
+     * @var string
+     *
+     * @deprecated Use the AuthMethod const
      */
-    const AUTH_HTTP_PASSWORD = 'http_password';
-
-    /**
-     * Constant for authentication method. Indicates the new login method with
-     * with username and token via HTTP Authentication.
-     */
-    const AUTH_HTTP_TOKEN = 'http_token';
-
-    /**
-     * Constant for authentication method. Indicates JSON Web Token
-     * authentication required for integration access to the API.
-     */
-    const AUTH_JWT = 'jwt';
+    const AUTH_JWT = AuthMethod::JWT;
 
     /**
      * @var string
@@ -124,32 +124,31 @@ class Client
     public function __construct(Builder $httpClientBuilder = null, $apiVersion = null, $enterpriseUrl = null)
     {
         $this->responseHistory = new History();
-        $this->httpClientBuilder = $builder = $httpClientBuilder ?: new Builder();
+        $this->httpClientBuilder = $builder = $httpClientBuilder ?? new Builder();
+        $this->apiVersion = $apiVersion ?: 'v3';
 
         $builder->addPlugin(new GithubExceptionThrower());
         $builder->addPlugin(new Plugin\HistoryPlugin($this->responseHistory));
         $builder->addPlugin(new Plugin\RedirectPlugin());
-        $builder->addPlugin(new Plugin\AddHostPlugin(UriFactoryDiscovery::find()->createUri('https://api.github.com')));
+        $builder->addPlugin(new Plugin\AddHostPlugin(Psr17FactoryDiscovery::findUriFactory()->createUri('https://api.github.com')));
         $builder->addPlugin(new Plugin\HeaderDefaultsPlugin([
             'User-Agent' => 'php-github-api (http://github.com/KnpLabs/php-github-api)',
+            'Accept' => sprintf('application/vnd.github.%s+json', $this->apiVersion),
         ]));
 
-        $this->apiVersion = $apiVersion ?: 'v3';
-        $builder->addHeaderValue('Accept', sprintf('application/vnd.github.%s+json', $this->apiVersion));
-
         if ($enterpriseUrl) {
             $this->setEnterpriseUrl($enterpriseUrl);
         }
     }
 
     /**
-     * Create a Github\Client using a HttpClient.
+     * Create a Github\Client using a HTTP client.
      *
-     * @param HttpClient $httpClient
+     * @param ClientInterface $httpClient
      *
      * @return Client
      */
-    public static function createWithHttpClient(HttpClient $httpClient)
+    public static function createWithHttpClient(ClientInterface $httpClient): self
     {
         $builder = new Builder($httpClient);
 
@@ -161,9 +160,9 @@ class Client
      *
      * @throws InvalidArgumentException
      *
-     * @return ApiInterface
+     * @return AbstractApi
      */
-    public function api($name)
+    public function api($name): AbstractApi
     {
         switch ($name) {
             case 'me':
@@ -204,11 +203,6 @@ class Client
                 $api = new Api\Miscellaneous\Gitignore($this);
                 break;
 
-            case 'integration':
-            case 'integrations':
-                $api = new Api\Integrations($this);
-                break;
-
             case 'apps':
                 $api = new Api\Apps($this);
                 break;
@@ -300,6 +294,11 @@ class Client
                 $api = new Api\GraphQL($this);
                 break;
 
+            case 'outsideCollaborators':
+            case 'outside_collaborators':
+                $api = new Api\Organization\OutsideCollaborators($this);
+                break;
+
             default:
                 throw new InvalidArgumentException(sprintf('Undefined api instance called: "%s"', $name));
         }
@@ -311,24 +310,22 @@ class Client
      * Authenticate a user for all next requests.
      *
      * @param string      $tokenOrLogin GitHub private token/username/client ID
-     * @param null|string $password     GitHub password/secret (optionally can contain $authMethod)
-     * @param null|string $authMethod   One of the AUTH_* class constants
+     * @param string|null $password     GitHub password/secret (optionally can contain $authMethod)
+     * @param string|null $authMethod   One of the AUTH_* class constants
      *
      * @throws InvalidArgumentException If no authentication method was given
+     *
+     * @return void
      */
-    public function authenticate($tokenOrLogin, $password = null, $authMethod = null)
+    public function authenticate($tokenOrLogin, $password = null, $authMethod = null): void
     {
-        if (null === $password && null === $authMethod) {
-            throw new InvalidArgumentException('You need to specify authentication method!');
-        }
-
-        if (null === $authMethod && in_array($password, [self::AUTH_URL_TOKEN, self::AUTH_URL_CLIENT_ID, self::AUTH_HTTP_PASSWORD, self::AUTH_HTTP_TOKEN, self::AUTH_JWT], true)) {
+        if (null === $authMethod && (AuthMethod::JWT === $password || AuthMethod::ACCESS_TOKEN === $password)) {
             $authMethod = $password;
             $password = null;
         }
 
         if (null === $authMethod) {
-            $authMethod = self::AUTH_HTTP_PASSWORD;
+            throw new InvalidArgumentException('You need to specify authentication method!');
         }
 
         $this->getHttpClientBuilder()->removePlugin(Authentication::class);
@@ -339,21 +336,30 @@ class Client
      * Sets the URL of your GitHub Enterprise instance.
      *
      * @param string $enterpriseUrl URL of the API in the form of http(s)://hostname
+     *
+     * @return void
      */
-    private function setEnterpriseUrl($enterpriseUrl)
+    private function setEnterpriseUrl($enterpriseUrl): void
     {
         $builder = $this->getHttpClientBuilder();
         $builder->removePlugin(Plugin\AddHostPlugin::class);
         $builder->removePlugin(PathPrepend::class);
 
-        $builder->addPlugin(new Plugin\AddHostPlugin(UriFactoryDiscovery::find()->createUri($enterpriseUrl)));
-        $builder->addPlugin(new PathPrepend(sprintf('/api/%s', $this->getApiVersion())));
+        $builder->addPlugin(new Plugin\AddHostPlugin(Psr17FactoryDiscovery::findUriFactory()->createUri($enterpriseUrl)));
+
+        // For GHE, v4 API endpoint is at `api/graphql` so we don't want to add the version number
+        // For earlier versions add the version number after /api
+        if ($this->getApiVersion() === 'v4') {
+            $builder->addPlugin(new PathPrepend('/api'));
+        } else {
+            $builder->addPlugin(new PathPrepend(sprintf('/api/%s', $this->getApiVersion())));
+        }
     }
 
     /**
      * @return string
      */
-    public function getApiVersion()
+    public function getApiVersion(): string
     {
         return $this->apiVersion;
     }
@@ -363,28 +369,31 @@ class Client
      *
      * @param CacheItemPoolInterface $cachePool
      * @param array                  $config
+     *
+     * @return void
      */
-    public function addCache(CacheItemPoolInterface $cachePool, array $config = [])
+    public function addCache(CacheItemPoolInterface $cachePool, array $config = []): void
     {
         $this->getHttpClientBuilder()->addCache($cachePool, $config);
     }
 
     /**
      * Remove the cache plugin.
+     *
+     * @return void
      */
-    public function removeCache()
+    public function removeCache(): void
     {
         $this->getHttpClientBuilder()->removeCache();
     }
 
     /**
      * @param string $name
+     * @param array  $args
      *
-     * @throws BadMethodCallException
-     *
-     * @return ApiInterface
+     * @return AbstractApi
      */
-    public function __call($name, $args)
+    public function __call($name, $args): AbstractApi
     {
         try {
             return $this->api($name);
@@ -396,15 +405,15 @@ class Client
     /**
      * @return null|\Psr\Http\Message\ResponseInterface
      */
-    public function getLastResponse()
+    public function getLastResponse(): ?ResponseInterface
     {
         return $this->responseHistory->getLastResponse();
     }
 
     /**
-     * @return HttpMethodsClient
+     * @return HttpMethodsClientInterface
      */
-    public function getHttpClient()
+    public function getHttpClient(): HttpMethodsClientInterface
     {
         return $this->getHttpClientBuilder()->getHttpClient();
     }
@@ -412,7 +421,7 @@ class Client
     /**
      * @return Builder
      */
-    protected function getHttpClientBuilder()
+    protected function getHttpClientBuilder(): Builder
     {
         return $this->httpClientBuilder;
     }
diff --git a/vendor/knplabs/github-api/lib/Github/Exception/ApiLimitExceedException.php b/vendor/knplabs/github-api/lib/Github/Exception/ApiLimitExceedException.php
index 0283175f..5c1dd4d8 100644
--- a/vendor/knplabs/github-api/lib/Github/Exception/ApiLimitExceedException.php
+++ b/vendor/knplabs/github-api/lib/Github/Exception/ApiLimitExceedException.php
@@ -2,17 +2,25 @@
 
 namespace Github\Exception;
 
+use Throwable;
+
 /**
- * ApiLimitExceedException.
- *
  * @author Joseph Bielawski 
  */
 class ApiLimitExceedException extends RuntimeException
 {
+    /** @var int */
     private $limit;
+    /** @var int */
     private $reset;
 
-    public function __construct($limit = 5000, $reset = 1800, $code = 0, $previous = null)
+    /**
+     * @param int            $limit
+     * @param int            $reset
+     * @param int            $code
+     * @param Throwable|null $previous
+     */
+    public function __construct(int $limit = 5000, int $reset = 1800, int $code = 0, Throwable $previous = null)
     {
         $this->limit = (int) $limit;
         $this->reset = (int) $reset;
@@ -20,12 +28,18 @@ class ApiLimitExceedException extends RuntimeException
         parent::__construct(sprintf('You have reached GitHub hourly limit! Actual limit is: %d', $limit), $code, $previous);
     }
 
-    public function getLimit()
+    /**
+     * @return int
+     */
+    public function getLimit(): int
     {
         return $this->limit;
     }
 
-    public function getResetTime()
+    /**
+     * @return int
+     */
+    public function getResetTime(): int
     {
         return $this->reset;
     }
diff --git a/vendor/knplabs/github-api/lib/Github/Exception/BadMethodCallException.php b/vendor/knplabs/github-api/lib/Github/Exception/BadMethodCallException.php
index 83e05437..22753d08 100644
--- a/vendor/knplabs/github-api/lib/Github/Exception/BadMethodCallException.php
+++ b/vendor/knplabs/github-api/lib/Github/Exception/BadMethodCallException.php
@@ -3,8 +3,6 @@
 namespace Github\Exception;
 
 /**
- * BadMethodCallException.
- *
  * @author James Brooks 
  */
 class BadMethodCallException extends \BadMethodCallException implements ExceptionInterface
diff --git a/vendor/knplabs/github-api/lib/Github/Exception/ErrorException.php b/vendor/knplabs/github-api/lib/Github/Exception/ErrorException.php
index 61f61f36..b569f730 100644
--- a/vendor/knplabs/github-api/lib/Github/Exception/ErrorException.php
+++ b/vendor/knplabs/github-api/lib/Github/Exception/ErrorException.php
@@ -3,8 +3,6 @@
 namespace Github\Exception;
 
 /**
- * ErrorException.
- *
  * @author Joseph Bielawski 
  */
 class ErrorException extends \ErrorException implements ExceptionInterface
diff --git a/vendor/knplabs/github-api/lib/Github/Exception/InvalidArgumentException.php b/vendor/knplabs/github-api/lib/Github/Exception/InvalidArgumentException.php
index 558b3b0f..75de2cd7 100644
--- a/vendor/knplabs/github-api/lib/Github/Exception/InvalidArgumentException.php
+++ b/vendor/knplabs/github-api/lib/Github/Exception/InvalidArgumentException.php
@@ -3,8 +3,6 @@
 namespace Github\Exception;
 
 /**
- * InvalidArgumentException.
- *
  * @author Joseph Bielawski 
  */
 class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
diff --git a/vendor/knplabs/github-api/lib/Github/Exception/MissingArgumentException.php b/vendor/knplabs/github-api/lib/Github/Exception/MissingArgumentException.php
index 96e217ac..4cd3aeca 100644
--- a/vendor/knplabs/github-api/lib/Github/Exception/MissingArgumentException.php
+++ b/vendor/knplabs/github-api/lib/Github/Exception/MissingArgumentException.php
@@ -2,19 +2,24 @@
 
 namespace Github\Exception;
 
+use Throwable;
+
 /**
- * MissingArgumentException.
- *
  * @author Joseph Bielawski 
  */
 class MissingArgumentException extends ErrorException
 {
-    public function __construct($required, $code = 0, $previous = null)
+    /**
+     * @param string|array   $required
+     * @param int            $code
+     * @param Throwable|null $previous
+     */
+    public function __construct($required, int $code = 0, Throwable $previous = null)
     {
         if (is_string($required)) {
             $required = [$required];
         }
 
-        parent::__construct(sprintf('One or more of required ("%s") parameters is missing!', implode('", "', $required)), $code, $previous);
+        parent::__construct(sprintf('One or more of required ("%s") parameters is missing!', implode('", "', $required)), $code, 1, __FILE__, __LINE__, $previous);
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/Exception/RuntimeException.php b/vendor/knplabs/github-api/lib/Github/Exception/RuntimeException.php
index 676cb957..827632e9 100644
--- a/vendor/knplabs/github-api/lib/Github/Exception/RuntimeException.php
+++ b/vendor/knplabs/github-api/lib/Github/Exception/RuntimeException.php
@@ -3,8 +3,6 @@
 namespace Github\Exception;
 
 /**
- * RuntimeException.
- *
  * @author Joseph Bielawski 
  */
 class RuntimeException extends \RuntimeException implements ExceptionInterface
diff --git a/vendor/knplabs/github-api/lib/Github/Exception/SsoRequiredException.php b/vendor/knplabs/github-api/lib/Github/Exception/SsoRequiredException.php
new file mode 100644
index 00000000..1725270a
--- /dev/null
+++ b/vendor/knplabs/github-api/lib/Github/Exception/SsoRequiredException.php
@@ -0,0 +1,31 @@
+url = $url;
+
+        parent::__construct('Resource protected by organization SAML enforcement. You must grant your personal token access to this organization.', $code, $previous);
+    }
+
+    /**
+     * @return string
+     */
+    public function getUrl()
+    {
+        return $this->url;
+    }
+}
diff --git a/vendor/knplabs/github-api/lib/Github/Exception/TwoFactorAuthenticationRequiredException.php b/vendor/knplabs/github-api/lib/Github/Exception/TwoFactorAuthenticationRequiredException.php
index 6f93fe40..c57e67b8 100644
--- a/vendor/knplabs/github-api/lib/Github/Exception/TwoFactorAuthenticationRequiredException.php
+++ b/vendor/knplabs/github-api/lib/Github/Exception/TwoFactorAuthenticationRequiredException.php
@@ -2,17 +2,28 @@
 
 namespace Github\Exception;
 
+use Throwable;
+
 class TwoFactorAuthenticationRequiredException extends RuntimeException
 {
+    /** @var string */
     private $type;
 
-    public function __construct($type, $code = 0, $previous = null)
+    /**
+     * @param string         $type
+     * @param int            $code
+     * @param Throwable|null $previous
+     */
+    public function __construct(string $type, int $code = 0, Throwable $previous = null)
     {
         $this->type = $type;
         parent::__construct('Two factor authentication is enabled on this account', $code, $previous);
     }
 
-    public function getType()
+    /**
+     * @return string
+     */
+    public function getType(): string
     {
         return $this->type;
     }
diff --git a/vendor/knplabs/github-api/lib/Github/HttpClient/Builder.php b/vendor/knplabs/github-api/lib/Github/HttpClient/Builder.php
index 3b05b8fe..a8713de1 100644
--- a/vendor/knplabs/github-api/lib/Github/HttpClient/Builder.php
+++ b/vendor/knplabs/github-api/lib/Github/HttpClient/Builder.php
@@ -3,16 +3,16 @@
 namespace Github\HttpClient;
 
 use Http\Client\Common\HttpMethodsClient;
+use Http\Client\Common\HttpMethodsClientInterface;
 use Http\Client\Common\Plugin;
 use Http\Client\Common\Plugin\Cache\Generator\HeaderCacheKeyGenerator;
 use Http\Client\Common\PluginClientFactory;
-use Http\Client\HttpClient;
-use Http\Discovery\HttpClientDiscovery;
-use Http\Discovery\MessageFactoryDiscovery;
-use Http\Discovery\StreamFactoryDiscovery;
-use Http\Message\RequestFactory;
-use Http\Message\StreamFactory;
+use Http\Discovery\Psr17FactoryDiscovery;
+use Http\Discovery\Psr18ClientDiscovery;
 use Psr\Cache\CacheItemPoolInterface;
+use Psr\Http\Client\ClientInterface;
+use Psr\Http\Message\RequestFactoryInterface;
+use Psr\Http\Message\StreamFactoryInterface;
 
 /**
  * A builder that builds the API client.
@@ -25,24 +25,24 @@ class Builder
     /**
      * The object that sends HTTP messages.
      *
-     * @var HttpClient
+     * @var ClientInterface
      */
     private $httpClient;
 
     /**
      * A HTTP client with all our plugins.
      *
-     * @var HttpMethodsClient
+     * @var HttpMethodsClientInterface
      */
     private $pluginClient;
 
     /**
-     * @var RequestFactory
+     * @var RequestFactoryInterface
      */
     private $requestFactory;
 
     /**
-     * @var StreamFactory
+     * @var StreamFactoryInterface
      */
     private $streamFactory;
 
@@ -73,24 +73,24 @@ class Builder
     private $headers = [];
 
     /**
-     * @param HttpClient     $httpClient
-     * @param RequestFactory $requestFactory
-     * @param StreamFactory  $streamFactory
+     * @param ClientInterface|null         $httpClient
+     * @param RequestFactoryInterface|null $requestFactory
+     * @param StreamFactoryInterface|null  $streamFactory
      */
     public function __construct(
-        HttpClient $httpClient = null,
-        RequestFactory $requestFactory = null,
-        StreamFactory $streamFactory = null
+        ClientInterface $httpClient = null,
+        RequestFactoryInterface $requestFactory = null,
+        StreamFactoryInterface $streamFactory = null
     ) {
-        $this->httpClient = $httpClient ?: HttpClientDiscovery::find();
-        $this->requestFactory = $requestFactory ?: MessageFactoryDiscovery::find();
-        $this->streamFactory = $streamFactory ?: StreamFactoryDiscovery::find();
+        $this->httpClient = $httpClient ?? Psr18ClientDiscovery::find();
+        $this->requestFactory = $requestFactory ?? Psr17FactoryDiscovery::findRequestFactory();
+        $this->streamFactory = $streamFactory ?? Psr17FactoryDiscovery::findStreamFactory();
     }
 
     /**
-     * @return HttpMethodsClient
+     * @return HttpMethodsClientInterface
      */
-    public function getHttpClient()
+    public function getHttpClient(): HttpMethodsClientInterface
     {
         if ($this->httpClientModified) {
             $this->httpClientModified = false;
@@ -102,7 +102,8 @@ class Builder
 
             $this->pluginClient = new HttpMethodsClient(
                 (new PluginClientFactory())->createClient($this->httpClient, $plugins),
-                $this->requestFactory
+                $this->requestFactory,
+                $this->streamFactory
             );
         }
 
@@ -113,8 +114,10 @@ class Builder
      * Add a new plugin to the end of the plugin chain.
      *
      * @param Plugin $plugin
+     *
+     * @return void
      */
-    public function addPlugin(Plugin $plugin)
+    public function addPlugin(Plugin $plugin): void
     {
         $this->plugins[] = $plugin;
         $this->httpClientModified = true;
@@ -124,8 +127,10 @@ class Builder
      * Remove a plugin by its fully qualified class name (FQCN).
      *
      * @param string $fqcn
+     *
+     * @return void
      */
-    public function removePlugin($fqcn)
+    public function removePlugin(string $fqcn): void
     {
         foreach ($this->plugins as $idx => $plugin) {
             if ($plugin instanceof $fqcn) {
@@ -137,8 +142,10 @@ class Builder
 
     /**
      * Clears used headers.
+     *
+     * @return void
      */
-    public function clearHeaders()
+    public function clearHeaders(): void
     {
         $this->headers = [];
 
@@ -148,8 +155,10 @@ class Builder
 
     /**
      * @param array $headers
+     *
+     * @return void
      */
-    public function addHeaders(array $headers)
+    public function addHeaders(array $headers): void
     {
         $this->headers = array_merge($this->headers, $headers);
 
@@ -160,8 +169,10 @@ class Builder
     /**
      * @param string $header
      * @param string $headerValue
+     *
+     * @return void
      */
-    public function addHeaderValue($header, $headerValue)
+    public function addHeaderValue(string $header, string $headerValue): void
     {
         if (!isset($this->headers[$header])) {
             $this->headers[$header] = $headerValue;
@@ -178,8 +189,10 @@ class Builder
      *
      * @param CacheItemPoolInterface $cachePool
      * @param array                  $config
+     *
+     * @return void
      */
-    public function addCache(CacheItemPoolInterface $cachePool, array $config = [])
+    public function addCache(CacheItemPoolInterface $cachePool, array $config = []): void
     {
         if (!isset($config['cache_key_generator'])) {
             $config['cache_key_generator'] = new HeaderCacheKeyGenerator(['Authorization', 'Cookie', 'Accept', 'Content-type']);
@@ -190,8 +203,10 @@ class Builder
 
     /**
      * Remove the cache plugin.
+     *
+     * @return void
      */
-    public function removeCache()
+    public function removeCache(): void
     {
         $this->cachePlugin = null;
         $this->httpClientModified = true;
diff --git a/vendor/knplabs/github-api/lib/Github/HttpClient/Message/ResponseMediator.php b/vendor/knplabs/github-api/lib/Github/HttpClient/Message/ResponseMediator.php
index dcab5b4a..a72ccef7 100644
--- a/vendor/knplabs/github-api/lib/Github/HttpClient/Message/ResponseMediator.php
+++ b/vendor/knplabs/github-api/lib/Github/HttpClient/Message/ResponseMediator.php
@@ -5,7 +5,7 @@ namespace Github\HttpClient\Message;
 use Github\Exception\ApiLimitExceedException;
 use Psr\Http\Message\ResponseInterface;
 
-class ResponseMediator
+final class ResponseMediator
 {
     /**
      * @param ResponseInterface $response
@@ -28,19 +28,21 @@ class ResponseMediator
     /**
      * @param ResponseInterface $response
      *
-     * @return array|void
+     * @return array
      */
-    public static function getPagination(ResponseInterface $response)
+    public static function getPagination(ResponseInterface $response): array
     {
-        if (!$response->hasHeader('Link')) {
-            return;
+        $header = self::getHeader($response, 'Link');
+
+        if (null === $header) {
+            return [];
         }
 
-        $header = self::getHeader($response, 'Link');
         $pagination = [];
         foreach (explode(',', $header) as $link) {
             preg_match('/<(.*)>; rel="(.*)"/i', trim($link, ','), $match);
 
+            /** @var string[] $match */
             if (3 === count($match)) {
                 $pagination[$match[2]] = $match[1];
             }
@@ -52,17 +54,23 @@ class ResponseMediator
     /**
      * @param ResponseInterface $response
      *
-     * @return null|string
+     * @return string|null
      */
-    public static function getApiLimit(ResponseInterface $response)
+    public static function getApiLimit(ResponseInterface $response): ?string
     {
-        $remainingCalls = self::getHeader($response, 'X-RateLimit-Remaining');
+        $remainingCallsHeader = self::getHeader($response, 'X-RateLimit-Remaining');
 
-        if (null !== $remainingCalls && 1 > $remainingCalls) {
+        if (null === $remainingCallsHeader) {
+            return null;
+        }
+
+        $remainingCalls = (int) $remainingCallsHeader;
+
+        if (1 > $remainingCalls) {
             throw new ApiLimitExceedException($remainingCalls);
         }
 
-        return $remainingCalls;
+        return $remainingCallsHeader;
     }
 
     /**
@@ -73,7 +81,7 @@ class ResponseMediator
      *
      * @return string|null
      */
-    public static function getHeader(ResponseInterface $response, $name)
+    public static function getHeader(ResponseInterface $response, string $name): ?string
     {
         $headers = $response->getHeader($name);
 
diff --git a/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/Authentication.php b/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/Authentication.php
index 920d6572..91ed9caa 100644
--- a/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/Authentication.php
+++ b/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/Authentication.php
@@ -2,9 +2,10 @@
 
 namespace Github\HttpClient\Plugin;
 
-use Github\Client;
+use Github\AuthMethod;
 use Github\Exception\RuntimeException;
 use Http\Client\Common\Plugin;
+use Http\Promise\Promise;
 use Psr\Http\Message\RequestInterface;
 
 /**
@@ -12,13 +13,29 @@ use Psr\Http\Message\RequestInterface;
  *
  * @author Tobias Nyholm 
  */
-class Authentication implements Plugin
+final class Authentication implements Plugin
 {
+    /**
+     * @var string
+     */
     private $tokenOrLogin;
+
+    /**
+     * @var string|null
+     */
     private $password;
+
+    /**
+     * @var string|null
+     */
     private $method;
 
-    public function __construct($tokenOrLogin, $password, $method)
+    /**
+     * @param string      $tokenOrLogin GitHub private token/username/client ID
+     * @param string|null $password     GitHub password/secret (optionally can contain $method)
+     * @param string|null $method       One of the AUTH_* class constants
+     */
+    public function __construct(string $tokenOrLogin, ?string $password, ?string $method)
     {
         $this->tokenOrLogin = $tokenOrLogin;
         $this->password = $password;
@@ -26,60 +43,29 @@ class Authentication implements Plugin
     }
 
     /**
-     * {@inheritdoc}
+     * @return Promise
      */
-    public function handleRequest(RequestInterface $request, callable $next, callable $first)
+    public function handleRequest(RequestInterface $request, callable $next, callable $first): Promise
     {
-        switch ($this->method) {
-            case Client::AUTH_HTTP_PASSWORD:
-                $request = $request->withHeader(
-                    'Authorization',
-                    sprintf('Basic %s', base64_encode($this->tokenOrLogin.':'.$this->password))
-                );
-                break;
-
-            case Client::AUTH_HTTP_TOKEN:
-                $request = $request->withHeader('Authorization', sprintf('token %s', $this->tokenOrLogin));
-                break;
-
-            case Client::AUTH_URL_CLIENT_ID:
-                $uri = $request->getUri();
-                $query = $uri->getQuery();
-
-                $parameters = [
-                    'client_id' => $this->tokenOrLogin,
-                    'client_secret' => $this->password,
-                ];
-
-                $query .= empty($query) ? '' : '&';
-                $query .= utf8_encode(http_build_query($parameters, '', '&'));
-
-                $uri = $uri->withQuery($query);
-                $request = $request->withUri($uri);
-                break;
-
-            case Client::AUTH_URL_TOKEN:
-                $uri = $request->getUri();
-                $query = $uri->getQuery();
-
-                $parameters = ['access_token' => $this->tokenOrLogin];
-
-                $query .= empty($query) ? '' : '&';
-                $query .= utf8_encode(http_build_query($parameters, '', '&'));
-
-                $uri = $uri->withQuery($query);
-                $request = $request->withUri($uri);
-                break;
-
-            case Client::AUTH_JWT:
-                $request = $request->withHeader('Authorization', sprintf('Bearer %s', $this->tokenOrLogin));
-                break;
-
-            default:
-                throw new RuntimeException(sprintf('%s not yet implemented', $this->method));
-                break;
-        }
+        $request = $request->withHeader(
+            'Authorization',
+            $this->getAuthorizationHeader()
+        );
 
         return $next($request);
     }
+
+    private function getAuthorizationHeader(): string
+    {
+        switch ($this->method) {
+            case AuthMethod::CLIENT_ID:
+                return sprintf('Basic %s', base64_encode($this->tokenOrLogin.':'.$this->password));
+            case AuthMethod::ACCESS_TOKEN:
+                return sprintf('token %s', $this->tokenOrLogin);
+            case AuthMethod::JWT:
+                return sprintf('Bearer %s', $this->tokenOrLogin);
+            default:
+                throw new RuntimeException(sprintf('%s not yet implemented', $this->method));
+        }
+    }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/GithubExceptionThrower.php b/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/GithubExceptionThrower.php
index a0593924..4603f629 100644
--- a/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/GithubExceptionThrower.php
+++ b/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/GithubExceptionThrower.php
@@ -5,10 +5,12 @@ namespace Github\HttpClient\Plugin;
 use Github\Exception\ApiLimitExceedException;
 use Github\Exception\ErrorException;
 use Github\Exception\RuntimeException;
+use Github\Exception\SsoRequiredException;
 use Github\Exception\TwoFactorAuthenticationRequiredException;
 use Github\Exception\ValidationFailedException;
 use Github\HttpClient\Message\ResponseMediator;
 use Http\Client\Common\Plugin;
+use Http\Promise\Promise;
 use Psr\Http\Message\RequestInterface;
 use Psr\Http\Message\ResponseInterface;
 
@@ -16,23 +18,25 @@ use Psr\Http\Message\ResponseInterface;
  * @author Joseph Bielawski 
  * @author Tobias Nyholm 
  */
-class GithubExceptionThrower implements Plugin
+final class GithubExceptionThrower implements Plugin
 {
     /**
-     * {@inheritdoc}
+     * @return Promise
      */
-    public function handleRequest(RequestInterface $request, callable $next, callable $first)
+    public function handleRequest(RequestInterface $request, callable $next, callable $first): Promise
     {
         return $next($request)->then(function (ResponseInterface $response) use ($request) {
             if ($response->getStatusCode() < 400 || $response->getStatusCode() > 600) {
+                $this->checkGraphqlErrors($response);
+
                 return $response;
             }
 
             // If error:
             $remaining = ResponseMediator::getHeader($response, 'X-RateLimit-Remaining');
-            if (null !== $remaining && 1 > $remaining && 'rate_limit' !== substr($request->getRequestTarget(), 1, 10)) {
-                $limit = ResponseMediator::getHeader($response, 'X-RateLimit-Limit');
-                $reset = ResponseMediator::getHeader($response, 'X-RateLimit-Reset');
+            if ((429 === $response->getStatusCode()) && null !== $remaining && 1 > $remaining && 'rate_limit' !== substr($request->getRequestTarget(), 1, 10)) {
+                $limit = (int) ResponseMediator::getHeader($response, 'X-RateLimit-Limit');
+                $reset = (int) ResponseMediator::getHeader($response, 'X-RateLimit-Reset');
 
                 throw new ApiLimitExceedException($limit, $reset);
             }
@@ -46,13 +50,13 @@ class GithubExceptionThrower implements Plugin
             $content = ResponseMediator::getContent($response);
             if (is_array($content) && isset($content['message'])) {
                 if (400 === $response->getStatusCode()) {
-                    throw new ErrorException($content['message'], 400);
+                    throw new ErrorException(sprintf('%s (%s)', $content['message'], $response->getReasonPhrase()), 400);
                 }
 
                 if (422 === $response->getStatusCode() && isset($content['errors'])) {
                     $errors = [];
                     foreach ($content['errors'] as $error) {
-                        switch ($error['code']) {
+                        switch ($error['code'] ?? null) {
                             case 'missing':
                                 $errors[] = sprintf('The %s %s does not exist, for resource "%s"', $error['field'], $error['value'], $error['resource']);
                                 break;
@@ -74,13 +78,24 @@ class GithubExceptionThrower implements Plugin
                                 break;
 
                             default:
-                                $errors[] = $error['message'];
+                                if (is_string($error)) {
+                                    $errors[] = $error;
+
+                                    break;
+                                }
+
+                                if (isset($error['message'])) {
+                                    $errors[] = $error['message'];
+                                }
                                 break;
 
                         }
                     }
 
-                    throw new ValidationFailedException('Validation Failed: '.implode(', ', $errors), 422);
+                    throw new ValidationFailedException(
+                        $errors ? 'Validation Failed: '.implode(', ', $errors) : 'Validation Failed',
+                        422
+                    );
                 }
             }
 
@@ -95,7 +110,51 @@ class GithubExceptionThrower implements Plugin
                 throw new RuntimeException(implode(', ', $errors), 502);
             }
 
+            if ((403 === $response->getStatusCode()) && $response->hasHeader('X-GitHub-SSO') && 0 === strpos((string) ResponseMediator::getHeader($response, 'X-GitHub-SSO'), 'required;')) {
+                // The header will look something like this:
+                // required; url=https://github.com/orgs/octodocs-test/sso?authorization_request=AZSCKtL4U8yX1H3sCQIVnVgmjmon5fWxks5YrqhJgah0b2tlbl9pZM4EuMz4
+                // So we strip out the first 14 characters, leaving only the URL.
+                // @see https://developer.github.com/v3/auth/#authenticating-for-saml-sso
+                $url = substr((string) ResponseMediator::getHeader($response, 'X-GitHub-SSO'), 14);
+
+                throw new SsoRequiredException($url);
+            }
+
             throw new RuntimeException(isset($content['message']) ? $content['message'] : $content, $response->getStatusCode());
         });
     }
+
+    /**
+     * The graphql api doesn't return a 5xx http status for errors. Instead it returns a 200 with an error body.
+     *
+     * @throws RuntimeException
+     */
+    private function checkGraphqlErrors(ResponseInterface $response): void
+    {
+        if ($response->getStatusCode() !== 200) {
+            return;
+        }
+
+        $content = ResponseMediator::getContent($response);
+        if (!is_array($content)) {
+            return;
+        }
+
+        if (!isset($content['errors']) || !is_array($content['errors'])) {
+            return;
+        }
+
+        $errors = [];
+        foreach ($content['errors'] as $error) {
+            if (isset($error['message'])) {
+                $errors[] = $error['message'];
+            }
+        }
+
+        if (empty($errors)) {
+            return;
+        }
+
+        throw new RuntimeException(implode(', ', $errors));
+    }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/History.php b/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/History.php
index 303d8140..341c288a 100644
--- a/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/History.php
+++ b/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/History.php
@@ -3,7 +3,7 @@
 namespace Github\HttpClient\Plugin;
 
 use Http\Client\Common\Plugin\Journal;
-use Http\Client\Exception;
+use Psr\Http\Client\ClientExceptionInterface;
 use Psr\Http\Message\RequestInterface;
 use Psr\Http\Message\ResponseInterface;
 
@@ -12,27 +12,33 @@ use Psr\Http\Message\ResponseInterface;
  *
  * @author Tobias Nyholm 
  */
-class History implements Journal
+final class History implements Journal
 {
     /**
-     * @var ResponseInterface
+     * @var ResponseInterface|null
      */
     private $lastResponse;
 
     /**
      * @return ResponseInterface|null
      */
-    public function getLastResponse()
+    public function getLastResponse(): ?ResponseInterface
     {
         return $this->lastResponse;
     }
 
-    public function addSuccess(RequestInterface $request, ResponseInterface $response)
+    /**
+     * @return void
+     */
+    public function addSuccess(RequestInterface $request, ResponseInterface $response): void
     {
         $this->lastResponse = $response;
     }
 
-    public function addFailure(RequestInterface $request, Exception $exception)
+    /**
+     * @return void
+     */
+    public function addFailure(RequestInterface $request, ClientExceptionInterface $exception): void
     {
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/PathPrepend.php b/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/PathPrepend.php
index 2c91bf74..c1077299 100644
--- a/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/PathPrepend.php
+++ b/vendor/knplabs/github-api/lib/Github/HttpClient/Plugin/PathPrepend.php
@@ -3,6 +3,7 @@
 namespace Github\HttpClient\Plugin;
 
 use Http\Client\Common\Plugin;
+use Http\Promise\Promise;
 use Psr\Http\Message\RequestInterface;
 
 /**
@@ -10,22 +11,29 @@ use Psr\Http\Message\RequestInterface;
  *
  * @author Tobias Nyholm 
  */
-class PathPrepend implements Plugin
+final class PathPrepend implements Plugin
 {
+    /**
+     * @var string
+     */
     private $path;
 
     /**
      * @param string $path
      */
-    public function __construct($path)
+    public function __construct(string $path)
     {
         $this->path = $path;
     }
 
     /**
-     * {@inheritdoc}
+     * @param RequestInterface $request
+     * @param callable         $next
+     * @param callable         $first
+     *
+     * @return Promise
      */
-    public function handleRequest(RequestInterface $request, callable $next, callable $first)
+    public function handleRequest(RequestInterface $request, callable $next, callable $first): Promise
     {
         $currentPath = $request->getUri()->getPath();
         if (strpos($currentPath, $this->path) !== 0) {
diff --git a/vendor/knplabs/github-api/lib/Github/ResultPager.php b/vendor/knplabs/github-api/lib/Github/ResultPager.php
index 24f2a32f..cfd1d605 100644
--- a/vendor/knplabs/github-api/lib/Github/ResultPager.php
+++ b/vendor/knplabs/github-api/lib/Github/ResultPager.php
@@ -2,36 +2,51 @@
 
 namespace Github;
 
-use Github\Api\ApiInterface;
-use Github\Api\Search;
+use Closure;
+use Generator;
+use Github\Api\AbstractApi;
 use Github\HttpClient\Message\ResponseMediator;
+use ValueError;
 
 /**
  * Pager class for supporting pagination in github classes.
  *
  * @author Ramon de la Fuente 
  * @author Mitchel Verschoof 
+ * @author Graham Campbell 
  */
 class ResultPager implements ResultPagerInterface
 {
     /**
-     * The GitHub Client to use for pagination.
+     * The default number of entries to request per page.
      *
-     * @var \Github\Client
+     * @var int
      */
-    protected $client;
+    private const PER_PAGE = 100;
 
     /**
-     * Comes from pagination headers in Github API results.
+     * The client to use for pagination.
      *
-     * @var array
+     * @var Client
      */
-    protected $pagination;
+    private $client;
 
     /**
-     * The Github client to use for pagination.
+     * The number of entries to request per page.
      *
-     * This must be the same instance that you got the Api instance from.
+     * @var int
+     */
+    private $perPage;
+
+    /**
+     * The pagination result from the API.
+     *
+     * @var array
+     */
+    private $pagination;
+
+    /**
+     * Create a new result pager instance.
      *
      * Example code:
      *
@@ -39,90 +54,103 @@ class ResultPager implements ResultPagerInterface
      * $api = $client->api('someApi');
      * $pager = new \Github\ResultPager($client);
      *
-     * @param \Github\Client $client
+     * @param Client   $client
+     * @param int|null $perPage
+     *
+     * @return void
      */
-    public function __construct(Client $client)
+    public function __construct(Client $client, int $perPage = null)
     {
-        $this->client = $client;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getPagination()
-    {
-        return $this->pagination;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function fetch(ApiInterface $api, $method, array $parameters = [])
-    {
-        $result = $this->callApi($api, $method, $parameters);
-        $this->postFetch();
-
-        return $result;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function fetchAll(ApiInterface $api, $method, array $parameters = [])
-    {
-        $isSearch = $api instanceof Search;
-
-        // get the perPage from the api
-        $perPage = $api->getPerPage();
-
-        // set parameters per_page to GitHub max to minimize number of requests
-        $api->setPerPage(100);
-
-        try {
-            $result = $this->callApi($api, $method, $parameters);
-            $this->postFetch();
-
-            if ($isSearch) {
-                $result = isset($result['items']) ? $result['items'] : $result;
-            }
-
-            while ($this->hasNext()) {
-                $next = $this->fetchNext();
-
-                if ($isSearch) {
-                    $result = array_merge($result, $next['items']);
-                } else {
-                    $result = array_merge($result, $next);
-                }
-            }
-        } finally {
-            // restore the perPage
-            $api->setPerPage($perPage);
+        if (null !== $perPage && ($perPage < 1 || $perPage > 100)) {
+            throw new ValueError(sprintf('%s::__construct(): Argument #2 ($perPage) must be between 1 and 100, or null', self::class));
         }
 
+        $this->client = $client;
+        $this->perPage = $perPage ?? self::PER_PAGE;
+        $this->pagination = [];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function fetch(AbstractApi $api, string $method, array $parameters = []): array
+    {
+        $paginatorPerPage = $this->perPage;
+        $closure = Closure::bind(function (AbstractApi $api) use ($paginatorPerPage) {
+            $clone = clone $api;
+            $clone->perPage = $paginatorPerPage;
+
+            return $clone;
+        }, null, AbstractApi::class);
+
+        $api = $closure($api);
+        $result = $api->$method(...$parameters);
+
+        $this->postFetch(true);
+
         return $result;
     }
 
     /**
      * {@inheritdoc}
      */
-    public function postFetch()
+    public function fetchAll(AbstractApi $api, string $method, array $parameters = []): array
     {
-        $this->pagination = ResponseMediator::getPagination($this->client->getLastResponse());
+        return iterator_to_array($this->fetchAllLazy($api, $method, $parameters));
     }
 
     /**
      * {@inheritdoc}
      */
-    public function hasNext()
+    public function fetchAllLazy(AbstractApi $api, string $method, array $parameters = []): Generator
     {
-        return $this->has('next');
+        $result = $this->fetch($api, $method, $parameters);
+
+        foreach ($result['items'] ?? $result as $key => $item) {
+            if (is_string($key)) {
+                yield $key => $item;
+            } else {
+                yield $item;
+            }
+        }
+
+        while ($this->hasNext()) {
+            $result = $this->fetchNext();
+
+            foreach ($result['items'] ?? $result as $key => $item) {
+                if (is_string($key)) {
+                    yield $key => $item;
+                } else {
+                    yield $item;
+                }
+            }
+        }
     }
 
     /**
      * {@inheritdoc}
      */
-    public function fetchNext()
+    public function postFetch(/* $skipDeprecation = false */): void
+    {
+        if (func_num_args() === 0 || (func_num_args() > 0 && false === func_get_arg(0))) {
+            trigger_deprecation('KnpLabs/php-github-api', '3.2', 'The "%s" method is deprecated and will be removed.', __METHOD__);
+        }
+
+        $this->setPagination();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function hasNext(): bool
+    {
+        return isset($this->pagination['next']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function fetchNext(): array
     {
         return $this->get('next');
     }
@@ -130,15 +158,15 @@ class ResultPager implements ResultPagerInterface
     /**
      * {@inheritdoc}
      */
-    public function hasPrevious()
+    public function hasPrevious(): bool
     {
-        return $this->has('prev');
+        return isset($this->pagination['prev']);
     }
 
     /**
      * {@inheritdoc}
      */
-    public function fetchPrevious()
+    public function fetchPrevious(): array
     {
         return $this->get('prev');
     }
@@ -146,7 +174,7 @@ class ResultPager implements ResultPagerInterface
     /**
      * {@inheritdoc}
      */
-    public function fetchFirst()
+    public function fetchFirst(): array
     {
         return $this->get('first');
     }
@@ -154,41 +182,31 @@ class ResultPager implements ResultPagerInterface
     /**
      * {@inheritdoc}
      */
-    public function fetchLast()
+    public function fetchLast(): array
     {
         return $this->get('last');
     }
 
     /**
      * @param string $key
-     */
-    protected function has($key)
-    {
-        return !empty($this->pagination) && isset($this->pagination[$key]);
-    }
-
-    /**
-     * @param string $key
-     */
-    protected function get($key)
-    {
-        if ($this->has($key)) {
-            $result = $this->client->getHttpClient()->get($this->pagination[$key]);
-            $this->postFetch();
-
-            return ResponseMediator::getContent($result);
-        }
-    }
-
-    /**
-     * @param ApiInterface $api
-     * @param string       $method
-     * @param array        $parameters
      *
-     * @return mixed
+     * @return array
      */
-    protected function callApi(ApiInterface $api, $method, array $parameters)
+    protected function get(string $key): array
     {
-        return call_user_func_array([$api, $method], $parameters);
+        if (!isset($this->pagination[$key])) {
+            return [];
+        }
+
+        $result = $this->client->getHttpClient()->get($this->pagination[$key]);
+
+        $this->postFetch(true);
+
+        return ResponseMediator::getContent($result);
+    }
+
+    private function setPagination(): void
+    {
+        $this->pagination = ResponseMediator::getPagination($this->client->getLastResponse());
     }
 }
diff --git a/vendor/knplabs/github-api/lib/Github/ResultPagerInterface.php b/vendor/knplabs/github-api/lib/Github/ResultPagerInterface.php
index c5add903..bf7618ee 100644
--- a/vendor/knplabs/github-api/lib/Github/ResultPagerInterface.php
+++ b/vendor/knplabs/github-api/lib/Github/ResultPagerInterface.php
@@ -2,89 +2,103 @@
 
 namespace Github;
 
-use Github\Api\ApiInterface;
+use Generator;
+use Github\Api\AbstractApi;
 
 /**
  * Pager interface.
  *
  * @author Ramon de la Fuente 
  * @author Mitchel Verschoof 
+ * @author Graham Campbell 
  */
 interface ResultPagerInterface
 {
-    /**
-     * @return null|array pagination result of last request
-     */
-    public function getPagination();
-
     /**
      * Fetch a single result (page) from an api call.
      *
-     * @param ApiInterface $api        the Api instance
-     * @param string       $method     the method name to call on the Api instance
-     * @param array        $parameters the method parameters in an array
+     * @param AbstractApi $api        the Api instance
+     * @param string      $method     the method name to call on the Api instance
+     * @param array       $parameters the method parameters in an array
      *
      * @return array returns the result of the Api::$method() call
      */
-    public function fetch(ApiInterface $api, $method, array $parameters = []);
+    public function fetch(AbstractApi $api, string $method, array $parameters = []): array;
 
     /**
      * Fetch all results (pages) from an api call.
      *
      * Use with care - there is no maximum.
      *
-     * @param ApiInterface $api        the Api instance
-     * @param string       $method     the method name to call on the Api instance
-     * @param array        $parameters the method parameters in an array
+     * @param AbstractApi $api        the Api instance
+     * @param string      $method     the method name to call on the Api instance
+     * @param array       $parameters the method parameters in an array
      *
      * @return array returns a merge of the results of the Api::$method() call
      */
-    public function fetchAll(ApiInterface $api, $method, array $parameters = []);
+    public function fetchAll(AbstractApi $api, string $method, array $parameters = []): array;
+
+    /**
+     * Lazily fetch all results (pages) from an api call.
+     *
+     * Use with care - there is no maximum.
+     *
+     * @param AbstractApi $api        the Api instance
+     * @param string      $method     the method name to call on the Api instance
+     * @param array       $parameters the method parameters in an array
+     *
+     * @return \Generator returns a merge of the results of the Api::$method() call
+     */
+    public function fetchAllLazy(AbstractApi $api, string $method, array $parameters = []): Generator;
 
     /**
      * Method that performs the actual work to refresh the pagination property.
+     *
+     * @deprecated since 3.2 and will be removed in 4.0.
+     *
+     * @return void
      */
-    public function postFetch();
+    public function postFetch(): void;
 
     /**
      * Check to determine the availability of a next page.
      *
      * @return bool
      */
-    public function hasNext();
+    public function hasNext(): bool;
 
     /**
      * Check to determine the availability of a previous page.
      *
      * @return bool
      */
-    public function hasPrevious();
+    public function hasPrevious(): bool;
 
     /**
      * Fetch the next page.
      *
      * @return array
      */
-    public function fetchNext();
+    public function fetchNext(): array;
 
     /**
      * Fetch the previous page.
      *
      * @return array
      */
-    public function fetchPrevious();
+    public function fetchPrevious(): array;
 
     /**
      * Fetch the first page.
      *
      * @return array
      */
-    public function fetchFirst();
+    public function fetchFirst(): array;
 
     /**
      * Fetch the last page.
      *
      * @return array
      */
-    public function fetchLast();
+    public function fetchLast(): array;
 }
diff --git a/vendor/knplabs/github-api/phpstan.neon.dist b/vendor/knplabs/github-api/phpstan.neon.dist
new file mode 100644
index 00000000..9e84171f
--- /dev/null
+++ b/vendor/knplabs/github-api/phpstan.neon.dist
@@ -0,0 +1,15 @@
+parameters:
+    checkMissingIterableValueType: false
+
+    level: 6
+    paths:
+        - lib
+
+    ignoreErrors:
+        # Ignore typehint errors on api classes
+        -
+            message: '#Method (.*) with no typehint specified\.#'
+            path: lib/Github/Api
+        -
+            message: '#Method (.*) has no return typehint specified\.#'
+            path: lib/Github/Api
diff --git a/vendor/kylekatarnls/update-helper/LICENSE b/vendor/kylekatarnls/update-helper/LICENSE
deleted file mode 100644
index d55dee54..00000000
--- a/vendor/kylekatarnls/update-helper/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-MIT License
-
-Copyright (c) 2017 https://github.com/pug-php
-Copyright (c) 2017 https://github.com/kylekatarnls
-
-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.
diff --git a/vendor/kylekatarnls/update-helper/composer.json b/vendor/kylekatarnls/update-helper/composer.json
deleted file mode 100644
index 3b57d856..00000000
--- a/vendor/kylekatarnls/update-helper/composer.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-    "name": "kylekatarnls/update-helper",
-    "description": "Update helper",
-    "type": "composer-plugin",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "Kyle",
-            "email": "kylekatarnls@gmail.com"
-        }
-    ],
-    "require": {
-        "php": ">=5.3.0",
-        "composer-plugin-api": "^1.1.0"
-    },
-    "require-dev": {
-        "composer/composer": "^2.0.x-dev",
-        "phpunit/phpunit": ">=4.8.35 <6.0",
-        "codeclimate/php-test-reporter": "dev-master"
-    },
-    "autoload": {
-        "psr-0": {
-            "UpdateHelper\\": "src/"
-        }
-    },
-    "scripts": {
-        "post-install-cmd": [
-            "UpdateHelper\\UpdateHelper::check"
-        ],
-        "post-update-cmd": [
-            "UpdateHelper\\UpdateHelper::check"
-        ],
-        "post-package-install": [
-            "UpdateHelper\\UpdateHelper::check"
-        ],
-        "post-package-update": [
-            "UpdateHelper\\UpdateHelper::check"
-        ]
-    },
-    "extra": {
-        "class": "UpdateHelper\\ComposerPlugin"
-    }
-}
diff --git a/vendor/kylekatarnls/update-helper/src/UpdateHelper/ComposerPlugin.php b/vendor/kylekatarnls/update-helper/src/UpdateHelper/ComposerPlugin.php
deleted file mode 100644
index f0e23138..00000000
--- a/vendor/kylekatarnls/update-helper/src/UpdateHelper/ComposerPlugin.php
+++ /dev/null
@@ -1,37 +0,0 @@
-io = $io;
-    }
-
-    public static function getSubscribedEvents()
-    {
-        return array(
-            'post-autoload-dump' => array(
-                array('onAutoloadDump', 0),
-            ),
-        );
-    }
-
-    public function onAutoloadDump(Event $event)
-    {
-        if (!class_exists('UpdateHelper\\UpdateHelper')) {
-            return;
-        }
-
-        UpdateHelper::check($event);
-    }
-}
diff --git a/vendor/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelper.php b/vendor/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelper.php
deleted file mode 100644
index 2ed2d9e7..00000000
--- a/vendor/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelper.php
+++ /dev/null
@@ -1,349 +0,0 @@
-read();
-        } catch (\RuntimeException $e) {
-            $dependencyConfig = null;
-        }
-
-        if (is_array($dependencyConfig) && isset($dependencyConfig['extra'], $dependencyConfig['extra'][$key])) {
-            $classes[$file] = $dependencyConfig['extra'][$key];
-        }
-    }
-
-    protected static function getUpdateHelperConfig(Composer $composer, $key = null)
-    {
-        $vendorDir = $composer->getConfig()->get('vendor-dir');
-
-        $npm = array();
-
-        foreach (scandir($vendorDir) as $namespace) {
-            if ($namespace === '.' || $namespace === '..' || !is_dir($directory = $vendorDir.DIRECTORY_SEPARATOR.$namespace)) {
-                continue;
-            }
-
-            foreach (scandir($directory) as $dependency) {
-                if ($dependency === '.' || $dependency === '..' || !is_dir($subDirectory = $directory.DIRECTORY_SEPARATOR.$dependency)) {
-                    continue;
-                }
-
-                static::appendConfig($npm, $subDirectory, $key);
-            }
-        }
-
-        static::appendConfig($npm, dirname($vendorDir), $key);
-
-        return $npm;
-    }
-
-    public static function check(Event $event)
-    {
-        if ($event instanceof ScriptEvent || $event instanceof PackageEvent) {
-            $io = $event->getIO();
-            $composer = $event->getComposer();
-            $autoload = __DIR__.'/../../../../autoload.php';
-
-            if (file_exists($autoload)) {
-                include_once $autoload;
-            }
-
-            $classes = static::getUpdateHelperConfig($composer);
-
-            foreach ($classes as $file => $class) {
-                $error = null;
-
-                if (is_string($class) && class_exists($class)) {
-                    try {
-                        $helper = new $class();
-                    } catch (\Exception $e) {
-                        $error = $e->getMessage()."\nFile: ".$e->getFile()."\nLine:".$e->getLine()."\n\n".$e->getTraceAsString();
-                    } catch (\Throwable $e) {
-                        $error = $e->getMessage()."\nFile: ".$e->getFile()."\nLine:".$e->getLine()."\n\n".$e->getTraceAsString();
-                    }
-
-                    if (!$error && $helper instanceof UpdateHelperInterface) {
-                        $helper->check(new static($event, $io, $composer));
-
-                        continue;
-                    }
-                }
-
-                if (!$error) {
-                    $error = JsonFile::encode($class).' is not an instance of UpdateHelperInterface.';
-                }
-
-                $io->writeError('UpdateHelper error in '.$file.":\n".$error);
-            }
-        }
-    }
-
-    public function __construct(Event $event, IOInterface $io = null, Composer $composer = null)
-    {
-        $this->event = $event;
-        $this->io = $io ?: (method_exists($event, 'getIO') ? $event->getIO() : null);
-        $this->composer = $composer ?: (method_exists($event, 'getComposer') ? $event->getComposer() : null);
-
-        if ($this->composer &&
-            ($directory = $this->composer->getConfig()->get('archive-dir')) &&
-            file_exists($file = $directory.'/composer.json')
-        ) {
-            $this->composerFilePath = $file;
-            $this->file = new JsonFile($this->composerFilePath);
-            $this->dependencies = $this->file->read();
-        }
-    }
-
-    /**
-     * @return JsonFile
-     */
-    public function getFile()
-    {
-        return $this->file;
-    }
-
-    /**
-     * @return string
-     */
-    public function getComposerFilePath()
-    {
-        return $this->composerFilePath;
-    }
-
-    /**
-     * @return Composer
-     */
-    public function getComposer()
-    {
-        return $this->composer;
-    }
-
-    /**
-     * @return Event
-     */
-    public function getEvent()
-    {
-        return $this->event;
-    }
-
-    /**
-     * @return IOInterface
-     */
-    public function getIo()
-    {
-        return $this->io;
-    }
-
-    /**
-     * @return array
-     */
-    public function getDependencies()
-    {
-        return $this->dependencies;
-    }
-
-    /**
-     * @return array
-     */
-    public function getDevDependencies()
-    {
-        return isset($this->dependencies['require-dev']) ? $this->dependencies['require-dev'] : array();
-    }
-
-    /**
-     * @return array
-     */
-    public function getProdDependencies()
-    {
-        return isset($this->dependencies['require']) ? $this->dependencies['require'] : array();
-    }
-
-    /**
-     * @return array
-     */
-    public function getFlattenDependencies()
-    {
-        return array_merge($this->getDevDependencies(), $this->getProdDependencies());
-    }
-
-    /**
-     * @param string $dependency
-     *
-     * @return bool
-     */
-    public function hasAsDevDependency($dependency)
-    {
-        return isset($this->dependencies['require-dev'][$dependency]);
-    }
-
-    /**
-     * @param string $dependency
-     *
-     * @return bool
-     */
-    public function hasAsProdDependency($dependency)
-    {
-        return isset($this->dependencies['require'][$dependency]);
-    }
-
-    /**
-     * @param string $dependency
-     *
-     * @return bool
-     */
-    public function hasAsDependency($dependency)
-    {
-        return $this->hasAsDevDependency($dependency) || $this->hasAsProdDependency($dependency);
-    }
-
-    /**
-     * @param string $dependency
-     * @param string $version
-     *
-     * @return bool
-     */
-    public function isDependencyAtLeast($dependency, $version)
-    {
-        if ($this->hasAsProdDependency($dependency)) {
-            return Semver::satisfies($version, $this->dependencies['require'][$dependency]);
-        }
-
-        if ($this->hasAsDevDependency($dependency)) {
-            return Semver::satisfies($version, $this->dependencies['require-dev'][$dependency]);
-        }
-
-        return false;
-    }
-
-    /**
-     * @param string $dependency
-     * @param string $version
-     *
-     * @return bool
-     */
-    public function isDependencyLesserThan($dependency, $version)
-    {
-        return !$this->isDependencyAtLeast($dependency, $version);
-    }
-
-    /**
-     * @param string $dependency
-     * @param string $version
-     * @param array  $environments
-     *
-     * @throws \Exception
-     *
-     * @return $this
-     */
-    public function setDependencyVersion($dependency, $version, $environments = array('require', 'require-dev'))
-    {
-        return $this->setDependencyVersions(array($dependency => $version), $environments);
-    }
-
-    /**
-     * @param array $dependencies
-     * @param array $environments
-     *
-     * @throws \Exception
-     *
-     * @return $this
-     */
-    public function setDependencyVersions($dependencies, $environments = array('require', 'require-dev'))
-    {
-        if (!$this->composerFilePath) {
-            throw new \RuntimeException('No composer instance detected.');
-        }
-
-        $touched = false;
-
-        foreach ($environments as $environment) {
-            foreach ($dependencies as $dependency => $version) {
-                if (isset($this->dependencies[$environment], $this->dependencies[$environment][$dependency])) {
-                    $this->dependencies[$environment][$dependency] = $version;
-                    $touched = true;
-                }
-            }
-        }
-
-        if ($touched) {
-            if (!$this->composerFilePath) {
-                throw new \RuntimeException('composer.json not found (custom vendor-dir are not yet supported).');
-            }
-
-            $file = new JsonFile($this->composerFilePath);
-            $file->write($this->dependencies);
-        }
-
-        return $this;
-    }
-
-    /**
-     * @return $this
-     */
-    public function update()
-    {
-        $output = shell_exec('composer update --no-scripts');
-
-        if (!empty($output)) {
-            $this->write($output);
-        }
-
-        return $this;
-    }
-
-    /**
-     * @param string|array $text
-     */
-    public function write($text)
-    {
-        if ($this->io) {
-            $this->io->write($text);
-
-            return;
-        }
-
-        if (is_array($text)) {
-            $text = implode("\n", $text);
-        }
-
-        echo $text;
-    }
-
-    /**
-     * @return bool
-     */
-    public function isInteractive()
-    {
-        return $this->io && $this->io->isInteractive();
-    }
-}
diff --git a/vendor/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelperInterface.php b/vendor/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelperInterface.php
deleted file mode 100644
index 3809dc0f..00000000
--- a/vendor/kylekatarnls/update-helper/src/UpdateHelper/UpdateHelperInterface.php
+++ /dev/null
@@ -1,8 +0,0 @@
-

+

-Build Status +Build Status Total Downloads Latest Stable Version License @@ -9,7 +9,7 @@ ## About Laravel -> **Note:** This repository contains the core code of the Laravel framework. If you want to build an application using Laravel 5, visit the main [Laravel repository](https://github.com/laravel/laravel). +> **Note:** This repository contains the core code of the Laravel framework. If you want to build an application using Laravel, visit the main [Laravel repository](https://github.com/laravel/laravel). Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable, creative experience to be truly fulfilling. Laravel attempts to take the pain out of development by easing common tasks used in the majority of web projects, such as: @@ -20,7 +20,7 @@ Laravel is a web application framework with expressive, elegant syntax. We belie - [Robust background job processing](https://laravel.com/docs/queues). - [Real-time event broadcasting](https://laravel.com/docs/broadcasting). -Laravel is accessible, yet powerful, providing tools needed for large, robust applications. A superb combination of simplicity, elegance, and innovation gives you a complete toolset required to build any application with which you are tasked +Laravel is accessible, yet powerful, providing tools needed for large, robust applications. A superb combination of simplicity, elegance, and innovation gives you a complete toolset required to build any application with which you are tasked. ## Learning Laravel @@ -34,12 +34,12 @@ Thank you for considering contributing to the Laravel framework! The contributio ## Code of Conduct -In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](CODE_OF_CONDUCT.md). +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). ## Security Vulnerabilities -If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. +Please review [our security policy](https://github.com/laravel/framework/security/policy) on how to report security vulnerabilities. ## License -The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). +The Laravel framework is open-sourced software licensed under the [MIT license](LICENSE.md). diff --git a/vendor/laravel/framework/composer.json b/vendor/laravel/framework/composer.json index feee8408..dea51b9a 100644 --- a/vendor/laravel/framework/composer.json +++ b/vendor/laravel/framework/composer.json @@ -15,32 +15,35 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", + "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", - "doctrine/inflector": "^1.1", - "dragonmantank/cron-expression": "^2.0", - "erusev/parsedown": "^1.7", - "laravel/nexmo-notification-channel": "^1.0", - "laravel/slack-notification-channel": "^1.0", - "league/flysystem": "^1.0.8", - "monolog/monolog": "^1.12", - "nesbot/carbon": "^1.26.3", - "opis/closure": "^3.1", + "doctrine/inflector": "^1.4|^2.0", + "dragonmantank/cron-expression": "^2.3.1", + "egulias/email-validator": "^2.1.10", + "league/commonmark": "^1.3", + "league/flysystem": "^1.1", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.31", + "opis/closure": "^3.6", "psr/container": "^1.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "^3.7", + "ramsey/uuid": "^3.7|^4.0", "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^4.1", - "symfony/debug": "^4.1", - "symfony/finder": "^4.1", - "symfony/http-foundation": "^4.1", - "symfony/http-kernel": "^4.1", - "symfony/process": "^4.1", - "symfony/routing": "^4.1", - "symfony/var-dumper": "^4.1", - "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "^2.2" + "symfony/console": "^5.0", + "symfony/error-handler": "^5.0", + "symfony/finder": "^5.0", + "symfony/http-foundation": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/mime": "^5.0", + "symfony/polyfill-php73": "^1.17", + "symfony/process": "^5.0", + "symfony/routing": "^5.0", + "symfony/var-dumper": "^5.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^4.0", + "voku/portable-ascii": "^1.4.8" }, "replace": { "illuminate/auth": "self.version", @@ -68,29 +71,31 @@ "illuminate/routing": "self.version", "illuminate/session": "self.version", "illuminate/support": "self.version", + "illuminate/testing": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", "illuminate/view": "self.version" }, + "require-dev": { + "aws/aws-sdk-php": "^3.155", + "doctrine/dbal": "^2.6", + "filp/whoops": "^2.8", + "guzzlehttp/guzzle": "^6.3.1|^7.0.1", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "~1.3.3|^1.4.2", + "moontoast/math": "^1.1", + "orchestra/testbench-core": "^5.8", + "pda/pheanstalk": "^4.0", + "phpunit/phpunit": "^8.4|^9.3.3", + "predis/predis": "^1.1.1", + "symfony/cache": "^5.0" + }, + "provide": { + "psr/container-implementation": "1.0" + }, "conflict": { "tightenco/collect": "<5.5.33" }, - "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/dbal": "^2.6", - "filp/whoops": "^2.1.4", - "guzzlehttp/guzzle": "^6.3", - "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.0", - "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.7.*", - "pda/pheanstalk": "^3.0|^4.0", - "phpunit/phpunit": "^7.5", - "predis/predis": "^1.1.1", - "symfony/css-selector": "^4.1", - "symfony/dom-crawler": "^4.1", - "true/punycode": "^2.1" - }, "autoload": { "files": [ "src/Illuminate/Foundation/helpers.php", @@ -110,30 +115,37 @@ }, "extra": { "branch-alias": { - "dev-master": "5.7-dev" + "dev-master": "7.x-dev" } }, "suggest": { + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", - "filp/whoops": "Required for friendly error pages in development (^2.1.4).", - "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", - "laravel/tinker": "Required to use the tinker console command (^1.0).", + "filp/whoops": "Required for friendly error pages in development (^2.8).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0.1).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "mockery/mockery": "Required to use mocking (~1.3.3|^1.4.2).", "moontoast/math": "Required to use ordered UUIDs (^1.1).", - "nexmo/client": "Required to use the Nexmo transport (^1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0|^4.0).", - "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)." + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.3.3).", + "predis/predis": "Required to use the predis connector (^1.1.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.0).", + "symfony/filesystem": "Required to create relative storage directory symbolic links (^5.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", + "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Access/AuthorizationException.php b/vendor/laravel/framework/src/Illuminate/Auth/Access/AuthorizationException.php index dc0753e2..7fe6ceba 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Access/AuthorizationException.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Access/AuthorizationException.php @@ -3,8 +3,62 @@ namespace Illuminate\Auth\Access; use Exception; +use Throwable; class AuthorizationException extends Exception { - // + /** + * The response from the gate. + * + * @var \Illuminate\Auth\Access\Response + */ + protected $response; + + /** + * Create a new authorization exception instance. + * + * @param string|null $message + * @param mixed $code + * @param \Throwable|null $previous + * @return void + */ + public function __construct($message = null, $code = null, Throwable $previous = null) + { + parent::__construct($message ?? 'This action is unauthorized.', 0, $previous); + + $this->code = $code ?: 0; + } + + /** + * Get the response from the gate. + * + * @return \Illuminate\Auth\Access\Response + */ + public function response() + { + return $this->response; + } + + /** + * Set the response from the gate. + * + * @param \Illuminate\Auth\Access\Response $response + * @return $this + */ + public function setResponse($response) + { + $this->response = $response; + + return $this; + } + + /** + * Create a deny response object from this exception. + * + * @return \Illuminate\Auth\Access\Response + */ + public function toResponse() + { + return Response::deny($this->message, $this->code); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php b/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php index 19db5076..8c955b46 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php @@ -3,13 +3,13 @@ namespace Illuminate\Auth\Access; use Exception; -use ReflectionClass; -use ReflectionFunction; +use Illuminate\Contracts\Auth\Access\Gate as GateContract; +use Illuminate\Contracts\Container\Container; use Illuminate\Support\Arr; use Illuminate\Support\Str; use InvalidArgumentException; -use Illuminate\Contracts\Container\Container; -use Illuminate\Contracts\Auth\Access\Gate as GateContract; +use ReflectionClass; +use ReflectionFunction; class Gate implements GateContract { @@ -57,6 +57,20 @@ class Gate implements GateContract */ protected $afterCallbacks = []; + /** + * All of the defined abilities using class@method notation. + * + * @var array + */ + protected $stringCallbacks = []; + + /** + * The callback to be used to guess policy names. + * + * @var callable|null + */ + protected $guessPolicyNamesUsingCallback; + /** * Create a new gate instance. * @@ -66,10 +80,12 @@ class Gate implements GateContract * @param array $policies * @param array $beforeCallbacks * @param array $afterCallbacks + * @param callable|null $guessPolicyNamesUsingCallback * @return void */ public function __construct(Container $container, callable $userResolver, array $abilities = [], - array $policies = [], array $beforeCallbacks = [], array $afterCallbacks = []) + array $policies = [], array $beforeCallbacks = [], array $afterCallbacks = [], + callable $guessPolicyNamesUsingCallback = null) { $this->policies = $policies; $this->container = $container; @@ -77,6 +93,7 @@ class Gate implements GateContract $this->userResolver = $userResolver; $this->afterCallbacks = $afterCallbacks; $this->beforeCallbacks = $beforeCallbacks; + $this->guessPolicyNamesUsingCallback = $guessPolicyNamesUsingCallback; } /** @@ -109,9 +126,15 @@ class Gate implements GateContract */ public function define($ability, $callback) { + if (is_array($callback) && isset($callback[0]) && is_string($callback[0])) { + $callback = $callback[0].'@'.$callback[1]; + } + if (is_callable($callback)) { $this->abilities[$ability] = $callback; } elseif (is_string($callback)) { + $this->stringCallbacks[$ability] = $callback; + $this->abilities[$ability] = $this->buildAbilityCallback($ability, $callback); } else { throw new InvalidArgumentException("Callback must be a callable or a 'Class@method' string."); @@ -125,16 +148,17 @@ class Gate implements GateContract * * @param string $name * @param string $class - * @param array|null $abilities + * @param array|null $abilities * @return $this */ public function resource($name, $class, array $abilities = null) { $abilities = $abilities ?: [ - 'view' => 'view', - 'create' => 'create', - 'update' => 'update', - 'delete' => 'delete', + 'viewAny' => 'viewAny', + 'view' => 'view', + 'create' => 'create', + 'update' => 'update', + 'delete' => 'delete', ]; foreach ($abilities as $ability => $method) { @@ -254,11 +278,7 @@ class Gate implements GateContract public function check($abilities, $arguments = []) { return collect($abilities)->every(function ($ability) use ($arguments) { - try { - return (bool) $this->raw($ability, $arguments); - } catch (AuthorizationException $e) { - return false; - } + return $this->inspect($ability, $arguments)->allowed(); }); } @@ -276,6 +296,18 @@ class Gate implements GateContract }); } + /** + * Determine if all of the given abilities should be denied for the current user. + * + * @param iterable|string $abilities + * @param array|mixed $arguments + * @return bool + */ + public function none($abilities, $arguments = []) + { + return ! $this->any($abilities, $arguments); + } + /** * Determine if the given ability should be granted for the current user. * @@ -287,13 +319,29 @@ class Gate implements GateContract */ public function authorize($ability, $arguments = []) { - $result = $this->raw($ability, $arguments); + return $this->inspect($ability, $arguments)->authorize(); + } - if ($result instanceof Response) { - return $result; + /** + * Inspect the user for the given ability. + * + * @param string $ability + * @param array|mixed $arguments + * @return \Illuminate\Auth\Access\Response + */ + public function inspect($ability, $arguments = []) + { + try { + $result = $this->raw($ability, $arguments); + + if ($result instanceof Response) { + return $result; + } + + return $result ? Response::allow() : Response::deny(); + } catch (AuthorizationException $e) { + return $e->toResponse(); } - - return $result ? $this->allow() : $this->deny(); } /** @@ -302,6 +350,8 @@ class Gate implements GateContract * @param string $ability * @param array|mixed $arguments * @return mixed + * + * @throws \Illuminate\Auth\Access\AuthorizationException */ public function raw($ability, $arguments = []) { @@ -333,7 +383,7 @@ class Gate implements GateContract * * @param \Illuminate\Contracts\Auth\Authenticatable|null $user * @param \Closure|string|array $class - * @param string|null $method + * @param string|null $method * @return bool */ protected function canBeCalledWithUser($user, $class, $method = null) @@ -386,6 +436,8 @@ class Gate implements GateContract * * @param callable $callback * @return bool + * + * @throws \ReflectionException */ protected function callbackAllowsGuests($callback) { @@ -402,7 +454,7 @@ class Gate implements GateContract */ protected function parameterAllowsGuests($parameter) { - return ($parameter->getClass() && $parameter->allowsNull()) || + return ($parameter->hasType() && $parameter->allowsNull()) || ($parameter->isDefaultValueAvailable() && is_null($parameter->getDefaultValue())); } @@ -431,14 +483,12 @@ class Gate implements GateContract */ protected function callBeforeCallbacks($user, $ability, array $arguments) { - $arguments = array_merge([$user, $ability], [$arguments]); - foreach ($this->beforeCallbacks as $before) { if (! $this->canBeCalledWithUser($user, $before)) { continue; } - if (! is_null($result = $before(...$arguments))) { + if (! is_null($result = $before($user, $ability, $arguments))) { return $result; } } @@ -484,13 +534,21 @@ class Gate implements GateContract return $callback; } + if (isset($this->stringCallbacks[$ability])) { + [$class, $method] = Str::parseCallback($this->stringCallbacks[$ability]); + + if ($this->canBeCalledWithUser($user, $class, $method ?: '__invoke')) { + return $this->abilities[$ability]; + } + } + if (isset($this->abilities[$ability]) && $this->canBeCalledWithUser($user, $this->abilities[$ability])) { return $this->abilities[$ability]; } return function () { - return null; + // }; } @@ -514,6 +572,12 @@ class Gate implements GateContract return $this->resolvePolicy($this->policies[$class]); } + foreach ($this->guessPolicyName($class) as $guessedPolicy) { + if (class_exists($guessedPolicy)) { + return $this->resolvePolicy($guessedPolicy); + } + } + foreach ($this->policies as $expected => $policy) { if (is_subclass_of($class, $expected)) { return $this->resolvePolicy($policy); @@ -521,11 +585,43 @@ class Gate implements GateContract } } + /** + * Guess the policy name for the given class. + * + * @param string $class + * @return array + */ + protected function guessPolicyName($class) + { + if ($this->guessPolicyNamesUsingCallback) { + return Arr::wrap(call_user_func($this->guessPolicyNamesUsingCallback, $class)); + } + + $classDirname = str_replace('/', '\\', dirname(str_replace('\\', '/', $class))); + + return [$classDirname.'\\Policies\\'.class_basename($class).'Policy']; + } + + /** + * Specify a callback to be used to guess policy names. + * + * @param callable $callback + * @return $this + */ + public function guessPolicyNamesUsing(callable $callback) + { + $this->guessPolicyNamesUsingCallback = $callback; + + return $this; + } + /** * Build a policy class instance of the given type. * * @param object|string $class * @return mixed + * + * @throws \Illuminate\Contracts\Container\BindingResolutionException */ public function resolvePolicy($class) { @@ -580,7 +676,7 @@ class Gate implements GateContract protected function callPolicyBefore($policy, $user, $ability, $arguments) { if (! method_exists($policy, 'before')) { - return null; + return; } if ($this->canBeCalledWithUser($user, $policy, 'before')) { @@ -607,7 +703,7 @@ class Gate implements GateContract } if (! is_callable([$policy, $method])) { - return null; + return; } if ($this->canBeCalledWithUser($user, $policy, $method)) { @@ -640,7 +736,8 @@ class Gate implements GateContract return new static( $this->container, $callback, $this->abilities, - $this->policies, $this->beforeCallbacks, $this->afterCallbacks + $this->policies, $this->beforeCallbacks, $this->afterCallbacks, + $this->guessPolicyNamesUsingCallback ); } diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Access/HandlesAuthorization.php b/vendor/laravel/framework/src/Illuminate/Auth/Access/HandlesAuthorization.php index 1a597bb9..66e5786e 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Access/HandlesAuthorization.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Access/HandlesAuthorization.php @@ -8,23 +8,23 @@ trait HandlesAuthorization * Create a new access response. * * @param string|null $message + * @param mixed $code * @return \Illuminate\Auth\Access\Response */ - protected function allow($message = null) + protected function allow($message = null, $code = null) { - return new Response($message); + return Response::allow($message, $code); } /** * Throws an unauthorized exception. * - * @param string $message - * @return void - * - * @throws \Illuminate\Auth\Access\AuthorizationException + * @param string|null $message + * @param mixed|null $code + * @return \Illuminate\Auth\Access\Response */ - protected function deny($message = 'This action is unauthorized.') + protected function deny($message = null, $code = null) { - throw new AuthorizationException($message); + return Response::deny($message, $code); } } diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Access/Response.php b/vendor/laravel/framework/src/Illuminate/Auth/Access/Response.php index 7fab01ef..ab5edf39 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Access/Response.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Access/Response.php @@ -2,8 +2,17 @@ namespace Illuminate\Auth\Access; -class Response +use Illuminate\Contracts\Support\Arrayable; + +class Response implements Arrayable { + /** + * Indicates whether the response was allowed. + * + * @var bool + */ + protected $allowed; + /** * The response message. * @@ -11,17 +20,72 @@ class Response */ protected $message; + /** + * The response code. + * + * @var mixed + */ + protected $code; + /** * Create a new response. * - * @param string|null $message + * @param bool $allowed + * @param string $message + * @param mixed $code * @return void */ - public function __construct($message = null) + public function __construct($allowed, $message = '', $code = null) { + $this->code = $code; + $this->allowed = $allowed; $this->message = $message; } + /** + * Create a new "allow" Response. + * + * @param string|null $message + * @param mixed $code + * @return \Illuminate\Auth\Access\Response + */ + public static function allow($message = null, $code = null) + { + return new static(true, $message, $code); + } + + /** + * Create a new "deny" Response. + * + * @param string|null $message + * @param mixed $code + * @return \Illuminate\Auth\Access\Response + */ + public static function deny($message = null, $code = null) + { + return new static(false, $message, $code); + } + + /** + * Determine if the response was allowed. + * + * @return bool + */ + public function allowed() + { + return $this->allowed; + } + + /** + * Determine if the response was denied. + * + * @return bool + */ + public function denied() + { + return ! $this->allowed(); + } + /** * Get the response message. * @@ -32,6 +96,47 @@ class Response return $this->message; } + /** + * Get the response code / reason. + * + * @return mixed + */ + public function code() + { + return $this->code; + } + + /** + * Throw authorization exception if response was denied. + * + * @return \Illuminate\Auth\Access\Response + * + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function authorize() + { + if ($this->denied()) { + throw (new AuthorizationException($this->message(), $this->code())) + ->setResponse($this); + } + + return $this; + } + + /** + * Convert the response to an array. + * + * @return array + */ + public function toArray() + { + return [ + 'allowed' => $this->allowed(), + 'message' => $this->message(), + 'code' => $this->code(), + ]; + } + /** * Get the string representation of the message. * diff --git a/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php b/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php index e4e5b415..ebbd7f5f 100755 --- a/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php @@ -3,8 +3,8 @@ namespace Illuminate\Auth; use Closure; -use InvalidArgumentException; use Illuminate\Contracts\Auth\Factory as FactoryContract; +use InvalidArgumentException; class AuthManager implements FactoryContract { @@ -13,7 +13,7 @@ class AuthManager implements FactoryContract /** * The application instance. * - * @var \Illuminate\Foundation\Application + * @var \Illuminate\Contracts\Foundation\Application */ protected $app; @@ -43,7 +43,7 @@ class AuthManager implements FactoryContract /** * Create a new Auth manager instance. * - * @param \Illuminate\Foundation\Application $app + * @param \Illuminate\Contracts\Foundation\Application $app * @return void */ public function __construct($app) @@ -58,7 +58,7 @@ class AuthManager implements FactoryContract /** * Attempt to get the guard from the local cache. * - * @param string $name + * @param string|null $name * @return \Illuminate\Contracts\Auth\Guard|\Illuminate\Contracts\Auth\StatefulGuard */ public function guard($name = null) @@ -94,7 +94,9 @@ class AuthManager implements FactoryContract return $this->{$driverMethod}($name, $config); } - throw new InvalidArgumentException("Auth driver [{$config['driver']}] for guard [{$name}] is not defined."); + throw new InvalidArgumentException( + "Auth driver [{$config['driver']}] for guard [{$name}] is not defined." + ); } /** @@ -156,7 +158,8 @@ class AuthManager implements FactoryContract $this->createUserProvider($config['provider'] ?? null), $this->app['request'], $config['input_key'] ?? 'api_token', - $config['storage_key'] ?? 'api_token' + $config['storage_key'] ?? 'api_token', + $config['hash'] ?? false ); $this->app->refresh('request', $guard, 'setRequest'); @@ -282,6 +285,16 @@ class AuthManager implements FactoryContract return $this; } + /** + * Determines if any guards have already been resolved. + * + * @return bool + */ + public function hasResolvedGuards() + { + return count($this->guards) > 0; + } + /** * Dynamically call the default driver instance. * diff --git a/vendor/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php index 2820beb4..7a6b4121 100755 --- a/vendor/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php @@ -3,9 +3,12 @@ namespace Illuminate\Auth; use Illuminate\Auth\Access\Gate; -use Illuminate\Support\ServiceProvider; +use Illuminate\Auth\Middleware\RequirePassword; use Illuminate\Contracts\Auth\Access\Gate as GateContract; use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; +use Illuminate\Contracts\Routing\ResponseFactory; +use Illuminate\Contracts\Routing\UrlGenerator; +use Illuminate\Support\ServiceProvider; class AuthServiceProvider extends ServiceProvider { @@ -17,12 +20,11 @@ class AuthServiceProvider extends ServiceProvider public function register() { $this->registerAuthenticator(); - $this->registerUserResolver(); - $this->registerAccessGate(); - + $this->registerRequirePassword(); $this->registerRequestRebindHandler(); + $this->registerEventRebindHandler(); } /** @@ -79,6 +81,24 @@ class AuthServiceProvider extends ServiceProvider * * @return void */ + protected function registerRequirePassword() + { + $this->app->bind( + RequirePassword::class, function ($app) { + return new RequirePassword( + $app[ResponseFactory::class], + $app[UrlGenerator::class], + $app['config']->get('auth.password_timeout') + ); + } + ); + } + + /** + * Handle the re-binding of the request binding. + * + * @return void + */ protected function registerRequestRebindHandler() { $this->app->rebinding('request', function ($app, $request) { @@ -87,4 +107,26 @@ class AuthServiceProvider extends ServiceProvider }); }); } + + /** + * Handle the re-binding of the event dispatcher binding. + * + * @return void + */ + protected function registerEventRebindHandler() + { + $this->app->rebinding('events', function ($app, $dispatcher) { + if (! $app->resolved('auth')) { + return; + } + + if ($app['auth']->hasResolvedGuards() === false) { + return; + } + + if (method_exists($guard = $app['auth']->guard(), 'setDispatcher')) { + $guard->setDispatcher($dispatcher); + } + }); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/AuthMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Auth/Console/AuthMakeCommand.php deleted file mode 100644 index cfe95977..00000000 --- a/vendor/laravel/framework/src/Illuminate/Auth/Console/AuthMakeCommand.php +++ /dev/null @@ -1,120 +0,0 @@ - 'auth/login.blade.php', - 'auth/register.stub' => 'auth/register.blade.php', - 'auth/verify.stub' => 'auth/verify.blade.php', - 'auth/passwords/email.stub' => 'auth/passwords/email.blade.php', - 'auth/passwords/reset.stub' => 'auth/passwords/reset.blade.php', - 'layouts/app.stub' => 'layouts/app.blade.php', - 'home.stub' => 'home.blade.php', - ]; - - /** - * Execute the console command. - * - * @return void - */ - public function handle() - { - $this->createDirectories(); - - $this->exportViews(); - - if (! $this->option('views')) { - file_put_contents( - app_path('Http/Controllers/HomeController.php'), - $this->compileControllerStub() - ); - - file_put_contents( - base_path('routes/web.php'), - file_get_contents(__DIR__.'/stubs/make/routes.stub'), - FILE_APPEND - ); - } - - $this->info('Authentication scaffolding generated successfully.'); - } - - /** - * Create the directories for the files. - * - * @return void - */ - protected function createDirectories() - { - if (! is_dir($directory = resource_path('views/layouts'))) { - mkdir($directory, 0755, true); - } - - if (! is_dir($directory = resource_path('views/auth/passwords'))) { - mkdir($directory, 0755, true); - } - } - - /** - * Export the authentication views. - * - * @return void - */ - protected function exportViews() - { - foreach ($this->views as $key => $value) { - if (file_exists($view = resource_path('views/'.$value)) && ! $this->option('force')) { - if (! $this->confirm("The [{$value}] view already exists. Do you want to replace it?")) { - continue; - } - } - - copy( - __DIR__.'/stubs/make/views/'.$key, - $view - ); - } - } - - /** - * Compiles the HomeController stub. - * - * @return string - */ - protected function compileControllerStub() - { - return str_replace( - '{{namespace}}', - $this->getAppNamespace(), - file_get_contents(__DIR__.'/stubs/make/controllers/HomeController.stub') - ); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/login.stub b/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/login.stub deleted file mode 100644 index 9edb920e..00000000 --- a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/login.stub +++ /dev/null @@ -1,73 +0,0 @@ -@extends('layouts.app') - -@section('content') -

-
-
-
-
{{ __('Login') }}
- -
-
- @csrf - -
- - -
- - - @if ($errors->has('email')) - - {{ $errors->first('email') }} - - @endif -
-
- -
- - -
- - - @if ($errors->has('password')) - - {{ $errors->first('password') }} - - @endif -
-
- -
-
-
- - - -
-
-
- -
-
- - - @if (Route::has('password.request')) - - {{ __('Forgot Your Password?') }} - - @endif -
-
-
-
-
-
-
-
-@endsection diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/passwords/email.stub b/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/passwords/email.stub deleted file mode 100644 index ccbee595..00000000 --- a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/passwords/email.stub +++ /dev/null @@ -1,47 +0,0 @@ -@extends('layouts.app') - -@section('content') -
-
-
-
-
{{ __('Reset Password') }}
- -
- @if (session('status')) - - @endif - -
- @csrf - -
- - -
- - - @if ($errors->has('email')) - - {{ $errors->first('email') }} - - @endif -
-
- -
-
- -
-
-
-
-
-
-
-
-@endsection diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/passwords/reset.stub b/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/passwords/reset.stub deleted file mode 100644 index bf27f4c8..00000000 --- a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/passwords/reset.stub +++ /dev/null @@ -1,65 +0,0 @@ -@extends('layouts.app') - -@section('content') -
-
-
-
-
{{ __('Reset Password') }}
- -
-
- @csrf - - - -
- - -
- - - @if ($errors->has('email')) - - {{ $errors->first('email') }} - - @endif -
-
- -
- - -
- - - @if ($errors->has('password')) - - {{ $errors->first('password') }} - - @endif -
-
- -
- - -
- -
-
- -
-
- -
-
-
-
-
-
-
-
-@endsection diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/register.stub b/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/register.stub deleted file mode 100644 index ad95f2cf..00000000 --- a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/register.stub +++ /dev/null @@ -1,77 +0,0 @@ -@extends('layouts.app') - -@section('content') -
-
-
-
-
{{ __('Register') }}
- -
-
- @csrf - -
- - -
- - - @if ($errors->has('name')) - - {{ $errors->first('name') }} - - @endif -
-
- -
- - -
- - - @if ($errors->has('email')) - - {{ $errors->first('email') }} - - @endif -
-
- -
- - -
- - - @if ($errors->has('password')) - - {{ $errors->first('password') }} - - @endif -
-
- -
- - -
- -
-
- -
-
- -
-
-
-
-
-
-
-
-@endsection diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/verify.stub b/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/verify.stub deleted file mode 100644 index c742cb4b..00000000 --- a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/verify.stub +++ /dev/null @@ -1,24 +0,0 @@ -@extends('layouts.app') - -@section('content') -
-
-
-
-
{{ __('Verify Your Email Address') }}
- -
- @if (session('resent')) - - @endif - - {{ __('Before proceeding, please check your email for a verification link.') }} - {{ __('If you did not receive the email') }}, {{ __('click here to request another') }}. -
-
-
-
-
-@endsection diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/home.stub b/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/home.stub deleted file mode 100644 index 05dfca92..00000000 --- a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/home.stub +++ /dev/null @@ -1,23 +0,0 @@ -@extends('layouts.app') - -@section('content') -
-
-
-
-
Dashboard
- -
- @if (session('status')) - - @endif - - You are logged in! -
-
-
-
-
-@endsection diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/layouts/app.stub b/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/layouts/app.stub index ee7767c4..9224ba38 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/layouts/app.stub +++ b/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/layouts/app.stub @@ -14,14 +14,14 @@ - +
- @endif diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-bootstrap-4.blade.php b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-bootstrap-4.blade.php index cc30c9b2..4bb49174 100644 --- a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-bootstrap-4.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-bootstrap-4.blade.php @@ -1,25 +1,27 @@ @if ($paginator->hasPages()) - + @endif diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-default.blade.php b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-default.blade.php index bdf2fe88..36bdbc18 100644 --- a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-default.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-default.blade.php @@ -1,17 +1,19 @@ @if ($paginator->hasPages()) - + @endif diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-tailwind.blade.php b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-tailwind.blade.php new file mode 100644 index 00000000..1c5e52f3 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-tailwind.blade.php @@ -0,0 +1,25 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/tailwind.blade.php b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/tailwind.blade.php new file mode 100644 index 00000000..4b92aaba --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/tailwind.blade.php @@ -0,0 +1,102 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php b/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php index 626f87be..d9192bb8 100644 --- a/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php +++ b/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php @@ -3,11 +3,10 @@ namespace Illuminate\Pipeline; use Closure; -use RuntimeException; -use Illuminate\Http\Request; use Illuminate\Contracts\Container\Container; -use Illuminate\Contracts\Support\Responsable; use Illuminate\Contracts\Pipeline\Pipeline as PipelineContract; +use RuntimeException; +use Throwable; class Pipeline implements PipelineContract { @@ -98,7 +97,7 @@ class Pipeline implements PipelineContract public function then(Closure $destination) { $pipeline = array_reduce( - array_reverse($this->pipes), $this->carry(), $this->prepareDestination($destination) + array_reverse($this->pipes()), $this->carry(), $this->prepareDestination($destination) ); return $pipeline($this->passable); @@ -125,7 +124,11 @@ class Pipeline implements PipelineContract protected function prepareDestination(Closure $destination) { return function ($passable) use ($destination) { - return $destination($passable); + try { + return $destination($passable); + } catch (Throwable $e) { + return $this->handleException($passable, $e); + } }; } @@ -138,34 +141,36 @@ class Pipeline implements PipelineContract { return function ($stack, $pipe) { return function ($passable) use ($stack, $pipe) { - if (is_callable($pipe)) { - // If the pipe is an instance of a Closure, we will just call it directly but - // otherwise we'll resolve the pipes out of the container and call it with - // the appropriate method and arguments, returning the results back out. - return $pipe($passable, $stack); - } elseif (! is_object($pipe)) { - [$name, $parameters] = $this->parsePipeString($pipe); + try { + if (is_callable($pipe)) { + // If the pipe is a callable, then we will call it directly, but otherwise we + // will resolve the pipes out of the dependency container and call it with + // the appropriate method and arguments, returning the results back out. + return $pipe($passable, $stack); + } elseif (! is_object($pipe)) { + [$name, $parameters] = $this->parsePipeString($pipe); - // If the pipe is a string we will parse the string and resolve the class out - // of the dependency injection container. We can then build a callable and - // execute the pipe function giving in the parameters that are required. - $pipe = $this->getContainer()->make($name); + // If the pipe is a string we will parse the string and resolve the class out + // of the dependency injection container. We can then build a callable and + // execute the pipe function giving in the parameters that are required. + $pipe = $this->getContainer()->make($name); - $parameters = array_merge([$passable, $stack], $parameters); - } else { - // If the pipe is already an object we'll just make a callable and pass it to - // the pipe as-is. There is no need to do any extra parsing and formatting - // since the object we're given was already a fully instantiated object. - $parameters = [$passable, $stack]; + $parameters = array_merge([$passable, $stack], $parameters); + } else { + // If the pipe is already an object we'll just make a callable and pass it to + // the pipe as-is. There is no need to do any extra parsing and formatting + // since the object we're given was already a fully instantiated object. + $parameters = [$passable, $stack]; + } + + $carry = method_exists($pipe, $this->method) + ? $pipe->{$this->method}(...$parameters) + : $pipe(...$parameters); + + return $this->handleCarry($carry); + } catch (Throwable $e) { + return $this->handleException($passable, $e); } - - $response = method_exists($pipe, $this->method) - ? $pipe->{$this->method}(...$parameters) - : $pipe(...$parameters); - - return $response instanceof Responsable - ? $response->toResponse($this->getContainer()->make(Request::class)) - : $response; }; }; } @@ -173,7 +178,7 @@ class Pipeline implements PipelineContract /** * Parse full pipe string to get name and parameters. * - * @param string $pipe + * @param string $pipe * @return array */ protected function parsePipeString($pipe) @@ -187,6 +192,16 @@ class Pipeline implements PipelineContract return [$name, $parameters]; } + /** + * Get the array of configured pipes. + * + * @return array + */ + protected function pipes() + { + return $this->pipes; + } + /** * Get the container instance. * @@ -202,4 +217,29 @@ class Pipeline implements PipelineContract return $this->container; } + + /** + * Handle the value returned from each pipe before passing it to the next. + * + * @param mixed $carry + * @return mixed + */ + protected function handleCarry($carry) + { + return $carry; + } + + /** + * Handle the given exception. + * + * @param mixed $passable + * @param \Throwable $e + * @return mixed + * + * @throws \Throwable + */ + protected function handleException($passable, Throwable $e) + { + throw $e; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Pipeline/PipelineServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Pipeline/PipelineServiceProvider.php index d8291873..982608b6 100644 --- a/vendor/laravel/framework/src/Illuminate/Pipeline/PipelineServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Pipeline/PipelineServiceProvider.php @@ -2,18 +2,12 @@ namespace Illuminate\Pipeline; -use Illuminate\Support\ServiceProvider; use Illuminate\Contracts\Pipeline\Hub as PipelineHubContract; +use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Support\ServiceProvider; -class PipelineServiceProvider extends ServiceProvider +class PipelineServiceProvider extends ServiceProvider implements DeferrableProvider { - /** - * Indicates if loading of the provider is deferred. - * - * @var bool - */ - protected $defer = true; - /** * Register the service provider. * diff --git a/vendor/laravel/framework/src/Illuminate/Pipeline/composer.json b/vendor/laravel/framework/src/Illuminate/Pipeline/composer.json index f3225d4a..c1ee8589 100644 --- a/vendor/laravel/framework/src/Illuminate/Pipeline/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Pipeline/composer.json @@ -14,9 +14,9 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.7.*", - "illuminate/support": "5.7.*" + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -25,7 +25,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.7-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php index c013f5e1..49c36bda 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php @@ -2,11 +2,10 @@ namespace Illuminate\Queue; -use Pheanstalk\Pheanstalk; -use Pheanstalk\Job as PheanstalkJob; -use Illuminate\Queue\Jobs\BeanstalkdJob; -use Pheanstalk\Contract\PheanstalkInterface; use Illuminate\Contracts\Queue\Queue as QueueContract; +use Illuminate\Queue\Jobs\BeanstalkdJob; +use Pheanstalk\Job as PheanstalkJob; +use Pheanstalk\Pheanstalk; class BeanstalkdQueue extends Queue implements QueueContract { @@ -31,17 +30,26 @@ class BeanstalkdQueue extends Queue implements QueueContract */ protected $timeToRun; + /** + * The maximum number of seconds to block for a job. + * + * @var int + */ + protected $blockFor; + /** * Create a new Beanstalkd queue instance. * * @param \Pheanstalk\Pheanstalk $pheanstalk * @param string $default * @param int $timeToRun + * @param int $blockFor * @return void */ - public function __construct(Pheanstalk $pheanstalk, $default, $timeToRun) + public function __construct(Pheanstalk $pheanstalk, $default, $timeToRun, $blockFor = 0) { $this->default = $default; + $this->blockFor = $blockFor; $this->timeToRun = $timeToRun; $this->pheanstalk = $pheanstalk; } @@ -49,7 +57,7 @@ class BeanstalkdQueue extends Queue implements QueueContract /** * Get the size of the queue. * - * @param string $queue + * @param string|null $queue * @return int */ public function size($queue = null) @@ -63,8 +71,8 @@ class BeanstalkdQueue extends Queue implements QueueContract * Push a new job onto the queue. * * @param string $job - * @param mixed $data - * @param string $queue + * @param mixed $data + * @param string|null $queue * @return mixed */ public function push($job, $data = '', $queue = null) @@ -76,8 +84,8 @@ class BeanstalkdQueue extends Queue implements QueueContract * Push a raw payload onto the queue. * * @param string $payload - * @param string $queue - * @param array $options + * @param string|null $queue + * @param array $options * @return mixed */ public function pushRaw($payload, $queue = null, array $options = []) @@ -92,8 +100,8 @@ class BeanstalkdQueue extends Queue implements QueueContract * * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data - * @param string $queue + * @param mixed $data + * @param string|null $queue * @return mixed */ public function later($delay, $job, $data = '', $queue = null) @@ -111,18 +119,14 @@ class BeanstalkdQueue extends Queue implements QueueContract /** * Pop the next job off of the queue. * - * @param string $queue + * @param string|null $queue * @return \Illuminate\Contracts\Queue\Job|null */ public function pop($queue = null) { $queue = $this->getQueue($queue); - $this->pheanstalk->watchOnly($queue); - - $job = interface_exists(PheanstalkInterface::class) - ? $this->pheanstalk->reserveWithTimeout(0) - : $this->pheanstalk->reserve(0); + $job = $this->pheanstalk->watchOnly($queue)->reserveWithTimeout($this->blockFor); if ($job instanceof PheanstalkJob) { return new BeanstalkdJob( @@ -135,7 +139,7 @@ class BeanstalkdQueue extends Queue implements QueueContract * Delete a message from the Beanstalk queue. * * @param string $queue - * @param string $id + * @param string|int $id * @return void */ public function deleteMessage($queue, $id) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedClosure.php b/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedClosure.php index 616e7ed1..e653b255 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedClosure.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedClosure.php @@ -2,11 +2,12 @@ namespace Illuminate\Queue; -use ReflectionFunction; +use Closure; use Illuminate\Bus\Queueable; +use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; -use Illuminate\Contracts\Container\Container; +use ReflectionFunction; class CallQueuedClosure implements ShouldQueue { @@ -37,6 +38,17 @@ class CallQueuedClosure implements ShouldQueue $this->closure = $closure; } + /** + * Create a new job instance. + * + * @param \Closure $job + * @return self + */ + public static function create(Closure $job) + { + return new self(new SerializableClosure($job)); + } + /** * Execute the job. * diff --git a/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php b/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php index e8bc19ac..d08cb0fb 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php @@ -3,10 +3,12 @@ namespace Illuminate\Queue; use Exception; -use ReflectionClass; -use Illuminate\Contracts\Queue\Job; use Illuminate\Contracts\Bus\Dispatcher; +use Illuminate\Contracts\Container\Container; +use Illuminate\Contracts\Queue\Job; use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Pipeline\Pipeline; +use ReflectionClass; class CallQueuedHandler { @@ -17,14 +19,23 @@ class CallQueuedHandler */ protected $dispatcher; + /** + * The container instance. + * + * @var \Illuminate\Contracts\Container\Container + */ + protected $container; + /** * Create a new handler instance. * * @param \Illuminate\Contracts\Bus\Dispatcher $dispatcher + * @param \Illuminate\Contracts\Container\Container $container * @return void */ - public function __construct(Dispatcher $dispatcher) + public function __construct(Dispatcher $dispatcher, Container $container) { + $this->container = $container; $this->dispatcher = $dispatcher; } @@ -45,9 +56,7 @@ class CallQueuedHandler return $this->handleModelNotFound($job, $e); } - $this->dispatcher->dispatchNow( - $command, $this->resolveHandler($job, $command) - ); + $this->dispatchThroughMiddleware($job, $command); if (! $job->hasFailed() && ! $job->isReleased()) { $this->ensureNextJobInChainIsDispatched($command); @@ -58,6 +67,24 @@ class CallQueuedHandler } } + /** + * Dispatch the given job / command through its specified middleware. + * + * @param \Illuminate\Contracts\Queue\Job $job + * @param mixed $command + * @return mixed + */ + protected function dispatchThroughMiddleware(Job $job, $command) + { + return (new Pipeline($this->container))->send($command) + ->through(array_merge(method_exists($command, 'middleware') ? $command->middleware() : [], $command->middleware ?? [])) + ->then(function ($command) use ($job) { + return $this->dispatcher->dispatchNow( + $command, $this->resolveHandler($job, $command) + ); + }); + } + /** * Resolve the handler for the given command. * @@ -109,7 +136,7 @@ class CallQueuedHandler * Handle a model not found exception. * * @param \Illuminate\Contracts\Queue\Job $job - * @param \Exception $e + * @param \Throwable $e * @return void */ protected function handleModelNotFound(Job $job, $e) @@ -127,9 +154,7 @@ class CallQueuedHandler return $job->delete(); } - return FailingJob::handle( - $job->getConnectionName(), $job, $e - ); + return $job->fail($e); } /** @@ -138,7 +163,7 @@ class CallQueuedHandler * The exception that caused the failure will be passed. * * @param array $data - * @param \Exception $e + * @param \Throwable $e * @return void */ public function failed(array $data, $e) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php b/vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php index 310621a2..046555af 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Capsule; -use Illuminate\Queue\QueueManager; use Illuminate\Container\Container; +use Illuminate\Queue\QueueManager; use Illuminate\Queue\QueueServiceProvider; use Illuminate\Support\Traits\CapsuleManagerTrait; @@ -25,7 +25,7 @@ class Manager /** * Create a new queue capsule manager. * - * @param \Illuminate\Container\Container $container + * @param \Illuminate\Container\Container|null $container * @return void */ public function __construct(Container $container = null) @@ -77,7 +77,7 @@ class Manager /** * Get a connection instance from the global manager. * - * @param string $connection + * @param string|null $connection * @return \Illuminate\Contracts\Queue\Queue */ public static function connection($connection = null) @@ -89,9 +89,9 @@ class Manager * Push a new job onto the queue. * * @param string $job - * @param mixed $data - * @param string $queue - * @param string $connection + * @param mixed $data + * @param string|null $queue + * @param string|null $connection * @return mixed */ public static function push($job, $data = '', $queue = null, $connection = null) @@ -102,10 +102,10 @@ class Manager /** * Push a new an array of jobs onto the queue. * - * @param array $jobs - * @param mixed $data - * @param string $queue - * @param string $connection + * @param array $jobs + * @param mixed $data + * @param string|null $queue + * @param string|null $connection * @return mixed */ public static function bulk($jobs, $data = '', $queue = null, $connection = null) @@ -118,9 +118,9 @@ class Manager * * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data - * @param string $queue - * @param string $connection + * @param mixed $data + * @param string|null $queue + * @param string|null $connection * @return mixed */ public static function later($delay, $job, $data = '', $queue = null, $connection = null) @@ -131,7 +131,7 @@ class Manager /** * Get a registered connection instance. * - * @param string $name + * @param string|null $name * @return \Illuminate\Contracts\Queue\Queue */ public function getConnection($name = null) @@ -142,7 +142,7 @@ class Manager /** * Register a connection with the manager. * - * @param array $config + * @param array $config * @param string $name * @return void */ @@ -177,7 +177,7 @@ class Manager * Dynamically pass methods to the default connection. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public static function __callStatic($method, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php index 46fc746a..b54d8019 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php @@ -2,10 +2,9 @@ namespace Illuminate\Queue\Connectors; +use Illuminate\Queue\BeanstalkdQueue; use Pheanstalk\Connection; use Pheanstalk\Pheanstalk; -use Illuminate\Queue\BeanstalkdQueue; -use Pheanstalk\Contract\PheanstalkInterface; class BeanstalkdConnector implements ConnectorInterface { @@ -17,9 +16,12 @@ class BeanstalkdConnector implements ConnectorInterface */ public function connect(array $config) { - $retryAfter = $config['retry_after'] ?? Pheanstalk::DEFAULT_TTR; - - return new BeanstalkdQueue($this->pheanstalk($config), $config['queue'], $retryAfter); + return new BeanstalkdQueue( + $this->pheanstalk($config), + $config['queue'], + $config['retry_after'] ?? Pheanstalk::DEFAULT_TTR, + $config['block_for'] ?? 0 + ); } /** @@ -30,19 +32,10 @@ class BeanstalkdConnector implements ConnectorInterface */ protected function pheanstalk(array $config) { - if (interface_exists(PheanstalkInterface::class)) { - return Pheanstalk::create( - $config['host'], - $config['port'] ?? Pheanstalk::DEFAULT_PORT, - $config['timeout'] ?? Connection::DEFAULT_CONNECT_TIMEOUT - ); - } - - return new Pheanstalk( + return Pheanstalk::create( $config['host'], $config['port'] ?? Pheanstalk::DEFAULT_PORT, - $config['timeout'] ?? Connection::DEFAULT_CONNECT_TIMEOUT, - $config['persistent'] ?? false + $config['timeout'] ?? Connection::DEFAULT_CONNECT_TIMEOUT ); } } diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/DatabaseConnector.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/DatabaseConnector.php index 64ce47bf..893a898f 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/DatabaseConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/DatabaseConnector.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Connectors; -use Illuminate\Queue\DatabaseQueue; use Illuminate\Database\ConnectionResolverInterface; +use Illuminate\Queue\DatabaseQueue; class DatabaseConnector implements ConnectorInterface { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php index 697fbb6b..1efe5f65 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Connectors; -use Illuminate\Queue\RedisQueue; use Illuminate\Contracts\Redis\Factory as Redis; +use Illuminate\Queue\RedisQueue; class RedisConnector implements ConnectorInterface { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php index 9072b632..07d7f823 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php @@ -3,8 +3,8 @@ namespace Illuminate\Queue\Connectors; use Aws\Sqs\SqsClient; -use Illuminate\Support\Arr; use Illuminate\Queue\SqsQueue; +use Illuminate\Support\Arr; class SqsConnector implements ConnectorInterface { @@ -18,12 +18,12 @@ class SqsConnector implements ConnectorInterface { $config = $this->getDefaultConfiguration($config); - if ($config['key'] && $config['secret']) { + if (! empty($config['key']) && ! empty($config['secret'])) { $config['credentials'] = Arr::only($config, ['key', 'secret', 'token']); } return new SqsQueue( - new SqsClient($config), $config['queue'], $config['prefix'] ?? '' + new SqsClient($config), $config['queue'], $config['prefix'] ?? '', $config['suffix'] ?? '' ); } diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php index 21dee847..09d3986d 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php @@ -2,10 +2,10 @@ namespace Illuminate\Queue\Console; -use Illuminate\Support\Str; use Illuminate\Console\Command; -use Illuminate\Support\Composer; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Composer; +use Illuminate\Support\Str; class FailedTableCommand extends Command { @@ -39,7 +39,7 @@ class FailedTableCommand extends Command * Create a new failed queue jobs table command instance. * * @param \Illuminate\Filesystem\Filesystem $files - * @param \Illuminate\Support\Composer $composer + * @param \Illuminate\Support\Composer $composer * @return void */ public function __construct(Filesystem $files, Composer $composer) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php index 1c218ea0..54bc1e00 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Console; -use Illuminate\Support\Arr; use Illuminate\Console\Command; +use Illuminate\Support\Arr; class ListFailedCommand extends Command { @@ -92,17 +92,13 @@ class ListFailedCommand extends Command * Match the job name from the payload. * * @param array $payload - * @return string + * @return string|null */ protected function matchJobName($payload) { preg_match('/"([^"]+)"/', $payload['data']['command'], $matches); - if (isset($matches[1])) { - return $matches[1]; - } - - return $payload['job'] ?? null; + return $matches[1] ?? $payload['job'] ?? null; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php index fca4cd08..ff4ed1af 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Console; -use Illuminate\Queue\Listener; use Illuminate\Console\Command; +use Illuminate\Queue\Listener; use Illuminate\Queue\ListenerOptions; class ListenCommand extends Command @@ -21,7 +21,7 @@ class ListenCommand extends Command {--queue= : The queue to listen on} {--sleep=3 : Number of seconds to sleep when no job is available} {--timeout=60 : The number of seconds a child process can run} - {--tries=0 : Number of times to attempt a job before logging it failed}'; + {--tries=1 : Number of times to attempt a job before logging it failed}'; /** * The console command description. diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php index 1b340415..9c610d92 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php @@ -3,6 +3,7 @@ namespace Illuminate\Queue\Console; use Illuminate\Console\Command; +use Illuminate\Contracts\Cache\Repository as Cache; use Illuminate\Support\InteractsWithTime; class RestartCommand extends Command @@ -23,6 +24,26 @@ class RestartCommand extends Command */ protected $description = 'Restart queue worker daemons after their current job'; + /** + * The cache store implementation. + * + * @var \Illuminate\Contracts\Cache\Repository + */ + protected $cache; + + /** + * Create a new queue restart command. + * + * @param \Illuminate\Contracts\Cache\Repository $cache + * @return void + */ + public function __construct(Cache $cache) + { + parent::__construct(); + + $this->cache = $cache; + } + /** * Execute the console command. * @@ -30,7 +51,7 @@ class RestartCommand extends Command */ public function handle() { - $this->laravel['cache']->forever('illuminate:queue:restart', $this->currentTime()); + $this->cache->forever('illuminate:queue:restart', $this->currentTime()); $this->info('Broadcasting queue restart signal.'); } diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php index 96fb9e38..e9120a97 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Console; -use Illuminate\Support\Arr; use Illuminate\Console\Command; +use Illuminate\Support\Arr; class RetryCommand extends Command { @@ -12,7 +12,9 @@ class RetryCommand extends Command * * @var string */ - protected $signature = 'queue:retry {id* : The ID of the failed job or "all" to retry all jobs}'; + protected $signature = 'queue:retry + {id?* : The ID of the failed job or "all" to retry all jobs} + {--range=* : Range of job IDs (numeric) to be retried}'; /** * The console command description. @@ -53,7 +55,30 @@ class RetryCommand extends Command $ids = (array) $this->argument('id'); if (count($ids) === 1 && $ids[0] === 'all') { - $ids = Arr::pluck($this->laravel['queue.failer']->all(), 'id'); + return Arr::pluck($this->laravel['queue.failer']->all(), 'id'); + } + + if ($ranges = (array) $this->option('range')) { + $ids = array_merge($ids, $this->getJobIdsByRanges($ranges)); + } + + return array_values(array_filter(array_unique($ids))); + } + + /** + * Get the job IDs ranges, if applicable. + * + * @param array $ranges + * @return array + */ + protected function getJobIdsByRanges(array $ranges) + { + $ids = []; + + foreach ($ranges as $range) { + if (preg_match('/^[0-9]+\-[0-9]+$/', $range)) { + $ids = array_merge($ids, range(...explode('-', $range))); + } } return $ids; diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/TableCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/TableCommand.php index 50f1f011..cc949d48 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/TableCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/TableCommand.php @@ -2,10 +2,10 @@ namespace Illuminate\Queue\Console; -use Illuminate\Support\Str; use Illuminate\Console\Command; -use Illuminate\Support\Composer; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Composer; +use Illuminate\Support\Str; class TableCommand extends Command { @@ -39,7 +39,7 @@ class TableCommand extends Command * Create a new queue job table command instance. * * @param \Illuminate\Filesystem\Filesystem $files - * @param \Illuminate\Support\Composer $composer + * @param \Illuminate\Support\Composer $composer * @return void */ public function __construct(Filesystem $files, Composer $composer) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php index 67616151..0b9e7503 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php @@ -2,14 +2,15 @@ namespace Illuminate\Queue\Console; -use Illuminate\Queue\Worker; -use Illuminate\Support\Carbon; use Illuminate\Console\Command; +use Illuminate\Contracts\Cache\Repository as Cache; use Illuminate\Contracts\Queue\Job; -use Illuminate\Queue\WorkerOptions; use Illuminate\Queue\Events\JobFailed; use Illuminate\Queue\Events\JobProcessed; use Illuminate\Queue\Events\JobProcessing; +use Illuminate\Queue\Worker; +use Illuminate\Queue\WorkerOptions; +use Illuminate\Support\Carbon; class WorkCommand extends Command { @@ -29,7 +30,7 @@ class WorkCommand extends Command {--memory=128 : The memory limit in megabytes} {--sleep=3 : Number of seconds to sleep when no job is available} {--timeout=60 : The number of seconds a child process can run} - {--tries=0 : Number of times to attempt a job before logging it failed}'; + {--tries=1 : Number of times to attempt a job before logging it failed}'; /** * The console command description. @@ -45,16 +46,25 @@ class WorkCommand extends Command */ protected $worker; + /** + * The cache store implementation. + * + * @var \Illuminate\Contracts\Cache\Repository + */ + protected $cache; + /** * Create a new queue work command. * * @param \Illuminate\Queue\Worker $worker + * @param \Illuminate\Contracts\Cache\Repository $cache * @return void */ - public function __construct(Worker $worker) + public function __construct(Worker $worker, Cache $cache) { parent::__construct(); + $this->cache = $cache; $this->worker = $worker; } @@ -96,7 +106,7 @@ class WorkCommand extends Command */ protected function runWorker($connection, $queue) { - $this->worker->setCache($this->laravel['cache']->driver()); + $this->worker->setCache($this->cache); return $this->worker->{$this->option('once') ? 'runNextJob' : 'daemon'}( $connection, $queue, $this->gatherWorkerOptions() @@ -144,7 +154,7 @@ class WorkCommand extends Command * Write the status output for the queue worker. * * @param \Illuminate\Contracts\Queue\Job $job - * @param string $status + * @param string $status * @return void */ protected function writeOutput(Job $job, $status) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/stubs/failed_jobs.stub b/vendor/laravel/framework/src/Illuminate/Queue/Console/stubs/failed_jobs.stub index 037b5ee2..a7e612f8 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/stubs/failed_jobs.stub +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/stubs/failed_jobs.stub @@ -1,8 +1,8 @@ getNextAvailableJob($queue)) { return $this->marshalJob($queue, $job); } - - return null; }); } @@ -213,7 +212,7 @@ class DatabaseQueue extends Queue implements QueueContract protected function getNextAvailableJob($queue) { $job = $this->database->table($this->table) - ->lockForUpdate() + ->lock($this->getLockForPopping()) ->where('queue', $this->getQueue($queue)) ->where(function ($query) { $this->isAvailable($query); @@ -225,6 +224,24 @@ class DatabaseQueue extends Queue implements QueueContract return $job ? new DatabaseJobRecord((object) $job) : null; } + /** + * Get the lock required for popping the next job. + * + * @return string|bool + */ + protected function getLockForPopping() + { + $databaseEngine = $this->database->getPdo()->getAttribute(PDO::ATTR_DRIVER_NAME); + $databaseVersion = $this->database->getPdo()->getAttribute(PDO::ATTR_SERVER_VERSION); + + if ($databaseEngine == 'mysql' && ! strpos($databaseVersion, 'MariaDB') && version_compare($databaseVersion, '8.0.1', '>=') || + $databaseEngine == 'pgsql' && version_compare($databaseVersion, '9.5', '>=')) { + return 'FOR UPDATE SKIP LOCKED'; + } + + return true; + } + /** * Modify the query to check for available jobs. * @@ -293,7 +310,7 @@ class DatabaseQueue extends Queue implements QueueContract * @param string $id * @return void * - * @throws \Exception|\Throwable + * @throws \Throwable */ public function deleteReserved($queue, $id) { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Events/JobExceptionOccurred.php b/vendor/laravel/framework/src/Illuminate/Queue/Events/JobExceptionOccurred.php index dc7940e1..4bdf3922 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Events/JobExceptionOccurred.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Events/JobExceptionOccurred.php @@ -21,7 +21,7 @@ class JobExceptionOccurred /** * The exception instance. * - * @var \Exception + * @var \Throwable */ public $exception; @@ -30,7 +30,7 @@ class JobExceptionOccurred * * @param string $connectionName * @param \Illuminate\Contracts\Queue\Job $job - * @param \Exception $exception + * @param \Throwable $exception * @return void */ public function __construct($connectionName, $job, $exception) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Events/JobFailed.php b/vendor/laravel/framework/src/Illuminate/Queue/Events/JobFailed.php index 49b84f7b..d973a503 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Events/JobFailed.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Events/JobFailed.php @@ -21,7 +21,7 @@ class JobFailed /** * The exception that caused the job to fail. * - * @var \Exception + * @var \Throwable */ public $exception; @@ -30,7 +30,7 @@ class JobFailed * * @param string $connectionName * @param \Illuminate\Contracts\Queue\Job $job - * @param \Exception $exception + * @param \Throwable $exception * @return void */ public function __construct($connectionName, $job, $exception) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php b/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php index 59de88e1..1a634f76 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Failed; -use Illuminate\Support\Carbon; use Illuminate\Database\ConnectionResolverInterface; +use Illuminate\Support\Facades\Date; class DatabaseFailedJobProvider implements FailedJobProviderInterface { @@ -49,12 +49,12 @@ class DatabaseFailedJobProvider implements FailedJobProviderInterface * @param string $connection * @param string $queue * @param string $payload - * @param \Exception $exception + * @param \Throwable $exception * @return int|null */ public function log($connection, $queue, $payload, $exception) { - $failed_at = Carbon::now(); + $failed_at = Date::now(); $exception = (string) $exception; diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php b/vendor/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php new file mode 100644 index 00000000..12790528 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php @@ -0,0 +1,175 @@ +table = $table; + $this->dynamo = $dynamo; + $this->applicationName = $applicationName; + } + + /** + * Log a failed job into storage. + * + * @param string $connection + * @param string $queue + * @param string $payload + * @param \Throwable $exception + * @return string|int|null + */ + public function log($connection, $queue, $payload, $exception) + { + $id = (string) Str::orderedUuid(); + + $failedAt = Date::now(); + + $this->dynamo->putItem([ + 'TableName' => $this->table, + 'Item' => [ + 'application' => ['S' => $this->applicationName], + 'uuid' => ['S' => $id], + 'connection' => ['S' => $connection], + 'queue' => ['S' => $queue], + 'payload' => ['S' => $payload], + 'exception' => ['S' => (string) $exception], + 'failed_at' => ['N' => (string) $failedAt->getTimestamp()], + 'expires_at' => ['N' => (string) $failedAt->addDays(3)->getTimestamp()], + ], + ]); + + return $id; + } + + /** + * Get a list of all of the failed jobs. + * + * @return array + */ + public function all() + { + $results = $this->dynamo->query([ + 'TableName' => $this->table, + 'Select' => 'ALL_ATTRIBUTES', + 'KeyConditionExpression' => 'application = :application', + 'ExpressionAttributeValues' => [ + ':application' => ['S' => $this->applicationName], + ], + 'ScanIndexForward' => false, + ]); + + return collect($results['Items'])->map(function ($result) { + return (object) [ + 'id' => $result['uuid']['S'], + 'connection' => $result['connection']['S'], + 'queue' => $result['queue']['S'], + 'payload' => $result['payload']['S'], + 'exception' => $result['exception']['S'], + 'failed_at' => Carbon::createFromTimestamp( + (int) $result['failed_at']['N'] + )->format(DateTimeInterface::ISO8601), + ]; + })->all(); + } + + /** + * Get a single failed job. + * + * @param mixed $id + * @return object|null + */ + public function find($id) + { + $result = $this->dynamo->getItem([ + 'TableName' => $this->table, + 'Key' => [ + 'application' => ['S' => $this->applicationName], + 'uuid' => ['S' => $id], + ], + ]); + + if (! isset($result['Item'])) { + return; + } + + return (object) [ + 'id' => $result['Item']['uuid']['S'], + 'connection' => $result['Item']['connection']['S'], + 'queue' => $result['Item']['queue']['S'], + 'payload' => $result['Item']['payload']['S'], + 'exception' => $result['Item']['exception']['S'], + 'failed_at' => Carbon::createFromTimestamp( + (int) $result['Item']['failed_at']['N'] + )->format(DateTimeInterface::ISO8601), + ]; + } + + /** + * Delete a single failed job from storage. + * + * @param mixed $id + * @return bool + */ + public function forget($id) + { + $this->dynamo->deleteItem([ + 'TableName' => $this->table, + 'Key' => [ + 'application' => ['S' => $this->applicationName], + 'uuid' => ['S' => $id], + ], + ]); + + return true; + } + + /** + * Flush all of the failed jobs from storage. + * + * @return void + * + * @throws \Exception + */ + public function flush() + { + throw new Exception("DynamoDb failed job storage may not be flushed. Please use DynamoDb's TTL features on your expires_at attribute."); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php b/vendor/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php index b818636e..1a11fc0b 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php @@ -10,8 +10,8 @@ interface FailedJobProviderInterface * @param string $connection * @param string $queue * @param string $payload - * @param \Exception $exception - * @return int|null + * @param \Throwable $exception + * @return string|int|null */ public function log($connection, $queue, $payload, $exception); diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Failed/NullFailedJobProvider.php b/vendor/laravel/framework/src/Illuminate/Queue/Failed/NullFailedJobProvider.php index 4760d587..06f3e078 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Failed/NullFailedJobProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Failed/NullFailedJobProvider.php @@ -10,7 +10,7 @@ class NullFailedJobProvider implements FailedJobProviderInterface * @param string $connection * @param string $queue * @param string $payload - * @param \Exception $exception + * @param \Throwable $exception * @return int|null */ public function log($connection, $queue, $payload, $exception) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/FailingJob.php b/vendor/laravel/framework/src/Illuminate/Queue/FailingJob.php deleted file mode 100644 index aba6f172..00000000 --- a/vendor/laravel/framework/src/Illuminate/Queue/FailingJob.php +++ /dev/null @@ -1,50 +0,0 @@ -markAsFailed(); - - if ($job->isDeleted()) { - return; - } - - try { - // If the job has failed, we will delete it, call the "failed" method and then call - // an event indicating the job has failed so it can be logged if needed. This is - // to allow every developer to better keep monitor of their failed queue jobs. - $job->delete(); - - $job->failed($e); - } finally { - static::events()->dispatch(new JobFailed( - $connectionName, $job, $e ?: new ManuallyFailedException - )); - } - } - - /** - * Get the event dispatcher instance. - * - * @return \Illuminate\Contracts\Events\Dispatcher - */ - protected static function events() - { - return Container::getInstance()->make(Dispatcher::class); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Queue/InteractsWithQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/InteractsWithQueue.php index 20bcecb7..159dfff9 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/InteractsWithQueue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/InteractsWithQueue.php @@ -11,7 +11,7 @@ trait InteractsWithQueue * * @var \Illuminate\Contracts\Queue\Job */ - protected $job; + public $job; /** * Get the number of times the job has been attempted. @@ -38,20 +38,20 @@ trait InteractsWithQueue /** * Fail the job from the queue. * - * @param \Throwable $exception + * @param \Throwable|null $exception * @return void */ public function fail($exception = null) { if ($this->job) { - FailingJob::handle($this->job->getConnectionName(), $this->job, $exception); + $this->job->fail($exception); } } /** * Release the job back into the queue. * - * @param int $delay + * @param int $delay * @return void */ public function release($delay = 0) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php index 6a766e04..cd9546d7 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php @@ -2,10 +2,10 @@ namespace Illuminate\Queue\Jobs; -use Pheanstalk\Pheanstalk; use Illuminate\Container\Container; -use Pheanstalk\Job as PheanstalkJob; use Illuminate\Contracts\Queue\Job as JobContract; +use Pheanstalk\Job as PheanstalkJob; +use Pheanstalk\Pheanstalk; class BeanstalkdJob extends Job implements JobContract { @@ -45,7 +45,7 @@ class BeanstalkdJob extends Job implements JobContract /** * Release the job back into the queue. * - * @param int $delay + * @param int $delay * @return void */ public function release($delay = 0) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/DatabaseJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/DatabaseJob.php index 9b57fb0a..18f3c069 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/DatabaseJob.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/DatabaseJob.php @@ -3,8 +3,8 @@ namespace Illuminate\Queue\Jobs; use Illuminate\Container\Container; -use Illuminate\Queue\DatabaseQueue; use Illuminate\Contracts\Queue\Job as JobContract; +use Illuminate\Queue\DatabaseQueue; class DatabaseJob extends Job implements JobContract { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php index 2f043c57..db60f671 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php @@ -2,6 +2,9 @@ namespace Illuminate\Queue\Jobs; +use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Queue\Events\JobFailed; +use Illuminate\Queue\ManuallyFailedException; use Illuminate\Support\InteractsWithTime; abstract class Job @@ -45,6 +48,8 @@ abstract class Job /** * The name of the connection the job belongs to. + * + * @var string */ protected $connectionName; @@ -69,6 +74,16 @@ abstract class Job */ abstract public function getRawBody(); + /** + * Get the UUID of the job. + * + * @return string|null + */ + public function uuid() + { + return $this->payload()['uuid'] ?? null; + } + /** * Fire the job. * @@ -106,7 +121,7 @@ abstract class Job /** * Release the job back into the queue. * - * @param int $delay + * @param int $delay * @return void */ public function release($delay = 0) @@ -155,15 +170,41 @@ abstract class Job } /** - * Process an exception that caused the job to fail. + * Delete the job, call the "failed" method, and raise the failed job event. * - * @param \Exception $e + * @param \Throwable|null $e * @return void */ - public function failed($e) + public function fail($e = null) { $this->markAsFailed(); + if ($this->isDeleted()) { + return; + } + + try { + // If the job has failed, we will delete it, call the "failed" method and then call + // an event indicating the job has failed so it can be logged if needed. This is + // to allow every developer to better keep monitor of their failed queue jobs. + $this->delete(); + + $this->failed($e); + } finally { + $this->resolve(Dispatcher::class)->dispatch(new JobFailed( + $this->connectionName, $this, $e ?: new ManuallyFailedException + )); + } + } + + /** + * Process an exception that caused the job to fail. + * + * @param \Throwable|null $e + * @return void + */ + protected function failed($e) + { $payload = $this->payload(); [$class, $method] = JobName::parse($payload['job']); @@ -184,6 +225,16 @@ abstract class Job return $this->container->make($class); } + /** + * Get the resolved job handler instance. + * + * @return mixed + */ + public function getResolvedJob() + { + return $this->instance; + } + /** * Get the decoded body of the job. * @@ -204,6 +255,26 @@ abstract class Job return $this->payload()['maxTries'] ?? null; } + /** + * Get the number of times to attempt a job after an exception. + * + * @return int|null + */ + public function maxExceptions() + { + return $this->payload()['maxExceptions'] ?? null; + } + + /** + * Get the number of seconds to delay a failed job before retrying it. + * + * @return int|null + */ + public function delaySeconds() + { + return $this->payload()['delay'] ?? null; + } + /** * Get the number of seconds the job can run. * diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php index 34e4fea0..0fbc327e 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php @@ -2,9 +2,9 @@ namespace Illuminate\Queue\Jobs; -use Illuminate\Queue\RedisQueue; use Illuminate\Container\Container; use Illuminate\Contracts\Queue\Job as JobContract; +use Illuminate\Queue\RedisQueue; class RedisJob extends Job implements JobContract { @@ -87,7 +87,7 @@ class RedisJob extends Job implements JobContract /** * Release the job back into the queue. * - * @param int $delay + * @param int $delay * @return void */ public function release($delay = 0) @@ -110,7 +110,7 @@ class RedisJob extends Job implements JobContract /** * Get the job identifier. * - * @return string + * @return string|null */ public function getJobId() { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php index 962d7584..52538508 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php @@ -27,7 +27,7 @@ class SqsJob extends Job implements JobContract * * @param \Illuminate\Container\Container $container * @param \Aws\Sqs\SqsClient $sqs - * @param array $job + * @param array $job * @param string $connectionName * @param string $queue * @return void @@ -44,7 +44,7 @@ class SqsJob extends Job implements JobContract /** * Release the job back into the queue. * - * @param int $delay + * @param int $delay * @return void */ public function release($delay = 0) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SyncJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SyncJob.php index 9aafb8a9..de6e5c6b 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SyncJob.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SyncJob.php @@ -41,7 +41,7 @@ class SyncJob extends Job implements JobContract /** * Release the job back into the queue. * - * @param int $delay + * @param int $delay * @return void */ public function release($delay = 0) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Listener.php b/vendor/laravel/framework/src/Illuminate/Queue/Listener.php index f0dbcb6f..885d683b 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Listener.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Listener.php @@ -3,8 +3,8 @@ namespace Illuminate\Queue; use Closure; -use Symfony\Component\Process\Process; use Symfony\Component\Process\PhpExecutableFinder; +use Symfony\Component\Process\Process; class Listener { @@ -126,7 +126,7 @@ class Listener /** * Add the environment option to the given command. * - * @param string $command + * @param array $command * @param \Illuminate\Queue\ListenerOptions $options * @return array */ @@ -214,7 +214,7 @@ class Listener */ public function stop() { - die; + exit; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Queue/ListenerOptions.php b/vendor/laravel/framework/src/Illuminate/Queue/ListenerOptions.php index a1b90143..22da0cd9 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/ListenerOptions.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/ListenerOptions.php @@ -14,7 +14,7 @@ class ListenerOptions extends WorkerOptions /** * Create a new listener options instance. * - * @param string $environment + * @param string|null $environment * @param int $delay * @param int $memory * @param int $timeout @@ -23,7 +23,7 @@ class ListenerOptions extends WorkerOptions * @param bool $force * @return void */ - public function __construct($environment = null, $delay = 0, $memory = 128, $timeout = 60, $sleep = 3, $maxTries = 0, $force = false) + public function __construct($environment = null, $delay = 0, $memory = 128, $timeout = 60, $sleep = 3, $maxTries = 1, $force = false) { $this->environment = $environment; diff --git a/vendor/laravel/framework/src/Illuminate/Queue/LuaScripts.php b/vendor/laravel/framework/src/Illuminate/Queue/LuaScripts.php index 93ac0478..c031140c 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/LuaScripts.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/LuaScripts.php @@ -20,11 +20,31 @@ return redis.call('llen', KEYS[1]) + redis.call('zcard', KEYS[2]) + redis.call(' LUA; } + /** + * Get the Lua script for pushing jobs onto the queue. + * + * KEYS[1] - The queue to push the job onto, for example: queues:foo + * KEYS[2] - The notification list fot the queue we are pushing jobs onto, for example: queues:foo:notify + * ARGV[1] - The job payload + * + * @return string + */ + public static function push() + { + return <<<'LUA' +-- Push the job onto the queue... +redis.call('rpush', KEYS[1], ARGV[1]) +-- Push a notification onto the "notify" queue... +redis.call('rpush', KEYS[2], 1) +LUA; + } + /** * Get the Lua script for popping the next job off of the queue. * * KEYS[1] - The queue to pop jobs from, for example: queues:foo * KEYS[2] - The queue to place reserved jobs on, for example: queues:foo:reserved + * KEYS[3] - The notify queue * ARGV[1] - The time at which the reserved job will expire * * @return string @@ -42,6 +62,7 @@ if(job ~= false) then reserved['attempts'] = reserved['attempts'] + 1 reserved = cjson.encode(reserved) redis.call('zadd', KEYS[2], ARGV[1], reserved) + redis.call('lpop', KEYS[3]) end return {job, reserved} @@ -76,6 +97,7 @@ LUA; * * KEYS[1] - The queue we are removing jobs from, for example: queues:foo:reserved * KEYS[2] - The queue we are moving jobs to, for example: queues:foo + * KEYS[3] - The notification list for the queue we are moving jobs to, for example queues:foo:notify * ARGV[1] - The current UNIX timestamp * * @return string @@ -94,6 +116,10 @@ if(next(val) ~= nil) then for i = 1, #val, 100 do redis.call('rpush', KEYS[2], unpack(val, i, math.min(i+99, #val))) + -- Push a notification for every job that was migrated... + for j = i, math.min(i+99, #val) do + redis.call('rpush', KEYS[3], 1) + end end end diff --git a/vendor/laravel/framework/src/Illuminate/Queue/NullQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/NullQueue.php index 3ff13c5e..f8ff0938 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/NullQueue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/NullQueue.php @@ -9,7 +9,7 @@ class NullQueue extends Queue implements QueueContract /** * Get the size of the queue. * - * @param string $queue + * @param string|null $queue * @return int */ public function size($queue = null) @@ -21,8 +21,8 @@ class NullQueue extends Queue implements QueueContract * Push a new job onto the queue. * * @param string $job - * @param mixed $data - * @param string $queue + * @param mixed $data + * @param string|null $queue * @return mixed */ public function push($job, $data = '', $queue = null) @@ -34,8 +34,8 @@ class NullQueue extends Queue implements QueueContract * Push a raw payload onto the queue. * * @param string $payload - * @param string $queue - * @param array $options + * @param string|null $queue + * @param array $options * @return mixed */ public function pushRaw($payload, $queue = null, array $options = []) @@ -48,8 +48,8 @@ class NullQueue extends Queue implements QueueContract * * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data - * @param string $queue + * @param mixed $data + * @param string|null $queue * @return mixed */ public function later($delay, $job, $data = '', $queue = null) @@ -60,7 +60,7 @@ class NullQueue extends Queue implements QueueContract /** * Pop the next job off of the queue. * - * @param string $queue + * @param string|null $queue * @return \Illuminate\Contracts\Queue\Job|null */ public function pop($queue = null) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Queue.php b/vendor/laravel/framework/src/Illuminate/Queue/Queue.php index 91911935..c58d175b 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Queue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Queue.php @@ -2,9 +2,11 @@ namespace Illuminate\Queue; +use Closure; use DateTimeInterface; use Illuminate\Container\Container; use Illuminate\Support\InteractsWithTime; +use Illuminate\Support\Str; abstract class Queue { @@ -36,7 +38,7 @@ abstract class Queue * * @param string $queue * @param string $job - * @param mixed $data + * @param mixed $data * @return mixed */ public function pushOn($queue, $job, $data = '') @@ -50,7 +52,7 @@ abstract class Queue * @param string $queue * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data + * @param mixed $data * @return mixed */ public function laterOn($queue, $delay, $job, $data = '') @@ -61,9 +63,9 @@ abstract class Queue /** * Push an array of jobs onto the queue. * - * @param array $jobs - * @param mixed $data - * @param string $queue + * @param array $jobs + * @param mixed $data + * @param string|null $queue * @return void */ public function bulk($jobs, $data = '', $queue = null) @@ -76,15 +78,19 @@ abstract class Queue /** * Create a payload string from the given job and data. * - * @param string $job + * @param \Closure|string|object $job * @param string $queue - * @param mixed $data + * @param mixed $data * @return string * * @throws \Illuminate\Queue\InvalidPayloadException */ protected function createPayload($job, $queue, $data = '') { + if ($job instanceof Closure) { + $job = CallQueuedClosure::create($job); + } + $payload = json_encode($this->createPayloadArray($job, $queue, $data)); if (JSON_ERROR_NONE !== json_last_error()) { @@ -99,7 +105,7 @@ abstract class Queue /** * Create a payload array from the given job and data. * - * @param mixed $job + * @param string|object $job * @param string $queue * @param mixed $data * @return array @@ -114,16 +120,19 @@ abstract class Queue /** * Create a payload for an object-based queue handler. * - * @param mixed $job + * @param object $job * @param string $queue * @return array */ protected function createObjectPayload($job, $queue) { $payload = $this->withCreatePayloadHooks($queue, [ + 'uuid' => (string) Str::uuid(), 'displayName' => $this->getDisplayName($job), 'job' => 'Illuminate\Queue\CallQueuedHandler@call', 'maxTries' => $job->tries ?? null, + 'maxExceptions' => $job->maxExceptions ?? null, + 'delay' => $this->getJobRetryDelay($job), 'timeout' => $job->timeout ?? null, 'timeoutAt' => $this->getJobExpiration($job), 'data' => [ @@ -143,7 +152,7 @@ abstract class Queue /** * Get the display name for the given job. * - * @param mixed $job + * @param object $job * @return string */ protected function getDisplayName($job) @@ -152,6 +161,24 @@ abstract class Queue ? $job->displayName() : get_class($job); } + /** + * Get the retry delay for an object-based queue handler. + * + * @param mixed $job + * @return mixed + */ + public function getJobRetryDelay($job) + { + if (! method_exists($job, 'retryAfter') && ! isset($job->retryAfter)) { + return; + } + + $delay = $job->retryAfter ?? $job->retryAfter(); + + return $delay instanceof DateTimeInterface + ? $this->secondsUntil($delay) : $delay; + } + /** * Get the expiration timestamp for an object-based queue handler. * @@ -181,9 +208,12 @@ abstract class Queue protected function createStringPayload($job, $queue, $data) { return $this->withCreatePayloadHooks($queue, [ + 'uuid' => (string) Str::uuid(), 'displayName' => is_string($job) ? explode('@', $job)[0] : null, 'job' => $job, 'maxTries' => null, + 'maxExceptions' => null, + 'delay' => null, 'timeout' => null, 'data' => $data, ]); diff --git a/vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php b/vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php index f9bb7f6a..d19a16a7 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php @@ -3,9 +3,9 @@ namespace Illuminate\Queue; use Closure; -use InvalidArgumentException; use Illuminate\Contracts\Queue\Factory as FactoryContract; use Illuminate\Contracts\Queue\Monitor as MonitorContract; +use InvalidArgumentException; /** * @mixin \Illuminate\Contracts\Queue\Queue @@ -15,7 +15,7 @@ class QueueManager implements FactoryContract, MonitorContract /** * The application instance. * - * @var \Illuminate\Foundation\Application + * @var \Illuminate\Contracts\Foundation\Application */ protected $app; @@ -36,7 +36,7 @@ class QueueManager implements FactoryContract, MonitorContract /** * Create a new queue manager instance. * - * @param \Illuminate\Foundation\Application $app + * @param \Illuminate\Contracts\Foundation\Application $app * @return void */ public function __construct($app) @@ -113,7 +113,7 @@ class QueueManager implements FactoryContract, MonitorContract /** * Determine if the driver is connected. * - * @param string $name + * @param string|null $name * @return bool */ public function connected($name = null) @@ -124,7 +124,7 @@ class QueueManager implements FactoryContract, MonitorContract /** * Resolve a queue connection instance. * - * @param string $name + * @param string|null $name * @return \Illuminate\Contracts\Queue\Queue */ public function connection($name = null) @@ -169,7 +169,7 @@ class QueueManager implements FactoryContract, MonitorContract protected function getConnector($driver) { if (! isset($this->connectors[$driver])) { - throw new InvalidArgumentException("No connector for [$driver]"); + throw new InvalidArgumentException("No connector for [$driver]."); } return call_user_func($this->connectors[$driver]); @@ -178,7 +178,7 @@ class QueueManager implements FactoryContract, MonitorContract /** * Add a queue connection resolver. * - * @param string $driver + * @param string $driver * @param \Closure $resolver * @return void */ @@ -190,7 +190,7 @@ class QueueManager implements FactoryContract, MonitorContract /** * Add a queue connection resolver. * - * @param string $driver + * @param string $driver * @param \Closure $resolver * @return void */ @@ -238,7 +238,7 @@ class QueueManager implements FactoryContract, MonitorContract /** * Get the full name for the given connection. * - * @param string $connection + * @param string|null $connection * @return string */ public function getName($connection = null) @@ -246,21 +246,11 @@ class QueueManager implements FactoryContract, MonitorContract return $connection ?: $this->getDefaultDriver(); } - /** - * Determine if the application is in maintenance mode. - * - * @return bool - */ - public function isDownForMaintenance() - { - return $this->app->isDownForMaintenance(); - } - /** * Dynamically pass calls to the default connection. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public function __call($method, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/QueueServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Queue/QueueServiceProvider.php index 8b54e094..6bb38ef7 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/QueueServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/QueueServiceProvider.php @@ -2,28 +2,25 @@ namespace Illuminate\Queue; +use Aws\DynamoDb\DynamoDbClient; +use Illuminate\Contracts\Debug\ExceptionHandler; +use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Queue\Connectors\BeanstalkdConnector; +use Illuminate\Queue\Connectors\DatabaseConnector; +use Illuminate\Queue\Connectors\NullConnector; +use Illuminate\Queue\Connectors\RedisConnector; +use Illuminate\Queue\Connectors\SqsConnector; +use Illuminate\Queue\Connectors\SyncConnector; +use Illuminate\Queue\Failed\DatabaseFailedJobProvider; +use Illuminate\Queue\Failed\DynamoDbFailedJobProvider; +use Illuminate\Queue\Failed\NullFailedJobProvider; +use Illuminate\Support\Arr; +use Illuminate\Support\ServiceProvider; use Illuminate\Support\Str; use Opis\Closure\SerializableClosure; -use Illuminate\Support\ServiceProvider; -use Illuminate\Queue\Connectors\SqsConnector; -use Illuminate\Queue\Connectors\NullConnector; -use Illuminate\Queue\Connectors\SyncConnector; -use Illuminate\Queue\Connectors\RedisConnector; -use Illuminate\Contracts\Debug\ExceptionHandler; -use Illuminate\Queue\Connectors\DatabaseConnector; -use Illuminate\Queue\Failed\NullFailedJobProvider; -use Illuminate\Queue\Connectors\BeanstalkdConnector; -use Illuminate\Queue\Failed\DatabaseFailedJobProvider; -class QueueServiceProvider extends ServiceProvider +class QueueServiceProvider extends ServiceProvider implements DeferrableProvider { - /** - * Indicates if loading of the provider is deferred. - * - * @var bool - */ - protected $defer = true; - /** * Register the service provider. * @@ -166,9 +163,16 @@ class QueueServiceProvider extends ServiceProvider */ protected function registerWorker() { - $this->app->singleton('queue.worker', function () { + $this->app->singleton('queue.worker', function ($app) { + $isDownForMaintenance = function () { + return $this->app->isDownForMaintenance(); + }; + return new Worker( - $this->app['queue'], $this->app['events'], $this->app[ExceptionHandler::class] + $app['queue'], + $app['events'], + $app[ExceptionHandler::class], + $isDownForMaintenance ); }); } @@ -180,8 +184,8 @@ class QueueServiceProvider extends ServiceProvider */ protected function registerListener() { - $this->app->singleton('queue.listener', function () { - return new Listener($this->app->basePath()); + $this->app->singleton('queue.listener', function ($app) { + return new Listener($app->basePath()); }); } @@ -192,12 +196,16 @@ class QueueServiceProvider extends ServiceProvider */ protected function registerFailedJobServices() { - $this->app->singleton('queue.failer', function () { - $config = $this->app['config']['queue.failed']; + $this->app->singleton('queue.failer', function ($app) { + $config = $app['config']['queue.failed']; - return isset($config['table']) - ? $this->databaseFailedJobProvider($config) - : new NullFailedJobProvider; + if (isset($config['driver']) && $config['driver'] === 'dynamodb') { + return $this->dynamoFailedJobProvider($config); + } elseif (isset($config['table'])) { + return $this->databaseFailedJobProvider($config); + } else { + return new NullFailedJobProvider; + } }); } @@ -214,6 +222,33 @@ class QueueServiceProvider extends ServiceProvider ); } + /** + * Create a new DynamoDb failed job provider. + * + * @param array $config + * @return \Illuminate\Queue\Failed\DynamoDbFailedJobProvider + */ + protected function dynamoFailedJobProvider($config) + { + $dynamoConfig = [ + 'region' => $config['region'], + 'version' => 'latest', + 'endpoint' => $config['endpoint'] ?? null, + ]; + + if (! empty($config['key']) && ! empty($config['secret'])) { + $dynamoConfig['credentials'] = Arr::only( + $config, ['key', 'secret', 'token'] + ); + } + + return new DynamoDbFailedJobProvider( + new DynamoDbClient($dynamoConfig), + $this->app['config']['app.name'], + $config['table'] + ); + } + /** * Configure Opis Closure signing for security. * diff --git a/vendor/laravel/framework/src/Illuminate/Queue/README.md b/vendor/laravel/framework/src/Illuminate/Queue/README.md index d0f2ba4a..1999dd7d 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/README.md +++ b/vendor/laravel/framework/src/Illuminate/Queue/README.md @@ -25,10 +25,10 @@ Once the Capsule instance has been registered. You may use it like so: ```PHP // As an instance... -$queue->push('SendEmail', array('message' => $message)); +$queue->push('SendEmail', ['message' => $message]); // If setAsGlobal has been called... -Queue::push('SendEmail', array('message' => $message)); +Queue::push('SendEmail', ['message' => $message]); ``` For further documentation on using the queue, consult the [Laravel framework documentation](https://laravel.com/docs). diff --git a/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php index 31eac516..c5b38c1b 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php @@ -2,10 +2,10 @@ namespace Illuminate\Queue; -use Illuminate\Support\Str; -use Illuminate\Queue\Jobs\RedisJob; -use Illuminate\Contracts\Redis\Factory as Redis; use Illuminate\Contracts\Queue\Queue as QueueContract; +use Illuminate\Contracts\Redis\Factory as Redis; +use Illuminate\Queue\Jobs\RedisJob; +use Illuminate\Support\Str; class RedisQueue extends Queue implements QueueContract { @@ -49,7 +49,7 @@ class RedisQueue extends Queue implements QueueContract * * @param \Illuminate\Contracts\Redis\Factory $redis * @param string $default - * @param string $connection + * @param string|null $connection * @param int $retryAfter * @param int|null $blockFor * @return void @@ -66,7 +66,7 @@ class RedisQueue extends Queue implements QueueContract /** * Get the size of the queue. * - * @param string $queue + * @param string|null $queue * @return int */ public function size($queue = null) @@ -82,8 +82,8 @@ class RedisQueue extends Queue implements QueueContract * Push a new job onto the queue. * * @param object|string $job - * @param mixed $data - * @param string $queue + * @param mixed $data + * @param string|null $queue * @return mixed */ public function push($job, $data = '', $queue = null) @@ -95,13 +95,16 @@ class RedisQueue extends Queue implements QueueContract * Push a raw payload onto the queue. * * @param string $payload - * @param string $queue - * @param array $options + * @param string|null $queue + * @param array $options * @return mixed */ public function pushRaw($payload, $queue = null, array $options = []) { - $this->getConnection()->rpush($this->getQueue($queue), $payload); + $this->getConnection()->eval( + LuaScripts::push(), 2, $this->getQueue($queue), + $this->getQueue($queue).':notify', $payload + ); return json_decode($payload, true)['id'] ?? null; } @@ -111,8 +114,8 @@ class RedisQueue extends Queue implements QueueContract * * @param \DateTimeInterface|\DateInterval|int $delay * @param object|string $job - * @param mixed $data - * @param string $queue + * @param mixed $data + * @param string|null $queue * @return mixed */ public function later($delay, $job, $data = '', $queue = null) @@ -125,7 +128,7 @@ class RedisQueue extends Queue implements QueueContract * * @param \DateTimeInterface|\DateInterval|int $delay * @param string $payload - * @param string $queue + * @param string|null $queue * @return mixed */ protected function laterRaw($delay, $payload, $queue = null) @@ -141,9 +144,9 @@ class RedisQueue extends Queue implements QueueContract * Create a payload string from the given job and data. * * @param string $job - * @param string $queue - * @param mixed $data - * @return string + * @param string $queue + * @param mixed $data + * @return array */ protected function createPayloadArray($job, $queue, $data = '') { @@ -156,7 +159,7 @@ class RedisQueue extends Queue implements QueueContract /** * Pop the next job off of the queue. * - * @param string $queue + * @param string|null $queue * @return \Illuminate\Contracts\Queue\Job|null */ public function pop($queue = null) @@ -202,7 +205,7 @@ class RedisQueue extends Queue implements QueueContract public function migrateExpiredJobs($from, $to) { return $this->getConnection()->eval( - LuaScripts::migrateExpiredJobs(), 2, $from, $to, $this->currentTime() + LuaScripts::migrateExpiredJobs(), 3, $from, $to, $to.':notify', $this->currentTime() ); } @@ -210,45 +213,28 @@ class RedisQueue extends Queue implements QueueContract * Retrieve the next job from the queue. * * @param string $queue + * @param bool $block * @return array */ - protected function retrieveNextJob($queue) + protected function retrieveNextJob($queue, $block = true) { - if (! is_null($this->blockFor)) { - return $this->blockingPop($queue); - } - - return $this->getConnection()->eval( - LuaScripts::pop(), 2, $queue, $queue.':reserved', + $nextJob = $this->getConnection()->eval( + LuaScripts::pop(), 3, $queue, $queue.':reserved', $queue.':notify', $this->availableAt($this->retryAfter) ); - } - /** - * Retrieve the next job by blocking-pop. - * - * @param string $queue - * @return array - */ - protected function blockingPop($queue) - { - $rawBody = $this->getConnection()->blpop($queue, $this->blockFor); - - if (! empty($rawBody)) { - $payload = json_decode($rawBody[1], true); - - $payload['attempts']++; - - $reserved = json_encode($payload); - - $this->getConnection()->zadd($queue.':reserved', [ - $reserved => $this->availableAt($this->retryAfter), - ]); - - return [$rawBody[1], $reserved]; + if (empty($nextJob)) { + return [null, null]; } - return [null, null]; + [$job, $reserved] = $nextJob; + + if (! $job && ! is_null($this->blockFor) && $block && + $this->getConnection()->blpop([$queue.':notify'], $this->blockFor)) { + return $this->retrieveNextJob($queue, false); + } + + return [$job, $reserved]; } /** @@ -307,7 +293,7 @@ class RedisQueue extends Queue implements QueueContract * * @return \Illuminate\Redis\Connections\Connection */ - protected function getConnection() + public function getConnection() { return $this->redis->connection($this->connection); } diff --git a/vendor/laravel/framework/src/Illuminate/Queue/SerializableClosure.php b/vendor/laravel/framework/src/Illuminate/Queue/SerializableClosure.php index f8a1cf4b..7fc934ea 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/SerializableClosure.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/SerializableClosure.php @@ -11,7 +11,7 @@ class SerializableClosure extends OpisSerializableClosure /** * Transform the use variables before serialization. * - * @param array $data The Closure's use variables + * @param array $data The Closure's use variables * @return array */ protected function transformUseVariables($data) @@ -26,7 +26,7 @@ class SerializableClosure extends OpisSerializableClosure /** * Resolve the use variables after unserialization. * - * @param array $data The Closure's transformed use variables + * @param array $data The Closure's transformed use variables * @return array */ protected function resolveUseVariables($data) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/SerializesAndRestoresModelIdentifiers.php b/vendor/laravel/framework/src/Illuminate/Queue/SerializesAndRestoresModelIdentifiers.php index 4b9476e4..bf10754f 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/SerializesAndRestoresModelIdentifiers.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/SerializesAndRestoresModelIdentifiers.php @@ -2,10 +2,12 @@ namespace Illuminate\Queue; -use Illuminate\Contracts\Queue\QueueableEntity; use Illuminate\Contracts\Database\ModelIdentifier; use Illuminate\Contracts\Queue\QueueableCollection; +use Illuminate\Contracts\Queue\QueueableEntity; use Illuminate\Database\Eloquent\Collection as EloquentCollection; +use Illuminate\Database\Eloquent\Relations\Concerns\AsPivot; +use Illuminate\Database\Eloquent\Relations\Pivot; trait SerializesAndRestoresModelIdentifiers { @@ -67,9 +69,24 @@ trait SerializesAndRestoresModelIdentifiers return new EloquentCollection; } - return $this->getQueryForModelRestoration( + $collection = $this->getQueryForModelRestoration( (new $value->class)->setConnection($value->connection), $value->id )->useWritePdo()->get(); + + if (is_a($value->class, Pivot::class, true) || + in_array(AsPivot::class, class_uses($value->class))) { + return $collection; + } + + $collection = $collection->keyBy->getKey(); + + $collectionClass = get_class($collection); + + return new $collectionClass( + collect($value->id)->map(function ($id) use ($collection) { + return $collection[$id] ?? null; + })->filter() + ); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Queue/SerializesModels.php b/vendor/laravel/framework/src/Illuminate/Queue/SerializesModels.php index e083d6f3..52c0f405 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/SerializesModels.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/SerializesModels.php @@ -47,6 +47,85 @@ trait SerializesModels } } + /** + * Prepare the instance values for serialization. + * + * @return array + */ + public function __serialize() + { + $values = []; + + $properties = (new ReflectionClass($this))->getProperties(); + + $class = get_class($this); + + foreach ($properties as $property) { + if ($property->isStatic()) { + continue; + } + + $property->setAccessible(true); + + if (! $property->isInitialized($this)) { + continue; + } + + $name = $property->getName(); + + if ($property->isPrivate()) { + $name = "\0{$class}\0{$name}"; + } elseif ($property->isProtected()) { + $name = "\0*\0{$name}"; + } + + $values[$name] = $this->getSerializedPropertyValue( + $this->getPropertyValue($property) + ); + } + + return $values; + } + + /** + * Restore the model after serialization. + * + * @param array $values + * @return array + */ + public function __unserialize(array $values) + { + $properties = (new ReflectionClass($this))->getProperties(); + + $class = get_class($this); + + foreach ($properties as $property) { + if ($property->isStatic()) { + continue; + } + + $name = $property->getName(); + + if ($property->isPrivate()) { + $name = "\0{$class}\0{$name}"; + } elseif ($property->isProtected()) { + $name = "\0*\0{$name}"; + } + + if (! array_key_exists($name, $values)) { + continue; + } + + $property->setAccessible(true); + + $property->setValue( + $this, $this->getRestoredPropertyValue($values[$name]) + ); + } + + return $values; + } + /** * Get the property value for the given property. * diff --git a/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php index 9a7c2dc6..80a08dec 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php @@ -3,8 +3,9 @@ namespace Illuminate\Queue; use Aws\Sqs\SqsClient; -use Illuminate\Queue\Jobs\SqsJob; use Illuminate\Contracts\Queue\Queue as QueueContract; +use Illuminate\Queue\Jobs\SqsJob; +use Illuminate\Support\Str; class SqsQueue extends Queue implements QueueContract { @@ -29,25 +30,34 @@ class SqsQueue extends Queue implements QueueContract */ protected $prefix; + /** + * The queue name suffix. + * + * @var string + */ + private $suffix; + /** * Create a new Amazon SQS queue instance. * * @param \Aws\Sqs\SqsClient $sqs * @param string $default * @param string $prefix + * @param string $suffix * @return void */ - public function __construct(SqsClient $sqs, $default, $prefix = '') + public function __construct(SqsClient $sqs, $default, $prefix = '', $suffix = '') { $this->sqs = $sqs; $this->prefix = $prefix; $this->default = $default; + $this->suffix = $suffix; } /** * Get the size of the queue. * - * @param string $queue + * @param string|null $queue * @return int */ public function size($queue = null) @@ -66,8 +76,8 @@ class SqsQueue extends Queue implements QueueContract * Push a new job onto the queue. * * @param string $job - * @param mixed $data - * @param string $queue + * @param mixed $data + * @param string|null $queue * @return mixed */ public function push($job, $data = '', $queue = null) @@ -79,8 +89,8 @@ class SqsQueue extends Queue implements QueueContract * Push a raw payload onto the queue. * * @param string $payload - * @param string $queue - * @param array $options + * @param string|null $queue + * @param array $options * @return mixed */ public function pushRaw($payload, $queue = null, array $options = []) @@ -95,8 +105,8 @@ class SqsQueue extends Queue implements QueueContract * * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data - * @param string $queue + * @param mixed $data + * @param string|null $queue * @return mixed */ public function later($delay, $job, $data = '', $queue = null) @@ -111,7 +121,7 @@ class SqsQueue extends Queue implements QueueContract /** * Pop the next job off of the queue. * - * @param string $queue + * @param string|null $queue * @return \Illuminate\Contracts\Queue\Job|null */ public function pop($queue = null) @@ -140,7 +150,8 @@ class SqsQueue extends Queue implements QueueContract $queue = $queue ?: $this->default; return filter_var($queue, FILTER_VALIDATE_URL) === false - ? rtrim($this->prefix, '/').'/'.$queue : $queue; + ? rtrim($this->prefix, '/').'/'.Str::finish($queue, $this->suffix) + : $queue; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php index 0652215d..fceb5ddb 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php @@ -2,19 +2,20 @@ namespace Illuminate\Queue; -use Exception; -use Throwable; -use Illuminate\Queue\Jobs\SyncJob; use Illuminate\Contracts\Queue\Job; use Illuminate\Contracts\Queue\Queue as QueueContract; -use Symfony\Component\Debug\Exception\FatalThrowableError; +use Illuminate\Queue\Events\JobExceptionOccurred; +use Illuminate\Queue\Events\JobProcessed; +use Illuminate\Queue\Events\JobProcessing; +use Illuminate\Queue\Jobs\SyncJob; +use Throwable; class SyncQueue extends Queue implements QueueContract { /** * Get the size of the queue. * - * @param string $queue + * @param string|null $queue * @return int */ public function size($queue = null) @@ -26,11 +27,11 @@ class SyncQueue extends Queue implements QueueContract * Push a new job onto the queue. * * @param string $job - * @param mixed $data - * @param string $queue + * @param mixed $data + * @param string|null $queue * @return mixed * - * @throws \Exception|\Throwable + * @throws \Throwable */ public function push($job, $data = '', $queue = null) { @@ -42,10 +43,8 @@ class SyncQueue extends Queue implements QueueContract $queueJob->fire(); $this->raiseAfterJobEvent($queueJob); - } catch (Exception $e) { - $this->handleException($queueJob, $e); } catch (Throwable $e) { - $this->handleException($queueJob, new FatalThrowableError($e)); + $this->handleException($queueJob, $e); } return 0; @@ -72,7 +71,7 @@ class SyncQueue extends Queue implements QueueContract protected function raiseBeforeJobEvent(Job $job) { if ($this->container->bound('events')) { - $this->container['events']->dispatch(new Events\JobProcessing($this->connectionName, $job)); + $this->container['events']->dispatch(new JobProcessing($this->connectionName, $job)); } } @@ -85,7 +84,7 @@ class SyncQueue extends Queue implements QueueContract protected function raiseAfterJobEvent(Job $job) { if ($this->container->bound('events')) { - $this->container['events']->dispatch(new Events\JobProcessed($this->connectionName, $job)); + $this->container['events']->dispatch(new JobProcessed($this->connectionName, $job)); } } @@ -93,13 +92,13 @@ class SyncQueue extends Queue implements QueueContract * Raise the exception occurred queue job event. * * @param \Illuminate\Contracts\Queue\Job $job - * @param \Exception $e + * @param \Throwable $e * @return void */ - protected function raiseExceptionOccurredJobEvent(Job $job, $e) + protected function raiseExceptionOccurredJobEvent(Job $job, Throwable $e) { if ($this->container->bound('events')) { - $this->container['events']->dispatch(new Events\JobExceptionOccurred($this->connectionName, $job, $e)); + $this->container['events']->dispatch(new JobExceptionOccurred($this->connectionName, $job, $e)); } } @@ -107,16 +106,16 @@ class SyncQueue extends Queue implements QueueContract * Handle an exception that occurred while processing a job. * * @param \Illuminate\Queue\Jobs\Job $queueJob - * @param \Exception $e + * @param \Throwable $e * @return void * - * @throws \Exception + * @throws \Throwable */ - protected function handleException($queueJob, $e) + protected function handleException(Job $queueJob, Throwable $e) { $this->raiseExceptionOccurredJobEvent($queueJob, $e); - FailingJob::handle($this->connectionName, $queueJob, $e); + $queueJob->fail($e); throw $e; } @@ -125,8 +124,8 @@ class SyncQueue extends Queue implements QueueContract * Push a raw payload onto the queue. * * @param string $payload - * @param string $queue - * @param array $options + * @param string|null $queue + * @param array $options * @return mixed */ public function pushRaw($payload, $queue = null, array $options = []) @@ -139,8 +138,8 @@ class SyncQueue extends Queue implements QueueContract * * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data - * @param string $queue + * @param mixed $data + * @param string|null $queue * @return mixed */ public function later($delay, $job, $data = '', $queue = null) @@ -151,7 +150,7 @@ class SyncQueue extends Queue implements QueueContract /** * Pop the next job off of the queue. * - * @param string $queue + * @param string|null $queue * @return \Illuminate\Contracts\Queue\Job|null */ public function pop($queue = null) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Worker.php b/vendor/laravel/framework/src/Illuminate/Queue/Worker.php index 492fae5a..a9e16130 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Worker.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Worker.php @@ -2,14 +2,18 @@ namespace Illuminate\Queue; -use Exception; -use Throwable; -use Illuminate\Support\Carbon; -use Illuminate\Contracts\Events\Dispatcher; -use Illuminate\Database\DetectsLostConnections; -use Illuminate\Contracts\Debug\ExceptionHandler; -use Symfony\Component\Debug\Exception\FatalThrowableError; use Illuminate\Contracts\Cache\Repository as CacheContract; +use Illuminate\Contracts\Debug\ExceptionHandler; +use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Contracts\Queue\Factory as QueueManager; +use Illuminate\Database\DetectsLostConnections; +use Illuminate\Queue\Events\JobExceptionOccurred; +use Illuminate\Queue\Events\JobProcessed; +use Illuminate\Queue\Events\JobProcessing; +use Illuminate\Queue\Events\Looping; +use Illuminate\Queue\Events\WorkerStopping; +use Illuminate\Support\Carbon; +use Throwable; class Worker { @@ -18,7 +22,7 @@ class Worker /** * The queue manager instance. * - * @var \Illuminate\Queue\QueueManager + * @var \Illuminate\Contracts\Queue\Factory */ protected $manager; @@ -43,6 +47,13 @@ class Worker */ protected $exceptions; + /** + * The callback used to determine if the application is in maintenance mode. + * + * @var callable + */ + protected $isDownForMaintenance; + /** * Indicates if the worker should exit. * @@ -60,18 +71,21 @@ class Worker /** * Create a new queue worker. * - * @param \Illuminate\Queue\QueueManager $manager + * @param \Illuminate\Contracts\Queue\Factory $manager * @param \Illuminate\Contracts\Events\Dispatcher $events * @param \Illuminate\Contracts\Debug\ExceptionHandler $exceptions + * @param callable $isDownForMaintenance * @return void */ public function __construct(QueueManager $manager, Dispatcher $events, - ExceptionHandler $exceptions) + ExceptionHandler $exceptions, + callable $isDownForMaintenance) { $this->events = $events; $this->manager = $manager; $this->exceptions = $exceptions; + $this->isDownForMaintenance = $isDownForMaintenance; } /** @@ -120,6 +134,10 @@ class Worker $this->sleep($options->sleep); } + if ($this->supportsAsyncSignals()) { + $this->resetTimeoutHandler(); + } + // Finally, we will check to see if we have exceeded our memory limits or if // the queue should restart based on other indications. If so, we'll stop // this worker and let whatever is "monitoring" it restart the process. @@ -139,7 +157,13 @@ class Worker // We will register a signal handler for the alarm signal so that we can kill this // process if it is running too long because it has frozen. This uses the async // signals supported in recent versions of PHP to accomplish it conveniently. - pcntl_signal(SIGALRM, function () { + pcntl_signal(SIGALRM, function () use ($job, $options) { + if ($job) { + $this->markJobAsFailedIfWillExceedMaxAttempts( + $job->getConnectionName(), $job, (int) $options->maxTries, $this->maxAttemptsExceededException($job) + ); + } + $this->kill(1); }); @@ -148,6 +172,16 @@ class Worker ); } + /** + * Reset the worker timeout handler. + * + * @return void + */ + protected function resetTimeoutHandler() + { + pcntl_alarm(0); + } + /** * Get the appropriate timeout for the given job. * @@ -170,9 +204,9 @@ class Worker */ protected function daemonShouldRun(WorkerOptions $options, $connectionName, $queue) { - return ! (($this->manager->isDownForMaintenance() && ! $options->force) || + return ! ((($this->isDownForMaintenance)() && ! $options->force) || $this->paused || - $this->events->until(new Events\Looping($connectionName, $queue)) === false); + $this->events->until(new Looping($connectionName, $queue)) === false); } /** @@ -195,6 +229,7 @@ class Worker * @param \Illuminate\Queue\WorkerOptions $options * @param int $lastRestart * @param mixed $job + * @return void */ protected function stopIfNecessary(WorkerOptions $options, $lastRestart, $job = null) { @@ -248,14 +283,8 @@ class Worker return $job; } } - } catch (Exception $e) { - $this->exceptions->report($e); - - $this->stopWorkerIfLostConnection($e); - - $this->sleep(1); } catch (Throwable $e) { - $this->exceptions->report($e = new FatalThrowableError($e)); + $this->exceptions->report($e); $this->stopWorkerIfLostConnection($e); @@ -275,12 +304,8 @@ class Worker { try { return $this->process($connectionName, $job, $options); - } catch (Exception $e) { - $this->exceptions->report($e); - - $this->stopWorkerIfLostConnection($e); } catch (Throwable $e) { - $this->exceptions->report($e = new FatalThrowableError($e)); + $this->exceptions->report($e); $this->stopWorkerIfLostConnection($e); } @@ -321,18 +346,18 @@ class Worker $connectionName, $job, (int) $options->maxTries ); + if ($job->isDeleted()) { + return $this->raiseAfterJobEvent($connectionName, $job); + } + // Here we will fire off the job and let it process. We will catch any exceptions so // they can be reported to the developers logs, etc. Once the job is finished the // proper events will be fired to let any listeners know this job has finished. $job->fire(); $this->raiseAfterJobEvent($connectionName, $job); - } catch (Exception $e) { - $this->handleJobException($connectionName, $job, $options, $e); } catch (Throwable $e) { - $this->handleJobException( - $connectionName, $job, $options, new FatalThrowableError($e) - ); + $this->handleJobException($connectionName, $job, $options, $e); } } @@ -342,12 +367,12 @@ class Worker * @param string $connectionName * @param \Illuminate\Contracts\Queue\Job $job * @param \Illuminate\Queue\WorkerOptions $options - * @param \Exception $e + * @param \Throwable $e * @return void * - * @throws \Exception + * @throws \Throwable */ - protected function handleJobException($connectionName, $job, WorkerOptions $options, $e) + protected function handleJobException($connectionName, $job, WorkerOptions $options, Throwable $e) { try { // First, we will go ahead and mark the job as failed if it will exceed the maximum @@ -357,6 +382,10 @@ class Worker $this->markJobAsFailedIfWillExceedMaxAttempts( $connectionName, $job, (int) $options->maxTries, $e ); + + $this->markJobAsFailedIfWillExceedMaxExceptions( + $connectionName, $job, $e + ); } $this->raiseExceptionOccurredJobEvent( @@ -367,7 +396,11 @@ class Worker // so it is not lost entirely. This'll let the job be retried at a later time by // another listener (or this same one). We will re-throw this exception after. if (! $job->isDeleted() && ! $job->isReleased() && ! $job->hasFailed()) { - $job->release($options->delay); + $job->release( + method_exists($job, 'delaySeconds') && ! is_null($job->delaySeconds()) + ? $job->delaySeconds() + : $options->delay + ); } } @@ -383,6 +416,8 @@ class Worker * @param \Illuminate\Contracts\Queue\Job $job * @param int $maxTries * @return void + * + * @throws \Throwable */ protected function markJobAsFailedIfAlreadyExceedsMaxAttempts($connectionName, $job, $maxTries) { @@ -398,9 +433,7 @@ class Worker return; } - $this->failJob($connectionName, $job, $e = new MaxAttemptsExceededException( - $job->resolveName().' has been attempted too many times or run too long. The job may have previously timed out.' - )); + $this->failJob($job, $e = $this->maxAttemptsExceededException($job)); throw $e; } @@ -411,33 +444,58 @@ class Worker * @param string $connectionName * @param \Illuminate\Contracts\Queue\Job $job * @param int $maxTries - * @param \Exception $e + * @param \Throwable $e * @return void */ - protected function markJobAsFailedIfWillExceedMaxAttempts($connectionName, $job, $maxTries, $e) + protected function markJobAsFailedIfWillExceedMaxAttempts($connectionName, $job, $maxTries, Throwable $e) { $maxTries = ! is_null($job->maxTries()) ? $job->maxTries() : $maxTries; if ($job->timeoutAt() && $job->timeoutAt() <= Carbon::now()->getTimestamp()) { - $this->failJob($connectionName, $job, $e); + $this->failJob($job, $e); } if ($maxTries > 0 && $job->attempts() >= $maxTries) { - $this->failJob($connectionName, $job, $e); + $this->failJob($job, $e); + } + } + + /** + * Mark the given job as failed if it has exceeded the maximum allowed attempts. + * + * @param string $connectionName + * @param \Illuminate\Contracts\Queue\Job $job + * @param \Throwable $e + * @return void + */ + protected function markJobAsFailedIfWillExceedMaxExceptions($connectionName, $job, Throwable $e) + { + if (! $this->cache || is_null($uuid = $job->uuid()) || + is_null($maxExceptions = $job->maxExceptions())) { + return; + } + + if (! $this->cache->get('job-exceptions:'.$uuid)) { + $this->cache->put('job-exceptions:'.$uuid, 0, Carbon::now()->addDay()); + } + + if ($maxExceptions <= $this->cache->increment('job-exceptions:'.$uuid)) { + $this->cache->forget('job-exceptions:'.$uuid); + + $this->failJob($job, $e); } } /** * Mark the given job as failed and raise the relevant event. * - * @param string $connectionName * @param \Illuminate\Contracts\Queue\Job $job - * @param \Exception $e + * @param \Throwable $e * @return void */ - protected function failJob($connectionName, $job, $e) + protected function failJob($job, Throwable $e) { - return FailingJob::handle($connectionName, $job, $e); + return $job->fail($e); } /** @@ -449,7 +507,7 @@ class Worker */ protected function raiseBeforeJobEvent($connectionName, $job) { - $this->events->dispatch(new Events\JobProcessing( + $this->events->dispatch(new JobProcessing( $connectionName, $job )); } @@ -463,7 +521,7 @@ class Worker */ protected function raiseAfterJobEvent($connectionName, $job) { - $this->events->dispatch(new Events\JobProcessed( + $this->events->dispatch(new JobProcessed( $connectionName, $job )); } @@ -473,12 +531,12 @@ class Worker * * @param string $connectionName * @param \Illuminate\Contracts\Queue\Job $job - * @param \Exception $e + * @param \Throwable $e * @return void */ - protected function raiseExceptionOccurredJobEvent($connectionName, $job, $e) + protected function raiseExceptionOccurredJobEvent($connectionName, $job, Throwable $e) { - $this->events->dispatch(new Events\JobExceptionOccurred( + $this->events->dispatch(new JobExceptionOccurred( $connectionName, $job, $e )); } @@ -541,7 +599,7 @@ class Worker /** * Determine if the memory limit has been exceeded. * - * @param int $memoryLimit + * @param int $memoryLimit * @return bool */ public function memoryExceeded($memoryLimit) @@ -557,7 +615,7 @@ class Worker */ public function stop($status = 0) { - $this->events->dispatch(new Events\WorkerStopping($status)); + $this->events->dispatch(new WorkerStopping($status)); exit($status); } @@ -570,7 +628,7 @@ class Worker */ public function kill($status = 0) { - $this->events->dispatch(new Events\WorkerStopping($status)); + $this->events->dispatch(new WorkerStopping($status)); if (extension_loaded('posix')) { posix_kill(getmypid(), SIGKILL); @@ -579,10 +637,23 @@ class Worker exit($status); } + /** + * Create an instance of MaxAttemptsExceededException. + * + * @param \Illuminate\Contracts\Queue\Job $job + * @return \Illuminate\Queue\MaxAttemptsExceededException + */ + protected function maxAttemptsExceededException($job) + { + return new MaxAttemptsExceededException( + $job->resolveName().' has been attempted too many times or run too long. The job may have previously timed out.' + ); + } + /** * Sleep the script for a given number of seconds. * - * @param int|float $seconds + * @param int|float $seconds * @return void */ public function sleep($seconds) @@ -618,7 +689,7 @@ class Worker /** * Set the queue manager instance. * - * @param \Illuminate\Queue\QueueManager $manager + * @param \Illuminate\Contracts\Queue\Factory $manager * @return void */ public function setManager(QueueManager $manager) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/WorkerOptions.php b/vendor/laravel/framework/src/Illuminate/Queue/WorkerOptions.php index 8e51c4de..f4cb1f64 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/WorkerOptions.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/WorkerOptions.php @@ -65,7 +65,7 @@ class WorkerOptions * @param bool $stopWhenEmpty * @return void */ - public function __construct($delay = 0, $memory = 128, $timeout = 60, $sleep = 3, $maxTries = 0, $force = false, $stopWhenEmpty = false) + public function __construct($delay = 0, $memory = 128, $timeout = 60, $sleep = 3, $maxTries = 1, $force = false, $stopWhenEmpty = false) { $this->delay = $delay; $this->sleep = $sleep; diff --git a/vendor/laravel/framework/src/Illuminate/Queue/composer.json b/vendor/laravel/framework/src/Illuminate/Queue/composer.json index c27e2eca..1132d414 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Queue/composer.json @@ -14,16 +14,18 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/console": "5.7.*", - "illuminate/container": "5.7.*", - "illuminate/contracts": "5.7.*", - "illuminate/database": "5.7.*", - "illuminate/filesystem": "5.7.*", - "illuminate/support": "5.7.*", - "opis/closure": "^3.1", - "symfony/debug": "^4.1", - "symfony/process": "^4.1" + "php": "^7.2.5|^8.0", + "ext-json": "*", + "illuminate/console": "^7.0", + "illuminate/container": "^7.0", + "illuminate/contracts": "^7.0", + "illuminate/database": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/pipeline": "^7.0", + "illuminate/support": "^7.0", + "opis/closure": "^3.6", + "ramsey/uuid": "^3.7|^4.0", + "symfony/process": "^5.0" }, "autoload": { "psr-4": { @@ -32,15 +34,15 @@ }, "extra": { "branch-alias": { - "dev-master": "5.7-dev" + "dev-master": "7.x-dev" } }, "suggest": { "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", - "aws/aws-sdk-php": "Required to use the SQS queue driver (^3.0).", - "illuminate/redis": "Required to use the Redis queue driver (5.7.*).", - "pda/pheanstalk": "Required to use the Beanstalk queue driver (^3.0|^4.0)." + "aws/aws-sdk-php": "Required to use the SQS queue driver and DynamoDb failed job storage (^3.155).", + "illuminate/redis": "Required to use the Redis queue driver (^7.0).", + "pda/pheanstalk": "Required to use the Beanstalk queue driver (^4.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php b/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php index e09c2033..95af91e7 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php @@ -5,18 +5,20 @@ namespace Illuminate\Redis\Connections; use Closure; use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Redis\Events\CommandExecuted; -use Illuminate\Redis\Limiters\DurationLimiterBuilder; use Illuminate\Redis\Limiters\ConcurrencyLimiterBuilder; +use Illuminate\Redis\Limiters\DurationLimiterBuilder; +use Illuminate\Support\Traits\Macroable; -/** - * @mixin \Predis\Client - */ abstract class Connection { + use Macroable { + __call as macroCall; + } + /** - * The Predis client. + * The Redis client. * - * @var \Predis\Client + * @var \Redis */ protected $client; @@ -104,7 +106,7 @@ abstract class Connection * Run a command against the Redis database. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public function command($method, array $parameters = []) @@ -211,6 +213,10 @@ abstract class Connection */ public function __call($method, $parameters) { + if (static::hasMacro($method)) { + return $this->macroCall($method, $parameters); + } + return $this->command($method, $parameters); } } diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php b/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php index a2f33793..97edade5 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php @@ -2,24 +2,46 @@ namespace Illuminate\Redis\Connections; -use Redis; use Closure; use Illuminate\Contracts\Redis\Connection as ConnectionContract; +use Illuminate\Support\Arr; +use Illuminate\Support\Str; +use Redis; +use RedisCluster; +use RedisException; /** * @mixin \Redis */ class PhpRedisConnection extends Connection implements ConnectionContract { + /** + * The connection creation callback. + * + * @var callable + */ + protected $connector; + + /** + * The connection configuration array. + * + * @var array + */ + protected $config; + /** * Create a new PhpRedis connection. * * @param \Redis $client + * @param callable|null $connector + * @param array $config * @return void */ - public function __construct($client) + public function __construct($client, callable $connector = null, array $config = []) { $this->client = $client; + $this->config = $config; + $this->connector = $connector; } /** @@ -48,21 +70,6 @@ class PhpRedisConnection extends Connection implements ConnectionContract }, $this->command('mget', [$keys])); } - /** - * Determine if the given keys exist. - * - * @param dynamic $keys - * @return int - */ - public function exists(...$keys) - { - $keys = collect($keys)->map(function ($key) { - return $this->applyPrefix($key); - })->all(); - - return $this->executeRaw(array_merge(['exists'], $keys)); - } - /** * Set the string value in argument as value of the key. * @@ -98,8 +105,8 @@ class PhpRedisConnection extends Connection implements ConnectionContract * Get the value of the given hash fields. * * @param string $key - * @param dynamic $dictionary - * @return int + * @param mixed $dictionary + * @return array */ public function hmget($key, ...$dictionary) { @@ -114,7 +121,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract * Set the given hash fields to their respective values. * * @param string $key - * @param dynamic $dictionary + * @param mixed $dictionary * @return int */ public function hmset($key, ...$dictionary) @@ -148,7 +155,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract * * @param string $key * @param int $count - * @param $value $value + * @param mixed $value * @return int|false */ public function lrem($key, $count, $value) @@ -159,7 +166,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract /** * Removes and returns the first element of the list stored at key. * - * @param dynamic $arguments + * @param mixed $arguments * @return array|null */ public function blpop(...$arguments) @@ -172,7 +179,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract /** * Removes and returns the last element of the list stored at key. * - * @param dynamic $arguments + * @param mixed $arguments * @return array|null */ public function brpop(...$arguments) @@ -189,16 +196,16 @@ class PhpRedisConnection extends Connection implements ConnectionContract * @param int|null $count * @return mixed|false */ - public function spop($key, $count = null) + public function spop($key, $count = 1) { - return $this->command('spop', [$key]); + return $this->command('spop', func_get_args()); } /** * Add one or more members to a sorted set or update its score if it already exists. * * @param string $key - * @param dynamic $dictionary + * @param mixed $dictionary * @return int */ public function zadd($key, ...$dictionary) @@ -210,9 +217,17 @@ class PhpRedisConnection extends Connection implements ConnectionContract } } - $key = $this->applyPrefix($key); + $options = []; - return $this->executeRaw(array_merge(['zadd', $key], $dictionary)); + foreach (array_slice($dictionary, 0, 3) as $i => $value) { + if (in_array($value, ['nx', 'xx', 'ch', 'incr', 'NX', 'XX', 'CH', 'INCR'], true)) { + $options[] = $value; + + unset($dictionary[$i]); + } + } + + return $this->command('zadd', array_merge([$key], [$options], array_values($dictionary))); } /** @@ -222,11 +237,11 @@ class PhpRedisConnection extends Connection implements ConnectionContract * @param mixed $min * @param mixed $max * @param array $options - * @return int + * @return array */ public function zrangebyscore($key, $min, $max, $options = []) { - if (isset($options['limit'])) { + if (isset($options['limit']) && Arr::isAssoc($options['limit'])) { $options['limit'] = [ $options['limit']['offset'], $options['limit']['count'], @@ -243,11 +258,11 @@ class PhpRedisConnection extends Connection implements ConnectionContract * @param mixed $min * @param mixed $max * @param array $options - * @return int + * @return array */ public function zrevrangebyscore($key, $min, $max, $options = []) { - if (isset($options['limit'])) { + if (isset($options['limit']) && Arr::isAssoc($options['limit'])) { $options['limit'] = [ $options['limit']['offset'], $options['limit']['count'], @@ -267,7 +282,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract */ public function zinterstore($output, $keys, $options = []) { - return $this->command('zInter', [$output, $keys, + return $this->command('zinterstore', [$output, $keys, $options['weights'] ?? null, $options['aggregate'] ?? 'sum', ]); @@ -283,16 +298,103 @@ class PhpRedisConnection extends Connection implements ConnectionContract */ public function zunionstore($output, $keys, $options = []) { - return $this->command('zUnion', [$output, $keys, + return $this->command('zunionstore', [$output, $keys, $options['weights'] ?? null, $options['aggregate'] ?? 'sum', ]); } + /** + * Scans all keys based on options. + * + * @param mixed $cursor + * @param array $options + * @return mixed + */ + public function scan($cursor, $options = []) + { + $result = $this->client->scan($cursor, + $options['match'] ?? '*', + $options['count'] ?? 10 + ); + + if ($result === false) { + $result = []; + } + + return $cursor === 0 && empty($result) ? false : [$cursor, $result]; + } + + /** + * Scans the given set for all values based on options. + * + * @param string $key + * @param mixed $cursor + * @param array $options + * @return mixed + */ + public function zscan($key, $cursor, $options = []) + { + $result = $this->client->zscan($key, $cursor, + $options['match'] ?? '*', + $options['count'] ?? 10 + ); + + if ($result === false) { + $result = []; + } + + return $cursor === 0 && empty($result) ? false : [$cursor, $result]; + } + + /** + * Scans the given hash for all values based on options. + * + * @param string $key + * @param mixed $cursor + * @param array $options + * @return mixed + */ + public function hscan($key, $cursor, $options = []) + { + $result = $this->client->hscan($key, $cursor, + $options['match'] ?? '*', + $options['count'] ?? 10 + ); + + if ($result === false) { + $result = []; + } + + return $cursor === 0 && empty($result) ? false : [$cursor, $result]; + } + + /** + * Scans the given set for all values based on options. + * + * @param string $key + * @param mixed $cursor + * @param array $options + * @return mixed + */ + public function sscan($key, $cursor, $options = []) + { + $result = $this->client->sscan($key, $cursor, + $options['match'] ?? '*', + $options['count'] ?? 10 + ); + + if ($result === false) { + $result = []; + } + + return $cursor === 0 && empty($result) ? false : [$cursor, $result]; + } + /** * Execute commands in a pipeline. * - * @param callable $callback + * @param callable|null $callback * @return \Redis|array */ public function pipeline(callable $callback = null) @@ -307,7 +409,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract /** * Execute commands in a transaction. * - * @param callable $callback + * @param callable|null $callback * @return \Redis|array */ public function transaction(callable $callback = null) @@ -388,6 +490,28 @@ class PhpRedisConnection extends Connection implements ConnectionContract // } + /** + * Flush the selected Redis database. + * + * @return void + */ + public function flushdb() + { + if (! $this->client instanceof RedisCluster) { + return $this->command('flushdb'); + } + + foreach ($this->client->_masters() as [$host, $port]) { + $redis = tap(new Redis)->connect($host, $port); + + if (isset($this->config['password']) && ! empty($this->config['password'])) { + $redis->auth($this->config['password']); + } + + $redis->flushDb(); + } + } + /** * Execute a raw command. * @@ -399,6 +523,28 @@ class PhpRedisConnection extends Connection implements ConnectionContract return $this->command('rawCommand', $parameters); } + /** + * Run a command against the Redis database. + * + * @param string $method + * @param array $parameters + * @return mixed + * + * @throws \RedisException + */ + public function command($method, array $parameters = []) + { + try { + return parent::command($method, $parameters); + } catch (RedisException $e) { + if (Str::contains($e->getMessage(), 'went away')) { + $this->client = $this->connector ? call_user_func($this->connector) : $this->client; + } + + throw $e; + } + } + /** * Disconnects from the Redis instance. * diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Connections/PredisConnection.php b/vendor/laravel/framework/src/Illuminate/Redis/Connections/PredisConnection.php index 34051718..93298256 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Connections/PredisConnection.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Connections/PredisConnection.php @@ -4,12 +4,21 @@ namespace Illuminate\Redis\Connections; use Closure; use Illuminate\Contracts\Redis\Connection as ConnectionContract; +use Predis\Command\ServerFlushDatabase; +use Predis\Connection\Aggregate\ClusterInterface; /** * @mixin \Predis\Client */ class PredisConnection extends Connection implements ConnectionContract { + /** + * The Predis client. + * + * @var \Predis\Client + */ + protected $client; + /** * Create a new Predis connection. * @@ -33,7 +42,7 @@ class PredisConnection extends Connection implements ConnectionContract { $loop = $this->pubSubLoop(); - call_user_func_array([$loop, $method], (array) $channels); + $loop->{$method}(...array_values((array) $channels)); foreach ($loop as $message) { if ($message->kind === 'message' || $message->kind === 'pmessage') { @@ -43,4 +52,20 @@ class PredisConnection extends Connection implements ConnectionContract unset($loop); } + + /** + * Flush the selected Redis database. + * + * @return void + */ + public function flushdb() + { + if (! $this->client->getConnection() instanceof ClusterInterface) { + return $this->command('flushdb'); + } + + foreach ($this->getConnection() as $node) { + $node->executeCommand(new ServerFlushDatabase); + } + } } diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php b/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php index a3800b15..ba14ad87 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php @@ -2,13 +2,17 @@ namespace Illuminate\Redis\Connectors; +use Illuminate\Contracts\Redis\Connector; +use Illuminate\Redis\Connections\PhpRedisClusterConnection; +use Illuminate\Redis\Connections\PhpRedisConnection; +use Illuminate\Support\Arr; +use Illuminate\Support\Facades\Redis as RedisFacade; +use Illuminate\Support\Str; +use LogicException; use Redis; use RedisCluster; -use Illuminate\Support\Arr; -use Illuminate\Redis\Connections\PhpRedisConnection; -use Illuminate\Redis\Connections\PhpRedisClusterConnection; -class PhpRedisConnector +class PhpRedisConnector implements Connector { /** * Create a new clustered PhpRedis connection. @@ -19,9 +23,13 @@ class PhpRedisConnector */ public function connect(array $config, array $options) { - return new PhpRedisConnection($this->createClient(array_merge( - $config, $options, Arr::pull($config, 'options', []) - ))); + $connector = function () use ($config, $options) { + return $this->createClient(array_merge( + $config, $options, Arr::pull($config, 'options', []) + )); + }; + + return new PhpRedisConnection($connector(), $connector, $config); } /** @@ -49,7 +57,7 @@ class PhpRedisConnector */ protected function buildClusterConnectionString(array $server) { - return $server['host'].':'.$server['port'].'?'.Arr::query(Arr::only($server, [ + return $this->formatHost($server).':'.$server['port'].'?'.Arr::query(Arr::only($server, [ 'database', 'password', 'prefix', 'read_timeout', ])); } @@ -59,18 +67,28 @@ class PhpRedisConnector * * @param array $config * @return \Redis + * + * @throws \LogicException */ protected function createClient(array $config) { return tap(new Redis, function ($client) use ($config) { + if ($client instanceof RedisFacade) { + throw new LogicException( + extension_loaded('redis') + ? 'Please remove or rename the Redis facade alias in your "app" configuration file in order to avoid collision with the PHP Redis extension.' + : 'Please make sure the PHP Redis extension is installed and enabled.' + ); + } + $this->establishConnection($client, $config); if (! empty($config['password'])) { $client->auth($config['password']); } - if (! empty($config['database'])) { - $client->select($config['database']); + if (isset($config['database'])) { + $client->select((int) $config['database']); } if (! empty($config['prefix'])) { @@ -80,6 +98,10 @@ class PhpRedisConnector if (! empty($config['read_timeout'])) { $client->setOption(Redis::OPT_READ_TIMEOUT, $config['read_timeout']); } + + if (! empty($config['scan'])) { + $client->setOption(Redis::OPT_SCAN, $config['scan']); + } }); } @@ -95,7 +117,7 @@ class PhpRedisConnector $persistent = $config['persistent'] ?? false; $parameters = [ - $config['host'], + $this->formatHost($config), $config['port'], Arr::get($config, 'timeout', 0.0), $persistent ? Arr::get($config, 'persistent_id', null) : null, @@ -106,6 +128,12 @@ class PhpRedisConnector $parameters[] = Arr::get($config, 'read_timeout', 0.0); } + if (version_compare(phpversion('redis'), '5.3.0', '>=')) { + if (! is_null($context = Arr::get($config, 'context'))) { + $parameters[] = $context; + } + } + $client->{($persistent ? 'pconnect' : 'connect')}(...$parameters); } @@ -118,12 +146,51 @@ class PhpRedisConnector */ protected function createRedisClusterInstance(array $servers, array $options) { - return new RedisCluster( + $parameters = [ null, array_values($servers), $options['timeout'] ?? 0, $options['read_timeout'] ?? 0, - isset($options['persistent']) && $options['persistent'] - ); + isset($options['persistent']) && $options['persistent'], + ]; + + if (version_compare(phpversion('redis'), '4.3.0', '>=')) { + $parameters[] = $options['password'] ?? null; + } + + if (version_compare(phpversion('redis'), '5.3.2', '>=')) { + if (! is_null($context = Arr::get($options, 'context'))) { + $parameters[] = $context; + } + } + + return tap(new RedisCluster(...$parameters), function ($client) use ($options) { + if (! empty($options['prefix'])) { + $client->setOption(RedisCluster::OPT_PREFIX, $options['prefix']); + } + + if (! empty($options['scan'])) { + $client->setOption(RedisCluster::OPT_SCAN, $options['scan']); + } + + if (! empty($options['failover'])) { + $client->setOption(RedisCluster::OPT_SLAVE_FAILOVER, $options['failover']); + } + }); + } + + /** + * Format the host using the scheme if available. + * + * @param array $options + * @return string + */ + protected function formatHost(array $options) + { + if (isset($options['scheme'])) { + return Str::start($options['host'], "{$options['scheme']}://"); + } + + return $options['host']; } } diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PredisConnector.php b/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PredisConnector.php index 8b1a46b1..e91e8956 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PredisConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PredisConnector.php @@ -2,12 +2,13 @@ namespace Illuminate\Redis\Connectors; -use Predis\Client; -use Illuminate\Support\Arr; -use Illuminate\Redis\Connections\PredisConnection; +use Illuminate\Contracts\Redis\Connector; use Illuminate\Redis\Connections\PredisClusterConnection; +use Illuminate\Redis\Connections\PredisConnection; +use Illuminate\Support\Arr; +use Predis\Client; -class PredisConnector +class PredisConnector implements Connector { /** * Create a new clustered Predis connection. diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiter.php b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiter.php index 78fc9237..2dafa6c9 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiter.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiter.php @@ -4,6 +4,7 @@ namespace Illuminate\Redis\Limiters; use Exception; use Illuminate\Contracts\Redis\LimiterTimeoutException; +use Illuminate\Support\Str; class ConcurrencyLimiter { @@ -66,7 +67,9 @@ class ConcurrencyLimiter { $starting = time(); - while (! $slot = $this->acquire()) { + $id = Str::random(20); + + while (! $slot = $this->acquire($id)) { if (time() - $timeout >= $starting) { throw new LimiterTimeoutException; } @@ -76,11 +79,11 @@ class ConcurrencyLimiter if (is_callable($callback)) { try { - return tap($callback(), function () use ($slot) { - $this->release($slot); + return tap($callback(), function () use ($slot, $id) { + $this->release($slot, $id); }); } catch (Exception $exception) { - $this->release($slot); + $this->release($slot, $id); throw $exception; } @@ -92,17 +95,18 @@ class ConcurrencyLimiter /** * Attempt to acquire the lock. * + * @param string $id A unique identifier for this lock * @return mixed */ - protected function acquire() + protected function acquire($id) { $slots = array_map(function ($i) { return $this->name.$i; }, range(1, $this->maxLocks)); return $this->redis->eval(...array_merge( - [$this->luaScript(), count($slots)], - array_merge($slots, [$this->name, $this->releaseAfter]) + [$this->lockScript(), count($slots)], + array_merge($slots, [$this->name, $this->releaseAfter, $id]) )); } @@ -112,15 +116,16 @@ class ConcurrencyLimiter * KEYS - The keys that represent available slots * ARGV[1] - The limiter name * ARGV[2] - The number of seconds the slot should be reserved + * ARGV[3] - The unique identifier for this lock * * @return string */ - protected function luaScript() + protected function lockScript() { return <<<'LUA' for index, value in pairs(redis.call('mget', unpack(KEYS))) do if not value then - redis.call('set', ARGV[1]..index, "1", "EX", ARGV[2]) + redis.call('set', KEYS[index], ARGV[3], "EX", ARGV[2]) return ARGV[1]..index end end @@ -131,10 +136,31 @@ LUA; * Release the lock. * * @param string $key + * @param string $id * @return void */ - protected function release($key) + protected function release($key, $id) { - $this->redis->command('del', [$key]); + $this->redis->eval($this->releaseScript(), 1, $key, $id); + } + + /** + * Get the Lua script to atomically release a lock. + * + * KEYS[1] - The name of the lock + * ARGV[1] - The unique identifier for this lock + * + * @return string + */ + protected function releaseScript() + { + return <<<'LUA' +if redis.call('get', KEYS[1]) == ARGV[1] +then + return redis.call('del', KEYS[1]) +else + return 0 +end +LUA; } } diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiterBuilder.php b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiterBuilder.php index 10a614f7..2ba7c916 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiterBuilder.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiterBuilder.php @@ -2,8 +2,8 @@ namespace Illuminate\Redis\Limiters; -use Illuminate\Support\InteractsWithTime; use Illuminate\Contracts\Redis\LimiterTimeoutException; +use Illuminate\Support\InteractsWithTime; class ConcurrencyLimiterBuilder { diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiter.php b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiter.php index 3c740878..9aa594fb 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiter.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiter.php @@ -51,10 +51,10 @@ class DurationLimiter /** * Create a new duration limiter instance. * - * @param \Illuminate\Redis\Connections\Connection $redis - * @param string $name - * @param int $maxLocks - * @param int $decay + * @param \Illuminate\Redis\Connections\Connection $redis + * @param string $name + * @param int $maxLocks + * @param int $decay * @return void */ public function __construct($redis, $name, $maxLocks, $decay) @@ -68,9 +68,9 @@ class DurationLimiter /** * Attempt to acquire the lock for the given number of seconds. * - * @param int $timeout - * @param callable|null $callback - * @return bool + * @param int $timeout + * @param callable|null $callback + * @return mixed * * @throws \Illuminate\Contracts\Redis\LimiterTimeoutException */ @@ -87,7 +87,7 @@ class DurationLimiter } if (is_callable($callback)) { - $callback(); + return $callback(); } return true; diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiterBuilder.php b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiterBuilder.php index 096e50c7..ee378fcc 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiterBuilder.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiterBuilder.php @@ -2,8 +2,8 @@ namespace Illuminate\Redis\Limiters; -use Illuminate\Support\InteractsWithTime; use Illuminate\Contracts\Redis\LimiterTimeoutException; +use Illuminate\Support\InteractsWithTime; class DurationLimiterBuilder { @@ -73,7 +73,7 @@ class DurationLimiterBuilder /** * Set the amount of time the lock window is maintained. * - * @param int $decay + * @param \DateTimeInterface|\DateInterval|int $decay * @return $this */ public function every($decay) diff --git a/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php b/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php index 969c4dbe..b5d98203 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php @@ -2,9 +2,13 @@ namespace Illuminate\Redis; -use InvalidArgumentException; +use Closure; use Illuminate\Contracts\Redis\Factory; use Illuminate\Redis\Connections\Connection; +use Illuminate\Redis\Connectors\PhpRedisConnector; +use Illuminate\Redis\Connectors\PredisConnector; +use Illuminate\Support\ConfigurationUrlParser; +use InvalidArgumentException; /** * @mixin \Illuminate\Redis\Connections\Connection @@ -14,7 +18,7 @@ class RedisManager implements Factory /** * The application instance. * - * @var \Illuminate\Foundation\Application + * @var \Illuminate\Contracts\Foundation\Application */ protected $app; @@ -25,6 +29,13 @@ class RedisManager implements Factory */ protected $driver; + /** + * The registered custom driver creators. + * + * @var array + */ + protected $customCreators = []; + /** * The Redis server configurations. * @@ -49,7 +60,7 @@ class RedisManager implements Factory /** * Create a new Redis manager instance. * - * @param \Illuminate\Foundation\Application $app + * @param \Illuminate\Contracts\Foundation\Application $app * @param string $driver * @param array $config * @return void @@ -95,7 +106,10 @@ class RedisManager implements Factory $options = $this->config['options'] ?? []; if (isset($this->config[$name])) { - return $this->connector()->connect($this->config[$name], $options); + return $this->connector()->connect( + $this->parseConnectionConfiguration($this->config[$name]), + $options + ); } if (isset($this->config['clusters'][$name])) { @@ -113,10 +127,12 @@ class RedisManager implements Factory */ protected function resolveCluster($name) { - $clusterOptions = $this->config['clusters']['options'] ?? []; - return $this->connector()->connectToCluster( - $this->config['clusters'][$name], $clusterOptions, $this->config['options'] ?? [] + array_map(function ($config) { + return $this->parseConnectionConfiguration($config); + }, $this->config['clusters'][$name]), + $this->config['clusters']['options'] ?? [], + $this->config['options'] ?? [] ); } @@ -141,18 +157,45 @@ class RedisManager implements Factory /** * Get the connector instance for the current driver. * - * @return \Illuminate\Redis\Connectors\PhpRedisConnector|\Illuminate\Redis\Connectors\PredisConnector + * @return \Illuminate\Contracts\Redis\Connector */ protected function connector() { + $customCreator = $this->customCreators[$this->driver] ?? null; + + if ($customCreator) { + return $customCreator(); + } + switch ($this->driver) { case 'predis': - return new Connectors\PredisConnector; + return new PredisConnector; case 'phpredis': - return new Connectors\PhpRedisConnector; + return new PhpRedisConnector; } } + /** + * Parse the Redis connection configuration. + * + * @param mixed $config + * @return array + */ + protected function parseConnectionConfiguration($config) + { + $parsed = (new ConfigurationUrlParser)->parseConfiguration($config); + + $driver = strtolower($parsed['driver'] ?? ''); + + if (in_array($driver, ['tcp', 'tls'])) { + $parsed['scheme'] = $driver; + } + + return array_filter($parsed, function ($key) { + return ! in_array($key, ['driver', 'username'], true); + }, ARRAY_FILTER_USE_KEY); + } + /** * Return all of the created connections. * @@ -183,6 +226,31 @@ class RedisManager implements Factory $this->events = false; } + /** + * Set the default driver. + * + * @param string $driver + * @return void + */ + public function setDriver($driver) + { + $this->driver = $driver; + } + + /** + * Register a custom driver creator Closure. + * + * @param string $driver + * @param \Closure $callback + * @return $this + */ + public function extend($driver, Closure $callback) + { + $this->customCreators[$driver] = $callback->bindTo($this, $this); + + return $this; + } + /** * Pass methods onto the default Redis connection. * diff --git a/vendor/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php index 2d419388..66282e51 100755 --- a/vendor/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php @@ -2,18 +2,12 @@ namespace Illuminate\Redis; +use Illuminate\Contracts\Support\DeferrableProvider; use Illuminate\Support\Arr; use Illuminate\Support\ServiceProvider; -class RedisServiceProvider extends ServiceProvider +class RedisServiceProvider extends ServiceProvider implements DeferrableProvider { - /** - * Indicates if loading of the provider is deferred. - * - * @var bool - */ - protected $defer = true; - /** * Register the service provider. * @@ -24,7 +18,7 @@ class RedisServiceProvider extends ServiceProvider $this->app->singleton('redis', function ($app) { $config = $app->make('config')->get('database.redis', []); - return new RedisManager($app, Arr::pull($config, 'client', 'predis'), $config); + return new RedisManager($app, Arr::pull($config, 'client', 'phpredis'), $config); }); $this->app->bind('redis.connection', function ($app) { diff --git a/vendor/laravel/framework/src/Illuminate/Redis/composer.json b/vendor/laravel/framework/src/Illuminate/Redis/composer.json index 72f8b3b7..3502c970 100755 --- a/vendor/laravel/framework/src/Illuminate/Redis/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Redis/composer.json @@ -14,19 +14,22 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.7.*", - "illuminate/support": "5.7.*", - "predis/predis": "^1.0" + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { "Illuminate\\Redis\\": "" } }, + "suggest": { + "ext-redis": "Required to use the phpredis connector (^4.0|^5.0).", + "predis/predis": "Required to use the predis connector (^1.1.2)." + }, "extra": { "branch-alias": { - "dev-master": "5.7-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php b/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php new file mode 100644 index 00000000..47b418ac --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php @@ -0,0 +1,249 @@ +bind($request); + } + + // If no route was found we will now check if a matching route is specified by + // another HTTP verb. If it is we will need to throw a MethodNotAllowed and + // inform the user agent of which HTTP verb it should use for this route. + $others = $this->checkForAlternateVerbs($request); + + if (count($others) > 0) { + return $this->getRouteForMethods($request, $others); + } + + throw new NotFoundHttpException; + } + + /** + * Determine if any routes match on another HTTP verb. + * + * @param \Illuminate\Http\Request $request + * @return array + */ + protected function checkForAlternateVerbs($request) + { + $methods = array_diff(Router::$verbs, [$request->getMethod()]); + + // Here we will spin through all verbs except for the current request verb and + // check to see if any routes respond to them. If they do, we will return a + // proper error response with the correct headers on the response string. + return array_values(array_filter( + $methods, + function ($method) use ($request) { + return ! is_null($this->matchAgainstRoutes($this->get($method), $request, false)); + } + )); + } + + /** + * Determine if a route in the array matches the request. + * + * @param \Illuminate\Routing\Route[] $routes + * @param \Illuminate\Http\Request $request + * @param bool $includingMethod + * @return \Illuminate\Routing\Route|null + */ + protected function matchAgainstRoutes(array $routes, $request, $includingMethod = true) + { + [$fallbacks, $routes] = collect($routes)->partition(function ($route) { + return $route->isFallback; + }); + + return $routes->merge($fallbacks)->first(function (Route $route) use ($request, $includingMethod) { + return $route->matches($request, $includingMethod); + }); + } + + /** + * Get a route (if necessary) that responds when other available methods are present. + * + * @param \Illuminate\Http\Request $request + * @param string[] $methods + * @return \Illuminate\Routing\Route + * + * @throws \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException + */ + protected function getRouteForMethods($request, array $methods) + { + if ($request->method() === 'OPTIONS') { + return (new Route('OPTIONS', $request->path(), function () use ($methods) { + return new Response('', 200, ['Allow' => implode(',', $methods)]); + }))->bind($request); + } + + $this->methodNotAllowed($methods, $request->method()); + } + + /** + * Throw a method not allowed HTTP exception. + * + * @param array $others + * @param string $method + * @return void + * + * @throws \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException + */ + protected function methodNotAllowed(array $others, $method) + { + throw new MethodNotAllowedHttpException( + $others, + sprintf( + 'The %s method is not supported for this route. Supported methods: %s.', + $method, + implode(', ', $others) + ) + ); + } + + /** + * Compile the routes for caching. + * + * @return array + */ + public function compile() + { + $compiled = $this->dumper()->getCompiledRoutes(); + + $attributes = []; + + foreach ($this->getRoutes() as $route) { + $attributes[$route->getName()] = [ + 'methods' => $route->methods(), + 'uri' => $route->uri(), + 'action' => $route->getAction(), + 'fallback' => $route->isFallback, + 'defaults' => $route->defaults, + 'wheres' => $route->wheres, + 'bindingFields' => $route->bindingFields(), + 'lockSeconds' => $route->locksFor(), + 'waitSeconds' => $route->waitsFor(), + ]; + } + + return compact('compiled', 'attributes'); + } + + /** + * Return the CompiledUrlMatcherDumper instance for the route collection. + * + * @return \Symfony\Component\Routing\Matcher\Dumper\CompiledUrlMatcherDumper + */ + public function dumper() + { + return new CompiledUrlMatcherDumper($this->toSymfonyRouteCollection()); + } + + /** + * Convert the collection to a Symfony RouteCollection instance. + * + * @return \Symfony\Component\Routing\RouteCollection + */ + public function toSymfonyRouteCollection() + { + $symfonyRoutes = new SymfonyRouteCollection; + + $routes = $this->getRoutes(); + + foreach ($routes as $route) { + if (! $route->isFallback) { + $symfonyRoutes = $this->addToSymfonyRoutesCollection($symfonyRoutes, $route); + } + } + + foreach ($routes as $route) { + if ($route->isFallback) { + $symfonyRoutes = $this->addToSymfonyRoutesCollection($symfonyRoutes, $route); + } + } + + return $symfonyRoutes; + } + + /** + * Add a route to the SymfonyRouteCollection instance. + * + * @param \Symfony\Component\Routing\RouteCollection $symfonyRoutes + * @param \Illuminate\Routing\Route $route + * @return \Symfony\Component\Routing\RouteCollection + */ + protected function addToSymfonyRoutesCollection(SymfonyRouteCollection $symfonyRoutes, Route $route) + { + $name = $route->getName(); + + if (Str::endsWith($name, '.') && + ! is_null($symfonyRoutes->get($name))) { + $name = null; + } + + if (! $name) { + $route->name($name = $this->generateRouteName()); + + $this->add($route); + } elseif (! is_null($symfonyRoutes->get($name))) { + throw new LogicException("Unable to prepare route [{$route->uri}] for serialization. Another route has already been assigned name [{$name}]."); + } + + $symfonyRoutes->add($route->getName(), $route->toSymfonyRoute()); + + return $symfonyRoutes; + } + + /** + * Get a randomly generated route name. + * + * @return string + */ + protected function generateRouteName() + { + return 'generated::'.Str::random(); + } + + /** + * Get an iterator for the items. + * + * @return \ArrayIterator + */ + public function getIterator() + { + return new ArrayIterator($this->getRoutes()); + } + + /** + * Count the number of items in the collection. + * + * @return int + */ + public function count() + { + return count($this->getRoutes()); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Routing/CompiledRouteCollection.php b/vendor/laravel/framework/src/Illuminate/Routing/CompiledRouteCollection.php new file mode 100644 index 00000000..65544d8f --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Routing/CompiledRouteCollection.php @@ -0,0 +1,329 @@ +compiled = $compiled; + $this->attributes = $attributes; + $this->routes = new RouteCollection; + } + + /** + * Add a Route instance to the collection. + * + * @param \Illuminate\Routing\Route $route + * @return \Illuminate\Routing\Route + */ + public function add(Route $route) + { + return $this->routes->add($route); + } + + /** + * Refresh the name look-up table. + * + * This is done in case any names are fluently defined or if routes are overwritten. + * + * @return void + */ + public function refreshNameLookups() + { + // + } + + /** + * Refresh the action look-up table. + * + * This is done in case any actions are overwritten with new controllers. + * + * @return void + */ + public function refreshActionLookups() + { + // + } + + /** + * Find the first route matching a given request. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Routing\Route + * + * @throws \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException + * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException + */ + public function match(Request $request) + { + $matcher = new CompiledUrlMatcher( + $this->compiled, (new RequestContext)->fromRequest( + $trimmedRequest = $this->requestWithoutTrailingSlash($request) + ) + ); + + $route = null; + + try { + if ($result = $matcher->matchRequest($trimmedRequest)) { + $route = $this->getByName($result['_route']); + } + } catch (ResourceNotFoundException|MethodNotAllowedException $e) { + try { + return $this->routes->match($request); + } catch (NotFoundHttpException $e) { + // + } + } + + if ($route && $route->isFallback) { + try { + $dynamicRoute = $this->routes->match($request); + + if (! $dynamicRoute->isFallback) { + $route = $dynamicRoute; + } + } catch (NotFoundHttpException|MethodNotAllowedHttpException $e) { + // + } + } + + return $this->handleMatchedRoute($request, $route); + } + + /** + * Get a cloned instance of the given request without any trailing slash on the URI. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Request + */ + protected function requestWithoutTrailingSlash(Request $request) + { + $trimmedRequest = Request::createFromBase($request); + + $parts = explode('?', $request->server->get('REQUEST_URI'), 2); + + $trimmedRequest->server->set( + 'REQUEST_URI', rtrim($parts[0], '/').(isset($parts[1]) ? '?'.$parts[1] : '') + ); + + return $trimmedRequest; + } + + /** + * Get routes from the collection by method. + * + * @param string|null $method + * @return \Illuminate\Routing\Route[] + */ + public function get($method = null) + { + return $this->getRoutesByMethod()[$method] ?? []; + } + + /** + * Determine if the route collection contains a given named route. + * + * @param string $name + * @return bool + */ + public function hasNamedRoute($name) + { + return isset($this->attributes[$name]) || $this->routes->hasNamedRoute($name); + } + + /** + * Get a route instance by its name. + * + * @param string $name + * @return \Illuminate\Routing\Route|null + */ + public function getByName($name) + { + if (isset($this->attributes[$name])) { + return $this->newRoute($this->attributes[$name]); + } + + return $this->routes->getByName($name); + } + + /** + * Get a route instance by its controller action. + * + * @param string $action + * @return \Illuminate\Routing\Route|null + */ + public function getByAction($action) + { + $attributes = collect($this->attributes)->first(function (array $attributes) use ($action) { + if (isset($attributes['action']['controller'])) { + return trim($attributes['action']['controller'], '\\') === $action; + } + + return $attributes['action']['uses'] === $action; + }); + + if ($attributes) { + return $this->newRoute($attributes); + } + + return $this->routes->getByAction($action); + } + + /** + * Get all of the routes in the collection. + * + * @return \Illuminate\Routing\Route[] + */ + public function getRoutes() + { + return collect($this->attributes) + ->map(function (array $attributes) { + return $this->newRoute($attributes); + }) + ->merge($this->routes->getRoutes()) + ->values() + ->all(); + } + + /** + * Get all of the routes keyed by their HTTP verb / method. + * + * @return array + */ + public function getRoutesByMethod() + { + return collect($this->getRoutes()) + ->groupBy(function (Route $route) { + return $route->methods(); + }) + ->map(function (Collection $routes) { + return $routes->mapWithKeys(function (Route $route) { + return [$route->uri => $route]; + })->all(); + }) + ->all(); + } + + /** + * Get all of the routes keyed by their name. + * + * @return \Illuminate\Routing\Route[] + */ + public function getRoutesByName() + { + return collect($this->getRoutes()) + ->keyBy(function (Route $route) { + return $route->getName(); + }) + ->all(); + } + + /** + * Resolve an array of attributes to a Route instance. + * + * @param array $attributes + * @return \Illuminate\Routing\Route + */ + protected function newRoute(array $attributes) + { + if (empty($attributes['action']['prefix'] ?? '')) { + $baseUri = $attributes['uri']; + } else { + $prefix = trim($attributes['action']['prefix'], '/'); + + $baseUri = trim(implode( + '/', array_slice( + explode('/', trim($attributes['uri'], '/')), + count($prefix !== '' ? explode('/', $prefix) : []) + ) + ), '/'); + } + + return $this->router->newRoute($attributes['methods'], $baseUri == '' ? '/' : $baseUri, $attributes['action']) + ->setFallback($attributes['fallback']) + ->setDefaults($attributes['defaults']) + ->setWheres($attributes['wheres']) + ->setBindingFields($attributes['bindingFields']) + ->block($attributes['lockSeconds'] ?? null, $attributes['waitSeconds'] ?? null); + } + + /** + * Set the router instance on the route. + * + * @param \Illuminate\Routing\Router $router + * @return $this + */ + public function setRouter(Router $router) + { + $this->router = $router; + + return $this; + } + + /** + * Set the container instance on the route. + * + * @param \Illuminate\Container\Container $container + * @return $this + */ + public function setContainer(Container $container) + { + $this->container = $container; + + return $this; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php index 85ee7d39..3a1e1fc2 100755 --- a/vendor/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php @@ -2,9 +2,9 @@ namespace Illuminate\Routing\Console; +use Illuminate\Console\GeneratorCommand; use Illuminate\Support\Str; use InvalidArgumentException; -use Illuminate\Console\GeneratorCommand; use Symfony\Component\Console\Input\InputOption; class ControllerMakeCommand extends GeneratorCommand @@ -57,7 +57,20 @@ class ControllerMakeCommand extends GeneratorCommand $stub = $stub ?? '/stubs/controller.plain.stub'; - return __DIR__.$stub; + return $this->resolveStubPath($stub); + } + + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return file_exists($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; } /** @@ -117,8 +130,14 @@ class ControllerMakeCommand extends GeneratorCommand return [ 'ParentDummyFullModelClass' => $parentModelClass, + '{{ namespacedParentModel }}' => $parentModelClass, + '{{namespacedParentModel}}' => $parentModelClass, 'ParentDummyModelClass' => class_basename($parentModelClass), + '{{ parentModel }}' => class_basename($parentModelClass), + '{{parentModel}}' => class_basename($parentModelClass), 'ParentDummyModelVariable' => lcfirst(class_basename($parentModelClass)), + '{{ parentModelVariable }}' => lcfirst(class_basename($parentModelClass)), + '{{parentModelVariable}}' => lcfirst(class_basename($parentModelClass)), ]; } @@ -140,8 +159,14 @@ class ControllerMakeCommand extends GeneratorCommand return array_merge($replace, [ 'DummyFullModelClass' => $modelClass, + '{{ namespacedModel }}' => $modelClass, + '{{namespacedModel}}' => $modelClass, 'DummyModelClass' => class_basename($modelClass), + '{{ model }}' => class_basename($modelClass), + '{{model}}' => class_basename($modelClass), 'DummyModelVariable' => lcfirst(class_basename($modelClass)), + '{{ modelVariable }}' => lcfirst(class_basename($modelClass)), + '{{modelVariable}}' => lcfirst(class_basename($modelClass)), ]); } @@ -176,11 +201,12 @@ class ControllerMakeCommand extends GeneratorCommand protected function getOptions() { return [ - ['model', 'm', InputOption::VALUE_OPTIONAL, 'Generate a resource controller for the given model.'], - ['resource', 'r', InputOption::VALUE_NONE, 'Generate a resource controller class.'], - ['invokable', 'i', InputOption::VALUE_NONE, 'Generate a single method, invokable controller class.'], - ['parent', 'p', InputOption::VALUE_OPTIONAL, 'Generate a nested resource controller class.'], ['api', null, InputOption::VALUE_NONE, 'Exclude the create and edit methods from the controller.'], + ['force', null, InputOption::VALUE_NONE, 'Create the class even if the controller already exists'], + ['invokable', 'i', InputOption::VALUE_NONE, 'Generate a single method, invokable controller class.'], + ['model', 'm', InputOption::VALUE_OPTIONAL, 'Generate a resource controller for the given model.'], + ['parent', 'p', InputOption::VALUE_OPTIONAL, 'Generate a nested resource controller class.'], + ['resource', 'r', InputOption::VALUE_NONE, 'Generate a resource controller class.'], ]; } } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Console/MiddlewareMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Routing/Console/MiddlewareMakeCommand.php index e41813d3..cd53582b 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Console/MiddlewareMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Console/MiddlewareMakeCommand.php @@ -34,7 +34,20 @@ class MiddlewareMakeCommand extends GeneratorCommand */ protected function getStub() { - return __DIR__.'/stubs/middleware.stub'; + return $this->resolveStubPath('/stubs/middleware.stub'); + } + + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return file_exists($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Console/stubs/controller.api.stub b/vendor/laravel/framework/src/Illuminate/Routing/Console/stubs/controller.api.stub index e11e43af..381a9c87 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Console/stubs/controller.api.stub +++ b/vendor/laravel/framework/src/Illuminate/Routing/Console/stubs/controller.api.stub @@ -1,11 +1,11 @@ {$method}(...array_values($parameters)); } /** * Handle calls to missing methods on the controller. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed * * @throws \BadMethodCallException diff --git a/vendor/laravel/framework/src/Illuminate/Routing/ImplicitRouteBinding.php b/vendor/laravel/framework/src/Illuminate/Routing/ImplicitRouteBinding.php index 1f52fc16..c6d19534 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/ImplicitRouteBinding.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/ImplicitRouteBinding.php @@ -2,9 +2,10 @@ namespace Illuminate\Routing; -use Illuminate\Support\Str; use Illuminate\Contracts\Routing\UrlRoutable; use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Support\Reflector; +use Illuminate\Support\Str; class ImplicitRouteBinding { @@ -14,13 +15,15 @@ class ImplicitRouteBinding * @param \Illuminate\Container\Container $container * @param \Illuminate\Routing\Route $route * @return void + * + * @throws \Illuminate\Database\Eloquent\ModelNotFoundException */ public static function resolveForRoute($container, $route) { $parameters = $route->parameters(); foreach ($route->signatureParameters(UrlRoutable::class) as $parameter) { - if (! $parameterName = static::getParameterName($parameter->name, $parameters)) { + if (! $parameterName = static::getParameterName($parameter->getName(), $parameters)) { continue; } @@ -30,10 +33,18 @@ class ImplicitRouteBinding continue; } - $instance = $container->make($parameter->getClass()->name); + $instance = $container->make(Reflector::getParameterClassName($parameter)); - if (! $model = $instance->resolveRouteBinding($parameterValue)) { - throw (new ModelNotFoundException)->setModel(get_class($instance)); + $parent = $route->parentOfParameter($parameterName); + + if ($parent instanceof UrlRoutable && in_array($parameterName, array_keys($route->bindingFields()))) { + if (! $model = $parent->resolveChildRouteBinding( + $parameterName, $parameterValue, $route->bindingFieldFor($parameterName) + )) { + throw (new ModelNotFoundException)->setModel(get_class($instance), [$parameterValue]); + } + } elseif (! $model = $instance->resolveRouteBinding($parameterValue, $route->bindingFieldFor($parameterName))) { + throw (new ModelNotFoundException)->setModel(get_class($instance), [$parameterValue]); } $route->setParameter($parameterName, $model); diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Matching/HostValidator.php b/vendor/laravel/framework/src/Illuminate/Routing/Matching/HostValidator.php index 76f9d878..a0ea7210 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Matching/HostValidator.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Matching/HostValidator.php @@ -16,10 +16,12 @@ class HostValidator implements ValidatorInterface */ public function matches(Route $route, Request $request) { - if (is_null($route->getCompiled()->getHostRegex())) { + $hostRegex = $route->getCompiled()->getHostRegex(); + + if (is_null($hostRegex)) { return true; } - return preg_match($route->getCompiled()->getHostRegex(), $request->getHost()); + return preg_match($hostRegex, $request->getHost()); } } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Matching/UriValidator.php b/vendor/laravel/framework/src/Illuminate/Routing/Matching/UriValidator.php index 3aeb73b2..4dcc2cf3 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Matching/UriValidator.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Matching/UriValidator.php @@ -16,7 +16,7 @@ class UriValidator implements ValidatorInterface */ public function matches(Route $route, Request $request) { - $path = $request->path() === '/' ? '/' : '/'.$request->path(); + $path = rtrim($request->getPathInfo(), '/') ?: '/'; return preg_match($route->getCompiled()->getRegex(), rawurldecode($path)); } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php b/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php index b0b37b87..a06b2c29 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php @@ -3,12 +3,12 @@ namespace Illuminate\Routing\Middleware; use Closure; -use RuntimeException; -use Illuminate\Support\Str; use Illuminate\Cache\RateLimiter; -use Illuminate\Support\InteractsWithTime; -use Symfony\Component\HttpFoundation\Response; use Illuminate\Http\Exceptions\ThrottleRequestsException; +use Illuminate\Support\InteractsWithTime; +use Illuminate\Support\Str; +use RuntimeException; +use Symfony\Component\HttpFoundation\Response; class ThrottleRequests { @@ -39,13 +39,14 @@ class ThrottleRequests * @param \Closure $next * @param int|string $maxAttempts * @param float|int $decayMinutes + * @param string $prefix * @return \Symfony\Component\HttpFoundation\Response * * @throws \Illuminate\Http\Exceptions\ThrottleRequestsException */ - public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1) + public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1, $prefix = '') { - $key = $this->resolveRequestSignature($request); + $key = $prefix.$this->resolveRequestSignature($request); $maxAttempts = $this->resolveMaxAttempts($request, $maxAttempts); @@ -53,7 +54,7 @@ class ThrottleRequests throw $this->buildException($key, $maxAttempts); } - $this->limiter->hit($key, $decayMinutes); + $this->limiter->hit($key, $decayMinutes * 60); $response = $next($request); diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequestsWithRedis.php b/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequestsWithRedis.php index fe2567f5..665f8828 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequestsWithRedis.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequestsWithRedis.php @@ -3,8 +3,8 @@ namespace Illuminate\Routing\Middleware; use Closure; -use Illuminate\Redis\Limiters\DurationLimiter; use Illuminate\Contracts\Redis\Factory as Redis; +use Illuminate\Redis\Limiters\DurationLimiter; class ThrottleRequestsWithRedis extends ThrottleRequests { @@ -47,13 +47,14 @@ class ThrottleRequestsWithRedis extends ThrottleRequests * @param \Closure $next * @param int|string $maxAttempts * @param float|int $decayMinutes + * @param string $prefix * @return mixed * * @throws \Symfony\Component\HttpKernel\Exception\HttpException */ - public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1) + public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1, $prefix = '') { - $key = $this->resolveRequestSignature($request); + $key = $prefix.$this->resolveRequestSignature($request); $maxAttempts = $this->resolveMaxAttempts($request, $maxAttempts); diff --git a/vendor/laravel/framework/src/Illuminate/Routing/MiddlewareNameResolver.php b/vendor/laravel/framework/src/Illuminate/Routing/MiddlewareNameResolver.php index 605d61a7..87ab42d1 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/MiddlewareNameResolver.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/MiddlewareNameResolver.php @@ -9,7 +9,7 @@ class MiddlewareNameResolver /** * Resolve the middleware name to a class name(s) preserving passed parameters. * - * @param string $name + * @param \Closure|string $name * @param array $map * @param array $middlewareGroups * @return \Closure|string|array diff --git a/vendor/laravel/framework/src/Illuminate/Routing/PendingResourceRegistration.php b/vendor/laravel/framework/src/Illuminate/Routing/PendingResourceRegistration.php index f4ec5bc0..5ab78b3f 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/PendingResourceRegistration.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/PendingResourceRegistration.php @@ -2,6 +2,7 @@ namespace Illuminate\Routing; +use Illuminate\Support\Arr; use Illuminate\Support\Traits\Macroable; class PendingResourceRegistration @@ -141,7 +142,7 @@ class PendingResourceRegistration } /** - * Set a middleware to the resource. + * Add middleware to the resource routes. * * @param mixed $middleware * @return \Illuminate\Routing\PendingResourceRegistration @@ -153,6 +154,60 @@ class PendingResourceRegistration return $this; } + /** + * Specify middleware that should be removed from the resource routes. + * + * @param array|string $middleware + * @return $this|array + */ + public function withoutMiddleware($middleware) + { + $this->options['excluded_middleware'] = array_merge( + (array) ($this->options['excluded_middleware'] ?? []), Arr::wrap($middleware) + ); + + return $this; + } + + /** + * Add "where" constraints to the resource routes. + * + * @param mixed $wheres + * @return \Illuminate\Routing\PendingResourceRegistration + */ + public function where($wheres) + { + $this->options['wheres'] = $wheres; + + return $this; + } + + /** + * Indicate that the resource routes should have "shallow" nesting. + * + * @param bool $shallow + * @return \Illuminate\Routing\PendingResourceRegistration + */ + public function shallow($shallow = true) + { + $this->options['shallow'] = $shallow; + + return $this; + } + + /** + * Indicate that the resource routes should be scoped using the given binding fields. + * + * @param array $fields + * @return \Illuminate\Routing\PendingResourceRegistration + */ + public function scoped(array $fields = []) + { + $this->options['bindingFields'] = $fields; + + return $this; + } + /** * Register the resource route. * diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php b/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php index 17a7d8f2..e43d5919 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php @@ -2,13 +2,11 @@ namespace Illuminate\Routing; -use Closure; -use Exception; -use Throwable; -use Illuminate\Http\Request; use Illuminate\Contracts\Debug\ExceptionHandler; +use Illuminate\Contracts\Support\Responsable; +use Illuminate\Http\Request; use Illuminate\Pipeline\Pipeline as BasePipeline; -use Symfony\Component\Debug\Exception\FatalThrowableError; +use Throwable; /** * This extended pipeline catches any exceptions that occur during each slice. @@ -18,58 +16,28 @@ use Symfony\Component\Debug\Exception\FatalThrowableError; class Pipeline extends BasePipeline { /** - * Get the final piece of the Closure onion. + * Handles the value returned from each pipe before passing it to the next. * - * @param \Closure $destination - * @return \Closure + * @param mixed $carry + * @return mixed */ - protected function prepareDestination(Closure $destination) + protected function handleCarry($carry) { - return function ($passable) use ($destination) { - try { - return $destination($passable); - } catch (Exception $e) { - return $this->handleException($passable, $e); - } catch (Throwable $e) { - return $this->handleException($passable, new FatalThrowableError($e)); - } - }; - } - - /** - * Get a Closure that represents a slice of the application onion. - * - * @return \Closure - */ - protected function carry() - { - return function ($stack, $pipe) { - return function ($passable) use ($stack, $pipe) { - try { - $slice = parent::carry(); - - $callable = $slice($stack, $pipe); - - return $callable($passable); - } catch (Exception $e) { - return $this->handleException($passable, $e); - } catch (Throwable $e) { - return $this->handleException($passable, new FatalThrowableError($e)); - } - }; - }; + return $carry instanceof Responsable + ? $carry->toResponse($this->getContainer()->make(Request::class)) + : $carry; } /** * Handle the given exception. * * @param mixed $passable - * @param \Exception $e + * @param \Throwable $e * @return mixed * - * @throws \Exception + * @throws \Throwable */ - protected function handleException($passable, Exception $e) + protected function handleException($passable, Throwable $e) { if (! $this->container->bound(ExceptionHandler::class) || ! $passable instanceof Request) { @@ -82,7 +50,7 @@ class Pipeline extends BasePipeline $response = $handler->render($passable, $e); - if (method_exists($response, 'withException')) { + if (is_object($response) && method_exists($response, 'withException')) { $response->withException($e); } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RedirectController.php b/vendor/laravel/framework/src/Illuminate/Routing/RedirectController.php index e825ddfa..e98414ba 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RedirectController.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RedirectController.php @@ -3,19 +3,42 @@ namespace Illuminate\Routing; use Illuminate\Http\RedirectResponse; +use Illuminate\Http\Request; +use Illuminate\Support\Str; class RedirectController extends Controller { /** * Invoke the controller method. * - * @param array $args + * @param \Illuminate\Http\Request $request + * @param \Illuminate\Routing\UrlGenerator $url * @return \Illuminate\Http\RedirectResponse */ - public function __invoke(...$args) + public function __invoke(Request $request, UrlGenerator $url) { - [$destination, $status] = array_slice($args, -2); + $parameters = collect($request->route()->parameters()); - return new RedirectResponse($destination, $status); + $status = $parameters->get('status'); + + $destination = $parameters->get('destination'); + + $parameters->forget('status')->forget('destination'); + + $route = (new Route('GET', $destination, [ + 'as' => 'laravel_route_redirect_destination', + ]))->bind($request); + + $parameters = $parameters->only( + $route->getCompiled()->getPathVariables() + )->toArray(); + + $url = $url->toRoute($route, $parameters, false); + + if (! Str::startsWith($destination, '/') && Str::startsWith($url, '/')) { + $url = Str::after($url, '/'); + } + + return new RedirectResponse($url, $status); } } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php b/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php index e04d0a90..99e7c226 100755 --- a/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php @@ -3,8 +3,8 @@ namespace Illuminate\Routing; use Illuminate\Http\RedirectResponse; -use Illuminate\Support\Traits\Macroable; use Illuminate\Session\Store as SessionStore; +use Illuminate\Support\Traits\Macroable; class Redirector { @@ -49,7 +49,7 @@ class Redirector /** * Create a new redirect response to the previous location. * - * @param int $status + * @param int $status * @param array $headers * @param mixed $fallback * @return \Illuminate\Http\RedirectResponse @@ -62,7 +62,7 @@ class Redirector /** * Create a new redirect response to the current URI. * - * @param int $status + * @param int $status * @param array $headers * @return \Illuminate\Http\RedirectResponse */ @@ -75,9 +75,9 @@ class Redirector * Create a new redirect response, while putting the current URL in the session. * * @param string $path - * @param int $status - * @param array $headers - * @param bool $secure + * @param int $status + * @param array $headers + * @param bool|null $secure * @return \Illuminate\Http\RedirectResponse */ public function guest($path, $status = 302, $headers = [], $secure = null) @@ -99,9 +99,9 @@ class Redirector * Create a new redirect response to the previously intended location. * * @param string $default - * @param int $status - * @param array $headers - * @param bool $secure + * @param int $status + * @param array $headers + * @param bool|null $secure * @return \Illuminate\Http\RedirectResponse */ public function intended($default = '/', $status = 302, $headers = [], $secure = null) @@ -126,9 +126,9 @@ class Redirector * Create a new redirect response to the given path. * * @param string $path - * @param int $status - * @param array $headers - * @param bool $secure + * @param int $status + * @param array $headers + * @param bool|null $secure * @return \Illuminate\Http\RedirectResponse */ public function to($path, $status = 302, $headers = [], $secure = null) @@ -140,8 +140,8 @@ class Redirector * Create a new redirect response to an external URL (no validation). * * @param string $path - * @param int $status - * @param array $headers + * @param int $status + * @param array $headers * @return \Illuminate\Http\RedirectResponse */ public function away($path, $status = 302, $headers = []) @@ -153,8 +153,8 @@ class Redirector * Create a new redirect response to the given HTTPS path. * * @param string $path - * @param int $status - * @param array $headers + * @param int $status + * @param array $headers * @return \Illuminate\Http\RedirectResponse */ public function secure($path, $status = 302, $headers = []) @@ -166,9 +166,9 @@ class Redirector * Create a new redirect response to a named route. * * @param string $route - * @param mixed $parameters - * @param int $status - * @param array $headers + * @param mixed $parameters + * @param int $status + * @param array $headers * @return \Illuminate\Http\RedirectResponse */ public function route($route, $parameters = [], $status = 302, $headers = []) @@ -176,13 +176,43 @@ class Redirector return $this->to($this->generator->route($route, $parameters), $status, $headers); } + /** + * Create a new redirect response to a signed named route. + * + * @param string $route + * @param mixed $parameters + * @param \DateTimeInterface|\DateInterval|int|null $expiration + * @param int $status + * @param array $headers + * @return \Illuminate\Http\RedirectResponse + */ + public function signedRoute($route, $parameters = [], $expiration = null, $status = 302, $headers = []) + { + return $this->to($this->generator->signedRoute($route, $parameters, $expiration), $status, $headers); + } + + /** + * Create a new redirect response to a signed named route. + * + * @param string $route + * @param \DateTimeInterface|\DateInterval|int|null $expiration + * @param mixed $parameters + * @param int $status + * @param array $headers + * @return \Illuminate\Http\RedirectResponse + */ + public function temporarySignedRoute($route, $expiration, $parameters = [], $status = 302, $headers = []) + { + return $this->to($this->generator->temporarySignedRoute($route, $expiration, $parameters), $status, $headers); + } + /** * Create a new redirect response to a controller action. * * @param string|array $action - * @param mixed $parameters - * @param int $status - * @param array $headers + * @param mixed $parameters + * @param int $status + * @param array $headers * @return \Illuminate\Http\RedirectResponse */ public function action($action, $parameters = [], $status = 302, $headers = []) @@ -194,8 +224,8 @@ class Redirector * Create a new redirect response. * * @param string $path - * @param int $status - * @param array $headers + * @param int $status + * @param array $headers * @return \Illuminate\Http\RedirectResponse */ protected function createRedirect($path, $status, $headers) diff --git a/vendor/laravel/framework/src/Illuminate/Routing/ResourceRegistrar.php b/vendor/laravel/framework/src/Illuminate/Routing/ResourceRegistrar.php index 33b74ec4..e606a1da 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/ResourceRegistrar.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/ResourceRegistrar.php @@ -67,7 +67,7 @@ class ResourceRegistrar * * @param string $name * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\RouteCollection */ public function register($name, $controller, array $options = []) @@ -95,9 +95,15 @@ class ResourceRegistrar $collection = new RouteCollection; foreach ($this->getResourceMethods($defaults, $options) as $m) { - $collection->add($this->{'addResource'.ucfirst($m)}( + $route = $this->{'addResource'.ucfirst($m)}( $name, $base, $controller, $options - )); + ); + + if (isset($options['bindingFields'])) { + $this->setResourceBindingFields($route, $options['bindingFields']); + } + + $collection->add($route); } return $collection; @@ -108,7 +114,7 @@ class ResourceRegistrar * * @param string $name * @param string $controller - * @param array $options + * @param array $options * @return void */ protected function prefixedResource($name, $controller, array $options) @@ -171,7 +177,7 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceIndex($name, $base, $controller, $options) @@ -189,7 +195,7 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceCreate($name, $base, $controller, $options) @@ -207,7 +213,7 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceStore($name, $base, $controller, $options) @@ -225,11 +231,13 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceShow($name, $base, $controller, $options) { + $name = $this->getShallowName($name, $options); + $uri = $this->getResourceUri($name).'/{'.$base.'}'; $action = $this->getResourceAction($name, $controller, 'show', $options); @@ -243,11 +251,13 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceEdit($name, $base, $controller, $options) { + $name = $this->getShallowName($name, $options); + $uri = $this->getResourceUri($name).'/{'.$base.'}/'.static::$verbs['edit']; $action = $this->getResourceAction($name, $controller, 'edit', $options); @@ -261,11 +271,13 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceUpdate($name, $base, $controller, $options) { + $name = $this->getShallowName($name, $options); + $uri = $this->getResourceUri($name).'/{'.$base.'}'; $action = $this->getResourceAction($name, $controller, 'update', $options); @@ -279,11 +291,13 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceDestroy($name, $base, $controller, $options) { + $name = $this->getShallowName($name, $options); + $uri = $this->getResourceUri($name).'/{'.$base.'}'; $action = $this->getResourceAction($name, $controller, 'destroy', $options); @@ -291,6 +305,38 @@ class ResourceRegistrar return $this->router->delete($uri, $action); } + /** + * Get the name for a given resource with shallowness applied when applicable. + * + * @param string $name + * @param array $options + * @return string + */ + protected function getShallowName($name, $options) + { + return isset($options['shallow']) && $options['shallow'] + ? last(explode('.', $name)) + : $name; + } + + /** + * Set the route's binding fields if the resource is scoped. + * + * @param \Illuminate\Routing\Route $route + * @param array $bindingFields + * @return void + */ + protected function setResourceBindingFields($route, $bindingFields) + { + preg_match_all('/(?<={).*?(?=})/', $route->uri, $matches); + + $fields = array_fill_keys($matches[0], null); + + $route->setBindingFields(array_replace( + $fields, array_intersect_key($bindingFields, $fields) + )); + } + /** * Get the base resource URI for a given resource. * @@ -316,7 +362,7 @@ class ResourceRegistrar /** * Get the URI for a nested resource segment array. * - * @param array $segments + * @param array $segments * @return string */ protected function getNestedResourceUri(array $segments) @@ -354,7 +400,7 @@ class ResourceRegistrar * @param string $resource * @param string $controller * @param string $method - * @param array $options + * @param array $options * @return array */ protected function getResourceAction($resource, $controller, $method, $options) @@ -367,6 +413,14 @@ class ResourceRegistrar $action['middleware'] = $options['middleware']; } + if (isset($options['excluded_middleware'])) { + $action['excluded_middleware'] = $options['excluded_middleware']; + } + + if (isset($options['wheres'])) { + $action['where'] = $options['wheres']; + } + return $action; } @@ -375,7 +429,7 @@ class ResourceRegistrar * * @param string $resource * @param string $method - * @param array $options + * @param array $options * @return string */ protected function getResourceRouteName($resource, $method, $options) @@ -425,7 +479,7 @@ class ResourceRegistrar /** * Set the global parameter mapping. * - * @param array $parameters + * @param array $parameters * @return void */ public static function setParameters(array $parameters = []) diff --git a/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php b/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php index 58e04faa..97047faf 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php @@ -2,14 +2,14 @@ namespace Illuminate\Routing; -use Illuminate\Support\Str; -use Illuminate\Http\Response; -use Illuminate\Http\JsonResponse; -use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\View\Factory as ViewFactory; -use Symfony\Component\HttpFoundation\StreamedResponse; -use Symfony\Component\HttpFoundation\BinaryFileResponse; use Illuminate\Contracts\Routing\ResponseFactory as FactoryContract; +use Illuminate\Contracts\View\Factory as ViewFactory; +use Illuminate\Http\JsonResponse; +use Illuminate\Http\Response; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use Symfony\Component\HttpFoundation\BinaryFileResponse; +use Symfony\Component\HttpFoundation\StreamedResponse; class ResponseFactory implements FactoryContract { @@ -70,7 +70,7 @@ class ResponseFactory implements FactoryContract /** * Create a new response for a given view. * - * @param string $view + * @param string|array $view * @param array $data * @param int $status * @param array $headers @@ -78,6 +78,10 @@ class ResponseFactory implements FactoryContract */ public function view($view, $data = [], $status = 200, array $headers = []) { + if (is_array($view)) { + return $this->make($this->view->first($view, $data), $status, $headers); + } + return $this->make($this->view->make($view, $data), $status, $headers); } @@ -208,7 +212,7 @@ class ResponseFactory implements FactoryContract * Create a new redirect response to a named route. * * @param string $route - * @param array $parameters + * @param mixed $parameters * @param int $status * @param array $headers * @return \Illuminate\Http\RedirectResponse @@ -222,7 +226,7 @@ class ResponseFactory implements FactoryContract * Create a new redirect response to a controller action. * * @param string $action - * @param array $parameters + * @param mixed $parameters * @param int $status * @param array $headers * @return \Illuminate\Http\RedirectResponse diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Route.php b/vendor/laravel/framework/src/Illuminate/Routing/Route.php index 12127ca6..3c5da53a 100755 --- a/vendor/laravel/framework/src/Illuminate/Routing/Route.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Route.php @@ -3,19 +3,20 @@ namespace Illuminate\Routing; use Closure; -use LogicException; -use ReflectionFunction; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Http\Request; use Illuminate\Container\Container; -use Illuminate\Support\Traits\Macroable; -use Illuminate\Routing\Matching\UriValidator; +use Illuminate\Http\Exceptions\HttpResponseException; +use Illuminate\Http\Request; +use Illuminate\Routing\Contracts\ControllerDispatcher as ControllerDispatcherContract; use Illuminate\Routing\Matching\HostValidator; use Illuminate\Routing\Matching\MethodValidator; use Illuminate\Routing\Matching\SchemeValidator; -use Illuminate\Http\Exceptions\HttpResponseException; -use Illuminate\Routing\Contracts\ControllerDispatcher as ControllerDispatcherContract; +use Illuminate\Routing\Matching\UriValidator; +use Illuminate\Support\Arr; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use LogicException; +use ReflectionFunction; +use Symfony\Component\Routing\Route as SymfonyRoute; class Route { @@ -73,7 +74,7 @@ class Route /** * The array of matched parameters. * - * @var array + * @var array|null */ public $parameters; @@ -91,6 +92,20 @@ class Route */ protected $originalParameters; + /** + * Indicates the maximum number of seconds the route should acquire a session lock for. + * + * @var int|null + */ + protected $lockSeconds; + + /** + * Indicates the maximum number of seconds the route should wait while attempting to acquire a session lock. + * + * @var int|null + */ + protected $waitSeconds; + /** * The computed gathered middleware. * @@ -119,6 +134,13 @@ class Route */ protected $container; + /** + * The fields that implicit binding should use for a given parameter. + * + * @var array + */ + protected $bindingFields = []; + /** * The validators used by the routes. * @@ -138,15 +160,13 @@ class Route { $this->uri = $uri; $this->methods = (array) $methods; - $this->action = $this->parseAction($action); + $this->action = Arr::except($this->parseAction($action), ['prefix']); if (in_array('GET', $this->methods) && ! in_array('HEAD', $this->methods)) { $this->methods[] = 'HEAD'; } - if (isset($this->action['prefix'])) { - $this->prefix($this->action['prefix']); - } + $this->prefix(is_array($action) ? Arr::get($action, 'prefix') : ''); } /** @@ -257,7 +277,7 @@ class Route } /** - * Determine if the route matches given request. + * Determine if the route matches a given request. * * @param \Illuminate\Http\Request $request * @param bool $includingMethod @@ -288,7 +308,7 @@ class Route protected function compileRoute() { if (! $this->compiled) { - $this->compiled = (new RouteCompiler($this))->compile(); + $this->compiled = $this->toSymfonyRoute()->compile(); } return $this->compiled; @@ -325,7 +345,7 @@ class Route /** * Determine a given parameter exists from the route. * - * @param string $name + * @param string $name * @return bool */ public function hasParameter($name) @@ -341,8 +361,8 @@ class Route * Get a given parameter from the route. * * @param string $name - * @param mixed $default - * @return string|object + * @param string|object|null $default + * @return string|object|null */ public function parameter($name, $default = null) { @@ -353,8 +373,8 @@ class Route * Get original value of a given parameter from the route. * * @param string $name - * @param mixed $default - * @return string + * @param string|null $default + * @return string|null */ public function originalParameter($name, $default = null) { @@ -365,7 +385,7 @@ class Route * Set a parameter to the given value. * * @param string $name - * @param mixed $value + * @param string|object|null $value * @return void */ public function setParameter($name, $value) @@ -471,6 +491,59 @@ class Route return RouteSignatureParameters::fromAction($this->action, $subClass); } + /** + * Get the binding field for the given parameter. + * + * @param string|int $parameter + * @return string|null + */ + public function bindingFieldFor($parameter) + { + $fields = is_int($parameter) ? array_values($this->bindingFields) : $this->bindingFields; + + return $fields[$parameter] ?? null; + } + + /** + * Get the binding fields for the route. + * + * @return array + */ + public function bindingFields() + { + return $this->bindingFields ?? []; + } + + /** + * Set the binding fields for the route. + * + * @param array $bindingFields + * @return $this + */ + public function setBindingFields(array $bindingFields) + { + $this->bindingFields = $bindingFields; + + return $this; + } + + /** + * Get the parent parameter of the given parameter. + * + * @param string $parameter + * @return string + */ + public function parentOfParameter($parameter) + { + $key = array_search($parameter, array_keys($this->parameters)); + + if ($key === 0) { + return; + } + + return array_values($this->parameters)[$key - 1]; + } + /** * Set a default value for the route. * @@ -485,11 +558,24 @@ class Route return $this; } + /** + * Set the default values for the route. + * + * @param array $defaults + * @return $this + */ + public function setDefaults(array $defaults) + { + $this->defaults = $defaults; + + return $this; + } + /** * Set a regular expression requirement on the route. * * @param array|string $name - * @param string $expression + * @param string|null $expression * @return $this */ public function where($name, $expression = null) @@ -519,7 +605,7 @@ class Route * @param array $wheres * @return $this */ - protected function whereArray(array $wheres) + public function setWheres(array $wheres) { foreach ($wheres as $name => $expression) { $this->where($name, $expression); @@ -540,6 +626,19 @@ class Route return $this; } + /** + * Set the fallback value. + * + * @param bool $isFallback + * @return $this + */ + public function setFallback($isFallback) + { + $this->isFallback = $isFallback; + + return $this; + } + /** * Get the HTTP verbs the route responds to. * @@ -592,7 +691,13 @@ class Route return $this->getDomain(); } - $this->action['domain'] = $domain; + $parsed = RouteUri::parse($domain); + + $this->action['domain'] = $parsed->uri; + + $this->bindingFields = array_merge( + $this->bindingFields, $parsed->bindingFields + ); return $this; } @@ -611,7 +716,7 @@ class Route /** * Get the prefix of the route instance. * - * @return string + * @return string|null */ public function getPrefix() { @@ -626,11 +731,24 @@ class Route */ public function prefix($prefix) { + $this->updatePrefixOnAction($prefix); + $uri = rtrim($prefix, '/').'/'.ltrim($this->uri, '/'); - $this->uri = trim($uri, '/'); + return $this->setUri($uri !== '/' ? trim($uri, '/') : $uri); + } - return $this; + /** + * Update the "prefix" attribute on the action array. + * + * @param string $prefix + * @return void + */ + protected function updatePrefixOnAction($prefix) + { + if (! empty($newPrefix = trim(rtrim($prefix, '/').'/'.ltrim($this->action['prefix'] ?? '', '/'), '/'))) { + $this->action['prefix'] = $newPrefix; + } } /** @@ -651,15 +769,30 @@ class Route */ public function setUri($uri) { - $this->uri = $uri; + $this->uri = $this->parseUri($uri); return $this; } + /** + * Parse the route URI and normalize / store any implicit binding fields. + * + * @param string $uri + * @return string + */ + protected function parseUri($uri) + { + $this->bindingFields = []; + + return tap(RouteUri::parse($uri), function ($uri) { + $this->bindingFields = $uri->bindingFields; + })->uri; + } + /** * Get the name of the route instance. * - * @return string + * @return string|null */ public function getName() { @@ -774,6 +907,10 @@ class Route { $this->action = $action; + if (isset($this->action['domain'])) { + $this->domain($this->action['domain']); + } + return $this; } @@ -790,15 +927,15 @@ class Route $this->computedMiddleware = []; - return $this->computedMiddleware = array_unique(array_merge( + return $this->computedMiddleware = Router::uniqueMiddleware(array_merge( $this->middleware(), $this->controllerMiddleware() - ), SORT_REGULAR); + )); } /** * Get or set the middlewares attached to the route. * - * @param array|string|null $middleware + * @param array|string|null $middleware * @return $this|array */ public function middleware($middleware = null) @@ -834,6 +971,76 @@ class Route ); } + /** + * Specify middleware that should be removed from the given route. + * + * @param array|string $middleware + * @return $this|array + */ + public function withoutMiddleware($middleware) + { + $this->action['excluded_middleware'] = array_merge( + (array) ($this->action['excluded_middleware'] ?? []), Arr::wrap($middleware) + ); + + return $this; + } + + /** + * Get the middleware should be removed from the route. + * + * @return array + */ + public function excludedMiddleware() + { + return (array) ($this->action['excluded_middleware'] ?? []); + } + + /** + * Specify that the route should not allow concurrent requests from the same session. + * + * @param int|null $lockSeconds + * @param int|null $waitSeconds + * @return $this + */ + public function block($lockSeconds = 10, $waitSeconds = 10) + { + $this->lockSeconds = $lockSeconds; + $this->waitSeconds = $waitSeconds; + + return $this; + } + + /** + * Specify that the route should allow concurrent requests from the same session. + * + * @return $this + */ + public function withoutBlocking() + { + return $this->block(null, null); + } + + /** + * Get the maximum number of seconds the route's session lock should be held for. + * + * @return int|null + */ + public function locksFor() + { + return $this->lockSeconds; + } + + /** + * Get the maximum number of seconds to wait while attempting to acquire a session lock. + * + * @return int|null + */ + public function waitsFor() + { + return $this->waitSeconds; + } + /** * Get the dispatcher for the route's controller. * @@ -868,6 +1075,32 @@ class Route ]; } + /** + * Convert the route to a Symfony route. + * + * @return \Symfony\Component\Routing\Route + */ + public function toSymfonyRoute() + { + return new SymfonyRoute( + preg_replace('/\{(\w+?)\?\}/', '{$1}', $this->uri()), $this->getOptionalParameterNames(), + $this->wheres, ['utf8' => true, 'action' => $this->action], + $this->getDomain() ?: '', [], $this->methods + ); + } + + /** + * Get the optional parameter names for the route. + * + * @return array + */ + protected function getOptionalParameterNames() + { + preg_match_all('/\{(\w+?)\?\}/', $this->uri(), $matches); + + return isset($matches[1]) ? array_fill_keys($matches[1], null) : []; + } + /** * Get the compiled version of the route. * diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteAction.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteAction.php index 9c84ff1a..9d7eb76a 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteAction.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteAction.php @@ -2,9 +2,10 @@ namespace Illuminate\Routing; -use LogicException; use Illuminate\Support\Arr; +use Illuminate\Support\Reflector; use Illuminate\Support\Str; +use LogicException; use UnexpectedValueException; class RouteAction @@ -28,7 +29,7 @@ class RouteAction // If the action is already a Closure instance, we will just set that instance // as the "uses" property, because there is nothing else we need to do when // it is available. Otherwise we will need to find it in the action list. - if (is_callable($action)) { + if (Reflector::isCallable($action, true)) { return ! is_array($action) ? ['uses' => $action] : [ 'uses' => $action[0].'@'.$action[1], 'controller' => $action[0].'@'.$action[1], @@ -54,6 +55,8 @@ class RouteAction * * @param string $uri * @return array + * + * @throws \LogicException */ protected static function missingAction($uri) { @@ -71,14 +74,14 @@ class RouteAction protected static function findCallable(array $action) { return Arr::first($action, function ($value, $key) { - return is_callable($value) && is_numeric($key); + return Reflector::isCallable($value) && is_numeric($key); }); } /** * Make an action for an invokable controller. * - * @param string $action + * @param string $action * @return string * * @throws \UnexpectedValueException diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteBinding.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteBinding.php index e2f284c3..133a84a4 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteBinding.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteBinding.php @@ -3,8 +3,8 @@ namespace Illuminate\Routing; use Closure; -use Illuminate\Support\Str; use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Support\Str; class RouteBinding { @@ -41,7 +41,7 @@ class RouteBinding $callable = [$container->make($class), $method]; - return call_user_func($callable, $value, $route); + return $callable($value, $route); }; } @@ -52,6 +52,8 @@ class RouteBinding * @param string $class * @param \Closure|null $callback * @return \Closure + * + * @throws \Illuminate\Database\Eloquent\ModelNotFoundException */ public static function forModel($container, $class, $callback = null) { @@ -73,7 +75,7 @@ class RouteBinding // what we should do when the model is not found. This just gives these // developer a little greater flexibility to decide what will happen. if ($callback instanceof Closure) { - return call_user_func($callback, $value); + return $callback($value); } throw (new ModelNotFoundException)->setModel($class); diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php index 265d2823..7e6f98bc 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php @@ -2,16 +2,11 @@ namespace Illuminate\Routing; -use Countable; -use ArrayIterator; -use IteratorAggregate; -use Illuminate\Support\Arr; +use Illuminate\Container\Container; use Illuminate\Http\Request; -use Illuminate\Http\Response; -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException; +use Illuminate\Support\Arr; -class RouteCollection implements Countable, IteratorAggregate +class RouteCollection extends AbstractRouteCollection { /** * An array of the routes keyed by method. @@ -21,23 +16,23 @@ class RouteCollection implements Countable, IteratorAggregate protected $routes = []; /** - * An flattened array of all of the routes. + * A flattened array of all of the routes. * - * @var array + * @var \Illuminate\Routing\Route[] */ protected $allRoutes = []; /** * A look-up table of routes by their names. * - * @var array + * @var \Illuminate\Routing\Route[] */ protected $nameList = []; /** * A look-up table of routes by controller action. * - * @var array + * @var \Illuminate\Routing\Route[] */ protected $actionList = []; @@ -152,6 +147,7 @@ class RouteCollection implements Countable, IteratorAggregate * @param \Illuminate\Http\Request $request * @return \Illuminate\Routing\Route * + * @throws \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException */ public function match(Request $request) @@ -163,103 +159,14 @@ class RouteCollection implements Countable, IteratorAggregate // by the consumer. Otherwise we will check for routes with another verb. $route = $this->matchAgainstRoutes($routes, $request); - if (! is_null($route)) { - return $route->bind($request); - } - - // If no route was found we will now check if a matching route is specified by - // another HTTP verb. If it is we will need to throw a MethodNotAllowed and - // inform the user agent of which HTTP verb it should use for this route. - $others = $this->checkForAlternateVerbs($request); - - if (count($others) > 0) { - return $this->getRouteForMethods($request, $others); - } - - throw new NotFoundHttpException; - } - - /** - * Determine if a route in the array matches the request. - * - * @param array $routes - * @param \Illuminate\Http\Request $request - * @param bool $includingMethod - * @return \Illuminate\Routing\Route|null - */ - protected function matchAgainstRoutes(array $routes, $request, $includingMethod = true) - { - [$fallbacks, $routes] = collect($routes)->partition(function ($route) { - return $route->isFallback; - }); - - return $routes->merge($fallbacks)->first(function ($value) use ($request, $includingMethod) { - return $value->matches($request, $includingMethod); - }); - } - - /** - * Determine if any routes match on another HTTP verb. - * - * @param \Illuminate\Http\Request $request - * @return array - */ - protected function checkForAlternateVerbs($request) - { - $methods = array_diff(Router::$verbs, [$request->getMethod()]); - - // Here we will spin through all verbs except for the current request verb and - // check to see if any routes respond to them. If they do, we will return a - // proper error response with the correct headers on the response string. - $others = []; - - foreach ($methods as $method) { - if (! is_null($this->matchAgainstRoutes($this->get($method), $request, false))) { - $others[] = $method; - } - } - - return $others; - } - - /** - * Get a route (if necessary) that responds when other available methods are present. - * - * @param \Illuminate\Http\Request $request - * @param array $methods - * @return \Illuminate\Routing\Route - * - * @throws \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException - */ - protected function getRouteForMethods($request, array $methods) - { - if ($request->method() === 'OPTIONS') { - return (new Route('OPTIONS', $request->path(), function () use ($methods) { - return new Response('', 200, ['Allow' => implode(',', $methods)]); - }))->bind($request); - } - - $this->methodNotAllowed($methods); - } - - /** - * Throw a method not allowed HTTP exception. - * - * @param array $others - * @return void - * - * @throws \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException - */ - protected function methodNotAllowed(array $others) - { - throw new MethodNotAllowedHttpException($others); + return $this->handleMatchedRoute($request, $route); } /** * Get routes from the collection by method. * * @param string|null $method - * @return array + * @return \Illuminate\Routing\Route[] */ public function get($method = null) { @@ -302,7 +209,7 @@ class RouteCollection implements Countable, IteratorAggregate /** * Get all of the routes in the collection. * - * @return array + * @return \Illuminate\Routing\Route[] */ public function getRoutes() { @@ -322,7 +229,7 @@ class RouteCollection implements Countable, IteratorAggregate /** * Get all of the routes keyed by their name. * - * @return array + * @return \Illuminate\Routing\Route[] */ public function getRoutesByName() { @@ -330,22 +237,32 @@ class RouteCollection implements Countable, IteratorAggregate } /** - * Get an iterator for the items. + * Convert the collection to a Symfony RouteCollection instance. * - * @return \ArrayIterator + * @return \Symfony\Component\Routing\RouteCollection */ - public function getIterator() + public function toSymfonyRouteCollection() { - return new ArrayIterator($this->getRoutes()); + $symfonyRoutes = parent::toSymfonyRouteCollection(); + + $this->refreshNameLookups(); + + return $symfonyRoutes; } /** - * Count the number of items in the collection. + * Convert the collection to a CompiledRouteCollection instance. * - * @return int + * @param \Illuminate\Routing\Router $router + * @param \Illuminate\Container\Container $container + * @return \Illuminate\Routing\CompiledRouteCollection */ - public function count() + public function toCompiledRouteCollection(Router $router, Container $container) { - return count($this->getRoutes()); + ['compiled' => $compiled, 'attributes' => $attributes] = $this->compile(); + + return (new CompiledRouteCollection($compiled, $attributes)) + ->setRouter($router) + ->setContainer($container); } } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteCollectionInterface.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteCollectionInterface.php new file mode 100644 index 00000000..8e25d0fa --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteCollectionInterface.php @@ -0,0 +1,98 @@ +route = $route; - } - - /** - * Compile the route. - * - * @return \Symfony\Component\Routing\CompiledRoute - */ - public function compile() - { - $optionals = $this->getOptionalParameters(); - - $uri = preg_replace('/\{(\w+?)\?\}/', '{$1}', $this->route->uri()); - - return ( - new SymfonyRoute($uri, $optionals, $this->route->wheres, ['utf8' => true], $this->route->getDomain() ?: '') - )->compile(); - } - - /** - * Get the optional parameters for the route. - * - * @return array - */ - protected function getOptionalParameters() - { - preg_match_all('/\{(\w+?)\?\}/', $this->route->uri(), $matches); - - return isset($matches[1]) ? array_fill_keys($matches[1], null) : []; - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php index 2db31c07..122f266c 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php @@ -2,10 +2,11 @@ namespace Illuminate\Routing; +use Illuminate\Support\Arr; +use Illuminate\Support\Reflector; +use ReflectionFunctionAbstract; use ReflectionMethod; use ReflectionParameter; -use Illuminate\Support\Arr; -use ReflectionFunctionAbstract; trait RouteDependencyResolverTrait { @@ -41,12 +42,12 @@ trait RouteDependencyResolverTrait $values = array_values($parameters); - foreach ($reflector->getParameters() as $key => $parameter) { - $instance = $this->transformDependency( - $parameter, $parameters - ); + $skippableValue = new \stdClass; - if (! is_null($instance)) { + foreach ($reflector->getParameters() as $key => $parameter) { + $instance = $this->transformDependency($parameter, $parameters, $skippableValue); + + if ($instance !== $skippableValue) { $instanceCount++; $this->spliceIntoParameters($parameters, $key, $instance); @@ -64,20 +65,21 @@ trait RouteDependencyResolverTrait * * @param \ReflectionParameter $parameter * @param array $parameters + * @param object $skippableValue * @return mixed */ - protected function transformDependency(ReflectionParameter $parameter, $parameters) + protected function transformDependency(ReflectionParameter $parameter, $parameters, $skippableValue) { - $class = $parameter->getClass(); + $className = Reflector::getParameterClassName($parameter); // If the parameter has a type-hinted class, we will check to see if it is already in // the list of parameters. If it is we will just skip it as it is probably a model // binding and we do not want to mess with those; otherwise, we resolve it here. - if ($class && ! $this->alreadyInParameters($class->name, $parameters)) { - return $parameter->isDefaultValueAvailable() - ? $parameter->getDefaultValue() - : $this->container->make($class->name); + if ($className && ! $this->alreadyInParameters($className, $parameters)) { + return $parameter->isDefaultValueAvailable() ? null : $this->container->make($className); } + + return $skippableValue; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteFileRegistrar.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteFileRegistrar.php new file mode 100644 index 00000000..7670b10e --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteFileRegistrar.php @@ -0,0 +1,37 @@ +router = $router; + } + + /** + * Require the given routes file. + * + * @param string $routes + * @return void + */ + public function register($routes) + { + $router = $this->router; + + require $routes; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteGroup.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteGroup.php index 4041f1f7..5b96469d 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteGroup.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteGroup.php @@ -11,9 +11,10 @@ class RouteGroup * * @param array $new * @param array $old + * @param bool $prependExistingPrefix * @return array */ - public static function merge($new, $old) + public static function merge($new, $old, $prependExistingPrefix = true) { if (isset($new['domain'])) { unset($old['domain']); @@ -21,7 +22,7 @@ class RouteGroup $new = array_merge(static::formatAs($new, $old), [ 'namespace' => static::formatNamespace($new, $old), - 'prefix' => static::formatPrefix($new, $old), + 'prefix' => static::formatPrefix($new, $old, $prependExistingPrefix), 'where' => static::formatWhere($new, $old), ]); @@ -53,13 +54,18 @@ class RouteGroup * * @param array $new * @param array $old + * @param bool $prependExistingPrefix * @return string|null */ - protected static function formatPrefix($new, $old) + protected static function formatPrefix($new, $old, $prependExistingPrefix = true) { $old = $old['prefix'] ?? null; - return isset($new['prefix']) ? trim($old, '/').'/'.trim($new['prefix'], '/') : $old; + if ($prependExistingPrefix) { + return isset($new['prefix']) ? trim($old, '/').'/'.trim($new['prefix'], '/') : $old; + } else { + return isset($new['prefix']) ? trim($new['prefix'], '/').'/'.trim($old, '/') : $old; + } } /** diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php index 53e766ef..8c3968e0 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php @@ -32,9 +32,6 @@ class RouteParameterBinder */ public function parameters($request) { - // If the route has a regular expression for the host part of the URI, we will - // compile that and get the parameter matches for this domain. We will then - // merge them into this parameters array so that this array is completed. $parameters = $this->bindPathParameters($request); // If the route has a regular expression for the host part of the URI, we will diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php index 81e2385f..d533d8d4 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php @@ -2,9 +2,10 @@ namespace Illuminate\Routing; -use Closure; use BadMethodCallException; +use Closure; use Illuminate\Support\Arr; +use Illuminate\Support\Reflector; use InvalidArgumentException; /** @@ -110,6 +111,19 @@ class RouteRegistrar return $this->router->resource($name, $controller, $this->attributes + $options); } + /** + * Route an API resource to a controller. + * + * @param string $name + * @param string $controller + * @param array $options + * @return \Illuminate\Routing\PendingResourceRegistration + */ + public function apiResource($name, $controller, array $options = []) + { + return $this->router->apiResource($name, $controller, $this->attributes + $options); + } + /** * Create a route group with shared attributes. * @@ -167,6 +181,15 @@ class RouteRegistrar $action = ['uses' => $action]; } + if (is_array($action) && + ! Arr::isAssoc($action) && + Reflector::isCallable($action)) { + $action = [ + 'uses' => $action[0].'@'.$action[1], + 'controller' => $action[0].'@'.$action[1], + ]; + } + return array_merge($this->attributes, $action); } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php index 59d660f7..bd7e932f 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php @@ -2,9 +2,10 @@ namespace Illuminate\Routing; -use ReflectionMethod; -use ReflectionFunction; +use Illuminate\Support\Reflector; use Illuminate\Support\Str; +use ReflectionFunction; +use ReflectionMethod; class RouteSignatureParameters { @@ -12,7 +13,7 @@ class RouteSignatureParameters * Extract the route action's signature parameters. * * @param array $action - * @param string $subClass + * @param string|null $subClass * @return array */ public static function fromAction(array $action, $subClass = null) @@ -22,7 +23,7 @@ class RouteSignatureParameters : (new ReflectionFunction($action['uses']))->getParameters(); return is_null($subClass) ? $parameters : array_filter($parameters, function ($p) use ($subClass) { - return $p->getClass() && $p->getClass()->isSubclassOf($subClass); + return Reflector::isParameterSubclassOf($p, $subClass); }); } @@ -36,7 +37,7 @@ class RouteSignatureParameters { [$class, $method] = Str::parseCallback($uses); - if (! method_exists($class, $method) && is_callable($class, $method)) { + if (! method_exists($class, $method) && Reflector::isCallable($class, $method)) { return []; } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteUri.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteUri.php new file mode 100644 index 00000000..ad69527e --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteUri.php @@ -0,0 +1,62 @@ +uri = $uri; + $this->bindingFields = $bindingFields; + } + + /** + * Parse the given URI. + * + * @param string $uri + * @return static + */ + public static function parse($uri) + { + preg_match_all('/\{([\w\:]+?)\??\}/', $uri, $matches); + + $bindingFields = []; + + foreach ($matches[0] as $match) { + if (strpos($match, ':') === false) { + continue; + } + + $segments = explode(':', trim($match, '{}?')); + + $bindingFields[$segments[0]] = $segments[1]; + + $uri = strpos($match, '?') !== false + ? str_replace($match, '{'.$segments[0].'?}', $uri) + : str_replace($match, '{'.$segments[0].'}', $uri); + } + + return new static($uri, $bindingFields); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteUrlGenerator.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteUrlGenerator.php index 33d406ec..5cc03c1e 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteUrlGenerator.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteUrlGenerator.php @@ -2,9 +2,9 @@ namespace Illuminate\Routing; +use Illuminate\Routing\Exceptions\UrlGenerationException; use Illuminate\Support\Arr; use Illuminate\Support\Str; -use Illuminate\Routing\Exceptions\UrlGenerationException; class RouteUrlGenerator { @@ -197,9 +197,12 @@ class RouteUrlGenerator $path = $this->replaceNamedParameters($path, $parameters); $path = preg_replace_callback('/\{.*?\}/', function ($match) use (&$parameters) { - return (empty($parameters) && ! Str::endsWith($match[0], '?}')) + // Reset only the numeric keys... + $parameters = array_merge($parameters); + + return (! isset($parameters[0]) && ! Str::endsWith($match[0], '?}')) ? $match[0] - : array_shift($parameters); + : Arr::pull($parameters, 0); }, $path); return trim(preg_replace('/\{.*?\?\}/', '', $path), '/'); @@ -214,11 +217,13 @@ class RouteUrlGenerator */ protected function replaceNamedParameters($path, &$parameters) { - return preg_replace_callback('/\{(.*?)\??\}/', function ($m) use (&$parameters) { - if (isset($parameters[$m[1]])) { + return preg_replace_callback('/\{(.*?)(\?)?\}/', function ($m) use (&$parameters) { + if (isset($parameters[$m[1]]) && $parameters[$m[1]] !== '') { return Arr::pull($parameters, $m[1]); } elseif (isset($this->defaultParameters[$m[1]])) { return $this->defaultParameters[$m[1]]; + } elseif (isset($parameters[$m[1]])) { + Arr::pull($parameters, $m[1]); } return $m[0]; @@ -274,7 +279,9 @@ class RouteUrlGenerator ); } - return '?'.trim($query, '&'); + $query = trim($query, '&'); + + return $query === '' ? '' : "?{$query}"; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Router.php b/vendor/laravel/framework/src/Illuminate/Routing/Router.php index 8c6b5594..1e11f19b 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Router.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Router.php @@ -2,31 +2,32 @@ namespace Illuminate\Routing; -use Closure; use ArrayObject; -use JsonSerializable; -use Illuminate\Support\Str; +use Closure; +use Illuminate\Container\Container; +use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Contracts\Routing\BindingRegistrar; +use Illuminate\Contracts\Routing\Registrar as RegistrarContract; +use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Contracts\Support\Jsonable; +use Illuminate\Contracts\Support\Responsable; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; -use Illuminate\Http\JsonResponse; +use Illuminate\Routing\Events\RouteMatched; use Illuminate\Support\Collection; -use Illuminate\Container\Container; -use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Str; use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\Support\Jsonable; -use Illuminate\Contracts\Events\Dispatcher; -use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Contracts\Support\Responsable; -use Illuminate\Contracts\Routing\BindingRegistrar; +use JsonSerializable; use Psr\Http\Message\ResponseInterface as PsrResponseInterface; -use Illuminate\Contracts\Routing\Registrar as RegistrarContract; use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory; use Symfony\Component\HttpFoundation\Response as SymfonyResponse; /** * @mixin \Illuminate\Routing\RouteRegistrar */ -class Router implements RegistrarContract, BindingRegistrar +class Router implements BindingRegistrar, RegistrarContract { use Macroable { __call as macroCall; @@ -49,7 +50,7 @@ class Router implements RegistrarContract, BindingRegistrar /** * The route collection instance. * - * @var \Illuminate\Routing\RouteCollection + * @var \Illuminate\Routing\RouteCollectionInterface */ protected $routes; @@ -122,7 +123,7 @@ class Router implements RegistrarContract, BindingRegistrar * Create a new Router instance. * * @param \Illuminate\Contracts\Events\Dispatcher $events - * @param \Illuminate\Container\Container $container + * @param \Illuminate\Container\Container|null $container * @return void */ public function __construct(Dispatcher $events, Container $container = null) @@ -136,7 +137,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new GET route with the router. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function get($uri, $action = null) @@ -148,7 +149,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new POST route with the router. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function post($uri, $action = null) @@ -160,7 +161,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new PUT route with the router. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function put($uri, $action = null) @@ -172,7 +173,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new PATCH route with the router. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function patch($uri, $action = null) @@ -184,7 +185,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new DELETE route with the router. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function delete($uri, $action = null) @@ -196,7 +197,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new OPTIONS route with the router. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function options($uri, $action = null) @@ -208,7 +209,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new route responding to all verbs. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function any($uri, $action = null) @@ -219,7 +220,7 @@ class Router implements RegistrarContract, BindingRegistrar /** * Register a new Fallback route with the router. * - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function fallback($action) @@ -278,7 +279,7 @@ class Router implements RegistrarContract, BindingRegistrar * * @param array|string $methods * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function match($methods, $uri, $action = null) @@ -383,7 +384,7 @@ class Router implements RegistrarContract, BindingRegistrar */ protected function updateGroupStack(array $attributes) { - if (! empty($this->groupStack)) { + if ($this->hasGroupStack()) { $attributes = $this->mergeWithLastGroup($attributes); } @@ -394,11 +395,12 @@ class Router implements RegistrarContract, BindingRegistrar * Merge the given array with the last group stack. * * @param array $new + * @param bool $prependExistingPrefix * @return array */ - public function mergeWithLastGroup($new) + public function mergeWithLastGroup($new, $prependExistingPrefix = true) { - return RouteGroup::merge($new, end($this->groupStack)); + return RouteGroup::merge($new, end($this->groupStack), $prependExistingPrefix); } /** @@ -412,9 +414,7 @@ class Router implements RegistrarContract, BindingRegistrar if ($routes instanceof Closure) { $routes($this); } else { - $router = $this; - - require $routes; + (new RouteFileRegistrar($this))->register($routes); } } @@ -425,7 +425,7 @@ class Router implements RegistrarContract, BindingRegistrar */ public function getLastGroupPrefix() { - if (! empty($this->groupStack)) { + if ($this->hasGroupStack()) { $last = end($this->groupStack); return $last['prefix'] ?? ''; @@ -439,7 +439,7 @@ class Router implements RegistrarContract, BindingRegistrar * * @param array|string $methods * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function addRoute($methods, $uri, $action) @@ -483,7 +483,7 @@ class Router implements RegistrarContract, BindingRegistrar /** * Determine if the action is routing to a controller. * - * @param array $action + * @param mixed $action * @return bool */ protected function actionReferencesController($action) @@ -510,7 +510,7 @@ class Router implements RegistrarContract, BindingRegistrar // Here we'll merge any group "uses" statement if necessary so that the action // has the proper clause for this property. Then we can simply set the name // of the controller on the action and return the action array for usage. - if (! empty($this->groupStack)) { + if ($this->hasGroupStack()) { $action['uses'] = $this->prependGroupNamespace($action['uses']); } @@ -544,7 +544,7 @@ class Router implements RegistrarContract, BindingRegistrar * @param mixed $action * @return \Illuminate\Routing\Route */ - protected function newRoute($methods, $uri, $action) + public function newRoute($methods, $uri, $action) { return (new Route($methods, $uri, $action)) ->setRouter($this) @@ -585,14 +585,17 @@ class Router implements RegistrarContract, BindingRegistrar */ protected function mergeGroupAttributesIntoRoute($route) { - $route->setAction($this->mergeWithLastGroup($route->getAction())); + $route->setAction($this->mergeWithLastGroup( + $route->getAction(), + $prependExistingPrefix = false + )); } /** * Return the response returned by the given route. * * @param string $name - * @return mixed + * @return \Symfony\Component\HttpFoundation\Response */ public function respondWithRoute($name) { @@ -605,7 +608,7 @@ class Router implements RegistrarContract, BindingRegistrar * Dispatch the request to the application. * * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse + * @return \Symfony\Component\HttpFoundation\Response */ public function dispatch(Request $request) { @@ -618,7 +621,7 @@ class Router implements RegistrarContract, BindingRegistrar * Dispatch the request to a route and return the response. * * @param \Illuminate\Http\Request $request - * @return mixed + * @return \Symfony\Component\HttpFoundation\Response */ public function dispatchToRoute(Request $request) { @@ -645,7 +648,7 @@ class Router implements RegistrarContract, BindingRegistrar * * @param \Illuminate\Http\Request $request * @param \Illuminate\Routing\Route $route - * @return mixed + * @return \Symfony\Component\HttpFoundation\Response */ protected function runRoute(Request $request, Route $route) { @@ -653,7 +656,7 @@ class Router implements RegistrarContract, BindingRegistrar return $route; }); - $this->events->dispatch(new Events\RouteMatched($route, $request)); + $this->events->dispatch(new RouteMatched($route, $request)); return $this->prepareResponse($request, $this->runRouteWithinStack($route, $request) @@ -692,9 +695,15 @@ class Router implements RegistrarContract, BindingRegistrar */ public function gatherRouteMiddleware(Route $route) { + $excluded = collect($route->excludedMiddleware())->map(function ($name) { + return (array) MiddlewareNameResolver::resolve($name, $this->middleware, $this->middlewareGroups); + })->flatten()->values()->all(); + $middleware = collect($route->gatherMiddleware())->map(function ($name) { return (array) MiddlewareNameResolver::resolve($name, $this->middleware, $this->middlewareGroups); - })->flatten(); + })->flatten()->reject(function ($name) use ($excluded) { + return in_array($name, $excluded, true); + })->values(); return $this->sortMiddleware($middleware); } @@ -715,7 +724,7 @@ class Router implements RegistrarContract, BindingRegistrar * * @param \Symfony\Component\HttpFoundation\Request $request * @param mixed $response - * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse + * @return \Symfony\Component\HttpFoundation\Response */ public function prepareResponse($request, $response) { @@ -727,7 +736,7 @@ class Router implements RegistrarContract, BindingRegistrar * * @param \Symfony\Component\HttpFoundation\Request $request * @param mixed $response - * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse + * @return \Symfony\Component\HttpFoundation\Response */ public static function toResponse($request, $response) { @@ -747,7 +756,7 @@ class Router implements RegistrarContract, BindingRegistrar is_array($response))) { $response = new JsonResponse($response); } elseif (! $response instanceof SymfonyResponse) { - $response = new Response($response); + $response = new Response($response, 200, ['Content-Type' => 'text/html']); } if ($response->getStatusCode() === Response::HTTP_NOT_MODIFIED) { @@ -762,6 +771,8 @@ class Router implements RegistrarContract, BindingRegistrar * * @param \Illuminate\Routing\Route $route * @return \Illuminate\Routing\Route + * + * @throws \Illuminate\Database\Eloquent\ModelNotFoundException */ public function substituteBindings($route) { @@ -779,6 +790,8 @@ class Router implements RegistrarContract, BindingRegistrar * * @param \Illuminate\Routing\Route $route * @return void + * + * @throws \Illuminate\Database\Eloquent\ModelNotFoundException */ public function substituteImplicitBindings($route) { @@ -792,6 +805,8 @@ class Router implements RegistrarContract, BindingRegistrar * @param string $value * @param \Illuminate\Routing\Route $route * @return mixed + * + * @throws \Illuminate\Database\Eloquent\ModelNotFoundException */ protected function performBinding($key, $value, $route) { @@ -929,8 +944,6 @@ class Router implements RegistrarContract, BindingRegistrar * @param string $class * @param \Closure|null $callback * @return void - * - * @throws \Illuminate\Database\Eloquent\ModelNotFoundException */ public function model($key, $class, Closure $callback = null) { @@ -1009,7 +1022,7 @@ class Router implements RegistrarContract, BindingRegistrar * Get a route parameter for the current route. * * @param string $key - * @param string $default + * @param string|null $default * @return mixed */ public function input($key, $default = null) @@ -1138,61 +1151,6 @@ class Router implements RegistrarContract, BindingRegistrar return $this->currentRouteAction() == $action; } - /** - * Register the typical authentication routes for an application. - * - * @param array $options - * @return void - */ - public function auth(array $options = []) - { - // Authentication Routes... - $this->get('login', 'Auth\LoginController@showLoginForm')->name('login'); - $this->post('login', 'Auth\LoginController@login'); - $this->post('logout', 'Auth\LoginController@logout')->name('logout'); - - // Registration Routes... - if ($options['register'] ?? true) { - $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); - $this->post('register', 'Auth\RegisterController@register'); - } - - // Password Reset Routes... - if ($options['reset'] ?? true) { - $this->resetPassword(); - } - - // Email Verification Routes... - if ($options['verify'] ?? false) { - $this->emailVerification(); - } - } - - /** - * Register the typical reset password routes for an application. - * - * @return void - */ - public function resetPassword() - { - $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request'); - $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email'); - $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset'); - $this->post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update'); - } - - /** - * Register the typical email verification routes for an application. - * - * @return void - */ - public function emailVerification() - { - $this->get('email/verify', 'Auth\VerificationController@show')->name('verification.notice'); - $this->get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify'); - $this->get('email/resend', 'Auth\VerificationController@resend')->name('verification.resend'); - } - /** * Set the unmapped global resource parameters to singular. * @@ -1229,7 +1187,7 @@ class Router implements RegistrarContract, BindingRegistrar /** * Get the underlying route collection. * - * @return \Illuminate\Routing\RouteCollection + * @return \Illuminate\Routing\RouteCollectionInterface */ public function getRoutes() { @@ -1253,6 +1211,44 @@ class Router implements RegistrarContract, BindingRegistrar $this->container->instance('routes', $this->routes); } + /** + * Set the compiled route collection instance. + * + * @param array $routes + * @return void + */ + public function setCompiledRoutes(array $routes) + { + $this->routes = (new CompiledRouteCollection($routes['compiled'], $routes['attributes'])) + ->setRouter($this) + ->setContainer($this->container); + + $this->container->instance('routes', $this->routes); + } + + /** + * Remove any duplicate middleware from the given array. + * + * @param array $middleware + * @return array + */ + public static function uniqueMiddleware(array $middleware) + { + $seen = []; + $result = []; + + foreach ($middleware as $value) { + $key = \is_object($value) ? \spl_object_id($value) : $value; + + if (! isset($seen[$key])) { + $seen[$key] = true; + $result[] = $value; + } + } + + return $result; + } + /** * Dynamically handle calls into the router instance. * diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php index 8eea5ca5..e2b6616f 100755 --- a/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php @@ -2,14 +2,17 @@ namespace Illuminate\Routing; -use Illuminate\Support\ServiceProvider; -use Psr\Http\Message\ResponseInterface; -use Zend\Diactoros\Response as PsrResponse; -use Psr\Http\Message\ServerRequestInterface; -use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory; -use Illuminate\Contracts\View\Factory as ViewFactoryContract; +use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Contracts\Routing\ResponseFactory as ResponseFactoryContract; +use Illuminate\Contracts\Routing\UrlGenerator as UrlGeneratorContract; +use Illuminate\Contracts\View\Factory as ViewFactoryContract; use Illuminate\Routing\Contracts\ControllerDispatcher as ControllerDispatcherContract; +use Illuminate\Support\ServiceProvider; +use Nyholm\Psr7\Factory\Psr17Factory; +use Nyholm\Psr7\Response as PsrResponse; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; +use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory; class RoutingServiceProvider extends ServiceProvider { @@ -56,17 +59,19 @@ class RoutingServiceProvider extends ServiceProvider // and all the registered routes will be available to the generator. $app->instance('routes', $routes); - $url = new UrlGenerator( + return new UrlGenerator( $routes, $app->rebinding( 'request', $this->requestRebinder() ), $app['config']['app.asset_url'] ); + }); + $this->app->extend('url', function (UrlGeneratorContract $url, $app) { // Next we will set a few service resolvers on the URL generator so it can // get the information it needs to function. This just provides some of // the convenience features to this URL generator like "signed" URLs. $url->setSessionResolver(function () { - return $this->app['session']; + return $this->app['session'] ?? null; }); $url->setKeyResolver(function () { @@ -125,7 +130,14 @@ class RoutingServiceProvider extends ServiceProvider protected function registerPsrRequest() { $this->app->bind(ServerRequestInterface::class, function ($app) { - return (new DiactorosFactory)->createRequest($app->make('request')); + if (class_exists(Psr17Factory::class) && class_exists(PsrHttpFactory::class)) { + $psr17Factory = new Psr17Factory; + + return (new PsrHttpFactory($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory)) + ->createRequest($app->make('request')); + } + + throw new BindingResolutionException('Unable to resolve PSR request. Please install the symfony/psr-http-message-bridge and nyholm/psr7 packages.'); }); } @@ -137,7 +149,11 @@ class RoutingServiceProvider extends ServiceProvider protected function registerPsrResponse() { $this->app->bind(ResponseInterface::class, function () { - return new PsrResponse; + if (class_exists(PsrResponse::class)) { + return new PsrResponse; + } + + throw new BindingResolutionException('Unable to resolve PSR response. Please install the nyholm/psr7 package.'); }); } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/SortedMiddleware.php b/vendor/laravel/framework/src/Illuminate/Routing/SortedMiddleware.php index 6af28d57..853378cf 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/SortedMiddleware.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/SortedMiddleware.php @@ -10,7 +10,7 @@ class SortedMiddleware extends Collection * Create a new Sorted Middleware container. * * @param array $priorityMap - * @param array|\Illuminate\Support\Collection $middlewares + * @param \Illuminate\Support\Collection|array $middlewares * @return void */ public function __construct(array $priorityMap, $middlewares) @@ -40,11 +40,9 @@ class SortedMiddleware extends Collection continue; } - $stripped = head(explode(':', $middleware)); - - if (in_array($stripped, $priorityMap)) { - $priorityIndex = array_search($stripped, $priorityMap); + $priorityIndex = $this->priorityMapIndex($priorityMap, $middleware); + if (! is_null($priorityIndex)) { // This middleware is in the priority map. If we have encountered another middleware // that was also in the priority map and was at a lower priority than the current // middleware, we will move this middleware to be above the previous encounter. @@ -58,11 +56,51 @@ class SortedMiddleware extends Collection // encountered from the map thus far. We'll save its current index plus its index // from the priority map so we can compare against them on the next iterations. $lastIndex = $index; + $lastPriorityIndex = $priorityIndex; } } - return array_values(array_unique($middlewares, SORT_REGULAR)); + return Router::uniqueMiddleware($middlewares); + } + + /** + * Calculate the priority map index of the middleware. + * + * @param array $priorityMap + * @param string $middleware + * @return int|null + */ + protected function priorityMapIndex($priorityMap, $middleware) + { + foreach ($this->middlewareNames($middleware) as $name) { + $priorityIndex = array_search($name, $priorityMap); + + if ($priorityIndex !== false) { + return $priorityIndex; + } + } + } + + /** + * Resolve the middleware names to look for in the priority array. + * + * @param string $middleware + * @return \Generator + */ + protected function middlewareNames($middleware) + { + $stripped = head(explode(':', $middleware)); + + yield $stripped; + + $interfaces = @class_implements($stripped); + + if ($interfaces !== false) { + foreach ($interfaces as $interface) { + yield $interface; + } + } } /** diff --git a/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php b/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php index 94a6f4db..971ef62f 100755 --- a/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php @@ -3,15 +3,16 @@ namespace Illuminate\Routing; use Closure; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Http\Request; -use InvalidArgumentException; -use Illuminate\Support\Carbon; -use Illuminate\Support\Traits\Macroable; -use Illuminate\Support\InteractsWithTime; -use Illuminate\Contracts\Routing\UrlRoutable; use Illuminate\Contracts\Routing\UrlGenerator as UrlGeneratorContract; +use Illuminate\Contracts\Routing\UrlRoutable; +use Illuminate\Http\Request; +use Illuminate\Support\Arr; +use Illuminate\Support\Carbon; +use Illuminate\Support\InteractsWithTime; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use InvalidArgumentException; +use Symfony\Component\Routing\Exception\RouteNotFoundException; class UrlGenerator implements UrlGeneratorContract { @@ -20,7 +21,7 @@ class UrlGenerator implements UrlGeneratorContract /** * The route collection. * - * @var \Illuminate\Routing\RouteCollection + * @var \Illuminate\Routing\RouteCollectionInterface */ protected $routes; @@ -62,10 +63,9 @@ class UrlGenerator implements UrlGeneratorContract /** * A cached copy of the URL scheme for the current request. * - * @deprecated In 5.8, this will change to $cachedScheme * @var string|null */ - protected $cachedSchema; + protected $cachedScheme; /** * The root namespace being applied to controller actions. @@ -112,12 +112,12 @@ class UrlGenerator implements UrlGeneratorContract /** * Create a new URL Generator instance. * - * @param \Illuminate\Routing\RouteCollection $routes + * @param \Illuminate\Routing\RouteCollectionInterface $routes * @param \Illuminate\Http\Request $request - * @param string $assetRoot + * @param string|null $assetRoot * @return void */ - public function __construct(RouteCollection $routes, Request $request, $assetRoot = null) + public function __construct(RouteCollectionInterface $routes, Request $request, $assetRoot = null) { $this->routes = $routes; $this->assetRoot = $assetRoot; @@ -215,7 +215,7 @@ class UrlGenerator implements UrlGeneratorContract * Generate a secure, absolute URL to the given path. * * @param string $path - * @param array $parameters + * @param array $parameters * @return string */ public function secure($path, $parameters = []) @@ -300,25 +300,33 @@ class UrlGenerator implements UrlGeneratorContract return $secure ? 'https://' : 'http://'; } - if (is_null($this->cachedSchema)) { - $this->cachedSchema = $this->forceScheme ?: $this->request->getScheme().'://'; + if (is_null($this->cachedScheme)) { + $this->cachedScheme = $this->forceScheme ?: $this->request->getScheme().'://'; } - return $this->cachedSchema; + return $this->cachedScheme; } /** * Create a signed route URL for a named route. * * @param string $name - * @param array $parameters - * @param \DateTimeInterface|\DateInterval|int $expiration + * @param mixed $parameters + * @param \DateTimeInterface|\DateInterval|int|null $expiration * @param bool $absolute * @return string + * + * @throws \InvalidArgumentException */ public function signedRoute($name, $parameters = [], $expiration = null, $absolute = true) { - $parameters = $this->formatParameters($parameters); + $parameters = Arr::wrap($parameters); + + if (array_key_exists('signature', $parameters)) { + throw new InvalidArgumentException( + '"Signature" is a reserved parameter when generating signed routes. Please rename your route parameter.' + ); + } if ($expiration) { $parameters = $parameters + ['expires' => $this->availableAt($expiration)]; @@ -355,6 +363,19 @@ class UrlGenerator implements UrlGeneratorContract * @return bool */ public function hasValidSignature(Request $request, $absolute = true) + { + return $this->hasCorrectSignature($request, $absolute) + && $this->signatureHasNotExpired($request); + } + + /** + * Determine if the signature from the given request matches the URL. + * + * @param \Illuminate\Http\Request $request + * @param bool $absolute + * @return bool + */ + public function hasCorrectSignature(Request $request, $absolute = true) { $url = $absolute ? $request->url() : '/'.$request->path(); @@ -362,23 +383,33 @@ class UrlGenerator implements UrlGeneratorContract Arr::except($request->query(), 'signature') ), '?'); - $expires = $request->query('expires'); - $signature = hash_hmac('sha256', $original, call_user_func($this->keyResolver)); - return hash_equals($signature, (string) $request->query('signature', '')) && - ! ($expires && Carbon::now()->getTimestamp() > $expires); + return hash_equals($signature, (string) $request->query('signature', '')); + } + + /** + * Determine if the expires timestamp from the given request is not from the past. + * + * @param \Illuminate\Http\Request $request + * @return bool + */ + public function signatureHasNotExpired(Request $request) + { + $expires = $request->query('expires'); + + return ! ($expires && Carbon::now()->getTimestamp() > $expires); } /** * Get the URL to a named route. * * @param string $name - * @param mixed $parameters + * @param mixed $parameters * @param bool $absolute * @return string * - * @throws \InvalidArgumentException + * @throws \Symfony\Component\Routing\Exception\RouteNotFoundException */ public function route($name, $parameters = [], $absolute = true) { @@ -386,7 +417,7 @@ class UrlGenerator implements UrlGeneratorContract return $this->toRoute($route, $parameters, $absolute); } - throw new InvalidArgumentException("Route [{$name}] not defined."); + throw new RouteNotFoundException("Route [{$name}] not defined."); } /** @@ -394,13 +425,19 @@ class UrlGenerator implements UrlGeneratorContract * * @param \Illuminate\Routing\Route $route * @param mixed $parameters - * @param bool $absolute + * @param bool $absolute * @return string * * @throws \Illuminate\Routing\Exceptions\UrlGenerationException */ - protected function toRoute($route, $parameters, $absolute) + public function toRoute($route, $parameters, $absolute) { + $parameters = collect(Arr::wrap($parameters))->map(function ($value, $key) use ($route) { + return $value instanceof UrlRoutable && $route->bindingFieldFor($key) + ? $value->{$route->bindingFieldFor($key)} + : $value; + })->all(); + return $this->routeUrl()->to( $route, $this->formatParameters($parameters), $absolute ); @@ -410,8 +447,8 @@ class UrlGenerator implements UrlGeneratorContract * Get the URL to a controller action. * * @param string|array $action - * @param mixed $parameters - * @param bool $absolute + * @param mixed $parameters + * @param bool $absolute * @return string * * @throws \InvalidArgumentException @@ -485,7 +522,7 @@ class UrlGenerator implements UrlGeneratorContract * Get the base URL for the request. * * @param string $scheme - * @param string $root + * @param string|null $root * @return string */ public function formatRoot($scheme, $root = null) @@ -534,7 +571,7 @@ class UrlGenerator implements UrlGeneratorContract */ public function isValidUrl($path) { - if (! preg_match('~^(#|//|https?://|mailto:|tel:)~', $path)) { + if (! preg_match('~^(#|//|https?://|(mailto|tel|sms):)~', $path)) { return filter_var($path, FILTER_VALIDATE_URL) !== false; } @@ -579,25 +616,25 @@ class UrlGenerator implements UrlGeneratorContract /** * Force the scheme for URLs. * - * @param string $scheme + * @param string|null $scheme * @return void */ public function forceScheme($scheme) { - $this->cachedSchema = null; + $this->cachedScheme = null; - $this->forceScheme = $scheme.'://'; + $this->forceScheme = $scheme ? $scheme.'://' : null; } /** * Set the forced root URL. * - * @param string $root + * @param string|null $root * @return void */ public function forceRootUrl($root) { - $this->forcedRoot = rtrim($root, '/'); + $this->forcedRoot = $root ? rtrim($root, '/') : null; $this->cachedRoot = null; } @@ -661,17 +698,24 @@ class UrlGenerator implements UrlGeneratorContract $this->request = $request; $this->cachedRoot = null; - $this->cachedSchema = null; - $this->routeGenerator = null; + $this->cachedScheme = null; + + tap(optional($this->routeGenerator)->defaultParameters ?: [], function ($defaults) { + $this->routeGenerator = null; + + if (! empty($defaults)) { + $this->defaults($defaults); + } + }); } /** * Set the route collection. * - * @param \Illuminate\Routing\RouteCollection $routes + * @param \Illuminate\Routing\RouteCollectionInterface $routes * @return $this */ - public function setRoutes(RouteCollection $routes) + public function setRoutes(RouteCollectionInterface $routes) { $this->routes = $routes; diff --git a/vendor/laravel/framework/src/Illuminate/Routing/composer.json b/vendor/laravel/framework/src/Illuminate/Routing/composer.json index e438d419..b25943fc 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Routing/composer.json @@ -14,17 +14,17 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/container": "5.7.*", - "illuminate/contracts": "5.7.*", - "illuminate/http": "5.7.*", - "illuminate/pipeline": "5.7.*", - "illuminate/session": "5.7.*", - "illuminate/support": "5.7.*", - "symfony/debug": "^4.1", - "symfony/http-foundation": "^4.1", - "symfony/http-kernel": "^4.1", - "symfony/routing": "^4.1" + "php": "^7.2.5|^8.0", + "ext-json": "*", + "illuminate/container": "^7.0", + "illuminate/contracts": "^7.0", + "illuminate/http": "^7.0", + "illuminate/pipeline": "^7.0", + "illuminate/session": "^7.0", + "illuminate/support": "^7.0", + "symfony/http-foundation": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/routing": "^5.0" }, "autoload": { "psr-4": { @@ -33,12 +33,13 @@ }, "extra": { "branch-alias": { - "dev-master": "5.7-dev" + "dev-master": "7.x-dev" } }, "suggest": { - "illuminate/console": "Required to use the make commands (5.7.*).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)." + "illuminate/console": "Required to use the make commands (^7.0).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/Session/ArraySessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/ArraySessionHandler.php new file mode 100644 index 00000000..5b7e5b94 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Session/ArraySessionHandler.php @@ -0,0 +1,124 @@ +minutes = $minutes; + } + + /** + * {@inheritdoc} + */ + public function open($savePath, $sessionName) + { + return true; + } + + /** + * {@inheritdoc} + */ + public function close() + { + return true; + } + + /** + * {@inheritdoc} + */ + public function read($sessionId) + { + if (! isset($this->storage[$sessionId])) { + return ''; + } + + $session = $this->storage[$sessionId]; + + $expiration = $this->calculateExpiration($this->minutes * 60); + + if (isset($session['time']) && $session['time'] >= $expiration) { + return $session['data']; + } + + return ''; + } + + /** + * {@inheritdoc} + */ + public function write($sessionId, $data) + { + $this->storage[$sessionId] = [ + 'data' => $data, + 'time' => $this->currentTime(), + ]; + + return true; + } + + /** + * {@inheritdoc} + */ + public function destroy($sessionId) + { + if (isset($this->storage[$sessionId])) { + unset($this->storage[$sessionId]); + } + + return true; + } + + /** + * {@inheritdoc} + */ + public function gc($lifetime) + { + $expiration = $this->calculateExpiration($lifetime); + + foreach ($this->storage as $sessionId => $session) { + if ($session['time'] < $expiration) { + unset($this->storage[$sessionId]); + } + } + + return true; + } + + /** + * Get the expiration time of the session. + * + * @param int $seconds + * @return int + */ + protected function calculateExpiration($seconds) + { + return $this->currentTime() - $seconds; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php index a2990bdd..5f35f757 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php +++ b/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php @@ -2,8 +2,8 @@ namespace Illuminate\Session; -use SessionHandlerInterface; use Illuminate\Contracts\Cache\Repository as CacheContract; +use SessionHandlerInterface; class CacheBasedSessionHandler implements SessionHandlerInterface { @@ -63,7 +63,7 @@ class CacheBasedSessionHandler implements SessionHandlerInterface */ public function write($sessionId, $data) { - return $this->cache->put($sessionId, $data, $this->minutes); + return $this->cache->put($sessionId, $data, $this->minutes * 60); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php b/vendor/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php index e99f7d2d..1675c19c 100644 --- a/vendor/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php @@ -3,8 +3,8 @@ namespace Illuminate\Session\Console; use Illuminate\Console\Command; -use Illuminate\Support\Composer; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Composer; class SessionTableCommand extends Command { diff --git a/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub b/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub index c213297d..0bd028c8 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub +++ b/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub @@ -1,8 +1,8 @@ string('id')->unique(); - $table->unsignedInteger('user_id')->nullable(); + $table->foreignId('user_id')->nullable(); $table->string('ip_address', 45)->nullable(); $table->text('user_agent')->nullable(); $table->text('payload'); diff --git a/vendor/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php index e91053d0..998b78fa 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php +++ b/vendor/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php @@ -2,10 +2,10 @@ namespace Illuminate\Session; -use SessionHandlerInterface; -use Illuminate\Support\InteractsWithTime; -use Symfony\Component\HttpFoundation\Request; use Illuminate\Contracts\Cookie\QueueingFactory as CookieJar; +use Illuminate\Support\InteractsWithTime; +use SessionHandlerInterface; +use Symfony\Component\HttpFoundation\Request; class CookieSessionHandler implements SessionHandlerInterface { diff --git a/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php index 976c2901..7781a013 100644 --- a/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php +++ b/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php @@ -2,16 +2,16 @@ namespace Illuminate\Session; -use Illuminate\Support\Arr; -use SessionHandlerInterface; -use Illuminate\Support\Carbon; use Illuminate\Contracts\Auth\Guard; -use Illuminate\Database\QueryException; -use Illuminate\Support\InteractsWithTime; -use Illuminate\Database\ConnectionInterface; use Illuminate\Contracts\Container\Container; +use Illuminate\Database\ConnectionInterface; +use Illuminate\Database\QueryException; +use Illuminate\Support\Arr; +use Illuminate\Support\Carbon; +use Illuminate\Support\InteractsWithTime; +use SessionHandlerInterface; -class DatabaseSessionHandler implements SessionHandlerInterface, ExistenceAwareInterface +class DatabaseSessionHandler implements ExistenceAwareInterface, SessionHandlerInterface { use InteractsWithTime; diff --git a/vendor/laravel/framework/src/Illuminate/Session/EncryptedStore.php b/vendor/laravel/framework/src/Illuminate/Session/EncryptedStore.php index 078d13fd..106fe135 100644 --- a/vendor/laravel/framework/src/Illuminate/Session/EncryptedStore.php +++ b/vendor/laravel/framework/src/Illuminate/Session/EncryptedStore.php @@ -2,9 +2,9 @@ namespace Illuminate\Session; -use SessionHandlerInterface; use Illuminate\Contracts\Encryption\DecryptException; use Illuminate\Contracts\Encryption\Encrypter as EncrypterContract; +use SessionHandlerInterface; class EncryptedStore extends Store { @@ -18,10 +18,10 @@ class EncryptedStore extends Store /** * Create a new session instance. * - * @param string $name - * @param \SessionHandlerInterface $handler - * @param \Illuminate\Contracts\Encryption\Encrypter $encrypter - * @param string|null $id + * @param string $name + * @param \SessionHandlerInterface $handler + * @param \Illuminate\Contracts\Encryption\Encrypter $encrypter + * @param string|null $id * @return void */ public function __construct($name, SessionHandlerInterface $handler, EncrypterContract $encrypter, $id = null) diff --git a/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php index 839e6e4c..190c2350 100644 --- a/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php +++ b/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php @@ -2,10 +2,10 @@ namespace Illuminate\Session; -use SessionHandlerInterface; -use Illuminate\Support\Carbon; -use Symfony\Component\Finder\Finder; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Carbon; +use SessionHandlerInterface; +use Symfony\Component\Finder\Finder; class FileSessionHandler implements SessionHandlerInterface { diff --git a/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php b/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php index bdc4eb42..5da389ae 100644 --- a/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php +++ b/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php @@ -35,14 +35,14 @@ class AuthenticateSession */ public function handle($request, Closure $next) { - if (! $request->user() || ! $request->session()) { + if (! $request->hasSession() || ! $request->user()) { return $next($request); } if ($this->auth->viaRemember()) { - $passwordHash = explode('|', $request->cookies->get($this->auth->getRecallerName()))[2]; + $passwordHash = explode('|', $request->cookies->get($this->auth->getRecallerName()))[2] ?? null; - if ($passwordHash != $request->user()->getAuthPassword()) { + if (! $passwordHash || $passwordHash != $request->user()->getAuthPassword()) { $this->logout($request); } } @@ -87,7 +87,7 @@ class AuthenticateSession */ protected function logout($request) { - $this->auth->logout(); + $this->auth->logoutCurrentDevice(); $request->session()->flush(); diff --git a/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php b/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php index 1025ed86..955486f2 100644 --- a/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php +++ b/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php @@ -3,11 +3,11 @@ namespace Illuminate\Session\Middleware; use Closure; -use Illuminate\Http\Request; -use Illuminate\Support\Carbon; -use Illuminate\Session\SessionManager; use Illuminate\Contracts\Session\Session; -use Illuminate\Session\CookieSessionHandler; +use Illuminate\Http\Request; +use Illuminate\Session\SessionManager; +use Illuminate\Support\Carbon; +use Illuminate\Support\Facades\Date; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Component\HttpFoundation\Response; @@ -21,21 +21,23 @@ class StartSession protected $manager; /** - * Indicates if the session was handled for the current request. + * The callback that can resolve an instance of the cache factory. * - * @var bool + * @var callable|null */ - protected $sessionHandled = false; + protected $cacheFactoryResolver; /** * Create a new session middleware. * * @param \Illuminate\Session\SessionManager $manager + * @param callable|null $cacheFactoryResolver * @return void */ - public function __construct(SessionManager $manager) + public function __construct(SessionManager $manager, callable $cacheFactoryResolver = null) { $this->manager = $manager; + $this->cacheFactoryResolver = $cacheFactoryResolver; } /** @@ -47,56 +49,94 @@ class StartSession */ public function handle($request, Closure $next) { - $this->sessionHandled = true; + if (! $this->sessionConfigured()) { + return $next($request); + } + $session = $this->getSession($request); + + if ($this->manager->shouldBlock() || + ($request->route() && $request->route()->locksFor())) { + return $this->handleRequestWhileBlocking($request, $session, $next); + } else { + return $this->handleStatefulRequest($request, $session, $next); + } + } + + /** + * Handle the given request within session state. + * + * @param \Illuminate\Http\Request $request + * @param \Illuminate\Contracts\Session\Session $session + * @param \Closure $next + * @return mixed + */ + protected function handleRequestWhileBlocking(Request $request, $session, Closure $next) + { + $lockFor = $request->route() && $request->route()->locksFor() + ? $request->route()->locksFor() + : 10; + + $lock = $this->cache($this->manager->blockDriver()) + ->lock('session:'.$session->getId(), $lockFor) + ->betweenBlockedAttemptsSleepFor(50); + + try { + $lock->block( + ! is_null($request->route()->waitsFor()) + ? $request->route()->waitsFor() + : 10 + ); + + return $this->handleStatefulRequest($request, $session, $next); + } finally { + optional($lock)->release(); + } + } + + /** + * Handle the given request within session state. + * + * @param \Illuminate\Http\Request $request + * @param \Illuminate\Contracts\Session\Session $session + * @param \Closure $next + * @return mixed + */ + protected function handleStatefulRequest(Request $request, $session, Closure $next) + { // If a session driver has been configured, we will need to start the session here // so that the data is ready for an application. Note that the Laravel sessions // do not make use of PHP "native" sessions in any way since they are crappy. - if ($this->sessionConfigured()) { - $request->setLaravelSession( - $session = $this->startSession($request) - ); + $request->setLaravelSession( + $this->startSession($request, $session) + ); - $this->collectGarbage($session); - } + $this->collectGarbage($session); $response = $next($request); + $this->storeCurrentUrl($request, $session); + + $this->addCookieToResponse($response, $session); + // Again, if the session has been configured we will need to close out the session // so that the attributes may be persisted to some storage medium. We will also // add the session identifier cookie to the application response headers now. - if ($this->sessionConfigured()) { - $this->storeCurrentUrl($request, $session); - - $this->addCookieToResponse($response, $session); - } + $this->saveSession($request); return $response; } - /** - * Perform any final actions for the request lifecycle. - * - * @param \Illuminate\Http\Request $request - * @param \Symfony\Component\HttpFoundation\Response $response - * @return void - */ - public function terminate($request, $response) - { - if ($this->sessionHandled && $this->sessionConfigured() && ! $this->usingCookieSessions()) { - $this->manager->driver()->save(); - } - } - /** * Start the session for the given request. * * @param \Illuminate\Http\Request $request + * @param \Illuminate\Contracts\Session\Session $session * @return \Illuminate\Contracts\Session\Session */ - protected function startSession(Request $request) + protected function startSession(Request $request, $session) { - return tap($this->getSession($request), function ($session) use ($request) { + return tap($session, function ($session) use ($request) { $session->setRequestOnHandler($request); $session->start(); @@ -171,10 +211,6 @@ class StartSession */ protected function addCookieToResponse(Response $response, Session $session) { - if ($this->usingCookieSessions()) { - $this->manager->driver()->save(); - } - if ($this->sessionIsPersistent($config = $this->manager->getSessionConfig())) { $response->headers->setCookie(new Cookie( $session->getName(), $session->getId(), $this->getCookieExpirationDate(), @@ -184,6 +220,17 @@ class StartSession } } + /** + * Save the session data to storage. + * + * @param \Illuminate\Http\Request $request + * @return void + */ + protected function saveSession($request) + { + $this->manager->driver()->save(); + } + /** * Get the session lifetime in seconds. * @@ -197,13 +244,15 @@ class StartSession /** * Get the cookie lifetime in seconds. * - * @return \DateTimeInterface + * @return \DateTimeInterface|int */ protected function getCookieExpirationDate() { $config = $this->manager->getSessionConfig(); - return $config['expire_on_close'] ? 0 : Carbon::now()->addMinutes($config['lifetime']); + return $config['expire_on_close'] ? 0 : Date::instance( + Carbon::now()->addRealMinutes($config['lifetime']) + ); } /** @@ -226,20 +275,17 @@ class StartSession { $config = $config ?: $this->manager->getSessionConfig(); - return ! in_array($config['driver'], [null, 'array']); + return ! is_null($config['driver'] ?? null); } /** - * Determine if the session is using cookie sessions. + * Resolve the given cache driver. * - * @return bool + * @param string $driver + * @return \Illuminate\Cache\Store */ - protected function usingCookieSessions() + protected function cache($driver) { - if ($this->sessionConfigured()) { - return $this->manager->driver()->getHandler() instanceof CookieSessionHandler; - } - - return false; + return call_user_func($this->cacheFactoryResolver)->driver($driver); } } diff --git a/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php b/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php index 2ab50830..6d881fc2 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php +++ b/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php @@ -17,6 +17,16 @@ class SessionManager extends Manager return $this->buildSession(parent::callCustomCreator($driver)); } + /** + * Create an instance of the "null" session driver. + * + * @return \Illuminate\Session\Store + */ + protected function createNullDriver() + { + return $this->buildSession(new NullSessionHandler); + } + /** * Create an instance of the "array" session driver. * @@ -24,7 +34,9 @@ class SessionManager extends Manager */ protected function createArrayDriver() { - return $this->buildSession(new NullSessionHandler); + return $this->buildSession(new ArraySessionHandler( + $this->config->get('session.lifetime') + )); } /** @@ -35,7 +47,7 @@ class SessionManager extends Manager protected function createCookieDriver() { return $this->buildSession(new CookieSessionHandler( - $this->app['cookie'], $this->app['config']['session.lifetime'] + $this->container->make('cookie'), $this->config->get('session.lifetime') )); } @@ -56,10 +68,10 @@ class SessionManager extends Manager */ protected function createNativeDriver() { - $lifetime = $this->app['config']['session.lifetime']; + $lifetime = $this->config->get('session.lifetime'); return $this->buildSession(new FileSessionHandler( - $this->app['files'], $this->app['config']['session.files'], $lifetime + $this->container->make('files'), $this->config->get('session.files'), $lifetime )); } @@ -70,12 +82,12 @@ class SessionManager extends Manager */ protected function createDatabaseDriver() { - $table = $this->app['config']['session.table']; + $table = $this->config->get('session.table'); - $lifetime = $this->app['config']['session.lifetime']; + $lifetime = $this->config->get('session.lifetime'); return $this->buildSession(new DatabaseSessionHandler( - $this->getDatabaseConnection(), $table, $lifetime, $this->app + $this->getDatabaseConnection(), $table, $lifetime, $this->container )); } @@ -86,9 +98,9 @@ class SessionManager extends Manager */ protected function getDatabaseConnection() { - $connection = $this->app['config']['session.connection']; + $connection = $this->config->get('session.connection'); - return $this->app['db']->connection($connection); + return $this->container->make('db')->connection($connection); } /** @@ -121,12 +133,22 @@ class SessionManager extends Manager $handler = $this->createCacheHandler('redis'); $handler->getCache()->getStore()->setConnection( - $this->app['config']['session.connection'] + $this->config->get('session.connection') ); return $this->buildSession($handler); } + /** + * Create an instance of the DynamoDB session driver. + * + * @return \Illuminate\Session\Store + */ + protected function createDynamodbDriver() + { + return $this->createCacheBased('dynamodb'); + } + /** * Create an instance of a cache driven driver. * @@ -146,11 +168,11 @@ class SessionManager extends Manager */ protected function createCacheHandler($driver) { - $store = $this->app['config']->get('session.store') ?: $driver; + $store = $this->config->get('session.store') ?: $driver; return new CacheBasedSessionHandler( - clone $this->app['cache']->store($store), - $this->app['config']['session.lifetime'] + clone $this->container->make('cache')->store($store), + $this->config->get('session.lifetime') ); } @@ -162,11 +184,9 @@ class SessionManager extends Manager */ protected function buildSession($handler) { - if ($this->app['config']['session.encrypt']) { - return $this->buildEncryptedSession($handler); - } - - return new Store($this->app['config']['session.cookie'], $handler); + return $this->config->get('session.encrypt') + ? $this->buildEncryptedSession($handler) + : new Store($this->config->get('session.cookie'), $handler); } /** @@ -178,10 +198,30 @@ class SessionManager extends Manager protected function buildEncryptedSession($handler) { return new EncryptedStore( - $this->app['config']['session.cookie'], $handler, $this->app['encrypter'] + $this->config->get('session.cookie'), $handler, $this->container['encrypter'] ); } + /** + * Determine if requests for the same session should wait for each to finish before executing. + * + * @return bool + */ + public function shouldBlock() + { + return $this->config->get('session.block', false); + } + + /** + * Get the name of the cache store / driver that should be used to acquire session locks. + * + * @return string|null + */ + public function blockDriver() + { + return $this->config->get('session.block_store'); + } + /** * Get the session configuration. * @@ -189,7 +229,7 @@ class SessionManager extends Manager */ public function getSessionConfig() { - return $this->app['config']['session']; + return $this->config->get('session'); } /** @@ -199,7 +239,7 @@ class SessionManager extends Manager */ public function getDefaultDriver() { - return $this->app['config']['session.driver']; + return $this->config->get('session.driver'); } /** @@ -210,6 +250,6 @@ class SessionManager extends Manager */ public function setDefaultDriver($name) { - $this->app['config']['session.driver'] = $name; + $this->config->set('session.driver', $name); } } diff --git a/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php index c8585062..970a6e0d 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php @@ -2,8 +2,9 @@ namespace Illuminate\Session; -use Illuminate\Support\ServiceProvider; +use Illuminate\Contracts\Cache\Factory as CacheFactory; use Illuminate\Session\Middleware\StartSession; +use Illuminate\Support\ServiceProvider; class SessionServiceProvider extends ServiceProvider { @@ -18,7 +19,11 @@ class SessionServiceProvider extends ServiceProvider $this->registerSessionDriver(); - $this->app->singleton(StartSession::class); + $this->app->singleton(StartSession::class, function () { + return new StartSession($this->app->make(SessionManager::class), function () { + return $this->app->make(CacheFactory::class); + }); + }); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Session/Store.php b/vendor/laravel/framework/src/Illuminate/Session/Store.php index 787e77d2..6eb43ba9 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/Store.php +++ b/vendor/laravel/framework/src/Illuminate/Session/Store.php @@ -3,11 +3,11 @@ namespace Illuminate\Session; use Closure; -use stdClass; +use Illuminate\Contracts\Session\Session; use Illuminate\Support\Arr; use Illuminate\Support\Str; use SessionHandlerInterface; -use Illuminate\Contracts\Session\Session; +use stdClass; class Store implements Session { @@ -49,9 +49,9 @@ class Store implements Session /** * Create a new session instance. * - * @param string $name - * @param \SessionHandlerInterface $handler - * @param string|null $id + * @param string $name + * @param \SessionHandlerInterface $handler + * @param string|null $id * @return void */ public function __construct($name, SessionHandlerInterface $handler, $id = null) @@ -119,7 +119,7 @@ class Store implements Session /** * Save the session data to storage. * - * @return bool + * @return void */ public function save() { @@ -167,6 +167,17 @@ class Store implements Session return $this->attributes; } + /** + * Get a subset of the session data. + * + * @param array $keys + * @return array + */ + public function only(array $keys) + { + return Arr::only($this->attributes, $keys); + } + /** * Checks if a key exists. * @@ -211,7 +222,7 @@ class Store implements Session * Get the value of a given key and then forget it. * * @param string $key - * @param string $default + * @param mixed $default * @return mixed */ public function pull($key, $default = null) @@ -222,7 +233,7 @@ class Store implements Session /** * Determine if the session contains old input. * - * @param string $key + * @param string|null $key * @return bool */ public function hasOldInput($key = null) @@ -235,8 +246,8 @@ class Store implements Session /** * Get the requested item from the flashed input array. * - * @param string $key - * @param mixed $default + * @param string|null $key + * @param mixed $default * @return mixed */ public function getOldInput($key = null, $default = null) @@ -259,7 +270,7 @@ class Store implements Session * Put a key / value pair or array of key / value pairs in the session. * * @param string|array $key - * @param mixed $value + * @param mixed $value * @return void */ public function put($key, $value = null) @@ -295,7 +306,7 @@ class Store implements Session * Push a value onto a session array. * * @param string $key - * @param mixed $value + * @param mixed $value * @return void */ public function push($key, $value) @@ -337,7 +348,7 @@ class Store implements Session * Flash a key / value pair to the session. * * @param string $key - * @param mixed $value + * @param mixed $value * @return void */ public function flash(string $key, $value = true) @@ -352,8 +363,8 @@ class Store implements Session /** * Flash a key / value pair to the session for immediate use. * - * @param string $key - * @param mixed $value + * @param string $key + * @param mixed $value * @return void */ public function now($key, $value) diff --git a/vendor/laravel/framework/src/Illuminate/Session/composer.json b/vendor/laravel/framework/src/Illuminate/Session/composer.json index 7e912c12..1e7447ad 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Session/composer.json @@ -14,12 +14,13 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.7.*", - "illuminate/filesystem": "5.7.*", - "illuminate/support": "5.7.*", - "symfony/finder": "^4.1", - "symfony/http-foundation": "^4.1" + "php": "^7.2.5|^8.0", + "ext-json": "*", + "illuminate/contracts": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/support": "^7.0", + "symfony/finder": "^5.0", + "symfony/http-foundation": "^5.0" }, "autoload": { "psr-4": { @@ -28,11 +29,11 @@ }, "extra": { "branch-alias": { - "dev-master": "5.7-dev" + "dev-master": "7.x-dev" } }, "suggest": { - "illuminate/console": "Required to use the session:table command (5.7.*)." + "illuminate/console": "Required to use the session:table command (^7.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/Support/Arr.php b/vendor/laravel/framework/src/Illuminate/Support/Arr.php index c7429a5a..8681e98a 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Arr.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Arr.php @@ -3,8 +3,8 @@ namespace Illuminate\Support; use ArrayAccess; -use InvalidArgumentException; use Illuminate\Support\Traits\Macroable; +use InvalidArgumentException; class Arr { @@ -24,9 +24,9 @@ class Arr /** * Add an element to an array using "dot" notation if it doesn't exist. * - * @param array $array + * @param array $array * @param string $key - * @param mixed $value + * @param mixed $value * @return array */ public static function add($array, $key, $value) @@ -41,7 +41,7 @@ class Arr /** * Collapse an array of arrays into a single array. * - * @param array $array + * @param iterable $array * @return array */ public static function collapse($array) @@ -55,16 +55,16 @@ class Arr continue; } - $results = array_merge($results, $values); + $results[] = $values; } - return $results; + return array_merge([], ...$results); } /** * Cross join the given arrays, returning all possible permutations. * - * @param array ...$arrays + * @param iterable ...$arrays * @return array */ public static function crossJoin(...$arrays) @@ -102,7 +102,7 @@ class Arr /** * Flatten a multi-dimensional associative array with dots. * - * @param array $array + * @param iterable $array * @param string $prepend * @return array */ @@ -154,7 +154,7 @@ class Arr /** * Return the first element in an array passing a given truth test. * - * @param array $array + * @param iterable $array * @param callable|null $callback * @param mixed $default * @return mixed @@ -172,7 +172,7 @@ class Arr } foreach ($array as $key => $value) { - if (call_user_func($callback, $value, $key)) { + if ($callback($value, $key)) { return $value; } } @@ -200,7 +200,7 @@ class Arr /** * Flatten a multi-dimensional array into a single level. * - * @param array $array + * @param iterable $array * @param int $depth * @return array */ @@ -213,10 +213,14 @@ class Arr if (! is_array($item)) { $result[] = $item; - } elseif ($depth === 1) { - $result = array_merge($result, array_values($item)); } else { - $result = array_merge($result, static::flatten($item, $depth - 1)); + $values = $depth === 1 + ? array_values($item) + : static::flatten($item, $depth - 1); + + foreach ($values as $value) { + $result[] = $value; + } } } @@ -271,8 +275,8 @@ class Arr * Get an item from an array using "dot" notation. * * @param \ArrayAccess|array $array - * @param string $key - * @param mixed $default + * @param string|int|null $key + * @param mixed $default * @return mixed */ public static function get($array, $key, $default = null) @@ -313,17 +317,9 @@ class Arr */ public static function has($array, $keys) { - if (is_null($keys)) { - return false; - } - $keys = (array) $keys; - if (! $array) { - return false; - } - - if ($keys === []) { + if (! $array || $keys === []) { return false; } @@ -346,6 +342,38 @@ class Arr return true; } + /** + * Determine if any of the keys exist in an array using "dot" notation. + * + * @param \ArrayAccess|array $array + * @param string|array $keys + * @return bool + */ + public static function hasAny($array, $keys) + { + if (is_null($keys)) { + return false; + } + + $keys = (array) $keys; + + if (! $array) { + return false; + } + + if ($keys === []) { + return false; + } + + foreach ($keys as $key) { + if (static::has($array, $key)) { + return true; + } + } + + return false; + } + /** * Determines if an array is associative. * @@ -376,7 +404,7 @@ class Arr /** * Pluck an array of values from an array. * - * @param array $array + * @param iterable $array * @param string|array $value * @param string|array|null $key * @return array @@ -447,9 +475,9 @@ class Arr /** * Get a value from the array, and remove it. * - * @param array $array + * @param array $array * @param string $key - * @param mixed $default + * @param mixed $default * @return mixed */ public static function pull(&$array, $key, $default = null) @@ -506,9 +534,9 @@ class Arr * * If no key is given to the method, the entire array will be replaced. * - * @param array $array - * @param string $key - * @param mixed $value + * @param array $array + * @param string|null $key + * @param mixed $value * @return array */ public static function set(&$array, $key, $value) @@ -519,8 +547,12 @@ class Arr $keys = explode('.', $key); - while (count($keys) > 1) { - $key = array_shift($keys); + foreach ($keys as $i => $key) { + if (count($keys) === 1) { + break; + } + + unset($keys[$i]); // If the key doesn't exist at this depth, we will just create an empty array // to hold the next value, allowing us to create the arrays to hold final @@ -549,11 +581,9 @@ class Arr if (is_null($seed)) { shuffle($array); } else { - srand($seed); - - usort($array, function () { - return rand(-1, 1); - }); + mt_srand($seed); + shuffle($array); + mt_srand(); } return $array; @@ -602,7 +632,7 @@ class Arr */ public static function query($array) { - return http_build_query($array, null, '&', PHP_QUERY_RFC3986); + return http_build_query($array, '', '&', PHP_QUERY_RFC3986); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Support/Collection.php b/vendor/laravel/framework/src/Illuminate/Support/Collection.php index 2def4205..5aa8f6fb 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Collection.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Collection.php @@ -2,46 +2,15 @@ namespace Illuminate\Support; -use stdClass; -use Countable; -use Exception; use ArrayAccess; -use Traversable; use ArrayIterator; -use CachingIterator; -use JsonSerializable; -use IteratorAggregate; +use Illuminate\Support\Traits\EnumeratesValues; use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\Support\Jsonable; -use Symfony\Component\VarDumper\VarDumper; -use Illuminate\Contracts\Support\Arrayable; +use stdClass; -/** - * @property-read HigherOrderCollectionProxy $average - * @property-read HigherOrderCollectionProxy $avg - * @property-read HigherOrderCollectionProxy $contains - * @property-read HigherOrderCollectionProxy $each - * @property-read HigherOrderCollectionProxy $every - * @property-read HigherOrderCollectionProxy $filter - * @property-read HigherOrderCollectionProxy $first - * @property-read HigherOrderCollectionProxy $flatMap - * @property-read HigherOrderCollectionProxy $groupBy - * @property-read HigherOrderCollectionProxy $keyBy - * @property-read HigherOrderCollectionProxy $map - * @property-read HigherOrderCollectionProxy $max - * @property-read HigherOrderCollectionProxy $min - * @property-read HigherOrderCollectionProxy $partition - * @property-read HigherOrderCollectionProxy $reject - * @property-read HigherOrderCollectionProxy $sortBy - * @property-read HigherOrderCollectionProxy $sortByDesc - * @property-read HigherOrderCollectionProxy $sum - * @property-read HigherOrderCollectionProxy $unique - * - * Class Collection - */ -class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate, Jsonable, JsonSerializable +class Collection implements ArrayAccess, Enumerable { - use Macroable; + use EnumeratesValues, Macroable; /** * The items contained in the collection. @@ -50,17 +19,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate */ protected $items = []; - /** - * The methods that can be proxied. - * - * @var array - */ - protected static $proxies = [ - 'average', 'avg', 'contains', 'each', 'every', 'filter', 'first', - 'flatMap', 'groupBy', 'keyBy', 'map', 'max', 'min', 'partition', - 'reject', 'some', 'sortBy', 'sortByDesc', 'sum', 'unique', - ]; - /** * Create a new collection. * @@ -72,46 +30,11 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate $this->items = $this->getArrayableItems($items); } - /** - * Create a new collection instance if the value isn't one already. - * - * @param mixed $items - * @return static - */ - public static function make($items = []) - { - return new static($items); - } - - /** - * Wrap the given value in a collection if applicable. - * - * @param mixed $value - * @return static - */ - public static function wrap($value) - { - return $value instanceof self - ? new static($value) - : new static(Arr::wrap($value)); - } - - /** - * Get the underlying items from the given collection if applicable. - * - * @param array|static $value - * @return array - */ - public static function unwrap($value) - { - return $value instanceof self ? $value->all() : $value; - } - /** * Create a new collection by invoking the callback a given amount of times. * * @param int $number - * @param callable $callback + * @param callable|null $callback * @return static */ public static function times($number, callable $callback = null) @@ -137,6 +60,16 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return $this->items; } + /** + * Get a lazy collection for the items in this collection. + * + * @return \Illuminate\Support\LazyCollection + */ + public function lazy() + { + return new LazyCollection($this->items); + } + /** * Get the average value of a given key. * @@ -158,21 +91,10 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } } - /** - * Alias for the "avg" method. - * - * @param callable|string|null $callback - * @return mixed - */ - public function average($callback = null) - { - return $this->avg($callback); - } - /** * Get the median of a given key. * - * @param string|array|null $key + * @param string|array|null $key * @return mixed */ public function median($key = null) @@ -184,7 +106,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate $count = $values->count(); - if ($count == 0) { + if ($count === 0) { return; } @@ -238,19 +160,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(Arr::collapse($this->items)); } - /** - * Alias for the "contains" method. - * - * @param mixed $key - * @param mixed $operator - * @param mixed $value - * @return bool - */ - public function some($key, $operator = null, $value = null) - { - return $this->contains(...func_get_args()); - } - /** * Determine if an item exists in the collection. * @@ -274,28 +183,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return $this->contains($this->operatorForWhere(...func_get_args())); } - /** - * Determine if an item exists in the collection using strict comparison. - * - * @param mixed $key - * @param mixed $value - * @return bool - */ - public function containsStrict($key, $value = null) - { - if (func_num_args() === 2) { - return $this->contains(function ($item) use ($key, $value) { - return data_get($item, $key) === $value; - }); - } - - if ($this->useAsCallable($key)) { - return ! is_null($this->first($key)); - } - - return in_array($key, $this->items, true); - } - /** * Cross join with the given lists, returning all possible permutations. * @@ -309,35 +196,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate )); } - /** - * Dump the collection and end the script. - * - * @param mixed ...$args - * @return void - */ - public function dd(...$args) - { - call_user_func_array([$this, 'dump'], $args); - - die(1); - } - - /** - * Dump the collection. - * - * @return $this - */ - public function dump() - { - (new static(func_get_args())) - ->push($this) - ->each(function ($item) { - VarDumper::dump($item); - }); - - return $this; - } - /** * Get the items in the collection that are not present in the given items. * @@ -350,7 +208,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Get the items in the collection that are not present in the given items. + * Get the items in the collection that are not present in the given items, using the callback. * * @param mixed $items * @param callable $callback @@ -373,7 +231,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Get the items in the collection whose keys and values are not present in the given items. + * Get the items in the collection whose keys and values are not present in the given items, using the callback. * * @param mixed $items * @param callable $callback @@ -396,9 +254,9 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Get the items in the collection whose keys are not present in the given items. + * Get the items in the collection whose keys are not present in the given items, using the callback. * - * @param mixed $items + * @param mixed $items * @param callable $callback * @return static */ @@ -408,60 +266,61 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Execute a callback over each item. + * Retrieve duplicate items from the collection. * - * @param callable $callback - * @return $this - */ - public function each(callable $callback) - { - foreach ($this->items as $key => $item) { - if ($callback($item, $key) === false) { - break; - } - } - - return $this; - } - - /** - * Execute a callback over each nested chunk of items. - * - * @param callable $callback + * @param callable|null $callback + * @param bool $strict * @return static */ - public function eachSpread(callable $callback) + public function duplicates($callback = null, $strict = false) { - return $this->each(function ($chunk, $key) use ($callback) { - $chunk[] = $key; + $items = $this->map($this->valueRetriever($callback)); - return $callback(...$chunk); - }); + $uniqueItems = $items->unique(null, $strict); + + $compare = $this->duplicateComparator($strict); + + $duplicates = new static; + + foreach ($items as $key => $value) { + if ($uniqueItems->isNotEmpty() && $compare($value, $uniqueItems->first())) { + $uniqueItems->shift(); + } else { + $duplicates[$key] = $value; + } + } + + return $duplicates; } /** - * Determine if all items in the collection pass the given test. + * Retrieve duplicate items from the collection using strict comparison. * - * @param string|callable $key - * @param mixed $operator - * @param mixed $value - * @return bool + * @param callable|null $callback + * @return static */ - public function every($key, $operator = null, $value = null) + public function duplicatesStrict($callback = null) { - if (func_num_args() === 1) { - $callback = $this->valueRetriever($key); + return $this->duplicates($callback, true); + } - foreach ($this->items as $k => $v) { - if (! $callback($v, $k)) { - return false; - } - } - - return true; + /** + * Get the comparison function to detect duplicates. + * + * @param bool $strict + * @return \Closure + */ + protected function duplicateComparator($strict) + { + if ($strict) { + return function ($a, $b) { + return $a === $b; + }; } - return $this->every($this->operatorForWhere(...func_get_args())); + return function ($a, $b) { + return $a == $b; + }; } /** @@ -472,7 +331,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate */ public function except($keys) { - if ($keys instanceof self) { + if ($keys instanceof Enumerable) { $keys = $keys->all(); } elseif (! is_array($keys)) { $keys = func_get_args(); @@ -497,258 +356,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Apply the callback if the value is truthy. - * - * @param bool $value - * @param callable $callback - * @param callable $default - * @return static|mixed - */ - public function when($value, callable $callback, callable $default = null) - { - if ($value) { - return $callback($this, $value); - } elseif ($default) { - return $default($this, $value); - } - - return $this; - } - - /** - * Apply the callback if the collection is empty. - * - * @param callable $callback - * @param callable $default - * @return static|mixed - */ - public function whenEmpty(callable $callback, callable $default = null) - { - return $this->when($this->isEmpty(), $callback, $default); - } - - /** - * Apply the callback if the collection is not empty. - * - * @param callable $callback - * @param callable $default - * @return static|mixed - */ - public function whenNotEmpty(callable $callback, callable $default = null) - { - return $this->when($this->isNotEmpty(), $callback, $default); - } - - /** - * Apply the callback if the value is falsy. - * - * @param bool $value - * @param callable $callback - * @param callable $default - * @return static|mixed - */ - public function unless($value, callable $callback, callable $default = null) - { - return $this->when(! $value, $callback, $default); - } - - /** - * Apply the callback unless the collection is empty. - * - * @param callable $callback - * @param callable $default - * @return static|mixed - */ - public function unlessEmpty(callable $callback, callable $default = null) - { - return $this->whenNotEmpty($callback, $default); - } - - /** - * Apply the callback unless the collection is not empty. - * - * @param callable $callback - * @param callable $default - * @return static|mixed - */ - public function unlessNotEmpty(callable $callback, callable $default = null) - { - return $this->whenEmpty($callback, $default); - } - - /** - * Filter items by the given key value pair. - * - * @param string $key - * @param mixed $operator - * @param mixed $value - * @return static - */ - public function where($key, $operator = null, $value = null) - { - return $this->filter($this->operatorForWhere(...func_get_args())); - } - - /** - * Get an operator checker callback. - * - * @param string $key - * @param string $operator - * @param mixed $value - * @return \Closure - */ - protected function operatorForWhere($key, $operator = null, $value = null) - { - if (func_num_args() === 1) { - $value = true; - - $operator = '='; - } - - if (func_num_args() === 2) { - $value = $operator; - - $operator = '='; - } - - return function ($item) use ($key, $operator, $value) { - $retrieved = data_get($item, $key); - - $strings = array_filter([$retrieved, $value], function ($value) { - return is_string($value) || (is_object($value) && method_exists($value, '__toString')); - }); - - if (count($strings) < 2 && count(array_filter([$retrieved, $value], 'is_object')) == 1) { - return in_array($operator, ['!=', '<>', '!==']); - } - - switch ($operator) { - default: - case '=': - case '==': return $retrieved == $value; - case '!=': - case '<>': return $retrieved != $value; - case '<': return $retrieved < $value; - case '>': return $retrieved > $value; - case '<=': return $retrieved <= $value; - case '>=': return $retrieved >= $value; - case '===': return $retrieved === $value; - case '!==': return $retrieved !== $value; - } - }; - } - - /** - * Filter items by the given key value pair using strict comparison. - * - * @param string $key - * @param mixed $value - * @return static - */ - public function whereStrict($key, $value) - { - return $this->where($key, '===', $value); - } - - /** - * Filter items by the given key value pair. - * - * @param string $key - * @param mixed $values - * @param bool $strict - * @return static - */ - public function whereIn($key, $values, $strict = false) - { - $values = $this->getArrayableItems($values); - - return $this->filter(function ($item) use ($key, $values, $strict) { - return in_array(data_get($item, $key), $values, $strict); - }); - } - - /** - * Filter items by the given key value pair using strict comparison. - * - * @param string $key - * @param mixed $values - * @return static - */ - public function whereInStrict($key, $values) - { - return $this->whereIn($key, $values, true); - } - - /** - * Filter items such that the value of the given key is between the given values. - * - * @param string $key - * @param array $values - * @return static - */ - public function whereBetween($key, $values) - { - return $this->where($key, '>=', reset($values))->where($key, '<=', end($values)); - } - - /** - * Filter items such that the value of the given key is not between the given values. - * - * @param string $key - * @param array $values - * @return static - */ - public function whereNotBetween($key, $values) - { - return $this->filter(function ($item) use ($key, $values) { - return data_get($item, $key) < reset($values) || data_get($item, $key) > end($values); - }); - } - - /** - * Filter items by the given key value pair. - * - * @param string $key - * @param mixed $values - * @param bool $strict - * @return static - */ - public function whereNotIn($key, $values, $strict = false) - { - $values = $this->getArrayableItems($values); - - return $this->reject(function ($item) use ($key, $values, $strict) { - return in_array(data_get($item, $key), $values, $strict); - }); - } - - /** - * Filter items by the given key value pair using strict comparison. - * - * @param string $key - * @param mixed $values - * @return static - */ - public function whereNotInStrict($key, $values) - { - return $this->whereNotIn($key, $values, true); - } - - /** - * Filter the items, removing any items that don't match the given type. - * - * @param string $type - * @return static - */ - public function whereInstanceOf($type) - { - return $this->filter(function ($value) use ($type) { - return $value instanceof $type; - }); - } - - /** - * Get the first item from the collection. + * Get the first item from the collection passing the given truth test. * * @param callable|null $callback * @param mixed $default @@ -759,19 +367,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return Arr::first($this->items, $callback, $default); } - /** - * Get the first item by the given key value pair. - * - * @param string $key - * @param mixed $operator - * @param mixed $value - * @return mixed - */ - public function firstWhere($key, $operator, $value = null) - { - return $this->first($this->operatorForWhere(...func_get_args())); - } - /** * Get a flattened array of the items in the collection. * @@ -833,7 +428,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate */ public function groupBy($groupBy, $preserveKeys = false) { - if (is_array($groupBy)) { + if (! $this->useAsCallable($groupBy) && is_array($groupBy)) { $nextGroups = $groupBy; $groupBy = array_shift($nextGroups); @@ -918,7 +513,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate * Concatenate values of a given key as a string. * * @param string $value - * @param string $glue + * @param string|null $glue * @return string */ public function implode($value, $glue = null) @@ -967,24 +562,33 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Determine if the collection is not empty. + * Join all items from the collection using a string. The final items can use a separate glue string. * - * @return bool + * @param string $glue + * @param string $finalGlue + * @return string */ - public function isNotEmpty() + public function join($glue, $finalGlue = '') { - return ! $this->isEmpty(); - } + if ($finalGlue === '') { + return $this->implode($glue); + } - /** - * Determine if the given value is callable, but not a string. - * - * @param mixed $value - * @return bool - */ - protected function useAsCallable($value) - { - return ! is_string($value) && is_callable($value); + $count = $this->count(); + + if ($count === 0) { + return ''; + } + + if ($count === 1) { + return $this->last(); + } + + $collection = new static($this->items); + + $finalItem = $collection->pop(); + + return $collection->implode($glue).$finalGlue.$finalItem; } /** @@ -1036,21 +640,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(array_combine($keys, $items)); } - /** - * Run a map over each nested chunk of items. - * - * @param callable $callback - * @return static - */ - public function mapSpread(callable $callback) - { - return $this->map(function ($chunk, $key) use ($callback) { - $chunk[] = $key; - - return $callback(...$chunk); - }); - } - /** * Run a dictionary map over the items. * @@ -1080,21 +669,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static($dictionary); } - /** - * Run a grouping map over the items. - * - * The callback should return an associative array with a single key/value pair. - * - * @param callable $callback - * @return static - */ - public function mapToGroups(callable $callback) - { - $groups = $this->mapToDictionary($callback); - - return $groups->map([$this, 'make']); - } - /** * Run an associative map over each of the items. * @@ -1118,49 +692,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static($result); } - /** - * Map a collection and flatten the result by a single level. - * - * @param callable $callback - * @return static - */ - public function flatMap(callable $callback) - { - return $this->map($callback)->collapse(); - } - - /** - * Map the values into a new class. - * - * @param string $class - * @return static - */ - public function mapInto($class) - { - return $this->map(function ($value, $key) use ($class) { - return new $class($value, $key); - }); - } - - /** - * Get the max value of a given key. - * - * @param callable|string|null $callback - * @return mixed - */ - public function max($callback = null) - { - $callback = $this->valueRetriever($callback); - - return $this->filter(function ($value) { - return ! is_null($value); - })->reduce(function ($result, $item) use ($callback) { - $value = $callback($item); - - return is_null($result) || $value > $result ? $value : $result; - }); - } - /** * Merge the collection with the given items. * @@ -1172,6 +703,17 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(array_merge($this->items, $this->getArrayableItems($items))); } + /** + * Recursively merge the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function mergeRecursive($items) + { + return new static(array_merge_recursive($this->items, $this->getArrayableItems($items))); + } + /** * Create a collection by using this collection for keys and another for its values. * @@ -1194,25 +736,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static($this->items + $this->getArrayableItems($items)); } - /** - * Get the min value of a given key. - * - * @param callable|string|null $callback - * @return mixed - */ - public function min($callback = null) - { - $callback = $this->valueRetriever($callback); - - return $this->map(function ($value) use ($callback) { - return $callback($value); - })->filter(function ($value) { - return ! is_null($value); - })->reduce(function ($result, $value) { - return is_null($result) || $value < $result ? $value : $result; - }); - } - /** * Create a new collection consisting of every n-th element. * @@ -1249,7 +772,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static($this->items); } - if ($keys instanceof self) { + if ($keys instanceof Enumerable) { $keys = $keys->all(); } @@ -1258,54 +781,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(Arr::only($this->items, $keys)); } - /** - * "Paginate" the collection by slicing it into a smaller collection. - * - * @param int $page - * @param int $perPage - * @return static - */ - public function forPage($page, $perPage) - { - $offset = max(0, ($page - 1) * $perPage); - - return $this->slice($offset, $perPage); - } - - /** - * Partition the collection into two arrays using the given callback or key. - * - * @param callable|string $key - * @param mixed $operator - * @param mixed $value - * @return static - */ - public function partition($key, $operator = null, $value = null) - { - $partitions = [new static, new static]; - - $callback = func_num_args() === 1 - ? $this->valueRetriever($key) - : $this->operatorForWhere(...func_get_args()); - - foreach ($this->items as $key => $item) { - $partitions[(int) ! $callback($item, $key)][$key] = $item; - } - - return new static($partitions); - } - - /** - * Pass the collection to the given callback and return the result. - * - * @param callable $callback - * @return mixed - */ - public function pipe(callable $callback) - { - return $callback($this); - } - /** * Get and remove the last item from the collection. * @@ -1331,14 +806,16 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Push an item onto the end of the collection. + * Push one or more items onto the end of the collection. * - * @param mixed $value + * @param mixed $values * @return $this */ - public function push($value) + public function push(...$values) { - $this->offsetSet(null, $value); + foreach ($values as $value) { + $this->items[] = $value; + } return $this; } @@ -1416,22 +893,25 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Create a collection of all elements that do not pass a given truth test. + * Replace the collection items with the given items. * - * @param callable|mixed $callback + * @param mixed $items * @return static */ - public function reject($callback) + public function replace($items) { - if ($this->useAsCallable($callback)) { - return $this->filter(function ($value, $key) use ($callback) { - return ! $callback($value, $key); - }); - } + return new static(array_replace($this->items, $this->getArrayableItems($items))); + } - return $this->filter(function ($item) use ($callback) { - return $item != $callback; - }); + /** + * Recursively replace the collection items with the given items. + * + * @param mixed $items + * @return static + */ + public function replaceRecursive($items) + { + return new static(array_replace_recursive($this->items, $this->getArrayableItems($items))); } /** @@ -1458,7 +938,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } foreach ($this->items as $key => $item) { - if (call_user_func($value, $item, $key)) { + if ($value($item, $key)) { return $key; } } @@ -1479,7 +959,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate /** * Shuffle the items in the collection. * - * @param int $seed + * @param int|null $seed * @return static */ public function shuffle($seed = null) @@ -1487,11 +967,44 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(Arr::shuffle($this->items, $seed)); } + /** + * Skip the first {$count} items. + * + * @param int $count + * @return static + */ + public function skip($count) + { + return $this->slice($count); + } + + /** + * Skip items in the collection until the given condition is met. + * + * @param mixed $value + * @return static + */ + public function skipUntil($value) + { + return new static($this->lazy()->skipUntil($value)->all()); + } + + /** + * Skip items in the collection while the given condition is met. + * + * @param mixed $value + * @return static + */ + public function skipWhile($value) + { + return new static($this->lazy()->skipWhile($value)->all()); + } + /** * Slice the underlying collection array. * * @param int $offset - * @param int $length + * @param int|null $length * @return static */ public function slice($offset, $length = null) @@ -1537,7 +1050,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Chunk the underlying collection array. + * Chunk the collection into chunks of the given size. * * @param int $size * @return static @@ -1560,16 +1073,31 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate /** * Sort through each item with a callback. * - * @param callable|null $callback + * @param callable|int|null $callback * @return static */ - public function sort(callable $callback = null) + public function sort($callback = null) { $items = $this->items; - $callback + $callback && is_callable($callback) ? uasort($items, $callback) - : asort($items); + : asort($items, $callback); + + return new static($items); + } + + /** + * Sort items in descending order. + * + * @param int $options + * @return static + */ + public function sortDesc($options = SORT_REGULAR) + { + $items = $this->items; + + arsort($items, $options); return new static($items); } @@ -1639,7 +1167,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate /** * Sort the collection keys in descending order. * - * @param int $options + * @param int $options * @return static */ public function sortKeysDesc($options = SORT_REGULAR) @@ -1664,25 +1192,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(array_splice($this->items, $offset, $length, $replacement)); } - /** - * Get the sum of the given values. - * - * @param callable|string|null $callback - * @return mixed - */ - public function sum($callback = null) - { - if (is_null($callback)) { - return array_sum($this->items); - } - - $callback = $this->valueRetriever($callback); - - return $this->reduce(function ($result, $item) use ($callback) { - return $result + $callback($item); - }, 0); - } - /** * Take the first or last {$limit} items. * @@ -1699,16 +1208,25 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Pass the collection to the given callback and then return it. + * Take items in the collection until the given condition is met. * - * @param callable $callback - * @return $this + * @param mixed $value + * @return static */ - public function tap(callable $callback) + public function takeUntil($value) { - $callback(new static($this->items)); + return new static($this->lazy()->takeUntil($value)->all()); + } - return $this; + /** + * Take items in the collection while the given condition is met. + * + * @param mixed $value + * @return static + */ + public function takeWhile($value) + { + return new static($this->lazy()->takeWhile($value)->all()); } /** @@ -1724,39 +1242,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return $this; } - /** - * Return only unique items from the collection array. - * - * @param string|callable|null $key - * @param bool $strict - * @return static - */ - public function unique($key = null, $strict = false) - { - $callback = $this->valueRetriever($key); - - $exists = []; - - return $this->reject(function ($item, $key) use ($callback, $strict, &$exists) { - if (in_array($id = $callback($item, $key), $exists, $strict)) { - return true; - } - - $exists[] = $id; - }); - } - - /** - * Return only unique items from the collection array using strict comparison. - * - * @param string|callable|null $key - * @return static - */ - public function uniqueStrict($key = null) - { - return $this->unique($key, true); - } - /** * Reset the keys on the underlying array. * @@ -1767,30 +1252,13 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(array_values($this->items)); } - /** - * Get a value retrieving callback. - * - * @param string $value - * @return callable - */ - protected function valueRetriever($value) - { - if ($this->useAsCallable($value)) { - return $value; - } - - return function ($item) use ($value) { - return data_get($item, $value); - }; - } - /** * Zip the collection together with one or more arrays. * * e.g. new Collection([1, 2, 3])->zip([4, 5, 6]); * => [[1, 4], [2, 5], [3, 6]] * - * @param mixed ...$items + * @param mixed ...$items * @return static */ public function zip($items) @@ -1803,7 +1271,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(func_get_args()); }, $this->items], $arrayableItems); - return new static(call_user_func_array('array_map', $params)); + return new static(array_map(...$params)); } /** @@ -1818,49 +1286,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(array_pad($this->items, $size, $value)); } - /** - * Get the collection of items as a plain array. - * - * @return array - */ - public function toArray() - { - return array_map(function ($value) { - return $value instanceof Arrayable ? $value->toArray() : $value; - }, $this->items); - } - - /** - * Convert the object into something JSON serializable. - * - * @return array - */ - public function jsonSerialize() - { - return array_map(function ($value) { - if ($value instanceof JsonSerializable) { - return $value->jsonSerialize(); - } elseif ($value instanceof Jsonable) { - return json_decode($value->toJson(), true); - } elseif ($value instanceof Arrayable) { - return $value->toArray(); - } - - return $value; - }, $this->items); - } - - /** - * Get the collection of items as JSON. - * - * @param int $options - * @return string - */ - public function toJson($options = 0) - { - return json_encode($this->jsonSerialize(), $options); - } - /** * Get an iterator for the items. * @@ -1871,17 +1296,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new ArrayIterator($this->items); } - /** - * Get a CachingIterator instance. - * - * @param int $flags - * @return \CachingIterator - */ - public function getCachingIterator($flags = CachingIterator::CALL_TOSTRING) - { - return new CachingIterator($this->getIterator(), $flags); - } - /** * Count the number of items in the collection. * @@ -1892,6 +1306,30 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return count($this->items); } + /** + * Count the number of items in the collection by a field or using a callback. + * + * @param callable|string $countBy + * @return static + */ + public function countBy($countBy = null) + { + return new static($this->lazy()->countBy($countBy)->all()); + } + + /** + * Add an item to the collection. + * + * @param mixed $item + * @return $this + */ + public function add($item) + { + $this->items[] = $item; + + return $this; + } + /** * Get a base Support collection instance from this collection. * @@ -1950,67 +1388,4 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate { unset($this->items[$key]); } - - /** - * Convert the collection to its string representation. - * - * @return string - */ - public function __toString() - { - return $this->toJson(); - } - - /** - * Results array of items from Collection or Arrayable. - * - * @param mixed $items - * @return array - */ - protected function getArrayableItems($items) - { - if (is_array($items)) { - return $items; - } elseif ($items instanceof self) { - return $items->all(); - } elseif ($items instanceof Arrayable) { - return $items->toArray(); - } elseif ($items instanceof Jsonable) { - return json_decode($items->toJson(), true); - } elseif ($items instanceof JsonSerializable) { - return $items->jsonSerialize(); - } elseif ($items instanceof Traversable) { - return iterator_to_array($items); - } - - return (array) $items; - } - - /** - * Add a method to the list of proxied methods. - * - * @param string $method - * @return void - */ - public static function proxy($method) - { - static::$proxies[] = $method; - } - - /** - * Dynamically access collection proxies. - * - * @param string $key - * @return mixed - * - * @throws \Exception - */ - public function __get($key) - { - if (! in_array($key, static::$proxies)) { - throw new Exception("Property [{$key}] does not exist on this collection instance."); - } - - return new HigherOrderCollectionProxy($this, $key); - } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Composer.php b/vendor/laravel/framework/src/Illuminate/Support/Composer.php index bc76aeb2..7eca930c 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Composer.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Composer.php @@ -3,8 +3,8 @@ namespace Illuminate\Support; use Illuminate\Filesystem\Filesystem; -use Symfony\Component\Process\Process; use Symfony\Component\Process\PhpExecutableFinder; +use Symfony\Component\Process\Process; class Composer { @@ -18,7 +18,7 @@ class Composer /** * The working path to regenerate from. * - * @var string + * @var string|null */ protected $workingPath; @@ -38,16 +38,16 @@ class Composer /** * Regenerate the Composer autoloader files. * - * @param string $extra + * @param string|array $extra * @return void */ public function dumpAutoloads($extra = '') { - $process = $this->getProcess(); + $extra = $extra ? (array) $extra : []; - $process->setCommandLine(trim($this->findComposer().' dump-autoload '.$extra)); + $command = array_merge($this->findComposer(), ['dump-autoload'], $extra); - $process->run(); + $this->getProcess($command)->run(); } /** @@ -63,25 +63,36 @@ class Composer /** * Get the composer command for the environment. * - * @return string + * @return array */ protected function findComposer() { if ($this->files->exists($this->workingPath.'/composer.phar')) { - return ProcessUtils::escapeArgument((new PhpExecutableFinder)->find(false)).' composer.phar'; + return [$this->phpBinary(), 'composer.phar']; } - return 'composer'; + return ['composer']; + } + + /** + * Get the PHP binary. + * + * @return string + */ + protected function phpBinary() + { + return ProcessUtils::escapeArgument((new PhpExecutableFinder)->find(false)); } /** * Get a new Symfony process instance. * + * @param array $command * @return \Symfony\Component\Process\Process */ - protected function getProcess() + protected function getProcess(array $command) { - return (new Process('', $this->workingPath))->setTimeout(null); + return (new Process($command, $this->workingPath))->setTimeout(null); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Support/ConfigurationUrlParser.php b/vendor/laravel/framework/src/Illuminate/Support/ConfigurationUrlParser.php new file mode 100644 index 00000000..946252fb --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/ConfigurationUrlParser.php @@ -0,0 +1,193 @@ + 'sqlsrv', + 'mysql2' => 'mysql', // RDS + 'postgres' => 'pgsql', + 'postgresql' => 'pgsql', + 'sqlite3' => 'sqlite', + 'redis' => 'tcp', + 'rediss' => 'tls', + ]; + + /** + * Parse the database configuration, hydrating options using a database configuration URL if possible. + * + * @param array|string $config + * @return array + */ + public function parseConfiguration($config) + { + if (is_string($config)) { + $config = ['url' => $config]; + } + + $url = Arr::pull($config, 'url'); + + if (! $url) { + return $config; + } + + $rawComponents = $this->parseUrl($url); + + $decodedComponents = $this->parseStringsToNativeTypes( + array_map('rawurldecode', $rawComponents) + ); + + return array_merge( + $config, + $this->getPrimaryOptions($decodedComponents), + $this->getQueryOptions($rawComponents) + ); + } + + /** + * Get the primary database connection options. + * + * @param array $url + * @return array + */ + protected function getPrimaryOptions($url) + { + return array_filter([ + 'driver' => $this->getDriver($url), + 'database' => $this->getDatabase($url), + 'host' => $url['host'] ?? null, + 'port' => $url['port'] ?? null, + 'username' => $url['user'] ?? null, + 'password' => $url['pass'] ?? null, + ], function ($value) { + return ! is_null($value); + }); + } + + /** + * Get the database driver from the URL. + * + * @param array $url + * @return string|null + */ + protected function getDriver($url) + { + $alias = $url['scheme'] ?? null; + + if (! $alias) { + return; + } + + return static::$driverAliases[$alias] ?? $alias; + } + + /** + * Get the database name from the URL. + * + * @param array $url + * @return string|null + */ + protected function getDatabase($url) + { + $path = $url['path'] ?? null; + + return $path && $path !== '/' ? substr($path, 1) : null; + } + + /** + * Get all of the additional database options from the query string. + * + * @param array $url + * @return array + */ + protected function getQueryOptions($url) + { + $queryString = $url['query'] ?? null; + + if (! $queryString) { + return []; + } + + $query = []; + + parse_str($queryString, $query); + + return $this->parseStringsToNativeTypes($query); + } + + /** + * Parse the string URL to an array of components. + * + * @param string $url + * @return array + * + * @throws \InvalidArgumentException + */ + protected function parseUrl($url) + { + $url = preg_replace('#^(sqlite3?):///#', '$1://null/', $url); + + $parsedUrl = parse_url($url); + + if ($parsedUrl === false) { + throw new InvalidArgumentException('The database configuration URL is malformed.'); + } + + return $parsedUrl; + } + + /** + * Convert string casted values to their native types. + * + * @param mixed $value + * @return mixed + */ + protected function parseStringsToNativeTypes($value) + { + if (is_array($value)) { + return array_map([$this, 'parseStringsToNativeTypes'], $value); + } + + if (! is_string($value)) { + return $value; + } + + $parsedValue = json_decode($value, true); + + if (json_last_error() === JSON_ERROR_NONE) { + return $parsedValue; + } + + return $value; + } + + /** + * Get all of the current drivers aliases. + * + * @return array + */ + public static function getDriverAliases() + { + return static::$driverAliases; + } + + /** + * Add the given driver alias to the driver aliases array. + * + * @param string $alias + * @param string $driver + * @return void + */ + public static function addDriverAlias($alias, $driver) + { + static::$driverAliases[$alias] = $driver; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/DateFactory.php b/vendor/laravel/framework/src/Illuminate/Support/DateFactory.php new file mode 100644 index 00000000..72f22231 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/DateFactory.php @@ -0,0 +1,231 @@ +$method(...$parameters); + } + + $dateClass = static::$dateClass ?: $defaultClassName; + + // Check if date can be created using public class method... + if (method_exists($dateClass, $method) || + method_exists($dateClass, 'hasMacro') && $dateClass::hasMacro($method)) { + return $dateClass::$method(...$parameters); + } + + // If that fails, create the date with the default class.. + $date = $defaultClassName::$method(...$parameters); + + // If the configured class has an "instance" method, we'll try to pass our date into there... + if (method_exists($dateClass, 'instance')) { + return $dateClass::instance($date); + } + + // Otherwise, assume the configured class has a DateTime compatible constructor... + return new $dateClass($date->format('Y-m-d H:i:s.u'), $date->getTimezone()); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/Enumerable.php b/vendor/laravel/framework/src/Illuminate/Support/Enumerable.php new file mode 100644 index 00000000..5c512e46 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Enumerable.php @@ -0,0 +1,928 @@ +withReaders($adapters) + ->withWriters($adapters) + ->immutable() + ->make(); + } + + return static::$repository; + } + + /** + * Gets the value of an environment variable. + * + * @param string $key + * @param mixed $default + * @return mixed + */ + public static function get($key, $default = null) + { + return Option::fromValue(static::getRepository()->get($key)) + ->map(function ($value) { + switch (strtolower($value)) { + case 'true': + case '(true)': + return true; + case 'false': + case '(false)': + return false; + case 'empty': + case '(empty)': + return ''; + case 'null': + case '(null)': + return; + } + + if (preg_match('/\A([\'"])(.*)\1\z/', $value, $matches)) { + return $matches[2]; + } + + return $value; + }) + ->getOrCall(function () use ($default) { + return value($default); + }); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php index 0e9e6370..dcf59e75 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php @@ -3,19 +3,46 @@ namespace Illuminate\Support\Facades; /** - * @method static string version() - * @method static string basePath() - * @method static string environment() + * @method static \Illuminate\Contracts\Foundation\Application loadEnvironmentFrom(string $file) + * @method static \Illuminate\Support\ServiceProvider register(\Illuminate\Support\ServiceProvider|string $provider, bool $force = false) + * @method static \Illuminate\Support\ServiceProvider resolveProvider(string $provider) + * @method static array getProviders(\Illuminate\Support\ServiceProvider|string $provider) + * @method static bool configurationIsCached() + * @method static bool hasBeenBootstrapped() * @method static bool isDownForMaintenance() - * @method static void registerConfiguredProviders() - * @method static \Illuminate\Support\ServiceProvider register(\Illuminate\Support\ServiceProvider|string $provider, array $options = [], bool $force = false) - * @method static void registerDeferredProvider(string $provider, string $service = null) - * @method static void boot() - * @method static void booting(mixed $callback) - * @method static void booted(mixed $callback) + * @method static bool routesAreCached() + * @method static bool runningInConsole() + * @method static bool runningUnitTests() + * @method static bool shouldSkipMiddleware() + * @method static string basePath() + * @method static string bootstrapPath(string $path = '') + * @method static string configPath(string $path = '') + * @method static string databasePath(string $path = '') + * @method static string detectEnvironment(callable $callback) + * @method static string environmentFile() + * @method static string environmentFilePath() + * @method static string environmentPath() + * @method static string getCachedConfigPath() + * @method static string getCachedPackagesPath() + * @method static string getCachedRoutesPath() * @method static string getCachedServicesPath() + * @method static string getLocale() + * @method static string getNamespace() + * @method static string resourcePath(string $path = '') + * @method static string storagePath(string $path = '') + * @method static string version() + * @method static string|bool environment(string|array ...$environments) + * @method static void boot() + * @method static void booted(callable $callback) + * @method static void booting(callable $callback) + * @method static void bootstrapWith(array $bootstrappers) + * @method static void loadDeferredProviders() + * @method static void registerConfiguredProviders() + * @method static void registerDeferredProvider(string $provider, string $service = null) + * @method static void setLocale(string $locale) + * @method static void terminate() * - * @see \Illuminate\Foundation\Application + * @see \Illuminate\Contracts\Foundation\Application */ class App extends Facade { diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Artisan.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Artisan.php index 8be0b5c7..e383c490 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Artisan.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Artisan.php @@ -5,11 +5,13 @@ namespace Illuminate\Support\Facades; use Illuminate\Contracts\Console\Kernel as ConsoleKernelContract; /** - * @method static int handle(\Symfony\Component\Console\Input\InputInterface $input, \Symfony\Component\Console\Output\OutputInterface $output = null) - * @method static int call(string $command, array $parameters = [], $outputBuffer = null) - * @method static int queue(string $command, array $parameters = []) + * @method static \Illuminate\Foundation\Bus\PendingDispatch queue(string $command, array $parameters = []) + * @method static \Illuminate\Foundation\Console\ClosureCommand command(string $command, callable $callback) * @method static array all() + * @method static int call(string $command, array $parameters = [], \Symfony\Component\Console\Output\OutputInterface|null $outputBuffer = null) + * @method static int handle(\Symfony\Component\Console\Input\InputInterface $input, \Symfony\Component\Console\Output\OutputInterface|null $output = null) * @method static string output() + * @method static void terminate(\Symfony\Component\Console\Input\InputInterface $input, int $status) * * @see \Illuminate\Contracts\Console\Kernel */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php index d794a0b6..02ce2cd7 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php @@ -2,27 +2,30 @@ namespace Illuminate\Support\Facades; +use Laravel\Ui\UiServiceProvider; +use RuntimeException; + /** - * @method static mixed guard(string|null $name = null) - * @method static void shouldUse(string $name); - * @method static bool check() - * @method static bool guest() - * @method static \Illuminate\Contracts\Auth\Authenticatable|null user() - * @method static int|null id() - * @method static bool validate(array $credentials = []) - * @method static void setUser(\Illuminate\Contracts\Auth\Authenticatable $user) - * @method static bool attempt(array $credentials = [], bool $remember = false) - * @method static bool once(array $credentials = []) - * @method static void login(\Illuminate\Contracts\Auth\Authenticatable $user, bool $remember = false) - * @method static \Illuminate\Contracts\Auth\Authenticatable loginUsingId(mixed $id, bool $remember = false) - * @method static bool onceUsingId(mixed $id) - * @method static bool viaRemember() - * @method static void logout() - * @method static \Symfony\Component\HttpFoundation\Response|null onceBasic(string $field = 'email',array $extraConditions = []) - * @method static null|bool logoutOtherDevices(string $password, string $attribute = 'password') - * @method static \Illuminate\Contracts\Auth\UserProvider|null createUserProvider(string $provider = null) * @method static \Illuminate\Auth\AuthManager extend(string $driver, \Closure $callback) * @method static \Illuminate\Auth\AuthManager provider(string $name, \Closure $callback) + * @method static \Illuminate\Contracts\Auth\Authenticatable loginUsingId(mixed $id, bool $remember = false) + * @method static \Illuminate\Contracts\Auth\Authenticatable|null user() + * @method static \Illuminate\Contracts\Auth\Guard|\Illuminate\Contracts\Auth\StatefulGuard guard(string|null $name = null) + * @method static \Illuminate\Contracts\Auth\UserProvider|null createUserProvider(string $provider = null) + * @method static \Symfony\Component\HttpFoundation\Response|null onceBasic(string $field = 'email',array $extraConditions = []) + * @method static bool attempt(array $credentials = [], bool $remember = false) + * @method static bool check() + * @method static bool guest() + * @method static bool once(array $credentials = []) + * @method static bool onceUsingId(mixed $id) + * @method static bool validate(array $credentials = []) + * @method static bool viaRemember() + * @method static bool|null logoutOtherDevices(string $password, string $attribute = 'password') + * @method static int|string|null id() + * @method static void login(\Illuminate\Contracts\Auth\Authenticatable $user, bool $remember = false) + * @method static void logout() + * @method static void setUser(\Illuminate\Contracts\Auth\Authenticatable $user) + * @method static void shouldUse(string $name); * * @see \Illuminate\Auth\AuthManager * @see \Illuminate\Contracts\Auth\Factory @@ -49,6 +52,10 @@ class Auth extends Facade */ public static function routes(array $options = []) { + if (! static::$app->providerIsLoaded(UiServiceProvider::class)) { + throw new RuntimeException('In order to use the Auth::routes() method, please install the laravel/ui package.'); + } + static::$app->make('router')->auth($options); } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php index 241f6c6a..54609da0 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php @@ -3,21 +3,27 @@ namespace Illuminate\Support\Facades; /** - * @method static void compile($path = null) - * @method static string getPath() - * @method static void setPath($path) - * @method static string compileString($value) - * @method static string stripParentheses($expression) - * @method static void extend(callable $compiler) - * @method static array getExtensions() - * @method static void if($name, callable $callback) - * @method static bool check($name, ...$parameters) - * @method static void component($path, $alias = null) - * @method static void include($path, $alias = null) - * @method static void directive($name, callable $handler) + * @method static array getClassComponentAliases() * @method static array getCustomDirectives() - * @method static void setEchoFormat($format) + * @method static array getExtensions() + * @method static bool check(string $name, array ...$parameters) + * @method static string compileString(string $value) + * @method static string getPath() + * @method static string stripParentheses(string $expression) + * @method static void aliasComponent(string $path, string|null $alias = null) + * @method static void aliasInclude(string $path, string|null $alias = null) + * @method static void compile(string|null $path = null) + * @method static void component(string $class, string|null $alias = null, string $prefix = '') + * @method static void components(array $components, string $prefix = '') + * @method static void directive(string $name, callable $handler) + * @method static void extend(callable $compiler) + * @method static void if(string $name, callable $callback) + * @method static void include(string $path, string|null $alias = null) + * @method static void precompiler(callable $precompiler) + * @method static void setEchoFormat(string $format) + * @method static void setPath(string $path) * @method static void withDoubleEncoding() + * @method static void withoutComponentTags() * @method static void withoutDoubleEncoding() * * @see \Illuminate\View\Compilers\BladeCompiler @@ -31,6 +37,6 @@ class Blade extends Facade */ protected static function getFacadeAccessor() { - return static::$app['view']->getEngineResolver()->resolve('blade')->getCompiler(); + return 'blade.compiler'; } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Broadcast.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Broadcast.php index 304aba9f..55f94b69 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Broadcast.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Broadcast.php @@ -5,9 +5,10 @@ namespace Illuminate\Support\Facades; use Illuminate\Contracts\Broadcasting\Factory as BroadcastingFactoryContract; /** - * @method static void connection($name = null); - * @method static \Illuminate\Broadcasting\Broadcasters\Broadcaster channel(string $channel, callable|string $callback) + * @method static \Illuminate\Broadcasting\Broadcasters\Broadcaster channel(string $channel, callable|string $callback, array $options = []) * @method static mixed auth(\Illuminate\Http\Request $request) + * @method static void connection($name = null); + * @method static void routes(array $attributes = null) * * @see \Illuminate\Contracts\Broadcasting\Factory */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Bus.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Bus.php index 9bbd4901..f6948f73 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Bus.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Bus.php @@ -2,16 +2,20 @@ namespace Illuminate\Support\Facades; -use Illuminate\Support\Testing\Fakes\BusFake; use Illuminate\Contracts\Bus\Dispatcher as BusDispatcherContract; +use Illuminate\Foundation\Bus\PendingChain; +use Illuminate\Support\Testing\Fakes\BusFake; /** - * @method static mixed dispatch($command) - * @method static mixed dispatchNow($command, $handler = null) + * @method static \Illuminate\Contracts\Bus\Dispatcher map(array $map) + * @method static \Illuminate\Contracts\Bus\Dispatcher pipeThrough(array $pipes) * @method static bool hasCommandHandler($command) * @method static bool|mixed getCommandHandler($command) - * @method static \Illuminate\Contracts\Bus\Dispatcher pipeThrough(array $pipes) - * @method static \Illuminate\Contracts\Bus\Dispatcher map(array $map) + * @method static mixed dispatch($command) + * @method static mixed dispatchNow($command, $handler = null) + * @method static void assertDispatched(string $command, callable|int $callback = null) + * @method static void assertDispatchedTimes(string $command, int $times = 1) + * @method static void assertNotDispatched(string $command, callable|int $callback = null) * * @see \Illuminate\Contracts\Bus\Dispatcher */ @@ -20,11 +24,28 @@ class Bus extends Facade /** * Replace the bound instance with a fake. * - * @return void + * @param array|string $jobsToFake + * @return \Illuminate\Support\Testing\Fakes\BusFake */ - public static function fake() + public static function fake($jobsToFake = []) { - static::swap(new BusFake); + static::swap($fake = new BusFake(static::getFacadeRoot(), $jobsToFake)); + + return $fake; + } + + /** + * Dispatch the given chain of jobs. + * + * @param array|mixed $jobs + * @return \Illuminate\Foundation\Bus\PendingDispatch + */ + public static function dispatchChain($jobs) + { + $jobs = is_array($jobs) ? $jobs : func_get_args(); + + return (new PendingChain(array_shift($jobs), $jobs)) + ->dispatch(); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Cache.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Cache.php index 67022817..c62736ac 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Cache.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Cache.php @@ -3,21 +3,24 @@ namespace Illuminate\Support\Facades; /** + * @method static \Illuminate\Cache\TaggedCache tags(array|mixed $names) + * @method static \Illuminate\Contracts\Cache\Lock lock(string $name, int $seconds = 0, mixed $owner = null) + * @method static \Illuminate\Contracts\Cache\Lock restoreLock(string $name, string $owner) * @method static \Illuminate\Contracts\Cache\Repository store(string|null $name = null) + * @method static \Illuminate\Contracts\Cache\Store getStore() + * @method static bool add(string $key, $value, \DateTimeInterface|\DateInterval|int $ttl = null) + * @method static bool forever(string $key, $value) + * @method static bool forget(string $key) * @method static bool has(string $key) * @method static bool missing(string $key) + * @method static bool put(string $key, $value, \DateTimeInterface|\DateInterval|int $ttl = null) + * @method static int|bool decrement(string $key, $value = 1) + * @method static int|bool increment(string $key, $value = 1) * @method static mixed get(string $key, mixed $default = null) * @method static mixed pull(string $key, mixed $default = null) - * @method static void put(string $key, $value, \DateTimeInterface|\DateInterval|float|int $minutes) - * @method static bool add(string $key, $value, \DateTimeInterface|\DateInterval|float|int $minutes) - * @method static int|bool increment(string $key, $value = 1) - * @method static int|bool decrement(string $key, $value = 1) - * @method static void forever(string $key, $value) - * @method static mixed remember(string $key, \DateTimeInterface|\DateInterval|float|int $minutes, \Closure $callback) - * @method static mixed sear(string $key, \Closure $callback) + * @method static mixed remember(string $key, \DateTimeInterface|\DateInterval|int $ttl, \Closure $callback) * @method static mixed rememberForever(string $key, \Closure $callback) - * @method static bool forget(string $key) - * @method static \Illuminate\Contracts\Cache\Store getStore() + * @method static mixed sear(string $key, \Closure $callback) * * @see \Illuminate\Cache\CacheManager * @see \Illuminate\Cache\Repository diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Config.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Config.php index e1fa74ab..a66256c9 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Config.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Config.php @@ -3,12 +3,12 @@ namespace Illuminate\Support\Facades; /** + * @method static array all() * @method static bool has($key) * @method static mixed get($key, $default = null) - * @method static array all() - * @method static void set($key, $value = null) * @method static void prepend($key, $value) * @method static void push($key, $value) + * @method static void set($key, $value = null) * * @see \Illuminate\Config\Repository */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Cookie.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Cookie.php index 9d1cbf36..cd1fe668 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Cookie.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Cookie.php @@ -3,9 +3,9 @@ namespace Illuminate\Support\Facades; /** - * @method static void queue(...$parameters) - * @method static unqueue($name) * @method static array getQueuedCookies() + * @method static unqueue($name) + * @method static void queue(...$parameters) * * @see \Illuminate\Cookie\CookieJar */ @@ -25,8 +25,8 @@ class Cookie extends Facade /** * Retrieve a cookie from the request. * - * @param string $key - * @param mixed $default + * @param string|null $key + * @param mixed $default * @return string|array|null */ public static function get($key = null, $default = null) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Crypt.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Crypt.php index 84317c37..61eaaa83 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Crypt.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Crypt.php @@ -3,8 +3,13 @@ namespace Illuminate\Support\Facades; /** - * @method static string encrypt(string $value, bool $serialize = true) - * @method static string decrypt(string $payload, bool $unserialize = true) + * @method static bool supported(string $key, string $cipher) + * @method static mixed decrypt(string $payload, bool $unserialize = true) + * @method static string decryptString(string $payload) + * @method static string encrypt(mixed $value, bool $serialize = true) + * @method static string encryptString(string $value) + * @method static string generateKey(string $cipher) + * @method static string getKey() * * @see \Illuminate\Encryption\Encrypter */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/DB.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/DB.php index 93df8236..96ab454a 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/DB.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/DB.php @@ -4,25 +4,31 @@ namespace Illuminate\Support\Facades; /** * @method static \Illuminate\Database\ConnectionInterface connection(string $name = null) - * @method static string getDefaultConnection() - * @method static void setDefaultConnection(string $name) - * @method static \Illuminate\Database\Query\Builder table(string $table) + * @method static \Illuminate\Database\Query\Builder table(string $table, string $as = null) * @method static \Illuminate\Database\Query\Expression raw($value) - * @method static mixed selectOne(string $query, array $bindings = []) - * @method static array select(string $query, array $bindings = []) - * @method static bool insert(string $query, array $bindings = []) - * @method static int update(string $query, array $bindings = []) - * @method static int delete(string $query, array $bindings = []) - * @method static bool statement(string $query, array $bindings = []) - * @method static int affectingStatement(string $query, array $bindings = []) - * @method static bool unprepared(string $query) + * @method static array getQueryLog() * @method static array prepareBindings(array $bindings) + * @method static array pretend(\Closure $callback) + * @method static array select(string $query, array $bindings = [], bool $useReadPdo = true) + * @method static bool insert(string $query, array $bindings = []) + * @method static bool logging() + * @method static bool statement(string $query, array $bindings = []) + * @method static bool unprepared(string $query) + * @method static int affectingStatement(string $query, array $bindings = []) + * @method static int delete(string $query, array $bindings = []) + * @method static int transactionLevel() + * @method static int update(string $query, array $bindings = []) + * @method static mixed selectOne(string $query, array $bindings = [], bool $useReadPdo = true) * @method static mixed transaction(\Closure $callback, int $attempts = 1) + * @method static string getDefaultConnection() * @method static void beginTransaction() * @method static void commit() - * @method static void rollBack() - * @method static int transactionLevel() - * @method static array pretend(\Closure $callback) + * @method static void enableQueryLog() + * @method static void disableQueryLog() + * @method static void flushQueryLog() + * @method static void listen(\Closure $callback) + * @method static void rollBack(int $toLevel = null) + * @method static void setDefaultConnection(string $name) * * @see \Illuminate\Database\DatabaseManager * @see \Illuminate\Database\Connection diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Date.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Date.php new file mode 100644 index 00000000..68d99a47 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Date.php @@ -0,0 +1,120 @@ +afterResolving(static::getFacadeAccessor(), function ($service) use ($callback) { + $accessor = static::getFacadeAccessor(); + + if (static::$app->resolved($accessor) === true) { + $callback(static::getFacadeRoot()); + } + + static::$app->afterResolving($accessor, function ($service) use ($callback) { $callback($service); }); } @@ -52,6 +58,22 @@ abstract class Facade } } + /** + * Initiate a partial mock on the facade. + * + * @return \Mockery\MockInterface + */ + public static function partialMock() + { + $name = static::getFacadeAccessor(); + + $mock = static::isMock() + ? static::$resolvedInstance[$name] + : static::createFreshMockInstance(); + + return $mock->makePartial(); + } + /** * Initiate a mock expectation on the facade. * @@ -71,7 +93,7 @@ abstract class Facade /** * Create a fresh mock instance for the given class. * - * @return \Mockery\Expectation + * @return \Mockery\MockInterface */ protected static function createFreshMockInstance() { @@ -159,7 +181,7 @@ abstract class Facade /** * Resolve the facade root instance from the container. * - * @param string|object $name + * @param object|string $name * @return mixed */ protected static function resolveFacadeInstance($name) @@ -172,7 +194,9 @@ abstract class Facade return static::$resolvedInstance[$name]; } - return static::$resolvedInstance[$name] = static::$app[$name]; + if (static::$app) { + return static::$resolvedInstance[$name] = static::$app[$name]; + } } /** @@ -221,7 +245,7 @@ abstract class Facade * Handle dynamic, static calls to the object. * * @param string $method - * @param array $args + * @param array $args * @return mixed * * @throws \RuntimeException diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php index ff0290d5..3344c67a 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php @@ -3,41 +3,44 @@ namespace Illuminate\Support\Facades; /** + * @method static \Symfony\Component\Finder\SplFileInfo[] allFiles(string $directory, bool $hidden = false) + * @method static \Symfony\Component\Finder\SplFileInfo[] files(string $directory, bool $hidden = false) + * @method static array directories(string $directory) + * @method static array glob(string $pattern, int $flags = 0) + * @method static bool cleanDirectory(string $directory) + * @method static bool copy(string $path, string $target) + * @method static bool copyDirectory(string $directory, string $destination, int|null $options = null) + * @method static bool delete(string|array $paths) + * @method static bool deleteDirectories(string $directory) + * @method static bool deleteDirectory(string $directory, bool $preserve = false) * @method static bool exists(string $path) - * @method static string get(string $path, bool $lock = false) - * @method static string sharedGet(string $path) + * @method static bool isDirectory(string $directory) + * @method static bool isFile(string $file) + * @method static bool isReadable(string $path) + * @method static bool isWritable(string $path) + * @method static bool makeDirectory(string $path, int $mode = 0755, bool $recursive = false, bool $force = false) + * @method static bool move(string $path, string $target) + * @method static bool moveDirectory(string $from, string $to, bool $overwrite = false) + * @method static int append(string $path, string $data) + * @method static int lastModified(string $path) + * @method static int prepend(string $path, string $data) + * @method static int size(string $path) + * @method static int|bool put(string $path, string $contents, bool $lock = false) + * @method static mixed chmod(string $path, int|null $mode = null) * @method static mixed getRequire(string $path) * @method static mixed requireOnce(string $file) - * @method static string hash(string $path) - * @method static int put(string $path, string $contents, bool $lock = false) - * @method static int prepend(string $path, string $data) - * @method static int append(string $path, string $data) - * @method static mixed chmod(string $path, int $mode = null) - * @method static bool delete(string|array $paths) - * @method static bool move(string $path, string $target) - * @method static bool copy(string $path, string $target) - * @method static void link(string $target, string $link) - * @method static string name(string $path) * @method static string basename(string $path) * @method static string dirname(string $path) * @method static string extension(string $path) + * @method static string get(string $path, bool $lock = false) + * @method static string hash(string $path) + * @method static string name(string $path) + * @method static string sharedGet(string $path) * @method static string type(string $path) * @method static string|false mimeType(string $path) - * @method static int size(string $path) - * @method static int lastModified(string $path) - * @method static bool isDirectory(string $directory) - * @method static bool isReadable(string $path) - * @method static bool isWritable(string $path) - * @method static bool isFile(string $file) - * @method static array glob(string $pattern, int $flags = 0) - * @method static \Symfony\Component\Finder\SplFileInfo[] files(string $directory, bool $hidden = false) - * @method static \Symfony\Component\Finder\SplFileInfo[] allFiles(string $directory, bool $hidden = false) - * @method static array directories(string $directory) - * @method static bool makeDirectory(string $path, int $mode = 0755, bool $recursive = false, bool $force = false) - * @method static bool moveDirectory(string $from, string $to, bool $overwrite = false) - * @method static bool copyDirectory(string $directory, string $destination, int $options = null) - * @method static bool deleteDirectory(string $directory, bool $preserve = false) - * @method static bool cleanDirectory(string $directory) + * @method static void ensureDirectoryExists(string $path, int $mode = 0755, bool $recursive = true) + * @method static void link(string $target, string $link) + * @method static void replace(string $path, string $content) * * @see \Illuminate\Filesystem\Filesystem */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Gate.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Gate.php index 01a8519f..21355f20 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Gate.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Gate.php @@ -5,19 +5,22 @@ namespace Illuminate\Support\Facades; use Illuminate\Contracts\Auth\Access\Gate as GateContract; /** - * @method static bool has(string $ability) - * @method static \Illuminate\Contracts\Auth\Access\Gate define(string $ability, callable|string $callback) - * @method static \Illuminate\Contracts\Auth\Access\Gate policy(string $class, string $policy) - * @method static \Illuminate\Contracts\Auth\Access\Gate before(callable $callback) - * @method static \Illuminate\Contracts\Auth\Access\Gate after(callable $callback) - * @method static bool allows(string $ability, array|mixed $arguments = []) - * @method static bool denies(string $ability, array|mixed $arguments = []) - * @method static bool check(iterable|string $abilities, array|mixed $arguments = []) - * @method static bool any(iterable|string $abilities, array|mixed $arguments = []) + * @method static \Illuminate\Auth\Access\Gate guessPolicyNamesUsing(callable $callback) * @method static \Illuminate\Auth\Access\Response authorize(string $ability, array|mixed $arguments = []) - * @method static mixed getPolicyFor(object|string $class) + * @method static \Illuminate\Auth\Access\Response inspect(string $ability, array|mixed $arguments = []) + * @method static \Illuminate\Contracts\Auth\Access\Gate after(callable $callback) + * @method static \Illuminate\Contracts\Auth\Access\Gate before(callable $callback) + * @method static \Illuminate\Contracts\Auth\Access\Gate define(string $ability, callable|string $callback) * @method static \Illuminate\Contracts\Auth\Access\Gate forUser(\Illuminate\Contracts\Auth\Authenticatable|mixed $user) + * @method static \Illuminate\Contracts\Auth\Access\Gate policy(string $class, string $policy) * @method static array abilities() + * @method static bool allows(string $ability, array|mixed $arguments = []) + * @method static bool any(iterable|string $abilities, array|mixed $arguments = []) + * @method static bool check(iterable|string $abilities, array|mixed $arguments = []) + * @method static bool denies(string $ability, array|mixed $arguments = []) + * @method static bool has(string $ability) + * @method static mixed getPolicyFor(object|string $class) + * @method static mixed raw(string $ability, array|mixed $arguments = []) * * @see \Illuminate\Contracts\Auth\Access\Gate */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Hash.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Hash.php index 70cf07c4..2c71090e 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Hash.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Hash.php @@ -4,9 +4,9 @@ namespace Illuminate\Support\Facades; /** * @method static array info(string $hashedValue) - * @method static string make(string $value, array $options = []) * @method static bool check(string $value, string $hashedValue, array $options = []) * @method static bool needsRehash(string $hashedValue, array $options = []) + * @method static string make(string $value, array $options = []) * * @see \Illuminate\Hashing\HashManager */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Http.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Http.php new file mode 100644 index 00000000..f53ec1c2 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Http.php @@ -0,0 +1,54 @@ +input($key, $default); - } - - /** - * Get the registered name of the component. - * - * @return string - */ - protected static function getFacadeAccessor() - { - return 'request'; - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php index 5d533052..fd3f09da 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php @@ -3,11 +3,11 @@ namespace Illuminate\Support\Facades; /** - * @method static mixed trans(string $key, array $replace = [], string $locale = null) - * @method static string transChoice(string $key, int|array|\Countable $number, array $replace = [], string $locale = null) + * @method static bool has(string $key) + * @method static mixed get(string $key, array $replace = [], string $locale = null, bool $fallback = true) + * @method static string choice(string $key, \Countable|int|array $number, array $replace = [], string $locale = null) * @method static string getLocale() * @method static void setLocale(string $locale) - * @method static string|array|null get(string $key, array $replace = [], string $locale = null, bool $fallback = true) * * @see \Illuminate\Translation\Translator */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php index cf25934d..0e8bf3bd 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php @@ -3,17 +3,17 @@ namespace Illuminate\Support\Facades; /** - * @method static void emergency(string $message, array $context = []) + * @method static \Psr\Log\LoggerInterface channel(string $channel = null) + * @method static \Psr\Log\LoggerInterface stack(array $channels, string $channel = null) * @method static void alert(string $message, array $context = []) * @method static void critical(string $message, array $context = []) - * @method static void error(string $message, array $context = []) - * @method static void warning(string $message, array $context = []) - * @method static void notice(string $message, array $context = []) - * @method static void info(string $message, array $context = []) * @method static void debug(string $message, array $context = []) + * @method static void emergency(string $message, array $context = []) + * @method static void error(string $message, array $context = []) + * @method static void info(string $message, array $context = []) * @method static void log($level, string $message, array $context = []) - * @method static mixed channel(string $channel = null) - * @method static \Psr\Log\LoggerInterface stack(array $channels, string $channel = null) + * @method static void notice(string $message, array $context = []) + * @method static void warning(string $message, array $context = []) * * @see \Illuminate\Log\Logger */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Mail.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Mail.php index bee470c7..5aed90b2 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Mail.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Mail.php @@ -5,23 +5,23 @@ namespace Illuminate\Support\Facades; use Illuminate\Support\Testing\Fakes\MailFake; /** - * @method static \Illuminate\Mail\PendingMail to($users) * @method static \Illuminate\Mail\PendingMail bcc($users) - * @method static void raw(string $text, $callback) - * @method static void send(string|array|\Illuminate\Contracts\Mail\Mailable $view, array $data = [], \Closure|string $callback = null) - * @method static array failures() - * @method static mixed queue(string|array|\Illuminate\Contracts\Mail\Mailable $view, string $queue = null) - * @method static mixed later(\DateTimeInterface|\DateInterval|int $delay, string|array|\Illuminate\Contracts\Mail\Mailable $view, string $queue = null) - * @method static void assertSent(string $mailable, \Closure|string $callback = null) - * @method static void assertNotSent(string $mailable, \Closure|string $callback = null) - * @method static void assertNothingSent() - * @method static void assertQueued(string $mailable, \Closure|string $callback = null) - * @method static void assertNotQueued(string $mailable, \Closure|string $callback = null) - * @method static void assertNothingQueued() - * @method static \Illuminate\Support\Collection sent(string $mailable, \Closure|string $callback = null) - * @method static bool hasSent(string $mailable) + * @method static \Illuminate\Mail\PendingMail to($users) * @method static \Illuminate\Support\Collection queued(string $mailable, \Closure|string $callback = null) + * @method static \Illuminate\Support\Collection sent(string $mailable, \Closure|string $callback = null) + * @method static array failures() * @method static bool hasQueued(string $mailable) + * @method static bool hasSent(string $mailable) + * @method static mixed later(\DateTimeInterface|\DateInterval|int $delay, \Illuminate\Contracts\Mail\Mailable|string|array $view, string $queue = null) + * @method static mixed queue(\Illuminate\Contracts\Mail\Mailable|string|array $view, string $queue = null) + * @method static void assertNotQueued(string $mailable, callable $callback = null) + * @method static void assertNotSent(string $mailable, callable|int $callback = null) + * @method static void assertNothingQueued() + * @method static void assertNothingSent() + * @method static void assertQueued(string $mailable, callable|int $callback = null) + * @method static void assertSent(string $mailable, callable|int $callback = null) + * @method static void raw(string $text, $callback) + * @method static void send(\Illuminate\Contracts\Mail\Mailable|string|array $view, array $data = [], \Closure|string $callback = null) * * @see \Illuminate\Mail\Mailer * @see \Illuminate\Support\Testing\Fakes\MailFake @@ -31,11 +31,13 @@ class Mail extends Facade /** * Replace the bound instance with a fake. * - * @return void + * @return \Illuminate\Support\Testing\Fakes\MailFake */ public static function fake() { - static::swap(new MailFake); + static::swap($fake = new MailFake); + + return $fake; } /** @@ -45,6 +47,6 @@ class Mail extends Facade */ protected static function getFacadeAccessor() { - return 'mailer'; + return 'mail.manager'; } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Notification.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Notification.php index 425520d8..b3e85897 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Notification.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Notification.php @@ -2,15 +2,22 @@ namespace Illuminate\Support\Facades; -use Illuminate\Notifications\ChannelManager; use Illuminate\Notifications\AnonymousNotifiable; +use Illuminate\Notifications\ChannelManager; use Illuminate\Support\Testing\Fakes\NotificationFake; /** + * @method static \Illuminate\Notifications\ChannelManager locale(string|null $locale) + * @method static \Illuminate\Support\Collection sent(mixed $notifiable, string $notification, callable $callback = null) + * @method static bool hasSent(mixed $notifiable, string $notification) + * @method static mixed channel(string|null $name = null) + * @method static void assertNotSentTo(mixed $notifiable, string $notification, callable $callback = null) + * @method static void assertNothingSent() + * @method static void assertSentTo(mixed $notifiable, string $notification, callable $callback = null) + * @method static void assertSentToTimes(mixed $notifiable, string $notification, int $times = 1) + * @method static void assertTimesSent(int $expectedCount, string $notification) * @method static void send(\Illuminate\Support\Collection|array|mixed $notifiables, $notification) * @method static void sendNow(\Illuminate\Support\Collection|array|mixed $notifiables, $notification) - * @method static mixed channel(string|null $name = null) - * @method static \Illuminate\Notifications\ChannelManager locale(string|null $locale) * * @see \Illuminate\Notifications\ChannelManager */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Password.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Password.php index c291b97f..b62f1908 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Password.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Password.php @@ -2,11 +2,16 @@ namespace Illuminate\Support\Facades; +use Illuminate\Contracts\Auth\PasswordBroker; + /** - * @method static string sendResetLink(array $credentials) * @method static mixed reset(array $credentials, \Closure $callback) - * @method static void validator(\Closure $callback) - * @method static bool validateNewPassword(array $credentials) + * @method static string sendResetLink(array $credentials) + * @method static \Illuminate\Contracts\Auth\CanResetPassword getUser(array $credentials) + * @method static string createToken(\Illuminate\Contracts\Auth\CanResetPassword $user) + * @method static void deleteToken(\Illuminate\Contracts\Auth\CanResetPassword $user) + * @method static bool tokenExists(\Illuminate\Contracts\Auth\CanResetPassword $user, string $token) + * @method static \Illuminate\Auth\Passwords\TokenRepositoryInterface getRepository() * * @see \Illuminate\Auth\Passwords\PasswordBroker */ @@ -17,35 +22,35 @@ class Password extends Facade * * @var string */ - const RESET_LINK_SENT = 'passwords.sent'; + const RESET_LINK_SENT = PasswordBroker::RESET_LINK_SENT; /** * Constant representing a successfully reset password. * * @var string */ - const PASSWORD_RESET = 'passwords.reset'; + const PASSWORD_RESET = PasswordBroker::PASSWORD_RESET; /** * Constant representing the user not found response. * * @var string */ - const INVALID_USER = 'passwords.user'; - - /** - * Constant representing an invalid password. - * - * @var string - */ - const INVALID_PASSWORD = 'passwords.password'; + const INVALID_USER = PasswordBroker::INVALID_USER; /** * Constant representing an invalid token. * * @var string */ - const INVALID_TOKEN = 'passwords.token'; + const INVALID_TOKEN = PasswordBroker::INVALID_TOKEN; + + /** + * Constant representing a throttled reset attempt. + * + * @var string + */ + const RESET_THROTTLED = PasswordBroker::RESET_THROTTLED; /** * Get the registered name of the component. diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Queue.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Queue.php index 1f57ba0f..0affdf07 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Queue.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Queue.php @@ -5,16 +5,21 @@ namespace Illuminate\Support\Facades; use Illuminate\Support\Testing\Fakes\QueueFake; /** - * @method static int size(string $queue = null) - * @method static mixed push(string|object $job, string $data = '', $queue = null) - * @method static mixed pushOn(string $queue, string|object $job, $data = '') - * @method static mixed pushRaw(string $payload, string $queue = null, array $options = []) - * @method static mixed later(\DateTimeInterface|\DateInterval|int $delay, string|object $job, $data = '', string $queue = null) - * @method static mixed laterOn(string $queue, \DateTimeInterface|\DateInterval|int $delay, string|object $job, $data = '') - * @method static mixed bulk(array $jobs, $data = '', string $queue = null) * @method static \Illuminate\Contracts\Queue\Job|null pop(string $queue = null) - * @method static string getConnectionName() * @method static \Illuminate\Contracts\Queue\Queue setConnectionName(string $name) + * @method static int size(string $queue = null) + * @method static mixed bulk(array $jobs, mixed $data = '', string $queue = null) + * @method static mixed later(\DateTimeInterface|\DateInterval|int $delay, string|object $job, mixed $data = '', string $queue = null) + * @method static mixed laterOn(string $queue, \DateTimeInterface|\DateInterval|int $delay, string|object $job, mixed $data = '') + * @method static mixed push(string|object $job, mixed $data = '', $queue = null) + * @method static mixed pushOn(string $queue, string|object $job, mixed $data = '') + * @method static mixed pushRaw(string $payload, string $queue = null, array $options = []) + * @method static string getConnectionName() + * @method static void assertNotPushed(string $job, callable $callback = null) + * @method static void assertNothingPushed() + * @method static void assertPushed(string $job, callable|int $callback = null) + * @method static void assertPushedOn(string $queue, string $job, callable|int $callback = null) + * @method static void assertPushedWithChain(string $job, array $expectedChain = [], callable $callback = null) * * @see \Illuminate\Queue\QueueManager * @see \Illuminate\Queue\Queue @@ -24,11 +29,13 @@ class Queue extends Facade /** * Replace the bound instance with a fake. * - * @return void + * @return \Illuminate\Support\Testing\Fakes\QueueFake */ public static function fake() { - static::swap(new QueueFake(static::getFacadeApplication())); + static::swap($fake = new QueueFake(static::getFacadeApplication())); + + return $fake; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Redirect.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Redirect.php index 0138bd9b..c0571f5a 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Redirect.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Redirect.php @@ -3,16 +3,18 @@ namespace Illuminate\Support\Facades; /** - * @method static \Illuminate\Http\RedirectResponse home(int $status = 302) - * @method static \Illuminate\Http\RedirectResponse back(int $status = 302, array $headers = [], $fallback = false) - * @method static \Illuminate\Http\RedirectResponse refresh(int $status = 302, array $headers = []) - * @method static \Illuminate\Http\RedirectResponse guest(string $path, int $status = 302, array $headers = [], bool $secure = null) - * @method static intended(string $default = '/', int $status = 302, array $headers = [], bool $secure = null) - * @method static \Illuminate\Http\RedirectResponse to(string $path, int $status = 302, array $headers = [], bool $secure = null) - * @method static \Illuminate\Http\RedirectResponse away(string $path, int $status = 302, array $headers = []) - * @method static \Illuminate\Http\RedirectResponse secure(string $path, int $status = 302, array $headers = []) - * @method static \Illuminate\Http\RedirectResponse route(string $route, array $parameters = [], int $status = 302, array $headers = []) * @method static \Illuminate\Http\RedirectResponse action(string $action, array $parameters = [], int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse away(string $path, int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse back(int $status = 302, array $headers = [], $fallback = false) + * @method static \Illuminate\Http\RedirectResponse guest(string $path, int $status = 302, array $headers = [], bool $secure = null) + * @method static \Illuminate\Http\RedirectResponse home(int $status = 302) + * @method static \Illuminate\Http\RedirectResponse intended(string $default = '/', int $status = 302, array $headers = [], bool $secure = null) + * @method static \Illuminate\Http\RedirectResponse refresh(int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse route(string $route, array $parameters = [], int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse secure(string $path, int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse signedRoute(string $name, array $parameters = [], \DateTimeInterface|\DateInterval|int $expiration = null, int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse temporarySignedRoute(string $name, \DateTimeInterface|\DateInterval|int $expiration, array $parameters = [], int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse to(string $path, int $status = 302, array $headers = [], bool $secure = null) * @method static \Illuminate\Routing\UrlGenerator getUrlGenerator() * @method static void setSession(\Illuminate\Session\Store $session) * diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Redis.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Redis.php index f0fc8e1b..5073020c 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Redis.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Redis.php @@ -4,6 +4,8 @@ namespace Illuminate\Support\Facades; /** * @method static \Illuminate\Redis\Connections\Connection connection(string $name = null) + * @method static \Illuminate\Redis\Limiters\ConcurrencyLimiterBuilder funnel(string $name) + * @method static \Illuminate\Redis\Limiters\DurationLimiterBuilder throttle(string $name) * * @see \Illuminate\Redis\RedisManager * @see \Illuminate\Contracts\Redis\Factory diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php index 95e482e1..05496d9c 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php @@ -3,44 +3,89 @@ namespace Illuminate\Support\Facades; /** + * @method static \Closure getRouteResolver() + * @method static \Closure getUserResolver() + * @method static \Illuminate\Http\Request capture() + * @method static \Illuminate\Http\Request createFrom(\Illuminate\Http\Request $from, \Illuminate\Http\Request|null $to = null) + * @method static \Illuminate\Http\Request createFromBase(\Symfony\Component\HttpFoundation\Request $request) + * @method static \Illuminate\Http\Request duplicate(array|null $query = null, array|null $request = null, array|null $attributes = null, array|null $cookies = null, array|null $files = null, array|null $server = null) * @method static \Illuminate\Http\Request instance() - * @method static string method() - * @method static string root() - * @method static string url() - * @method static string fullUrl() - * @method static string fullUrlWithQuery(array $query) - * @method static string path() - * @method static string decodedPath() - * @method static string|null segment(int $index, string|null $default = null) - * @method static array segments() - * @method static bool is(...$patterns) - * @method static bool routeIs(...$patterns) - * @method static bool fullUrlIs(...$patterns) - * @method static bool ajax() - * @method static bool pjax() - * @method static bool secure() - * @method static string ip() - * @method static array ips() - * @method static string userAgent() * @method static \Illuminate\Http\Request merge(array $input) * @method static \Illuminate\Http\Request replace(array $input) - * @method static \Symfony\Component\HttpFoundation\ParameterBag|mixed json(string $key = null, $default = null) + * @method static \Illuminate\Http\Request setJson(\Symfony\Component\HttpFoundation\ParameterBag $json) + * @method static \Illuminate\Http\Request setRouteResolver(\Closure $callback) + * @method static \Illuminate\Http\Request setUserResolver(\Closure $callback) + * @method static \Illuminate\Http\UploadedFile|\Illuminate\Http\UploadedFile[]|array|null file(string|null $key = null, mixed $default = null) + * @method static \Illuminate\Routing\Route|object|string route(string|null $param = null, string|null $default = null) * @method static \Illuminate\Session\Store session() * @method static \Illuminate\Session\Store|null getSession() - * @method static void setLaravelSession(\Illuminate\Contracts\Session\Session $session) - * @method static mixed user(string|null $guard = null) - * @method static \Illuminate\Routing\Route|object|string route(string|null $param = null) - * @method static string fingerprint() - * @method static \Illuminate\Http\Request setJson(\Symfony\Component\HttpFoundation\ParameterBag $json) - * @method static \Closure getUserResolver() - * @method static \Illuminate\Http\Request setUserResolver(\Closure $callback) - * @method static \Closure getRouteResolver() - * @method static \Illuminate\Http\Request setRouteResolver(\Closure $callback) + * @method static \Symfony\Component\HttpFoundation\ParameterBag|mixed json(string|null $key = null, mixed $default = null) + * @method static array all(array|mixed|null $keys = null) + * @method static array allFiles() + * @method static array except(array|mixed $keys) + * @method static array ips() + * @method static array keys() + * @method static array only(array|mixed $keys) + * @method static array segments() * @method static array toArray() + * @method static array validate(array $rules, ...$params) + * @method static array validateWithBag(string $errorBag, array $rules, ...$params) + * @method static bool accepts(string|array $contentTypes) + * @method static bool acceptsAnyContentType() + * @method static bool acceptsHtml() + * @method static bool acceptsJson() + * @method static bool ajax() + * @method static bool anyFilled(string|array $key) + * @method static bool exists(string|array $key) + * @method static bool expectsJson() + * @method static bool filled(string|array $key) + * @method static bool fullUrlIs(mixed ...$patterns) + * @method static bool has(string|array $key) + * @method static bool hasAny(string|array $key) + * @method static bool hasCookie(string $key) + * @method static bool hasFile(string $key) + * @method static bool hasHeader(string $key) + * @method static bool hasValidSignature(bool $absolute = true) + * @method static bool is(mixed ...$patterns) + * @method static bool isJson() + * @method static bool matchesType(string $actual, string $type) * @method static bool offsetExists(string $offset) + * @method static bool pjax() + * @method static bool prefers(string|array $contentTypes) + * @method static bool prefetch() + * @method static bool routeIs(mixed ...$patterns) + * @method static bool secure() + * @method static bool wantsJson() + * @method static mixed filterFiles(mixed $files) * @method static mixed offsetGet(string $offset) - * @method static void offsetSet(string $offset, $value) + * @method static mixed user(string|null $guard = null) + * @method static string decodedPath() + * @method static string fingerprint() + * @method static string format($default = 'html') + * @method static string fullUrl() + * @method static string fullUrlWithQuery(array $query) + * @method static string method() + * @method static string path() + * @method static string root() + * @method static string url() + * @method static string userAgent() + * @method static string|array old(string|null $key = null, string|array|null $default = null) + * @method static string|array|null cookie(string|null $key = null, string|array|null $default = null) + * @method static string|array|null header(string|null $key = null, string|array|null $default = null) + * @method static string|array|null input(string|null $key = null, string|array|null $default = null) + * @method static string|array|null post(string|null $key = null, string|array|null $default = null) + * @method static string|array|null query(string|null $key = null, string|array|null $default = null) + * @method static string|array|null server(string|null $key = null, string|array|null $default = null) + * @method static string|null bearerToken() + * @method static string|null ip() + * @method static string|null segment(int $index, string|null $default = null) + * @method static void flash() + * @method static void flashExcept(array|mixed $keys) + * @method static void flashOnly(array|mixed $keys) + * @method static void flush() + * @method static void offsetSet(string $offset, mixed $value) * @method static void offsetUnset(string $offset) + * @method static void setLaravelSession(\Illuminate\Contracts\Session\Session $session) * * @see \Illuminate\Http\Request */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php index 11161c27..da1b9ced 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php @@ -5,18 +5,20 @@ namespace Illuminate\Support\Facades; use Illuminate\Contracts\Routing\ResponseFactory as ResponseFactoryContract; /** - * @method static \Illuminate\Http\Response make(string $content = '', int $status = 200, array $headers = []) - * @method static \Illuminate\Http\Response view(string $view, array $data = [], int $status = 200, array $headers = []) * @method static \Illuminate\Http\JsonResponse json(string|array $data = [], int $status = 200, array $headers = [], int $options = 0) * @method static \Illuminate\Http\JsonResponse jsonp(string $callback, string|array $data = [], int $status = 200, array $headers = [], int $options = 0) + * @method static \Illuminate\Http\RedirectResponse redirectGuest(string $path, int $status = 302, array $headers = [], bool|null $secure = null) + * @method static \Illuminate\Http\RedirectResponse redirectTo(string $path, int $status = 302, array $headers = [], bool|null $secure = null) + * @method static \Illuminate\Http\RedirectResponse redirectToAction(string $action, mixed $parameters = [], int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse redirectToIntended(string $default = '/', int $status = 302, array $headers = [], bool|null $secure = null) + * @method static \Illuminate\Http\RedirectResponse redirectToRoute(string $route, mixed $parameters = [], int $status = 302, array $headers = []) + * @method static \Illuminate\Http\Response make(string $content = '', int $status = 200, array $headers = []) + * @method static \Illuminate\Http\Response noContent($status = 204, array $headers = []) + * @method static \Illuminate\Http\Response view(string $view, array $data = [], int $status = 200, array $headers = []) + * @method static \Symfony\Component\HttpFoundation\BinaryFileResponse download(\SplFileInfo|string $file, string|null $name = null, array $headers = [], string|null $disposition = 'attachment') + * @method static \Symfony\Component\HttpFoundation\BinaryFileResponse file($file, array $headers = []) * @method static \Symfony\Component\HttpFoundation\StreamedResponse stream(\Closure $callback, int $status = 200, array $headers = []) * @method static \Symfony\Component\HttpFoundation\StreamedResponse streamDownload(\Closure $callback, string|null $name = null, array $headers = [], string|null $disposition = 'attachment') - * @method static \Symfony\Component\HttpFoundation\BinaryFileResponse download(\SplFileInfo|string $file, string|null $name = null, array $headers = [], string|null $disposition = 'attachment') - * @method static \Illuminate\Http\RedirectResponse redirectTo(string $path, int $status = 302, array $headers = [], bool|null $secure = null) - * @method static \Illuminate\Http\RedirectResponse redirectToRoute(string $route, array $parameters = [], int $status = 302, array $headers = []) - * @method static \Illuminate\Http\RedirectResponse redirectToAction(string $action, array $parameters = [], int $status = 302, array $headers = []) - * @method static \Illuminate\Http\RedirectResponse redirectGuest(string $path, int $status = 302, array $headers = [], bool|null $secure = null) - * @method static \Illuminate\Http\RedirectResponse redirectToIntended(string $default = '/', int $status = 302, array $headers = [], bool|null $secure = null) * * @see \Illuminate\Contracts\Routing\ResponseFactory */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php index 0e7a0dde..4f46ef5f 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php @@ -3,35 +3,39 @@ namespace Illuminate\Support\Facades; /** - * @method static \Illuminate\Routing\Route get(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route post(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route put(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route delete(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route patch(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route options(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route any(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route match(array|string $methods, string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\RouteRegistrar prefix(string $prefix) - * @method static \Illuminate\Routing\RouteRegistrar where(array $where) - * @method static \Illuminate\Routing\PendingResourceRegistration resource(string $name, string $controller, array $options = []) * @method static \Illuminate\Routing\PendingResourceRegistration apiResource(string $name, string $controller, array $options = []) - * @method static void apiResources(array $resources) - * @method static \Illuminate\Routing\RouteRegistrar middleware(array|string|null $middleware) + * @method static \Illuminate\Routing\PendingResourceRegistration resource(string $name, string $controller, array $options = []) + * @method static \Illuminate\Routing\Route any(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route current() + * @method static \Illuminate\Routing\Route delete(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route fallback(array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route get(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route getCurrentRoute() + * @method static \Illuminate\Routing\Route match(array|string $methods, string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route options(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route patch(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route permanentRedirect(string $uri, string $destination) + * @method static \Illuminate\Routing\Route post(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route put(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route redirect(string $uri, string $destination, int $status = 302) * @method static \Illuminate\Routing\Route substituteBindings(\Illuminate\Support\Facades\Route $route) - * @method static void substituteImplicitBindings(\Illuminate\Support\Facades\Route $route) + * @method static \Illuminate\Routing\Route view(string $uri, string $view, array $data = []) * @method static \Illuminate\Routing\RouteRegistrar as(string $value) * @method static \Illuminate\Routing\RouteRegistrar domain(string $value) + * @method static \Illuminate\Routing\RouteRegistrar middleware(array|string|null $middleware) * @method static \Illuminate\Routing\RouteRegistrar name(string $value) * @method static \Illuminate\Routing\RouteRegistrar namespace(string $value) - * @method static \Illuminate\Routing\Router|\Illuminate\Routing\RouteRegistrar group(array|\Closure|string $attributes, \Closure|string $routes) - * @method static \Illuminate\Routing\Route redirect(string $uri, string $destination, int $status = 302) - * @method static \Illuminate\Routing\Route permanentRedirect(string $uri, string $destination) - * @method static \Illuminate\Routing\Route view(string $uri, string $view, array $data = []) + * @method static \Illuminate\Routing\RouteRegistrar prefix(string $prefix) + * @method static \Illuminate\Routing\RouteRegistrar where(array $where) + * @method static \Illuminate\Routing\Router|\Illuminate\Routing\RouteRegistrar group(\Closure|string|array $attributes, \Closure|string $routes) + * @method static string|null currentRouteAction() + * @method static string|null currentRouteName() + * @method static void apiResources(array $resources, array $options = []) * @method static void bind(string $key, string|callable $binder) * @method static void model(string $key, string $class, \Closure|null $callback = null) - * @method static \Illuminate\Routing\Route current() - * @method static string|null currentRouteName() - * @method static string|null currentRouteAction() + * @method static void pattern(string $key, string $pattern) + * @method static void resources(array $resources) + * @method static void substituteImplicitBindings(\Illuminate\Support\Facades\Route $route) * * @see \Illuminate\Routing\Router */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php index 31748e15..24298ee9 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php @@ -4,10 +4,17 @@ namespace Illuminate\Support\Facades; /** * @method static \Illuminate\Database\Schema\Builder create(string $table, \Closure $callback) + * @method static \Illuminate\Database\Schema\Builder disableForeignKeyConstraints() * @method static \Illuminate\Database\Schema\Builder drop(string $table) * @method static \Illuminate\Database\Schema\Builder dropIfExists(string $table) + * @method static \Illuminate\Database\Schema\Builder enableForeignKeyConstraints() + * @method static \Illuminate\Database\Schema\Builder rename(string $from, string $to) * @method static \Illuminate\Database\Schema\Builder table(string $table, \Closure $callback) + * @method static bool hasColumn(string $table, string $column) + * @method static bool hasColumns(string $table, array $columns) + * @method static bool hasTable(string $table) * @method static void defaultStringLength(int $length) + * @method static void registerCustomDoctrineType(string $class, string $name, string $type) * * @see \Illuminate\Database\Schema\Builder */ @@ -16,7 +23,7 @@ class Schema extends Facade /** * Get a schema builder instance for a connection. * - * @param string $name + * @param string|null $name * @return \Illuminate\Database\Schema\Builder */ public static function connection($name) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php index 4df35ce9..70e42e20 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php @@ -3,27 +3,28 @@ namespace Illuminate\Support\Facades; /** - * @method static string getName() - * @method static string getId() - * @method static void setId(string $id) - * @method static bool start() - * @method static bool save() + * @method static \SessionHandlerInterface getHandler() * @method static array all() * @method static bool exists(string|array $key) + * @method static bool handlerNeedsRequest() * @method static bool has(string|array $key) + * @method static bool isStarted() + * @method static bool migrate(bool $destroy = false) + * @method static bool save() + * @method static bool start() * @method static mixed get(string $key, $default = null) * @method static mixed pull(string $key, $default = null) - * @method static void put(string|array $key, $value = null) - * @method static string token() * @method static mixed remove(string $key) - * @method static void forget(string|array $keys) - * @method static void flush() - * @method static bool migrate(bool $destroy = false) - * @method static bool isStarted() + * @method static string getId() + * @method static string getName() + * @method static string token() * @method static string|null previousUrl() + * @method static void flush() + * @method static void forget(string|array $keys) + * @method static void push(string $key, mixed $value) + * @method static void put(string|array $key, $value = null) + * @method static void setId(string $id) * @method static void setPreviousUrl(string $url) - * @method static \SessionHandlerInterface getHandler() - * @method static bool handlerNeedsRequest() * @method static void setRequestOnHandler(\Illuminate\Http\Request $request) * * @see \Illuminate\Session\SessionManager diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Storage.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Storage.php index 5bcbfd65..33eb18bd 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Storage.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Storage.php @@ -5,7 +5,34 @@ namespace Illuminate\Support\Facades; use Illuminate\Filesystem\Filesystem; /** + * @method static \Illuminate\Contracts\Filesystem\Filesystem assertExists(string|array $path) + * @method static \Illuminate\Contracts\Filesystem\Filesystem assertMissing(string|array $path) + * @method static \Illuminate\Contracts\Filesystem\Filesystem cloud() * @method static \Illuminate\Contracts\Filesystem\Filesystem disk(string $name = null) + * @method static array allDirectories(string|null $directory = null) + * @method static array allFiles(string|null $directory = null) + * @method static array directories(string|null $directory = null, bool $recursive = false) + * @method static array files(string|null $directory = null, bool $recursive = false) + * @method static bool append(string $path, string $data) + * @method static bool copy(string $from, string $to) + * @method static bool delete(string|array $paths) + * @method static bool deleteDirectory(string $directory) + * @method static bool exists(string $path) + * @method static bool makeDirectory(string $path) + * @method static bool move(string $from, string $to) + * @method static bool prepend(string $path, string $data) + * @method static bool put(string $path, string|resource $contents, mixed $options = []) + * @method static string|false putFile(string $path, \Illuminate\Http\File|\Illuminate\Http\UploadedFile|string $file, mixed $options = []) + * @method static string|false putFileAs(string $path, \Illuminate\Http\File|\Illuminate\Http\UploadedFile|string $file, string $name, mixed $options = []) + * @method static bool setVisibility(string $path, string $visibility) + * @method static bool writeStream(string $path, resource $resource, array $options = []) + * @method static int lastModified(string $path) + * @method static int size(string $path) + * @method static resource|null readStream(string $path) + * @method static string get(string $path) + * @method static string getVisibility(string $path) + * @method static string temporaryUrl(string $path, \DateTimeInterface $expiration, array $options = []) + * @method static string url(string $path) * * @see \Illuminate\Filesystem\FilesystemManager */ @@ -15,33 +42,40 @@ class Storage extends Facade * Replace the given disk with a local testing disk. * * @param string|null $disk - * - * @return void + * @param array $config + * @return \Illuminate\Contracts\Filesystem\Filesystem */ - public static function fake($disk = null) + public static function fake($disk = null, array $config = []) { - $disk = $disk ?: self::$app['config']->get('filesystems.default'); + $disk = $disk ?: static::$app['config']->get('filesystems.default'); (new Filesystem)->cleanDirectory( $root = storage_path('framework/testing/disks/'.$disk) ); - static::set($disk, self::createLocalDriver(['root' => $root])); + static::set($disk, $fake = static::createLocalDriver(array_merge($config, [ + 'root' => $root, + ]))); + + return $fake; } /** * Replace the given disk with a persistent local testing disk. * * @param string|null $disk - * @return void + * @param array $config + * @return \Illuminate\Contracts\Filesystem\Filesystem */ - public static function persistentFake($disk = null) + public static function persistentFake($disk = null, array $config = []) { - $disk = $disk ?: self::$app['config']->get('filesystems.default'); + $disk = $disk ?: static::$app['config']->get('filesystems.default'); - static::set($disk, self::createLocalDriver([ + static::set($disk, $fake = static::createLocalDriver(array_merge($config, [ 'root' => storage_path('framework/testing/disks/'.$disk), - ])); + ]))); + + return $fake; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/URL.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/URL.php index 2dd66e7d..da0679cd 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/URL.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/URL.php @@ -3,19 +3,20 @@ namespace Illuminate\Support\Facades; /** + * @method static \Illuminate\Contracts\Routing\UrlGenerator setRootControllerNamespace(string $rootNamespace) + * @method static bool hasValidSignature(\Illuminate\Http\Request $request, bool $absolute = true) + * @method static string action(string $action, $parameters = [], bool $absolute = true) + * @method static string asset(string $path, bool $secure = null) * @method static string current() * @method static string full() * @method static string previous($fallback = false) - * @method static string to(string $path, $extra = [], bool $secure = null) - * @method static string secure(string $path, array $parameters = []) - * @method static string asset(string $path, bool $secure = null) * @method static string route(string $name, $parameters = [], bool $absolute = true) - * @method static string action(string $action, $parameters = [], bool $absolute = true) - * @method static \Illuminate\Contracts\Routing\UrlGenerator setRootControllerNamespace(string $rootNamespace) - * @method static string signedRoute(string $name, array $parameters = [], \DateTimeInterface|\DateInterval|int $expiration = null) - * @method static string temporarySignedRoute(string $name, \DateTimeInterface|\DateInterval|int $expiration, array $parameters = []) - * @method static string hasValidSignature(\Illuminate\Http\Request $request, bool $absolute) + * @method static string secure(string $path, array $parameters = []) + * @method static string signedRoute(string $name, array $parameters = [], \DateTimeInterface|\DateInterval|int $expiration = null, bool $absolute = true) + * @method static string temporarySignedRoute(string $name, \DateTimeInterface|\DateInterval|int $expiration, array $parameters = [], bool $absolute = true) + * @method static string to(string $path, $extra = [], bool $secure = null) * @method static void defaults(array $defaults) + * @method static void forceScheme(string $scheme) * * @see \Illuminate\Routing\UrlGenerator */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php index e7b16c19..314053a4 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php @@ -3,14 +3,15 @@ namespace Illuminate\Support\Facades; /** - * @method static bool exists(string $view) + * @method static \Illuminate\Contracts\View\Factory addNamespace(string $namespace, string|array $hints) + * @method static \Illuminate\Contracts\View\Factory first(array $views, \Illuminate\Contracts\Support\Arrayable|array $data, array $mergeData) + * @method static \Illuminate\Contracts\View\Factory replaceNamespace(string $namespace, string|array $hints) * @method static \Illuminate\Contracts\View\View file(string $path, array $data = [], array $mergeData = []) * @method static \Illuminate\Contracts\View\View make(string $view, array $data = [], array $mergeData = []) - * @method static mixed share(array|string $key, $value = null) * @method static array composer(array|string $views, \Closure|string $callback) * @method static array creator(array|string $views, \Closure|string $callback) - * @method static \Illuminate\Contracts\View\Factory addNamespace(string $namespace, string|array $hints) - * @method static \Illuminate\Contracts\View\Factory replaceNamespace(string $namespace, string|array $hints) + * @method static bool exists(string $view) + * @method static mixed share(array|string $key, $value = null) * * @see \Illuminate\View\Factory */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Fluent.php b/vendor/laravel/framework/src/Illuminate/Support/Fluent.php index 0873bcae..e02fa940 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Fluent.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Fluent.php @@ -3,11 +3,11 @@ namespace Illuminate\Support; use ArrayAccess; -use JsonSerializable; -use Illuminate\Contracts\Support\Jsonable; use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Contracts\Support\Jsonable; +use JsonSerializable; -class Fluent implements ArrayAccess, Arrayable, Jsonable, JsonSerializable +class Fluent implements Arrayable, ArrayAccess, Jsonable, JsonSerializable { /** * All of the attributes set on the fluent instance. @@ -33,7 +33,7 @@ class Fluent implements ArrayAccess, Arrayable, Jsonable, JsonSerializable * Get an attribute from the fluent instance. * * @param string $key - * @param mixed $default + * @param mixed $default * @return mixed */ public function get($key, $default = null) @@ -112,7 +112,7 @@ class Fluent implements ArrayAccess, Arrayable, Jsonable, JsonSerializable * Set the value at the given offset. * * @param string $offset - * @param mixed $value + * @param mixed $value * @return void */ public function offsetSet($offset, $value) @@ -135,7 +135,7 @@ class Fluent implements ArrayAccess, Arrayable, Jsonable, JsonSerializable * Handle dynamic calls to the fluent instance to set attributes. * * @param string $method - * @param array $parameters + * @param array $parameters * @return $this */ public function __call($method, $parameters) @@ -160,7 +160,7 @@ class Fluent implements ArrayAccess, Arrayable, Jsonable, JsonSerializable * Dynamically set the value of an attribute. * * @param string $key - * @param mixed $value + * @param mixed $value * @return void */ public function __set($key, $value) diff --git a/vendor/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php b/vendor/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php index 7a781a02..106356c3 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php +++ b/vendor/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php @@ -3,14 +3,14 @@ namespace Illuminate\Support; /** - * @mixin \Illuminate\Support\Collection + * @mixin \Illuminate\Support\Enumerable */ class HigherOrderCollectionProxy { /** * The collection being operated on. * - * @var \Illuminate\Support\Collection + * @var \Illuminate\Support\Enumerable */ protected $collection; @@ -24,11 +24,11 @@ class HigherOrderCollectionProxy /** * Create a new proxy instance. * - * @param \Illuminate\Support\Collection $collection + * @param \Illuminate\Support\Enumerable $collection * @param string $method * @return void */ - public function __construct(Collection $collection, $method) + public function __construct(Enumerable $collection, $method) { $this->method = $method; $this->collection = $collection; diff --git a/vendor/laravel/framework/src/Illuminate/Support/HigherOrderWhenProxy.php b/vendor/laravel/framework/src/Illuminate/Support/HigherOrderWhenProxy.php new file mode 100644 index 00000000..6653c03a --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/HigherOrderWhenProxy.php @@ -0,0 +1,63 @@ +condition = $condition; + $this->collection = $collection; + } + + /** + * Proxy accessing an attribute onto the collection. + * + * @param string $key + * @return mixed + */ + public function __get($key) + { + return $this->condition + ? $this->collection->{$key} + : $this->collection; + } + + /** + * Proxy a method call onto the collection. + * + * @param string $method + * @param array $parameters + * @return mixed + */ + public function __call($method, $parameters) + { + return $this->condition + ? $this->collection->{$method}(...$parameters) + : $this->collection; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/HtmlString.php b/vendor/laravel/framework/src/Illuminate/Support/HtmlString.php index c13adfd4..0232a7bb 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/HtmlString.php +++ b/vendor/laravel/framework/src/Illuminate/Support/HtmlString.php @@ -19,7 +19,7 @@ class HtmlString implements Htmlable * @param string $html * @return void */ - public function __construct($html) + public function __construct($html = '') { $this->html = $html; } @@ -34,6 +34,16 @@ class HtmlString implements Htmlable return $this->html; } + /** + * Determine if the given HTML string is empty. + * + * @return bool + */ + public function isEmpty() + { + return $this->html === ''; + } + /** * Get the HTML string. * diff --git a/vendor/laravel/framework/src/Illuminate/Support/InteractsWithTime.php b/vendor/laravel/framework/src/Illuminate/Support/InteractsWithTime.php index 19ed3f24..2b617c39 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/InteractsWithTime.php +++ b/vendor/laravel/framework/src/Illuminate/Support/InteractsWithTime.php @@ -34,7 +34,7 @@ trait InteractsWithTime return $delay instanceof DateTimeInterface ? $delay->getTimestamp() - : Carbon::now()->addSeconds($delay)->getTimestamp(); + : Carbon::now()->addRealSeconds($delay)->getTimestamp(); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Support/LazyCollection.php b/vendor/laravel/framework/src/Illuminate/Support/LazyCollection.php new file mode 100644 index 00000000..8ddd5a8c --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/LazyCollection.php @@ -0,0 +1,1375 @@ +source = $source; + } elseif (is_null($source)) { + $this->source = static::empty(); + } else { + $this->source = $this->getArrayableItems($source); + } + } + + /** + * Create a new instance with no items. + * + * @return static + */ + public static function empty() + { + return new static([]); + } + + /** + * Create a new instance by invoking the callback a given amount of times. + * + * @param int $number + * @param callable|null $callback + * @return static + */ + public static function times($number, callable $callback = null) + { + if ($number < 1) { + return new static; + } + + $instance = new static(function () use ($number) { + for ($current = 1; $current <= $number; $current++) { + yield $current; + } + }); + + return is_null($callback) ? $instance : $instance->map($callback); + } + + /** + * Create an enumerable with the given range. + * + * @param int $from + * @param int $to + * @return static + */ + public static function range($from, $to) + { + return new static(function () use ($from, $to) { + for (; $from <= $to; $from++) { + yield $from; + } + }); + } + + /** + * Get all items in the enumerable. + * + * @return array + */ + public function all() + { + if (is_array($this->source)) { + return $this->source; + } + + return iterator_to_array($this->getIterator()); + } + + /** + * Eager load all items into a new lazy collection backed by an array. + * + * @return static + */ + public function eager() + { + return new static($this->all()); + } + + /** + * Cache values as they're enumerated. + * + * @return static + */ + public function remember() + { + $iterator = $this->getIterator(); + + $iteratorIndex = 0; + + $cache = []; + + return new static(function () use ($iterator, &$iteratorIndex, &$cache) { + for ($index = 0; true; $index++) { + if (array_key_exists($index, $cache)) { + yield $cache[$index][0] => $cache[$index][1]; + + continue; + } + + if ($iteratorIndex < $index) { + $iterator->next(); + + $iteratorIndex++; + } + + if (! $iterator->valid()) { + break; + } + + $cache[$index] = [$iterator->key(), $iterator->current()]; + + yield $cache[$index][0] => $cache[$index][1]; + } + }); + } + + /** + * Get the average value of a given key. + * + * @param callable|string|null $callback + * @return mixed + */ + public function avg($callback = null) + { + return $this->collect()->avg($callback); + } + + /** + * Get the median of a given key. + * + * @param string|array|null $key + * @return mixed + */ + public function median($key = null) + { + return $this->collect()->median($key); + } + + /** + * Get the mode of a given key. + * + * @param string|array|null $key + * @return array|null + */ + public function mode($key = null) + { + return $this->collect()->mode($key); + } + + /** + * Collapse the collection of items into a single array. + * + * @return static + */ + public function collapse() + { + return new static(function () { + foreach ($this as $values) { + if (is_array($values) || $values instanceof Enumerable) { + foreach ($values as $value) { + yield $value; + } + } + } + }); + } + + /** + * Determine if an item exists in the enumerable. + * + * @param mixed $key + * @param mixed $operator + * @param mixed $value + * @return bool + */ + public function contains($key, $operator = null, $value = null) + { + if (func_num_args() === 1 && $this->useAsCallable($key)) { + $placeholder = new stdClass; + + return $this->first($key, $placeholder) !== $placeholder; + } + + if (func_num_args() === 1) { + $needle = $key; + + foreach ($this as $value) { + if ($value == $needle) { + return true; + } + } + + return false; + } + + return $this->contains($this->operatorForWhere(...func_get_args())); + } + + /** + * Cross join the given iterables, returning all possible permutations. + * + * @param array ...$arrays + * @return static + */ + public function crossJoin(...$arrays) + { + return $this->passthru('crossJoin', func_get_args()); + } + + /** + * Count the number of items in the collection by a field or using a callback. + * + * @param callable|string $countBy + * @return static + */ + public function countBy($countBy = null) + { + $countBy = is_null($countBy) + ? $this->identity() + : $this->valueRetriever($countBy); + + return new static(function () use ($countBy) { + $counts = []; + + foreach ($this as $key => $value) { + $group = $countBy($value, $key); + + if (empty($counts[$group])) { + $counts[$group] = 0; + } + + $counts[$group]++; + } + + yield from $counts; + }); + } + + /** + * Get the items that are not present in the given items. + * + * @param mixed $items + * @return static + */ + public function diff($items) + { + return $this->passthru('diff', func_get_args()); + } + + /** + * Get the items that are not present in the given items, using the callback. + * + * @param mixed $items + * @param callable $callback + * @return static + */ + public function diffUsing($items, callable $callback) + { + return $this->passthru('diffUsing', func_get_args()); + } + + /** + * Get the items whose keys and values are not present in the given items. + * + * @param mixed $items + * @return static + */ + public function diffAssoc($items) + { + return $this->passthru('diffAssoc', func_get_args()); + } + + /** + * Get the items whose keys and values are not present in the given items, using the callback. + * + * @param mixed $items + * @param callable $callback + * @return static + */ + public function diffAssocUsing($items, callable $callback) + { + return $this->passthru('diffAssocUsing', func_get_args()); + } + + /** + * Get the items whose keys are not present in the given items. + * + * @param mixed $items + * @return static + */ + public function diffKeys($items) + { + return $this->passthru('diffKeys', func_get_args()); + } + + /** + * Get the items whose keys are not present in the given items, using the callback. + * + * @param mixed $items + * @param callable $callback + * @return static + */ + public function diffKeysUsing($items, callable $callback) + { + return $this->passthru('diffKeysUsing', func_get_args()); + } + + /** + * Retrieve duplicate items. + * + * @param callable|null $callback + * @param bool $strict + * @return static + */ + public function duplicates($callback = null, $strict = false) + { + return $this->passthru('duplicates', func_get_args()); + } + + /** + * Retrieve duplicate items using strict comparison. + * + * @param callable|null $callback + * @return static + */ + public function duplicatesStrict($callback = null) + { + return $this->passthru('duplicatesStrict', func_get_args()); + } + + /** + * Get all items except for those with the specified keys. + * + * @param mixed $keys + * @return static + */ + public function except($keys) + { + return $this->passthru('except', func_get_args()); + } + + /** + * Run a filter over each of the items. + * + * @param callable|null $callback + * @return static + */ + public function filter(callable $callback = null) + { + if (is_null($callback)) { + $callback = function ($value) { + return (bool) $value; + }; + } + + return new static(function () use ($callback) { + foreach ($this as $key => $value) { + if ($callback($value, $key)) { + yield $key => $value; + } + } + }); + } + + /** + * Get the first item from the enumerable passing the given truth test. + * + * @param callable|null $callback + * @param mixed $default + * @return mixed + */ + public function first(callable $callback = null, $default = null) + { + $iterator = $this->getIterator(); + + if (is_null($callback)) { + if (! $iterator->valid()) { + return value($default); + } + + return $iterator->current(); + } + + foreach ($iterator as $key => $value) { + if ($callback($value, $key)) { + return $value; + } + } + + return value($default); + } + + /** + * Get a flattened list of the items in the collection. + * + * @param int $depth + * @return static + */ + public function flatten($depth = INF) + { + $instance = new static(function () use ($depth) { + foreach ($this as $item) { + if (! is_array($item) && ! $item instanceof Enumerable) { + yield $item; + } elseif ($depth === 1) { + yield from $item; + } else { + yield from (new static($item))->flatten($depth - 1); + } + } + }); + + return $instance->values(); + } + + /** + * Flip the items in the collection. + * + * @return static + */ + public function flip() + { + return new static(function () { + foreach ($this as $key => $value) { + yield $value => $key; + } + }); + } + + /** + * Get an item by key. + * + * @param mixed $key + * @param mixed $default + * @return mixed + */ + public function get($key, $default = null) + { + if (is_null($key)) { + return; + } + + foreach ($this as $outerKey => $outerValue) { + if ($outerKey == $key) { + return $outerValue; + } + } + + return value($default); + } + + /** + * Group an associative array by a field or using a callback. + * + * @param array|callable|string $groupBy + * @param bool $preserveKeys + * @return static + */ + public function groupBy($groupBy, $preserveKeys = false) + { + return $this->passthru('groupBy', func_get_args()); + } + + /** + * Key an associative array by a field or using a callback. + * + * @param callable|string $keyBy + * @return static + */ + public function keyBy($keyBy) + { + return new static(function () use ($keyBy) { + $keyBy = $this->valueRetriever($keyBy); + + foreach ($this as $key => $item) { + $resolvedKey = $keyBy($item, $key); + + if (is_object($resolvedKey)) { + $resolvedKey = (string) $resolvedKey; + } + + yield $resolvedKey => $item; + } + }); + } + + /** + * Determine if an item exists in the collection by key. + * + * @param mixed $key + * @return bool + */ + public function has($key) + { + $keys = array_flip(is_array($key) ? $key : func_get_args()); + $count = count($keys); + + foreach ($this as $key => $value) { + if (array_key_exists($key, $keys) && --$count == 0) { + return true; + } + } + + return false; + } + + /** + * Concatenate values of a given key as a string. + * + * @param string $value + * @param string|null $glue + * @return string + */ + public function implode($value, $glue = null) + { + return $this->collect()->implode(...func_get_args()); + } + + /** + * Intersect the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function intersect($items) + { + return $this->passthru('intersect', func_get_args()); + } + + /** + * Intersect the collection with the given items by key. + * + * @param mixed $items + * @return static + */ + public function intersectByKeys($items) + { + return $this->passthru('intersectByKeys', func_get_args()); + } + + /** + * Determine if the items is empty or not. + * + * @return bool + */ + public function isEmpty() + { + return ! $this->getIterator()->valid(); + } + + /** + * Join all items from the collection using a string. The final items can use a separate glue string. + * + * @param string $glue + * @param string $finalGlue + * @return string + */ + public function join($glue, $finalGlue = '') + { + return $this->collect()->join(...func_get_args()); + } + + /** + * Get the keys of the collection items. + * + * @return static + */ + public function keys() + { + return new static(function () { + foreach ($this as $key => $value) { + yield $key; + } + }); + } + + /** + * Get the last item from the collection. + * + * @param callable|null $callback + * @param mixed $default + * @return mixed + */ + public function last(callable $callback = null, $default = null) + { + $needle = $placeholder = new stdClass; + + foreach ($this as $key => $value) { + if (is_null($callback) || $callback($value, $key)) { + $needle = $value; + } + } + + return $needle === $placeholder ? value($default) : $needle; + } + + /** + * Get the values of a given key. + * + * @param string|array $value + * @param string|null $key + * @return static + */ + public function pluck($value, $key = null) + { + return new static(function () use ($value, $key) { + [$value, $key] = $this->explodePluckParameters($value, $key); + + foreach ($this as $item) { + $itemValue = data_get($item, $value); + + if (is_null($key)) { + yield $itemValue; + } else { + $itemKey = data_get($item, $key); + + if (is_object($itemKey) && method_exists($itemKey, '__toString')) { + $itemKey = (string) $itemKey; + } + + yield $itemKey => $itemValue; + } + } + }); + } + + /** + * Run a map over each of the items. + * + * @param callable $callback + * @return static + */ + public function map(callable $callback) + { + return new static(function () use ($callback) { + foreach ($this as $key => $value) { + yield $key => $callback($value, $key); + } + }); + } + + /** + * Run a dictionary map over the items. + * + * The callback should return an associative array with a single key/value pair. + * + * @param callable $callback + * @return static + */ + public function mapToDictionary(callable $callback) + { + return $this->passthru('mapToDictionary', func_get_args()); + } + + /** + * Run an associative map over each of the items. + * + * The callback should return an associative array with a single key/value pair. + * + * @param callable $callback + * @return static + */ + public function mapWithKeys(callable $callback) + { + return new static(function () use ($callback) { + foreach ($this as $key => $value) { + yield from $callback($value, $key); + } + }); + } + + /** + * Merge the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function merge($items) + { + return $this->passthru('merge', func_get_args()); + } + + /** + * Recursively merge the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function mergeRecursive($items) + { + return $this->passthru('mergeRecursive', func_get_args()); + } + + /** + * Create a collection by using this collection for keys and another for its values. + * + * @param mixed $values + * @return static + */ + public function combine($values) + { + return new static(function () use ($values) { + $values = $this->makeIterator($values); + + $errorMessage = 'Both parameters should have an equal number of elements'; + + foreach ($this as $key) { + if (! $values->valid()) { + trigger_error($errorMessage, E_USER_WARNING); + + break; + } + + yield $key => $values->current(); + + $values->next(); + } + + if ($values->valid()) { + trigger_error($errorMessage, E_USER_WARNING); + } + }); + } + + /** + * Union the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function union($items) + { + return $this->passthru('union', func_get_args()); + } + + /** + * Create a new collection consisting of every n-th element. + * + * @param int $step + * @param int $offset + * @return static + */ + public function nth($step, $offset = 0) + { + return new static(function () use ($step, $offset) { + $position = 0; + + foreach ($this as $item) { + if ($position % $step === $offset) { + yield $item; + } + + $position++; + } + }); + } + + /** + * Get the items with the specified keys. + * + * @param mixed $keys + * @return static + */ + public function only($keys) + { + if ($keys instanceof Enumerable) { + $keys = $keys->all(); + } elseif (! is_null($keys)) { + $keys = is_array($keys) ? $keys : func_get_args(); + } + + return new static(function () use ($keys) { + if (is_null($keys)) { + yield from $this; + } else { + $keys = array_flip($keys); + + foreach ($this as $key => $value) { + if (array_key_exists($key, $keys)) { + yield $key => $value; + + unset($keys[$key]); + + if (empty($keys)) { + break; + } + } + } + } + }); + } + + /** + * Push all of the given items onto the collection. + * + * @param iterable $source + * @return static + */ + public function concat($source) + { + return (new static(function () use ($source) { + yield from $this; + yield from $source; + }))->values(); + } + + /** + * Get one or a specified number of items randomly from the collection. + * + * @param int|null $number + * @return static|mixed + * + * @throws \InvalidArgumentException + */ + public function random($number = null) + { + $result = $this->collect()->random(...func_get_args()); + + return is_null($number) ? $result : new static($result); + } + + /** + * Reduce the collection to a single value. + * + * @param callable $callback + * @param mixed $initial + * @return mixed + */ + public function reduce(callable $callback, $initial = null) + { + $result = $initial; + + foreach ($this as $value) { + $result = $callback($result, $value); + } + + return $result; + } + + /** + * Replace the collection items with the given items. + * + * @param mixed $items + * @return static + */ + public function replace($items) + { + return new static(function () use ($items) { + $items = $this->getArrayableItems($items); + + foreach ($this as $key => $value) { + if (array_key_exists($key, $items)) { + yield $key => $items[$key]; + + unset($items[$key]); + } else { + yield $key => $value; + } + } + + foreach ($items as $key => $value) { + yield $key => $value; + } + }); + } + + /** + * Recursively replace the collection items with the given items. + * + * @param mixed $items + * @return static + */ + public function replaceRecursive($items) + { + return $this->passthru('replaceRecursive', func_get_args()); + } + + /** + * Reverse items order. + * + * @return static + */ + public function reverse() + { + return $this->passthru('reverse', func_get_args()); + } + + /** + * Search the collection for a given value and return the corresponding key if successful. + * + * @param mixed $value + * @param bool $strict + * @return mixed + */ + public function search($value, $strict = false) + { + $predicate = $this->useAsCallable($value) + ? $value + : function ($item) use ($value, $strict) { + return $strict ? $item === $value : $item == $value; + }; + + foreach ($this as $key => $item) { + if ($predicate($item, $key)) { + return $key; + } + } + + return false; + } + + /** + * Shuffle the items in the collection. + * + * @param int|null $seed + * @return static + */ + public function shuffle($seed = null) + { + return $this->passthru('shuffle', func_get_args()); + } + + /** + * Skip the first {$count} items. + * + * @param int $count + * @return static + */ + public function skip($count) + { + return new static(function () use ($count) { + $iterator = $this->getIterator(); + + while ($iterator->valid() && $count--) { + $iterator->next(); + } + + while ($iterator->valid()) { + yield $iterator->key() => $iterator->current(); + + $iterator->next(); + } + }); + } + + /** + * Skip items in the collection until the given condition is met. + * + * @param mixed $value + * @return static + */ + public function skipUntil($value) + { + $callback = $this->useAsCallable($value) ? $value : $this->equality($value); + + return $this->skipWhile($this->negate($callback)); + } + + /** + * Skip items in the collection while the given condition is met. + * + * @param mixed $value + * @return static + */ + public function skipWhile($value) + { + $callback = $this->useAsCallable($value) ? $value : $this->equality($value); + + return new static(function () use ($callback) { + $iterator = $this->getIterator(); + + while ($iterator->valid() && $callback($iterator->current(), $iterator->key())) { + $iterator->next(); + } + + while ($iterator->valid()) { + yield $iterator->key() => $iterator->current(); + + $iterator->next(); + } + }); + } + + /** + * Get a slice of items from the enumerable. + * + * @param int $offset + * @param int|null $length + * @return static + */ + public function slice($offset, $length = null) + { + if ($offset < 0 || $length < 0) { + return $this->passthru('slice', func_get_args()); + } + + $instance = $this->skip($offset); + + return is_null($length) ? $instance : $instance->take($length); + } + + /** + * Split a collection into a certain number of groups. + * + * @param int $numberOfGroups + * @return static + */ + public function split($numberOfGroups) + { + return $this->passthru('split', func_get_args()); + } + + /** + * Chunk the collection into chunks of the given size. + * + * @param int $size + * @return static + */ + public function chunk($size) + { + if ($size <= 0) { + return static::empty(); + } + + return new static(function () use ($size) { + $iterator = $this->getIterator(); + + while ($iterator->valid()) { + $chunk = []; + + while (true) { + $chunk[$iterator->key()] = $iterator->current(); + + if (count($chunk) < $size) { + $iterator->next(); + + if (! $iterator->valid()) { + break; + } + } else { + break; + } + } + + yield new static($chunk); + + $iterator->next(); + } + }); + } + + /** + * Sort through each item with a callback. + * + * @param callable|null|int $callback + * @return static + */ + public function sort($callback = null) + { + return $this->passthru('sort', func_get_args()); + } + + /** + * Sort items in descending order. + * + * @param int $options + * @return static + */ + public function sortDesc($options = SORT_REGULAR) + { + return $this->passthru('sortDesc', func_get_args()); + } + + /** + * Sort the collection using the given callback. + * + * @param callable|string $callback + * @param int $options + * @param bool $descending + * @return static + */ + public function sortBy($callback, $options = SORT_REGULAR, $descending = false) + { + return $this->passthru('sortBy', func_get_args()); + } + + /** + * Sort the collection in descending order using the given callback. + * + * @param callable|string $callback + * @param int $options + * @return static + */ + public function sortByDesc($callback, $options = SORT_REGULAR) + { + return $this->passthru('sortByDesc', func_get_args()); + } + + /** + * Sort the collection keys. + * + * @param int $options + * @param bool $descending + * @return static + */ + public function sortKeys($options = SORT_REGULAR, $descending = false) + { + return $this->passthru('sortKeys', func_get_args()); + } + + /** + * Sort the collection keys in descending order. + * + * @param int $options + * @return static + */ + public function sortKeysDesc($options = SORT_REGULAR) + { + return $this->passthru('sortKeysDesc', func_get_args()); + } + + /** + * Take the first or last {$limit} items. + * + * @param int $limit + * @return static + */ + public function take($limit) + { + if ($limit < 0) { + return $this->passthru('take', func_get_args()); + } + + return new static(function () use ($limit) { + $iterator = $this->getIterator(); + + while ($limit--) { + if (! $iterator->valid()) { + break; + } + + yield $iterator->key() => $iterator->current(); + + if ($limit) { + $iterator->next(); + } + } + }); + } + + /** + * Take items in the collection until the given condition is met. + * + * @param mixed $value + * @return static + */ + public function takeUntil($value) + { + $callback = $this->useAsCallable($value) ? $value : $this->equality($value); + + return new static(function () use ($callback) { + foreach ($this as $key => $item) { + if ($callback($item, $key)) { + break; + } + + yield $key => $item; + } + }); + } + + /** + * Take items in the collection while the given condition is met. + * + * @param mixed $value + * @return static + */ + public function takeWhile($value) + { + $callback = $this->useAsCallable($value) ? $value : $this->equality($value); + + return $this->takeUntil($this->negate($callback)); + } + + /** + * Pass each item in the collection to the given callback, lazily. + * + * @param callable $callback + * @return static + */ + public function tapEach(callable $callback) + { + return new static(function () use ($callback) { + foreach ($this as $key => $value) { + $callback($value, $key); + + yield $key => $value; + } + }); + } + + /** + * Reset the keys on the underlying array. + * + * @return static + */ + public function values() + { + return new static(function () { + foreach ($this as $item) { + yield $item; + } + }); + } + + /** + * Zip the collection together with one or more arrays. + * + * e.g. new LazyCollection([1, 2, 3])->zip([4, 5, 6]); + * => [[1, 4], [2, 5], [3, 6]] + * + * @param mixed ...$items + * @return static + */ + public function zip($items) + { + $iterables = func_get_args(); + + return new static(function () use ($iterables) { + $iterators = Collection::make($iterables)->map(function ($iterable) { + return $this->makeIterator($iterable); + })->prepend($this->getIterator()); + + while ($iterators->contains->valid()) { + yield new static($iterators->map->current()); + + $iterators->each->next(); + } + }); + } + + /** + * Pad collection to the specified length with a value. + * + * @param int $size + * @param mixed $value + * @return static + */ + public function pad($size, $value) + { + if ($size < 0) { + return $this->passthru('pad', func_get_args()); + } + + return new static(function () use ($size, $value) { + $yielded = 0; + + foreach ($this as $index => $item) { + yield $index => $item; + + $yielded++; + } + + while ($yielded++ < $size) { + yield $value; + } + }); + } + + /** + * Get the values iterator. + * + * @return \Traversable + */ + public function getIterator() + { + return $this->makeIterator($this->source); + } + + /** + * Count the number of items in the collection. + * + * @return int + */ + public function count() + { + if (is_array($this->source)) { + return count($this->source); + } + + return iterator_count($this->getIterator()); + } + + /** + * Make an iterator from the given source. + * + * @param mixed $source + * @return \Traversable + */ + protected function makeIterator($source) + { + if ($source instanceof IteratorAggregate) { + return $source->getIterator(); + } + + if (is_array($source)) { + return new ArrayIterator($source); + } + + return $source(); + } + + /** + * Explode the "value" and "key" arguments passed to "pluck". + * + * @param string|array $value + * @param string|array|null $key + * @return array + */ + protected function explodePluckParameters($value, $key) + { + $value = is_string($value) ? explode('.', $value) : $value; + + $key = is_null($key) || is_array($key) ? $key : explode('.', $key); + + return [$value, $key]; + } + + /** + * Pass this lazy collection through a method on the collection class. + * + * @param string $method + * @param array $params + * @return static + */ + protected function passthru($method, array $params) + { + return new static(function () use ($method, $params) { + yield from $this->collect()->$method(...$params); + }); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/Manager.php b/vendor/laravel/framework/src/Illuminate/Support/Manager.php index f759f0a7..8b20f6a2 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Manager.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Manager.php @@ -3,17 +3,34 @@ namespace Illuminate\Support; use Closure; +use Illuminate\Contracts\Container\Container; use InvalidArgumentException; abstract class Manager { /** - * The application instance. + * The container instance. * - * @var \Illuminate\Foundation\Application + * @var \Illuminate\Contracts\Container\Container + */ + protected $container; + + /** + * The container instance. + * + * @var \Illuminate\Contracts\Container\Container + * + * @deprecated Use the $container property instead. */ protected $app; + /** + * The configuration repository instance. + * + * @var \Illuminate\Contracts\Config\Repository + */ + protected $config; + /** * The registered custom driver creators. * @@ -31,12 +48,14 @@ abstract class Manager /** * Create a new manager instance. * - * @param \Illuminate\Foundation\Application $app + * @param \Illuminate\Contracts\Container\Container $container * @return void */ - public function __construct($app) + public function __construct(Container $container) { - $this->app = $app; + $this->app = $container; + $this->container = $container; + $this->config = $container->make('config'); } /** @@ -49,7 +68,7 @@ abstract class Manager /** * Get a driver instance. * - * @param string $driver + * @param string|null $driver * @return mixed * * @throws \InvalidArgumentException @@ -96,6 +115,7 @@ abstract class Manager return $this->$method(); } } + throw new InvalidArgumentException("Driver [$driver] not supported."); } @@ -107,13 +127,13 @@ abstract class Manager */ protected function callCustomCreator($driver) { - return $this->customCreators[$driver]($this->app); + return $this->customCreators[$driver]($this->container); } /** * Register a custom driver creator Closure. * - * @param string $driver + * @param string $driver * @param \Closure $callback * @return $this */ @@ -138,7 +158,7 @@ abstract class Manager * Dynamically call the default driver instance. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public function __call($method, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php b/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php index 72fe683e..bfc4fd29 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php +++ b/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php @@ -3,11 +3,11 @@ namespace Illuminate\Support; use Countable; -use JsonSerializable; -use Illuminate\Contracts\Support\Jsonable; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Contracts\Support\MessageProvider; +use Illuminate\Contracts\Support\Jsonable; use Illuminate\Contracts\Support\MessageBag as MessageBagContract; +use Illuminate\Contracts\Support\MessageProvider; +use JsonSerializable; class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, MessageBagContract, MessageProvider { @@ -66,6 +66,19 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me return $this; } + /** + * Add a message to the message bag if the given conditional is "true". + * + * @param bool $boolean + * @param string $key + * @param string $message + * @return $this + */ + public function addIf($boolean, $key, $message) + { + return $boolean ? $this->add($key, $message) : $this; + } + /** * Determine if a key and message combination already exists. * @@ -100,11 +113,15 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me /** * Determine if messages exist for all of the given keys. * - * @param array|string $key + * @param array|string|null $key * @return bool */ public function has($key) { + if ($this->isEmpty()) { + return false; + } + if (is_null($key)) { return $this->any(); } @@ -128,6 +145,10 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me */ public function hasAny($keys = []) { + if ($this->isEmpty()) { + return false; + } + $keys = is_array($keys) ? $keys : func_get_args(); foreach ($keys as $key) { @@ -142,8 +163,8 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me /** * Get the first message from the message bag for a given key. * - * @param string $key - * @param string $format + * @param string|null $key + * @param string|null $format * @return string */ public function first($key = null, $format = null) @@ -159,7 +180,7 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me * Get all of the messages from the message bag for a given key. * * @param string $key - * @param string $format + * @param string|null $format * @return array */ public function get($key, $format = null) @@ -203,7 +224,7 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me /** * Get all of the messages for every key in the message bag. * - * @param string $format + * @param string|null $format * @return array */ public function all($format = null) @@ -222,7 +243,7 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me /** * Get all of the unique messages for every key in the message bag. * - * @param string $format + * @param string|null $format * @return array */ public function unique($format = null) @@ -233,7 +254,7 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me /** * Format an array of messages. * - * @param array $messages + * @param array $messages * @param string $format * @param string $messageKey * @return array diff --git a/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php b/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php index cc389578..e9251db6 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php +++ b/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php @@ -92,7 +92,7 @@ class NamespacedItemResolver * Set the parsed value of a key. * * @param string $key - * @param array $parsed + * @param array $parsed * @return void */ public function setParsedKey($key, $parsed) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php b/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php index 75a2f6ac..03719d4e 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php @@ -2,7 +2,10 @@ namespace Illuminate\Support; -use Doctrine\Common\Inflector\Inflector; +use Doctrine\Inflector\CachedWordInflector; +use Doctrine\Inflector\Inflector; +use Doctrine\Inflector\Rules\English; +use Doctrine\Inflector\RulesetInflector; class Pluralizer { @@ -45,6 +48,8 @@ class Pluralizer 'pokemon', 'police', 'rain', + 'recommended', + 'related', 'rice', 'series', 'sheep', @@ -59,7 +64,7 @@ class Pluralizer * Get the plural form of an English word. * * @param string $value - * @param int $count + * @param int $count * @return string */ public static function plural($value, $count = 2) @@ -68,7 +73,7 @@ class Pluralizer return $value; } - $plural = Inflector::pluralize($value); + $plural = static::inflector()->pluralize($value); return static::matchCase($plural, $value); } @@ -81,7 +86,7 @@ class Pluralizer */ public static function singular($value) { - $singular = Inflector::singularize($value); + $singular = static::inflector()->singularize($value); return static::matchCase($singular, $value); } @@ -109,11 +114,34 @@ class Pluralizer $functions = ['mb_strtolower', 'mb_strtoupper', 'ucfirst', 'ucwords']; foreach ($functions as $function) { - if (call_user_func($function, $comparison) === $comparison) { - return call_user_func($function, $value); + if ($function($comparison) === $comparison) { + return $function($value); } } return $value; } + + /** + * Get the inflector instance. + * + * @return \Doctrine\Inflector\Inflector + */ + public static function inflector() + { + static $inflector; + + if (is_null($inflector)) { + $inflector = new Inflector( + new CachedWordInflector(new RulesetInflector( + English\Rules::getSingularRuleset() + )), + new CachedWordInflector(new RulesetInflector( + English\Rules::getPluralRuleset() + )) + ); + } + + return $inflector; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Reflector.php b/vendor/laravel/framework/src/Illuminate/Support/Reflector.php new file mode 100644 index 00000000..66392ca2 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Reflector.php @@ -0,0 +1,102 @@ +isPublic(); + } + + if (is_object($var[0]) && method_exists($class, '__call')) { + return (new ReflectionMethod($class, '__call'))->isPublic(); + } + + if (! is_object($var[0]) && method_exists($class, '__callStatic')) { + return (new ReflectionMethod($class, '__callStatic'))->isPublic(); + } + + return false; + } + + /** + * Get the class name of the given parameter's type, if possible. + * + * @param \ReflectionParameter $parameter + * @return string|null + */ + public static function getParameterClassName($parameter) + { + $type = $parameter->getType(); + + if (! $type instanceof ReflectionNamedType || $type->isBuiltin()) { + return; + } + + $name = $type->getName(); + + if (! is_null($class = $parameter->getDeclaringClass())) { + if ($name === 'self') { + return $class->getName(); + } + + if ($name === 'parent' && $parent = $class->getParentClass()) { + return $parent->getName(); + } + } + + return $name; + } + + /** + * Determine if the parameter's type is a subclass of the given type. + * + * @param \ReflectionParameter $parameter + * @param string $className + * @return bool + */ + public static function isParameterSubclassOf($parameter, $className) + { + $paramClassName = static::getParameterClassName($parameter); + + return ($paramClassName && class_exists($paramClassName)) + ? (new ReflectionClass($paramClassName))->isSubclassOf($className) + : false; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php index d2e707bc..a948571a 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php @@ -3,23 +3,21 @@ namespace Illuminate\Support; use Illuminate\Console\Application as Artisan; +use Illuminate\Contracts\Foundation\CachesConfiguration; +use Illuminate\Contracts\Foundation\CachesRoutes; +use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Database\Eloquent\Factory as ModelFactory; +use Illuminate\View\Compilers\BladeCompiler; abstract class ServiceProvider { /** * The application instance. * - * @var \Illuminate\Contracts\Foundation\Application|\Illuminate\Foundation\Application + * @var \Illuminate\Contracts\Foundation\Application */ protected $app; - /** - * Indicates if loading of the provider is deferred. - * - * @var bool - */ - protected $defer = false; - /** * The paths that should be published. * @@ -37,7 +35,7 @@ abstract class ServiceProvider /** * Create a new service provider instance. * - * @param \Illuminate\Contracts\Foundation\Application|\Illuminate\Foundation\Application $app + * @param \Illuminate\Contracts\Foundation\Application $app * @return void */ public function __construct($app) @@ -45,6 +43,16 @@ abstract class ServiceProvider $this->app = $app; } + /** + * Register any application services. + * + * @return void + */ + public function register() + { + // + } + /** * Merge the given configuration with the existing configuration. * @@ -54,9 +62,13 @@ abstract class ServiceProvider */ protected function mergeConfigFrom($path, $key) { - $config = $this->app['config']->get($key, []); + if (! ($this->app instanceof CachesConfiguration && $this->app->configurationIsCached())) { + $config = $this->app->make('config'); - $this->app['config']->set($key, array_merge(require $path, $config)); + $config->set($key, array_merge( + require $path, $config->get($key, []) + )); + } } /** @@ -67,7 +79,7 @@ abstract class ServiceProvider */ protected function loadRoutesFrom($path) { - if (! $this->app->routesAreCached()) { + if (! ($this->app instanceof CachesRoutes && $this->app->routesAreCached())) { require $path; } } @@ -81,15 +93,34 @@ abstract class ServiceProvider */ protected function loadViewsFrom($path, $namespace) { - if (is_array($this->app->config['view']['paths'])) { - foreach ($this->app->config['view']['paths'] as $viewPath) { - if (is_dir($appPath = $viewPath.'/vendor/'.$namespace)) { - $this->app['view']->addNamespace($namespace, $appPath); + $this->callAfterResolving('view', function ($view) use ($path, $namespace) { + if (isset($this->app->config['view']['paths']) && + is_array($this->app->config['view']['paths'])) { + foreach ($this->app->config['view']['paths'] as $viewPath) { + if (is_dir($appPath = $viewPath.'/vendor/'.$namespace)) { + $view->addNamespace($namespace, $appPath); + } } } - } - $this->app['view']->addNamespace($namespace, $path); + $view->addNamespace($namespace, $path); + }); + } + + /** + * Register the given view components with a custom prefix. + * + * @param string $prefix + * @param array $components + * @return void + */ + protected function loadViewComponentsAs($prefix, array $components) + { + $this->callAfterResolving(BladeCompiler::class, function ($blade) use ($prefix, $components) { + foreach ($components as $alias => $component) { + $blade->component($component, is_string($alias) ? $alias : null, $prefix); + } + }); } /** @@ -101,7 +132,9 @@ abstract class ServiceProvider */ protected function loadTranslationsFrom($path, $namespace) { - $this->app['translator']->addNamespace($namespace, $path); + $this->callAfterResolving('translator', function ($translator) use ($path, $namespace) { + $translator->addNamespace($namespace, $path); + }); } /** @@ -112,38 +145,71 @@ abstract class ServiceProvider */ protected function loadJsonTranslationsFrom($path) { - $this->app['translator']->addJsonPath($path); + $this->callAfterResolving('translator', function ($translator) use ($path) { + $translator->addJsonPath($path); + }); } /** - * Register a database migration path. + * Register database migration paths. * * @param array|string $paths * @return void */ protected function loadMigrationsFrom($paths) { - $this->app->afterResolving('migrator', function ($migrator) use ($paths) { + $this->callAfterResolving('migrator', function ($migrator) use ($paths) { foreach ((array) $paths as $path) { $migrator->path($path); } }); } + /** + * Register Eloquent model factory paths. + * + * @param array|string $paths + * @return void + */ + protected function loadFactoriesFrom($paths) + { + $this->callAfterResolving(ModelFactory::class, function ($factory) use ($paths) { + foreach ((array) $paths as $path) { + $factory->load($path); + } + }); + } + + /** + * Setup an after resolving listener, or fire immediately if already resolved. + * + * @param string $name + * @param callable $callback + * @return void + */ + protected function callAfterResolving($name, $callback) + { + $this->app->afterResolving($name, $callback); + + if ($this->app->resolved($name)) { + $callback($this->app->make($name), $this->app); + } + } + /** * Register paths to be published by the publish command. * * @param array $paths - * @param string $group + * @param mixed $groups * @return void */ - protected function publishes(array $paths, $group = null) + protected function publishes(array $paths, $groups = null) { $this->ensurePublishArrayInitialized($class = static::class); static::$publishes[$class] = array_merge(static::$publishes[$class], $paths); - if ($group) { + foreach ((array) $groups as $group) { $this->addPublishGroup($group, $paths); } } @@ -182,8 +248,8 @@ abstract class ServiceProvider /** * Get the paths to publish. * - * @param string $provider - * @param string $group + * @param string|null $provider + * @param string|null $group * @return array */ public static function pathsToPublish($provider = null, $group = null) @@ -295,6 +361,6 @@ abstract class ServiceProvider */ public function isDeferred() { - return $this->defer; + return $this instanceof DeferrableProvider; } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Str.php b/vendor/laravel/framework/src/Illuminate/Support/Str.php index c67c6c25..c85142c4 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Str.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Str.php @@ -2,11 +2,12 @@ namespace Illuminate\Support; +use Illuminate\Support\Traits\Macroable; +use Ramsey\Uuid\Codec\TimestampFirstCombCodec; +use Ramsey\Uuid\Generator\CombGenerator; use Ramsey\Uuid\Uuid; use Ramsey\Uuid\UuidFactory; -use Illuminate\Support\Traits\Macroable; -use Ramsey\Uuid\Generator\CombGenerator; -use Ramsey\Uuid\Codec\TimestampFirstCombCodec; +use voku\helper\ASCII; class Str { @@ -34,7 +35,25 @@ class Str protected static $studlyCache = []; /** - * Return the remainder of a string after a given value. + * The callback that should be used to generate UUIDs. + * + * @var callable + */ + protected static $uuidFactory; + + /** + * Get a new stringable object from the given string. + * + * @param string $string + * @return \Illuminate\Support\Stringable + */ + public static function of($string) + { + return new Stringable($string); + } + + /** + * Return the remainder of a string after the first occurrence of a given value. * * @param string $subject * @param string $search @@ -45,6 +64,28 @@ class Str return $search === '' ? $subject : array_reverse(explode($search, $subject, 2))[0]; } + /** + * Return the remainder of a string after the last occurrence of a given value. + * + * @param string $subject + * @param string $search + * @return string + */ + public static function afterLast($subject, $search) + { + if ($search === '') { + return $subject; + } + + $position = strrpos($subject, (string) $search); + + if ($position === false) { + return $subject; + } + + return substr($subject, $position + strlen($search)); + } + /** * Transliterate a UTF-8 value to ASCII. * @@ -54,21 +95,11 @@ class Str */ public static function ascii($value, $language = 'en') { - $languageSpecific = static::languageSpecificCharsArray($language); - - if (! is_null($languageSpecific)) { - $value = str_replace($languageSpecific[0], $languageSpecific[1], $value); - } - - foreach (static::charsArray() as $key => $val) { - $value = str_replace($val, $key, $value); - } - - return preg_replace('/[^\x20-\x7E]/u', '', $value); + return ASCII::to_ascii((string) $value, $language); } /** - * Get the portion of a string before a given value. + * Get the portion of a string before the first occurrence of a given value. * * @param string $subject * @param string $search @@ -79,6 +110,45 @@ class Str return $search === '' ? $subject : explode($search, $subject)[0]; } + /** + * Get the portion of a string before the last occurrence of a given value. + * + * @param string $subject + * @param string $search + * @return string + */ + public static function beforeLast($subject, $search) + { + if ($search === '') { + return $subject; + } + + $pos = mb_strrpos($subject, $search); + + if ($pos === false) { + return $subject; + } + + return static::substr($subject, 0, $pos); + } + + /** + * Get the portion of a string between two given values. + * + * @param string $subject + * @param string $from + * @param string $to + * @return string + */ + public static function between($subject, $from, $to) + { + if ($from === '' || $to === '') { + return $subject; + } + + return static::beforeLast(static::after($subject, $from), $to); + } + /** * Convert a value to camel case. * @@ -98,7 +168,7 @@ class Str * Determine if a given string contains a given substring. * * @param string $haystack - * @param string|array $needles + * @param string|string[] $needles * @return bool */ public static function contains($haystack, $needles) @@ -112,17 +182,35 @@ class Str return false; } + /** + * Determine if a given string contains all array values. + * + * @param string $haystack + * @param string[] $needles + * @return bool + */ + public static function containsAll($haystack, array $needles) + { + foreach ($needles as $needle) { + if (! static::contains($haystack, $needle)) { + return false; + } + } + + return true; + } + /** * Determine if a given string ends with a given substring. * * @param string $haystack - * @param string|array $needles + * @param string|string[] $needles * @return bool */ public static function endsWith($haystack, $needles) { foreach ((array) $needles as $needle) { - if (substr($haystack, -strlen($needle)) === (string) $needle) { + if ($needle !== '' && substr($haystack, -strlen($needle)) === (string) $needle) { return true; } } @@ -182,6 +270,32 @@ class Str return false; } + /** + * Determine if a given string is 7 bit ASCII. + * + * @param string $value + * @return bool + */ + public static function isAscii($value) + { + return ASCII::is_ascii((string) $value); + } + + /** + * Determine if a given string is a valid UUID. + * + * @param string $value + * @return bool + */ + public static function isUuid($value) + { + if (! is_string($value)) { + return false; + } + + return preg_match('/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iD', $value) > 0; + } + /** * Convert a string to kebab case. * @@ -197,7 +311,7 @@ class Str * Return the length of the given string. * * @param string $value - * @param string $encoding + * @param string|null $encoding * @return int */ public static function length($value, $encoding = null) @@ -213,7 +327,7 @@ class Str * Limit the number of characters in a string. * * @param string $value - * @param int $limit + * @param int $limit * @param string $end * @return string */ @@ -241,7 +355,7 @@ class Str * Limit the number of words in a string. * * @param string $value - * @param int $words + * @param int $words * @param string $end * @return string */ @@ -257,11 +371,50 @@ class Str } /** - * Parse a Class@method style callback into class and method. + * Pad both sides of a string with another. + * + * @param string $value + * @param int $length + * @param string $pad + * @return string + */ + public static function padBoth($value, $length, $pad = ' ') + { + return str_pad($value, $length, $pad, STR_PAD_BOTH); + } + + /** + * Pad the left side of a string with another. + * + * @param string $value + * @param int $length + * @param string $pad + * @return string + */ + public static function padLeft($value, $length, $pad = ' ') + { + return str_pad($value, $length, $pad, STR_PAD_LEFT); + } + + /** + * Pad the right side of a string with another. + * + * @param string $value + * @param int $length + * @param string $pad + * @return string + */ + public static function padRight($value, $length, $pad = ' ') + { + return str_pad($value, $length, $pad, STR_PAD_RIGHT); + } + + /** + * Parse a Class[@]method style callback into class and method. * * @param string $callback * @param string|null $default - * @return array + * @return array */ public static function parseCallback($callback, $default = null) { @@ -272,7 +425,7 @@ class Str * Get the plural form of an English word. * * @param string $value - * @param int $count + * @param int $count * @return string */ public static function plural($value, $count = 2) @@ -280,6 +433,22 @@ class Str return Pluralizer::plural($value, $count); } + /** + * Pluralize the last word of an English, studly caps case string. + * + * @param string $value + * @param int $count + * @return string + */ + public static function pluralStudly($value, $count = 2) + { + $parts = preg_split('/(.)(?=[A-Z])/u', $value, -1, PREG_SPLIT_DELIM_CAPTURE); + + $lastWord = array_pop($parts); + + return implode('', $parts).self::plural($lastWord, $count); + } + /** * Generate a more truly "random" alpha-numeric string. * @@ -305,17 +474,21 @@ class Str * Replace a given value in the string sequentially with an array. * * @param string $search - * @param array $replace + * @param array $replace * @param string $subject * @return string */ public static function replaceArray($search, array $replace, $subject) { - foreach ($replace as $value) { - $subject = static::replaceFirst($search, $value, $subject); + $segments = explode($search, $subject); + + $result = array_shift($segments); + + foreach ($segments as $segment) { + $result .= (array_shift($replace) ?? $search).$segment; } - return $subject; + return $result; } /** @@ -351,6 +524,10 @@ class Str */ public static function replaceLast($search, $replace, $subject) { + if ($search === '') { + return $subject; + } + $position = strrpos($subject, $search); if ($position !== false) { @@ -464,13 +641,13 @@ class Str * Determine if a given string starts with a given substring. * * @param string $haystack - * @param string|array $needles + * @param string|string[] $needles * @return bool */ public static function startsWith($haystack, $needles) { foreach ((array) $needles as $needle) { - if ($needle !== '' && substr($haystack, 0, strlen($needle)) === (string) $needle) { + if ((string) $needle !== '' && strncmp($haystack, $needle, strlen($needle)) === 0) { return true; } } @@ -510,6 +687,24 @@ class Str return mb_substr($string, $start, $length, 'UTF-8'); } + /** + * Returns the number of substring occurrences. + * + * @param string $haystack + * @param string $needle + * @param int $offset + * @param int|null $length + * @return int + */ + public static function substrCount($haystack, $needle, $offset = 0, $length = null) + { + if (! is_null($length)) { + return substr_count($haystack, $needle, $offset, $length); + } else { + return substr_count($haystack, $needle, $offset); + } + } + /** * Make a string's first character uppercase. * @@ -528,7 +723,9 @@ class Str */ public static function uuid() { - return Uuid::uuid4(); + return static::$uuidFactory + ? call_user_func(static::$uuidFactory) + : Uuid::uuid4(); } /** @@ -538,7 +735,11 @@ class Str */ public static function orderedUuid() { - $factory = new UuidFactory; + if (static::$uuidFactory) { + return call_user_func(static::$uuidFactory); + } + + $factory = new UuidFactory(); $factory->setRandomGenerator(new CombGenerator( $factory->getRandomGenerator(), @@ -553,166 +754,23 @@ class Str } /** - * Returns the replacements for the ascii method. + * Set the callable that will be used to generate UUIDs. * - * Note: Adapted from Stringy\Stringy. - * - * @see https://github.com/danielstjules/Stringy/blob/3.1.0/LICENSE.txt - * - * @return array + * @param callable|null $factory + * @return void */ - protected static function charsArray() + public static function createUuidsUsing(callable $factory = null) { - static $charsArray; - - if (isset($charsArray)) { - return $charsArray; - } - - return $charsArray = [ - '0' => ['°', '₀', '۰', '0'], - '1' => ['¹', '₁', '۱', '1'], - '2' => ['²', '₂', '۲', '2'], - '3' => ['³', '₃', '۳', '3'], - '4' => ['⁴', '₄', '۴', '٤', '4'], - '5' => ['⁵', '₅', '۵', '٥', '5'], - '6' => ['⁶', '₆', '۶', '٦', '6'], - '7' => ['⁷', '₇', '۷', '7'], - '8' => ['⁸', '₈', '۸', '8'], - '9' => ['⁹', '₉', '۹', '9'], - 'a' => ['à', 'á', 'ả', 'ã', 'ạ', 'ă', 'ắ', 'ằ', 'ẳ', 'ẵ', 'ặ', 'â', 'ấ', 'ầ', 'ẩ', 'ẫ', 'ậ', 'ā', 'ą', 'å', 'α', 'ά', 'ἀ', 'ἁ', 'ἂ', 'ἃ', 'ἄ', 'ἅ', 'ἆ', 'ἇ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ὰ', 'ά', 'ᾰ', 'ᾱ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'а', 'أ', 'အ', 'ာ', 'ါ', 'ǻ', 'ǎ', 'ª', 'ა', 'अ', 'ا', 'a', 'ä'], - 'b' => ['б', 'β', 'ب', 'ဗ', 'ბ', 'b'], - 'c' => ['ç', 'ć', 'č', 'ĉ', 'ċ', 'c'], - 'd' => ['ď', 'ð', 'đ', 'ƌ', 'ȡ', 'ɖ', 'ɗ', 'ᵭ', 'ᶁ', 'ᶑ', 'д', 'δ', 'د', 'ض', 'ဍ', 'ဒ', 'დ', 'd'], - 'e' => ['é', 'è', 'ẻ', 'ẽ', 'ẹ', 'ê', 'ế', 'ề', 'ể', 'ễ', 'ệ', 'ë', 'ē', 'ę', 'ě', 'ĕ', 'ė', 'ε', 'έ', 'ἐ', 'ἑ', 'ἒ', 'ἓ', 'ἔ', 'ἕ', 'ὲ', 'έ', 'е', 'ё', 'э', 'є', 'ə', 'ဧ', 'ေ', 'ဲ', 'ე', 'ए', 'إ', 'ئ', 'e'], - 'f' => ['ф', 'φ', 'ف', 'ƒ', 'ფ', 'f'], - 'g' => ['ĝ', 'ğ', 'ġ', 'ģ', 'г', 'ґ', 'γ', 'ဂ', 'გ', 'گ', 'g'], - 'h' => ['ĥ', 'ħ', 'η', 'ή', 'ح', 'ه', 'ဟ', 'ှ', 'ჰ', 'h'], - 'i' => ['í', 'ì', 'ỉ', 'ĩ', 'ị', 'î', 'ï', 'ī', 'ĭ', 'į', 'ı', 'ι', 'ί', 'ϊ', 'ΐ', 'ἰ', 'ἱ', 'ἲ', 'ἳ', 'ἴ', 'ἵ', 'ἶ', 'ἷ', 'ὶ', 'ί', 'ῐ', 'ῑ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'і', 'ї', 'и', 'ဣ', 'ိ', 'ီ', 'ည်', 'ǐ', 'ი', 'इ', 'ی', 'i'], - 'j' => ['ĵ', 'ј', 'Ј', 'ჯ', 'ج', 'j'], - 'k' => ['ķ', 'ĸ', 'к', 'κ', 'Ķ', 'ق', 'ك', 'က', 'კ', 'ქ', 'ک', 'k'], - 'l' => ['ł', 'ľ', 'ĺ', 'ļ', 'ŀ', 'л', 'λ', 'ل', 'လ', 'ლ', 'l'], - 'm' => ['м', 'μ', 'م', 'မ', 'მ', 'm'], - 'n' => ['ñ', 'ń', 'ň', 'ņ', 'ʼn', 'ŋ', 'ν', 'н', 'ن', 'န', 'ნ', 'n'], - 'o' => ['ó', 'ò', 'ỏ', 'õ', 'ọ', 'ô', 'ố', 'ồ', 'ổ', 'ỗ', 'ộ', 'ơ', 'ớ', 'ờ', 'ở', 'ỡ', 'ợ', 'ø', 'ō', 'ő', 'ŏ', 'ο', 'ὀ', 'ὁ', 'ὂ', 'ὃ', 'ὄ', 'ὅ', 'ὸ', 'ό', 'о', 'و', 'θ', 'ို', 'ǒ', 'ǿ', 'º', 'ო', 'ओ', 'o', 'ö'], - 'p' => ['п', 'π', 'ပ', 'პ', 'پ', 'p'], - 'q' => ['ყ', 'q'], - 'r' => ['ŕ', 'ř', 'ŗ', 'р', 'ρ', 'ر', 'რ', 'r'], - 's' => ['ś', 'š', 'ş', 'с', 'σ', 'ș', 'ς', 'س', 'ص', 'စ', 'ſ', 'ს', 's'], - 't' => ['ť', 'ţ', 'т', 'τ', 'ț', 'ت', 'ط', 'ဋ', 'တ', 'ŧ', 'თ', 'ტ', 't'], - 'u' => ['ú', 'ù', 'ủ', 'ũ', 'ụ', 'ư', 'ứ', 'ừ', 'ử', 'ữ', 'ự', 'û', 'ū', 'ů', 'ű', 'ŭ', 'ų', 'µ', 'у', 'ဉ', 'ု', 'ူ', 'ǔ', 'ǖ', 'ǘ', 'ǚ', 'ǜ', 'უ', 'उ', 'u', 'ў', 'ü'], - 'v' => ['в', 'ვ', 'ϐ', 'v'], - 'w' => ['ŵ', 'ω', 'ώ', 'ဝ', 'ွ', 'w'], - 'x' => ['χ', 'ξ', 'x'], - 'y' => ['ý', 'ỳ', 'ỷ', 'ỹ', 'ỵ', 'ÿ', 'ŷ', 'й', 'ы', 'υ', 'ϋ', 'ύ', 'ΰ', 'ي', 'ယ', 'y'], - 'z' => ['ź', 'ž', 'ż', 'з', 'ζ', 'ز', 'ဇ', 'ზ', 'z'], - 'aa' => ['ع', 'आ', 'آ'], - 'ae' => ['æ', 'ǽ'], - 'ai' => ['ऐ'], - 'ch' => ['ч', 'ჩ', 'ჭ', 'چ'], - 'dj' => ['ђ', 'đ'], - 'dz' => ['џ', 'ძ'], - 'ei' => ['ऍ'], - 'gh' => ['غ', 'ღ'], - 'ii' => ['ई'], - 'ij' => ['ij'], - 'kh' => ['х', 'خ', 'ხ'], - 'lj' => ['љ'], - 'nj' => ['њ'], - 'oe' => ['ö', 'œ', 'ؤ'], - 'oi' => ['ऑ'], - 'oii' => ['ऒ'], - 'ps' => ['ψ'], - 'sh' => ['ш', 'შ', 'ش'], - 'shch' => ['щ'], - 'ss' => ['ß'], - 'sx' => ['ŝ'], - 'th' => ['þ', 'ϑ', 'ث', 'ذ', 'ظ'], - 'ts' => ['ц', 'ც', 'წ'], - 'ue' => ['ü'], - 'uu' => ['ऊ'], - 'ya' => ['я'], - 'yu' => ['ю'], - 'zh' => ['ж', 'ჟ', 'ژ'], - '(c)' => ['©'], - 'A' => ['Á', 'À', 'Ả', 'Ã', 'Ạ', 'Ă', 'Ắ', 'Ằ', 'Ẳ', 'Ẵ', 'Ặ', 'Â', 'Ấ', 'Ầ', 'Ẩ', 'Ẫ', 'Ậ', 'Å', 'Ā', 'Ą', 'Α', 'Ά', 'Ἀ', 'Ἁ', 'Ἂ', 'Ἃ', 'Ἄ', 'Ἅ', 'Ἆ', 'Ἇ', 'ᾈ', 'ᾉ', 'ᾊ', 'ᾋ', 'ᾌ', 'ᾍ', 'ᾎ', 'ᾏ', 'Ᾰ', 'Ᾱ', 'Ὰ', 'Ά', 'ᾼ', 'А', 'Ǻ', 'Ǎ', 'A', 'Ä'], - 'B' => ['Б', 'Β', 'ब', 'B'], - 'C' => ['Ç', 'Ć', 'Č', 'Ĉ', 'Ċ', 'C'], - 'D' => ['Ď', 'Ð', 'Đ', 'Ɖ', 'Ɗ', 'Ƌ', 'ᴅ', 'ᴆ', 'Д', 'Δ', 'D'], - 'E' => ['É', 'È', 'Ẻ', 'Ẽ', 'Ẹ', 'Ê', 'Ế', 'Ề', 'Ể', 'Ễ', 'Ệ', 'Ë', 'Ē', 'Ę', 'Ě', 'Ĕ', 'Ė', 'Ε', 'Έ', 'Ἐ', 'Ἑ', 'Ἒ', 'Ἓ', 'Ἔ', 'Ἕ', 'Έ', 'Ὲ', 'Е', 'Ё', 'Э', 'Є', 'Ə', 'E'], - 'F' => ['Ф', 'Φ', 'F'], - 'G' => ['Ğ', 'Ġ', 'Ģ', 'Г', 'Ґ', 'Γ', 'G'], - 'H' => ['Η', 'Ή', 'Ħ', 'H'], - 'I' => ['Í', 'Ì', 'Ỉ', 'Ĩ', 'Ị', 'Î', 'Ï', 'Ī', 'Ĭ', 'Į', 'İ', 'Ι', 'Ί', 'Ϊ', 'Ἰ', 'Ἱ', 'Ἳ', 'Ἴ', 'Ἵ', 'Ἶ', 'Ἷ', 'Ῐ', 'Ῑ', 'Ὶ', 'Ί', 'И', 'І', 'Ї', 'Ǐ', 'ϒ', 'I'], - 'J' => ['J'], - 'K' => ['К', 'Κ', 'K'], - 'L' => ['Ĺ', 'Ł', 'Л', 'Λ', 'Ļ', 'Ľ', 'Ŀ', 'ल', 'L'], - 'M' => ['М', 'Μ', 'M'], - 'N' => ['Ń', 'Ñ', 'Ň', 'Ņ', 'Ŋ', 'Н', 'Ν', 'N'], - 'O' => ['Ó', 'Ò', 'Ỏ', 'Õ', 'Ọ', 'Ô', 'Ố', 'Ồ', 'Ổ', 'Ỗ', 'Ộ', 'Ơ', 'Ớ', 'Ờ', 'Ở', 'Ỡ', 'Ợ', 'Ø', 'Ō', 'Ő', 'Ŏ', 'Ο', 'Ό', 'Ὀ', 'Ὁ', 'Ὂ', 'Ὃ', 'Ὄ', 'Ὅ', 'Ὸ', 'Ό', 'О', 'Θ', 'Ө', 'Ǒ', 'Ǿ', 'O', 'Ö'], - 'P' => ['П', 'Π', 'P'], - 'Q' => ['Q'], - 'R' => ['Ř', 'Ŕ', 'Р', 'Ρ', 'Ŗ', 'R'], - 'S' => ['Ş', 'Ŝ', 'Ș', 'Š', 'Ś', 'С', 'Σ', 'S'], - 'T' => ['Ť', 'Ţ', 'Ŧ', 'Ț', 'Т', 'Τ', 'T'], - 'U' => ['Ú', 'Ù', 'Ủ', 'Ũ', 'Ụ', 'Ư', 'Ứ', 'Ừ', 'Ử', 'Ữ', 'Ự', 'Û', 'Ū', 'Ů', 'Ű', 'Ŭ', 'Ų', 'У', 'Ǔ', 'Ǖ', 'Ǘ', 'Ǚ', 'Ǜ', 'U', 'Ў', 'Ü'], - 'V' => ['В', 'V'], - 'W' => ['Ω', 'Ώ', 'Ŵ', 'W'], - 'X' => ['Χ', 'Ξ', 'X'], - 'Y' => ['Ý', 'Ỳ', 'Ỷ', 'Ỹ', 'Ỵ', 'Ÿ', 'Ῠ', 'Ῡ', 'Ὺ', 'Ύ', 'Ы', 'Й', 'Υ', 'Ϋ', 'Ŷ', 'Y'], - 'Z' => ['Ź', 'Ž', 'Ż', 'З', 'Ζ', 'Z'], - 'AE' => ['Æ', 'Ǽ'], - 'Ch' => ['Ч'], - 'Dj' => ['Ђ'], - 'Dz' => ['Џ'], - 'Gx' => ['Ĝ'], - 'Hx' => ['Ĥ'], - 'Ij' => ['IJ'], - 'Jx' => ['Ĵ'], - 'Kh' => ['Х'], - 'Lj' => ['Љ'], - 'Nj' => ['Њ'], - 'Oe' => ['Œ'], - 'Ps' => ['Ψ'], - 'Sh' => ['Ш'], - 'Shch' => ['Щ'], - 'Ss' => ['ẞ'], - 'Th' => ['Þ'], - 'Ts' => ['Ц'], - 'Ya' => ['Я'], - 'Yu' => ['Ю'], - 'Zh' => ['Ж'], - ' ' => ["\xC2\xA0", "\xE2\x80\x80", "\xE2\x80\x81", "\xE2\x80\x82", "\xE2\x80\x83", "\xE2\x80\x84", "\xE2\x80\x85", "\xE2\x80\x86", "\xE2\x80\x87", "\xE2\x80\x88", "\xE2\x80\x89", "\xE2\x80\x8A", "\xE2\x80\xAF", "\xE2\x81\x9F", "\xE3\x80\x80", "\xEF\xBE\xA0"], - ]; + static::$uuidFactory = $factory; } /** - * Returns the language specific replacements for the ascii method. + * Indicate that UUIDs should be created normally and not using a custom factory. * - * Note: Adapted from Stringy\Stringy. - * - * @see https://github.com/danielstjules/Stringy/blob/3.1.0/LICENSE.txt - * - * @param string $language - * @return array|null + * @return void */ - protected static function languageSpecificCharsArray($language) + public static function createUuidsNormally() { - static $languageSpecific; - - if (! isset($languageSpecific)) { - $languageSpecific = [ - 'bg' => [ - ['х', 'Х', 'щ', 'Щ', 'ъ', 'Ъ', 'ь', 'Ь'], - ['h', 'H', 'sht', 'SHT', 'a', 'А', 'y', 'Y'], - ], - 'de' => [ - ['ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü'], - ['ae', 'oe', 'ue', 'AE', 'OE', 'UE'], - ], - ]; - } - - return $languageSpecific[$language] ?? null; + static::$uuidFactory = null; } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Stringable.php b/vendor/laravel/framework/src/Illuminate/Support/Stringable.php new file mode 100644 index 00000000..82ecac84 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Stringable.php @@ -0,0 +1,731 @@ +value = (string) $value; + } + + /** + * Return the remainder of a string after the first occurrence of a given value. + * + * @param string $search + * @return static + */ + public function after($search) + { + return new static(Str::after($this->value, $search)); + } + + /** + * Return the remainder of a string after the last occurrence of a given value. + * + * @param string $search + * @return static + */ + public function afterLast($search) + { + return new static(Str::afterLast($this->value, $search)); + } + + /** + * Append the given values to the string. + * + * @param array $values + * @return static + */ + public function append(...$values) + { + return new static($this->value.implode('', $values)); + } + + /** + * Transliterate a UTF-8 value to ASCII. + * + * @param string $language + * @return static + */ + public function ascii($language = 'en') + { + return new static(Str::ascii($this->value, $language)); + } + + /** + * Get the trailing name component of the path. + * + * @param string $suffix + * @return static + */ + public function basename($suffix = '') + { + return new static(basename($this->value, $suffix)); + } + + /** + * Get the portion of a string before the first occurrence of a given value. + * + * @param string $search + * @return static + */ + public function before($search) + { + return new static(Str::before($this->value, $search)); + } + + /** + * Get the portion of a string before the last occurrence of a given value. + * + * @param string $search + * @return static + */ + public function beforeLast($search) + { + return new static(Str::beforeLast($this->value, $search)); + } + + /** + * Get the portion of a string between two given values. + * + * @param string $from + * @param string $to + * @return static + */ + public function between($from, $to) + { + return new static(Str::between($this->value, $from, $to)); + } + + /** + * Convert a value to camel case. + * + * @return static + */ + public function camel() + { + return new static(Str::camel($this->value)); + } + + /** + * Determine if a given string contains a given substring. + * + * @param string|array $needles + * @return bool + */ + public function contains($needles) + { + return Str::contains($this->value, $needles); + } + + /** + * Determine if a given string contains all array values. + * + * @param array $needles + * @return bool + */ + public function containsAll(array $needles) + { + return Str::containsAll($this->value, $needles); + } + + /** + * Get the parent directory's path. + * + * @param int $levels + * @return static + */ + public function dirname($levels = 1) + { + return new static(dirname($this->value, $levels)); + } + + /** + * Determine if a given string ends with a given substring. + * + * @param string|array $needles + * @return bool + */ + public function endsWith($needles) + { + return Str::endsWith($this->value, $needles); + } + + /** + * Determine if the string is an exact match with the given value. + * + * @param string $value + * @return bool + */ + public function exactly($value) + { + return $this->value === $value; + } + + /** + * Explode the string into an array. + * + * @param string $delimiter + * @param int $limit + * @return \Illuminate\Support\Collection + */ + public function explode($delimiter, $limit = PHP_INT_MAX) + { + return collect(explode($delimiter, $this->value, $limit)); + } + + /** + * Split a string using a regular expression. + * + * @param string $pattern + * @param int $limit + * @param int $flags + * @return \Illuminate\Support\Collection + */ + public function split($pattern, $limit = -1, $flags = 0) + { + $segments = preg_split($pattern, $this->value, $limit, $flags); + + return ! empty($segments) ? collect($segments) : collect(); + } + + /** + * Cap a string with a single instance of a given value. + * + * @param string $cap + * @return static + */ + public function finish($cap) + { + return new static(Str::finish($this->value, $cap)); + } + + /** + * Determine if a given string matches a given pattern. + * + * @param string|array $pattern + * @return bool + */ + public function is($pattern) + { + return Str::is($pattern, $this->value); + } + + /** + * Determine if a given string is 7 bit ASCII. + * + * @return bool + */ + public function isAscii() + { + return Str::isAscii($this->value); + } + + /** + * Determine if the given string is empty. + * + * @return bool + */ + public function isEmpty() + { + return $this->value === ''; + } + + /** + * Determine if the given string is not empty. + * + * @return bool + */ + public function isNotEmpty() + { + return ! $this->isEmpty(); + } + + /** + * Convert a string to kebab case. + * + * @return static + */ + public function kebab() + { + return new static(Str::kebab($this->value)); + } + + /** + * Return the length of the given string. + * + * @param string $encoding + * @return int + */ + public function length($encoding = null) + { + return Str::length($this->value, $encoding); + } + + /** + * Limit the number of characters in a string. + * + * @param int $limit + * @param string $end + * @return static + */ + public function limit($limit = 100, $end = '...') + { + return new static(Str::limit($this->value, $limit, $end)); + } + + /** + * Convert the given string to lower-case. + * + * @return static + */ + public function lower() + { + return new static(Str::lower($this->value)); + } + + /** + * Get the string matching the given pattern. + * + * @param string $pattern + * @return static|null + */ + public function match($pattern) + { + preg_match($pattern, $this->value, $matches); + + if (! $matches) { + return new static; + } + + return new static($matches[1] ?? $matches[0]); + } + + /** + * Get the string matching the given pattern. + * + * @param string $pattern + * @return \Illuminate\Support\Collection + */ + public function matchAll($pattern) + { + preg_match_all($pattern, $this->value, $matches); + + if (empty($matches[0])) { + return collect(); + } + + return collect($matches[1] ?? $matches[0]); + } + + /** + * Pad both sides of the string with another. + * + * @param int $length + * @param string $pad + * @return static + */ + public function padBoth($length, $pad = ' ') + { + return new static(Str::padBoth($this->value, $length, $pad)); + } + + /** + * Pad the left side of the string with another. + * + * @param int $length + * @param string $pad + * @return static + */ + public function padLeft($length, $pad = ' ') + { + return new static(Str::padLeft($this->value, $length, $pad)); + } + + /** + * Pad the right side of the string with another. + * + * @param int $length + * @param string $pad + * @return static + */ + public function padRight($length, $pad = ' ') + { + return new static(Str::padRight($this->value, $length, $pad)); + } + + /** + * Parse a Class@method style callback into class and method. + * + * @param string|null $default + * @return array + */ + public function parseCallback($default = null) + { + return Str::parseCallback($this->value, $default); + } + + /** + * Get the plural form of an English word. + * + * @param int $count + * @return static + */ + public function plural($count = 2) + { + return new static(Str::plural($this->value, $count)); + } + + /** + * Pluralize the last word of an English, studly caps case string. + * + * @param int $count + * @return static + */ + public function pluralStudly($count = 2) + { + return new static(Str::pluralStudly($this->value, $count)); + } + + /** + * Prepend the given values to the string. + * + * @param array $values + * @return static + */ + public function prepend(...$values) + { + return new static(implode('', $values).$this->value); + } + + /** + * Replace the given value in the given string. + * + * @param string|string[] $search + * @param string|string[] $replace + * @return static + */ + public function replace($search, $replace) + { + return new static(str_replace($search, $replace, $this->value)); + } + + /** + * Replace a given value in the string sequentially with an array. + * + * @param string $search + * @param array $replace + * @return static + */ + public function replaceArray($search, array $replace) + { + return new static(Str::replaceArray($search, $replace, $this->value)); + } + + /** + * Replace the first occurrence of a given value in the string. + * + * @param string $search + * @param string $replace + * @return static + */ + public function replaceFirst($search, $replace) + { + return new static(Str::replaceFirst($search, $replace, $this->value)); + } + + /** + * Replace the last occurrence of a given value in the string. + * + * @param string $search + * @param string $replace + * @return static + */ + public function replaceLast($search, $replace) + { + return new static(Str::replaceLast($search, $replace, $this->value)); + } + + /** + * Replace the patterns matching the given regular expression. + * + * @param string $pattern + * @param \Closure|string $replace + * @param int $limit + * @return static + */ + public function replaceMatches($pattern, $replace, $limit = -1) + { + if ($replace instanceof Closure) { + return new static(preg_replace_callback($pattern, $replace, $this->value, $limit)); + } + + return new static(preg_replace($pattern, $replace, $this->value, $limit)); + } + + /** + * Begin a string with a single instance of a given value. + * + * @param string $prefix + * @return static + */ + public function start($prefix) + { + return new static(Str::start($this->value, $prefix)); + } + + /** + * Convert the given string to upper-case. + * + * @return static + */ + public function upper() + { + return new static(Str::upper($this->value)); + } + + /** + * Convert the given string to title case. + * + * @return static + */ + public function title() + { + return new static(Str::title($this->value)); + } + + /** + * Get the singular form of an English word. + * + * @return static + */ + public function singular() + { + return new static(Str::singular($this->value)); + } + + /** + * Generate a URL friendly "slug" from a given string. + * + * @param string $separator + * @param string|null $language + * @return static + */ + public function slug($separator = '-', $language = 'en') + { + return new static(Str::slug($this->value, $separator, $language)); + } + + /** + * Convert a string to snake case. + * + * @param string $delimiter + * @return static + */ + public function snake($delimiter = '_') + { + return new static(Str::snake($this->value, $delimiter)); + } + + /** + * Determine if a given string starts with a given substring. + * + * @param string|array $needles + * @return bool + */ + public function startsWith($needles) + { + return Str::startsWith($this->value, $needles); + } + + /** + * Convert a value to studly caps case. + * + * @return static + */ + public function studly() + { + return new static(Str::studly($this->value)); + } + + /** + * Returns the portion of string specified by the start and length parameters. + * + * @param int $start + * @param int|null $length + * @return static + */ + public function substr($start, $length = null) + { + return new static(Str::substr($this->value, $start, $length)); + } + + /** + * Returns the number of substring occurrences. + * + * @param string $needle + * @param int|null $offset + * @param int|null $length + * @return int + */ + public function substrCount($needle, $offset = null, $length = null) + { + return Str::substrCount($this->value, $needle, $offset, $length); + } + + /** + * Trim the string of the given characters. + * + * @param string $characters + * @return static + */ + public function trim($characters = null) + { + return new static(trim(...array_merge([$this->value], func_get_args()))); + } + + /** + * Left trim the string of the given characters. + * + * @param string $characters + * @return static + */ + public function ltrim($characters = null) + { + return new static(ltrim(...array_merge([$this->value], func_get_args()))); + } + + /** + * Right trim the string of the given characters. + * + * @param string $characters + * @return static + */ + public function rtrim($characters = null) + { + return new static(rtrim(...array_merge([$this->value], func_get_args()))); + } + + /** + * Make a string's first character uppercase. + * + * @return static + */ + public function ucfirst() + { + return new static(Str::ucfirst($this->value)); + } + + /** + * Apply the callback's string changes if the given "value" is true. + * + * @param mixed $value + * @param callable $callback + * @param callable|null $default + * @return mixed|$this + */ + public function when($value, $callback, $default = null) + { + if ($value) { + return $callback($this, $value) ?: $this; + } elseif ($default) { + return $default($this, $value) ?: $this; + } + + return $this; + } + + /** + * Execute the given callback if the string is empty. + * + * @param callable $callback + * @return static + */ + public function whenEmpty($callback) + { + if ($this->isEmpty()) { + $result = $callback($this); + + return is_null($result) ? $this : $result; + } + + return $this; + } + + /** + * Limit the number of words in a string. + * + * @param int $words + * @param string $end + * @return static + */ + public function words($words = 100, $end = '...') + { + return new static(Str::words($this->value, $words, $end)); + } + + /** + * Dump the string. + * + * @return $this + */ + public function dump() + { + VarDumper::dump($this->value); + + return $this; + } + + /** + * Dump the string and end the script. + * + * @return void + */ + public function dd() + { + $this->dump(); + + exit(1); + } + + /** + * Proxy dynamic properties onto methods. + * + * @param string $key + * @return mixed + */ + public function __get($key) + { + return $this->{$key}(); + } + + /** + * Get the raw string value. + * + * @return string + */ + public function __toString() + { + return (string) $this->value; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php index b42491e4..f186b910 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php @@ -2,11 +2,30 @@ namespace Illuminate\Support\Testing\Fakes; -use Illuminate\Contracts\Bus\Dispatcher; +use Closure; +use Illuminate\Contracts\Bus\QueueingDispatcher; +use Illuminate\Support\Arr; +use Illuminate\Support\Traits\ReflectsClosures; use PHPUnit\Framework\Assert as PHPUnit; -class BusFake implements Dispatcher +class BusFake implements QueueingDispatcher { + use ReflectsClosures; + + /** + * The original Bus dispatcher implementation. + * + * @var \Illuminate\Contracts\Bus\QueueingDispatcher + */ + protected $dispatcher; + + /** + * The job types that should be intercepted instead of dispatched. + * + * @var array + */ + protected $jobsToFake; + /** * The commands that have been dispatched. * @@ -14,21 +33,47 @@ class BusFake implements Dispatcher */ protected $commands = []; + /** + * The commands that have been dispatched after the response has been sent. + * + * @var array + */ + protected $commandsAfterResponse = []; + + /** + * Create a new bus fake instance. + * + * @param \Illuminate\Contracts\Bus\QueueingDispatcher $dispatcher + * @param array|string $jobsToFake + * @return void + */ + public function __construct(QueueingDispatcher $dispatcher, $jobsToFake = []) + { + $this->dispatcher = $dispatcher; + + $this->jobsToFake = Arr::wrap($jobsToFake); + } + /** * Assert if a job was dispatched based on a truth-test callback. * - * @param string $command + * @param string|\Closure $command * @param callable|int|null $callback * @return void */ public function assertDispatched($command, $callback = null) { + if ($command instanceof Closure) { + [$command, $callback] = [$this->firstClosureParameterType($command), $command]; + } + if (is_numeric($callback)) { return $this->assertDispatchedTimes($command, $callback); } PHPUnit::assertTrue( - $this->dispatched($command, $callback)->count() > 0, + $this->dispatched($command, $callback)->count() > 0 || + $this->dispatchedAfterResponse($command, $callback)->count() > 0, "The expected [{$command}] job was not dispatched." ); } @@ -40,10 +85,13 @@ class BusFake implements Dispatcher * @param int $times * @return void */ - protected function assertDispatchedTimes($command, $times = 1) + public function assertDispatchedTimes($command, $times = 1) { - PHPUnit::assertTrue( - ($count = $this->dispatched($command)->count()) === $times, + $count = $this->dispatched($command)->count() + + $this->dispatchedAfterResponse($command)->count(); + + PHPUnit::assertSame( + $times, $count, "The expected [{$command}] job was pushed {$count} times instead of {$times} times." ); } @@ -51,18 +99,82 @@ class BusFake implements Dispatcher /** * Determine if a job was dispatched based on a truth-test callback. * - * @param string $command + * @param string|\Closure $command * @param callable|null $callback * @return void */ public function assertNotDispatched($command, $callback = null) { + if ($command instanceof Closure) { + [$command, $callback] = [$this->firstClosureParameterType($command), $command]; + } + PHPUnit::assertTrue( - $this->dispatched($command, $callback)->count() === 0, + $this->dispatched($command, $callback)->count() === 0 && + $this->dispatchedAfterResponse($command, $callback)->count() === 0, "The unexpected [{$command}] job was dispatched." ); } + /** + * Assert if a job was dispatched after the response was sent based on a truth-test callback. + * + * @param string|\Closure $command + * @param callable|int|null $callback + * @return void + */ + public function assertDispatchedAfterResponse($command, $callback = null) + { + if ($command instanceof Closure) { + [$command, $callback] = [$this->firstClosureParameterType($command), $command]; + } + + if (is_numeric($callback)) { + return $this->assertDispatchedAfterResponseTimes($command, $callback); + } + + PHPUnit::assertTrue( + $this->dispatchedAfterResponse($command, $callback)->count() > 0, + "The expected [{$command}] job was not dispatched for after sending the response." + ); + } + + /** + * Assert if a job was pushed after the response was sent a number of times. + * + * @param string $command + * @param int $times + * @return void + */ + public function assertDispatchedAfterResponseTimes($command, $times = 1) + { + $count = $this->dispatchedAfterResponse($command)->count(); + + PHPUnit::assertSame( + $times, $count, + "The expected [{$command}] job was pushed {$count} times instead of {$times} times." + ); + } + + /** + * Determine if a job was dispatched based on a truth-test callback. + * + * @param string|\Closure $command + * @param callable|null $callback + * @return void + */ + public function assertNotDispatchedAfterResponse($command, $callback = null) + { + if ($command instanceof Closure) { + [$command, $callback] = [$this->firstClosureParameterType($command), $command]; + } + + PHPUnit::assertCount( + 0, $this->dispatchedAfterResponse($command, $callback), + "The unexpected [{$command}] job was dispatched for after sending the response." + ); + } + /** * Get all of the jobs matching a truth-test callback. * @@ -85,6 +197,28 @@ class BusFake implements Dispatcher }); } + /** + * Get all of the jobs dispatched after the response was sent matching a truth-test callback. + * + * @param string $command + * @param callable|null $callback + * @return \Illuminate\Support\Collection + */ + public function dispatchedAfterResponse(string $command, $callback = null) + { + if (! $this->hasDispatchedAfterResponse($command)) { + return collect(); + } + + $callback = $callback ?: function () { + return true; + }; + + return collect($this->commandsAfterResponse[$command])->filter(function ($command) use ($callback) { + return $callback($command); + }); + } + /** * Determine if there are any stored commands for a given class. * @@ -96,6 +230,17 @@ class BusFake implements Dispatcher return isset($this->commands[$command]) && ! empty($this->commands[$command]); } + /** + * Determine if there are any stored commands for a given class. + * + * @param string $command + * @return bool + */ + public function hasDispatchedAfterResponse($command) + { + return isset($this->commandsAfterResponse[$command]) && ! empty($this->commandsAfterResponse[$command]); + } + /** * Dispatch a command to its appropriate handler. * @@ -104,7 +249,11 @@ class BusFake implements Dispatcher */ public function dispatch($command) { - return $this->dispatchNow($command); + if ($this->shouldFakeJob($command)) { + $this->commands[get_class($command)][] = $command; + } else { + return $this->dispatcher->dispatch($command); + } } /** @@ -116,7 +265,61 @@ class BusFake implements Dispatcher */ public function dispatchNow($command, $handler = null) { - $this->commands[get_class($command)][] = $command; + if ($this->shouldFakeJob($command)) { + $this->commands[get_class($command)][] = $command; + } else { + return $this->dispatcher->dispatchNow($command, $handler); + } + } + + /** + * Dispatch a command to its appropriate handler behind a queue. + * + * @param mixed $command + * @return mixed + */ + public function dispatchToQueue($command) + { + if ($this->shouldFakeJob($command)) { + $this->commands[get_class($command)][] = $command; + } else { + return $this->dispatcher->dispatchToQueue($command); + } + } + + /** + * Dispatch a command to its appropriate handler. + * + * @param mixed $command + * @return mixed + */ + public function dispatchAfterResponse($command) + { + if ($this->shouldFakeJob($command)) { + $this->commandsAfterResponse[get_class($command)][] = $command; + } else { + return $this->dispatcher->dispatch($command); + } + } + + /** + * Determine if an command should be faked or actually dispatched. + * + * @param mixed $command + * @return bool + */ + protected function shouldFakeJob($command) + { + if (empty($this->jobsToFake)) { + return true; + } + + return collect($this->jobsToFake) + ->filter(function ($job) use ($command) { + return $job instanceof Closure + ? $job($command) + : $job === get_class($command); + })->isNotEmpty(); } /** @@ -127,7 +330,9 @@ class BusFake implements Dispatcher */ public function pipeThrough(array $pipes) { - // + $this->dispatcher->pipeThrough($pipes); + + return $this; } /** @@ -138,7 +343,7 @@ class BusFake implements Dispatcher */ public function hasCommandHandler($command) { - return false; + return $this->dispatcher->hasCommandHandler($command); } /** @@ -149,7 +354,7 @@ class BusFake implements Dispatcher */ public function getCommandHandler($command) { - return false; + return $this->dispatcher->getCommandHandler($command); } /** @@ -160,6 +365,8 @@ class BusFake implements Dispatcher */ public function map(array $map) { + $this->dispatcher->map($map); + return $this; } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php index 1fc09db0..ba151086 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php @@ -3,12 +3,15 @@ namespace Illuminate\Support\Testing\Fakes; use Closure; -use Illuminate\Support\Arr; -use PHPUnit\Framework\Assert as PHPUnit; use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Support\Arr; +use Illuminate\Support\Traits\ReflectsClosures; +use PHPUnit\Framework\Assert as PHPUnit; class EventFake implements Dispatcher { + use ReflectsClosures; + /** * The original event dispatcher. * @@ -47,12 +50,16 @@ class EventFake implements Dispatcher /** * Assert if an event was dispatched based on a truth-test callback. * - * @param string $event + * @param string|\Closure $event * @param callable|int|null $callback * @return void */ public function assertDispatched($event, $callback = null) { + if ($event instanceof Closure) { + [$event, $callback] = [$this->firstClosureParameterType($event), $event]; + } + if (is_int($callback)) { return $this->assertDispatchedTimes($event, $callback); } @@ -64,7 +71,7 @@ class EventFake implements Dispatcher } /** - * Assert if a event was dispatched a number of times. + * Assert if an event was dispatched a number of times. * * @param string $event * @param int $times @@ -72,8 +79,10 @@ class EventFake implements Dispatcher */ public function assertDispatchedTimes($event, $times = 1) { - PHPUnit::assertTrue( - ($count = $this->dispatched($event)->count()) === $times, + $count = $this->dispatched($event)->count(); + + PHPUnit::assertSame( + $times, $count, "The expected [{$event}] event was dispatched {$count} times instead of {$times} times." ); } @@ -81,14 +90,18 @@ class EventFake implements Dispatcher /** * Determine if an event was dispatched based on a truth-test callback. * - * @param string $event + * @param string|\Closure $event * @param callable|null $callback * @return void */ public function assertNotDispatched($event, $callback = null) { - PHPUnit::assertTrue( - $this->dispatched($event, $callback)->count() === 0, + if ($event instanceof Closure) { + [$event, $callback] = [$this->firstClosureParameterType($event), $event]; + } + + PHPUnit::assertCount( + 0, $this->dispatched($event, $callback), "The unexpected [{$event}] event was dispatched." ); } @@ -183,19 +196,6 @@ class EventFake implements Dispatcher // } - /** - * Fire an event and call the listeners. - * - * @param string|object $event - * @param mixed $payload - * @param bool $halt - * @return array|null - */ - public function fire($event, $payload = [], $halt = false) - { - return $this->dispatch($event, $payload, $halt); - } - /** * Fire an event and call the listeners. * @@ -261,8 +261,8 @@ class EventFake implements Dispatcher /** * Dispatch an event and call the listeners. * - * @param string|object $event - * @param mixed $payload + * @param string|object $event + * @param mixed $payload * @return void */ public function until($event, $payload = []) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php index e0a886f0..d299bb1c 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php @@ -2,14 +2,26 @@ namespace Illuminate\Support\Testing\Fakes; -use Illuminate\Contracts\Mail\Mailer; +use Closure; +use Illuminate\Contracts\Mail\Factory; use Illuminate\Contracts\Mail\Mailable; +use Illuminate\Contracts\Mail\Mailer; use Illuminate\Contracts\Mail\MailQueue; -use PHPUnit\Framework\Assert as PHPUnit; use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Support\Traits\ReflectsClosures; +use PHPUnit\Framework\Assert as PHPUnit; -class MailFake implements Mailer, MailQueue +class MailFake implements Factory, Mailer, MailQueue { + use ReflectsClosures; + + /** + * The mailer currently being used to send a message. + * + * @var string + */ + protected $currentMailer; + /** * All of the mailables that have been sent. * @@ -27,12 +39,16 @@ class MailFake implements Mailer, MailQueue /** * Assert if a mailable was sent based on a truth-test callback. * - * @param string $mailable + * @param string|\Closure $mailable * @param callable|int|null $callback * @return void */ public function assertSent($mailable, $callback = null) { + if ($mailable instanceof Closure) { + [$mailable, $callback] = [$this->firstClosureParameterType($mailable), $mailable]; + } + if (is_numeric($callback)) { return $this->assertSentTimes($mailable, $callback); } @@ -58,8 +74,10 @@ class MailFake implements Mailer, MailQueue */ protected function assertSentTimes($mailable, $times = 1) { - PHPUnit::assertTrue( - ($count = $this->sent($mailable)->count()) === $times, + $count = $this->sent($mailable)->count(); + + PHPUnit::assertSame( + $times, $count, "The expected [{$mailable}] mailable was sent {$count} times instead of {$times} times." ); } @@ -73,8 +91,8 @@ class MailFake implements Mailer, MailQueue */ public function assertNotSent($mailable, $callback = null) { - PHPUnit::assertTrue( - $this->sent($mailable, $callback)->count() === 0, + PHPUnit::assertCount( + 0, $this->sent($mailable, $callback), "The unexpected [{$mailable}] mailable was sent." ); } @@ -86,18 +104,26 @@ class MailFake implements Mailer, MailQueue */ public function assertNothingSent() { - PHPUnit::assertEmpty($this->mailables, 'Mailables were sent unexpectedly.'); + $mailableNames = collect($this->mailables)->map(function ($mailable) { + return get_class($mailable); + })->join(', '); + + PHPUnit::assertEmpty($this->mailables, 'The following mailables were sent unexpectedly: '.$mailableNames); } /** * Assert if a mailable was queued based on a truth-test callback. * - * @param string $mailable + * @param string|\Closure $mailable * @param callable|int|null $callback * @return void */ public function assertQueued($mailable, $callback = null) { + if ($mailable instanceof Closure) { + [$mailable, $callback] = [$this->firstClosureParameterType($mailable), $mailable]; + } + if (is_numeric($callback)) { return $this->assertQueuedTimes($mailable, $callback); } @@ -117,8 +143,10 @@ class MailFake implements Mailer, MailQueue */ protected function assertQueuedTimes($mailable, $times = 1) { - PHPUnit::assertTrue( - ($count = $this->queued($mailable)->count()) === $times, + $count = $this->queued($mailable)->count(); + + PHPUnit::assertSame( + $times, $count, "The expected [{$mailable}] mailable was queued {$count} times instead of {$times} times." ); } @@ -132,8 +160,8 @@ class MailFake implements Mailer, MailQueue */ public function assertNotQueued($mailable, $callback = null) { - PHPUnit::assertTrue( - $this->queued($mailable, $callback)->count() === 0, + PHPUnit::assertCount( + 0, $this->queued($mailable, $callback), "The unexpected [{$mailable}] mailable was queued." ); } @@ -145,7 +173,11 @@ class MailFake implements Mailer, MailQueue */ public function assertNothingQueued() { - PHPUnit::assertEmpty($this->queuedMailables, 'Mailables were queued unexpectedly.'); + $mailableNames = collect($this->queuedMailables)->map(function ($mailable) { + return get_class($mailable); + })->join(', '); + + PHPUnit::assertEmpty($this->queuedMailables, 'The following mailables were queued unexpectedly: '.$mailableNames); } /** @@ -240,6 +272,19 @@ class MailFake implements Mailer, MailQueue }); } + /** + * Get a mailer instance by name. + * + * @param string|null $name + * @return \Illuminate\Mail\Mailer + */ + public function mailer($name = null) + { + $this->currentMailer = $name; + + return $this; + } + /** * Begin the process of mailing a mailable class instance. * @@ -267,7 +312,7 @@ class MailFake implements Mailer, MailQueue * * @param string $text * @param \Closure|string $callback - * @return int + * @return void */ public function raw($text, $callback) { @@ -279,7 +324,7 @@ class MailFake implements Mailer, MailQueue * * @param string|array $view * @param array $data - * @param \Closure|string $callback + * @param \Closure|string|null $callback * @return void */ public function send($view, array $data = [], $callback = null) @@ -288,6 +333,10 @@ class MailFake implements Mailer, MailQueue return; } + $view->mailer($this->currentMailer); + + $this->currentMailer = null; + if ($view instanceof ShouldQueue) { return $this->queue($view, $data); } @@ -298,7 +347,7 @@ class MailFake implements Mailer, MailQueue /** * Queue a new e-mail message for sending. * - * @param string|array $view + * @param \Illuminate\Contracts\Mail\Mailable|string|array $view * @param string|null $queue * @return mixed */ @@ -308,6 +357,10 @@ class MailFake implements Mailer, MailQueue return; } + $view->mailer($this->currentMailer); + + $this->currentMailer = null; + $this->queuedMailables[] = $view; } @@ -315,8 +368,8 @@ class MailFake implements Mailer, MailQueue * Queue a new e-mail message for sending after (n) seconds. * * @param \DateTimeInterface|\DateInterval|int $delay - * @param string|array|\Illuminate\Contracts\Mail\Mailable $view - * @param string $queue + * @param \Illuminate\Contracts\Mail\Mailable|string|array $view + * @param string|null $queue * @return mixed */ public function later($delay, $view, $queue = null) @@ -331,6 +384,6 @@ class MailFake implements Mailer, MailQueue */ public function failures() { - // + return []; } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/NotificationFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/NotificationFake.php index b2fab7a3..cf3a25af 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/NotificationFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/NotificationFake.php @@ -2,15 +2,21 @@ namespace Illuminate\Support\Testing\Fakes; -use Illuminate\Support\Str; -use Illuminate\Support\Collection; -use PHPUnit\Framework\Assert as PHPUnit; -use Illuminate\Contracts\Translation\HasLocalePreference; -use Illuminate\Contracts\Notifications\Factory as NotificationFactory; +use Closure; +use Exception; use Illuminate\Contracts\Notifications\Dispatcher as NotificationDispatcher; +use Illuminate\Contracts\Notifications\Factory as NotificationFactory; +use Illuminate\Contracts\Translation\HasLocalePreference; +use Illuminate\Support\Collection; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use Illuminate\Support\Traits\ReflectsClosures; +use PHPUnit\Framework\Assert as PHPUnit; -class NotificationFake implements NotificationFactory, NotificationDispatcher +class NotificationFake implements NotificationDispatcher, NotificationFactory { + use Macroable, ReflectsClosures; + /** * All of the notifications that have been sent. * @@ -29,13 +35,19 @@ class NotificationFake implements NotificationFactory, NotificationDispatcher * Assert if a notification was sent based on a truth-test callback. * * @param mixed $notifiable - * @param string $notification + * @param string|\Closure $notification * @param callable|null $callback * @return void + * + * @throws \Exception */ public function assertSentTo($notifiable, $notification, $callback = null) { if (is_array($notifiable) || $notifiable instanceof Collection) { + if (count($notifiable) === 0) { + throw new Exception('No notifiable given.'); + } + foreach ($notifiable as $singleNotifiable) { $this->assertSentTo($singleNotifiable, $notification, $callback); } @@ -43,6 +55,10 @@ class NotificationFake implements NotificationFactory, NotificationDispatcher return; } + if ($notification instanceof Closure) { + [$notification, $callback] = [$this->firstClosureParameterType($notification), $notification]; + } + if (is_numeric($callback)) { return $this->assertSentToTimes($notifiable, $notification, $callback); } @@ -63,8 +79,10 @@ class NotificationFake implements NotificationFactory, NotificationDispatcher */ public function assertSentToTimes($notifiable, $notification, $times = 1) { - PHPUnit::assertTrue( - ($count = $this->sent($notifiable, $notification)->count()) === $times, + $count = $this->sent($notifiable, $notification)->count(); + + PHPUnit::assertSame( + $times, $count, "Expected [{$notification}] to be sent {$times} times, but was sent {$count} times." ); } @@ -73,13 +91,19 @@ class NotificationFake implements NotificationFactory, NotificationDispatcher * Determine if a notification was sent based on a truth-test callback. * * @param mixed $notifiable - * @param string $notification + * @param string|\Closure $notification * @param callable|null $callback * @return void + * + * @throws \Exception */ public function assertNotSentTo($notifiable, $notification, $callback = null) { if (is_array($notifiable) || $notifiable instanceof Collection) { + if (count($notifiable) === 0) { + throw new Exception('No notifiable given.'); + } + foreach ($notifiable as $singleNotifiable) { $this->assertNotSentTo($singleNotifiable, $notification, $callback); } @@ -87,8 +111,12 @@ class NotificationFake implements NotificationFactory, NotificationDispatcher return; } - PHPUnit::assertTrue( - $this->sent($notifiable, $notification, $callback)->count() === 0, + if ($notification instanceof Closure) { + [$notification, $callback] = [$this->firstClosureParameterType($notification), $notification]; + } + + PHPUnit::assertCount( + 0, $this->sent($notifiable, $notification, $callback), "The unexpected [{$notification}] notification was sent." ); } @@ -170,11 +198,7 @@ class NotificationFake implements NotificationFactory, NotificationDispatcher */ protected function notificationsFor($notifiable, $notification) { - if (isset($this->notifications[get_class($notifiable)][$notifiable->getKey()][$notification])) { - return $this->notifications[get_class($notifiable)][$notifiable->getKey()][$notification]; - } - - return []; + return $this->notifications[get_class($notifiable)][$notifiable->getKey()][$notification] ?? []; } /** @@ -194,9 +218,10 @@ class NotificationFake implements NotificationFactory, NotificationDispatcher * * @param \Illuminate\Support\Collection|array|mixed $notifiables * @param mixed $notification + * @param array|null $channels * @return void */ - public function sendNow($notifiables, $notification) + public function sendNow($notifiables, $notification, array $channels = null) { if (! $notifiables instanceof Collection && ! is_array($notifiables)) { $notifiables = [$notifiables]; @@ -209,7 +234,7 @@ class NotificationFake implements NotificationFactory, NotificationDispatcher $this->notifications[get_class($notifiable)][$notifiable->getKey()][get_class($notification)][] = [ 'notification' => $notification, - 'channels' => $notification->via($notifiable), + 'channels' => $channels ?: $notification->via($notifiable), 'notifiable' => $notifiable, 'locale' => $notification->locale ?? $this->locale ?? value(function () use ($notifiable) { if ($notifiable instanceof HasLocalePreference) { diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/PendingMailFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/PendingMailFake.php index e344fcfb..13a13012 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/PendingMailFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/PendingMailFake.php @@ -2,7 +2,7 @@ namespace Illuminate\Support\Testing\Fakes; -use Illuminate\Mail\Mailable; +use Illuminate\Contracts\Mail\Mailable; use Illuminate\Mail\PendingMail; class PendingMailFake extends PendingMail @@ -21,29 +21,31 @@ class PendingMailFake extends PendingMail /** * Send a new mailable message instance. * - * @param \Illuminate\Mail\Mailable $mailable + * @param \Illuminate\Contracts\Mail\Mailable $mailable * @return mixed */ public function send(Mailable $mailable) { - return $this->sendNow($mailable); + return $this->mailer->send($this->fill($mailable)); } /** * Send a mailable message immediately. * - * @param \Illuminate\Mail\Mailable $mailable + * @param \Illuminate\Contracts\Mail\Mailable $mailable * @return mixed + * + * @deprecated Use send() instead. */ public function sendNow(Mailable $mailable) { - $this->mailer->send($this->fill($mailable)); + return $this->send($mailable); } /** * Push the given mailable onto the queue. * - * @param \Illuminate\Mail\Mailable $mailable + * @param \Illuminate\Contracts\Mail\Mailable $mailable * @return mixed */ public function queue(Mailable $mailable) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/QueueFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/QueueFake.php index 14144c0d..e83408fc 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/QueueFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/QueueFake.php @@ -2,12 +2,17 @@ namespace Illuminate\Support\Testing\Fakes; -use Illuminate\Queue\QueueManager; +use BadMethodCallException; +use Closure; use Illuminate\Contracts\Queue\Queue; +use Illuminate\Queue\QueueManager; +use Illuminate\Support\Traits\ReflectsClosures; use PHPUnit\Framework\Assert as PHPUnit; class QueueFake extends QueueManager implements Queue { + use ReflectsClosures; + /** * All of the jobs that have been pushed. * @@ -18,12 +23,16 @@ class QueueFake extends QueueManager implements Queue /** * Assert if a job was pushed based on a truth-test callback. * - * @param string $job + * @param string|\Closure $job * @param callable|int|null $callback * @return void */ public function assertPushed($job, $callback = null) { + if ($job instanceof Closure) { + [$job, $callback] = [$this->firstClosureParameterType($job), $job]; + } + if (is_numeric($callback)) { return $this->assertPushedTimes($job, $callback); } @@ -43,8 +52,10 @@ class QueueFake extends QueueManager implements Queue */ protected function assertPushedTimes($job, $times = 1) { - PHPUnit::assertTrue( - ($count = $this->pushed($job)->count()) === $times, + $count = $this->pushed($job)->count(); + + PHPUnit::assertSame( + $times, $count, "The expected [{$job}] job was pushed {$count} times instead of {$times} times." ); } @@ -53,12 +64,16 @@ class QueueFake extends QueueManager implements Queue * Assert if a job was pushed based on a truth-test callback. * * @param string $queue - * @param string $job + * @param string|\Closure $job * @param callable|null $callback * @return void */ public function assertPushedOn($queue, $job, $callback = null) { + if ($job instanceof Closure) { + [$job, $callback] = [$this->firstClosureParameterType($job), $job]; + } + return $this->assertPushed($job, function ($job, $pushedQueue) use ($callback, $queue) { if ($pushedQueue !== $queue) { return false; @@ -71,9 +86,9 @@ class QueueFake extends QueueManager implements Queue /** * Assert if a job was pushed with chained jobs based on a truth-test callback. * - * @param string $job - * @param array $expectedChain - * @param callable|null $callback + * @param string $job + * @param array $expectedChain + * @param callable|null $callback * @return void */ public function assertPushedWithChain($job, $expectedChain = [], $callback = null) @@ -93,12 +108,29 @@ class QueueFake extends QueueManager implements Queue : $this->assertPushedWithChainOfClasses($job, $expectedChain, $callback); } + /** + * Assert if a job was pushed with an empty chain based on a truth-test callback. + * + * @param string $job + * @param callable|null $callback + * @return void + */ + public function assertPushedWithoutChain($job, $callback = null) + { + PHPUnit::assertTrue( + $this->pushed($job, $callback)->isNotEmpty(), + "The expected [{$job}] job was not pushed." + ); + + $this->assertPushedWithChainOfClasses($job, [], $callback); + } + /** * Assert if a job was pushed with chained jobs based on a truth-test callback. * - * @param string $job - * @param array $expectedChain - * @param callable|null $callback + * @param string $job + * @param array $expectedChain + * @param callable|null $callback * @return void */ protected function assertPushedWithChainOfObjects($job, $expectedChain, $callback) @@ -118,9 +150,9 @@ class QueueFake extends QueueManager implements Queue /** * Assert if a job was pushed with chained jobs based on a truth-test callback. * - * @param string $job - * @param array $expectedChain - * @param callable|null $callback + * @param string $job + * @param array $expectedChain + * @param callable|null $callback * @return void */ protected function assertPushedWithChainOfClasses($job, $expectedChain, $callback) @@ -154,14 +186,18 @@ class QueueFake extends QueueManager implements Queue /** * Determine if a job was pushed based on a truth-test callback. * - * @param string $job + * @param string|\Closure $job * @param callable|null $callback * @return void */ public function assertNotPushed($job, $callback = null) { - PHPUnit::assertTrue( - $this->pushed($job, $callback)->count() === 0, + if ($job instanceof Closure) { + [$job, $callback] = [$this->firstClosureParameterType($job), $job]; + } + + PHPUnit::assertCount( + 0, $this->pushed($job, $callback), "The unexpected [{$job}] job was pushed." ); } @@ -223,20 +259,22 @@ class QueueFake extends QueueManager implements Queue /** * Get the size of the queue. * - * @param string $queue + * @param string|null $queue * @return int */ public function size($queue = null) { - return count($this->jobs); + return collect($this->jobs)->flatten(1)->filter(function ($job) use ($queue) { + return $job['queue'] === $queue; + })->count(); } /** * Push a new job onto the queue. * * @param string $job - * @param mixed $data - * @param string $queue + * @param mixed $data + * @param string|null $queue * @return mixed */ public function push($job, $data = '', $queue = null) @@ -251,8 +289,8 @@ class QueueFake extends QueueManager implements Queue * Push a raw payload onto the queue. * * @param string $payload - * @param string $queue - * @param array $options + * @param string|null $queue + * @param array $options * @return mixed */ public function pushRaw($payload, $queue = null, array $options = []) @@ -263,10 +301,10 @@ class QueueFake extends QueueManager implements Queue /** * Push a new job onto the queue after a delay. * - * @param \DateTime|int $delay + * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data - * @param string $queue + * @param mixed $data + * @param string|null $queue * @return mixed */ public function later($delay, $job, $data = '', $queue = null) @@ -279,7 +317,7 @@ class QueueFake extends QueueManager implements Queue * * @param string $queue * @param string $job - * @param mixed $data + * @param mixed $data * @return mixed */ public function pushOn($queue, $job, $data = '') @@ -291,9 +329,9 @@ class QueueFake extends QueueManager implements Queue * Push a new job onto the queue after a delay. * * @param string $queue - * @param \DateTime|int $delay + * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data + * @param mixed $data * @return mixed */ public function laterOn($queue, $delay, $job, $data = '') @@ -304,7 +342,7 @@ class QueueFake extends QueueManager implements Queue /** * Pop the next job off of the queue. * - * @param string $queue + * @param string|null $queue * @return \Illuminate\Contracts\Queue\Job|null */ public function pop($queue = null) @@ -315,9 +353,9 @@ class QueueFake extends QueueManager implements Queue /** * Push an array of jobs onto the queue. * - * @param array $jobs - * @param mixed $data - * @param string $queue + * @param array $jobs + * @param mixed $data + * @param string|null $queue * @return mixed */ public function bulk($jobs, $data = '', $queue = null) @@ -350,11 +388,27 @@ class QueueFake extends QueueManager implements Queue /** * Set the connection name for the queue. * - * @param string $name + * @param string $name * @return $this */ public function setConnectionName($name) { return $this; } + + /** + * Override the QueueManager to prevent circular dependency. + * + * @param string $method + * @param array $parameters + * @return mixed + * + * @throws \BadMethodCallException + */ + public function __call($method, $parameters) + { + throw new BadMethodCallException(sprintf( + 'Call to undefined method %s::%s()', static::class, $method + )); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php index 08089ef6..05327552 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php @@ -2,8 +2,8 @@ namespace Illuminate\Support\Traits; -use Illuminate\Support\Fluent; use Illuminate\Contracts\Container\Container; +use Illuminate\Support\Fluent; trait CapsuleManagerTrait { diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php new file mode 100644 index 00000000..b8210bc1 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php @@ -0,0 +1,982 @@ +all() : $value; + } + + /** + * Alias for the "avg" method. + * + * @param callable|string|null $callback + * @return mixed + */ + public function average($callback = null) + { + return $this->avg($callback); + } + + /** + * Alias for the "contains" method. + * + * @param mixed $key + * @param mixed $operator + * @param mixed $value + * @return bool + */ + public function some($key, $operator = null, $value = null) + { + return $this->contains(...func_get_args()); + } + + /** + * Determine if an item exists, using strict comparison. + * + * @param mixed $key + * @param mixed $value + * @return bool + */ + public function containsStrict($key, $value = null) + { + if (func_num_args() === 2) { + return $this->contains(function ($item) use ($key, $value) { + return data_get($item, $key) === $value; + }); + } + + if ($this->useAsCallable($key)) { + return ! is_null($this->first($key)); + } + + foreach ($this as $item) { + if ($item === $key) { + return true; + } + } + + return false; + } + + /** + * Dump the items and end the script. + * + * @param mixed ...$args + * @return void + */ + public function dd(...$args) + { + $this->dump(...$args); + + exit(1); + } + + /** + * Dump the items. + * + * @return $this + */ + public function dump() + { + (new Collection(func_get_args())) + ->push($this->all()) + ->each(function ($item) { + VarDumper::dump($item); + }); + + return $this; + } + + /** + * Execute a callback over each item. + * + * @param callable $callback + * @return $this + */ + public function each(callable $callback) + { + foreach ($this as $key => $item) { + if ($callback($item, $key) === false) { + break; + } + } + + return $this; + } + + /** + * Execute a callback over each nested chunk of items. + * + * @param callable $callback + * @return static + */ + public function eachSpread(callable $callback) + { + return $this->each(function ($chunk, $key) use ($callback) { + $chunk[] = $key; + + return $callback(...$chunk); + }); + } + + /** + * Determine if all items pass the given truth test. + * + * @param string|callable $key + * @param mixed $operator + * @param mixed $value + * @return bool + */ + public function every($key, $operator = null, $value = null) + { + if (func_num_args() === 1) { + $callback = $this->valueRetriever($key); + + foreach ($this as $k => $v) { + if (! $callback($v, $k)) { + return false; + } + } + + return true; + } + + return $this->every($this->operatorForWhere(...func_get_args())); + } + + /** + * Get the first item by the given key value pair. + * + * @param string $key + * @param mixed $operator + * @param mixed $value + * @return mixed + */ + public function firstWhere($key, $operator = null, $value = null) + { + return $this->first($this->operatorForWhere(...func_get_args())); + } + + /** + * Determine if the collection is not empty. + * + * @return bool + */ + public function isNotEmpty() + { + return ! $this->isEmpty(); + } + + /** + * Run a map over each nested chunk of items. + * + * @param callable $callback + * @return static + */ + public function mapSpread(callable $callback) + { + return $this->map(function ($chunk, $key) use ($callback) { + $chunk[] = $key; + + return $callback(...$chunk); + }); + } + + /** + * Run a grouping map over the items. + * + * The callback should return an associative array with a single key/value pair. + * + * @param callable $callback + * @return static + */ + public function mapToGroups(callable $callback) + { + $groups = $this->mapToDictionary($callback); + + return $groups->map([$this, 'make']); + } + + /** + * Map a collection and flatten the result by a single level. + * + * @param callable $callback + * @return static + */ + public function flatMap(callable $callback) + { + return $this->map($callback)->collapse(); + } + + /** + * Map the values into a new class. + * + * @param string $class + * @return static + */ + public function mapInto($class) + { + return $this->map(function ($value, $key) use ($class) { + return new $class($value, $key); + }); + } + + /** + * Get the min value of a given key. + * + * @param callable|string|null $callback + * @return mixed + */ + public function min($callback = null) + { + $callback = $this->valueRetriever($callback); + + return $this->map(function ($value) use ($callback) { + return $callback($value); + })->filter(function ($value) { + return ! is_null($value); + })->reduce(function ($result, $value) { + return is_null($result) || $value < $result ? $value : $result; + }); + } + + /** + * Get the max value of a given key. + * + * @param callable|string|null $callback + * @return mixed + */ + public function max($callback = null) + { + $callback = $this->valueRetriever($callback); + + return $this->filter(function ($value) { + return ! is_null($value); + })->reduce(function ($result, $item) use ($callback) { + $value = $callback($item); + + return is_null($result) || $value > $result ? $value : $result; + }); + } + + /** + * "Paginate" the collection by slicing it into a smaller collection. + * + * @param int $page + * @param int $perPage + * @return static + */ + public function forPage($page, $perPage) + { + $offset = max(0, ($page - 1) * $perPage); + + return $this->slice($offset, $perPage); + } + + /** + * Partition the collection into two arrays using the given callback or key. + * + * @param callable|string $key + * @param mixed $operator + * @param mixed $value + * @return static + */ + public function partition($key, $operator = null, $value = null) + { + $passed = []; + $failed = []; + + $callback = func_num_args() === 1 + ? $this->valueRetriever($key) + : $this->operatorForWhere(...func_get_args()); + + foreach ($this as $key => $item) { + if ($callback($item, $key)) { + $passed[$key] = $item; + } else { + $failed[$key] = $item; + } + } + + return new static([new static($passed), new static($failed)]); + } + + /** + * Get the sum of the given values. + * + * @param callable|string|null $callback + * @return mixed + */ + public function sum($callback = null) + { + $callback = is_null($callback) + ? $this->identity() + : $this->valueRetriever($callback); + + return $this->reduce(function ($result, $item) use ($callback) { + return $result + $callback($item); + }, 0); + } + + /** + * Apply the callback if the value is truthy. + * + * @param bool|mixed $value + * @param callable|null $callback + * @param callable|null $default + * @return static|mixed + */ + public function when($value, callable $callback = null, callable $default = null) + { + if (! $callback) { + return new HigherOrderWhenProxy($this, $value); + } + + if ($value) { + return $callback($this, $value); + } elseif ($default) { + return $default($this, $value); + } + + return $this; + } + + /** + * Apply the callback if the collection is empty. + * + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function whenEmpty(callable $callback, callable $default = null) + { + return $this->when($this->isEmpty(), $callback, $default); + } + + /** + * Apply the callback if the collection is not empty. + * + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function whenNotEmpty(callable $callback, callable $default = null) + { + return $this->when($this->isNotEmpty(), $callback, $default); + } + + /** + * Apply the callback if the value is falsy. + * + * @param bool $value + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function unless($value, callable $callback, callable $default = null) + { + return $this->when(! $value, $callback, $default); + } + + /** + * Apply the callback unless the collection is empty. + * + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function unlessEmpty(callable $callback, callable $default = null) + { + return $this->whenNotEmpty($callback, $default); + } + + /** + * Apply the callback unless the collection is not empty. + * + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function unlessNotEmpty(callable $callback, callable $default = null) + { + return $this->whenEmpty($callback, $default); + } + + /** + * Filter items by the given key value pair. + * + * @param string $key + * @param mixed $operator + * @param mixed $value + * @return static + */ + public function where($key, $operator = null, $value = null) + { + return $this->filter($this->operatorForWhere(...func_get_args())); + } + + /** + * Filter items where the given key is not null. + * + * @param string|null $key + * @return static + */ + public function whereNull($key = null) + { + return $this->whereStrict($key, null); + } + + /** + * Filter items where the given key is null. + * + * @param string|null $key + * @return static + */ + public function whereNotNull($key = null) + { + return $this->where($key, '!==', null); + } + + /** + * Filter items by the given key value pair using strict comparison. + * + * @param string $key + * @param mixed $value + * @return static + */ + public function whereStrict($key, $value) + { + return $this->where($key, '===', $value); + } + + /** + * Filter items by the given key value pair. + * + * @param string $key + * @param mixed $values + * @param bool $strict + * @return static + */ + public function whereIn($key, $values, $strict = false) + { + $values = $this->getArrayableItems($values); + + return $this->filter(function ($item) use ($key, $values, $strict) { + return in_array(data_get($item, $key), $values, $strict); + }); + } + + /** + * Filter items by the given key value pair using strict comparison. + * + * @param string $key + * @param mixed $values + * @return static + */ + public function whereInStrict($key, $values) + { + return $this->whereIn($key, $values, true); + } + + /** + * Filter items such that the value of the given key is between the given values. + * + * @param string $key + * @param array $values + * @return static + */ + public function whereBetween($key, $values) + { + return $this->where($key, '>=', reset($values))->where($key, '<=', end($values)); + } + + /** + * Filter items such that the value of the given key is not between the given values. + * + * @param string $key + * @param array $values + * @return static + */ + public function whereNotBetween($key, $values) + { + return $this->filter(function ($item) use ($key, $values) { + return data_get($item, $key) < reset($values) || data_get($item, $key) > end($values); + }); + } + + /** + * Filter items by the given key value pair. + * + * @param string $key + * @param mixed $values + * @param bool $strict + * @return static + */ + public function whereNotIn($key, $values, $strict = false) + { + $values = $this->getArrayableItems($values); + + return $this->reject(function ($item) use ($key, $values, $strict) { + return in_array(data_get($item, $key), $values, $strict); + }); + } + + /** + * Filter items by the given key value pair using strict comparison. + * + * @param string $key + * @param mixed $values + * @return static + */ + public function whereNotInStrict($key, $values) + { + return $this->whereNotIn($key, $values, true); + } + + /** + * Filter the items, removing any items that don't match the given type. + * + * @param string $type + * @return static + */ + public function whereInstanceOf($type) + { + return $this->filter(function ($value) use ($type) { + return $value instanceof $type; + }); + } + + /** + * Pass the collection to the given callback and return the result. + * + * @param callable $callback + * @return mixed + */ + public function pipe(callable $callback) + { + return $callback($this); + } + + /** + * Pass the collection to the given callback and then return it. + * + * @param callable $callback + * @return $this + */ + public function tap(callable $callback) + { + $callback(clone $this); + + return $this; + } + + /** + * Create a collection of all elements that do not pass a given truth test. + * + * @param callable|mixed $callback + * @return static + */ + public function reject($callback = true) + { + $useAsCallable = $this->useAsCallable($callback); + + return $this->filter(function ($value, $key) use ($callback, $useAsCallable) { + return $useAsCallable + ? ! $callback($value, $key) + : $value != $callback; + }); + } + + /** + * Return only unique items from the collection array. + * + * @param string|callable|null $key + * @param bool $strict + * @return static + */ + public function unique($key = null, $strict = false) + { + $callback = $this->valueRetriever($key); + + $exists = []; + + return $this->reject(function ($item, $key) use ($callback, $strict, &$exists) { + if (in_array($id = $callback($item, $key), $exists, $strict)) { + return true; + } + + $exists[] = $id; + }); + } + + /** + * Return only unique items from the collection array using strict comparison. + * + * @param string|callable|null $key + * @return static + */ + public function uniqueStrict($key = null) + { + return $this->unique($key, true); + } + + /** + * Take items in the collection until the given condition is met. + * + * This is an alias to the "takeUntil" method. + * + * @param mixed $value + * @return static + * + * @deprecated Use the "takeUntil" method directly. + */ + public function until($value) + { + return $this->takeUntil($value); + } + + /** + * Collect the values into a collection. + * + * @return \Illuminate\Support\Collection + */ + public function collect() + { + return new Collection($this->all()); + } + + /** + * Get the collection of items as a plain array. + * + * @return array + */ + public function toArray() + { + return $this->map(function ($value) { + return $value instanceof Arrayable ? $value->toArray() : $value; + })->all(); + } + + /** + * Convert the object into something JSON serializable. + * + * @return array + */ + public function jsonSerialize() + { + return array_map(function ($value) { + if ($value instanceof JsonSerializable) { + return $value->jsonSerialize(); + } elseif ($value instanceof Jsonable) { + return json_decode($value->toJson(), true); + } elseif ($value instanceof Arrayable) { + return $value->toArray(); + } + + return $value; + }, $this->all()); + } + + /** + * Get the collection of items as JSON. + * + * @param int $options + * @return string + */ + public function toJson($options = 0) + { + return json_encode($this->jsonSerialize(), $options); + } + + /** + * Get a CachingIterator instance. + * + * @param int $flags + * @return \CachingIterator + */ + public function getCachingIterator($flags = CachingIterator::CALL_TOSTRING) + { + return new CachingIterator($this->getIterator(), $flags); + } + + /** + * Convert the collection to its string representation. + * + * @return string + */ + public function __toString() + { + return $this->toJson(); + } + + /** + * Add a method to the list of proxied methods. + * + * @param string $method + * @return void + */ + public static function proxy($method) + { + static::$proxies[] = $method; + } + + /** + * Dynamically access collection proxies. + * + * @param string $key + * @return mixed + * + * @throws \Exception + */ + public function __get($key) + { + if (! in_array($key, static::$proxies)) { + throw new Exception("Property [{$key}] does not exist on this collection instance."); + } + + return new HigherOrderCollectionProxy($this, $key); + } + + /** + * Results array of items from Collection or Arrayable. + * + * @param mixed $items + * @return array + */ + protected function getArrayableItems($items) + { + if (is_array($items)) { + return $items; + } elseif ($items instanceof Enumerable) { + return $items->all(); + } elseif ($items instanceof Arrayable) { + return $items->toArray(); + } elseif ($items instanceof Jsonable) { + return json_decode($items->toJson(), true); + } elseif ($items instanceof JsonSerializable) { + return (array) $items->jsonSerialize(); + } elseif ($items instanceof Traversable) { + return iterator_to_array($items); + } + + return (array) $items; + } + + /** + * Get an operator checker callback. + * + * @param string $key + * @param string|null $operator + * @param mixed $value + * @return \Closure + */ + protected function operatorForWhere($key, $operator = null, $value = null) + { + if (func_num_args() === 1) { + $value = true; + + $operator = '='; + } + + if (func_num_args() === 2) { + $value = $operator; + + $operator = '='; + } + + return function ($item) use ($key, $operator, $value) { + $retrieved = data_get($item, $key); + + $strings = array_filter([$retrieved, $value], function ($value) { + return is_string($value) || (is_object($value) && method_exists($value, '__toString')); + }); + + if (count($strings) < 2 && count(array_filter([$retrieved, $value], 'is_object')) == 1) { + return in_array($operator, ['!=', '<>', '!==']); + } + + switch ($operator) { + default: + case '=': + case '==': return $retrieved == $value; + case '!=': + case '<>': return $retrieved != $value; + case '<': return $retrieved < $value; + case '>': return $retrieved > $value; + case '<=': return $retrieved <= $value; + case '>=': return $retrieved >= $value; + case '===': return $retrieved === $value; + case '!==': return $retrieved !== $value; + } + }; + } + + /** + * Determine if the given value is callable, but not a string. + * + * @param mixed $value + * @return bool + */ + protected function useAsCallable($value) + { + return ! is_string($value) && is_callable($value); + } + + /** + * Get a value retrieving callback. + * + * @param callable|string|null $value + * @return callable + */ + protected function valueRetriever($value) + { + if ($this->useAsCallable($value)) { + return $value; + } + + return function ($item) use ($value) { + return data_get($item, $value); + }; + } + + /** + * Make a function to check an item's equality. + * + * @param mixed $value + * @return \Closure + */ + protected function equality($value) + { + return function ($item) use ($value) { + return $item === $value; + }; + } + + /** + * Make a function using another function, by negating its result. + * + * @param \Closure $callback + * @return \Closure + */ + protected function negate(Closure $callback) + { + return function (...$params) use ($callback) { + return ! $callback(...$params); + }; + } + + /** + * Make a function that returns what's passed to it. + * + * @return \Closure + */ + protected function identity() + { + return function ($value) { + return $value; + }; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php index 3d0f122f..8b7add86 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php @@ -2,8 +2,8 @@ namespace Illuminate\Support\Traits; -use Error; use BadMethodCallException; +use Error; trait ForwardsCalls { @@ -21,7 +21,7 @@ trait ForwardsCalls { try { return $object->{$method}(...$parameters); - } catch (Error | BadMethodCallException $e) { + } catch (Error|BadMethodCallException $e) { $pattern = '~^Call to undefined method (?P[^:]+)::(?P[^\(]+)\(\)$~'; if (! preg_match($pattern, $e->getMessage(), $matches)) { diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php index b03276d2..1e9fa58c 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php @@ -9,8 +9,8 @@ trait Localizable /** * Run the callback with the given locale. * - * @param string $locale - * @param \Closure $callback + * @param string $locale + * @param \Closure $callback * @return mixed */ public function withLocale($locale, $callback) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/Macroable.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/Macroable.php index 80793cf5..406f65ed 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Traits/Macroable.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/Macroable.php @@ -2,10 +2,10 @@ namespace Illuminate\Support\Traits; +use BadMethodCallException; use Closure; use ReflectionClass; use ReflectionMethod; -use BadMethodCallException; trait Macroable { @@ -19,9 +19,8 @@ trait Macroable /** * Register a custom macro. * - * @param string $name + * @param string $name * @param object|callable $macro - * * @return void */ public static function macro($name, $macro) @@ -33,20 +32,22 @@ trait Macroable * Mix another object into the class. * * @param object $mixin + * @param bool $replace * @return void * * @throws \ReflectionException */ - public static function mixin($mixin) + public static function mixin($mixin, $replace = true) { $methods = (new ReflectionClass($mixin))->getMethods( ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_PROTECTED ); foreach ($methods as $method) { - $method->setAccessible(true); - - static::macro($method->name, $method->invoke($mixin)); + if ($replace || ! static::hasMacro($method->name)) { + $method->setAccessible(true); + static::macro($method->name, $method->invoke($mixin)); + } } } @@ -65,7 +66,7 @@ trait Macroable * Dynamically handle calls to the class. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed * * @throws \BadMethodCallException @@ -78,18 +79,20 @@ trait Macroable )); } - if (static::$macros[$method] instanceof Closure) { - return call_user_func_array(Closure::bind(static::$macros[$method], null, static::class), $parameters); + $macro = static::$macros[$method]; + + if ($macro instanceof Closure) { + $macro = $macro->bindTo(null, static::class); } - return call_user_func_array(static::$macros[$method], $parameters); + return $macro(...$parameters); } /** * Dynamically handle calls to the class. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed * * @throws \BadMethodCallException @@ -105,9 +108,9 @@ trait Macroable $macro = static::$macros[$method]; if ($macro instanceof Closure) { - return call_user_func_array($macro->bindTo($this, static::class), $parameters); + $macro = $macro->bindTo($this, static::class); } - return call_user_func_array($macro, $parameters); + return $macro(...$parameters); } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/ReflectsClosures.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/ReflectsClosures.php new file mode 100644 index 00000000..80887911 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/ReflectsClosures.php @@ -0,0 +1,55 @@ +getParameters())->mapWithKeys(function ($parameter) { + if ($parameter->isVariadic()) { + return [$parameter->getName() => null]; + } + + return [$parameter->getName() => Reflector::getParameterClassName($parameter)]; + })->all(); + } + + /** + * Get the class name of the first parameter of the given Closure. + * + * @param \Closure $closure + * @return string + * + * @throws \ReflectionException|\RuntimeException + */ + protected function firstClosureParameterType(Closure $closure) + { + $types = array_values($this->closureParameterTypes($closure)); + + if (! $types) { + throw new RuntimeException('The given Closure has no parameters.'); + } + + if ($types[0] === null) { + throw new RuntimeException('The first parameter of the given Closure is missing a type hint.'); + } + + return $types[0]; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/Tappable.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/Tappable.php new file mode 100644 index 00000000..e4a321cd --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/Tappable.php @@ -0,0 +1,17 @@ + $segment) { + unset($key[$i]); + + if (is_null($segment)) { + return $target; + } + if ($segment === '*') { if ($target instanceof Collection) { $target = $target->all(); @@ -549,14 +243,18 @@ if (! function_exists('data_set')) { if (! function_exists('e')) { /** - * Escape HTML special characters in a string. + * Encode HTML special characters in a string. * - * @param \Illuminate\Contracts\Support\Htmlable|string $value + * @param \Illuminate\Contracts\Support\DeferringDisplayableValue|\Illuminate\Contracts\Support\Htmlable|string $value * @param bool $doubleEncode * @return string */ function e($value, $doubleEncode = true) { + if ($value instanceof DeferringDisplayableValue) { + $value = $value->resolveDisplayableValue(); + } + if ($value instanceof Htmlable) { return $value->toHtml(); } @@ -565,56 +263,17 @@ if (! function_exists('e')) { } } -if (! function_exists('ends_with')) { - /** - * Determine if a given string ends with a given substring. - * - * @param string $haystack - * @param string|array $needles - * @return bool - */ - function ends_with($haystack, $needles) - { - return Str::endsWith($haystack, $needles); - } -} - if (! function_exists('env')) { /** * Gets the value of an environment variable. * * @param string $key - * @param mixed $default + * @param mixed $default * @return mixed */ function env($key, $default = null) { - $value = getenv($key); - - if ($value === false) { - return value($default); - } - - switch (strtolower($value)) { - case 'true': - case '(true)': - return true; - case 'false': - case '(false)': - return false; - case 'empty': - case '(empty)': - return ''; - case 'null': - case '(null)': - return; - } - - if (($valueLength = strlen($value)) > 1 && $value[0] === '"' && $value[$valueLength - 1] === '"') { - return substr($value, 1, -1); - } - - return $value; + return Env::get($key, $default); } } @@ -644,19 +303,6 @@ if (! function_exists('head')) { } } -if (! function_exists('kebab_case')) { - /** - * Convert a string to kebab case. - * - * @param string $value - * @return string - */ - function kebab_case($value) - { - return Str::kebab($value); - } -} - if (! function_exists('last')) { /** * Get the last element from an array. @@ -675,8 +321,8 @@ if (! function_exists('object_get')) { * Get an item from an object using "dot" notation. * * @param object $object - * @param string $key - * @param mixed $default + * @param string|null $key + * @param mixed $default * @return mixed */ function object_get($object, $key, $default = null) @@ -720,7 +366,7 @@ if (! function_exists('preg_replace_array')) { * Replace a given pattern with each value in the array in sequentially. * * @param string $pattern - * @param array $replacements + * @param array $replacements * @param string $subject * @return string */ @@ -741,24 +387,26 @@ if (! function_exists('retry')) { * @param int $times * @param callable $callback * @param int $sleep + * @param callable|null $when * @return mixed * * @throws \Exception */ - function retry($times, callable $callback, $sleep = 0) + function retry($times, callable $callback, $sleep = 0, $when = null) { - $times--; + $attempts = 0; beginning: + $attempts++; + $times--; + try { - return $callback(); + return $callback($attempts); } catch (Exception $e) { - if (! $times) { + if ($times < 1 || ($when && ! $when($e))) { throw $e; } - $times--; - if ($sleep) { usleep($sleep * 1000); } @@ -768,248 +416,6 @@ if (! function_exists('retry')) { } } -if (! function_exists('snake_case')) { - /** - * Convert a string to snake case. - * - * @param string $value - * @param string $delimiter - * @return string - */ - function snake_case($value, $delimiter = '_') - { - return Str::snake($value, $delimiter); - } -} - -if (! function_exists('starts_with')) { - /** - * Determine if a given string starts with a given substring. - * - * @param string $haystack - * @param string|array $needles - * @return bool - */ - function starts_with($haystack, $needles) - { - return Str::startsWith($haystack, $needles); - } -} - -if (! function_exists('str_after')) { - /** - * Return the remainder of a string after a given value. - * - * @param string $subject - * @param string $search - * @return string - */ - function str_after($subject, $search) - { - return Str::after($subject, $search); - } -} - -if (! function_exists('str_before')) { - /** - * Get the portion of a string before a given value. - * - * @param string $subject - * @param string $search - * @return string - */ - function str_before($subject, $search) - { - return Str::before($subject, $search); - } -} - -if (! function_exists('str_contains')) { - /** - * Determine if a given string contains a given substring. - * - * @param string $haystack - * @param string|array $needles - * @return bool - */ - function str_contains($haystack, $needles) - { - return Str::contains($haystack, $needles); - } -} - -if (! function_exists('str_finish')) { - /** - * Cap a string with a single instance of a given value. - * - * @param string $value - * @param string $cap - * @return string - */ - function str_finish($value, $cap) - { - return Str::finish($value, $cap); - } -} - -if (! function_exists('str_is')) { - /** - * Determine if a given string matches a given pattern. - * - * @param string|array $pattern - * @param string $value - * @return bool - */ - function str_is($pattern, $value) - { - return Str::is($pattern, $value); - } -} - -if (! function_exists('str_limit')) { - /** - * Limit the number of characters in a string. - * - * @param string $value - * @param int $limit - * @param string $end - * @return string - */ - function str_limit($value, $limit = 100, $end = '...') - { - return Str::limit($value, $limit, $end); - } -} - -if (! function_exists('str_plural')) { - /** - * Get the plural form of an English word. - * - * @param string $value - * @param int $count - * @return string - */ - function str_plural($value, $count = 2) - { - return Str::plural($value, $count); - } -} - -if (! function_exists('str_random')) { - /** - * Generate a more truly "random" alpha-numeric string. - * - * @param int $length - * @return string - * - * @throws \RuntimeException - */ - function str_random($length = 16) - { - return Str::random($length); - } -} - -if (! function_exists('str_replace_array')) { - /** - * Replace a given value in the string sequentially with an array. - * - * @param string $search - * @param array $replace - * @param string $subject - * @return string - */ - function str_replace_array($search, array $replace, $subject) - { - return Str::replaceArray($search, $replace, $subject); - } -} - -if (! function_exists('str_replace_first')) { - /** - * Replace the first occurrence of a given value in the string. - * - * @param string $search - * @param string $replace - * @param string $subject - * @return string - */ - function str_replace_first($search, $replace, $subject) - { - return Str::replaceFirst($search, $replace, $subject); - } -} - -if (! function_exists('str_replace_last')) { - /** - * Replace the last occurrence of a given value in the string. - * - * @param string $search - * @param string $replace - * @param string $subject - * @return string - */ - function str_replace_last($search, $replace, $subject) - { - return Str::replaceLast($search, $replace, $subject); - } -} - -if (! function_exists('str_singular')) { - /** - * Get the singular form of an English word. - * - * @param string $value - * @return string - */ - function str_singular($value) - { - return Str::singular($value); - } -} - -if (! function_exists('str_slug')) { - /** - * Generate a URL friendly "slug" from a given string. - * - * @param string $title - * @param string $separator - * @param string $language - * @return string - */ - function str_slug($title, $separator = '-', $language = 'en') - { - return Str::slug($title, $separator, $language); - } -} - -if (! function_exists('str_start')) { - /** - * Begin a string with a single instance of a given value. - * - * @param string $value - * @param string $prefix - * @return string - */ - function str_start($value, $prefix) - { - return Str::start($value, $prefix); - } -} - -if (! function_exists('studly_case')) { - /** - * Convert a value to studly caps case. - * - * @param string $value - * @return string - */ - function studly_case($value) - { - return Str::studly($value); - } -} - if (! function_exists('tap')) { /** * Call the given Closure with the given value then return the value. @@ -1059,6 +465,7 @@ if (! function_exists('throw_unless')) { * @param \Throwable|string $exception * @param array ...$parameters * @return mixed + * * @throws \Throwable */ function throw_unless($condition, $exception, ...$parameters) @@ -1071,19 +478,6 @@ if (! function_exists('throw_unless')) { } } -if (! function_exists('title_case')) { - /** - * Convert a value to title case. - * - * @param string $value - * @return string - */ - function title_case($value) - { - return Str::title($value); - } -} - if (! function_exists('trait_uses_recursive')) { /** * Returns all traits used by a trait and its traits. @@ -1147,7 +541,7 @@ if (! function_exists('windows_os')) { */ function windows_os() { - return strtolower(substr(PHP_OS, 0, 3)) === 'win'; + return PHP_OS_FAMILY === 'Windows'; } } diff --git a/vendor/laravel/framework/src/Illuminate/Testing/Assert.php b/vendor/laravel/framework/src/Illuminate/Testing/Assert.php new file mode 100644 index 00000000..36f811ae --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/Assert.php @@ -0,0 +1,88 @@ += 9) { + /** + * @internal This class is not meant to be used or overwritten outside the framework itself. + */ + final class ArraySubset extends Constraint + { + /** + * @var iterable + */ + private $subset; + + /** + * @var bool + */ + private $strict; + + /** + * Create a new array subset constraint instance. + * + * @param iterable $subset + * @param bool $strict + * @return void + */ + public function __construct(iterable $subset, bool $strict = false) + { + $this->strict = $strict; + $this->subset = $subset; + } + + /** + * Evaluates the constraint for parameter $other. + * + * If $returnResult is set to false (the default), an exception is thrown + * in case of a failure. null is returned otherwise. + * + * If $returnResult is true, the result of the evaluation is returned as + * a boolean value instead: true in case of success, false in case of a + * failure. + * + * @param mixed $other + * @param string $description + * @param bool $returnResult + * @return bool|null + * + * @throws \PHPUnit\Framework\ExpectationFailedException + * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException + */ + public function evaluate($other, string $description = '', bool $returnResult = false): ?bool + { + // type cast $other & $this->subset as an array to allow + // support in standard array functions. + $other = $this->toArray($other); + $this->subset = $this->toArray($this->subset); + + $patched = array_replace_recursive($other, $this->subset); + + if ($this->strict) { + $result = $other === $patched; + } else { + $result = $other == $patched; + } + + if ($returnResult) { + return $result; + } + + if (! $result) { + $f = new ComparisonFailure( + $patched, + $other, + var_export($patched, true), + var_export($other, true) + ); + + $this->fail($other, $description, $f); + } + + return null; + } + + /** + * Returns a string representation of the constraint. + * + * @return string + * + * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException + */ + public function toString(): string + { + return 'has the subset '.$this->exporter()->export($this->subset); + } + + /** + * Returns the description of the failure. + * + * The beginning of failure messages is "Failed asserting that" in most + * cases. This method should return the second part of that sentence. + * + * @param mixed $other + * @return string + * + * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException + */ + protected function failureDescription($other): string + { + return 'an array '.$this->toString(); + } + + /** + * Returns the description of the failure. + * + * The beginning of failure messages is "Failed asserting that" in most + * cases. This method should return the second part of that sentence. + * + * @param iterable $other + * @return array + */ + private function toArray(iterable $other): array + { + if (is_array($other)) { + return $other; + } + + if ($other instanceof ArrayObject) { + return $other->getArrayCopy(); + } + + if ($other instanceof Traversable) { + return iterator_to_array($other); + } + + // Keep BC even if we know that array would not be the expected one + return (array) $other; + } + } +} else { + /** + * @internal This class is not meant to be used or overwritten outside the framework itself. + */ + final class ArraySubset extends Constraint + { + /** + * @var iterable + */ + private $subset; + + /** + * @var bool + */ + private $strict; + + /** + * Create a new array subset constraint instance. + * + * @param iterable $subset + * @param bool $strict + * @return void + */ + public function __construct(iterable $subset, bool $strict = false) + { + $this->strict = $strict; + $this->subset = $subset; + } + + /** + * Evaluates the constraint for parameter $other. + * + * If $returnResult is set to false (the default), an exception is thrown + * in case of a failure. null is returned otherwise. + * + * If $returnResult is true, the result of the evaluation is returned as + * a boolean value instead: true in case of success, false in case of a + * failure. + * + * @param mixed $other + * @param string $description + * @param bool $returnResult + * @return bool|null + * + * @throws \PHPUnit\Framework\ExpectationFailedException + * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException + */ + public function evaluate($other, string $description = '', bool $returnResult = false) + { + // type cast $other & $this->subset as an array to allow + // support in standard array functions. + $other = $this->toArray($other); + $this->subset = $this->toArray($this->subset); + + $patched = array_replace_recursive($other, $this->subset); + + if ($this->strict) { + $result = $other === $patched; + } else { + $result = $other == $patched; + } + + if ($returnResult) { + return $result; + } + + if (! $result) { + $f = new ComparisonFailure( + $patched, + $other, + var_export($patched, true), + var_export($other, true) + ); + + $this->fail($other, $description, $f); + } + } + + /** + * Returns a string representation of the constraint. + * + * @return string + * + * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException + */ + public function toString(): string + { + return 'has the subset '.$this->exporter()->export($this->subset); + } + + /** + * Returns the description of the failure. + * + * The beginning of failure messages is "Failed asserting that" in most + * cases. This method should return the second part of that sentence. + * + * @param mixed $other + * @return string + * + * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException + */ + protected function failureDescription($other): string + { + return 'an array '.$this->toString(); + } + + /** + * Returns the description of the failure. + * + * The beginning of failure messages is "Failed asserting that" in most + * cases. This method should return the second part of that sentence. + * + * @param iterable $other + * @return array + */ + private function toArray(iterable $other): array + { + if (is_array($other)) { + return $other; + } + + if ($other instanceof ArrayObject) { + return $other->getArrayCopy(); + } + + if ($other instanceof Traversable) { + return iterator_to_array($other); + } + + // Keep BC even if we know that array would not be the expected one + return (array) $other; + } + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Testing/Constraints/CountInDatabase.php b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/CountInDatabase.php new file mode 100644 index 00000000..3ed68269 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/CountInDatabase.php @@ -0,0 +1,83 @@ +expectedCount = $expectedCount; + + $this->database = $database; + } + + /** + * Check if the expected and actual count are equal. + * + * @param string $table + * @return bool + */ + public function matches($table): bool + { + $this->actualCount = $this->database->table($table)->count(); + + return $this->actualCount === $this->expectedCount; + } + + /** + * Get the description of the failure. + * + * @param string $table + * @return string + */ + public function failureDescription($table): string + { + return sprintf( + "table [%s] matches expected entries count of %s. Entries found: %s.\n", + $table, $this->expectedCount, $this->actualCount + ); + } + + /** + * Get a string representation of the object. + * + * @param int $options + * @return string + */ + public function toString($options = 0): string + { + return (new ReflectionClass($this))->name; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Testing/Constraints/HasInDatabase.php b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/HasInDatabase.php new file mode 100644 index 00000000..3d089a8d --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/HasInDatabase.php @@ -0,0 +1,116 @@ +data = $data; + + $this->database = $database; + } + + /** + * Check if the data is found in the given table. + * + * @param string $table + * @return bool + */ + public function matches($table): bool + { + return $this->database->table($table)->where($this->data)->count() > 0; + } + + /** + * Get the description of the failure. + * + * @param string $table + * @return string + */ + public function failureDescription($table): string + { + return sprintf( + "a row in the table [%s] matches the attributes %s.\n\n%s", + $table, $this->toString(JSON_PRETTY_PRINT), $this->getAdditionalInfo($table) + ); + } + + /** + * Get additional info about the records found in the database table. + * + * @param string $table + * @return string + */ + protected function getAdditionalInfo($table) + { + $query = $this->database->table($table); + + $similarResults = $query->where( + array_key_first($this->data), + $this->data[array_key_first($this->data)] + )->limit($this->show)->get(); + + if ($similarResults->isNotEmpty()) { + $description = 'Found similar results: '.json_encode($similarResults, JSON_PRETTY_PRINT); + } else { + $query = $this->database->table($table); + + $results = $query->limit($this->show)->get(); + + if ($results->isEmpty()) { + return 'The table is empty.'; + } + + $description = 'Found: '.json_encode($results, JSON_PRETTY_PRINT); + } + + if ($query->count() > $this->show) { + $description .= sprintf(' and %s others', $query->count() - $this->show); + } + + return $description; + } + + /** + * Get a string representation of the object. + * + * @param int $options + * @return string + */ + public function toString($options = 0): string + { + return json_encode($this->data, $options); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Testing/Constraints/SeeInOrder.php b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/SeeInOrder.php new file mode 100644 index 00000000..609f32d5 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/SeeInOrder.php @@ -0,0 +1,88 @@ +content = $content; + } + + /** + * Determine if the rule passes validation. + * + * @param array $values + * @return bool + */ + public function matches($values): bool + { + $position = 0; + + foreach ($values as $value) { + if (empty($value)) { + continue; + } + + $valuePosition = mb_strpos($this->content, $value, $position); + + if ($valuePosition === false || $valuePosition < $position) { + $this->failedValue = $value; + + return false; + } + + $position = $valuePosition + mb_strlen($value); + } + + return true; + } + + /** + * Get the description of the failure. + * + * @param array $values + * @return string + */ + public function failureDescription($values): string + { + return sprintf( + 'Failed asserting that \'%s\' contains "%s" in specified order.', + $this->content, + $this->failedValue + ); + } + + /** + * Get a string representation of the object. + * + * @return string + */ + public function toString(): string + { + return (new ReflectionClass($this))->name; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Testing/Constraints/SoftDeletedInDatabase.php b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/SoftDeletedInDatabase.php new file mode 100644 index 00000000..baaeee27 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/SoftDeletedInDatabase.php @@ -0,0 +1,117 @@ +data = $data; + + $this->database = $database; + + $this->deletedAtColumn = $deletedAtColumn; + } + + /** + * Check if the data is found in the given table. + * + * @param string $table + * @return bool + */ + public function matches($table): bool + { + return $this->database->table($table) + ->where($this->data) + ->whereNotNull($this->deletedAtColumn) + ->count() > 0; + } + + /** + * Get the description of the failure. + * + * @param string $table + * @return string + */ + public function failureDescription($table): string + { + return sprintf( + "any soft deleted row in the table [%s] matches the attributes %s.\n\n%s", + $table, $this->toString(), $this->getAdditionalInfo($table) + ); + } + + /** + * Get additional info about the records found in the database table. + * + * @param string $table + * @return string + */ + protected function getAdditionalInfo($table) + { + $query = $this->database->table($table); + + $results = $query->limit($this->show)->get(); + + if ($results->isEmpty()) { + return 'The table is empty'; + } + + $description = 'Found: '.json_encode($results, JSON_PRETTY_PRINT); + + if ($query->count() > $this->show) { + $description .= sprintf(' and %s others', $query->count() - $this->show); + } + + return $description; + } + + /** + * Get a string representation of the object. + * + * @return string + */ + public function toString(): string + { + return json_encode($this->data); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Testing/LICENSE.md b/vendor/laravel/framework/src/Illuminate/Testing/LICENSE.md new file mode 100644 index 00000000..79810c84 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Taylor Otwell + +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. diff --git a/vendor/laravel/framework/src/Illuminate/Testing/PendingCommand.php b/vendor/laravel/framework/src/Illuminate/Testing/PendingCommand.php new file mode 100644 index 00000000..57ddb89e --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/PendingCommand.php @@ -0,0 +1,348 @@ +app = $app; + $this->test = $test; + $this->command = $command; + $this->parameters = $parameters; + } + + /** + * Specify an expected question that will be asked when the command runs. + * + * @param string $question + * @param string|bool $answer + * @return $this + */ + public function expectsQuestion($question, $answer) + { + $this->test->expectedQuestions[] = [$question, $answer]; + + return $this; + } + + /** + * Specify an expected confirmation question that will be asked when the command runs. + * + * @param string $question + * @param string $answer + * @return $this + */ + public function expectsConfirmation($question, $answer = 'no') + { + return $this->expectsQuestion($question, strtolower($answer) === 'yes'); + } + + /** + * Specify an expected choice question with expected answers that will be asked/shown when the command runs. + * + * @param string $question + * @param string|array $answer + * @param array $answers + * @param bool $strict + * @return $this + */ + public function expectsChoice($question, $answer, $answers, $strict = false) + { + $this->test->expectedChoices[$question] = [ + 'expected' => $answers, + 'strict' => $strict, + ]; + + return $this->expectsQuestion($question, $answer); + } + + /** + * Specify output that should be printed when the command runs. + * + * @param string $output + * @return $this + */ + public function expectsOutput($output) + { + $this->test->expectedOutput[] = $output; + + return $this; + } + + /** + * Specify a table that should be printed when the command runs. + * + * @param array $headers + * @param \Illuminate\Contracts\Support\Arrayable|array $rows + * @param string $tableStyle + * @param array $columnStyles + * @return $this + */ + public function expectsTable($headers, $rows, $tableStyle = 'default', array $columnStyles = []) + { + $this->test->expectedTables[] = [ + 'headers' => (array) $headers, + 'rows' => $rows instanceof Arrayable ? $rows->toArray() : $rows, + 'tableStyle' => $tableStyle, + 'columnStyles' => $columnStyles, + ]; + + return $this; + } + + /** + * Assert that the command has the given exit code. + * + * @param int $exitCode + * @return $this + */ + public function assertExitCode($exitCode) + { + $this->expectedExitCode = $exitCode; + + return $this; + } + + /** + * Execute the command. + * + * @return int + */ + public function execute() + { + return $this->run(); + } + + /** + * Execute the command. + * + * @return int + * + * @throws \Mockery\Exception\NoMatchingExpectationException + */ + public function run() + { + $this->hasExecuted = true; + + $mock = $this->mockConsoleOutput(); + + try { + $exitCode = $this->app->make(Kernel::class)->call($this->command, $this->parameters, $mock); + } catch (NoMatchingExpectationException $e) { + if ($e->getMethodName() === 'askQuestion') { + $this->test->fail('Unexpected question "'.$e->getActualArguments()[0]->getQuestion().'" was asked.'); + } + + throw $e; + } + + if ($this->expectedExitCode !== null) { + $this->test->assertEquals( + $this->expectedExitCode, $exitCode, + "Expected status code {$this->expectedExitCode} but received {$exitCode}." + ); + } + + $this->verifyExpectations(); + + return $exitCode; + } + + /** + * Determine if expected questions / choices / outputs are fulfilled. + * + * @return void + */ + protected function verifyExpectations() + { + if (count($this->test->expectedQuestions)) { + $this->test->fail('Question "'.Arr::first($this->test->expectedQuestions)[0].'" was not asked.'); + } + + if (count($this->test->expectedChoices) > 0) { + foreach ($this->test->expectedChoices as $question => $answers) { + $assertion = $answers['strict'] ? 'assertEquals' : 'assertEqualsCanonicalizing'; + + $this->test->{$assertion}( + $answers['expected'], + $answers['actual'], + 'Question "'.$question.'" has different options.' + ); + } + } + + if (count($this->test->expectedOutput)) { + $this->test->fail('Output "'.Arr::first($this->test->expectedOutput).'" was not printed.'); + } + } + + /** + * Mock the application's console output. + * + * @return \Mockery\MockInterface + */ + protected function mockConsoleOutput() + { + $mock = Mockery::mock(OutputStyle::class.'[askQuestion]', [ + (new ArrayInput($this->parameters)), $this->createABufferedOutputMock(), + ]); + + foreach ($this->test->expectedQuestions as $i => $question) { + $mock->shouldReceive('askQuestion') + ->once() + ->ordered() + ->with(Mockery::on(function ($argument) use ($question) { + if (isset($this->test->expectedChoices[$question[0]])) { + $this->test->expectedChoices[$question[0]]['actual'] = $argument->getAutocompleterValues(); + } + + return $argument->getQuestion() == $question[0]; + })) + ->andReturnUsing(function () use ($question, $i) { + unset($this->test->expectedQuestions[$i]); + + return $question[1]; + }); + } + + $this->app->bind(OutputStyle::class, function () use ($mock) { + return $mock; + }); + + return $mock; + } + + /** + * Create a mock for the buffered output. + * + * @return \Mockery\MockInterface + */ + private function createABufferedOutputMock() + { + $mock = Mockery::mock(BufferedOutput::class.'[doWrite]') + ->shouldAllowMockingProtectedMethods() + ->shouldIgnoreMissing(); + + $this->applyTableOutputExpectations($mock); + + foreach ($this->test->expectedOutput as $i => $output) { + $mock->shouldReceive('doWrite') + ->once() + ->ordered() + ->with($output, Mockery::any()) + ->andReturnUsing(function () use ($i) { + unset($this->test->expectedOutput[$i]); + }); + } + + return $mock; + } + + /** + * Apply the output table expectations to the mock. + * + * @param \Mockery\MockInterface $mock + * @return void + */ + private function applyTableOutputExpectations($mock) + { + foreach ($this->test->expectedTables as $consoleTable) { + $table = (new Table($output = new BufferedOutput)) + ->setHeaders($consoleTable['headers']) + ->setRows($consoleTable['rows']) + ->setStyle($consoleTable['tableStyle']); + + foreach ($consoleTable['columnStyles'] as $columnIndex => $columnStyle) { + $table->setColumnStyle($columnIndex, $columnStyle); + } + + $table->render(); + + $lines = array_filter( + preg_split("/\n/", $output->fetch()) + ); + + foreach ($lines as $line) { + $this->expectsOutput($line); + } + } + } + + /** + * Handle the object's destruction. + * + * @return void + */ + public function __destruct() + { + if ($this->hasExecuted) { + return; + } + + $this->run(); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Testing/TestResponse.php b/vendor/laravel/framework/src/Illuminate/Testing/TestResponse.php new file mode 100644 index 00000000..ba82ca47 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/TestResponse.php @@ -0,0 +1,1329 @@ +baseResponse = $response; + } + + /** + * Create a new TestResponse from another response. + * + * @param \Illuminate\Http\Response $response + * @return static + */ + public static function fromBaseResponse($response) + { + return new static($response); + } + + /** + * Assert that the response has a successful status code. + * + * @return $this + */ + public function assertSuccessful() + { + PHPUnit::assertTrue( + $this->isSuccessful(), + 'Response status code ['.$this->getStatusCode().'] is not a successful status code.' + ); + + return $this; + } + + /** + * Assert that the response has a 200 status code. + * + * @return $this + */ + public function assertOk() + { + PHPUnit::assertTrue( + $this->isOk(), + 'Response status code ['.$this->getStatusCode().'] does not match expected 200 status code.' + ); + + return $this; + } + + /** + * Assert that the response has a 201 status code. + * + * @return $this + */ + public function assertCreated() + { + $actual = $this->getStatusCode(); + + PHPUnit::assertSame( + 201, $actual, + "Response status code [{$actual}] does not match expected 201 status code." + ); + + return $this; + } + + /** + * Assert that the response has the given status code and no content. + * + * @param int $status + * @return $this + */ + public function assertNoContent($status = 204) + { + $this->assertStatus($status); + + PHPUnit::assertEmpty($this->getContent(), 'Response content is not empty.'); + + return $this; + } + + /** + * Assert that the response has a not found status code. + * + * @return $this + */ + public function assertNotFound() + { + PHPUnit::assertTrue( + $this->isNotFound(), + 'Response status code ['.$this->getStatusCode().'] is not a not found status code.' + ); + + return $this; + } + + /** + * Assert that the response has a forbidden status code. + * + * @return $this + */ + public function assertForbidden() + { + PHPUnit::assertTrue( + $this->isForbidden(), + 'Response status code ['.$this->getStatusCode().'] is not a forbidden status code.' + ); + + return $this; + } + + /** + * Assert that the response has an unauthorized status code. + * + * @return $this + */ + public function assertUnauthorized() + { + $actual = $this->getStatusCode(); + + PHPUnit::assertSame( + 401, $actual, + "Response status code [{$actual}] is not an unauthorized status code." + ); + + return $this; + } + + /** + * Assert that the response has the given status code. + * + * @param int $status + * @return $this + */ + public function assertStatus($status) + { + $actual = $this->getStatusCode(); + + PHPUnit::assertSame( + $actual, $status, + "Expected status code {$status} but received {$actual}." + ); + + return $this; + } + + /** + * Assert whether the response is redirecting to a given URI. + * + * @param string|null $uri + * @return $this + */ + public function assertRedirect($uri = null) + { + PHPUnit::assertTrue( + $this->isRedirect(), 'Response status code ['.$this->getStatusCode().'] is not a redirect status code.' + ); + + if (! is_null($uri)) { + $this->assertLocation($uri); + } + + return $this; + } + + /** + * Asserts that the response contains the given header and equals the optional value. + * + * @param string $headerName + * @param mixed $value + * @return $this + */ + public function assertHeader($headerName, $value = null) + { + PHPUnit::assertTrue( + $this->headers->has($headerName), "Header [{$headerName}] not present on response." + ); + + $actual = $this->headers->get($headerName); + + if (! is_null($value)) { + PHPUnit::assertEquals( + $value, $this->headers->get($headerName), + "Header [{$headerName}] was found, but value [{$actual}] does not match [{$value}]." + ); + } + + return $this; + } + + /** + * Asserts that the response does not contains the given header. + * + * @param string $headerName + * @return $this + */ + public function assertHeaderMissing($headerName) + { + PHPUnit::assertFalse( + $this->headers->has($headerName), "Unexpected header [{$headerName}] is present on response." + ); + + return $this; + } + + /** + * Assert that the current location header matches the given URI. + * + * @param string $uri + * @return $this + */ + public function assertLocation($uri) + { + PHPUnit::assertEquals( + app('url')->to($uri), app('url')->to($this->headers->get('Location')) + ); + + return $this; + } + + /** + * Asserts that the response contains the given cookie and equals the optional value. + * + * @param string $cookieName + * @param mixed $value + * @return $this + */ + public function assertPlainCookie($cookieName, $value = null) + { + $this->assertCookie($cookieName, $value, false); + + return $this; + } + + /** + * Asserts that the response contains the given cookie and equals the optional value. + * + * @param string $cookieName + * @param mixed $value + * @param bool $encrypted + * @param bool $unserialize + * @return $this + */ + public function assertCookie($cookieName, $value = null, $encrypted = true, $unserialize = false) + { + PHPUnit::assertNotNull( + $cookie = $this->getCookie($cookieName), + "Cookie [{$cookieName}] not present on response." + ); + + if (! $cookie || is_null($value)) { + return $this; + } + + $cookieValue = $cookie->getValue(); + + $actual = $encrypted + ? CookieValuePrefix::remove(app('encrypter')->decrypt($cookieValue, $unserialize)) + : $cookieValue; + + PHPUnit::assertEquals( + $value, $actual, + "Cookie [{$cookieName}] was found, but value [{$actual}] does not match [{$value}]." + ); + + return $this; + } + + /** + * Asserts that the response contains the given cookie and is expired. + * + * @param string $cookieName + * @return $this + */ + public function assertCookieExpired($cookieName) + { + PHPUnit::assertNotNull( + $cookie = $this->getCookie($cookieName), + "Cookie [{$cookieName}] not present on response." + ); + + $expiresAt = Carbon::createFromTimestamp($cookie->getExpiresTime()); + + PHPUnit::assertTrue( + $expiresAt->lessThan(Carbon::now()), + "Cookie [{$cookieName}] is not expired, it expires at [{$expiresAt}]." + ); + + return $this; + } + + /** + * Asserts that the response contains the given cookie and is not expired. + * + * @param string $cookieName + * @return $this + */ + public function assertCookieNotExpired($cookieName) + { + PHPUnit::assertNotNull( + $cookie = $this->getCookie($cookieName), + "Cookie [{$cookieName}] not present on response." + ); + + $expiresAt = Carbon::createFromTimestamp($cookie->getExpiresTime()); + + PHPUnit::assertTrue( + $expiresAt->greaterThan(Carbon::now()), + "Cookie [{$cookieName}] is expired, it expired at [{$expiresAt}]." + ); + + return $this; + } + + /** + * Asserts that the response does not contains the given cookie. + * + * @param string $cookieName + * @return $this + */ + public function assertCookieMissing($cookieName) + { + PHPUnit::assertNull( + $this->getCookie($cookieName), + "Cookie [{$cookieName}] is present on response." + ); + + return $this; + } + + /** + * Get the given cookie from the response. + * + * @param string $cookieName + * @return \Symfony\Component\HttpFoundation\Cookie|null + */ + protected function getCookie($cookieName) + { + foreach ($this->headers->getCookies() as $cookie) { + if ($cookie->getName() === $cookieName) { + return $cookie; + } + } + } + + /** + * Assert that the given string is contained within the response. + * + * @param string $value + * @param bool $escape + * @return $this + */ + public function assertSee($value, $escape = true) + { + $value = $escape ? e($value) : $value; + + PHPUnit::assertStringContainsString((string) $value, $this->getContent()); + + return $this; + } + + /** + * Assert that the given strings are contained in order within the response. + * + * @param array $values + * @param bool $escape + * @return $this + */ + public function assertSeeInOrder(array $values, $escape = true) + { + $values = $escape ? array_map('e', ($values)) : $values; + + PHPUnit::assertThat($values, new SeeInOrder($this->getContent())); + + return $this; + } + + /** + * Assert that the given string is contained within the response text. + * + * @param string $value + * @param bool $escape + * @return $this + */ + public function assertSeeText($value, $escape = true) + { + $value = $escape ? e($value) : $value; + + PHPUnit::assertStringContainsString((string) $value, strip_tags($this->getContent())); + + return $this; + } + + /** + * Assert that the given strings are contained in order within the response text. + * + * @param array $values + * @param bool $escape + * @return $this + */ + public function assertSeeTextInOrder(array $values, $escape = true) + { + $values = $escape ? array_map('e', ($values)) : $values; + + PHPUnit::assertThat($values, new SeeInOrder(strip_tags($this->getContent()))); + + return $this; + } + + /** + * Assert that the given string is not contained within the response. + * + * @param string $value + * @param bool $escape + * @return $this + */ + public function assertDontSee($value, $escape = true) + { + $value = $escape ? e($value) : $value; + + PHPUnit::assertStringNotContainsString((string) $value, $this->getContent()); + + return $this; + } + + /** + * Assert that the given string is not contained within the response text. + * + * @param string $value + * @param bool $escape + * @return $this + */ + public function assertDontSeeText($value, $escape = true) + { + $value = $escape ? e($value) : $value; + + PHPUnit::assertStringNotContainsString((string) $value, strip_tags($this->getContent())); + + return $this; + } + + /** + * Assert that the response is a superset of the given JSON. + * + * @param array $data + * @param bool $strict + * @return $this + */ + public function assertJson(array $data, $strict = false) + { + PHPUnit::assertArraySubset( + $data, $this->decodeResponseJson(), $strict, $this->assertJsonMessage($data) + ); + + return $this; + } + + /** + * Get the assertion message for assertJson. + * + * @param array $data + * @return string + */ + protected function assertJsonMessage(array $data) + { + $expected = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + + $actual = json_encode($this->decodeResponseJson(), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + + return 'Unable to find JSON: '.PHP_EOL.PHP_EOL. + "[{$expected}]".PHP_EOL.PHP_EOL. + 'within response JSON:'.PHP_EOL.PHP_EOL. + "[{$actual}].".PHP_EOL.PHP_EOL; + } + + /** + * Assert that the expected value and type exists at the given path in the response. + * + * @param string $path + * @param mixed $expect + * @return $this + */ + public function assertJsonPath($path, $expect) + { + PHPUnit::assertSame($expect, $this->json($path)); + + return $this; + } + + /** + * Assert that the response has the exact given JSON. + * + * @param array $data + * @return $this + */ + public function assertExactJson(array $data) + { + $actual = json_encode(Arr::sortRecursive( + (array) $this->decodeResponseJson() + )); + + PHPUnit::assertEquals(json_encode(Arr::sortRecursive($data)), $actual); + + return $this; + } + + /** + * Assert that the response contains the given JSON fragment. + * + * @param array $data + * @return $this + */ + public function assertJsonFragment(array $data) + { + $actual = json_encode(Arr::sortRecursive( + (array) $this->decodeResponseJson() + )); + + foreach (Arr::sortRecursive($data) as $key => $value) { + $expected = $this->jsonSearchStrings($key, $value); + + PHPUnit::assertTrue( + Str::contains($actual, $expected), + 'Unable to find JSON fragment: '.PHP_EOL.PHP_EOL. + '['.json_encode([$key => $value]).']'.PHP_EOL.PHP_EOL. + 'within'.PHP_EOL.PHP_EOL. + "[{$actual}]." + ); + } + + return $this; + } + + /** + * Assert that the response does not contain the given JSON fragment. + * + * @param array $data + * @param bool $exact + * @return $this + */ + public function assertJsonMissing(array $data, $exact = false) + { + if ($exact) { + return $this->assertJsonMissingExact($data); + } + + $actual = json_encode(Arr::sortRecursive( + (array) $this->decodeResponseJson() + )); + + foreach (Arr::sortRecursive($data) as $key => $value) { + $unexpected = $this->jsonSearchStrings($key, $value); + + PHPUnit::assertFalse( + Str::contains($actual, $unexpected), + 'Found unexpected JSON fragment: '.PHP_EOL.PHP_EOL. + '['.json_encode([$key => $value]).']'.PHP_EOL.PHP_EOL. + 'within'.PHP_EOL.PHP_EOL. + "[{$actual}]." + ); + } + + return $this; + } + + /** + * Assert that the response does not contain the exact JSON fragment. + * + * @param array $data + * @return $this + */ + public function assertJsonMissingExact(array $data) + { + $actual = json_encode(Arr::sortRecursive( + (array) $this->decodeResponseJson() + )); + + foreach (Arr::sortRecursive($data) as $key => $value) { + $unexpected = $this->jsonSearchStrings($key, $value); + + if (! Str::contains($actual, $unexpected)) { + return $this; + } + } + + PHPUnit::fail( + 'Found unexpected JSON fragment: '.PHP_EOL.PHP_EOL. + '['.json_encode($data).']'.PHP_EOL.PHP_EOL. + 'within'.PHP_EOL.PHP_EOL. + "[{$actual}]." + ); + } + + /** + * Get the strings we need to search for when examining the JSON. + * + * @param string $key + * @param string $value + * @return array + */ + protected function jsonSearchStrings($key, $value) + { + $needle = substr(json_encode([$key => $value]), 1, -1); + + return [ + $needle.']', + $needle.'}', + $needle.',', + ]; + } + + /** + * Assert that the response has a given JSON structure. + * + * @param array|null $structure + * @param array|null $responseData + * @return $this + */ + public function assertJsonStructure(array $structure = null, $responseData = null) + { + if (is_null($structure)) { + return $this->assertExactJson($this->json()); + } + + if (is_null($responseData)) { + $responseData = $this->decodeResponseJson(); + } + + foreach ($structure as $key => $value) { + if (is_array($value) && $key === '*') { + PHPUnit::assertIsArray($responseData); + + foreach ($responseData as $responseDataItem) { + $this->assertJsonStructure($structure['*'], $responseDataItem); + } + } elseif (is_array($value)) { + PHPUnit::assertArrayHasKey($key, $responseData); + + $this->assertJsonStructure($structure[$key], $responseData[$key]); + } else { + PHPUnit::assertArrayHasKey($value, $responseData); + } + } + + return $this; + } + + /** + * Assert that the response JSON has the expected count of items at the given key. + * + * @param int $count + * @param string|null $key + * @return $this + */ + public function assertJsonCount(int $count, $key = null) + { + if (! is_null($key)) { + PHPUnit::assertCount( + $count, data_get($this->json(), $key), + "Failed to assert that the response count matched the expected {$count}" + ); + + return $this; + } + + PHPUnit::assertCount($count, + $this->json(), + "Failed to assert that the response count matched the expected {$count}" + ); + + return $this; + } + + /** + * Assert that the response has the given JSON validation errors. + * + * @param string|array $errors + * @param string $responseKey + * @return $this + */ + public function assertJsonValidationErrors($errors, $responseKey = 'errors') + { + $errors = Arr::wrap($errors); + + PHPUnit::assertNotEmpty($errors, 'No validation errors were provided.'); + + $jsonErrors = Arr::get($this->json(), $responseKey) ?? []; + + $errorMessage = $jsonErrors + ? 'Response has the following JSON validation errors:'. + PHP_EOL.PHP_EOL.json_encode($jsonErrors, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE).PHP_EOL + : 'Response does not have JSON validation errors.'; + + foreach ($errors as $key => $value) { + PHPUnit::assertArrayHasKey( + (is_int($key)) ? $value : $key, + $jsonErrors, + "Failed to find a validation error in the response for key: '{$value}'".PHP_EOL.PHP_EOL.$errorMessage + ); + + if (! is_int($key)) { + $hasError = false; + + foreach (Arr::wrap($jsonErrors[$key]) as $jsonErrorMessage) { + if (Str::contains($jsonErrorMessage, $value)) { + $hasError = true; + + break; + } + } + + if (! $hasError) { + PHPUnit::fail( + "Failed to find a validation error in the response for key and message: '$key' => '$value'".PHP_EOL.PHP_EOL.$errorMessage + ); + } + } + } + + return $this; + } + + /** + * Assert that the response has no JSON validation errors for the given keys. + * + * @param string|array|null $keys + * @param string $responseKey + * @return $this + */ + public function assertJsonMissingValidationErrors($keys = null, $responseKey = 'errors') + { + if ($this->getContent() === '') { + PHPUnit::assertTrue(true); + + return $this; + } + + $json = $this->json(); + + if (! array_key_exists($responseKey, $json)) { + PHPUnit::assertArrayNotHasKey($responseKey, $json); + + return $this; + } + + $errors = $json[$responseKey]; + + if (is_null($keys) && count($errors) > 0) { + PHPUnit::fail( + 'Response has unexpected validation errors: '.PHP_EOL.PHP_EOL. + json_encode($errors, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) + ); + } + + foreach (Arr::wrap($keys) as $key) { + PHPUnit::assertFalse( + isset($errors[$key]), + "Found unexpected validation error for key: '{$key}'" + ); + } + + return $this; + } + + /** + * Validate and return the decoded response JSON. + * + * @param string|null $key + * @return mixed + * + * @throws \Throwable + */ + public function decodeResponseJson($key = null) + { + $decodedResponse = json_decode($this->getContent(), true); + + if (is_null($decodedResponse) || $decodedResponse === false) { + if ($this->exception) { + throw $this->exception; + } else { + PHPUnit::fail('Invalid JSON was returned from the route.'); + } + } + + return data_get($decodedResponse, $key); + } + + /** + * Validate and return the decoded response JSON. + * + * @param string|null $key + * @return mixed + */ + public function json($key = null) + { + return $this->decodeResponseJson($key); + } + + /** + * Assert that the response view equals the given value. + * + * @param string $value + * @return $this + */ + public function assertViewIs($value) + { + $this->ensureResponseHasView(); + + PHPUnit::assertEquals($value, $this->original->name()); + + return $this; + } + + /** + * Assert that the response view has a given piece of bound data. + * + * @param string|array $key + * @param mixed $value + * @return $this + */ + public function assertViewHas($key, $value = null) + { + if (is_array($key)) { + return $this->assertViewHasAll($key); + } + + $this->ensureResponseHasView(); + + if (is_null($value)) { + PHPUnit::assertTrue(Arr::has($this->original->gatherData(), $key)); + } elseif ($value instanceof Closure) { + PHPUnit::assertTrue($value(Arr::get($this->original->gatherData(), $key))); + } elseif ($value instanceof Model) { + PHPUnit::assertTrue($value->is(Arr::get($this->original->gatherData(), $key))); + } else { + PHPUnit::assertEquals($value, Arr::get($this->original->gatherData(), $key)); + } + + return $this; + } + + /** + * Assert that the response view has a given list of bound data. + * + * @param array $bindings + * @return $this + */ + public function assertViewHasAll(array $bindings) + { + foreach ($bindings as $key => $value) { + if (is_int($key)) { + $this->assertViewHas($value); + } else { + $this->assertViewHas($key, $value); + } + } + + return $this; + } + + /** + * Get a piece of data from the original view. + * + * @param string $key + * @return mixed + */ + public function viewData($key) + { + $this->ensureResponseHasView(); + + return $this->original->gatherData()[$key]; + } + + /** + * Assert that the response view is missing a piece of bound data. + * + * @param string $key + * @return $this + */ + public function assertViewMissing($key) + { + $this->ensureResponseHasView(); + + PHPUnit::assertFalse(Arr::has($this->original->gatherData(), $key)); + + return $this; + } + + /** + * Ensure that the response has a view as its original content. + * + * @return $this + */ + protected function ensureResponseHasView() + { + if (! $this->responseHasView()) { + return PHPUnit::fail('The response is not a view.'); + } + + return $this; + } + + /** + * Determine if the original response is a view. + * + * @return bool + */ + protected function responseHasView() + { + return isset($this->original) && $this->original instanceof View; + } + + /** + * Assert that the session has a given value. + * + * @param string|array $key + * @param mixed $value + * @return $this + */ + public function assertSessionHas($key, $value = null) + { + if (is_array($key)) { + return $this->assertSessionHasAll($key); + } + + if (is_null($value)) { + PHPUnit::assertTrue( + $this->session()->has($key), + "Session is missing expected key [{$key}]." + ); + } elseif ($value instanceof Closure) { + PHPUnit::assertTrue($value($this->session()->get($key))); + } else { + PHPUnit::assertEquals($value, $this->session()->get($key)); + } + + return $this; + } + + /** + * Assert that the session has a given list of values. + * + * @param array $bindings + * @return $this + */ + public function assertSessionHasAll(array $bindings) + { + foreach ($bindings as $key => $value) { + if (is_int($key)) { + $this->assertSessionHas($value); + } else { + $this->assertSessionHas($key, $value); + } + } + + return $this; + } + + /** + * Assert that the session has a given value in the flashed input array. + * + * @param string|array $key + * @param mixed $value + * @return $this + */ + public function assertSessionHasInput($key, $value = null) + { + if (is_array($key)) { + foreach ($key as $k => $v) { + if (is_int($k)) { + $this->assertSessionHasInput($v); + } else { + $this->assertSessionHasInput($k, $v); + } + } + + return $this; + } + + if (is_null($value)) { + PHPUnit::assertTrue( + $this->session()->hasOldInput($key), + "Session is missing expected key [{$key}]." + ); + } elseif ($value instanceof Closure) { + PHPUnit::assertTrue($value($this->session()->getOldInput($key))); + } else { + PHPUnit::assertEquals($value, $this->session()->getOldInput($key)); + } + + return $this; + } + + /** + * Assert that the session has the given errors. + * + * @param string|array $keys + * @param mixed $format + * @param string $errorBag + * @return $this + */ + public function assertSessionHasErrors($keys = [], $format = null, $errorBag = 'default') + { + $this->assertSessionHas('errors'); + + $keys = (array) $keys; + + $errors = $this->session()->get('errors')->getBag($errorBag); + + foreach ($keys as $key => $value) { + if (is_int($key)) { + PHPUnit::assertTrue($errors->has($value), "Session missing error: $value"); + } else { + PHPUnit::assertContains(is_bool($value) ? (string) $value : $value, $errors->get($key, $format)); + } + } + + return $this; + } + + /** + * Assert that the session is missing the given errors. + * + * @param string|array $keys + * @param string|null $format + * @param string $errorBag + * @return $this + */ + public function assertSessionDoesntHaveErrors($keys = [], $format = null, $errorBag = 'default') + { + $keys = (array) $keys; + + if (empty($keys)) { + return $this->assertSessionHasNoErrors(); + } + + if (is_null($this->session()->get('errors'))) { + PHPUnit::assertTrue(true); + + return $this; + } + + $errors = $this->session()->get('errors')->getBag($errorBag); + + foreach ($keys as $key => $value) { + if (is_int($key)) { + PHPUnit::assertFalse($errors->has($value), "Session has unexpected error: $value"); + } else { + PHPUnit::assertNotContains($value, $errors->get($key, $format)); + } + } + + return $this; + } + + /** + * Assert that the session has no errors. + * + * @return $this + */ + public function assertSessionHasNoErrors() + { + $hasErrors = $this->session()->has('errors'); + + $errors = $hasErrors ? $this->session()->get('errors')->all() : []; + + PHPUnit::assertFalse( + $hasErrors, + 'Session has unexpected errors: '.PHP_EOL.PHP_EOL. + json_encode($errors, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) + ); + + return $this; + } + + /** + * Assert that the session has the given errors. + * + * @param string $errorBag + * @param string|array $keys + * @param mixed $format + * @return $this + */ + public function assertSessionHasErrorsIn($errorBag, $keys = [], $format = null) + { + return $this->assertSessionHasErrors($keys, $format, $errorBag); + } + + /** + * Assert that the session does not have a given key. + * + * @param string|array $key + * @return $this + */ + public function assertSessionMissing($key) + { + if (is_array($key)) { + foreach ($key as $value) { + $this->assertSessionMissing($value); + } + } else { + PHPUnit::assertFalse( + $this->session()->has($key), + "Session has unexpected key [{$key}]." + ); + } + + return $this; + } + + /** + * Get the current session store. + * + * @return \Illuminate\Session\Store + */ + protected function session() + { + return app('session.store'); + } + + /** + * Dump the content from the response. + * + * @return $this + */ + public function dump() + { + $content = $this->getContent(); + + $json = json_decode($content); + + if (json_last_error() === JSON_ERROR_NONE) { + $content = $json; + } + + dump($content); + + return $this; + } + + /** + * Dump the headers from the response. + * + * @return $this + */ + public function dumpHeaders() + { + dump($this->headers->all()); + + return $this; + } + + /** + * Dump the session from the response. + * + * @param string|array $keys + * @return $this + */ + public function dumpSession($keys = []) + { + $keys = (array) $keys; + + if (empty($keys)) { + dump($this->session()->all()); + } else { + dump($this->session()->only($keys)); + } + + return $this; + } + + /** + * Get the streamed content from the response. + * + * @return string + */ + public function streamedContent() + { + if (! is_null($this->streamedContent)) { + return $this->streamedContent; + } + + if (! $this->baseResponse instanceof StreamedResponse) { + PHPUnit::fail('The response is not a streamed response.'); + } + + ob_start(); + + $this->sendContent(); + + return $this->streamedContent = ob_get_clean(); + } + + /** + * Dynamically access base response parameters. + * + * @param string $key + * @return mixed + */ + public function __get($key) + { + return $this->baseResponse->{$key}; + } + + /** + * Proxy isset() checks to the underlying base response. + * + * @param string $key + * @return mixed + */ + public function __isset($key) + { + return isset($this->baseResponse->{$key}); + } + + /** + * Determine if the given offset exists. + * + * @param string $offset + * @return bool + */ + public function offsetExists($offset) + { + return $this->responseHasView() + ? isset($this->original->gatherData()[$offset]) + : isset($this->json()[$offset]); + } + + /** + * Get the value for a given offset. + * + * @param string $offset + * @return mixed + */ + public function offsetGet($offset) + { + return $this->responseHasView() + ? $this->viewData($offset) + : $this->json()[$offset]; + } + + /** + * Set the value at the given offset. + * + * @param string $offset + * @param mixed $value + * @return void + * + * @throws \LogicException + */ + public function offsetSet($offset, $value) + { + throw new LogicException('Response data may not be mutated using array access.'); + } + + /** + * Unset the value at the given offset. + * + * @param string $offset + * @return void + * + * @throws \LogicException + */ + public function offsetUnset($offset) + { + throw new LogicException('Response data may not be mutated using array access.'); + } + + /** + * Handle dynamic calls into macros or pass missing methods to the base response. + * + * @param string $method + * @param array $args + * @return mixed + */ + public function __call($method, $args) + { + if (static::hasMacro($method)) { + return $this->macroCall($method, $args); + } + + return $this->baseResponse->{$method}(...$args); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Testing/composer.json b/vendor/laravel/framework/src/Illuminate/Testing/composer.json new file mode 100644 index 00000000..1c18d912 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/composer.json @@ -0,0 +1,43 @@ +{ + "name": "illuminate/testing", + "description": "The Illuminate Testing package.", + "license": "MIT", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "require": { + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0", + "symfony/polyfill-php73": "^1.17" + }, + "autoload": { + "psr-4": { + "Illuminate\\Testing\\": "" + } + }, + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "suggest": { + "illuminate/console": "Required to assert console commands (^7.0).", + "illuminate/database": "Required to assert databases (^7.0).", + "illuminate/http": "Required to assert responses (^7.0).", + "mockery/mockery": "Required to use mocking (~1.3.3|^1.4.2).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.3.3)." + }, + "config": { + "sort-packages": true + }, + "minimum-stability": "dev" +} diff --git a/vendor/laravel/framework/src/Illuminate/Translation/ArrayLoader.php b/vendor/laravel/framework/src/Illuminate/Translation/ArrayLoader.php index 47482d45..117e0440 100644 --- a/vendor/laravel/framework/src/Illuminate/Translation/ArrayLoader.php +++ b/vendor/laravel/framework/src/Illuminate/Translation/ArrayLoader.php @@ -18,18 +18,14 @@ class ArrayLoader implements Loader * * @param string $locale * @param string $group - * @param string $namespace + * @param string|null $namespace * @return array */ public function load($locale, $group, $namespace = null) { $namespace = $namespace ?: '*'; - if (isset($this->messages[$namespace][$locale][$group])) { - return $this->messages[$namespace][$locale][$group]; - } - - return []; + return $this->messages[$namespace][$locale][$group] ?? []; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php b/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php index d2d21d26..17f6e59f 100755 --- a/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php +++ b/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php @@ -2,9 +2,9 @@ namespace Illuminate\Translation; -use RuntimeException; -use Illuminate\Filesystem\Filesystem; use Illuminate\Contracts\Translation\Loader; +use Illuminate\Filesystem\Filesystem; +use RuntimeException; class FileLoader implements Loader { @@ -54,7 +54,7 @@ class FileLoader implements Loader * * @param string $locale * @param string $group - * @param string $namespace + * @param string|null $namespace * @return array */ public function load($locale, $group, $namespace = null) diff --git a/vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php b/vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php index 3f63a531..c1328d59 100755 --- a/vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php +++ b/vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php @@ -100,7 +100,7 @@ class MessageSelector * Get the index to use for pluralization. * * The plural rules are derived from code of the Zend Framework (2010-09-25), which - * is subject to the new BSD license (http://framework.zend.com/license/new-bsd) + * is subject to the new BSD license (https://framework.zend.com/license) * Copyright (c) 2005-2010 - Zend Technologies USA Inc. (http://www.zend.com) * * @param string $locale diff --git a/vendor/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php index f0dd3fe7..7455b52a 100755 --- a/vendor/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php @@ -2,17 +2,11 @@ namespace Illuminate\Translation; +use Illuminate\Contracts\Support\DeferrableProvider; use Illuminate\Support\ServiceProvider; -class TranslationServiceProvider extends ServiceProvider +class TranslationServiceProvider extends ServiceProvider implements DeferrableProvider { - /** - * Indicates if loading of the provider is deferred. - * - * @var bool - */ - protected $defer = true; - /** * Register the service provider. * diff --git a/vendor/laravel/framework/src/Illuminate/Translation/Translator.php b/vendor/laravel/framework/src/Illuminate/Translation/Translator.php index 190f3bbc..0f1606e8 100755 --- a/vendor/laravel/framework/src/Illuminate/Translation/Translator.php +++ b/vendor/laravel/framework/src/Illuminate/Translation/Translator.php @@ -3,13 +3,14 @@ namespace Illuminate\Translation; use Countable; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Support\Collection; -use Illuminate\Support\Traits\Macroable; use Illuminate\Contracts\Translation\Loader; -use Illuminate\Support\NamespacedItemResolver; use Illuminate\Contracts\Translation\Translator as TranslatorContract; +use Illuminate\Support\Arr; +use Illuminate\Support\Collection; +use Illuminate\Support\NamespacedItemResolver; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use InvalidArgumentException; class Translator extends NamespacedItemResolver implements TranslatorContract { @@ -60,7 +61,8 @@ class Translator extends NamespacedItemResolver implements TranslatorContract public function __construct(Loader $loader, $locale) { $this->loader = $loader; - $this->locale = $locale; + + $this->setLocale($locale); } /** @@ -88,65 +90,16 @@ class Translator extends NamespacedItemResolver implements TranslatorContract return $this->get($key, [], $locale, $fallback) !== $key; } - /** - * Get the translation for a given key. - * - * @param string $key - * @param array $replace - * @param string $locale - * @return string|array - */ - public function trans($key, array $replace = [], $locale = null) - { - return $this->get($key, $replace, $locale); - } - /** * Get the translation for the given key. * * @param string $key - * @param array $replace + * @param array $replace * @param string|null $locale * @param bool $fallback * @return string|array */ public function get($key, array $replace = [], $locale = null, $fallback = true) - { - [$namespace, $group, $item] = $this->parseKey($key); - - // Here we will get the locale that should be used for the language line. If one - // was not passed, we will use the default locales which was given to us when - // the translator was instantiated. Then, we can load the lines and return. - $locales = $fallback ? $this->localeArray($locale) - : [$locale ?: $this->locale]; - - foreach ($locales as $locale) { - if (! is_null($line = $this->getLine( - $namespace, $group, $locale, $item, $replace - ))) { - break; - } - } - - // If the line doesn't exist, we will return back the key which was requested as - // that will be quick to spot in the UI if language keys are wrong or missing - // from the application's language files. Otherwise we can return the line. - if (isset($line)) { - return $line; - } - - return $key; - } - - /** - * Get the translation for a given key from the JSON translation files. - * - * @param string $key - * @param array $replace - * @param string $locale - * @return string|array - */ - public function getFromJson($key, array $replace = [], $locale = null) { $locale = $locale ?: $this->locale; @@ -161,13 +114,25 @@ class Translator extends NamespacedItemResolver implements TranslatorContract // using the typical translation file. This way developers can always just use a // helper such as __ instead of having to pick between trans or __ with views. if (! isset($line)) { - $fallback = $this->get($key, $replace, $locale); + [$namespace, $group, $item] = $this->parseKey($key); - if ($fallback !== $key) { - return $fallback; + // Here we will get the locale that should be used for the language line. If one + // was not passed, we will use the default locales which was given to us when + // the translator was instantiated. Then, we can load the lines and return. + $locales = $fallback ? $this->localeArray($locale) : [$locale]; + + foreach ($locales as $locale) { + if (! is_null($line = $this->getLine( + $namespace, $group, $locale, $item, $replace + ))) { + return $line ?? $key; + } } } + // If the line doesn't exist, we will return back the key which was requested as + // that will be quick to spot in the UI if language keys are wrong or missing + // from the application's language files. Otherwise we can return the line. return $this->makeReplacements($line ?: $key, $replace); } @@ -175,23 +140,9 @@ class Translator extends NamespacedItemResolver implements TranslatorContract * Get a translation according to an integer value. * * @param string $key - * @param int|array|\Countable $number - * @param array $replace - * @param string $locale - * @return string - */ - public function transChoice($key, $number, array $replace = [], $locale = null) - { - return $this->choice($key, $number, $replace, $locale); - } - - /** - * Get a translation according to an integer value. - * - * @param string $key - * @param int|array|\Countable $number - * @param array $replace - * @param string $locale + * @param \Countable|int|array $number + * @param array $replace + * @param string|null $locale * @return string */ public function choice($key, $number, array $replace = [], $locale = null) @@ -232,7 +183,7 @@ class Translator extends NamespacedItemResolver implements TranslatorContract * @param string $group * @param string $locale * @param string $item - * @param array $replace + * @param array $replace * @return string|array|null */ protected function getLine($namespace, $group, $locale, $item, array $replace) @@ -256,7 +207,7 @@ class Translator extends NamespacedItemResolver implements TranslatorContract * Make the place-holder replacements on a line. * * @param string $line - * @param array $replace + * @param array $replace * @return string */ protected function makeReplacements($line, array $replace) @@ -457,6 +408,10 @@ class Translator extends NamespacedItemResolver implements TranslatorContract */ public function setLocale($locale) { + if (Str::contains($locale, ['/', '\\'])) { + throw new InvalidArgumentException('Invalid characters present in locale.'); + } + $this->locale = $locale; } diff --git a/vendor/laravel/framework/src/Illuminate/Translation/composer.json b/vendor/laravel/framework/src/Illuminate/Translation/composer.json index d8784d7c..61685c3a 100755 --- a/vendor/laravel/framework/src/Illuminate/Translation/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Translation/composer.json @@ -14,10 +14,11 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.7.*", - "illuminate/filesystem": "5.7.*", - "illuminate/support": "5.7.*" + "php": "^7.2.5|^8.0", + "ext-json": "*", + "illuminate/contracts": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -26,7 +27,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.7-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FilterEmailValidation.php b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FilterEmailValidation.php new file mode 100644 index 00000000..2d21b6c5 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FilterEmailValidation.php @@ -0,0 +1,71 @@ +flags = $flags; + } + + /** + * Create a new instance which allows any unicode characters in local-part. + * + * @return static + */ + public static function unicode() + { + return new static(FILTER_FLAG_EMAIL_UNICODE); + } + + /** + * Returns true if the given email is valid. + * + * @param string $email + * @param \Egulias\EmailValidator\EmailLexer $emailLexer + * @return bool + */ + public function isValid($email, EmailLexer $emailLexer) + { + return is_null($this->flags) + ? filter_var($email, FILTER_VALIDATE_EMAIL) !== false + : filter_var($email, FILTER_VALIDATE_EMAIL, $this->flags) !== false; + } + + /** + * Returns the validation error. + * + * @return \Egulias\EmailValidator\Exception\InvalidEmail|null + */ + public function getError() + { + // + } + + /** + * Returns the validation warnings. + * + * @return \Egulias\EmailValidator\Warning\Warning[] + */ + public function getWarnings() + { + return []; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FormatsMessages.php b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FormatsMessages.php index c3dc5765..e380b6e1 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FormatsMessages.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FormatsMessages.php @@ -54,7 +54,7 @@ trait FormatsMessages // messages out of the translator service for this validation rule. $key = "validation.{$lowerRule}"; - if ($key != ($value = $this->translator->trans($key))) { + if ($key != ($value = $this->translator->get($key))) { return $value; } @@ -98,6 +98,16 @@ trait FormatsMessages // that is not attribute specific. If we find either we'll return it. foreach ($keys as $key) { foreach (array_keys($source) as $sourceKey) { + if (strpos($sourceKey, '*') !== false) { + $pattern = str_replace('\*', '([^.]*)', preg_quote($sourceKey, '#')); + + if (preg_match('#^'.$pattern.'\z#u', $key) === 1) { + return $source[$sourceKey]; + } + + continue; + } + if (Str::is($sourceKey, $key)) { return $source[$sourceKey]; } @@ -113,7 +123,7 @@ trait FormatsMessages */ protected function getCustomMessageFromTranslator($key) { - if (($message = $this->translator->trans($key)) !== $key) { + if (($message = $this->translator->get($key)) !== $key) { return $message; } @@ -125,7 +135,7 @@ trait FormatsMessages ); return $this->getWildcardCustomMessages(Arr::dot( - (array) $this->translator->trans('validation.custom') + (array) $this->translator->get('validation.custom') ), $shortKey, $key); } @@ -166,7 +176,7 @@ trait FormatsMessages $key = "validation.{$lowerRule}.{$type}"; - return $this->translator->trans($key); + return $this->translator->get($key); } /** @@ -197,7 +207,7 @@ trait FormatsMessages * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ public function makeReplacements($message, $attribute, $rule, $parameters) @@ -250,7 +260,9 @@ trait FormatsMessages // an implicit attribute we will display the raw attribute's name and not // modify it with any of these replacements before we display the name. if (isset($this->implicitAttributes[$primaryAttribute])) { - return $attribute; + return ($formatter = $this->implicitAttributesFormatter) + ? $formatter($attribute) + : $attribute; } return str_replace('_', ' ', Str::snake($attribute)); @@ -264,7 +276,7 @@ trait FormatsMessages */ protected function getAttributeFromTranslations($name) { - return Arr::get($this->translator->trans('validation.attributes'), $name); + return Arr::get($this->translator->get('validation.attributes'), $name); } /** @@ -295,7 +307,7 @@ trait FormatsMessages $actualValue = $this->getValue($attribute); if (is_scalar($actualValue) || is_null($actualValue)) { - $message = str_replace(':input', $actualValue, $message); + $message = str_replace(':input', $this->getDisplayableValue($attribute, $actualValue), $message); } return $message; @@ -305,7 +317,7 @@ trait FormatsMessages * Get the displayable name of the value. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return string */ public function getDisplayableValue($attribute, $value) @@ -316,10 +328,14 @@ trait FormatsMessages $key = "validation.values.{$attribute}.{$value}"; - if (($line = $this->translator->trans($key)) !== $key) { + if (($line = $this->translator->get($key)) !== $key) { return $line; } + if (is_bool($value)) { + return $value ? 'true' : 'false'; + } + return $value; } @@ -349,7 +365,7 @@ trait FormatsMessages * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @param \Illuminate\Validation\Validator $validator * @return string|null */ @@ -358,7 +374,7 @@ trait FormatsMessages $callback = $this->replacers[$rule]; if ($callback instanceof Closure) { - return call_user_func_array($callback, func_get_args()); + return $callback(...func_get_args()); } elseif (is_string($callback)) { return $this->callClassBasedReplacer($callback, $message, $attribute, $rule, $parameters, $validator); } @@ -371,7 +387,7 @@ trait FormatsMessages * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @param \Illuminate\Validation\Validator $validator * @return string */ @@ -379,6 +395,6 @@ trait FormatsMessages { [$class, $method] = Str::parseCallback($callback, 'replace'); - return call_user_func_array([$this->container->make($class), $method], array_slice(func_get_args(), 1)); + return $this->container->make($class)->{$method}(...array_slice(func_get_args(), 1)); } } diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php index fd2c1665..f5c3eb00 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php @@ -12,7 +12,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceBetween($message, $attribute, $rule, $parameters) @@ -26,7 +26,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceDateFormat($message, $attribute, $rule, $parameters) @@ -40,7 +40,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceDifferent($message, $attribute, $rule, $parameters) @@ -54,7 +54,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceDigits($message, $attribute, $rule, $parameters) @@ -68,7 +68,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceDigitsBetween($message, $attribute, $rule, $parameters) @@ -82,7 +82,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceMin($message, $attribute, $rule, $parameters) @@ -96,7 +96,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceMax($message, $attribute, $rule, $parameters) @@ -110,7 +110,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceIn($message, $attribute, $rule, $parameters) @@ -128,7 +128,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceNotIn($message, $attribute, $rule, $parameters) @@ -142,7 +142,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceInArray($message, $attribute, $rule, $parameters) @@ -156,7 +156,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceMimetypes($message, $attribute, $rule, $parameters) @@ -170,7 +170,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceMimes($message, $attribute, $rule, $parameters) @@ -184,7 +184,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceRequiredWith($message, $attribute, $rule, $parameters) @@ -198,7 +198,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceRequiredWithAll($message, $attribute, $rule, $parameters) @@ -212,7 +212,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceRequiredWithout($message, $attribute, $rule, $parameters) @@ -226,7 +226,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceRequiredWithoutAll($message, $attribute, $rule, $parameters) @@ -240,7 +240,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceSize($message, $attribute, $rule, $parameters) @@ -254,13 +254,13 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceGt($message, $attribute, $rule, $parameters) { if (is_null($value = $this->getValue($parameters[0]))) { - return str_replace(':value', $parameters[0], $message); + return str_replace(':value', $this->getDisplayableAttribute($parameters[0]), $message); } return str_replace(':value', $this->getSize($attribute, $value), $message); @@ -272,13 +272,13 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceLt($message, $attribute, $rule, $parameters) { if (is_null($value = $this->getValue($parameters[0]))) { - return str_replace(':value', $parameters[0], $message); + return str_replace(':value', $this->getDisplayableAttribute($parameters[0]), $message); } return str_replace(':value', $this->getSize($attribute, $value), $message); @@ -290,13 +290,13 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceGte($message, $attribute, $rule, $parameters) { if (is_null($value = $this->getValue($parameters[0]))) { - return str_replace(':value', $parameters[0], $message); + return str_replace(':value', $this->getDisplayableAttribute($parameters[0]), $message); } return str_replace(':value', $this->getSize($attribute, $value), $message); @@ -308,13 +308,13 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceLte($message, $attribute, $rule, $parameters) { if (is_null($value = $this->getValue($parameters[0]))) { - return str_replace(':value', $parameters[0], $message); + return str_replace(':value', $this->getDisplayableAttribute($parameters[0]), $message); } return str_replace(':value', $this->getSize($attribute, $value), $message); @@ -326,7 +326,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceRequiredIf($message, $attribute, $rule, $parameters) @@ -344,7 +344,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceRequiredUnless($message, $attribute, $rule, $parameters) @@ -366,7 +366,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceSame($message, $attribute, $rule, $parameters) @@ -380,7 +380,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceBefore($message, $attribute, $rule, $parameters) @@ -398,7 +398,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceBeforeOrEqual($message, $attribute, $rule, $parameters) @@ -412,7 +412,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceAfter($message, $attribute, $rule, $parameters) @@ -426,7 +426,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceAfterOrEqual($message, $attribute, $rule, $parameters) @@ -440,7 +440,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceDateEquals($message, $attribute, $rule, $parameters) @@ -454,7 +454,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceDimensions($message, $attribute, $rule, $parameters) @@ -470,13 +470,31 @@ trait ReplacesAttributes return $message; } + /** + * Replace all place-holders for the ends_with rule. + * + * @param string $message + * @param string $attribute + * @param string $rule + * @param array $parameters + * @return string + */ + protected function replaceEndsWith($message, $attribute, $rule, $parameters) + { + foreach ($parameters as &$parameter) { + $parameter = $this->getDisplayableValue($attribute, $parameter); + } + + return str_replace(':values', implode(', ', $parameters), $message); + } + /** * Replace all place-holders for the starts_with rule. * * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceStartsWith($message, $attribute, $rule, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php index e10d6943..a361439b 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php @@ -2,19 +2,25 @@ namespace Illuminate\Validation\Concerns; -use DateTime; use Countable; -use Exception; -use Throwable; -use DateTimeZone; +use DateTime; use DateTimeInterface; +use Egulias\EmailValidator\EmailValidator; +use Egulias\EmailValidator\Validation\DNSCheckValidation; +use Egulias\EmailValidator\Validation\MultipleValidationWithAnd; +use Egulias\EmailValidator\Validation\NoRFCWarningsValidation; +use Egulias\EmailValidator\Validation\RFCValidation; +use Egulias\EmailValidator\Validation\SpoofCheckValidation; +use Exception; +use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use InvalidArgumentException; use Illuminate\Support\Carbon; +use Illuminate\Support\Facades\Date; +use Illuminate\Support\Str; use Illuminate\Validation\Rules\Exists; use Illuminate\Validation\Rules\Unique; use Illuminate\Validation\ValidationData; +use InvalidArgumentException; use Symfony\Component\HttpFoundation\File\File; use Symfony\Component\HttpFoundation\File\UploadedFile; @@ -26,7 +32,7 @@ trait ValidatesAttributes * This validation rule implies the attribute is "required". * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateAccepted($attribute, $value) @@ -40,7 +46,7 @@ trait ValidatesAttributes * Validate that an attribute is an active URL. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateActiveUrl($attribute, $value) @@ -76,8 +82,8 @@ trait ValidatesAttributes * Validate the date is before a given date. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateBefore($attribute, $value, $parameters) @@ -91,8 +97,8 @@ trait ValidatesAttributes * Validate the date is before or equal a given date. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateBeforeOrEqual($attribute, $value, $parameters) @@ -106,8 +112,8 @@ trait ValidatesAttributes * Validate the date is after a given date. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateAfter($attribute, $value, $parameters) @@ -121,8 +127,8 @@ trait ValidatesAttributes * Validate the date is equal or after a given date. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateAfterOrEqual($attribute, $value, $parameters) @@ -233,17 +239,17 @@ trait ValidatesAttributes /** * Get a DateTime instance from a string with no format. * - * @param string $value + * @param string $value * @return \DateTime|null */ protected function getDateTime($value) { try { if ($this->isTestingRelativeDateTime($value)) { - return new Carbon($value); + return Date::parse($value); } - return new DateTime($value); + return date_create($value) ?: null; } catch (Exception $e) { // } @@ -252,7 +258,7 @@ trait ValidatesAttributes /** * Check if the given value should be adjusted to Carbon::getTestNow(). * - * @param mixed $value + * @param mixed $value * @return bool */ protected function isTestingRelativeDateTime($value) @@ -266,7 +272,7 @@ trait ValidatesAttributes * Validate that an attribute contains only alphabetic characters. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateAlpha($attribute, $value) @@ -278,7 +284,7 @@ trait ValidatesAttributes * Validate that an attribute contains only alpha-numeric characters, dashes, and underscores. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateAlphaDash($attribute, $value) @@ -294,7 +300,7 @@ trait ValidatesAttributes * Validate that an attribute contains only alpha-numeric characters. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateAlphaNum($attribute, $value) @@ -310,20 +316,29 @@ trait ValidatesAttributes * Validate that an attribute is an array. * * @param string $attribute - * @param mixed $value + * @param mixed $value + * @param array $parameters * @return bool */ - public function validateArray($attribute, $value) + public function validateArray($attribute, $value, $parameters = []) { - return is_array($value); + if (! is_array($value)) { + return false; + } + + if (empty($parameters)) { + return true; + } + + return empty(array_diff_key($value, array_fill_keys($parameters, ''))); } /** * Validate the size of an attribute is between a set of values. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateBetween($attribute, $value, $parameters) @@ -339,7 +354,7 @@ trait ValidatesAttributes * Validate that an attribute is a boolean. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateBoolean($attribute, $value) @@ -353,7 +368,7 @@ trait ValidatesAttributes * Validate that an attribute has a matching confirmation. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateConfirmed($attribute, $value) @@ -365,7 +380,7 @@ trait ValidatesAttributes * Validate that an attribute is a valid date. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateDate($attribute, $value) @@ -387,8 +402,8 @@ trait ValidatesAttributes * Validate that an attribute matches a date format. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDateFormat($attribute, $value, $parameters) @@ -410,8 +425,8 @@ trait ValidatesAttributes * Validate that an attribute is equal to another date. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDateEquals($attribute, $value, $parameters) @@ -425,8 +440,8 @@ trait ValidatesAttributes * Validate that an attribute is different from another attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDifferent($attribute, $value, $parameters) @@ -434,10 +449,12 @@ trait ValidatesAttributes $this->requireParameterCount(1, $parameters, 'different'); foreach ($parameters as $parameter) { - $other = Arr::get($this->data, $parameter); + if (Arr::has($this->data, $parameter)) { + $other = Arr::get($this->data, $parameter); - if (is_null($other) || $value === $other) { - return false; + if ($value === $other) { + return false; + } } } @@ -448,8 +465,8 @@ trait ValidatesAttributes * Validate that an attribute has a given number of digits. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDigits($attribute, $value, $parameters) @@ -464,8 +481,8 @@ trait ValidatesAttributes * Validate that an attribute is between a given number of digits. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDigitsBetween($attribute, $value, $parameters) @@ -481,14 +498,14 @@ trait ValidatesAttributes /** * Validate the dimensions of an image matches the given values. * - * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param string $attribute + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDimensions($attribute, $value, $parameters) { - if ($this->isValidFileInstance($value) && $value->getClientMimeType() === 'image/svg+xml') { + if ($this->isValidFileInstance($value) && in_array($value->getMimeType(), ['image/svg+xml', 'image/svg'])) { return true; } @@ -546,7 +563,7 @@ trait ValidatesAttributes [1, 1], array_filter(sscanf($parameters['ratio'], '%f/%d')) ); - $precision = 1 / max($width, $height); + $precision = 1 / (max($width, $height) + 1); return abs($numerator / $denominator - $width / $height) > $precision; } @@ -555,8 +572,8 @@ trait ValidatesAttributes * Validate an attribute is unique among other values. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDistinct($attribute, $value, $parameters) @@ -614,20 +631,47 @@ trait ValidatesAttributes * Validate that an attribute is a valid e-mail address. * * @param string $attribute - * @param mixed $value + * @param mixed $value + * @param array $parameters * @return bool */ - public function validateEmail($attribute, $value) + public function validateEmail($attribute, $value, $parameters) { - return filter_var($value, FILTER_VALIDATE_EMAIL) !== false; + if (! is_string($value) && ! (is_object($value) && method_exists($value, '__toString'))) { + return false; + } + + $validations = collect($parameters) + ->unique() + ->map(function ($validation) { + if ($validation === 'rfc') { + return new RFCValidation(); + } elseif ($validation === 'strict') { + return new NoRFCWarningsValidation(); + } elseif ($validation === 'dns') { + return new DNSCheckValidation(); + } elseif ($validation === 'spoof') { + return new SpoofCheckValidation(); + } elseif ($validation === 'filter') { + return new FilterEmailValidation(); + } elseif ($validation === 'filter_unicode') { + return FilterEmailValidation::unicode(); + } elseif (is_string($validation) && class_exists($validation)) { + return $this->container->make($validation); + } + }) + ->values() + ->all() ?: [new RFCValidation()]; + + return (new EmailValidator)->isValid($value, new MultipleValidationWithAnd($validations)); } /** * Validate the existence of an attribute value in a database table. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateExists($attribute, $value, $parameters) @@ -651,16 +695,16 @@ trait ValidatesAttributes /** * Get the number of records that exist in storage. * - * @param mixed $connection + * @param mixed $connection * @param string $table * @param string $column - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return int */ protected function getExistCount($connection, $table, $column, $value, $parameters) { - $verifier = $this->getPresenceVerifierFor($connection); + $verifier = $this->getPresenceVerifier($connection); $extra = $this->getExtraConditions( array_values(array_slice($parameters, 2)) @@ -681,31 +725,35 @@ trait ValidatesAttributes * If a database column is not specified, the attribute will be used. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateUnique($attribute, $value, $parameters) { $this->requireParameterCount(1, $parameters, 'unique'); - [$connection, $table] = $this->parseTable($parameters[0]); + [$connection, $table, $idColumn] = $this->parseTable($parameters[0]); // The second parameter position holds the name of the column that needs to // be verified as unique. If this parameter isn't specified we will just // assume that this column to be verified shares the attribute's name. $column = $this->getQueryColumn($parameters, $attribute); - [$idColumn, $id] = [null, null]; + $id = null; if (isset($parameters[2])) { - [$idColumn, $id] = $this->getUniqueIds($parameters); + [$idColumn, $id] = $this->getUniqueIds($idColumn, $parameters); + + if (! is_null($id)) { + $id = stripslashes($id); + } } // The presence verifier is responsible for counting rows within this store // mechanism which might be a relational database or any other permanent // data store like Redis, etc. We will use it to determine uniqueness. - $verifier = $this->getPresenceVerifierFor($connection); + $verifier = $this->getPresenceVerifier($connection); $extra = $this->getUniqueExtra($parameters); @@ -721,12 +769,13 @@ trait ValidatesAttributes /** * Get the excluded ID column and value for the unique rule. * + * @param string|null $idColumn * @param array $parameters * @return array */ - protected function getUniqueIds($parameters) + protected function getUniqueIds($idColumn, $parameters) { - $idColumn = $parameters[3] ?? 'id'; + $idColumn = $idColumn ?? $parameters[3] ?? 'id'; return [$idColumn, $this->prepareUniqueId($parameters[2])]; } @@ -775,9 +824,19 @@ trait ValidatesAttributes * @param string $table * @return array */ - protected function parseTable($table) + public function parseTable($table) { - return Str::contains($table, '.') ? explode('.', $table, 2) : [null, $table]; + [$connection, $table] = Str::contains($table, '.') ? explode('.', $table, 2) : [null, $table]; + + if (Str::contains($table, '\\') && class_exists($table) && is_a($table, Model::class, true)) { + $model = new $table; + + $table = $model->getTable(); + $connection = $connection ?? $model->getConnectionName(); + $idColumn = $model->getKeyName(); + } + + return [$connection, $table, $idColumn ?? null]; } /** @@ -787,7 +846,7 @@ trait ValidatesAttributes * @param string $attribute * @return bool */ - protected function getQueryColumn($parameters, $attribute) + public function getQueryColumn($parameters, $attribute) { return isset($parameters[1]) && $parameters[1] !== 'NULL' ? $parameters[1] : $this->guessColumnForQuery($attribute); @@ -832,7 +891,7 @@ trait ValidatesAttributes * Validate the given value is a valid file. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateFile($attribute, $value) @@ -844,7 +903,7 @@ trait ValidatesAttributes * Validate the given attribute is filled if it is present. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateFilled($attribute, $value) @@ -860,8 +919,8 @@ trait ValidatesAttributes * Validate that an attribute is greater than another attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateGt($attribute, $value, $parameters) @@ -876,7 +935,17 @@ trait ValidatesAttributes return $this->getSize($attribute, $value) > $parameters[0]; } - $this->requireSameType($value, $comparedToValue); + if (is_numeric($parameters[0])) { + return false; + } + + if ($this->hasRule($attribute, $this->numericRules) && is_numeric($value) && is_numeric($comparedToValue)) { + return $value > $comparedToValue; + } + + if (! $this->isSameType($value, $comparedToValue)) { + return false; + } return $this->getSize($attribute, $value) > $this->getSize($attribute, $comparedToValue); } @@ -885,8 +954,8 @@ trait ValidatesAttributes * Validate that an attribute is less than another attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateLt($attribute, $value, $parameters) @@ -901,7 +970,17 @@ trait ValidatesAttributes return $this->getSize($attribute, $value) < $parameters[0]; } - $this->requireSameType($value, $comparedToValue); + if (is_numeric($parameters[0])) { + return false; + } + + if ($this->hasRule($attribute, $this->numericRules) && is_numeric($value) && is_numeric($comparedToValue)) { + return $value < $comparedToValue; + } + + if (! $this->isSameType($value, $comparedToValue)) { + return false; + } return $this->getSize($attribute, $value) < $this->getSize($attribute, $comparedToValue); } @@ -910,8 +989,8 @@ trait ValidatesAttributes * Validate that an attribute is greater than or equal another attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateGte($attribute, $value, $parameters) @@ -926,7 +1005,17 @@ trait ValidatesAttributes return $this->getSize($attribute, $value) >= $parameters[0]; } - $this->requireSameType($value, $comparedToValue); + if (is_numeric($parameters[0])) { + return false; + } + + if ($this->hasRule($attribute, $this->numericRules) && is_numeric($value) && is_numeric($comparedToValue)) { + return $value >= $comparedToValue; + } + + if (! $this->isSameType($value, $comparedToValue)) { + return false; + } return $this->getSize($attribute, $value) >= $this->getSize($attribute, $comparedToValue); } @@ -935,8 +1024,8 @@ trait ValidatesAttributes * Validate that an attribute is less than or equal another attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateLte($attribute, $value, $parameters) @@ -951,7 +1040,17 @@ trait ValidatesAttributes return $this->getSize($attribute, $value) <= $parameters[0]; } - $this->requireSameType($value, $comparedToValue); + if (is_numeric($parameters[0])) { + return false; + } + + if ($this->hasRule($attribute, $this->numericRules) && is_numeric($value) && is_numeric($comparedToValue)) { + return $value <= $comparedToValue; + } + + if (! $this->isSameType($value, $comparedToValue)) { + return false; + } return $this->getSize($attribute, $value) <= $this->getSize($attribute, $comparedToValue); } @@ -960,20 +1059,20 @@ trait ValidatesAttributes * Validate the MIME type of a file is an image MIME type. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateImage($attribute, $value) { - return $this->validateMimes($attribute, $value, ['jpeg', 'png', 'gif', 'bmp', 'svg']); + return $this->validateMimes($attribute, $value, ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp']); } /** * Validate an attribute is contained within a list of values. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateIn($attribute, $value, $parameters) @@ -995,8 +1094,8 @@ trait ValidatesAttributes * Validate that the values of an attribute is in another attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateInArray($attribute, $value, $parameters) @@ -1018,7 +1117,7 @@ trait ValidatesAttributes * Validate that an attribute is an integer. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateInteger($attribute, $value) @@ -1030,7 +1129,7 @@ trait ValidatesAttributes * Validate that an attribute is a valid IP. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateIp($attribute, $value) @@ -1042,7 +1141,7 @@ trait ValidatesAttributes * Validate that an attribute is a valid IPv4. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateIpv4($attribute, $value) @@ -1054,7 +1153,7 @@ trait ValidatesAttributes * Validate that an attribute is a valid IPv6. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateIpv6($attribute, $value) @@ -1066,12 +1165,16 @@ trait ValidatesAttributes * Validate the attribute is a valid JSON string. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateJson($attribute, $value) { - if (! is_scalar($value) && ! method_exists($value, '__toString')) { + if (is_array($value)) { + return false; + } + + if (! is_scalar($value) && ! is_null($value) && ! method_exists($value, '__toString')) { return false; } @@ -1084,8 +1187,8 @@ trait ValidatesAttributes * Validate the size of an attribute is less than a maximum value. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateMax($attribute, $value, $parameters) @@ -1104,7 +1207,7 @@ trait ValidatesAttributes * * @param string $attribute * @param mixed $value - * @param array $parameters + * @param array $parameters * @return bool */ public function validateMimes($attribute, $value, $parameters) @@ -1117,6 +1220,10 @@ trait ValidatesAttributes return false; } + if (in_array('jpg', $parameters) || in_array('jpeg', $parameters)) { + $parameters = array_unique(array_merge($parameters, ['jpg', 'jpeg'])); + } + return $value->getPath() !== '' && in_array($value->guessExtension(), $parameters); } @@ -1157,7 +1264,7 @@ trait ValidatesAttributes } $phpExtensions = [ - 'php', 'php3', 'php4', 'php5', 'phtml', + 'php', 'php3', 'php4', 'php5', 'phtml', 'phar', ]; return ($value instanceof UploadedFile) @@ -1169,8 +1276,8 @@ trait ValidatesAttributes * Validate the size of an attribute is greater than a minimum value. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateMin($attribute, $value, $parameters) @@ -1196,8 +1303,8 @@ trait ValidatesAttributes * Validate an attribute is not contained within a list of values. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateNotIn($attribute, $value, $parameters) @@ -1209,7 +1316,7 @@ trait ValidatesAttributes * Validate that an attribute is numeric. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateNumeric($attribute, $value) @@ -1217,11 +1324,33 @@ trait ValidatesAttributes return is_numeric($value); } + /** + * Validate that the current logged in user's password matches the given value. + * + * @param string $attribute + * @param mixed $value + * @param array $parameters + * @return bool + */ + protected function validatePassword($attribute, $value, $parameters) + { + $auth = $this->container->make('auth'); + $hasher = $this->container->make('hash'); + + $guard = $auth->guard(Arr::first($parameters)); + + if ($guard->guest()) { + return false; + } + + return $hasher->check($value, $guard->user()->getAuthPassword()); + } + /** * Validate that an attribute exists even if not filled. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validatePresent($attribute, $value) @@ -1233,8 +1362,8 @@ trait ValidatesAttributes * Validate that an attribute passes a regular expression check. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateRegex($attribute, $value, $parameters) @@ -1252,8 +1381,8 @@ trait ValidatesAttributes * Validate that an attribute does not pass a regular expression check. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateNotRegex($attribute, $value, $parameters) @@ -1271,7 +1400,7 @@ trait ValidatesAttributes * Validate that a required attribute exists. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateRequired($attribute, $value) @@ -1293,14 +1422,84 @@ trait ValidatesAttributes * Validate that an attribute exists when another attribute has a given value. * * @param string $attribute - * @param mixed $value - * @param mixed $parameters + * @param mixed $value + * @param mixed $parameters * @return bool */ public function validateRequiredIf($attribute, $value, $parameters) { $this->requireParameterCount(2, $parameters, 'required_if'); + [$values, $other] = $this->prepareValuesAndOther($parameters); + + if (in_array($other, $values)) { + return $this->validateRequired($attribute, $value); + } + + return true; + } + + /** + * Indicate that an attribute should be excluded when another attribute has a given value. + * + * @param string $attribute + * @param mixed $value + * @param mixed $parameters + * @return bool + */ + public function validateExcludeIf($attribute, $value, $parameters) + { + $this->requireParameterCount(2, $parameters, 'exclude_if'); + + [$values, $other] = $this->prepareValuesAndOther($parameters); + + return ! in_array($other, $values); + } + + /** + * Indicate that an attribute should be excluded when another attribute does not have a given value. + * + * @param string $attribute + * @param mixed $value + * @param mixed $parameters + * @return bool + */ + public function validateExcludeUnless($attribute, $value, $parameters) + { + $this->requireParameterCount(2, $parameters, 'exclude_unless'); + + [$values, $other] = $this->prepareValuesAndOther($parameters); + + return in_array($other, $values); + } + + /** + * Indicate that an attribute should be excluded when another attribute is missing. + * + * @param string $attribute + * @param mixed $value + * @param mixed $parameters + * @return bool + */ + public function validateExcludeWithout($attribute, $value, $parameters) + { + $this->requireParameterCount(1, $parameters, 'exclude_without'); + + if ($this->anyFailingRequired($parameters)) { + return false; + } + + return true; + } + + /** + * Prepare the values and the other value for validation. + * + * @param array $parameters + * @return array + */ + protected function prepareValuesAndOther($parameters) + { $other = Arr::get($this->data, $parameters[0]); $values = array_slice($parameters, 1); @@ -1309,11 +1508,7 @@ trait ValidatesAttributes $values = $this->convertValuesToBoolean($values); } - if (in_array($other, $values)) { - return $this->validateRequired($attribute, $value); - } - - return true; + return [$values, $other]; } /** @@ -1347,11 +1542,9 @@ trait ValidatesAttributes { $this->requireParameterCount(2, $parameters, 'required_unless'); - $data = Arr::get($this->data, $parameters[0]); + [$values, $other] = $this->prepareValuesAndOther($parameters); - $values = array_slice($parameters, 1); - - if (! in_array($data, $values)) { + if (! in_array($other, $values)) { return $this->validateRequired($attribute, $value); } @@ -1362,8 +1555,8 @@ trait ValidatesAttributes * Validate that an attribute exists when any other attribute exists. * * @param string $attribute - * @param mixed $value - * @param mixed $parameters + * @param mixed $value + * @param mixed $parameters * @return bool */ public function validateRequiredWith($attribute, $value, $parameters) @@ -1379,8 +1572,8 @@ trait ValidatesAttributes * Validate that an attribute exists when all other attributes exists. * * @param string $attribute - * @param mixed $value - * @param mixed $parameters + * @param mixed $value + * @param mixed $parameters * @return bool */ public function validateRequiredWithAll($attribute, $value, $parameters) @@ -1396,8 +1589,8 @@ trait ValidatesAttributes * Validate that an attribute exists when another attribute does not. * * @param string $attribute - * @param mixed $value - * @param mixed $parameters + * @param mixed $value + * @param mixed $parameters * @return bool */ public function validateRequiredWithout($attribute, $value, $parameters) @@ -1413,8 +1606,8 @@ trait ValidatesAttributes * Validate that an attribute exists when all other attributes do not. * * @param string $attribute - * @param mixed $value - * @param mixed $parameters + * @param mixed $value + * @param mixed $parameters * @return bool */ public function validateRequiredWithoutAll($attribute, $value, $parameters) @@ -1464,8 +1657,8 @@ trait ValidatesAttributes * Validate that two attributes match. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateSame($attribute, $value, $parameters) @@ -1481,8 +1674,8 @@ trait ValidatesAttributes * Validate the size of an attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateSize($attribute, $value, $parameters) @@ -1508,8 +1701,8 @@ trait ValidatesAttributes * Validate the attribute starts with a given substring. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateStartsWith($attribute, $value, $parameters) @@ -1517,11 +1710,24 @@ trait ValidatesAttributes return Str::startsWith($value, $parameters); } + /** + * Validate the attribute ends with a given substring. + * + * @param string $attribute + * @param mixed $value + * @param array $parameters + * @return bool + */ + public function validateEndsWith($attribute, $value, $parameters) + { + return Str::endsWith($value, $parameters); + } + /** * Validate that an attribute is a string. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateString($attribute, $value) @@ -1533,27 +1739,19 @@ trait ValidatesAttributes * Validate that an attribute is a valid timezone. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateTimezone($attribute, $value) { - try { - new DateTimeZone($value); - } catch (Exception $e) { - return false; - } catch (Throwable $e) { - return false; - } - - return true; + return in_array($value, timezone_identifiers_list(), true); } /** * Validate that an attribute is a valid URL. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateUrl($attribute, $value) @@ -1563,24 +1761,26 @@ trait ValidatesAttributes } /* - * This pattern is derived from Symfony\Component\Validator\Constraints\UrlValidator (2.7.4). + * This pattern is derived from Symfony\Component\Validator\Constraints\UrlValidator (5.0.7). * * (c) Fabien Potencier http://symfony.com */ $pattern = '~^ - ((aaa|aaas|about|acap|acct|acr|adiumxtra|afp|afs|aim|apt|attachment|aw|barion|beshare|bitcoin|blob|bolo|callto|cap|chrome|chrome-extension|cid|coap|coaps|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-playcontainer|dlna-playsingle|dns|dntp|dtn|dvb|ed2k|example|facetime|fax|feed|feedready|file|filesystem|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|ham|hcp|http|https|iax|icap|icon|im|imap|info|iotdisco|ipn|ipp|ipps|irc|irc6|ircs|iris|iris.beep|iris.lwz|iris.xpc|iris.xpcs|itms|jabber|jar|jms|keyparc|lastfm|ldap|ldaps|magnet|mailserver|mailto|maps|market|message|mid|mms|modem|ms-help|ms-settings|ms-settings-airplanemode|ms-settings-bluetooth|ms-settings-camera|ms-settings-cellular|ms-settings-cloudstorage|ms-settings-emailandaccounts|ms-settings-language|ms-settings-location|ms-settings-lock|ms-settings-nfctransactions|ms-settings-notifications|ms-settings-power|ms-settings-privacy|ms-settings-proximity|ms-settings-screenrotation|ms-settings-wifi|ms-settings-workplace|msnim|msrp|msrps|mtqp|mumble|mupdate|mvn|news|nfs|ni|nih|nntp|notes|oid|opaquelocktoken|pack|palm|paparazzi|pkcs11|platform|pop|pres|prospero|proxy|psyc|query|redis|rediss|reload|res|resource|rmi|rsync|rtmfp|rtmp|rtsp|rtsps|rtspu|secondlife|s3|service|session|sftp|sgn|shttp|sieve|sip|sips|skype|smb|sms|smtp|snews|snmp|soap.beep|soap.beeps|soldat|spotify|ssh|steam|stun|stuns|submit|svn|tag|teamspeak|tel|teliaeid|telnet|tftp|things|thismessage|tip|tn3270|turn|turns|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|videotex|view-source|wais|webcal|ws|wss|wtai|wyciwyg|xcon|xcon-userid|xfire|xmlrpc\.beep|xmlrpc.beeps|xmpp|xri|ymsgr|z39\.50|z39\.50r|z39\.50s)):// # protocol - (([\pL\pN-]+:)?([\pL\pN-]+)@)? # basic auth + (aaa|aaas|about|acap|acct|acd|acr|adiumxtra|adt|afp|afs|aim|amss|android|appdata|apt|ark|attachment|aw|barion|beshare|bitcoin|bitcoincash|blob|bolo|browserext|calculator|callto|cap|cast|casts|chrome|chrome-extension|cid|coap|coap\+tcp|coap\+ws|coaps|coaps\+tcp|coaps\+ws|com-eventbrite-attendee|content|conti|crid|cvs|dab|data|dav|diaspora|dict|did|dis|dlna-playcontainer|dlna-playsingle|dns|dntp|dpp|drm|drop|dtn|dvb|ed2k|elsi|example|facetime|fax|feed|feedready|file|filesystem|finger|first-run-pen-experience|fish|fm|ftp|fuchsia-pkg|geo|gg|git|gizmoproject|go|gopher|graph|gtalk|h323|ham|hcap|hcp|http|https|hxxp|hxxps|hydrazone|iax|icap|icon|im|imap|info|iotdisco|ipn|ipp|ipps|irc|irc6|ircs|iris|iris\.beep|iris\.lwz|iris\.xpc|iris\.xpcs|isostore|itms|jabber|jar|jms|keyparc|lastfm|ldap|ldaps|leaptofrogans|lorawan|lvlt|magnet|mailserver|mailto|maps|market|message|mid|mms|modem|mongodb|moz|ms-access|ms-browser-extension|ms-calculator|ms-drive-to|ms-enrollment|ms-excel|ms-eyecontrolspeech|ms-gamebarservices|ms-gamingoverlay|ms-getoffice|ms-help|ms-infopath|ms-inputapp|ms-lockscreencomponent-config|ms-media-stream-id|ms-mixedrealitycapture|ms-mobileplans|ms-officeapp|ms-people|ms-project|ms-powerpoint|ms-publisher|ms-restoretabcompanion|ms-screenclip|ms-screensketch|ms-search|ms-search-repair|ms-secondary-screen-controller|ms-secondary-screen-setup|ms-settings|ms-settings-airplanemode|ms-settings-bluetooth|ms-settings-camera|ms-settings-cellular|ms-settings-cloudstorage|ms-settings-connectabledevices|ms-settings-displays-topology|ms-settings-emailandaccounts|ms-settings-language|ms-settings-location|ms-settings-lock|ms-settings-nfctransactions|ms-settings-notifications|ms-settings-power|ms-settings-privacy|ms-settings-proximity|ms-settings-screenrotation|ms-settings-wifi|ms-settings-workplace|ms-spd|ms-sttoverlay|ms-transit-to|ms-useractivityset|ms-virtualtouchpad|ms-visio|ms-walk-to|ms-whiteboard|ms-whiteboard-cmd|ms-word|msnim|msrp|msrps|mss|mtqp|mumble|mupdate|mvn|news|nfs|ni|nih|nntp|notes|ocf|oid|onenote|onenote-cmd|opaquelocktoken|openpgp4fpr|pack|palm|paparazzi|payto|pkcs11|platform|pop|pres|prospero|proxy|pwid|psyc|pttp|qb|query|redis|rediss|reload|res|resource|rmi|rsync|rtmfp|rtmp|rtsp|rtsps|rtspu|s3|secondlife|service|session|sftp|sgn|shttp|sieve|simpleledger|sip|sips|skype|smb|sms|smtp|snews|snmp|soap\.beep|soap\.beeps|soldat|spiffe|spotify|ssh|steam|stun|stuns|submit|svn|tag|teamspeak|tel|teliaeid|telnet|tftp|things|thismessage|tip|tn3270|tool|turn|turns|tv|udp|unreal|urn|ut2004|v-event|vemmi|ventrilo|videotex|vnc|view-source|wais|webcal|wpid|ws|wss|wtai|wyciwyg|xcon|xcon-userid|xfire|xmlrpc\.beep|xmlrpc\.beeps|xmpp|xri|ymsgr|z39\.50|z39\.50r|z39\.50s):// # protocol + (((?:[\_\.\pL\pN-]|%[0-9A-Fa-f]{2})+:)?((?:[\_\.\pL\pN-]|%[0-9A-Fa-f]{2})+)@)? # basic auth ( - ([\pL\pN\pS\-\.])+(\.?([\pL]|xn\-\-[\pL\pN-]+)+\.?) # a domain name - | # or - \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # an IP address - | # or + ([\pL\pN\pS\-\_\.])+(\.?([\pL\pN]|xn\-\-[\pL\pN-]+)+\.?) # a domain name + | # or + \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # an IP address + | # or \[ (?:(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){6})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:::(?:(?:(?:[0-9a-f]{1,4})):){5})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){4})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,1}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){3})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,2}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){2})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,3}(?:(?:[0-9a-f]{1,4})))?::(?:(?:[0-9a-f]{1,4})):)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,4}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,5}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,6}(?:(?:[0-9a-f]{1,4})))?::)))) \] # an IPv6 address ) (:[0-9]+)? # a port (optional) - (/?|/\S+|\?\S*|\#\S*) # a /, nothing, a / with something, a query or a fragment + (?:/ (?:[\pL\pN\-._\~!$&\'()*+,;=:@]|%[0-9A-Fa-f]{2})* )* # a path + (?:\? (?:[\pL\pN\-._\~!$&\'\[\]()*+,;=:@/?]|%[0-9A-Fa-f]{2})* )? # a query (optional) + (?:\# (?:[\pL\pN\-._\~!$&\'()*+,;=:@/?]|%[0-9A-Fa-f]{2})* )? # a fragment (optional) $~ixu'; return preg_match($pattern, $value) > 0; @@ -1595,18 +1795,14 @@ trait ValidatesAttributes */ public function validateUuid($attribute, $value) { - if (! is_string($value)) { - return false; - } - - return preg_match('/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iD', $value) > 0; + return Str::isUuid($value); } /** * Get the size of an attribute. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return mixed */ protected function getSize($attribute, $value) @@ -1691,14 +1887,14 @@ trait ValidatesAttributes /** * Require a certain number of parameters to be present. * - * @param int $count + * @param int $count * @param array $parameters * @param string $rule * @return void * * @throws \InvalidArgumentException */ - protected function requireParameterCount($count, $parameters, $rule) + public function requireParameterCount($count, $parameters, $rule) { if (count($parameters) < $count) { throw new InvalidArgumentException("Validation rule $rule requires at least $count parameters."); @@ -1706,19 +1902,15 @@ trait ValidatesAttributes } /** - * Require comparison values to be of the same type. + * Check if the parameters are of the same type. * * @param mixed $first * @param mixed $second - * @return void - * - * @throws \InvalidArgumentException + * @return bool */ - protected function requireSameType($first, $second) + protected function isSameType($first, $second) { - if (gettype($first) != gettype($second)) { - throw new InvalidArgumentException('The values under comparison must be of the same type'); - } + return gettype($first) == gettype($second); } /** @@ -1726,7 +1918,6 @@ trait ValidatesAttributes * * @param string $attribute * @param string $rule - * * @return void */ protected function shouldBeNumeric($attribute, $rule) diff --git a/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php b/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php index cb0c247b..b5255e34 100755 --- a/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php @@ -3,10 +3,10 @@ namespace Illuminate\Validation; use Closure; -use Illuminate\Support\Str; use Illuminate\Database\ConnectionResolverInterface; +use Illuminate\Support\Str; -class DatabasePresenceVerifier implements PresenceVerifierInterface +class DatabasePresenceVerifier implements DatabasePresenceVerifierInterface { /** * The database connection instance. @@ -60,8 +60,8 @@ class DatabasePresenceVerifier implements PresenceVerifierInterface * * @param string $collection * @param string $column - * @param array $values - * @param array $extra + * @param array $values + * @param array $extra * @return int */ public function getMultiCount($collection, $column, array $values, array $extra = []) diff --git a/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifierInterface.php b/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifierInterface.php new file mode 100644 index 00000000..4b70ee0b --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifierInterface.php @@ -0,0 +1,14 @@ +toArray(); } - return new Rules\In(is_array($values) ? $values : func_get_args()); + return new In(is_array($values) ? $values : func_get_args()); } /** @@ -59,18 +65,18 @@ class Rule $values = $values->toArray(); } - return new Rules\NotIn(is_array($values) ? $values : func_get_args()); + return new NotIn(is_array($values) ? $values : func_get_args()); } /** * Get a required_if constraint builder instance. * - * @param callable $callback + * @param callable|bool $callback * @return \Illuminate\Validation\Rules\RequiredIf */ public static function requiredIf($callback) { - return new Rules\RequiredIf($callback); + return new RequiredIf($callback); } /** @@ -82,6 +88,6 @@ class Rule */ public static function unique($table, $column = 'NULL') { - return new Rules\Unique($table, $column); + return new Unique($table, $column); } } diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Rules/DatabaseRule.php b/vendor/laravel/framework/src/Illuminate/Validation/Rules/DatabaseRule.php index 9b7652f5..c7a12f58 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Rules/DatabaseRule.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Rules/DatabaseRule.php @@ -3,6 +3,8 @@ namespace Illuminate\Validation\Rules; use Closure; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Str; trait DatabaseRule { @@ -43,14 +45,38 @@ trait DatabaseRule */ public function __construct($table, $column = 'NULL') { - $this->table = $table; $this->column = $column; + + $this->table = $this->resolveTableName($table); + } + + /** + * Resolves the name of the table from the given string. + * + * @param string $table + * @return string + */ + public function resolveTableName($table) + { + if (! Str::contains($table, '\\') || ! class_exists($table)) { + return $table; + } + + if (is_subclass_of($table, Model::class)) { + $model = new $table; + + return implode('.', array_filter( + [$model->getConnectionName(), $model->getTable()] + )); + } + + return $table; } /** * Set a "where" constraint on the query. * - * @param string|\Closure $column + * @param \Closure|string $column * @param array|string|null $value * @return $this */ @@ -64,6 +90,10 @@ trait DatabaseRule return $this->using($column); } + if (is_null($value)) { + return $this->whereNull($column); + } + $this->wheres[] = compact('column', 'value'); return $this; @@ -166,7 +196,7 @@ trait DatabaseRule protected function formatWheres() { return collect($this->wheres)->map(function ($where) { - return $where['column'].','.$where['value']; + return $where['column'].','.'"'.str_replace('"', '""', $where['value']).'"'; })->implode(','); } } diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Rules/Dimensions.php b/vendor/laravel/framework/src/Illuminate/Validation/Rules/Dimensions.php index 354d071c..e2326c77 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Rules/Dimensions.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Rules/Dimensions.php @@ -14,7 +14,7 @@ class Dimensions /** * Create a new dimensions rule instance. * - * @param array $constraints; + * @param array $constraints * @return void */ public function __construct(array $constraints = []) diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Rules/Unique.php b/vendor/laravel/framework/src/Illuminate/Validation/Rules/Unique.php index bce18d8d..64e91024 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Rules/Unique.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Rules/Unique.php @@ -66,7 +66,7 @@ class Unique return rtrim(sprintf('unique:%s,%s,%s,%s,%s', $this->table, $this->column, - $this->ignore ? '"'.$this->ignore.'"' : 'NULL', + $this->ignore ? '"'.addslashes($this->ignore).'"' : 'NULL', $this->idColumn, $this->formatWheres() ), ','); diff --git a/vendor/laravel/framework/src/Illuminate/Validation/ValidatesWhenResolvedTrait.php b/vendor/laravel/framework/src/Illuminate/Validation/ValidatesWhenResolvedTrait.php index e4de332f..b92381e5 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/ValidatesWhenResolvedTrait.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/ValidatesWhenResolvedTrait.php @@ -25,6 +25,8 @@ trait ValidatesWhenResolvedTrait if ($instance->fails()) { $this->failedValidation($instance); } + + $this->passedValidation(); } /** @@ -34,7 +36,7 @@ trait ValidatesWhenResolvedTrait */ protected function prepareForValidation() { - // no default action + // } /** @@ -47,6 +49,16 @@ trait ValidatesWhenResolvedTrait return $this->validator(); } + /** + * Handle a passed validation attempt. + * + * @return void + */ + protected function passedValidation() + { + // + } + /** * Handle a failed validation attempt. * diff --git a/vendor/laravel/framework/src/Illuminate/Validation/ValidationException.php b/vendor/laravel/framework/src/Illuminate/Validation/ValidationException.php index ef71618d..460f959f 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/ValidationException.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/ValidationException.php @@ -47,7 +47,7 @@ class ValidationException extends Exception * Create a new exception instance. * * @param \Illuminate\Contracts\Validation\Validator $validator - * @param \Symfony\Component\HttpFoundation\Response $response + * @param \Symfony\Component\HttpFoundation\Response|null $response * @param string $errorBag * @return void */ diff --git a/vendor/laravel/framework/src/Illuminate/Validation/ValidationRuleParser.php b/vendor/laravel/framework/src/Illuminate/Validation/ValidationRuleParser.php index b8e42559..9438fb11 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/ValidationRuleParser.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/ValidationRuleParser.php @@ -3,11 +3,11 @@ namespace Illuminate\Validation; use Closure; +use Illuminate\Contracts\Validation\Rule as RuleContract; use Illuminate\Support\Arr; use Illuminate\Support\Str; use Illuminate\Validation\Rules\Exists; use Illuminate\Validation\Rules\Unique; -use Illuminate\Contracts\Validation\Rule as RuleContract; class ValidationRuleParser { diff --git a/vendor/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php index a3c593f9..ce04447e 100755 --- a/vendor/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php @@ -2,17 +2,11 @@ namespace Illuminate\Validation; +use Illuminate\Contracts\Support\DeferrableProvider; use Illuminate\Support\ServiceProvider; -class ValidationServiceProvider extends ServiceProvider +class ValidationServiceProvider extends ServiceProvider implements DeferrableProvider { - /** - * Indicates if loading of the provider is deferred. - * - * @var bool - */ - protected $defer = true; - /** * Register the service provider. * diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Validator.php b/vendor/laravel/framework/src/Illuminate/Validation/Validator.php index f899d04a..18a5d00c 100755 --- a/vendor/laravel/framework/src/Illuminate/Validation/Validator.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Validator.php @@ -2,18 +2,18 @@ namespace Illuminate\Validation; -use RuntimeException; use BadMethodCallException; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Support\Fluent; -use Illuminate\Support\MessageBag; use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Translation\Translator; use Illuminate\Contracts\Validation\ImplicitRule; -use Symfony\Component\HttpFoundation\File\UploadedFile; use Illuminate\Contracts\Validation\Rule as RuleContract; use Illuminate\Contracts\Validation\Validator as ValidatorContract; +use Illuminate\Support\Arr; +use Illuminate\Support\Fluent; +use Illuminate\Support\MessageBag; +use Illuminate\Support\Str; +use RuntimeException; +use Symfony\Component\HttpFoundation\File\UploadedFile; class Validator implements ValidatorContract { @@ -48,6 +48,13 @@ class Validator implements ValidatorContract */ protected $failedRules = []; + /** + * Attributes that should be excluded from the validated data. + * + * @var array + */ + protected $excludeAttributes = []; + /** * The message bag instance. * @@ -90,6 +97,13 @@ class Validator implements ValidatorContract */ protected $implicitAttributes = []; + /** + * The callback that should be used to format the attribute. + * + * @var callable|null + */ + protected $implicitAttributesFormatter; + /** * The cached data for the "distinct" rule. * @@ -152,8 +166,15 @@ class Validator implements ValidatorContract * @var array */ protected $fileRules = [ - 'File', 'Image', 'Mimes', 'Mimetypes', 'Min', - 'Max', 'Size', 'Between', 'Dimensions', + 'Between', + 'Dimensions', + 'File', + 'Image', + 'Max', + 'Mimes', + 'Mimetypes', + 'Min', + 'Size', ]; /** @@ -162,8 +183,16 @@ class Validator implements ValidatorContract * @var array */ protected $implicitRules = [ - 'Required', 'Filled', 'RequiredWith', 'RequiredWithAll', 'RequiredWithout', - 'RequiredWithoutAll', 'RequiredIf', 'RequiredUnless', 'Accepted', 'Present', + 'Accepted', + 'Filled', + 'Present', + 'Required', + 'RequiredIf', + 'RequiredUnless', + 'RequiredWith', + 'RequiredWithAll', + 'RequiredWithout', + 'RequiredWithoutAll', ]; /** @@ -172,11 +201,36 @@ class Validator implements ValidatorContract * @var array */ protected $dependentRules = [ - 'RequiredWith', 'RequiredWithAll', 'RequiredWithout', 'RequiredWithoutAll', - 'RequiredIf', 'RequiredUnless', 'Confirmed', 'Same', 'Different', 'Unique', - 'Before', 'After', 'BeforeOrEqual', 'AfterOrEqual', 'Gt', 'Lt', 'Gte', 'Lte', + 'After', + 'AfterOrEqual', + 'Before', + 'BeforeOrEqual', + 'Confirmed', + 'Different', + 'ExcludeIf', + 'ExcludeUnless', + 'ExcludeWithout', + 'Gt', + 'Gte', + 'Lt', + 'Lte', + 'RequiredIf', + 'RequiredUnless', + 'RequiredWith', + 'RequiredWithAll', + 'RequiredWithout', + 'RequiredWithoutAll', + 'Same', + 'Unique', ]; + /** + * The validation rules that can exclude an attribute. + * + * @var array + */ + protected $excludeRules = ['ExcludeIf', 'ExcludeUnless', 'ExcludeWithout']; + /** * The size related validation rules. * @@ -191,6 +245,13 @@ class Validator implements ValidatorContract */ protected $numericRules = ['Numeric', 'Integer']; + /** + * The current placeholder for dots in rule keys. + * + * @var string + */ + protected $dotPlaceholder; + /** * Create a new Validator instance. * @@ -204,6 +265,8 @@ class Validator implements ValidatorContract public function __construct(Translator $translator, array $data, array $rules, array $messages = [], array $customAttributes = []) { + $this->dotPlaceholder = Str::random(); + $this->initialRules = $rules; $this->translator = $translator; $this->customMessages = $messages; @@ -214,7 +277,7 @@ class Validator implements ValidatorContract } /** - * Parse the data array, converting dots to ->. + * Parse the data array, converting dots and asterisks. * * @param array $data * @return array @@ -228,19 +291,52 @@ class Validator implements ValidatorContract $value = $this->parseData($value); } - // If the data key contains a dot, we will replace it with another character - // sequence so it doesn't interfere with dot processing when working with - // array based validation rules and array_dot later in the validations. - if (Str::contains($key, '.')) { - $newData[str_replace('.', '->', $key)] = $value; - } else { - $newData[$key] = $value; - } + $key = str_replace( + ['.', '*'], + [$this->dotPlaceholder, '__asterisk__'], + $key + ); + + $newData[$key] = $value; } return $newData; } + /** + * Replace the placeholders used in data keys. + * + * @param array $data + * @return array + */ + protected function replacePlaceholders($data) + { + $originalData = []; + + foreach ($data as $key => $value) { + $originalData[$this->replacePlaceholderInString($key)] = is_array($value) + ? $this->replacePlaceholders($value) + : $value; + } + + return $originalData; + } + + /** + * Replace the placeholders in the given string. + * + * @param string $value + * @return string + */ + protected function replacePlaceholderInString(string $value) + { + return str_replace( + [$this->dotPlaceholder, '__asterisk__'], + ['.', '*'], + $value + ); + } + /** * Add an after validation callback. * @@ -250,7 +346,7 @@ class Validator implements ValidatorContract public function after($callback) { $this->after[] = function () use ($callback) { - return call_user_func_array($callback, [$this]); + return $callback($this); }; return $this; @@ -265,17 +361,27 @@ class Validator implements ValidatorContract { $this->messages = new MessageBag; - $this->distinctValues = []; + [$this->distinctValues, $this->failedRules] = [[], []]; // We'll spin through each rule, validating the attributes attached to that // rule. Any error messages will be added to the containers with each of // the other error messages, returning true if we don't have messages. foreach ($this->rules as $attribute => $rules) { - $attribute = str_replace('\.', '->', $attribute); + if ($this->shouldBeExcluded($attribute)) { + $this->removeAttribute($attribute); + + continue; + } foreach ($rules as $rule) { $this->validateAttribute($attribute, $rule); + if ($this->shouldBeExcluded($attribute)) { + $this->removeAttribute($attribute); + + break; + } + if ($this->shouldStopValidating($attribute)) { break; } @@ -286,7 +392,7 @@ class Validator implements ValidatorContract // fire them off. This gives the callbacks a chance to perform all kinds // of other validation that needs to get wrapped up in this operation. foreach ($this->after as $after) { - call_user_func($after); + $after(); } return $this->messages->isEmpty(); @@ -302,6 +408,36 @@ class Validator implements ValidatorContract return ! $this->passes(); } + /** + * Determine if the attribute should be excluded. + * + * @param string $attribute + * @return bool + */ + protected function shouldBeExcluded($attribute) + { + foreach ($this->excludeAttributes as $excludeAttribute) { + if ($attribute === $excludeAttribute || + Str::startsWith($attribute, $excludeAttribute.'.')) { + return true; + } + } + + return false; + } + + /** + * Remove the given attribute. + * + * @param string $attribute + * @return void + */ + protected function removeAttribute($attribute) + { + Arr::forget($this->data, $attribute); + Arr::forget($this->rules, $attribute); + } + /** * Run the validator's rules against its data. * @@ -319,7 +455,26 @@ class Validator implements ValidatorContract } /** - * Return validated value. + * Run the validator's rules against its data. + * + * @param string $errorBag + * @return array + * + * @throws \Illuminate\Validation\ValidationException + */ + public function validateWithBag(string $errorBag) + { + try { + return $this->validate(); + } catch (ValidationException $e) { + $e->errorBag = $errorBag; + + throw $e; + } + } + + /** + * Get the attributes and values that were validated. * * @return array * @@ -343,7 +498,7 @@ class Validator implements ValidatorContract } } - return $results; + return $this->replacePlaceholders($results); } /** @@ -443,7 +598,7 @@ class Validator implements ValidatorContract protected function getPrimaryAttribute($attribute) { foreach ($this->implicitAttributes as $unparsed => $parsed) { - if (in_array($attribute, $parsed)) { + if (in_array($attribute, $parsed, true)) { return $unparsed; } } @@ -475,6 +630,10 @@ class Validator implements ValidatorContract */ protected function isValidatable($rule, $attribute, $value) { + if (in_array($rule, $this->excludeRules)) { + return true; + } + return $this->presentOrRuleIsImplicit($rule, $attribute, $value) && $this->passesOptionalCheck($attribute) && $this->isNotNullIfMarkedAsNullable($rule, $attribute) && @@ -569,10 +728,16 @@ class Validator implements ValidatorContract */ protected function validateUsingCustomRule($attribute, $value, $rule) { + $attribute = $this->replacePlaceholderInString($attribute); + + $value = is_array($value) ? $this->replacePlaceholders($value) : $value; + if (! $rule->passes($attribute, $value)) { $this->failedRules[$attribute][get_class($rule)] = []; - $messages = (array) $rule->message(); + $messages = $rule->message(); + + $messages = $messages ? (array) $messages : [get_class($rule)]; foreach ($messages as $message) { $this->messages->add($attribute, $this->makeReplacements( @@ -590,12 +755,14 @@ class Validator implements ValidatorContract */ protected function shouldStopValidating($attribute) { + $cleanedAttribute = $this->replacePlaceholderInString($attribute); + if ($this->hasRule($attribute, ['Bail'])) { - return $this->messages->has($attribute); + return $this->messages->has($cleanedAttribute); } - if (isset($this->failedRules[$attribute]) && - array_key_exists('uploaded', $this->failedRules[$attribute])) { + if (isset($this->failedRules[$cleanedAttribute]) && + array_key_exists('uploaded', $this->failedRules[$cleanedAttribute])) { return true; } @@ -603,8 +770,8 @@ class Validator implements ValidatorContract // and that rule already failed then we should stop validation at this point // as now there is no point in calling other rules with this field empty. return $this->hasRule($attribute, $this->implicitRules) && - isset($this->failedRules[$attribute]) && - array_intersect(array_keys($this->failedRules[$attribute]), $this->implicitRules); + isset($this->failedRules[$cleanedAttribute]) && + array_intersect(array_keys($this->failedRules[$cleanedAttribute]), $this->implicitRules); } /** @@ -621,6 +788,16 @@ class Validator implements ValidatorContract $this->passes(); } + $attribute = str_replace( + [$this->dotPlaceholder, '__asterisk__'], + ['.', '*'], + $attribute + ); + + if (in_array($rule, $this->excludeRules)) { + return $this->excludeAttribute($attribute); + } + $this->messages->add($attribute, $this->makeReplacements( $this->getMessage($attribute, $rule), $attribute, $rule, $parameters )); @@ -628,6 +805,19 @@ class Validator implements ValidatorContract $this->failedRules[$attribute][$rule] = $parameters; } + /** + * Add the given attribute to the list of excluded attributes. + * + * @param string $attribute + * @return void + */ + protected function excludeAttribute(string $attribute) + { + $this->excludeAttributes[] = $attribute; + + $this->excludeAttributes = array_unique($this->excludeAttributes); + } + /** * Returns the data which was valid. * @@ -655,9 +845,19 @@ class Validator implements ValidatorContract $this->passes(); } - return array_intersect_key( + $invalid = array_intersect_key( $this->data, $this->attributesThatHaveMessages() ); + + $result = []; + + $failed = Arr::only(Arr::dot($invalid), array_keys($this->failed())); + + foreach ($failed as $key => $failure) { + Arr::set($result, $key, $failure); + } + + return $result; } /** @@ -816,6 +1016,10 @@ class Validator implements ValidatorContract */ public function setRules(array $rules) { + $rules = collect($rules)->mapWithKeys(function ($value, $key) { + return [str_replace('\.', $this->dotPlaceholder, $key) => $value]; + })->toArray(); + $this->initialRules = $rules; $this->rules = []; @@ -860,7 +1064,7 @@ class Validator implements ValidatorContract { $payload = new Fluent($this->getData()); - if (call_user_func($callback, $payload)) { + if ($callback($payload)) { foreach ((array) $attribute as $key) { $this->addRules([$key => $rules]); } @@ -878,7 +1082,7 @@ class Validator implements ValidatorContract public function addExtensions(array $extensions) { if ($extensions) { - $keys = array_map('\Illuminate\Support\Str::snake', array_keys($extensions)); + $keys = array_map([Str::class, 'snake'], array_keys($extensions)); $extensions = array_combine($keys, array_values($extensions)); } @@ -902,7 +1106,7 @@ class Validator implements ValidatorContract } /** - * Register an array of custom implicit validator extensions. + * Register an array of custom dependent validator extensions. * * @param array $extensions * @return void @@ -965,7 +1169,7 @@ class Validator implements ValidatorContract public function addReplacers(array $replacers) { if ($replacers) { - $keys = array_map('\Illuminate\Support\Str::snake', array_keys($replacers)); + $keys = array_map([Str::class, 'snake'], array_keys($replacers)); $replacers = array_combine($keys, array_values($replacers)); } @@ -1024,6 +1228,19 @@ class Validator implements ValidatorContract return $this; } + /** + * Set the callback that used to format an implicit attribute.. + * + * @param callable|null $formatter + * @return $this + */ + public function setImplicitAttributesFormatter(callable $formatter = null) + { + $this->implicitAttributesFormatter = $formatter; + + return $this; + } + /** * Set the custom values on the validator. * @@ -1064,32 +1281,22 @@ class Validator implements ValidatorContract /** * Get the Presence Verifier implementation. * + * @param string|null $connection * @return \Illuminate\Validation\PresenceVerifierInterface * * @throws \RuntimeException */ - public function getPresenceVerifier() + public function getPresenceVerifier($connection = null) { if (! isset($this->presenceVerifier)) { throw new RuntimeException('Presence verifier has not been set.'); } - return $this->presenceVerifier; - } + if ($this->presenceVerifier instanceof DatabasePresenceVerifierInterface) { + $this->presenceVerifier->setConnection($connection); + } - /** - * Get the Presence Verifier implementation. - * - * @param string $connection - * @return \Illuminate\Validation\PresenceVerifierInterface - * - * @throws \RuntimeException - */ - protected function getPresenceVerifierFor($connection) - { - return tap($this->getPresenceVerifier(), function ($verifier) use ($connection) { - $verifier->setConnection($connection); - }); + return $this->presenceVerifier; } /** @@ -1147,7 +1354,7 @@ class Validator implements ValidatorContract $callback = $this->extensions[$rule]; if (is_callable($callback)) { - return call_user_func_array($callback, $parameters); + return $callback(...array_values($parameters)); } elseif (is_string($callback)) { return $this->callClassBasedExtension($callback, $parameters); } @@ -1164,7 +1371,7 @@ class Validator implements ValidatorContract { [$class, $method] = Str::parseCallback($callback, 'validate'); - return call_user_func_array([$this->container->make($class), $method], $parameters); + return $this->container->make($class)->{$method}(...array_values($parameters)); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Validation/composer.json b/vendor/laravel/framework/src/Illuminate/Validation/composer.json index 4a9da5f2..32c02c96 100755 --- a/vendor/laravel/framework/src/Illuminate/Validation/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Validation/composer.json @@ -14,12 +14,15 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/container": "5.7.*", - "illuminate/contracts": "5.7.*", - "illuminate/support": "5.7.*", - "illuminate/translation": "5.7.*", - "symfony/http-foundation": "^4.1" + "php": "^7.2.5|^8.0", + "ext-json": "*", + "egulias/email-validator": "^2.1.10", + "illuminate/container": "^7.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0", + "illuminate/translation": "^7.0", + "symfony/http-foundation": "^5.0", + "symfony/mime": "^5.0" }, "autoload": { "psr-4": { @@ -28,11 +31,11 @@ }, "extra": { "branch-alias": { - "dev-master": "5.7-dev" + "dev-master": "7.x-dev" } }, "suggest": { - "illuminate/database": "Required to use the database presence verifier (5.7.*)." + "illuminate/database": "Required to use the database presence verifier (^7.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/View/AnonymousComponent.php b/vendor/laravel/framework/src/Illuminate/View/AnonymousComponent.php new file mode 100644 index 00000000..a7887c5a --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/View/AnonymousComponent.php @@ -0,0 +1,55 @@ +view = $view; + $this->data = $data; + } + + /** + * Get the view / view contents that represent the component. + * + * @return string + */ + public function render() + { + return $this->view; + } + + /** + * Get the data that should be supplied to the view. + * + * @return array + */ + public function data() + { + $this->attributes = $this->attributes ?: new ComponentAttributeBag; + + return $this->data + ['attributes' => $this->attributes]; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php index 119a20ab..556fda20 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php @@ -4,6 +4,7 @@ namespace Illuminate\View\Compilers; use Illuminate\Support\Arr; use Illuminate\Support\Str; +use InvalidArgumentException; class BladeCompiler extends Compiler implements CompilerInterface { @@ -12,6 +13,7 @@ class BladeCompiler extends Compiler implements CompilerInterface Concerns\CompilesComponents, Concerns\CompilesConditionals, Concerns\CompilesEchos, + Concerns\CompilesErrors, Concerns\CompilesHelpers, Concerns\CompilesIncludes, Concerns\CompilesInjections, @@ -43,6 +45,13 @@ class BladeCompiler extends Compiler implements CompilerInterface */ protected $conditions = []; + /** + * All of the registered precompilers. + * + * @var array + */ + protected $precompilers = []; + /** * The file currently being compiled. * @@ -56,7 +65,7 @@ class BladeCompiler extends Compiler implements CompilerInterface * @var array */ protected $compilers = [ - 'Comments', + // 'Comments', 'Extensions', 'Statements', 'Echos', @@ -104,10 +113,24 @@ class BladeCompiler extends Compiler implements CompilerInterface */ protected $rawBlocks = []; + /** + * The array of class component aliases and their class names. + * + * @var array + */ + protected $classComponentAliases = []; + + /** + * Indicates if component tags should be compiled. + * + * @var bool + */ + protected $compilesComponentTags = true; + /** * Compile the view at the given path. * - * @param string $path + * @param string|null $path * @return void */ public function compile($path = null) @@ -119,10 +142,48 @@ class BladeCompiler extends Compiler implements CompilerInterface if (! is_null($this->cachePath)) { $contents = $this->compileString($this->files->get($this->getPath())); - $this->files->put($this->getCompiledPath($this->getPath()), $contents); + if (! empty($this->getPath())) { + $contents = $this->appendFilePath($contents); + } + + $this->files->put( + $this->getCompiledPath($this->getPath()), $contents + ); } } + /** + * Append the file path to the compiled string. + * + * @param string $contents + * @return string + */ + protected function appendFilePath($contents) + { + $tokens = $this->getOpenAndClosingPhpTokens($contents); + + if ($tokens->isNotEmpty() && $tokens->last() !== T_CLOSE_TAG) { + $contents .= ' ?>'; + } + + return $contents."getPath()} ENDPATH**/ ?>"; + } + + /** + * Get the open and closing PHP tag tokens from the given string. + * + * @param string $contents + * @return \Illuminate\Support\Collection + */ + protected function getOpenAndClosingPhpTokens($contents) + { + return collect(token_get_all($contents)) + ->pluck(0) + ->filter(function ($token) { + return in_array($token, [T_OPEN_TAG, T_OPEN_TAG_WITH_ECHO, T_CLOSE_TAG]); + }); + } + /** * Get the path currently being compiled. * @@ -152,18 +213,19 @@ class BladeCompiler extends Compiler implements CompilerInterface */ public function compileString($value) { - if (strpos($value, '@verbatim') !== false) { - $value = $this->storeVerbatimBlocks($value); + [$this->footer, $result] = [[], '']; + + // First we will compile the Blade component tags. This is a precompile style + // step which compiles the component Blade tags into @component directives + // that may be used by Blade. Then we should call any other precompilers. + $value = $this->compileComponentTags( + $this->compileComments($this->storeUncompiledBlocks($value)) + ); + + foreach ($this->precompilers as $precompiler) { + $value = call_user_func($precompiler, $value); } - $this->footer = []; - - if (strpos($value, '@php') !== false) { - $value = $this->storePhpBlocks($value); - } - - $result = ''; - // Here we will loop through all of the tokens returned by the Zend lexer and // parse each one into the corresponding valid PHP. We will then have this // template as the correctly rendered PHP that can be rendered natively. @@ -185,6 +247,25 @@ class BladeCompiler extends Compiler implements CompilerInterface return $result; } + /** + * Store the blocks that do not receive compilation. + * + * @param string $value + * @return string + */ + protected function storeUncompiledBlocks($value) + { + if (strpos($value, '@verbatim') !== false) { + $value = $this->storeVerbatimBlocks($value); + } + + if (strpos($value, '@php') !== false) { + $value = $this->storePhpBlocks($value); + } + + return $value; + } + /** * Store the verbatim blocks and replace them with a temporary placeholder. * @@ -224,6 +305,23 @@ class BladeCompiler extends Compiler implements CompilerInterface ); } + /** + * Compile the component tags. + * + * @param string $value + * @return string + */ + protected function compileComponentTags($value) + { + if (! $this->compilesComponentTags) { + return $value; + } + + return (new ComponentTagCompiler( + $this->classComponentAliases, $this + ))->compile($value); + } + /** * Replace the raw placeholders with the original code stored in the raw blocks. * @@ -260,8 +358,8 @@ class BladeCompiler extends Compiler implements CompilerInterface */ protected function addFooters($result) { - return ltrim($result, PHP_EOL) - .PHP_EOL.implode(PHP_EOL, array_reverse($this->footer)); + return ltrim($result, "\n") + ."\n".implode("\n", array_reverse($this->footer)); } /** @@ -292,7 +390,7 @@ class BladeCompiler extends Compiler implements CompilerInterface protected function compileExtensions($value) { foreach ($this->extensions as $compiler) { - $value = call_user_func($compiler, $value, $this); + $value = $compiler($value, $this); } return $value; @@ -401,6 +499,12 @@ class BladeCompiler extends Compiler implements CompilerInterface : ""; }); + $this->directive('unless'.$name, function ($expression) use ($name) { + return $expression !== '' + ? "" + : ""; + }); + $this->directive('else'.$name, function ($expression) use ($name) { return $expression !== '' ? "" @@ -424,14 +528,71 @@ class BladeCompiler extends Compiler implements CompilerInterface return call_user_func($this->conditions[$name], ...$parameters); } + /** + * Register a class-based component alias directive. + * + * @param string $class + * @param string|null $alias + * @param string $prefix + * @return void + */ + public function component($class, $alias = null, $prefix = '') + { + if (! is_null($alias) && Str::contains($alias, '\\')) { + [$class, $alias] = [$alias, $class]; + } + + if (is_null($alias)) { + $alias = Str::contains($class, '\\View\\Components\\') + ? collect(explode('\\', Str::after($class, '\\View\\Components\\')))->map(function ($segment) { + return Str::kebab($segment); + })->implode(':') + : Str::kebab(class_basename($class)); + } + + if (! empty($prefix)) { + $alias = $prefix.'-'.$alias; + } + + $this->classComponentAliases[$alias] = $class; + } + + /** + * Register an array of class-based components. + * + * @param array $components + * @param string $prefix + * @return void + */ + public function components(array $components, $prefix = '') + { + foreach ($components as $key => $value) { + if (is_numeric($key)) { + static::component($value, null, $prefix); + } else { + static::component($key, $value, $prefix); + } + } + } + + /** + * Get the registered class component aliases. + * + * @return array + */ + public function getClassComponentAliases() + { + return $this->classComponentAliases; + } + /** * Register a component alias directive. * * @param string $path - * @param string $alias + * @param string|null $alias * @return void */ - public function component($path, $alias = null) + public function aliasComponent($path, $alias = null) { $alias = $alias ?: Arr::last(explode('.', $path)); @@ -450,17 +611,29 @@ class BladeCompiler extends Compiler implements CompilerInterface * Register an include alias directive. * * @param string $path - * @param string $alias + * @param string|null $alias * @return void */ public function include($path, $alias = null) + { + return $this->aliasInclude($path, $alias); + } + + /** + * Register an include alias directive. + * + * @param string $path + * @param string|null $alias + * @return void + */ + public function aliasInclude($path, $alias = null) { $alias = $alias ?: Arr::last(explode('.', $path)); $this->directive($alias, function ($expression) use ($path) { $expression = $this->stripParentheses($expression) ?: '[]'; - return "make('{$path}', {$expression}, \Illuminate\Support\Arr::except(get_defined_vars(), array('__data', '__path')))->render(); ?>"; + return "make('{$path}', {$expression}, \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>"; }); } @@ -470,9 +643,15 @@ class BladeCompiler extends Compiler implements CompilerInterface * @param string $name * @param callable $handler * @return void + * + * @throws \InvalidArgumentException */ public function directive($name, callable $handler) { + if (! preg_match('/^\w+(?:::\w+)?$/x', $name)) { + throw new InvalidArgumentException("The directive name [{$name}] is not valid. Directive names must only contain alphanumeric characters and underscores."); + } + $this->customDirectives[$name] = $handler; } @@ -486,6 +665,17 @@ class BladeCompiler extends Compiler implements CompilerInterface return $this->customDirectives; } + /** + * Register a new precompiler. + * + * @param callable $precompiler + * @return void + */ + public function precompiler(callable $precompiler) + { + $this->precompilers[] = $precompiler; + } + /** * Set the echo format to be used by the compiler. * @@ -516,4 +706,14 @@ class BladeCompiler extends Compiler implements CompilerInterface { $this->setEchoFormat('e(%s, false)'); } + + /** + * Indicate that component tags should not be compiled. + * + * @return void + */ + public function withoutComponentTags() + { + $this->compilesComponentTags = false; + } } diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php index 94074192..d2a9f26c 100755 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php @@ -2,8 +2,8 @@ namespace Illuminate\View\Compilers; -use InvalidArgumentException; use Illuminate\Filesystem\Filesystem; +use InvalidArgumentException; abstract class Compiler { @@ -48,7 +48,7 @@ abstract class Compiler */ public function getCompiledPath($path) { - return $this->cachePath.'/'.sha1($path).'.php'; + return $this->cachePath.'/'.sha1('v2'.$path).'.php'; } /** diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php new file mode 100644 index 00000000..7388b106 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php @@ -0,0 +1,488 @@ + + * @author Taylor Otwell + */ +class ComponentTagCompiler +{ + /** + * The Blade compiler instance. + * + * @var \Illuminate\View\Compilers\BladeCompiler + */ + protected $blade; + + /** + * The component class aliases. + * + * @var array + */ + protected $aliases = []; + + /** + * The "bind:" attributes that have been compiled for the current component. + * + * @var array + */ + protected $boundAttributes = []; + + /** + * Create new component tag compiler. + * + * @param array $aliases + * @param \Illuminate\View\Compilers\BladeCompiler|null + * @return void + */ + public function __construct(array $aliases = [], ?BladeCompiler $blade = null) + { + $this->aliases = $aliases; + + $this->blade = $blade ?: new BladeCompiler(new Filesystem, sys_get_temp_dir()); + } + + /** + * Compile the component and slot tags within the given string. + * + * @param string $value + * @return string + */ + public function compile(string $value) + { + $value = $this->compileSlots($value); + + return $this->compileTags($value); + } + + /** + * Compile the tags within the given string. + * + * @param string $value + * @return string + * + * @throws \InvalidArgumentException + */ + public function compileTags(string $value) + { + $value = $this->compileSelfClosingTags($value); + $value = $this->compileOpeningTags($value); + $value = $this->compileClosingTags($value); + + return $value; + } + + /** + * Compile the opening tags within the given string. + * + * @param string $value + * @return string + * + * @throws \InvalidArgumentException + */ + protected function compileOpeningTags(string $value) + { + $pattern = "/ + < + \s* + x[-\:]([\w\-\:\.]*) + (? + (?: + \s+ + [\w\-:.@]+ + ( + = + (?: + \\\"[^\\\"]*\\\" + | + \'[^\']*\' + | + [^\'\\\"=<>]+ + ) + ) + ?)* + \s* + ) + (? + /x"; + + return preg_replace_callback($pattern, function (array $matches) { + $this->boundAttributes = []; + + $attributes = $this->getAttributesFromAttributeString($matches['attributes']); + + return $this->componentString($matches[1], $attributes); + }, $value); + } + + /** + * Compile the self-closing tags within the given string. + * + * @param string $value + * @return string + * + * @throws \InvalidArgumentException + */ + protected function compileSelfClosingTags(string $value) + { + $pattern = "/ + < + \s* + x[-\:]([\w\-\:\.]*) + \s* + (? + (?: + \s+ + [\w\-:.@]+ + ( + = + (?: + \\\"[^\\\"]*\\\" + | + \'[^\']*\' + | + [^\'\\\"=<>]+ + ) + )? + )* + \s* + ) + \/> + /x"; + + return preg_replace_callback($pattern, function (array $matches) { + $this->boundAttributes = []; + + $attributes = $this->getAttributesFromAttributeString($matches['attributes']); + + return $this->componentString($matches[1], $attributes)."\n@endcomponentClass "; + }, $value); + } + + /** + * Compile the Blade component string for the given component and attributes. + * + * @param string $component + * @param array $attributes + * @return string + * + * @throws \InvalidArgumentException + */ + protected function componentString(string $component, array $attributes) + { + $class = $this->componentClass($component); + + [$data, $attributes] = $this->partitionDataAndAttributes($class, $attributes); + + $data = $data->mapWithKeys(function ($value, $key) { + return [Str::camel($key) => $value]; + }); + + // If the component doesn't exists as a class we'll assume it's a class-less + // component and pass the component as a view parameter to the data so it + // can be accessed within the component and we can render out the view. + if (! class_exists($class)) { + $parameters = [ + 'view' => "'$class'", + 'data' => '['.$this->attributesToString($data->all(), $escapeBound = false).']', + ]; + + $class = AnonymousComponent::class; + } else { + $parameters = $data->all(); + } + + return " @component('{$class}', '{$component}', [".$this->attributesToString($parameters, $escapeBound = false).']) +withAttributes(['.$this->attributesToString($attributes->all()).']); ?>'; + } + + /** + * Get the component class for a given component alias. + * + * @param string $component + * @return string + * + * @throws \InvalidArgumentException + */ + protected function componentClass(string $component) + { + $viewFactory = Container::getInstance()->make(Factory::class); + + if (isset($this->aliases[$component])) { + if (class_exists($alias = $this->aliases[$component])) { + return $alias; + } + + if ($viewFactory->exists($alias)) { + return $alias; + } + + throw new InvalidArgumentException( + "Unable to locate class or view [{$alias}] for component [{$component}]." + ); + } + + if (class_exists($class = $this->guessClassName($component))) { + return $class; + } + + if ($viewFactory->exists($view = $this->guessViewName($component))) { + return $view; + } + + throw new InvalidArgumentException( + "Unable to locate a class or view for component [{$component}]." + ); + } + + /** + * Guess the class name for the given component. + * + * @param string $component + * @return string + */ + public function guessClassName(string $component) + { + $namespace = Container::getInstance() + ->make(Application::class) + ->getNamespace(); + + $componentPieces = array_map(function ($componentPiece) { + return ucfirst(Str::camel($componentPiece)); + }, explode('.', $component)); + + return $namespace.'View\\Components\\'.implode('\\', $componentPieces); + } + + /** + * Guess the view name for the given component. + * + * @param string $name + * @return string + */ + public function guessViewName($name) + { + $prefix = 'components.'; + + $delimiter = ViewFinderInterface::HINT_PATH_DELIMITER; + + if (Str::contains($name, $delimiter)) { + return Str::replaceFirst($delimiter, $delimiter.$prefix, $name); + } + + return $prefix.$name; + } + + /** + * Partition the data and extra attributes from the given array of attributes. + * + * @param string $class + * @param array $attributes + * @return array + */ + protected function partitionDataAndAttributes($class, array $attributes) + { + // If the class doesn't exists, we'll assume it's a class-less component and + // return all of the attributes as both data and attributes since we have + // now way to partition them. The user can exclude attributes manually. + if (! class_exists($class)) { + return [collect($attributes), collect($attributes)]; + } + + $constructor = (new ReflectionClass($class))->getConstructor(); + + $parameterNames = $constructor + ? collect($constructor->getParameters())->map->getName()->all() + : []; + + return collect($attributes)->partition(function ($value, $key) use ($parameterNames) { + return in_array(Str::camel($key), $parameterNames); + })->all(); + } + + /** + * Compile the closing tags within the given string. + * + * @param string $value + * @return string + */ + protected function compileClosingTags(string $value) + { + return preg_replace("/<\/\s*x[-\:][\w\-\:\.]*\s*>/", ' @endcomponentClass ', $value); + } + + /** + * Compile the slot tags within the given string. + * + * @param string $value + * @return string + */ + public function compileSlots(string $value) + { + $value = preg_replace_callback('/<\s*x[\-\:]slot\s+(:?)name=(?(\"[^\"]+\"|\\\'[^\\\']+\\\'|[^\s>]+))\s*>/', function ($matches) { + $name = $this->stripQuotes($matches['name']); + + if ($matches[1] !== ':') { + $name = "'{$name}'"; + } + + return " @slot({$name}) "; + }, $value); + + return preg_replace('/<\/\s*x[\-\:]slot[^>]*>/', ' @endslot', $value); + } + + /** + * Get an array of attributes from the given attribute string. + * + * @param string $attributeString + * @return array + */ + protected function getAttributesFromAttributeString(string $attributeString) + { + $attributeString = $this->parseBindAttributes($attributeString); + + $pattern = '/ + (?[\w\-:.@]+) + ( + = + (? + ( + \"[^\"]+\" + | + \\\'[^\\\']+\\\' + | + [^\s>]+ + ) + ) + )? + /x'; + + if (! preg_match_all($pattern, $attributeString, $matches, PREG_SET_ORDER)) { + return []; + } + + return collect($matches)->mapWithKeys(function ($match) { + $attribute = $match['attribute']; + $value = $match['value'] ?? null; + + if (is_null($value)) { + $value = 'true'; + + $attribute = Str::start($attribute, 'bind:'); + } + + $value = $this->stripQuotes($value); + + if (Str::startsWith($attribute, 'bind:')) { + $attribute = Str::after($attribute, 'bind:'); + + $this->boundAttributes[$attribute] = true; + } else { + $value = "'".$this->compileAttributeEchos($value)."'"; + } + + return [$attribute => $value]; + })->toArray(); + } + + /** + * Parse the "bind" attributes in a given attribute string into their fully-qualified syntax. + * + * @param string $attributeString + * @return string + */ + protected function parseBindAttributes(string $attributeString) + { + $pattern = "/ + (?:^|\s+) # start of the string or whitespace between attributes + : # attribute needs to start with a semicolon + ([\w\-:.@]+) # match the actual attribute name + = # only match attributes that have a value + /xm"; + + return preg_replace($pattern, ' bind:$1=', $attributeString); + } + + /** + * Compile any Blade echo statements that are present in the attribute string. + * + * These echo statements need to be converted to string concatenation statements. + * + * @param string $attributeString + * @return string + */ + protected function compileAttributeEchos(string $attributeString) + { + $value = $this->blade->compileEchos($attributeString); + + $value = $this->escapeSingleQuotesOutsideOfPhpBlocks($value); + + $value = str_replace('', '.\'', $value); + + return $value; + } + + /** + * Escape the single quotes in the given string that are outside of PHP blocks. + * + * @param string $value + * @return string + */ + protected function escapeSingleQuotesOutsideOfPhpBlocks(string $value) + { + return collect(token_get_all($value))->map(function ($token) { + if (! is_array($token)) { + return $token; + } + + return $token[0] === T_INLINE_HTML + ? str_replace("'", "\\'", $token[1]) + : $token[1]; + })->implode(''); + } + + /** + * Convert an array of attributes to a string. + * + * @param array $attributes + * @param bool $escapeBound + * @return string + */ + protected function attributesToString(array $attributes, $escapeBound = true) + { + return collect($attributes) + ->map(function (string $value, string $attribute) use ($escapeBound) { + return $escapeBound && isset($this->boundAttributes[$attribute]) && $value !== 'true' && ! is_numeric($value) + ? "'{$attribute}' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute({$value})" + : "'{$attribute}' => {$value}"; + }) + ->implode(','); + } + + /** + * Strip any quotes from the given string. + * + * @param string $value + * @return string + */ + public function stripQuotes(string $value) + { + return Str::startsWith($value, ['"', '\'']) + ? substr($value, 1, -1) + : $value; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComponents.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComponents.php index af0eee7b..34e4d39f 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComponents.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComponents.php @@ -2,8 +2,17 @@ namespace Illuminate\View\Compilers\Concerns; +use Illuminate\Support\Str; + trait CompilesComponents { + /** + * The component name hash stack. + * + * @var array + */ + protected static $componentHashStack = []; + /** * Compile the component statements into valid PHP. * @@ -12,9 +21,54 @@ trait CompilesComponents */ protected function compileComponent($expression) { + [$component, $alias, $data] = strpos($expression, ',') !== false + ? array_map('trim', explode(',', trim($expression, '()'), 3)) + ['', '', ''] + : [trim($expression, '()'), '', '']; + + $component = trim($component, '\'"'); + + $hash = static::newComponentHash($component); + + if (Str::contains($component, ['::class', '\\'])) { + return static::compileClassComponentOpening($component, $alias, $data, $hash); + } + return "startComponent{$expression}; ?>"; } + /** + * Get a new component hash for a component name. + * + * @param string $component + * @return string + */ + public static function newComponentHash(string $component) + { + static::$componentHashStack[] = $hash = sha1($component); + + return $hash; + } + + /** + * Compile a class component opening. + * + * @param string $component + * @param string $alias + * @param string $data + * @param string $hash + * @return string + */ + public static function compileClassComponentOpening(string $component, string $alias, string $data, string $hash) + { + return implode("\n", [ + '', + 'getContainer()->make('.Str::finish($component, '::class').', '.($data ?: '[]').'); ?>', + 'withName('.$alias.'); ?>', + 'shouldRender()): ?>', + 'startComponent($component->resolveView(), $component->data()); ?>', + ]); + } + /** * Compile the end-component statements into valid PHP. * @@ -22,7 +76,27 @@ trait CompilesComponents */ protected function compileEndComponent() { - return 'renderComponent(); ?>'; + $hash = array_pop(static::$componentHashStack); + + return implode("\n", [ + '', + '', + '', + '', + 'renderComponent(); ?>', + ]); + } + + /** + * Compile the end-component statements into valid PHP. + * + * @return string + */ + public function compileEndComponentClass() + { + return static::compileEndComponent()."\n".implode("\n", [ + '', + ]); } /** @@ -45,4 +119,58 @@ trait CompilesComponents { return 'endSlot(); ?>'; } + + /** + * Compile the component-first statements into valid PHP. + * + * @param string $expression + * @return string + */ + protected function compileComponentFirst($expression) + { + return "startComponentFirst{$expression}; ?>"; + } + + /** + * Compile the end-component-first statements into valid PHP. + * + * @return string + */ + protected function compileEndComponentFirst() + { + return $this->compileEndComponent(); + } + + /** + * Compile the prop statement into valid PHP. + * + * @param string $expression + * @return string + */ + protected function compileProps($expression) + { + return "exceptProps{$expression}; ?> + \$__value) { + \$\$__key = \$\$__key ?? \$__value; +} ?> + + \$__value) { + if (array_key_exists(\$__key, \$__defined_vars)) unset(\$\$__key); +} ?> +"; + } + + /** + * Sanitize the given component attribute value. + * + * @param mixed $value + * @return mixed + */ + public static function sanitizeComponentAttribute($value) + { + return is_string($value) || + (is_object($value) && method_exists($value, '__toString')) + ? e($value) + : $value; + } } diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesConditionals.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesConditionals.php index d592ef17..918e776e 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesConditionals.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesConditionals.php @@ -2,6 +2,8 @@ namespace Illuminate\View\Compilers\Concerns; +use Illuminate\Support\Str; + trait CompilesConditionals { /** @@ -47,6 +49,47 @@ trait CompilesConditionals return ''; } + /** + * Compile the env statements into valid PHP. + * + * @param string $environments + * @return string + */ + protected function compileEnv($environments) + { + return "environment{$environments}): ?>"; + } + + /** + * Compile the end-env statements into valid PHP. + * + * @return string + */ + protected function compileEndEnv() + { + return ''; + } + + /** + * Compile the production statements into valid PHP. + * + * @return string + */ + protected function compileProduction() + { + return "environment('production')): ?>"; + } + + /** + * Compile the end-production statements into valid PHP. + * + * @return string + */ + protected function compileEndProduction() + { + return ''; + } + /** * Compile the if-guest statements into valid PHP. * @@ -94,6 +137,17 @@ trait CompilesConditionals return "yieldContent{$expression}))): ?>"; } + /** + * Compile the section-missing statements into valid PHP. + * + * @param string $expression + * @return string + */ + protected function compileSectionMissing($expression) + { + return "yieldContent{$expression}))): ?>"; + } + /** * Compile the if statements into valid PHP. * @@ -227,4 +281,26 @@ trait CompilesConditionals { return ''; } + + /** + * Compile an once block into valid PHP. + * + * @return string + */ + protected function compileOnce($id = null) + { + $id = $id ? $this->stripParentheses($id) : "'".(string) Str::uuid()."'"; + + return 'hasRenderedOnce('.$id.')): $__env->markAsRenderedOnce('.$id.'); ?>'; + } + + /** + * Compile an end-once block into valid PHP. + * + * @return string + */ + public function compileEndOnce() + { + return ''; + } } diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesEchos.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesEchos.php index 86f352e2..00612ed8 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesEchos.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesEchos.php @@ -10,7 +10,7 @@ trait CompilesEchos * @param string $value * @return string */ - protected function compileEchos($value) + public function compileEchos($value) { foreach ($this->getEchoMethods() as $method) { $value = $this->$method($value); diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesErrors.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesErrors.php new file mode 100644 index 00000000..77edc4bf --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesErrors.php @@ -0,0 +1,37 @@ +stripParentheses($expression); + + return 'getBag($__errorArgs[1] ?? \'default\'); +if ($__bag->has($__errorArgs[0])) : +if (isset($message)) { $__messageOriginal = $message; } +$message = $__bag->first($__errorArgs[0]); ?>'; + } + + /** + * Compile the enderror statements into valid PHP. + * + * @param string $expression + * @return string + */ + protected function compileEnderror($expression) + { + return ''; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesIncludes.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesIncludes.php index 0a310ceb..b80a5b5d 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesIncludes.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesIncludes.php @@ -25,7 +25,7 @@ trait CompilesIncludes { $expression = $this->stripParentheses($expression); - return "make({$expression}, \Illuminate\Support\Arr::except(get_defined_vars(), array('__data', '__path')))->render(); ?>"; + return "make({$expression}, \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>"; } /** @@ -38,7 +38,7 @@ trait CompilesIncludes { $expression = $this->stripParentheses($expression); - return "exists({$expression})) echo \$__env->make({$expression}, \Illuminate\Support\Arr::except(get_defined_vars(), array('__data', '__path')))->render(); ?>"; + return "exists({$expression})) echo \$__env->make({$expression}, \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>"; } /** @@ -51,7 +51,20 @@ trait CompilesIncludes { $expression = $this->stripParentheses($expression); - return "renderWhen($expression, \Illuminate\Support\Arr::except(get_defined_vars(), array('__data', '__path'))); ?>"; + return "renderWhen($expression, \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path'])); ?>"; + } + + /** + * Compile the include-unless statements into valid PHP. + * + * @param string $expression + * @return string + */ + protected function compileIncludeUnless($expression) + { + $expression = $this->stripParentheses($expression); + + return "renderWhen(! $expression, \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path'])); ?>"; } /** @@ -64,6 +77,6 @@ trait CompilesIncludes { $expression = $this->stripParentheses($expression); - return "first({$expression}, \Illuminate\Support\Arr::except(get_defined_vars(), array('__data', '__path')))->render(); ?>"; + return "first({$expression}, \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>"; } } diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesLayouts.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesLayouts.php index 67429c7f..fc6a63af 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesLayouts.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesLayouts.php @@ -2,8 +2,6 @@ namespace Illuminate\View\Compilers\Concerns; -use Illuminate\View\Factory as ViewFactory; - trait CompilesLayouts { /** @@ -23,7 +21,7 @@ trait CompilesLayouts { $expression = $this->stripParentheses($expression); - $echo = "make({$expression}, \Illuminate\Support\Arr::except(get_defined_vars(), array('__data', '__path')))->render(); ?>"; + $echo = "make({$expression}, \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>"; $this->footer[] = $echo; @@ -50,7 +48,9 @@ trait CompilesLayouts */ protected function compileParent() { - return ViewFactory::parentPlaceholder($this->lastSection ?: ''); + $escapedLastSection = strtr($this->lastSection, ['\\' => '\\\\', "'" => "\\'"]); + + return ""; } /** diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesTranslations.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesTranslations.php index feb7e651..7cbafdb9 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesTranslations.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesTranslations.php @@ -7,7 +7,7 @@ trait CompilesTranslations /** * Compile the lang statements into valid PHP. * - * @param string $expression + * @param string|null $expression * @return string */ protected function compileLang($expression) @@ -18,7 +18,7 @@ trait CompilesTranslations return "startTranslation{$expression}; ?>"; } - return "getFromJson{$expression}; ?>"; + return "get{$expression}; ?>"; } /** diff --git a/vendor/laravel/framework/src/Illuminate/View/Component.php b/vendor/laravel/framework/src/Illuminate/View/Component.php new file mode 100644 index 00000000..c3e37549 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/View/Component.php @@ -0,0 +1,279 @@ +render(); + + if ($view instanceof View) { + return $view; + } + + $resolver = function ($view) { + $factory = Container::getInstance()->make('view'); + + return $factory->exists($view) + ? $view + : $this->createBladeViewFromString($factory, $view); + }; + + return $view instanceof Closure ? function (array $data = []) use ($view, $resolver) { + return $resolver($view($data)); + } + : $resolver($view); + } + + /** + * Create a Blade view with the raw component string content. + * + * @param \Illuminate\Contracts\View\Factory $factory + * @param string $contents + * @return string + */ + protected function createBladeViewFromString($factory, $contents) + { + $factory->addNamespace( + '__components', + $directory = Container::getInstance()['config']->get('view.compiled') + ); + + if (! file_exists($viewFile = $directory.'/'.sha1($contents).'.blade.php')) { + if (! is_dir($directory)) { + mkdir($directory, 0755, true); + } + + file_put_contents($viewFile, $contents); + } + + return '__components::'.basename($viewFile, '.blade.php'); + } + + /** + * Get the data that should be supplied to the view. + * + * @author Freek Van der Herten + * @author Brent Roose + * + * @return array + */ + public function data() + { + $this->attributes = $this->attributes ?: new ComponentAttributeBag; + + return array_merge($this->extractPublicProperties(), $this->extractPublicMethods()); + } + + /** + * Extract the public properties for the component. + * + * @return array + */ + protected function extractPublicProperties() + { + $class = get_class($this); + + if (! isset(static::$propertyCache[$class])) { + $reflection = new ReflectionClass($this); + + static::$propertyCache[$class] = collect($reflection->getProperties(ReflectionProperty::IS_PUBLIC)) + ->reject(function (ReflectionProperty $property) { + return $property->isStatic(); + }) + ->reject(function (ReflectionProperty $property) { + return $this->shouldIgnore($property->getName()); + }) + ->map(function (ReflectionProperty $property) { + return $property->getName(); + })->all(); + } + + $values = []; + + foreach (static::$propertyCache[$class] as $property) { + $values[$property] = $this->{$property}; + } + + return $values; + } + + /** + * Extract the public methods for the component. + * + * @return array + */ + protected function extractPublicMethods() + { + $class = get_class($this); + + if (! isset(static::$methodCache[$class])) { + $reflection = new ReflectionClass($this); + + static::$methodCache[$class] = collect($reflection->getMethods(ReflectionMethod::IS_PUBLIC)) + ->reject(function (ReflectionMethod $method) { + return $this->shouldIgnore($method->getName()); + }) + ->map(function (ReflectionMethod $method) { + return $method->getName(); + }); + } + + $values = []; + + foreach (static::$methodCache[$class] as $method) { + $values[$method] = $this->createVariableFromMethod(new ReflectionMethod($this, $method)); + } + + return $values; + } + + /** + * Create a callable variable from the given method. + * + * @param \ReflectionMethod $method + * @return mixed + */ + protected function createVariableFromMethod(ReflectionMethod $method) + { + return $method->getNumberOfParameters() === 0 + ? $this->createInvokableVariable($method->getName()) + : Closure::fromCallable([$this, $method->getName()]); + } + + /** + * Create an invokable, toStringable variable for the given component method. + * + * @param string $method + * @return \Illuminate\View\InvokableComponentVariable + */ + protected function createInvokableVariable(string $method) + { + return new InvokableComponentVariable(function () use ($method) { + return $this->{$method}(); + }); + } + + /** + * Determine if the given property / method should be ignored. + * + * @param string $name + * @return bool + */ + protected function shouldIgnore($name) + { + return Str::startsWith($name, '__') || + in_array($name, $this->ignoredMethods()); + } + + /** + * Get the methods that should be ignored. + * + * @return array + */ + protected function ignoredMethods() + { + return array_merge([ + 'data', + 'render', + 'resolveView', + 'shouldRender', + 'view', + 'withName', + 'withAttributes', + ], $this->except); + } + + /** + * Set the component alias name. + * + * @param string $name + * @return $this + */ + public function withName($name) + { + $this->componentName = $name; + + return $this; + } + + /** + * Set the extra attributes that the component should make available. + * + * @param array $attributes + * @return $this + */ + public function withAttributes(array $attributes) + { + $this->attributes = $this->attributes ?: new ComponentAttributeBag; + + $this->attributes->setAttributes($attributes); + + return $this; + } + + /** + * Determine if the component should be rendered. + * + * @return bool + */ + public function shouldRender() + { + return true; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php b/vendor/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php new file mode 100644 index 00000000..cc9d628a --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php @@ -0,0 +1,308 @@ +attributes = $attributes; + } + + /** + * Get the first attribute's value. + * + * @param mixed $default + * @return mixed + */ + public function first($default = null) + { + return $this->getIterator()->current() ?? value($default); + } + + /** + * Get a given attribute from the attribute array. + * + * @param string $key + * @param mixed $default + * @return mixed + */ + public function get($key, $default = null) + { + return $this->attributes[$key] ?? value($default); + } + + /** + * Only include the given attribute from the attribute array. + * + * @param mixed|array $keys + * @return static + */ + public function only($keys) + { + if (is_null($keys)) { + $values = $this->attributes; + } else { + $keys = Arr::wrap($keys); + + $values = Arr::only($this->attributes, $keys); + } + + return new static($values); + } + + /** + * Exclude the given attribute from the attribute array. + * + * @param mixed|array $keys + * @return static + */ + public function except($keys) + { + if (is_null($keys)) { + $values = $this->attributes; + } else { + $keys = Arr::wrap($keys); + + $values = Arr::except($this->attributes, $keys); + } + + return new static($values); + } + + /** + * Filter the attributes, returning a bag of attributes that pass the filter. + * + * @param callable $callback + * @return static + */ + public function filter($callback) + { + return new static(collect($this->attributes)->filter($callback)->all()); + } + + /** + * Return a bag of attributes that have keys starting with the given value / pattern. + * + * @param string $string + * @return static + */ + public function whereStartsWith($string) + { + return $this->filter(function ($value, $key) use ($string) { + return Str::startsWith($key, $string); + }); + } + + /** + * Return a bag of attributes with keys that do not start with the given value / pattern. + * + * @param string $string + * @return static + */ + public function whereDoesntStartWith($string) + { + return $this->filter(function ($value, $key) use ($string) { + return ! Str::startsWith($key, $string); + }); + } + + /** + * Return a bag of attributes that have keys starting with the given value / pattern. + * + * @param string $string + * @return static + */ + public function thatStartWith($string) + { + return $this->whereStartsWith($string); + } + + /** + * Exclude the given attribute from the attribute array. + * + * @param mixed|array $keys + * @return static + */ + public function exceptProps($keys) + { + $props = []; + + foreach ($keys as $key => $defaultValue) { + $key = is_numeric($key) ? $defaultValue : $key; + + $props[] = $key; + $props[] = Str::kebab($key); + } + + return $this->except($props); + } + + /** + * Merge additional attributes / values into the attribute bag. + * + * @param array $attributeDefaults + * @return static + */ + public function merge(array $attributeDefaults = []) + { + $attributes = []; + + $attributeDefaults = array_map(function ($value) { + if (is_null($value) || is_bool($value)) { + return $value; + } + + return e($value); + }, $attributeDefaults); + + foreach ($this->attributes as $key => $value) { + if ($key !== 'class') { + $attributes[$key] = $value; + + continue; + } + + $attributes[$key] = implode(' ', array_unique( + array_filter([$attributeDefaults[$key] ?? '', $value]) + )); + } + + return new static(array_merge($attributeDefaults, $attributes)); + } + + /** + * Set the underlying attributes. + * + * @param array $attributes + * @return void + */ + public function setAttributes(array $attributes) + { + $this->attributes = $attributes; + } + + /** + * Get content as a string of HTML. + * + * @return string + */ + public function toHtml() + { + return (string) $this; + } + + /** + * Merge additional attributes / values into the attribute bag. + * + * @param array $attributeDefaults + * @return \Illuminate\Support\HtmlString + */ + public function __invoke(array $attributeDefaults = []) + { + return new HtmlString((string) $this->merge($attributeDefaults)); + } + + /** + * Determine if the given offset exists. + * + * @param string $offset + * @return bool + */ + public function offsetExists($offset) + { + return isset($this->attributes[$offset]); + } + + /** + * Get the value at the given offset. + * + * @param string $offset + * @return mixed + */ + public function offsetGet($offset) + { + return $this->get($offset); + } + + /** + * Set the value at a given offset. + * + * @param string $offset + * @param mixed $value + * @return void + */ + public function offsetSet($offset, $value) + { + $this->attributes[$offset] = $value; + } + + /** + * Remove the value at the given offset. + * + * @param string $offset + * @return void + */ + public function offsetUnset($offset) + { + unset($this->attributes[$offset]); + } + + /** + * Get an iterator for the items. + * + * @return \ArrayIterator + */ + public function getIterator() + { + return new ArrayIterator($this->attributes); + } + + /** + * Implode the attributes into a single HTML ready string. + * + * @return string + */ + public function __toString() + { + $string = ''; + + foreach ($this->attributes as $key => $value) { + if ($value === false || is_null($value)) { + continue; + } + + if ($value === true) { + $value = $key; + } + + $string .= ' '.$key.'="'.str_replace('"', '\\"', trim($value)).'"'; + } + + return trim($string); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php index 703b9c5d..f14de61a 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php +++ b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php @@ -2,7 +2,11 @@ namespace Illuminate\View\Concerns; +use Closure; +use Illuminate\Support\Arr; use Illuminate\Support\HtmlString; +use Illuminate\View\View; +use InvalidArgumentException; trait ManagesComponents { @@ -37,14 +41,14 @@ trait ManagesComponents /** * Start a component rendering process. * - * @param string $name + * @param \Illuminate\View\View|\Closure|string $view * @param array $data * @return void */ - public function startComponent($name, array $data = []) + public function startComponent($view, array $data = []) { if (ob_start()) { - $this->componentStack[] = $name; + $this->componentStack[] = $view; $this->componentData[$this->currentComponent()] = $data; @@ -52,6 +56,22 @@ trait ManagesComponents } } + /** + * Get the first view that actually exists from the given list, and start a component. + * + * @param array $names + * @param array $data + * @return void + */ + public function startComponentFirst(array $names, array $data = []) + { + $name = Arr::first($names, function ($item) { + return $this->exists($item); + }); + + $this->startComponent($name, $data); + } + /** * Render the current component. * @@ -59,18 +79,27 @@ trait ManagesComponents */ public function renderComponent() { - $name = array_pop($this->componentStack); + $view = array_pop($this->componentStack); - return $this->make($name, $this->componentData($name))->render(); + $data = $this->componentData(); + + if ($view instanceof Closure) { + $view = $view($data); + } + + if ($view instanceof View) { + return $view->with($data)->render(); + } else { + return $this->make($view, $data)->render(); + } } /** * Get the data for the given component. * - * @param string $name * @return array */ - protected function componentData($name) + protected function componentData() { return array_merge( $this->componentData[count($this->componentStack)], @@ -88,14 +117,14 @@ trait ManagesComponents */ public function slot($name, $content = null) { - if (func_num_args() === 2) { + if (func_num_args() > 2) { + throw new InvalidArgumentException('You passed too many arguments to the ['.$name.'] slot.'); + } elseif (func_num_args() === 2) { $this->slots[$this->currentComponent()][$name] = $content; - } else { - if (ob_start()) { - $this->slots[$this->currentComponent()][$name] = ''; + } elseif (ob_start()) { + $this->slots[$this->currentComponent()][$name] = ''; - $this->slotStack[$this->currentComponent()][] = $name; - } + $this->slotStack[$this->currentComponent()][] = $name; } } diff --git a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesEvents.php b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesEvents.php index 7e844b29..39902905 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesEvents.php +++ b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesEvents.php @@ -3,15 +3,15 @@ namespace Illuminate\View\Concerns; use Closure; -use Illuminate\Support\Str; use Illuminate\Contracts\View\View as ViewContract; +use Illuminate\Support\Str; trait ManagesEvents { /** * Register a view creator event. * - * @param array|string $views + * @param array|string $views * @param \Closure|string $callback * @return array */ @@ -85,9 +85,9 @@ trait ManagesEvents /** * Register a class based view composer. * - * @param string $view - * @param string $class - * @param string $prefix + * @param string $view + * @param string $class + * @param string $prefix * @return \Closure */ protected function addClassEvent($view, $class, $prefix) @@ -121,9 +121,7 @@ trait ManagesEvents // the instance out of the IoC container and call the method on it with the // given arguments that are passed to the Closure as the composer's data. return function () use ($class, $method) { - return call_user_func_array( - [$this->container->make($class), $method], func_get_args() - ); + return $this->container->make($class)->{$method}(...func_get_args()); }; } @@ -153,7 +151,7 @@ trait ManagesEvents /** * Add a listener to the event dispatcher. * - * @param string $name + * @param string $name * @param \Closure $callback * @return void */ diff --git a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesLayouts.php b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesLayouts.php index c1ef8714..f0451265 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesLayouts.php +++ b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesLayouts.php @@ -2,8 +2,9 @@ namespace Illuminate\View\Concerns; -use InvalidArgumentException; use Illuminate\Contracts\View\View; +use Illuminate\Support\Str; +use InvalidArgumentException; trait ManagesLayouts { @@ -28,6 +29,13 @@ trait ManagesLayouts */ protected static $parentPlaceholder = []; + /** + * The parent placeholder salt for the request. + * + * @var string + */ + protected static $parentPlaceholderSalt; + /** * Start injecting content into a section. * @@ -168,12 +176,28 @@ trait ManagesLayouts public static function parentPlaceholder($section = '') { if (! isset(static::$parentPlaceholder[$section])) { - static::$parentPlaceholder[$section] = '##parent-placeholder-'.sha1($section).'##'; + $salt = static::parentPlaceholderSalt(); + + static::$parentPlaceholder[$section] = '##parent-placeholder-'.sha1($salt.$section).'##'; } return static::$parentPlaceholder[$section]; } + /** + * Get the parent placeholder salt. + * + * @return string + */ + protected static function parentPlaceholderSalt() + { + if (! static::$parentPlaceholderSalt) { + return static::$parentPlaceholderSalt = Str::random(40); + } + + return static::$parentPlaceholderSalt; + } + /** * Check if section exists. * @@ -185,11 +209,22 @@ trait ManagesLayouts return array_key_exists($name, $this->sections); } + /** + * Check if section does not exist. + * + * @param string $name + * @return bool + */ + public function sectionMissing($name) + { + return ! $this->hasSection($name); + } + /** * Get the contents of a section. * * @param string $name - * @param string $default + * @param string|null $default * @return mixed */ public function getSection($name, $default = null) diff --git a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesLoops.php b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesLoops.php index 5f50b247..edd6363e 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesLoops.php +++ b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesLoops.php @@ -33,6 +33,8 @@ trait ManagesLoops 'count' => $length, 'first' => true, 'last' => isset($length) ? $length == 1 : null, + 'odd' => false, + 'even' => true, 'depth' => count($this->loopsStack) + 1, 'parent' => $parent ? (object) $parent : null, ]; @@ -51,6 +53,8 @@ trait ManagesLoops 'iteration' => $loop['iteration'] + 1, 'index' => $loop['iteration'], 'first' => $loop['iteration'] == 0, + 'odd' => ! $loop['odd'], + 'even' => ! $loop['even'], 'remaining' => isset($loop['count']) ? $loop['remaining'] - 1 : null, 'last' => isset($loop['count']) ? $loop['iteration'] == $loop['count'] - 1 : null, ]); diff --git a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesTranslations.php b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesTranslations.php index 841c3fe1..a77fc26a 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesTranslations.php +++ b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesTranslations.php @@ -31,7 +31,7 @@ trait ManagesTranslations */ public function renderTranslation() { - return $this->container->make('translator')->getFromJson( + return $this->container->make('translator')->get( trim(ob_get_clean()), $this->translationReplacements ); } diff --git a/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php b/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php index 2f7f84b1..afcba767 100755 --- a/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php +++ b/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php @@ -2,9 +2,9 @@ namespace Illuminate\View\Engines; -use Exception; -use ErrorException; use Illuminate\View\Compilers\CompilerInterface; +use Illuminate\View\ViewException; +use Throwable; class CompilerEngine extends PhpEngine { @@ -37,7 +37,7 @@ class CompilerEngine extends PhpEngine * Get the evaluated contents of the view. * * @param string $path - * @param array $data + * @param array $data * @return string */ public function get($path, array $data = []) @@ -51,12 +51,10 @@ class CompilerEngine extends PhpEngine $this->compiler->compile($path); } - $compiled = $this->compiler->getCompiledPath($path); - // Once we have the path to the compiled file, we will evaluate the paths with // typical PHP just like any other templates. We also keep a stack of views // which have been rendered for right exception messages to be generated. - $results = $this->evaluatePath($compiled, $data); + $results = $this->evaluatePath($this->compiler->getCompiledPath($path), $data); array_pop($this->lastCompiled); @@ -66,15 +64,15 @@ class CompilerEngine extends PhpEngine /** * Handle a view exception. * - * @param \Exception $e + * @param \Throwable $e * @param int $obLevel * @return void * - * @throws \Exception + * @throws \Throwable */ - protected function handleViewException(Exception $e, $obLevel) + protected function handleViewException(Throwable $e, $obLevel) { - $e = new ErrorException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e); + $e = new ViewException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e); parent::handleViewException($e, $obLevel); } @@ -82,10 +80,10 @@ class CompilerEngine extends PhpEngine /** * Get the exception message for an exception. * - * @param \Exception $e + * @param \Throwable $e * @return string */ - protected function getMessage(Exception $e) + protected function getMessage(Throwable $e) { return $e->getMessage().' (View: '.realpath(last($this->lastCompiled)).')'; } diff --git a/vendor/laravel/framework/src/Illuminate/View/Engines/EngineResolver.php b/vendor/laravel/framework/src/Illuminate/View/Engines/EngineResolver.php index 98d14ed6..d0edb736 100755 --- a/vendor/laravel/framework/src/Illuminate/View/Engines/EngineResolver.php +++ b/vendor/laravel/framework/src/Illuminate/View/Engines/EngineResolver.php @@ -26,7 +26,7 @@ class EngineResolver * * The engine string typically corresponds to a file extension. * - * @param string $engine + * @param string $engine * @param \Closure $resolver * @return void */ diff --git a/vendor/laravel/framework/src/Illuminate/View/Engines/FileEngine.php b/vendor/laravel/framework/src/Illuminate/View/Engines/FileEngine.php index 360b5438..f73c4a79 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Engines/FileEngine.php +++ b/vendor/laravel/framework/src/Illuminate/View/Engines/FileEngine.php @@ -10,7 +10,7 @@ class FileEngine implements Engine * Get the evaluated contents of the view. * * @param string $path - * @param array $data + * @param array $data * @return string */ public function get($path, array $data = []) diff --git a/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php b/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php index 4209e58b..e2e80757 100755 --- a/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php +++ b/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php @@ -2,10 +2,8 @@ namespace Illuminate\View\Engines; -use Exception; -use Throwable; use Illuminate\Contracts\View\Engine; -use Symfony\Component\Debug\Exception\FatalThrowableError; +use Throwable; class PhpEngine implements Engine { @@ -13,7 +11,7 @@ class PhpEngine implements Engine * Get the evaluated contents of the view. * * @param string $path - * @param array $data + * @param array $data * @return string */ public function get($path, array $data = []) @@ -25,7 +23,7 @@ class PhpEngine implements Engine * Get the evaluated contents of the view at the given path. * * @param string $__path - * @param array $__data + * @param array $__data * @return string */ protected function evaluatePath($__path, $__data) @@ -41,10 +39,8 @@ class PhpEngine implements Engine // an exception is thrown. This prevents any partial views from leaking. try { include $__path; - } catch (Exception $e) { - $this->handleViewException($e, $obLevel); } catch (Throwable $e) { - $this->handleViewException(new FatalThrowableError($e), $obLevel); + $this->handleViewException($e, $obLevel); } return ltrim(ob_get_clean()); @@ -53,13 +49,13 @@ class PhpEngine implements Engine /** * Handle a view exception. * - * @param \Exception $e + * @param \Throwable $e * @param int $obLevel * @return void * - * @throws \Exception + * @throws \Throwable */ - protected function handleViewException(Exception $e, $obLevel) + protected function handleViewException(Throwable $e, $obLevel) { while (ob_get_level() > $obLevel) { ob_end_clean(); diff --git a/vendor/laravel/framework/src/Illuminate/View/Factory.php b/vendor/laravel/framework/src/Illuminate/View/Factory.php index 20148603..cdb803f3 100755 --- a/vendor/laravel/framework/src/Illuminate/View/Factory.php +++ b/vendor/laravel/framework/src/Illuminate/View/Factory.php @@ -2,15 +2,15 @@ namespace Illuminate\View; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use InvalidArgumentException; -use Illuminate\Support\Traits\Macroable; +use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\View\Engines\EngineResolver; -use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\View\Factory as FactoryContract; +use Illuminate\Support\Arr; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use Illuminate\View\Engines\EngineResolver; +use InvalidArgumentException; class Factory implements FactoryContract { @@ -66,6 +66,7 @@ class Factory implements FactoryContract 'blade.php' => 'blade', 'php' => 'php', 'css' => 'file', + 'html' => 'file', ]; /** @@ -82,6 +83,13 @@ class Factory implements FactoryContract */ protected $renderCount = 0; + /** + * The "once" block IDs that have been rendered. + * + * @var array + */ + protected $renderedOnce = []; + /** * Create a new view factory instance. * @@ -103,8 +111,8 @@ class Factory implements FactoryContract * Get the evaluated view contents for the given view. * * @param string $path - * @param \Illuminate\Contracts\Support\Arrayable|array $data - * @param array $mergeData + * @param \Illuminate\Contracts\Support\Arrayable|array $data + * @param array $mergeData * @return \Illuminate\Contracts\View\View */ public function file($path, $data = [], $mergeData = []) @@ -120,8 +128,8 @@ class Factory implements FactoryContract * Get the evaluated view contents for the given view. * * @param string $view - * @param \Illuminate\Contracts\Support\Arrayable|array $data - * @param array $mergeData + * @param \Illuminate\Contracts\Support\Arrayable|array $data + * @param array $mergeData * @return \Illuminate\Contracts\View\View */ public function make($view, $data = [], $mergeData = []) @@ -144,8 +152,8 @@ class Factory implements FactoryContract * Get the first view that actually exists from the given list. * * @param array $views - * @param \Illuminate\Contracts\Support\Arrayable|array $data - * @param array $mergeData + * @param \Illuminate\Contracts\Support\Arrayable|array $data + * @param array $mergeData * @return \Illuminate\Contracts\View\View * * @throws \InvalidArgumentException @@ -168,8 +176,8 @@ class Factory implements FactoryContract * * @param bool $condition * @param string $view - * @param \Illuminate\Contracts\Support\Arrayable|array $data - * @param array $mergeData + * @param \Illuminate\Contracts\Support\Arrayable|array $data + * @param array $mergeData * @return string */ public function renderWhen($condition, $view, $data = [], $mergeData = []) @@ -185,7 +193,7 @@ class Factory implements FactoryContract * Get the rendered contents of a partial from a loop. * * @param string $view - * @param array $data + * @param array $data * @param string $iterator * @param string $empty * @return string @@ -220,7 +228,7 @@ class Factory implements FactoryContract /** * Normalize a view name. * - * @param string $name + * @param string $name * @return string */ protected function normalizeName($name) @@ -280,7 +288,7 @@ class Factory implements FactoryContract public function getEngineFromPath($path) { if (! $extension = $this->getExtension($path)) { - throw new InvalidArgumentException("Unrecognized extension in file: {$path}"); + throw new InvalidArgumentException("Unrecognized extension in file: {$path}."); } $engine = $this->extensions[$extension]; @@ -292,7 +300,7 @@ class Factory implements FactoryContract * Get the extension used by the view file. * * @param string $path - * @return string + * @return string|null */ protected function getExtension($path) { @@ -307,7 +315,7 @@ class Factory implements FactoryContract * Add a piece of shared data to the environment. * * @param array|string $key - * @param mixed $value + * @param mixed|null $value * @return mixed */ public function share($key, $value = null) @@ -351,6 +359,28 @@ class Factory implements FactoryContract return $this->renderCount == 0; } + /** + * Determine if the given once token has been rendered. + * + * @param string $id + * @return bool + */ + public function hasRenderedOnce(string $id) + { + return isset($this->renderedOnce[$id]); + } + + /** + * Mark the given once token as having been rendered. + * + * @param string $id + * @return void + */ + public function markAsRenderedOnce(string $id) + { + $this->renderedOnce[$id] = true; + } + /** * Add a location to the array of view locations. * @@ -407,9 +437,9 @@ class Factory implements FactoryContract /** * Register a valid view extension and its engine. * - * @param string $extension - * @param string $engine - * @param \Closure $resolver + * @param string $extension + * @param string $engine + * @param \Closure|null $resolver * @return void */ public function addExtension($extension, $engine, $resolver = null) @@ -433,6 +463,7 @@ class Factory implements FactoryContract public function flushState() { $this->renderCount = 0; + $this->renderedOnce = []; $this->flushSections(); $this->flushStacks(); @@ -547,7 +578,7 @@ class Factory implements FactoryContract * Get an item from the shared data. * * @param string $key - * @param mixed $default + * @param mixed $default * @return mixed */ public function shared($key, $default = null) diff --git a/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php b/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php index 4a380f9c..c518524f 100755 --- a/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php +++ b/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php @@ -2,8 +2,8 @@ namespace Illuminate\View; -use InvalidArgumentException; use Illuminate\Filesystem\Filesystem; +use InvalidArgumentException; class FileViewFinder implements ViewFinderInterface { @@ -40,20 +40,20 @@ class FileViewFinder implements ViewFinderInterface * * @var array */ - protected $extensions = ['blade.php', 'php', 'css']; + protected $extensions = ['blade.php', 'php', 'css', 'html']; /** * Create a new file view loader instance. * * @param \Illuminate\Filesystem\Filesystem $files * @param array $paths - * @param array $extensions + * @param array|null $extensions * @return void */ public function __construct(Filesystem $files, array $paths, array $extensions = null) { $this->files = $files; - $this->paths = $paths; + $this->paths = array_map([$this, 'resolvePath'], $paths); if (isset($extensions)) { $this->extensions = $extensions; @@ -119,7 +119,7 @@ class FileViewFinder implements ViewFinderInterface * Find the given view in the list of paths. * * @param string $name - * @param array $paths + * @param array $paths * @return string * * @throws \InvalidArgumentException @@ -158,7 +158,7 @@ class FileViewFinder implements ViewFinderInterface */ public function addLocation($location) { - $this->paths[] = $location; + $this->paths[] = $this->resolvePath($location); } /** @@ -169,7 +169,18 @@ class FileViewFinder implements ViewFinderInterface */ public function prependLocation($location) { - array_unshift($this->paths, $location); + array_unshift($this->paths, $this->resolvePath($location)); + } + + /** + * Resolve the path. + * + * @param string $path + * @return string + */ + protected function resolvePath($path) + { + return realpath($path) ?: $path; } /** @@ -266,6 +277,19 @@ class FileViewFinder implements ViewFinderInterface return $this->files; } + /** + * Set the active view paths. + * + * @param array $paths + * @return $this + */ + public function setPaths($paths) + { + $this->paths = $paths; + + return $this; + } + /** * Get the active view paths. * @@ -276,6 +300,16 @@ class FileViewFinder implements ViewFinderInterface return $this->paths; } + /** + * Get the views that have been located. + * + * @return array + */ + public function getViews() + { + return $this->views; + } + /** * Get the namespace to file path hints. * diff --git a/vendor/laravel/framework/src/Illuminate/View/InvokableComponentVariable.php b/vendor/laravel/framework/src/Illuminate/View/InvokableComponentVariable.php new file mode 100644 index 00000000..c678a540 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/View/InvokableComponentVariable.php @@ -0,0 +1,95 @@ +callable = $callable; + } + + /** + * Resolve the displayable value that the class is deferring. + * + * @return \Illuminate\Contracts\Support\Htmlable|string + */ + public function resolveDisplayableValue() + { + return $this->__invoke(); + } + + /** + * Get an interator instance for the variable. + * + * @return \ArrayIterator + */ + public function getIterator() + { + $result = $this->__invoke(); + + return new ArrayIterator($result instanceof Enumerable ? $result->all() : $result); + } + + /** + * Dynamically proxy attribute access to the variable. + * + * @param string $key + * @return mixed + */ + public function __get($key) + { + return $this->__invoke()->{$key}; + } + + /** + * Dynamically proxy method access to the variable. + * + * @param string $method + * @param array $parameters + * @return mixed + */ + public function __call($method, $parameters) + { + return $this->__invoke()->{$method}(...$parameters); + } + + /** + * Resolve the variable. + * + * @return mixed + */ + public function __invoke() + { + return call_user_func($this->callable); + } + + /** + * Resolve the variable as a string. + * + * @return mixed + */ + public function __toString() + { + return (string) $this->__invoke(); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php b/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php index 618b7dd4..64015d58 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php +++ b/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php @@ -3,8 +3,8 @@ namespace Illuminate\View\Middleware; use Closure; -use Illuminate\Support\ViewErrorBag; use Illuminate\Contracts\View\Factory as ViewFactory; +use Illuminate\Support\ViewErrorBag; class ShareErrorsFromSession { diff --git a/vendor/laravel/framework/src/Illuminate/View/View.php b/vendor/laravel/framework/src/Illuminate/View/View.php index b888860e..eff64ba8 100755 --- a/vendor/laravel/framework/src/Illuminate/View/View.php +++ b/vendor/laravel/framework/src/Illuminate/View/View.php @@ -2,20 +2,21 @@ namespace Illuminate\View; -use Exception; -use Throwable; use ArrayAccess; use BadMethodCallException; -use Illuminate\Support\Str; -use Illuminate\Support\MessageBag; -use Illuminate\Contracts\View\Engine; -use Illuminate\Support\Traits\Macroable; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Contracts\Support\Renderable; +use Illuminate\Contracts\Support\Htmlable; use Illuminate\Contracts\Support\MessageProvider; +use Illuminate\Contracts\Support\Renderable; +use Illuminate\Contracts\View\Engine; use Illuminate\Contracts\View\View as ViewContract; +use Illuminate\Support\MessageBag; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use Illuminate\Support\ViewErrorBag; +use Throwable; -class View implements ArrayAccess, ViewContract +class View implements ArrayAccess, Htmlable, ViewContract { use Macroable { __call as macroCall; @@ -80,7 +81,7 @@ class View implements ArrayAccess, ViewContract * Get the string contents of the view. * * @param callable|null $callback - * @return string + * @return array|string * * @throws \Throwable */ @@ -89,7 +90,7 @@ class View implements ArrayAccess, ViewContract try { $contents = $this->renderContents(); - $response = isset($callback) ? call_user_func($callback, $this, $contents) : null; + $response = isset($callback) ? $callback($this, $contents) : null; // Once we have the contents of the view, we will flush the sections if we are // done rendering all views so that there is nothing left hanging over when @@ -97,10 +98,6 @@ class View implements ArrayAccess, ViewContract $this->factory->flushStateIfDoneRendering(); return ! is_null($response) ? $response : $contents; - } catch (Exception $e) { - $this->factory->flushState(); - - throw $e; } catch (Throwable $e) { $this->factory->flushState(); @@ -147,7 +144,7 @@ class View implements ArrayAccess, ViewContract * * @return array */ - protected function gatherData() + public function gatherData() { $data = array_merge($this->factory->getShared(), $this->data); @@ -163,7 +160,7 @@ class View implements ArrayAccess, ViewContract /** * Get the sections of the rendered view. * - * @return string + * @return array * * @throws \Throwable */ @@ -178,7 +175,7 @@ class View implements ArrayAccess, ViewContract * Add a piece of data to the view. * * @param string|array $key - * @param mixed $value + * @param mixed $value * @return $this */ public function with($key, $value = null) @@ -197,7 +194,7 @@ class View implements ArrayAccess, ViewContract * * @param string $key * @param string $view - * @param array $data + * @param array $data * @return $this */ public function nest($key, $view, array $data = []) @@ -209,25 +206,27 @@ class View implements ArrayAccess, ViewContract * Add validation errors to the view. * * @param \Illuminate\Contracts\Support\MessageProvider|array $provider + * @param string $bag * @return $this */ - public function withErrors($provider) + public function withErrors($provider, $bag = 'default') { - $this->with('errors', $this->formatErrors($provider)); - - return $this; + return $this->with('errors', (new ViewErrorBag)->put( + $bag, $this->formatErrors($provider) + )); } /** - * Format the given message provider into a MessageBag. + * Parse the given errors into an appropriate value. * - * @param \Illuminate\Contracts\Support\MessageProvider|array $provider + * @param \Illuminate\Contracts\Support\MessageProvider|array|string $provider * @return \Illuminate\Support\MessageBag */ protected function formatErrors($provider) { return $provider instanceof MessageProvider - ? $provider->getMessageBag() : new MessageBag((array) $provider); + ? $provider->getMessageBag() + : new MessageBag((array) $provider); } /** @@ -327,7 +326,7 @@ class View implements ArrayAccess, ViewContract * Set a piece of data on the view. * * @param string $key - * @param mixed $value + * @param mixed $value * @return void */ public function offsetSet($key, $value) @@ -361,7 +360,7 @@ class View implements ArrayAccess, ViewContract * Set a piece of data on the view. * * @param string $key - * @param mixed $value + * @param mixed $value * @return void */ public function __set($key, $value) @@ -395,7 +394,7 @@ class View implements ArrayAccess, ViewContract * Dynamically bind parameters to the view. * * @param string $method - * @param array $parameters + * @param array $parameters * @return \Illuminate\View\View * * @throws \BadMethodCallException @@ -415,6 +414,16 @@ class View implements ArrayAccess, ViewContract return $this->with(Str::camel(substr($method, 4)), $parameters[0]); } + /** + * Get content as a string of HTML. + * + * @return string + */ + public function toHtml() + { + return $this->render(); + } + /** * Get the string contents of the view. * diff --git a/vendor/laravel/framework/src/Illuminate/View/ViewException.php b/vendor/laravel/framework/src/Illuminate/View/ViewException.php new file mode 100644 index 00000000..e6797a29 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/View/ViewException.php @@ -0,0 +1,41 @@ +getPrevious(); + + if (Reflector::isCallable($reportCallable = [$exception, 'report'])) { + return Container::getInstance()->call($reportCallable); + } + + return false; + } + + /** + * Render the exception into an HTTP response. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function render($request) + { + $exception = $this->getPrevious(); + + if ($exception && method_exists($exception, 'render')) { + return $exception->render($request); + } + } +} diff --git a/vendor/laravel/framework/src/Illuminate/View/ViewName.php b/vendor/laravel/framework/src/Illuminate/View/ViewName.php index 03efcc5a..9b803332 100644 --- a/vendor/laravel/framework/src/Illuminate/View/ViewName.php +++ b/vendor/laravel/framework/src/Illuminate/View/ViewName.php @@ -5,7 +5,7 @@ namespace Illuminate\View; class ViewName { /** - * Normalize the given event name. + * Normalize the given view name. * * @param string $name * @return string diff --git a/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php b/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php index fa88136a..1c7a6ea7 100755 --- a/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php @@ -2,12 +2,12 @@ namespace Illuminate\View; -use Illuminate\View\Engines\PhpEngine; use Illuminate\Support\ServiceProvider; -use Illuminate\View\Engines\FileEngine; +use Illuminate\View\Compilers\BladeCompiler; use Illuminate\View\Engines\CompilerEngine; use Illuminate\View\Engines\EngineResolver; -use Illuminate\View\Compilers\BladeCompiler; +use Illuminate\View\Engines\FileEngine; +use Illuminate\View\Engines\PhpEngine; class ViewServiceProvider extends ServiceProvider { @@ -22,6 +22,8 @@ class ViewServiceProvider extends ServiceProvider $this->registerViewFinder(); + $this->registerBladeCompiler(); + $this->registerEngineResolver(); } @@ -78,6 +80,18 @@ class ViewServiceProvider extends ServiceProvider }); } + /** + * Register the Blade compiler implementation. + * + * @return void + */ + public function registerBladeCompiler() + { + $this->app->singleton('blade.compiler', function ($app) { + return new BladeCompiler($app['files'], $app['config']['view.compiled']); + }); + } + /** * Register the engine resolver instance. * @@ -133,15 +147,6 @@ class ViewServiceProvider extends ServiceProvider */ public function registerBladeEngine($resolver) { - // The Compiler engine requires an instance of the CompilerInterface, which in - // this case will be the Blade compiler, so we'll first create the compiler - // instance to pass into the engine so it can compile the views properly. - $this->app->singleton('blade.compiler', function () { - return new BladeCompiler( - $this->app['files'], $this->app['config']['view.compiled'] - ); - }); - $resolver->register('blade', function () { return new CompilerEngine($this->app['blade.compiler']); }); diff --git a/vendor/laravel/framework/src/Illuminate/View/composer.json b/vendor/laravel/framework/src/Illuminate/View/composer.json index 44ecebcc..bac21556 100644 --- a/vendor/laravel/framework/src/Illuminate/View/composer.json +++ b/vendor/laravel/framework/src/Illuminate/View/composer.json @@ -14,13 +14,13 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/container": "5.7.*", - "illuminate/contracts": "5.7.*", - "illuminate/events": "5.7.*", - "illuminate/filesystem": "5.7.*", - "illuminate/support": "5.7.*", - "symfony/debug": "^4.1" + "php": "^7.2.5|^8.0", + "ext-json": "*", + "illuminate/container": "^7.0", + "illuminate/contracts": "^7.0", + "illuminate/events": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -29,7 +29,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.7-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/nexmo-notification-channel/LICENSE.txt b/vendor/laravel/nexmo-notification-channel/LICENSE.txt deleted file mode 100644 index 1ce59636..00000000 --- a/vendor/laravel/nexmo-notification-channel/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) - -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. diff --git a/vendor/laravel/nexmo-notification-channel/composer.json b/vendor/laravel/nexmo-notification-channel/composer.json deleted file mode 100644 index 699918a7..00000000 --- a/vendor/laravel/nexmo-notification-channel/composer.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "laravel/nexmo-notification-channel", - "description": "Nexmo Notification Channel for laravel.", - "keywords": ["laravel", "notifications", "nexmo"], - "license": "MIT", - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "require": { - "php": "^7.1.3", - "nexmo/client": "^1.0" - }, - "require-dev": { - "illuminate/notifications": "~5.7", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.0" - }, - "autoload": { - "psr-4": { - "Illuminate\\Notifications\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "Illuminate\\Tests\\Notifications\\": "tests/" - } - }, - "config": { - "sort-packages": true - }, - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "laravel": { - "providers": [ - "Illuminate\\Notifications\\NexmoChannelServiceProvider" - ] - } - }, - "minimum-stability": "dev", - "prefer-stable": true -} diff --git a/vendor/laravel/nexmo-notification-channel/readme.md b/vendor/laravel/nexmo-notification-channel/readme.md deleted file mode 100644 index e69de29b..00000000 diff --git a/vendor/laravel/nexmo-notification-channel/src/Channels/NexmoSmsChannel.php b/vendor/laravel/nexmo-notification-channel/src/Channels/NexmoSmsChannel.php deleted file mode 100644 index fecbedde..00000000 --- a/vendor/laravel/nexmo-notification-channel/src/Channels/NexmoSmsChannel.php +++ /dev/null @@ -1,64 +0,0 @@ -from = $from; - $this->nexmo = $nexmo; - } - - /** - * Send the given notification. - * - * @param mixed $notifiable - * @param \Illuminate\Notifications\Notification $notification - * @return \Nexmo\Message\Message - */ - public function send($notifiable, Notification $notification) - { - if (! $to = $notifiable->routeNotificationFor('nexmo', $notification)) { - return; - } - - $message = $notification->toNexmo($notifiable); - - if (is_string($message)) { - $message = new NexmoMessage($message); - } - - return $this->nexmo->message()->send([ - 'type' => $message->type, - 'from' => $message->from ?: $this->from, - 'to' => $to, - 'text' => trim($message->content), - ]); - } -} diff --git a/vendor/laravel/nexmo-notification-channel/src/Messages/NexmoMessage.php b/vendor/laravel/nexmo-notification-channel/src/Messages/NexmoMessage.php deleted file mode 100644 index 293cf032..00000000 --- a/vendor/laravel/nexmo-notification-channel/src/Messages/NexmoMessage.php +++ /dev/null @@ -1,76 +0,0 @@ -content = $content; - } - - /** - * Set the message content. - * - * @param string $content - * @return $this - */ - public function content($content) - { - $this->content = $content; - - return $this; - } - - /** - * Set the phone number the message should be sent from. - * - * @param string $from - * @return $this - */ - public function from($from) - { - $this->from = $from; - - return $this; - } - - /** - * Set the message type. - * - * @return $this - */ - public function unicode() - { - $this->type = 'unicode'; - - return $this; - } -} diff --git a/vendor/laravel/nexmo-notification-channel/src/NexmoChannelServiceProvider.php b/vendor/laravel/nexmo-notification-channel/src/NexmoChannelServiceProvider.php deleted file mode 100644 index dc8cb980..00000000 --- a/vendor/laravel/nexmo-notification-channel/src/NexmoChannelServiceProvider.php +++ /dev/null @@ -1,29 +0,0 @@ -app['config']['services.nexmo.key'], - $this->app['config']['services.nexmo.secret'] - )), - $this->app['config']['services.nexmo.sms_from'] - ); - }); - } -} diff --git a/vendor/laravel/slack-notification-channel/LICENSE.txt b/vendor/laravel/slack-notification-channel/LICENSE.txt deleted file mode 100644 index 1ce59636..00000000 --- a/vendor/laravel/slack-notification-channel/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) - -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. diff --git a/vendor/laravel/slack-notification-channel/composer.json b/vendor/laravel/slack-notification-channel/composer.json deleted file mode 100644 index 8bbc02f7..00000000 --- a/vendor/laravel/slack-notification-channel/composer.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "laravel/slack-notification-channel", - "description": "Slack Notification Channel for laravel.", - "keywords": ["laravel", "notifications", "slack"], - "license": "MIT", - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "require": { - "php": "^7.1.3", - "guzzlehttp/guzzle": "^6.0" - }, - "require-dev": { - "illuminate/notifications": "~5.7", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.0" - }, - "autoload": { - "psr-4": { - "Illuminate\\Notifications\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "Illuminate\\Tests\\Notifications\\": "tests/" - } - }, - "config": { - "sort-packages": true - }, - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "laravel": { - "providers": [ - "Illuminate\\Notifications\\SlackChannelServiceProvider" - ] - } - }, - "minimum-stability": "dev", - "prefer-stable": true -} diff --git a/vendor/laravel/slack-notification-channel/readme.md b/vendor/laravel/slack-notification-channel/readme.md deleted file mode 100644 index e69de29b..00000000 diff --git a/vendor/laravel/slack-notification-channel/src/Channels/SlackWebhookChannel.php b/vendor/laravel/slack-notification-channel/src/Channels/SlackWebhookChannel.php deleted file mode 100644 index b5cce83d..00000000 --- a/vendor/laravel/slack-notification-channel/src/Channels/SlackWebhookChannel.php +++ /dev/null @@ -1,122 +0,0 @@ -http = $http; - } - - /** - * Send the given notification. - * - * @param mixed $notifiable - * @param \Illuminate\Notifications\Notification $notification - * @return void - */ - public function send($notifiable, Notification $notification) - { - if (! $url = $notifiable->routeNotificationFor('slack', $notification)) { - return; - } - - $this->http->post($url, $this->buildJsonPayload( - $notification->toSlack($notifiable) - )); - } - - /** - * Build up a JSON payload for the Slack webhook. - * - * @param \Illuminate\Notifications\Messages\SlackMessage $message - * @return array - */ - protected function buildJsonPayload(SlackMessage $message) - { - $optionalFields = array_filter([ - 'channel' => data_get($message, 'channel'), - 'icon_emoji' => data_get($message, 'icon'), - 'icon_url' => data_get($message, 'image'), - 'link_names' => data_get($message, 'linkNames'), - 'unfurl_links' => data_get($message, 'unfurlLinks'), - 'unfurl_media' => data_get($message, 'unfurlMedia'), - 'username' => data_get($message, 'username'), - ]); - - return array_merge([ - 'json' => array_merge([ - 'text' => $message->content, - 'attachments' => $this->attachments($message), - ], $optionalFields), - ], $message->http); - } - - /** - * Format the message's attachments. - * - * @param \Illuminate\Notifications\Messages\SlackMessage $message - * @return array - */ - protected function attachments(SlackMessage $message) - { - return collect($message->attachments)->map(function ($attachment) use ($message) { - return array_filter([ - 'actions' => $attachment->actions, - 'author_icon' => $attachment->authorIcon, - 'author_link' => $attachment->authorLink, - 'author_name' => $attachment->authorName, - 'color' => $attachment->color ?: $message->color(), - 'fallback' => $attachment->fallback, - 'fields' => $this->fields($attachment), - 'footer' => $attachment->footer, - 'footer_icon' => $attachment->footerIcon, - 'image_url' => $attachment->imageUrl, - 'mrkdwn_in' => $attachment->markdown, - 'pretext' => $attachment->pretext, - 'text' => $attachment->content, - 'thumb_url' => $attachment->thumbUrl, - 'title' => $attachment->title, - 'title_link' => $attachment->url, - 'ts' => $attachment->timestamp, - ]); - })->all(); - } - - /** - * Format the attachment's fields. - * - * @param \Illuminate\Notifications\Messages\SlackAttachment $attachment - * @return array - */ - protected function fields(SlackAttachment $attachment) - { - return collect($attachment->fields)->map(function ($value, $key) { - if ($value instanceof SlackAttachmentField) { - return $value->toArray(); - } - - return ['title' => $key, 'value' => $value, 'short' => true]; - })->values()->all(); - } -} diff --git a/vendor/laravel/slack-notification-channel/src/Messages/SlackAttachment.php b/vendor/laravel/slack-notification-channel/src/Messages/SlackAttachment.php deleted file mode 100644 index 4aebde84..00000000 --- a/vendor/laravel/slack-notification-channel/src/Messages/SlackAttachment.php +++ /dev/null @@ -1,348 +0,0 @@ -title = $title; - $this->url = $url; - - return $this; - } - - /** - * Set the pretext of the attachment. - * - * @param string $pretext - * @return $this - */ - public function pretext($pretext) - { - $this->pretext = $pretext; - - return $this; - } - - /** - * Set the content (text) of the attachment. - * - * @param string $content - * @return $this - */ - public function content($content) - { - $this->content = $content; - - return $this; - } - - /** - * A plain-text summary of the attachment. - * - * @param string $fallback - * @return $this - */ - public function fallback($fallback) - { - $this->fallback = $fallback; - - return $this; - } - - /** - * Set the color of the attachment. - * - * @param string $color - * @return $this - */ - public function color($color) - { - $this->color = $color; - - return $this; - } - - /** - * Add a field to the attachment. - * - * @param \Closure|string $title - * @param string $content - * @return $this - */ - public function field($title, $content = '') - { - if (is_callable($title)) { - $callback = $title; - - $callback($attachmentField = new SlackAttachmentField); - - $this->fields[] = $attachmentField; - - return $this; - } - - $this->fields[$title] = $content; - - return $this; - } - - /** - * Set the fields of the attachment. - * - * @param array $fields - * @return $this - */ - public function fields(array $fields) - { - $this->fields = $fields; - - return $this; - } - - /** - * Set the fields containing markdown. - * - * @param array $fields - * @return $this - */ - public function markdown(array $fields) - { - $this->markdown = $fields; - - return $this; - } - - /** - * Set the image URL. - * - * @param string $url - * @return $this - */ - public function image($url) - { - $this->imageUrl = $url; - - return $this; - } - - /** - * Set the URL to the attachment thumbnail. - * - * @param string $url - * @return $this - */ - public function thumb($url) - { - $this->thumbUrl = $url; - - return $this; - } - - /** - * Add an action (button) under the attachment. - * - * @param string $title - * @param string $url - * @param string $style - * @return $this - */ - public function action($title, $url, $style = '') - { - $this->actions[] = [ - 'type' => 'button', - 'text' => $title, - 'url' => $url, - 'style' => $style, - ]; - - return $this; - } - - /** - * Set the author of the attachment. - * - * @param string $name - * @param string|null $link - * @param string|null $icon - * @return $this - */ - public function author($name, $link = null, $icon = null) - { - $this->authorName = $name; - $this->authorLink = $link; - $this->authorIcon = $icon; - - return $this; - } - - /** - * Set the footer content. - * - * @param string $footer - * @return $this - */ - public function footer($footer) - { - $this->footer = $footer; - - return $this; - } - - /** - * Set the footer icon. - * - * @param string $icon - * @return $this - */ - public function footerIcon($icon) - { - $this->footerIcon = $icon; - - return $this; - } - - /** - * Set the timestamp. - * - * @param \DateTimeInterface|\DateInterval|int $timestamp - * @return $this - */ - public function timestamp($timestamp) - { - $this->timestamp = $this->availableAt($timestamp); - - return $this; - } -} diff --git a/vendor/laravel/slack-notification-channel/src/Messages/SlackAttachmentField.php b/vendor/laravel/slack-notification-channel/src/Messages/SlackAttachmentField.php deleted file mode 100644 index f63bb267..00000000 --- a/vendor/laravel/slack-notification-channel/src/Messages/SlackAttachmentField.php +++ /dev/null @@ -1,79 +0,0 @@ -title = $title; - - return $this; - } - - /** - * Set the content of the field. - * - * @param string $content - * @return $this - */ - public function content($content) - { - $this->content = $content; - - return $this; - } - - /** - * Indicates that the content should not be displayed side-by-side with other fields. - * - * @return $this - */ - public function long() - { - $this->short = false; - - return $this; - } - - /** - * Get the array representation of the attachment field. - * - * @return array - */ - public function toArray() - { - return [ - 'title' => $this->title, - 'value' => $this->content, - 'short' => $this->short, - ]; - } -} diff --git a/vendor/laravel/slack-notification-channel/src/Messages/SlackMessage.php b/vendor/laravel/slack-notification-channel/src/Messages/SlackMessage.php deleted file mode 100644 index 6d6a97c0..00000000 --- a/vendor/laravel/slack-notification-channel/src/Messages/SlackMessage.php +++ /dev/null @@ -1,273 +0,0 @@ -level = 'info'; - - return $this; - } - - /** - * Indicate that the notification gives information about a successful operation. - * - * @return $this - */ - public function success() - { - $this->level = 'success'; - - return $this; - } - - /** - * Indicate that the notification gives information about a warning. - * - * @return $this - */ - public function warning() - { - $this->level = 'warning'; - - return $this; - } - - /** - * Indicate that the notification gives information about an error. - * - * @return $this - */ - public function error() - { - $this->level = 'error'; - - return $this; - } - - /** - * Set a custom username and optional emoji icon for the Slack message. - * - * @param string $username - * @param string|null $icon - * @return $this - */ - public function from($username, $icon = null) - { - $this->username = $username; - - if (! is_null($icon)) { - $this->icon = $icon; - } - - return $this; - } - - /** - * Set a custom image icon the message should use. - * - * @param string $image - * @return $this - */ - public function image($image) - { - $this->image = $image; - - return $this; - } - - /** - * Set the Slack channel the message should be sent to. - * - * @param string $channel - * @return $this - */ - public function to($channel) - { - $this->channel = $channel; - - return $this; - } - - /** - * Set the content of the Slack message. - * - * @param string $content - * @return $this - */ - public function content($content) - { - $this->content = $content; - - return $this; - } - - /** - * Define an attachment for the message. - * - * @param \Closure $callback - * @return $this - */ - public function attachment(Closure $callback) - { - $this->attachments[] = $attachment = new SlackAttachment; - - $callback($attachment); - - return $this; - } - - /** - * Get the color for the message. - * - * @return string|null - */ - public function color() - { - switch ($this->level) { - case 'success': - return 'good'; - case 'error': - return 'danger'; - case 'warning': - return 'warning'; - } - } - - /** - * Find and link channel names and usernames. - * - * @return $this - */ - public function linkNames() - { - $this->linkNames = 1; - - return $this; - } - - /** - * Find and link channel names and usernames. - * - * @param string $unfurl - * @return $this - */ - public function unfurlLinks($unfurl) - { - $this->unfurlLinks = $unfurl; - - return $this; - } - - /** - * Find and link channel names and usernames. - * - * @param string $unfurl - * @return $this - */ - public function unfurlMedia($unfurl) - { - $this->unfurlMedia = $unfurl; - - return $this; - } - - /** - * Set additional request options for the Guzzle HTTP client. - * - * @param array $options - * @return $this - */ - public function http(array $options) - { - $this->http = $options; - - return $this; - } -} diff --git a/vendor/laravel/slack-notification-channel/src/SlackChannelServiceProvider.php b/vendor/laravel/slack-notification-channel/src/SlackChannelServiceProvider.php deleted file mode 100644 index 16bcd5e2..00000000 --- a/vendor/laravel/slack-notification-channel/src/SlackChannelServiceProvider.php +++ /dev/null @@ -1,22 +0,0 @@ - - -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. diff --git a/vendor/laravel/tinker/README.md b/vendor/laravel/tinker/README.md index 380c97c3..40284ac6 100644 --- a/vendor/laravel/tinker/README.md +++ b/vendor/laravel/tinker/README.md @@ -1,26 +1,32 @@ -

+

Logo Laravel Tinker

-Build Status -Total Downloads -Latest Stable Version -License +Build Status +Total Downloads +Latest Stable Version +License

## Introduction Laravel Tinker is a powerful REPL for the Laravel framework. -## Installation +## Official Documentation -To get started with Laravel Tinker, simply run: +Documentation for Tinker can be found on the [Laravel website](https://laravel.com/docs/artisan#tinker). - composer require laravel/tinker +## Contributing -## Basic Usage +Thank you for considering contributing to Tinker! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). -From your console, execute the `php artisan tinker` command. +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +Please review [our security policy](https://github.com/laravel/tinker/security/policy) on how to report security vulnerabilities. ## License -Laravel Tinker is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). +Laravel Tinker is open-sourced software licensed under the [MIT license](LICENSE.md). diff --git a/vendor/laravel/tinker/composer.json b/vendor/laravel/tinker/composer.json index 23f6b154..d1500663 100644 --- a/vendor/laravel/tinker/composer.json +++ b/vendor/laravel/tinker/composer.json @@ -10,15 +10,19 @@ } ], "require": { - "php": ">=5.5.9", - "illuminate/console": "~5.1", - "illuminate/contracts": "~5.1", - "illuminate/support": "~5.1", - "psy/psysh": "0.7.*|0.8.*|0.9.*", - "symfony/var-dumper": "~3.0|~4.0" + "php": "^7.2.5|^8.0", + "illuminate/console": "^6.0|^7.0|^8.0|^9.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "psy/psysh": "^0.10.4|^0.11.1", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0" }, "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)." }, "autoload": { "psr-4": { @@ -27,12 +31,14 @@ }, "autoload-dev": { "psr-4": { - "Tests\\": "tests/" + "Laravel\\Tinker\\Tests\\": "tests/", + "App\\": "tests/fixtures/app", + "One\\Two\\": "tests/fixtures/vendor/one/two" } }, "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.x-dev" }, "laravel": { "providers": [ @@ -43,7 +49,6 @@ "config": { "sort-packages": true }, - "suggest": { - "illuminate/database": "The Illuminate Database package (~5.1)." - } + "minimum-stability": "dev", + "prefer-stable": true } diff --git a/vendor/laravel/tinker/config/tinker.php b/vendor/laravel/tinker/config/tinker.php index 181f0fdb..c187942d 100644 --- a/vendor/laravel/tinker/config/tinker.php +++ b/vendor/laravel/tinker/config/tinker.php @@ -19,7 +19,22 @@ return [ /* |-------------------------------------------------------------------------- - | Alias Blacklist + | Auto Aliased Classes + |-------------------------------------------------------------------------- + | + | Tinker will not automatically alias classes in your vendor namespaces + | but you may explicitly allow a subset of classes to get aliased by + | adding the names of each of those classes to the following list. + | + */ + + 'alias' => [ + // + ], + + /* + |-------------------------------------------------------------------------- + | Classes That Should Not Be Aliased |-------------------------------------------------------------------------- | | Typically, Tinker automatically aliases classes as you require them in @@ -28,6 +43,8 @@ return [ | */ - 'dont_alias' => [], + 'dont_alias' => [ + 'App\Nova', + ], ]; diff --git a/vendor/laravel/tinker/src/ClassAliasAutoloader.php b/vendor/laravel/tinker/src/ClassAliasAutoloader.php index 5afdb4f5..994d75c1 100644 --- a/vendor/laravel/tinker/src/ClassAliasAutoloader.php +++ b/vendor/laravel/tinker/src/ClassAliasAutoloader.php @@ -2,8 +2,8 @@ namespace Laravel\Tinker; -use Psy\Shell; use Illuminate\Support\Str; +use Psy\Shell; class ClassAliasAutoloader { @@ -21,16 +21,39 @@ class ClassAliasAutoloader */ protected $classes = []; + /** + * Path to the vendor directory. + * + * @var string + */ + protected $vendorPath; + + /** + * Explicitly included namespaces/classes. + * + * @var \Illuminate\Support\Collection + */ + protected $includedAliases; + + /** + * Excluded namespaces/classes. + * + * @var \Illuminate\Support\Collection + */ + protected $excludedAliases; + /** * Register a new alias loader instance. * * @param \Psy\Shell $shell * @param string $classMapPath + * @param array $includedAliases + * @param array $excludedAliases * @return static */ - public static function register(Shell $shell, $classMapPath) + public static function register(Shell $shell, $classMapPath, array $includedAliases = [], array $excludedAliases = []) { - return tap(new static($shell, $classMapPath), function ($loader) { + return tap(new static($shell, $classMapPath, $includedAliases, $excludedAliases), function ($loader) { spl_autoload_register([$loader, 'aliasClass']); }); } @@ -40,26 +63,21 @@ class ClassAliasAutoloader * * @param \Psy\Shell $shell * @param string $classMapPath + * @param array $includedAliases + * @param array $excludedAliases * @return void */ - public function __construct(Shell $shell, $classMapPath) + public function __construct(Shell $shell, $classMapPath, array $includedAliases = [], array $excludedAliases = []) { $this->shell = $shell; - - $vendorPath = dirname(dirname($classMapPath)); + $this->vendorPath = dirname(dirname($classMapPath)); + $this->includedAliases = collect($includedAliases); + $this->excludedAliases = collect($excludedAliases); $classes = require $classMapPath; - $excludedAliases = collect(config('tinker.dont_alias', [])); - foreach ($classes as $class => $path) { - if (! Str::contains($class, '\\') || Str::startsWith($path, $vendorPath)) { - continue; - } - - if (! $excludedAliases->filter(function ($alias) use ($class) { - return Str::startsWith($class, $alias); - })->isEmpty()) { + if (! $this->isAliasable($class, $path)) { continue; } @@ -83,9 +101,7 @@ class ClassAliasAutoloader return; } - $fullName = isset($this->classes[$class]) - ? $this->classes[$class] - : false; + $fullName = $this->classes[$class] ?? false; if ($fullName) { $this->shell->writeStdout("[!] Aliasing '{$class}' to '{$fullName}' for this Tinker session.\n"); @@ -113,4 +129,35 @@ class ClassAliasAutoloader { $this->unregister(); } + + /** + * Whether a class may be aliased. + * + * @param string $class + * @param string $path + */ + public function isAliasable($class, $path) + { + if (! Str::contains($class, '\\')) { + return false; + } + + if (! $this->includedAliases->filter(function ($alias) use ($class) { + return Str::startsWith($class, $alias); + })->isEmpty()) { + return true; + } + + if (Str::startsWith($path, $this->vendorPath)) { + return false; + } + + if (! $this->excludedAliases->filter(function ($alias) use ($class) { + return Str::startsWith($class, $alias); + })->isEmpty()) { + return false; + } + + return true; + } } diff --git a/vendor/laravel/tinker/src/Console/TinkerCommand.php b/vendor/laravel/tinker/src/Console/TinkerCommand.php index a6f57275..c408993a 100644 --- a/vendor/laravel/tinker/src/Console/TinkerCommand.php +++ b/vendor/laravel/tinker/src/Console/TinkerCommand.php @@ -2,11 +2,14 @@ namespace Laravel\Tinker\Console; -use Psy\Shell; -use Psy\Configuration; use Illuminate\Console\Command; +use Illuminate\Support\Env; use Laravel\Tinker\ClassAliasAutoloader; +use Psy\Configuration; +use Psy\Shell; +use Psy\VersionUpdater\Checker; use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputOption; class TinkerCommand extends Command { @@ -16,7 +19,7 @@ class TinkerCommand extends Command * @var array */ protected $commandWhitelist = [ - 'clear-compiled', 'down', 'env', 'inspire', 'migrate', 'optimize', 'up', + 'clear-compiled', 'down', 'env', 'inspire', 'migrate', 'migrate:install', 'optimize', 'up', ]; /** @@ -36,15 +39,14 @@ class TinkerCommand extends Command /** * Execute the console command. * - * @return void + * @return int */ public function handle() { $this->getApplication()->setCatchExceptions(false); - $config = new Configuration([ - 'updateCheck' => 'never' - ]); + $config = Configuration::fromInput($this->input); + $config->setUpdateCheck(Checker::NEVER); $config->getPresenter()->addCasters( $this->getCasters() @@ -54,12 +56,29 @@ class TinkerCommand extends Command $shell->addCommands($this->getCommands()); $shell->setIncludes($this->argument('include')); - $path = $this->getLaravel()->basePath().DIRECTORY_SEPARATOR.'vendor/composer/autoload_classmap.php'; + $path = Env::get('COMPOSER_VENDOR_DIR', $this->getLaravel()->basePath().DIRECTORY_SEPARATOR.'vendor'); - $loader = ClassAliasAutoloader::register($shell, $path); + $path .= '/composer/autoload_classmap.php'; + + $config = $this->getLaravel()->make('config'); + + $loader = ClassAliasAutoloader::register( + $shell, $path, $config->get('tinker.alias', []), $config->get('tinker.dont_alias', []) + ); + + if ($code = $this->option('execute')) { + try { + $shell->setOutput($this->output); + $shell->execute($code); + } finally { + $loader->unregister(); + } + + return 0; + } try { - $shell->run(); + return $shell->run(); } finally { $loader->unregister(); } @@ -80,7 +99,9 @@ class TinkerCommand extends Command } } - foreach (config('tinker.commands', []) as $command) { + $config = $this->getLaravel()->make('config'); + + foreach ($config->get('tinker.commands', []) as $command) { $commands[] = $this->getApplication()->resolve($command); } @@ -96,6 +117,8 @@ class TinkerCommand extends Command { $casters = [ 'Illuminate\Support\Collection' => 'Laravel\Tinker\TinkerCaster::castCollection', + 'Illuminate\Support\HtmlString' => 'Laravel\Tinker\TinkerCaster::castHtmlString', + 'Illuminate\Support\Stringable' => 'Laravel\Tinker\TinkerCaster::castStringable', ]; if (class_exists('Illuminate\Database\Eloquent\Model')) { @@ -106,7 +129,9 @@ class TinkerCommand extends Command $casters['Illuminate\Foundation\Application'] = 'Laravel\Tinker\TinkerCaster::castApplication'; } - return $casters; + $config = $this->getLaravel()->make('config'); + + return array_merge($casters, (array) $config->get('tinker.casters', [])); } /** @@ -120,4 +145,16 @@ class TinkerCommand extends Command ['include', InputArgument::IS_ARRAY, 'Include file(s) before starting tinker'], ]; } + + /** + * Get the console command options. + * + * @return array + */ + protected function getOptions() + { + return [ + ['execute', null, InputOption::VALUE_OPTIONAL, 'Execute the given code using Tinker'], + ]; + } } diff --git a/vendor/laravel/tinker/src/TinkerCaster.php b/vendor/laravel/tinker/src/TinkerCaster.php index 42862e37..a5c04dee 100644 --- a/vendor/laravel/tinker/src/TinkerCaster.php +++ b/vendor/laravel/tinker/src/TinkerCaster.php @@ -68,6 +68,32 @@ class TinkerCaster ]; } + /** + * Get an array representing the properties of an html string. + * + * @param \Illuminate\Support\HtmlString $htmlString + * @return array + */ + public static function castHtmlString($htmlString) + { + return [ + Caster::PREFIX_VIRTUAL.'html' => $htmlString->toHtml(), + ]; + } + + /** + * Get an array representing the properties of a fluent string. + * + * @param \Illuminate\Support\Stringable $stringable + * @return array + */ + public static function castStringable($stringable) + { + return [ + Caster::PREFIX_VIRTUAL.'value' => (string) $stringable, + ]; + } + /** * Get an array representing the properties of a model. * @@ -84,10 +110,30 @@ class TinkerCaster $model->getVisible() ?: array_diff(array_keys($attributes), $model->getHidden()) ); + $hidden = array_flip($model->getHidden()); + + $appends = (function () { + return array_combine($this->appends, $this->appends); + })->bindTo($model, $model)(); + + foreach ($appends as $appended) { + $attributes[$appended] = $model->{$appended}; + } + $results = []; - foreach (array_intersect_key($attributes, $visible) as $key => $value) { - $results[(isset($visible[$key]) ? Caster::PREFIX_VIRTUAL : Caster::PREFIX_PROTECTED).$key] = $value; + foreach ($attributes as $key => $value) { + $prefix = ''; + + if (isset($visible[$key])) { + $prefix = Caster::PREFIX_VIRTUAL; + } + + if (isset($hidden[$key])) { + $prefix = Caster::PREFIX_PROTECTED; + } + + $results[$prefix.$key] = $value; } return $results; diff --git a/vendor/laravel/tinker/src/TinkerServiceProvider.php b/vendor/laravel/tinker/src/TinkerServiceProvider.php index 76204fb4..3f1cd563 100644 --- a/vendor/laravel/tinker/src/TinkerServiceProvider.php +++ b/vendor/laravel/tinker/src/TinkerServiceProvider.php @@ -2,20 +2,14 @@ namespace Laravel\Tinker; +use Illuminate\Contracts\Support\DeferrableProvider; use Illuminate\Foundation\Application as LaravelApplication; use Illuminate\Support\ServiceProvider; use Laravel\Lumen\Application as LumenApplication; use Laravel\Tinker\Console\TinkerCommand; -class TinkerServiceProvider extends ServiceProvider +class TinkerServiceProvider extends ServiceProvider implements DeferrableProvider { - /** - * Indicates if loading of the provider is deferred. - * - * @var bool - */ - protected $defer = true; - /** * Boot the service provider. * @@ -23,7 +17,7 @@ class TinkerServiceProvider extends ServiceProvider */ public function boot() { - $source = realpath($raw = __DIR__ . '/../config/tinker.php') ?: $raw; + $source = realpath($raw = __DIR__.'/../config/tinker.php') ?: $raw; if ($this->app instanceof LaravelApplication && $this->app->runningInConsole()) { $this->publishes([$source => config_path('tinker.php')]); diff --git a/vendor/laravel/ui/CHANGELOG.md b/vendor/laravel/ui/CHANGELOG.md new file mode 100644 index 00000000..7bb65523 --- /dev/null +++ b/vendor/laravel/ui/CHANGELOG.md @@ -0,0 +1,125 @@ +# Release Notes + +## [Unreleased](https://github.com/laravel/ui/compare/v2.5.0...2.x) + + +## [v2.5.0 (2020-11-03)](https://github.com/laravel/ui/compare/v2.4.1...v2.5.0) + +### Added +- PHP 8 Support ([#179](https://github.com/laravel/ui/pull/179)) + + +## [v2.4.1 (2020-09-22)](https://github.com/laravel/ui/compare/v2.4.0...v2.4.1) + +### Changed +- Revert "Add namespace check to Auth routes" ([#160](https://github.com/laravel/ui/pull/160)) + + +## [v2.4.0 (2020-09-11)](https://github.com/laravel/ui/compare/v2.3.0...v2.4.0) + +### Removed +- Remove Laravel 8 support ([#154](https://github.com/laravel/ui/pull/154)) + +### Fixed +- Fix Bootstrap preset ([#146](https://github.com/laravel/ui/pull/146)) + + +## [v2.3.0 (2020-09-09)](https://github.com/laravel/ui/compare/v2.2.1...v2.3.0) + +### Fixed +- Add namespace check to Auth routes ([#143](https://github.com/laravel/ui/pull/143)) + + +## [v2.2.1 (2020-09-08)](https://github.com/laravel/ui/compare/v2.2.0...v2.2.1) + +### Fixed +- Use proper json responses ([#139](https://github.com/laravel/ui/pull/139)) +- Ensure sass directory exists ([456daa3](https://github.com/laravel/ui/commit/456daa330a32483b0fa9794334e60af6b2db3bf6)) + + +## [v2.2.0 (2020-08-25)](https://github.com/laravel/ui/compare/v2.1.0...v2.2.0) + +### Added +- Laravel 8 support ([4a0db5b](https://github.com/laravel/ui/commit/4a0db5b2e5d3c032b0f213e847008d39c8c7ce45)) + +### Fixed +- Remove caret and replace `display: none` with `d-none` ([#135](https://github.com/laravel/ui/pull/135)) + + +## [v2.1.0 (2020-06-30)](https://github.com/laravel/ui/compare/v2.0.3...v2.1.0) + +### Added +- Allow for optional login and logout routes ([#113](https://github.com/laravel/ui/pull/113)) + +### Fixed +- Missed localizable strings ([#105](https://github.com/laravel/ui/pull/105)) + + +## [v2.0.3 (2020-04-29)](https://github.com/laravel/ui/compare/v2.0.2...v2.0.3) + +### Fixed +- Fix confirm controller overwrite ([#100](https://github.com/laravel/ui/pull/100)) + + +## [v2.0.2 (2020-04-28)](https://github.com/laravel/ui/compare/v2.0.1...v2.0.2) + +### Fixed +- Confirm controller overwrite ([#95](https://github.com/laravel/ui/pull/95)) + + +## [v2.0.1 (2020-03-03)](https://github.com/laravel/ui/compare/v2.0.0...v2.0.1) + +### Fixed +- Make `auth` options empty by default ([47a0a1d](https://github.com/laravel/ui/commit/47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83)) + + +## [v2.0.0 (2020-03-03)](https://github.com/laravel/ui/compare/v1.2.0...v2.0.0) + +### Changed +- The UI package now contains all auth scaffolding from the laravel skeleton + + +## [v1.2.0 (2020-02-18)](https://github.com/laravel/ui/compare/v1.1.2...v1.2.0) + +### Changed +- Use `sass-loader` v8 for Vue preset ([bb64fca](https://github.com/laravel/ui/commit/bb64fca681566ca94457d490a00f899516e75664)) + + +## [v1.1.2 (2019-10-20)](https://github.com/laravel/ui/compare/v1.1.1...v1.1.2) + +### Changed +- Removed Laravel 7.0 support ([0287d4ee](https://github.com/laravel/ui/commit/0287d4eee80aad718bdf7f90117cfe720c493064)) + + +## [v1.1.1 (2019-10-11)](https://github.com/laravel/ui/compare/v1.1.0...v1.1.1) + +### Changed +- Change the specified time until re-authentication ([#37](https://github.com/laravel/ui/pull/37)) + +### Fixed +- Add `auth.passwords.confirm` to exported views ([#36](https://github.com/laravel/ui/pull/36)) + + +## [v1.1.0 (2019-10-08)](https://github.com/laravel/ui/compare/v1.0.1...v1.1.0) + +### Added +- Add password confirmation screen ([#34](https://github.com/laravel/ui/pull/34)) + +### Changed +- Remove X-CSRF-TOKEN header from Axios instance ([#23](https://github.com/laravel/ui/pull/23)) + +### Fixed +- Replace tab to space ([#28](https://github.com/laravel/ui/pull/28)) +- Add missing semicolon to avoid unnecessary diff ([#32](https://github.com/laravel/ui/pull/32)) +- Update resolve-url-loader dependency constraint ([#33](https://github.com/laravel/ui/pull/33)) + + +## [v1.0.1 (2019-09-02)](https://github.com/laravel/ui/compare/v1.0.0...v1.0.1) + +### Added +- Add macro check on ui:auth command ([#16](https://github.com/laravel/ui/pull/16)) + + +## v1.0.0 (2019-08-13) + +Initial commit. diff --git a/vendor/laravel/ui/LICENSE.md b/vendor/laravel/ui/LICENSE.md new file mode 100644 index 00000000..79810c84 --- /dev/null +++ b/vendor/laravel/ui/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Taylor Otwell + +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. diff --git a/vendor/laravel/ui/README.md b/vendor/laravel/ui/README.md new file mode 100644 index 00000000..8df2b08a --- /dev/null +++ b/vendor/laravel/ui/README.md @@ -0,0 +1,33 @@ +# Laravel UI + +Total Downloads +Latest Stable Version +License + +## Introduction + +### This project should no longer be used on new Laravel projects. Please use [Laravel Jetstream](https://github.com/laravel/jetstream) instead. + +While Laravel does not dictate which JavaScript or CSS pre-processors you use, it does provide a basic starting point using [Bootstrap](https://getbootstrap.com/), [React](https://reactjs.org/), and / or [Vue](https://vuejs.org/) that will be helpful for many applications. By default, Laravel uses [NPM](https://www.npmjs.org/) to install both of these frontend packages. + +**We are not accepting new presets.** + +## Official Documentation + +Documentation can be found on the [Laravel website](https://laravel.com/docs/frontend). + +## Contributing + +Thank you for considering contributing to UI! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +Please review [our security policy](https://github.com/laravel/ui/security/policy) on how to report security vulnerabilities. + +## License + +Laravel UI is open-sourced software licensed under the [MIT license](LICENSE.md). diff --git a/vendor/laravel/ui/auth-backend/AuthenticatesUsers.php b/vendor/laravel/ui/auth-backend/AuthenticatesUsers.php new file mode 100644 index 00000000..5863af78 --- /dev/null +++ b/vendor/laravel/ui/auth-backend/AuthenticatesUsers.php @@ -0,0 +1,199 @@ +validateLogin($request); + + // If the class is using the ThrottlesLogins trait, we can automatically throttle + // the login attempts for this application. We'll key this by the username and + // the IP address of the client making these requests into this application. + if (method_exists($this, 'hasTooManyLoginAttempts') && + $this->hasTooManyLoginAttempts($request)) { + $this->fireLockoutEvent($request); + + return $this->sendLockoutResponse($request); + } + + if ($this->attemptLogin($request)) { + return $this->sendLoginResponse($request); + } + + // If the login attempt was unsuccessful we will increment the number of attempts + // to login and redirect the user back to the login form. Of course, when this + // user surpasses their maximum number of attempts they will get locked out. + $this->incrementLoginAttempts($request); + + return $this->sendFailedLoginResponse($request); + } + + /** + * Validate the user login request. + * + * @param \Illuminate\Http\Request $request + * @return void + * + * @throws \Illuminate\Validation\ValidationException + */ + protected function validateLogin(Request $request) + { + $request->validate([ + $this->username() => 'required|string', + 'password' => 'required|string', + ]); + } + + /** + * Attempt to log the user into the application. + * + * @param \Illuminate\Http\Request $request + * @return bool + */ + protected function attemptLogin(Request $request) + { + return $this->guard()->attempt( + $this->credentials($request), $request->filled('remember') + ); + } + + /** + * Get the needed authorization credentials from the request. + * + * @param \Illuminate\Http\Request $request + * @return array + */ + protected function credentials(Request $request) + { + return $request->only($this->username(), 'password'); + } + + /** + * Send the response after the user was authenticated. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse + */ + protected function sendLoginResponse(Request $request) + { + $request->session()->regenerate(); + + $this->clearLoginAttempts($request); + + if ($response = $this->authenticated($request, $this->guard()->user())) { + return $response; + } + + return $request->wantsJson() + ? new JsonResponse([], 204) + : redirect()->intended($this->redirectPath()); + } + + /** + * The user has been authenticated. + * + * @param \Illuminate\Http\Request $request + * @param mixed $user + * @return mixed + */ + protected function authenticated(Request $request, $user) + { + // + } + + /** + * Get the failed login response instance. + * + * @param \Illuminate\Http\Request $request + * @return \Symfony\Component\HttpFoundation\Response + * + * @throws \Illuminate\Validation\ValidationException + */ + protected function sendFailedLoginResponse(Request $request) + { + throw ValidationException::withMessages([ + $this->username() => [trans('auth.failed')], + ]); + } + + /** + * Get the login username to be used by the controller. + * + * @return string + */ + public function username() + { + return 'email'; + } + + /** + * Log the user out of the application. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse + */ + public function logout(Request $request) + { + $this->guard()->logout(); + + $request->session()->invalidate(); + + $request->session()->regenerateToken(); + + if ($response = $this->loggedOut($request)) { + return $response; + } + + return $request->wantsJson() + ? new JsonResponse([], 204) + : redirect('/'); + } + + /** + * The user has logged out of the application. + * + * @param \Illuminate\Http\Request $request + * @return mixed + */ + protected function loggedOut(Request $request) + { + // + } + + /** + * Get the guard to be used during authentication. + * + * @return \Illuminate\Contracts\Auth\StatefulGuard + */ + protected function guard() + { + return Auth::guard(); + } +} diff --git a/vendor/laravel/ui/auth-backend/ConfirmsPasswords.php b/vendor/laravel/ui/auth-backend/ConfirmsPasswords.php new file mode 100644 index 00000000..711c0d02 --- /dev/null +++ b/vendor/laravel/ui/auth-backend/ConfirmsPasswords.php @@ -0,0 +1,71 @@ +validate($this->rules(), $this->validationErrorMessages()); + + $this->resetPasswordConfirmationTimeout($request); + + return $request->wantsJson() + ? new JsonResponse([], 204) + : redirect()->intended($this->redirectPath()); + } + + /** + * Reset the password confirmation timeout. + * + * @param \Illuminate\Http\Request $request + * @return void + */ + protected function resetPasswordConfirmationTimeout(Request $request) + { + $request->session()->put('auth.password_confirmed_at', time()); + } + + /** + * Get the password confirmation validation rules. + * + * @return array + */ + protected function rules() + { + return [ + 'password' => 'required|password', + ]; + } + + /** + * Get the password confirmation validation error messages. + * + * @return array + */ + protected function validationErrorMessages() + { + return []; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RedirectsUsers.php b/vendor/laravel/ui/auth-backend/RedirectsUsers.php similarity index 100% rename from vendor/laravel/framework/src/Illuminate/Foundation/Auth/RedirectsUsers.php rename to vendor/laravel/ui/auth-backend/RedirectsUsers.php diff --git a/vendor/laravel/ui/auth-backend/RegistersUsers.php b/vendor/laravel/ui/auth-backend/RegistersUsers.php new file mode 100644 index 00000000..9a7c352c --- /dev/null +++ b/vendor/laravel/ui/auth-backend/RegistersUsers.php @@ -0,0 +1,68 @@ +validator($request->all())->validate(); + + event(new Registered($user = $this->create($request->all()))); + + $this->guard()->login($user); + + if ($response = $this->registered($request, $user)) { + return $response; + } + + return $request->wantsJson() + ? new JsonResponse([], 201) + : redirect($this->redirectPath()); + } + + /** + * Get the guard to be used during registration. + * + * @return \Illuminate\Contracts\Auth\StatefulGuard + */ + protected function guard() + { + return Auth::guard(); + } + + /** + * The user has been registered. + * + * @param \Illuminate\Http\Request $request + * @param mixed $user + * @return mixed + */ + protected function registered(Request $request, $user) + { + // + } +} diff --git a/vendor/laravel/ui/auth-backend/ResetsPasswords.php b/vendor/laravel/ui/auth-backend/ResetsPasswords.php new file mode 100644 index 00000000..c191323f --- /dev/null +++ b/vendor/laravel/ui/auth-backend/ResetsPasswords.php @@ -0,0 +1,186 @@ +with( + ['token' => $token, 'email' => $request->email] + ); + } + + /** + * Reset the given user's password. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse + */ + public function reset(Request $request) + { + $request->validate($this->rules(), $this->validationErrorMessages()); + + // Here we will attempt to reset the user's password. If it is successful we + // will update the password on an actual user model and persist it to the + // database. Otherwise we will parse the error and return the response. + $response = $this->broker()->reset( + $this->credentials($request), function ($user, $password) { + $this->resetPassword($user, $password); + } + ); + + // If the password was successfully reset, we will redirect the user back to + // the application's home authenticated view. If there is an error we can + // redirect them back to where they came from with their error message. + return $response == Password::PASSWORD_RESET + ? $this->sendResetResponse($request, $response) + : $this->sendResetFailedResponse($request, $response); + } + + /** + * Get the password reset validation rules. + * + * @return array + */ + protected function rules() + { + return [ + 'token' => 'required', + 'email' => 'required|email', + 'password' => 'required|confirmed|min:8', + ]; + } + + /** + * Get the password reset validation error messages. + * + * @return array + */ + protected function validationErrorMessages() + { + return []; + } + + /** + * Get the password reset credentials from the request. + * + * @param \Illuminate\Http\Request $request + * @return array + */ + protected function credentials(Request $request) + { + return $request->only( + 'email', 'password', 'password_confirmation', 'token' + ); + } + + /** + * Reset the given user's password. + * + * @param \Illuminate\Contracts\Auth\CanResetPassword $user + * @param string $password + * @return void + */ + protected function resetPassword($user, $password) + { + $this->setUserPassword($user, $password); + + $user->setRememberToken(Str::random(60)); + + $user->save(); + + event(new PasswordReset($user)); + + $this->guard()->login($user); + } + + /** + * Set the user's password. + * + * @param \Illuminate\Contracts\Auth\CanResetPassword $user + * @param string $password + * @return void + */ + protected function setUserPassword($user, $password) + { + $user->password = Hash::make($password); + } + + /** + * Get the response for a successful password reset. + * + * @param \Illuminate\Http\Request $request + * @param string $response + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse + */ + protected function sendResetResponse(Request $request, $response) + { + if ($request->wantsJson()) { + return new JsonResponse(['message' => trans($response)], 200); + } + + return redirect($this->redirectPath()) + ->with('status', trans($response)); + } + + /** + * Get the response for a failed password reset. + * + * @param \Illuminate\Http\Request $request + * @param string $response + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse + */ + protected function sendResetFailedResponse(Request $request, $response) + { + if ($request->wantsJson()) { + throw ValidationException::withMessages([ + 'email' => [trans($response)], + ]); + } + + return redirect()->back() + ->withInput($request->only('email')) + ->withErrors(['email' => trans($response)]); + } + + /** + * Get the broker to be used during password reset. + * + * @return \Illuminate\Contracts\Auth\PasswordBroker + */ + public function broker() + { + return Password::broker(); + } + + /** + * Get the guard to be used during password reset. + * + * @return \Illuminate\Contracts\Auth\StatefulGuard + */ + protected function guard() + { + return Auth::guard(); + } +} diff --git a/vendor/laravel/ui/auth-backend/SendsPasswordResetEmails.php b/vendor/laravel/ui/auth-backend/SendsPasswordResetEmails.php new file mode 100644 index 00000000..2758bc61 --- /dev/null +++ b/vendor/laravel/ui/auth-backend/SendsPasswordResetEmails.php @@ -0,0 +1,111 @@ +validateEmail($request); + + // We will send the password reset link to this user. Once we have attempted + // to send the link, we will examine the response then see the message we + // need to show to the user. Finally, we'll send out a proper response. + $response = $this->broker()->sendResetLink( + $this->credentials($request) + ); + + return $response == Password::RESET_LINK_SENT + ? $this->sendResetLinkResponse($request, $response) + : $this->sendResetLinkFailedResponse($request, $response); + } + + /** + * Validate the email for the given request. + * + * @param \Illuminate\Http\Request $request + * @return void + */ + protected function validateEmail(Request $request) + { + $request->validate(['email' => 'required|email']); + } + + /** + * Get the needed authentication credentials from the request. + * + * @param \Illuminate\Http\Request $request + * @return array + */ + protected function credentials(Request $request) + { + return $request->only('email'); + } + + /** + * Get the response for a successful password reset link. + * + * @param \Illuminate\Http\Request $request + * @param string $response + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse + */ + protected function sendResetLinkResponse(Request $request, $response) + { + return $request->wantsJson() + ? new JsonResponse(['message' => trans($response)], 200) + : back()->with('status', trans($response)); + } + + /** + * Get the response for a failed password reset link. + * + * @param \Illuminate\Http\Request $request + * @param string $response + * @return \Illuminate\Http\RedirectResponse + * + * @throws \Illuminate\Validation\ValidationException + */ + protected function sendResetLinkFailedResponse(Request $request, $response) + { + if ($request->wantsJson()) { + throw ValidationException::withMessages([ + 'email' => [trans($response)], + ]); + } + + return back() + ->withInput($request->only('email')) + ->withErrors(['email' => trans($response)]); + } + + /** + * Get the broker to be used during password reset. + * + * @return \Illuminate\Contracts\Auth\PasswordBroker + */ + public function broker() + { + return Password::broker(); + } +} diff --git a/vendor/laravel/ui/auth-backend/ThrottlesLogins.php b/vendor/laravel/ui/auth-backend/ThrottlesLogins.php new file mode 100644 index 00000000..8f632377 --- /dev/null +++ b/vendor/laravel/ui/auth-backend/ThrottlesLogins.php @@ -0,0 +1,125 @@ +limiter()->tooManyAttempts( + $this->throttleKey($request), $this->maxAttempts() + ); + } + + /** + * Increment the login attempts for the user. + * + * @param \Illuminate\Http\Request $request + * @return void + */ + protected function incrementLoginAttempts(Request $request) + { + $this->limiter()->hit( + $this->throttleKey($request), $this->decayMinutes() * 60 + ); + } + + /** + * Redirect the user after determining they are locked out. + * + * @param \Illuminate\Http\Request $request + * @return void + * + * @throws \Illuminate\Validation\ValidationException + */ + protected function sendLockoutResponse(Request $request) + { + $seconds = $this->limiter()->availableIn( + $this->throttleKey($request) + ); + + throw ValidationException::withMessages([ + $this->username() => [Lang::get('auth.throttle', [ + 'seconds' => $seconds, + 'minutes' => ceil($seconds / 60), + ])], + ])->status(Response::HTTP_TOO_MANY_REQUESTS); + } + + /** + * Clear the login locks for the given user credentials. + * + * @param \Illuminate\Http\Request $request + * @return void + */ + protected function clearLoginAttempts(Request $request) + { + $this->limiter()->clear($this->throttleKey($request)); + } + + /** + * Fire an event when a lockout occurs. + * + * @param \Illuminate\Http\Request $request + * @return void + */ + protected function fireLockoutEvent(Request $request) + { + event(new Lockout($request)); + } + + /** + * Get the throttle key for the given request. + * + * @param \Illuminate\Http\Request $request + * @return string + */ + protected function throttleKey(Request $request) + { + return Str::lower($request->input($this->username())).'|'.$request->ip(); + } + + /** + * Get the rate limiter instance. + * + * @return \Illuminate\Cache\RateLimiter + */ + protected function limiter() + { + return app(RateLimiter::class); + } + + /** + * Get the maximum number of attempts to allow. + * + * @return int + */ + public function maxAttempts() + { + return property_exists($this, 'maxAttempts') ? $this->maxAttempts : 5; + } + + /** + * Get the number of minutes to throttle for. + * + * @return int + */ + public function decayMinutes() + { + return property_exists($this, 'decayMinutes') ? $this->decayMinutes : 1; + } +} diff --git a/vendor/laravel/ui/auth-backend/VerifiesEmails.php b/vendor/laravel/ui/auth-backend/VerifiesEmails.php new file mode 100644 index 00000000..27ff056b --- /dev/null +++ b/vendor/laravel/ui/auth-backend/VerifiesEmails.php @@ -0,0 +1,95 @@ +user()->hasVerifiedEmail() + ? redirect($this->redirectPath()) + : view('auth.verify'); + } + + /** + * Mark the authenticated user's email address as verified. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse + * + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function verify(Request $request) + { + if (! hash_equals((string) $request->route('id'), (string) $request->user()->getKey())) { + throw new AuthorizationException; + } + + if (! hash_equals((string) $request->route('hash'), sha1($request->user()->getEmailForVerification()))) { + throw new AuthorizationException; + } + + if ($request->user()->hasVerifiedEmail()) { + return $request->wantsJson() + ? new JsonResponse([], 204) + : redirect($this->redirectPath()); + } + + if ($request->user()->markEmailAsVerified()) { + event(new Verified($request->user())); + } + + if ($response = $this->verified($request)) { + return $response; + } + + return $request->wantsJson() + ? new JsonResponse([], 204) + : redirect($this->redirectPath())->with('verified', true); + } + + /** + * The user has been verified. + * + * @param \Illuminate\Http\Request $request + * @return mixed + */ + protected function verified(Request $request) + { + // + } + + /** + * Resend the email verification notification. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse + */ + public function resend(Request $request) + { + if ($request->user()->hasVerifiedEmail()) { + return $request->wantsJson() + ? new JsonResponse([], 204) + : redirect($this->redirectPath()); + } + + $request->user()->sendEmailVerificationNotification(); + + return $request->wantsJson() + ? new JsonResponse([], 202) + : back()->with('resent', true); + } +} diff --git a/vendor/laravel/ui/composer.json b/vendor/laravel/ui/composer.json new file mode 100644 index 00000000..a789652e --- /dev/null +++ b/vendor/laravel/ui/composer.json @@ -0,0 +1,36 @@ +{ + "name": "laravel/ui", + "description": "Laravel UI utilities and presets.", + "keywords": ["laravel", "ui"], + "license": "MIT", + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "require": { + "php": "^7.2.5|^8.0", + "illuminate/console": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/support": "^7.0" + }, + "autoload": { + "psr-4": { + "Laravel\\Ui\\": "src/", + "Illuminate\\Foundation\\Auth\\": "auth-backend/" + } + }, + "config": { + "sort-packages": true + }, + "extra": { + "laravel": { + "providers": [ + "Laravel\\Ui\\UiServiceProvider" + ] + } + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/login.stub b/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/login.stub new file mode 100644 index 00000000..c12b97e5 --- /dev/null +++ b/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/login.stub @@ -0,0 +1,73 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Login') }}
+ +
+
+ @csrf + +
+ + +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('password') + + {{ $message }} + + @enderror +
+
+ +
+
+
+ + + +
+
+
+ +
+
+ + + @if (Route::has('password.request')) + + {{ __('Forgot Your Password?') }} + + @endif +
+
+
+
+
+
+
+
+@endsection diff --git a/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/passwords/confirm.stub b/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/passwords/confirm.stub new file mode 100644 index 00000000..ca78fc1d --- /dev/null +++ b/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/passwords/confirm.stub @@ -0,0 +1,49 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Confirm Password') }}
+ +
+ {{ __('Please confirm your password before continuing.') }} + +
+ @csrf + +
+ + +
+ + + @error('password') + + {{ $message }} + + @enderror +
+
+ +
+
+ + + @if (Route::has('password.request')) + + {{ __('Forgot Your Password?') }} + + @endif +
+
+
+
+
+
+
+
+@endsection diff --git a/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/passwords/email.stub b/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/passwords/email.stub new file mode 100644 index 00000000..1fea9845 --- /dev/null +++ b/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/passwords/email.stub @@ -0,0 +1,47 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Reset Password') }}
+ +
+ @if (session('status')) + + @endif + +
+ @csrf + +
+ + +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+
+ +
+
+
+
+
+
+
+
+@endsection diff --git a/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/passwords/reset.stub b/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/passwords/reset.stub new file mode 100644 index 00000000..989931d3 --- /dev/null +++ b/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/passwords/reset.stub @@ -0,0 +1,65 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Reset Password') }}
+ +
+
+ @csrf + + + +
+ + +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('password') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+@endsection diff --git a/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/register.stub b/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/register.stub new file mode 100644 index 00000000..d236a48e --- /dev/null +++ b/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/register.stub @@ -0,0 +1,77 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Register') }}
+ +
+
+ @csrf + +
+ + +
+ + + @error('name') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('password') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+@endsection diff --git a/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/verify.stub b/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/verify.stub new file mode 100644 index 00000000..9f8c1bc0 --- /dev/null +++ b/vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/verify.stub @@ -0,0 +1,28 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Verify Your Email Address') }}
+ +
+ @if (session('resent')) + + @endif + + {{ __('Before proceeding, please check your email for a verification link.') }} + {{ __('If you did not receive the email') }}, +
+ @csrf + . +
+
+
+
+
+
+@endsection diff --git a/vendor/laravel/ui/src/Auth/bootstrap-stubs/home.stub b/vendor/laravel/ui/src/Auth/bootstrap-stubs/home.stub new file mode 100644 index 00000000..1f34466b --- /dev/null +++ b/vendor/laravel/ui/src/Auth/bootstrap-stubs/home.stub @@ -0,0 +1,23 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Dashboard') }}
+ +
+ @if (session('status')) + + @endif + + {{ __('You are logged in!') }} +
+
+
+
+
+@endsection diff --git a/vendor/laravel/ui/src/Auth/bootstrap-stubs/layouts/app.stub b/vendor/laravel/ui/src/Auth/bootstrap-stubs/layouts/app.stub new file mode 100644 index 00000000..9e795f4e --- /dev/null +++ b/vendor/laravel/ui/src/Auth/bootstrap-stubs/layouts/app.stub @@ -0,0 +1,80 @@ + + + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + + + + + + +
+ + +
+ @yield('content') +
+
+ + diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/controllers/HomeController.stub b/vendor/laravel/ui/src/Auth/stubs/controllers/HomeController.stub similarity index 100% rename from vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/controllers/HomeController.stub rename to vendor/laravel/ui/src/Auth/stubs/controllers/HomeController.stub diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/routes.stub b/vendor/laravel/ui/src/Auth/stubs/routes.stub similarity index 100% rename from vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/routes.stub rename to vendor/laravel/ui/src/Auth/stubs/routes.stub diff --git a/vendor/laravel/ui/src/AuthCommand.php b/vendor/laravel/ui/src/AuthCommand.php new file mode 100644 index 00000000..573c2d6b --- /dev/null +++ b/vendor/laravel/ui/src/AuthCommand.php @@ -0,0 +1,164 @@ + 'auth/login.blade.php', + 'auth/passwords/confirm.stub' => 'auth/passwords/confirm.blade.php', + 'auth/passwords/email.stub' => 'auth/passwords/email.blade.php', + 'auth/passwords/reset.stub' => 'auth/passwords/reset.blade.php', + 'auth/register.stub' => 'auth/register.blade.php', + 'auth/verify.stub' => 'auth/verify.blade.php', + 'home.stub' => 'home.blade.php', + 'layouts/app.stub' => 'layouts/app.blade.php', + ]; + + /** + * Execute the console command. + * + * @return void + * + * @throws \InvalidArgumentException + */ + public function handle() + { + if (static::hasMacro($this->argument('type'))) { + return call_user_func(static::$macros[$this->argument('type')], $this); + } + + if (! in_array($this->argument('type'), ['bootstrap'])) { + throw new InvalidArgumentException('Invalid preset.'); + } + + $this->ensureDirectoriesExist(); + $this->exportViews(); + + if (! $this->option('views')) { + $this->exportBackend(); + } + + $this->info('Authentication scaffolding generated successfully.'); + } + + /** + * Create the directories for the files. + * + * @return void + */ + protected function ensureDirectoriesExist() + { + if (! is_dir($directory = $this->getViewPath('layouts'))) { + mkdir($directory, 0755, true); + } + + if (! is_dir($directory = $this->getViewPath('auth/passwords'))) { + mkdir($directory, 0755, true); + } + } + + /** + * Export the authentication views. + * + * @return void + */ + protected function exportViews() + { + foreach ($this->views as $key => $value) { + if (file_exists($view = $this->getViewPath($value)) && ! $this->option('force')) { + if (! $this->confirm("The [{$value}] view already exists. Do you want to replace it?")) { + continue; + } + } + + copy( + __DIR__.'/Auth/'.$this->argument('type').'-stubs/'.$key, + $view + ); + } + } + + /** + * Export the authentication backend. + * + * @return void + */ + protected function exportBackend() + { + $this->callSilent('ui:controllers'); + + $controller = app_path('Http/Controllers/HomeController.php'); + + if (file_exists($controller) && ! $this->option('force')) { + if ($this->confirm("The [HomeController.php] file already exists. Do you want to replace it?")) { + file_put_contents($controller, $this->compileControllerStub()); + } + } else { + file_put_contents($controller, $this->compileControllerStub()); + } + + file_put_contents( + base_path('routes/web.php'), + file_get_contents(__DIR__.'/Auth/stubs/routes.stub'), + FILE_APPEND + ); + + copy( + __DIR__.'/../stubs/migrations/2014_10_12_100000_create_password_resets_table.php', + base_path('database/migrations/2014_10_12_100000_create_password_resets_table.php') + ); + } + + /** + * Compiles the "HomeController" stub. + * + * @return string + */ + protected function compileControllerStub() + { + return str_replace( + '{{namespace}}', + $this->laravel->getNamespace(), + file_get_contents(__DIR__.'/Auth/stubs/controllers/HomeController.stub') + ); + } + + /** + * Get full view path relative to the application's configured view path. + * + * @param string $path + * @return string + */ + protected function getViewPath($path) + { + return implode(DIRECTORY_SEPARATOR, [ + config('view.paths')[0] ?? resource_path('views'), $path, + ]); + } +} diff --git a/vendor/laravel/ui/src/AuthRouteMethods.php b/vendor/laravel/ui/src/AuthRouteMethods.php new file mode 100644 index 00000000..3faa6b54 --- /dev/null +++ b/vendor/laravel/ui/src/AuthRouteMethods.php @@ -0,0 +1,92 @@ +get('login', 'Auth\LoginController@showLoginForm')->name('login'); + $this->post('login', 'Auth\LoginController@login'); + } + + // Logout Routes... + if ($options['logout'] ?? true) { + $this->post('logout', 'Auth\LoginController@logout')->name('logout'); + } + + // Registration Routes... + if ($options['register'] ?? true) { + $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); + $this->post('register', 'Auth\RegisterController@register'); + } + + // Password Reset Routes... + if ($options['reset'] ?? true) { + $this->resetPassword(); + } + + // Password Confirmation Routes... + if ($options['confirm'] ?? + class_exists($this->prependGroupNamespace('Auth\ConfirmPasswordController'))) { + $this->confirmPassword(); + } + + // Email Verification Routes... + if ($options['verify'] ?? false) { + $this->emailVerification(); + } + }; + } + + /** + * Register the typical reset password routes for an application. + * + * @return void + */ + public function resetPassword() + { + return function () { + $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request'); + $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email'); + $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset'); + $this->post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update'); + }; + } + + /** + * Register the typical confirm password routes for an application. + * + * @return void + */ + public function confirmPassword() + { + return function () { + $this->get('password/confirm', 'Auth\ConfirmPasswordController@showConfirmForm')->name('password.confirm'); + $this->post('password/confirm', 'Auth\ConfirmPasswordController@confirm'); + }; + } + + /** + * Register the typical email verification routes for an application. + * + * @return void + */ + public function emailVerification() + { + return function () { + $this->get('email/verify', 'Auth\VerificationController@show')->name('verification.notice'); + $this->get('email/verify/{id}/{hash}', 'Auth\VerificationController@verify')->name('verification.verify'); + $this->post('email/resend', 'Auth\VerificationController@resend')->name('verification.resend'); + }; + } +} diff --git a/vendor/laravel/ui/src/ControllersCommand.php b/vendor/laravel/ui/src/ControllersCommand.php new file mode 100644 index 00000000..6312ab79 --- /dev/null +++ b/vendor/laravel/ui/src/ControllersCommand.php @@ -0,0 +1,49 @@ +allFiles(__DIR__.'/../stubs/Auth')) + ->each(function (SplFileInfo $file) use ($filesystem) { + $filesystem->copy( + $file->getPathname(), + app_path('Http/Controllers/Auth/'.Str::replaceLast('.stub', '.php', $file->getFilename())) + ); + }); + + $this->info('Authentication scaffolding generated successfully.'); + } +} diff --git a/vendor/laravel/ui/src/Presets/Bootstrap.php b/vendor/laravel/ui/src/Presets/Bootstrap.php new file mode 100644 index 00000000..700c9e93 --- /dev/null +++ b/vendor/laravel/ui/src/Presets/Bootstrap.php @@ -0,0 +1,72 @@ + '^4.0.0', + 'jquery' => '^3.2', + 'popper.js' => '^1.12', + 'sass' => '^1.15.2', + 'sass-loader' => '^8.0.0', + ] + $packages; + } + + /** + * Update the Webpack configuration. + * + * @return void + */ + protected static function updateWebpackConfiguration() + { + copy(__DIR__.'/bootstrap-stubs/webpack.mix.js', base_path('webpack.mix.js')); + } + + /** + * Update the Sass files for the application. + * + * @return void + */ + protected static function updateSass() + { + (new Filesystem)->ensureDirectoryExists(resource_path('sass')); + + copy(__DIR__.'/bootstrap-stubs/_variables.scss', resource_path('sass/_variables.scss')); + copy(__DIR__.'/bootstrap-stubs/app.scss', resource_path('sass/app.scss')); + } + + /** + * Update the bootstrapping files. + * + * @return void + */ + protected static function updateBootstrapping() + { + copy(__DIR__.'/bootstrap-stubs/bootstrap.js', resource_path('js/bootstrap.js')); + } +} diff --git a/vendor/laravel/ui/src/Presets/Preset.php b/vendor/laravel/ui/src/Presets/Preset.php new file mode 100644 index 00000000..c3c222d1 --- /dev/null +++ b/vendor/laravel/ui/src/Presets/Preset.php @@ -0,0 +1,65 @@ +isDirectory($directory = resource_path('js/components'))) { + $filesystem->makeDirectory($directory, 0755, true); + } + } + + /** + * Update the "package.json" file. + * + * @param bool $dev + * @return void + */ + protected static function updatePackages($dev = true) + { + if (! file_exists(base_path('package.json'))) { + return; + } + + $configurationKey = $dev ? 'devDependencies' : 'dependencies'; + + $packages = json_decode(file_get_contents(base_path('package.json')), true); + + $packages[$configurationKey] = static::updatePackageArray( + array_key_exists($configurationKey, $packages) ? $packages[$configurationKey] : [], + $configurationKey + ); + + ksort($packages[$configurationKey]); + + file_put_contents( + base_path('package.json'), + json_encode($packages, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT).PHP_EOL + ); + } + + /** + * Remove the installed Node modules. + * + * @return void + */ + protected static function removeNodeModules() + { + tap(new Filesystem, function ($files) { + $files->deleteDirectory(base_path('node_modules')); + + $files->delete(base_path('yarn.lock')); + }); + } +} diff --git a/vendor/laravel/ui/src/Presets/React.php b/vendor/laravel/ui/src/Presets/React.php new file mode 100644 index 00000000..f3e5ae8d --- /dev/null +++ b/vendor/laravel/ui/src/Presets/React.php @@ -0,0 +1,76 @@ + '^7.0.0', + 'react' => '^16.2.0', + 'react-dom' => '^16.2.0', + ] + Arr::except($packages, ['vue', 'vue-template-compiler']); + } + + /** + * Update the Webpack configuration. + * + * @return void + */ + protected static function updateWebpackConfiguration() + { + copy(__DIR__.'/react-stubs/webpack.mix.js', base_path('webpack.mix.js')); + } + + /** + * Update the example component. + * + * @return void + */ + protected static function updateComponent() + { + (new Filesystem)->delete( + resource_path('js/components/ExampleComponent.vue') + ); + + copy( + __DIR__.'/react-stubs/Example.js', + resource_path('js/components/Example.js') + ); + } + + /** + * Update the bootstrapping files. + * + * @return void + */ + protected static function updateBootstrapping() + { + copy(__DIR__.'/react-stubs/app.js', resource_path('js/app.js')); + } +} diff --git a/vendor/laravel/ui/src/Presets/Vue.php b/vendor/laravel/ui/src/Presets/Vue.php new file mode 100644 index 00000000..a6919615 --- /dev/null +++ b/vendor/laravel/ui/src/Presets/Vue.php @@ -0,0 +1,82 @@ + '^2.3.1', + 'sass' => '^1.20.1', + 'sass-loader' => '^8.0.0', + 'vue' => '^2.5.17', + 'vue-template-compiler' => '^2.6.10', + ] + Arr::except($packages, [ + '@babel/preset-react', + 'react', + 'react-dom', + ]); + } + + /** + * Update the Webpack configuration. + * + * @return void + */ + protected static function updateWebpackConfiguration() + { + copy(__DIR__.'/vue-stubs/webpack.mix.js', base_path('webpack.mix.js')); + } + + /** + * Update the example component. + * + * @return void + */ + protected static function updateComponent() + { + (new Filesystem)->delete( + resource_path('js/components/Example.js') + ); + + copy( + __DIR__.'/vue-stubs/ExampleComponent.vue', + resource_path('js/components/ExampleComponent.vue') + ); + } + + /** + * Update the bootstrapping files. + * + * @return void + */ + protected static function updateBootstrapping() + { + copy(__DIR__.'/vue-stubs/app.js', resource_path('js/app.js')); + } +} diff --git a/vendor/laravel/ui/src/Presets/bootstrap-stubs/_variables.scss b/vendor/laravel/ui/src/Presets/bootstrap-stubs/_variables.scss new file mode 100644 index 00000000..0407ab57 --- /dev/null +++ b/vendor/laravel/ui/src/Presets/bootstrap-stubs/_variables.scss @@ -0,0 +1,19 @@ +// Body +$body-bg: #f8fafc; + +// Typography +$font-family-sans-serif: 'Nunito', sans-serif; +$font-size-base: 0.9rem; +$line-height-base: 1.6; + +// Colors +$blue: #3490dc; +$indigo: #6574cd; +$purple: #9561e2; +$pink: #f66d9b; +$red: #e3342f; +$orange: #f6993f; +$yellow: #ffed4a; +$green: #38c172; +$teal: #4dc0b5; +$cyan: #6cb2eb; diff --git a/vendor/laravel/ui/src/Presets/bootstrap-stubs/app.scss b/vendor/laravel/ui/src/Presets/bootstrap-stubs/app.scss new file mode 100644 index 00000000..3193ffa2 --- /dev/null +++ b/vendor/laravel/ui/src/Presets/bootstrap-stubs/app.scss @@ -0,0 +1,8 @@ +// Fonts +@import url('https://fonts.googleapis.com/css?family=Nunito'); + +// Variables +@import 'variables'; + +// Bootstrap +@import '~bootstrap/scss/bootstrap'; diff --git a/vendor/laravel/ui/src/Presets/bootstrap-stubs/bootstrap.js b/vendor/laravel/ui/src/Presets/bootstrap-stubs/bootstrap.js new file mode 100644 index 00000000..63605faa --- /dev/null +++ b/vendor/laravel/ui/src/Presets/bootstrap-stubs/bootstrap.js @@ -0,0 +1,41 @@ +window._ = require('lodash'); + +/** + * We'll load jQuery and the Bootstrap jQuery plugin which provides support + * for JavaScript based Bootstrap features such as modals and tabs. This + * code may be modified to fit the specific needs of your application. + */ + +try { + window.Popper = require('popper.js').default; + window.$ = window.jQuery = require('jquery'); + + require('bootstrap'); +} catch (e) {} + +/** + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. + */ + +window.axios = require('axios'); + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allows your team to easily build robust real-time web applications. + */ + +// import Echo from 'laravel-echo'; + +// window.Pusher = require('pusher-js'); + +// window.Echo = new Echo({ +// broadcaster: 'pusher', +// key: process.env.MIX_PUSHER_APP_KEY, +// cluster: process.env.MIX_PUSHER_APP_CLUSTER, +// forceTLS: true +// }); diff --git a/vendor/laravel/ui/src/Presets/bootstrap-stubs/webpack.mix.js b/vendor/laravel/ui/src/Presets/bootstrap-stubs/webpack.mix.js new file mode 100644 index 00000000..8a923cbb --- /dev/null +++ b/vendor/laravel/ui/src/Presets/bootstrap-stubs/webpack.mix.js @@ -0,0 +1,15 @@ +const mix = require('laravel-mix'); + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel application. By default, we are compiling the Sass + | file for the application as well as bundling up all the JS files. + | + */ + +mix.js('resources/js/app.js', 'public/js') + .sass('resources/sass/app.scss', 'public/css'); diff --git a/vendor/laravel/ui/src/Presets/react-stubs/Example.js b/vendor/laravel/ui/src/Presets/react-stubs/Example.js new file mode 100644 index 00000000..33834678 --- /dev/null +++ b/vendor/laravel/ui/src/Presets/react-stubs/Example.js @@ -0,0 +1,24 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; + +function Example() { + return ( +
+
+
+
+
Example Component
+ +
I'm an example component!
+
+
+
+
+ ); +} + +export default Example; + +if (document.getElementById('example')) { + ReactDOM.render(, document.getElementById('example')); +} diff --git a/vendor/laravel/ui/src/Presets/react-stubs/app.js b/vendor/laravel/ui/src/Presets/react-stubs/app.js new file mode 100644 index 00000000..a5f91ab3 --- /dev/null +++ b/vendor/laravel/ui/src/Presets/react-stubs/app.js @@ -0,0 +1,15 @@ +/** + * First we will load all of this project's JavaScript dependencies which + * includes React and other helpers. It's a great starting point while + * building robust, powerful web applications using React + Laravel. + */ + +require('./bootstrap'); + +/** + * Next, we will create a fresh React component instance and attach it to + * the page. Then, you may begin adding components to this application + * or customize the JavaScript scaffolding to fit your unique needs. + */ + +require('./components/Example'); diff --git a/vendor/laravel/ui/src/Presets/react-stubs/webpack.mix.js b/vendor/laravel/ui/src/Presets/react-stubs/webpack.mix.js new file mode 100644 index 00000000..96caf7a2 --- /dev/null +++ b/vendor/laravel/ui/src/Presets/react-stubs/webpack.mix.js @@ -0,0 +1,15 @@ +const mix = require('laravel-mix'); + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel application. By default, we are compiling the Sass + | file for the application as well as bundling up all the JS files. + | + */ + +mix.react('resources/js/app.js', 'public/js') + .sass('resources/sass/app.scss', 'public/css'); diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/vue-stubs/ExampleComponent.vue b/vendor/laravel/ui/src/Presets/vue-stubs/ExampleComponent.vue similarity index 100% rename from vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/vue-stubs/ExampleComponent.vue rename to vendor/laravel/ui/src/Presets/vue-stubs/ExampleComponent.vue diff --git a/vendor/laravel/ui/src/Presets/vue-stubs/app.js b/vendor/laravel/ui/src/Presets/vue-stubs/app.js new file mode 100644 index 00000000..aa19e31a --- /dev/null +++ b/vendor/laravel/ui/src/Presets/vue-stubs/app.js @@ -0,0 +1,32 @@ +/** + * First we will load all of this project's JavaScript dependencies which + * includes Vue and other libraries. It is a great starting point when + * building robust, powerful web applications using Vue and Laravel. + */ + +require('./bootstrap'); + +window.Vue = require('vue'); + +/** + * The following block of code may be used to automatically register your + * Vue components. It will recursively scan this directory for the Vue + * components and automatically register them with their "basename". + * + * Eg. ./components/ExampleComponent.vue -> + */ + +// const files = require.context('./', true, /\.vue$/i) +// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default)) + +Vue.component('example-component', require('./components/ExampleComponent.vue').default); + +/** + * Next, we will create a fresh Vue application instance and attach it to + * the page. Then, you may begin adding components to this application + * or customize the JavaScript scaffolding to fit your unique needs. + */ + +const app = new Vue({ + el: '#app', +}); diff --git a/vendor/laravel/ui/src/Presets/vue-stubs/webpack.mix.js b/vendor/laravel/ui/src/Presets/vue-stubs/webpack.mix.js new file mode 100644 index 00000000..8a923cbb --- /dev/null +++ b/vendor/laravel/ui/src/Presets/vue-stubs/webpack.mix.js @@ -0,0 +1,15 @@ +const mix = require('laravel-mix'); + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel application. By default, we are compiling the Sass + | file for the application as well as bundling up all the JS files. + | + */ + +mix.js('resources/js/app.js', 'public/js') + .sass('resources/sass/app.scss', 'public/css'); diff --git a/vendor/laravel/ui/src/UiCommand.php b/vendor/laravel/ui/src/UiCommand.php new file mode 100644 index 00000000..58a707f2 --- /dev/null +++ b/vendor/laravel/ui/src/UiCommand.php @@ -0,0 +1,91 @@ +argument('type'))) { + return call_user_func(static::$macros[$this->argument('type')], $this); + } + + if (! in_array($this->argument('type'), ['bootstrap', 'vue', 'react'])) { + throw new InvalidArgumentException('Invalid preset.'); + } + + $this->{$this->argument('type')}(); + + if ($this->option('auth')) { + $this->call('ui:auth'); + } + } + + /** + * Install the "bootstrap" preset. + * + * @return void + */ + protected function bootstrap() + { + Presets\Bootstrap::install(); + + $this->info('Bootstrap scaffolding installed successfully.'); + $this->comment('Please run "npm install && npm run dev" to compile your fresh scaffolding.'); + } + + /** + * Install the "vue" preset. + * + * @return void + */ + protected function vue() + { + Presets\Bootstrap::install(); + Presets\Vue::install(); + + $this->info('Vue scaffolding installed successfully.'); + $this->comment('Please run "npm install && npm run dev" to compile your fresh scaffolding.'); + } + + /** + * Install the "react" preset. + * + * @return void + */ + protected function react() + { + Presets\Bootstrap::install(); + Presets\React::install(); + + $this->info('React scaffolding installed successfully.'); + $this->comment('Please run "npm install && npm run dev" to compile your fresh scaffolding.'); + } +} diff --git a/vendor/laravel/ui/src/UiServiceProvider.php b/vendor/laravel/ui/src/UiServiceProvider.php new file mode 100644 index 00000000..9e39471a --- /dev/null +++ b/vendor/laravel/ui/src/UiServiceProvider.php @@ -0,0 +1,35 @@ +app->runningInConsole()) { + $this->commands([ + AuthCommand::class, + ControllersCommand::class, + UiCommand::class, + ]); + } + } + + /** + * Bootstrap any application services. + * + * @return void + */ + public function boot() + { + Route::mixin(new AuthRouteMethods); + } +} diff --git a/vendor/laravel/ui/stubs/Auth/ConfirmPasswordController.stub b/vendor/laravel/ui/stubs/Auth/ConfirmPasswordController.stub new file mode 100644 index 00000000..138c1f08 --- /dev/null +++ b/vendor/laravel/ui/stubs/Auth/ConfirmPasswordController.stub @@ -0,0 +1,40 @@ +middleware('auth'); + } +} diff --git a/vendor/laravel/ui/stubs/Auth/ForgotPasswordController.stub b/vendor/laravel/ui/stubs/Auth/ForgotPasswordController.stub new file mode 100644 index 00000000..465c39cc --- /dev/null +++ b/vendor/laravel/ui/stubs/Auth/ForgotPasswordController.stub @@ -0,0 +1,22 @@ +middleware('guest')->except('logout'); + } +} diff --git a/vendor/laravel/ui/stubs/Auth/RegisterController.stub b/vendor/laravel/ui/stubs/Auth/RegisterController.stub new file mode 100644 index 00000000..c6a6de67 --- /dev/null +++ b/vendor/laravel/ui/stubs/Auth/RegisterController.stub @@ -0,0 +1,73 @@ +middleware('guest'); + } + + /** + * Get a validator for an incoming registration request. + * + * @param array $data + * @return \Illuminate\Contracts\Validation\Validator + */ + protected function validator(array $data) + { + return Validator::make($data, [ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'password' => ['required', 'string', 'min:8', 'confirmed'], + ]); + } + + /** + * Create a new user instance after a valid registration. + * + * @param array $data + * @return \App\User + */ + protected function create(array $data) + { + return User::create([ + 'name' => $data['name'], + 'email' => $data['email'], + 'password' => Hash::make($data['password']), + ]); + } +} diff --git a/vendor/laravel/ui/stubs/Auth/ResetPasswordController.stub b/vendor/laravel/ui/stubs/Auth/ResetPasswordController.stub new file mode 100644 index 00000000..b1726a36 --- /dev/null +++ b/vendor/laravel/ui/stubs/Auth/ResetPasswordController.stub @@ -0,0 +1,30 @@ +middleware('auth'); + $this->middleware('signed')->only('verify'); + $this->middleware('throttle:6,1')->only('verify', 'resend'); + } +} diff --git a/vendor/laravel/ui/stubs/migrations/2014_10_12_100000_create_password_resets_table.php b/vendor/laravel/ui/stubs/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 00000000..0ee0a36a --- /dev/null +++ b/vendor/laravel/ui/stubs/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +} diff --git a/vendor/laravelcollective/html/composer.json b/vendor/laravelcollective/html/composer.json index c43f0b86..3039fcfd 100755 --- a/vendor/laravelcollective/html/composer.json +++ b/vendor/laravelcollective/html/composer.json @@ -18,17 +18,17 @@ } ], "require": { - "php": ">=7.1.3", - "illuminate/http": "5.7.*", - "illuminate/routing": "5.7.*", - "illuminate/session": "5.7.*", - "illuminate/support": "5.7.*", - "illuminate/view": "5.7.*" + "php": ">=7.2.5", + "illuminate/http": "^6.0|^7.0|^8.0|^9.0", + "illuminate/routing": "^6.0|^7.0|^8.0|^9.0", + "illuminate/session": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "illuminate/view": "^6.0|^7.0|^8.0|^9.0" }, "require-dev": { - "illuminate/database": "5.7.*", + "illuminate/database": "^6.0|^7.0|^8.0|^9.0", "mockery/mockery": "~1.0", - "phpunit/phpunit": "~7.1" + "phpunit/phpunit": "~8.5|^9.5.10" }, "autoload": { "psr-4": { @@ -40,7 +40,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.7-dev" + "dev-master": "6.x-dev" }, "laravel": { "providers": [ diff --git a/vendor/laravelcollective/html/readme-ptbr.md b/vendor/laravelcollective/html/readme-ptbr.md new file mode 100644 index 00000000..faa1ad4d --- /dev/null +++ b/vendor/laravelcollective/html/readme-ptbr.md @@ -0,0 +1,9 @@ +![LaravelCollective HTML](LaravelCollectiveHTML-banner.png) + +[![Build Status](https://travis-ci.org/LaravelCollective/html.svg)](https://travis-ci.org/LaravelCollective/html) +[![Total Downloads](https://poser.pugx.org/LaravelCollective/html/downloads)](https://packagist.org/packages/laravelcollective/html) +[![Latest Stable Version](https://poser.pugx.org/LaravelCollective/html/v/stable.svg)](https://packagist.org/packages/laravelcollective/html) +[![Latest Unstable Version](https://poser.pugx.org/LaravelCollective/html/v/unstable.svg)](https://packagist.org/packages/laravelcollective/html) +[![License](https://poser.pugx.org/LaravelCollective/html/license.svg)](https://packagist.org/packages/laravelcollective/html) + +A documentação oficial para Forms & Html para o framework Laravel podem ser encontrados no site [LaravelCollective](https://laravelcollective.com/docs). diff --git a/vendor/laravelcollective/html/readme.md b/vendor/laravelcollective/html/readme.md index 4d3d9e1a..abbd30bb 100644 --- a/vendor/laravelcollective/html/readme.md +++ b/vendor/laravelcollective/html/readme.md @@ -1,4 +1,4 @@ -# Forms & HTML +![LaravelCollective HTML](LaravelCollectiveHTML-banner.png) [![Build Status](https://travis-ci.org/LaravelCollective/html.svg)](https://travis-ci.org/LaravelCollective/html) [![Total Downloads](https://poser.pugx.org/LaravelCollective/html/downloads)](https://packagist.org/packages/laravelcollective/html) @@ -6,4 +6,4 @@ [![Latest Unstable Version](https://poser.pugx.org/LaravelCollective/html/v/unstable.svg)](https://packagist.org/packages/laravelcollective/html) [![License](https://poser.pugx.org/LaravelCollective/html/license.svg)](https://packagist.org/packages/laravelcollective/html) -Official documentation for Forms & Html for The Laravel Framework can be found at the [LaravelCollective](http://laravelcollective.com) website. +Official documentation for Forms & Html for The Laravel Framework can be found at the [LaravelCollective](https://laravelcollective.com/docs) website. diff --git a/vendor/laravelcollective/html/src/Componentable.php b/vendor/laravelcollective/html/src/Componentable.php index a0a364b4..5ac85609 100644 --- a/vendor/laravelcollective/html/src/Componentable.php +++ b/vendor/laravelcollective/html/src/Componentable.php @@ -3,6 +3,7 @@ namespace Collective\Html; use BadMethodCallException; +use Illuminate\Support\Arr; use Illuminate\Support\HtmlString; trait Componentable @@ -47,7 +48,7 @@ trait Componentable * @param $name * @param array $arguments * - * @return \Illuminate\Contracts\View\View + * @return HtmlString */ protected function renderComponent($name, array $arguments) { @@ -81,7 +82,7 @@ trait Componentable $default = null; } - $data[$variable] = array_get($arguments, $i, $default); + $data[$variable] = Arr::get($arguments, $i, $default); $i++; } diff --git a/vendor/laravelcollective/html/src/Eloquent/FormAccessible.php b/vendor/laravelcollective/html/src/Eloquent/FormAccessible.php index 0afd17ee..ff7866e3 100644 --- a/vendor/laravelcollective/html/src/Eloquent/FormAccessible.php +++ b/vendor/laravelcollective/html/src/Eloquent/FormAccessible.php @@ -69,11 +69,7 @@ trait FormAccessible */ public function isNestedModel($key) { - if (in_array($key, array_keys($this->getRelations()))) { - return true; - } - - return false; + return in_array($key, array_keys($this->getRelations())); } /** diff --git a/vendor/laravelcollective/html/src/FormBuilder.php b/vendor/laravelcollective/html/src/FormBuilder.php index f28aaba2..7c0dfe55 100644 --- a/vendor/laravelcollective/html/src/FormBuilder.php +++ b/vendor/laravelcollective/html/src/FormBuilder.php @@ -9,8 +9,8 @@ use Illuminate\Contracts\Session\Session; use Illuminate\Contracts\View\Factory; use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull; use Illuminate\Http\Request; +use Illuminate\Support\Arr; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\App; use Illuminate\Support\HtmlString; use Illuminate\Support\Traits\Macroable; @@ -134,7 +134,7 @@ class FormBuilder */ public function open(array $options = []) { - $method = array_get($options, 'method', 'post'); + $method = Arr::get($options, 'method', 'post'); // We need to extract the proper method from the attributes. If the method is // something other than GET or POST we'll use POST since we will spoof the @@ -159,7 +159,7 @@ class FormBuilder // is used to spoof requests for this PUT, PATCH, etc. methods on forms. $attributes = array_merge( - $attributes, array_except($options, $this->reserved) + $attributes, Arr::except($options, $this->reserved) ); @@ -589,9 +589,9 @@ class FormBuilder // If the "size" attribute was not specified, we will just look for the regular // columns and rows attributes, using sane defaults if these do not exist on // the attributes array. We'll then return this entire options array back. - $cols = array_get($options, 'cols', 50); + $cols = Arr::get($options, 'cols', 50); - $rows = array_get($options, 'rows', 10); + $rows = Arr::get($options, 'rows', 10); return array_merge($options, compact('cols', 'rows')); } @@ -1201,7 +1201,13 @@ class FormBuilder protected function getRouteAction($options) { if (is_array($options)) { - return $this->url->route($options[0], array_slice($options, 1)); + $parameters = array_slice($options, 1); + + if (array_keys($options) === [0, 1]) { + $parameters = head($parameters); + } + + return $this->url->route($options[0], $parameters); } return $this->url->route($options); @@ -1298,7 +1304,7 @@ class FormBuilder && is_null($old) && is_null($value) && !is_null($this->view->shared('errors')) - && count($this->view->shared('errors')) > 0 + && count(is_countable($this->view->shared('errors')) ? $this->view->shared('errors') : []) > 0 ) { return null; } @@ -1356,11 +1362,11 @@ class FormBuilder { $key = $this->transformKey($name); - if (method_exists($this->model, 'getFormValue')) { + if ((is_string($this->model) || is_object($this->model)) && method_exists($this->model, 'getFormValue')) { return $this->model->getFormValue($key); } - return data_get($this->model, $this->transformKey($name)); + return data_get($this->model, $key); } /** diff --git a/vendor/laravelcollective/html/src/HtmlBuilder.php b/vendor/laravelcollective/html/src/HtmlBuilder.php index 743b32a0..896e1b19 100755 --- a/vendor/laravelcollective/html/src/HtmlBuilder.php +++ b/vendor/laravelcollective/html/src/HtmlBuilder.php @@ -132,7 +132,7 @@ class HtmlBuilder { $defaults = ['rel' => 'shortcut icon', 'type' => 'image/x-icon']; - $attributes = array_merge($attributes, $defaults); + $attributes = array_merge($defaults, $attributes); $attributes['href'] = $this->url->asset($url, $secure); @@ -171,12 +171,13 @@ class HtmlBuilder * @param string $url * @param string $title * @param array $attributes + * @param bool $escape * * @return \Illuminate\Support\HtmlString */ - public function secureLink($url, $title = null, $attributes = []) + public function secureLink($url, $title = null, $attributes = [], $escape = true) { - return $this->link($url, $title, $attributes, true); + return $this->link($url, $title, $attributes, true, $escape); } /** @@ -186,14 +187,15 @@ class HtmlBuilder * @param string $title * @param array $attributes * @param bool $secure + * @param bool $escape * * @return \Illuminate\Support\HtmlString */ - public function linkAsset($url, $title = null, $attributes = [], $secure = null) + public function linkAsset($url, $title = null, $attributes = [], $secure = null, $escape = true) { $url = $this->url->asset($url, $secure); - return $this->link($url, $title ?: $url, $attributes, $secure); + return $this->link($url, $title ?: $url, $attributes, $secure, $escape); } /** @@ -202,12 +204,13 @@ class HtmlBuilder * @param string $url * @param string $title * @param array $attributes + * @param bool $escape * * @return \Illuminate\Support\HtmlString */ - public function linkSecureAsset($url, $title = null, $attributes = []) + public function linkSecureAsset($url, $title = null, $attributes = [], $escape = true) { - return $this->linkAsset($url, $title, $attributes, true); + return $this->linkAsset($url, $title, $attributes, true, $escape); } /** @@ -217,12 +220,14 @@ class HtmlBuilder * @param string $title * @param array $parameters * @param array $attributes + * @param bool $secure + * @param bool $escape * * @return \Illuminate\Support\HtmlString */ - public function linkRoute($name, $title = null, $parameters = [], $attributes = []) + public function linkRoute($name, $title = null, $parameters = [], $attributes = [], $secure = null, $escape = true) { - return $this->link($this->url->route($name, $parameters), $title, $attributes); + return $this->link($this->url->route($name, $parameters), $title, $attributes, $secure, $escape); } /** @@ -232,12 +237,14 @@ class HtmlBuilder * @param string $title * @param array $parameters * @param array $attributes + * @param bool $secure + * @param bool $escape * * @return \Illuminate\Support\HtmlString */ - public function linkAction($action, $title = null, $parameters = [], $attributes = []) + public function linkAction($action, $title = null, $parameters = [], $attributes = [], $secure = null, $escape = true) { - return $this->link($this->url->action($action, $parameters), $title, $attributes); + return $this->link($this->url->action($action, $parameters), $title, $attributes, $secure, $escape); } /** diff --git a/vendor/laravelcollective/html/src/HtmlServiceProvider.php b/vendor/laravelcollective/html/src/HtmlServiceProvider.php index 3b9255b4..5686f39b 100755 --- a/vendor/laravelcollective/html/src/HtmlServiceProvider.php +++ b/vendor/laravelcollective/html/src/HtmlServiceProvider.php @@ -2,12 +2,12 @@ namespace Collective\Html; -use Illuminate\Support\Facades\Blade; +use Illuminate\Contracts\Support\DeferrableProvider; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Str; use Illuminate\View\Compilers\BladeCompiler; -class HtmlServiceProvider extends ServiceProvider +class HtmlServiceProvider extends ServiceProvider implements DeferrableProvider { /** * Supported Blade Directives @@ -17,13 +17,6 @@ class HtmlServiceProvider extends ServiceProvider protected $directives = ['entities','decode','script','style','image','favicon','link','secureLink','linkAsset','linkSecureAsset','linkRoute','linkAction','mailto','email','ol','ul','dl','meta','tag','open','model','close','token','label','input','text','password','hidden','email','tel','number','date','datetime','datetimeLocal','time','url','file','textarea','select','selectRange','selectYear','selectMonth','getSelectOption','checkbox','radio','reset','image','color','submit','button','old' ]; - /** - * Indicates if loading of the provider is deferred. - * - * @var bool - */ - protected $defer = true; - /** * Register the service provider. * diff --git a/vendor/laravelcollective/html/src/helpers.php b/vendor/laravelcollective/html/src/helpers.php index 14f03610..7d17062d 100644 --- a/vendor/laravelcollective/html/src/helpers.php +++ b/vendor/laravelcollective/html/src/helpers.php @@ -10,7 +10,7 @@ if (! function_exists('link_to')) { * @param bool $secure * @param bool $escape * - * @return string + * @return \Illuminate\Support\HtmlString */ function link_to($url, $title = null, $attributes = [], $secure = null, $escape = true) { @@ -27,7 +27,7 @@ if (! function_exists('link_to_asset')) { * @param array $attributes * @param bool $secure * - * @return string + * @return \Illuminate\Support\HtmlString */ function link_to_asset($url, $title = null, $attributes = [], $secure = null) { @@ -44,7 +44,7 @@ if (! function_exists('link_to_route')) { * @param array $parameters * @param array $attributes * - * @return string + * @return \Illuminate\Support\HtmlString */ function link_to_route($name, $title = null, $parameters = [], $attributes = []) { @@ -61,7 +61,7 @@ if (! function_exists('link_to_action')) { * @param array $parameters * @param array $attributes * - * @return string + * @return \Illuminate\Support\HtmlString */ function link_to_action($action, $title = null, $parameters = [], $attributes = []) { diff --git a/vendor/lcobucci/jwt/.gitignore b/vendor/lcobucci/jwt/.gitignore deleted file mode 100644 index 096b48c3..00000000 --- a/vendor/lcobucci/jwt/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/vendor -/phpunit.xml -/composer.lock diff --git a/vendor/lcobucci/jwt/.scrutinizer.yml b/vendor/lcobucci/jwt/.scrutinizer.yml deleted file mode 100644 index 9703e4fb..00000000 --- a/vendor/lcobucci/jwt/.scrutinizer.yml +++ /dev/null @@ -1,56 +0,0 @@ -build: - environment: - mysql: false - postgresql: false - redis: false - rabbitmq: false - php: - version: 5.6 -tools: - php_sim: true - php_pdepend: true - php_analyzer: true - php_changetracking: true - php_code_sniffer: - config: - standard: "PSR2" - php_mess_detector: true -checks: - php: - code_rating: true - duplication: true - argument_type_checks: true - assignment_of_null_return: true - avoid_conflicting_incrementers: true - avoid_useless_overridden_methods: true - catch_class_exists: true - closure_use_modifiable: true - closure_use_not_conflicting: true - deprecated_code_usage: true - method_calls_on_non_object: true - missing_arguments: true - no_duplicate_arguments: true - no_non_implemented_abstract_methods: true - no_property_on_interface: true - parameter_non_unique: true - precedence_in_conditions: true - precedence_mistakes: true - require_php_tag_first: true - security_vulnerabilities: true - sql_injection_vulnerabilities: true - too_many_arguments: true - unreachable_code: true - unused_methods: true - unused_parameters: true - unused_properties: true - unused_variables: true - use_statement_alias_conflict: true - useless_calls: true - variable_existence: true - verify_access_scope_valid: true - verify_argument_usable_as_reference: true - verify_property_names: true - -filter: - excluded_paths: - - test/* diff --git a/vendor/lcobucci/jwt/.travis.yml b/vendor/lcobucci/jwt/.travis.yml deleted file mode 100644 index 0f83c08e..00000000 --- a/vendor/lcobucci/jwt/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: php -php: - - 5.6 - - 7.0 - - 7.1 - - 7.2 - - 7.3 - - nightly - -matrix: - allow_failures: - - php: nightly - -before_script: - - composer install --prefer-dist -o diff --git a/vendor/lcobucci/jwt/LICENSE b/vendor/lcobucci/jwt/LICENSE deleted file mode 100644 index 8721a7a5..00000000 --- a/vendor/lcobucci/jwt/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2014-2015, Luís Otávio Cobucci Oblonczyk -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the {organization} nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/lcobucci/jwt/README.md b/vendor/lcobucci/jwt/README.md deleted file mode 100644 index c74803ae..00000000 --- a/vendor/lcobucci/jwt/README.md +++ /dev/null @@ -1,194 +0,0 @@ -# JWT -[![Gitter](https://img.shields.io/badge/GITTER-JOIN%20CHAT%20%E2%86%92-brightgreen.svg?style=flat-square)](https://gitter.im/lcobucci/jwt?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Total Downloads](https://img.shields.io/packagist/dt/lcobucci/jwt.svg?style=flat-square)](https://packagist.org/packages/lcobucci/jwt) [![Latest Stable Version](https://img.shields.io/packagist/v/lcobucci/jwt.svg?style=flat-square)](https://packagist.org/packages/lcobucci/jwt) - -![Branch master](https://img.shields.io/badge/branch-master-brightgreen.svg?style=flat-square) -[![Build Status](https://img.shields.io/travis/lcobucci/jwt/master.svg?style=flat-square)](http://travis-ci.org/#!/lcobucci/jwt) -[![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/lcobucci/jwt/master.svg?style=flat-square)](https://scrutinizer-ci.com/g/lcobucci/jwt/?branch=master) -[![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/lcobucci/jwt/master.svg?style=flat-square)](https://scrutinizer-ci.com/g/lcobucci/jwt/?branch=master) - -A simple library to work with JSON Web Token and JSON Web Signature (requires PHP 5.6+). -The implementation is based on the [RFC 7519](https://tools.ietf.org/html/rfc7519). - -## Installation - -Package is available on [Packagist](http://packagist.org/packages/lcobucci/jwt), -you can install it using [Composer](http://getcomposer.org). - -```shell -composer require lcobucci/jwt -``` - -### Dependencies - -- PHP 5.6+ -- OpenSSL Extension - -## Basic usage - -### Creating - -Just use the builder to create a new JWT/JWS tokens: - -```php -use Lcobucci\JWT\Builder; - -$time = time(); -$token = (new Builder())->issuedBy('http://example.com') // Configures the issuer (iss claim) - ->permittedFor('http://example.org') // Configures the audience (aud claim) - ->identifiedBy('4f1g23a12aa', true) // Configures the id (jti claim), replicating as a header item - ->issuedAt($time) // Configures the time that the token was issue (iat claim) - ->canOnlyBeUsedAfter($time + 60) // Configures the time that the token can be used (nbf claim) - ->expiresAt($time + 3600) // Configures the expiration time of the token (exp claim) - ->withClaim('uid', 1) // Configures a new claim, called "uid" - ->getToken(); // Retrieves the generated token - - -$token->getHeaders(); // Retrieves the token headers -$token->getClaims(); // Retrieves the token claims - -echo $token->getHeader('jti'); // will print "4f1g23a12aa" -echo $token->getClaim('iss'); // will print "http://example.com" -echo $token->getClaim('uid'); // will print "1" -echo $token; // The string representation of the object is a JWT string (pretty easy, right?) -``` - -### Parsing from strings - -Use the parser to create a new token from a JWT string (using the previous token as example): - -```php -use Lcobucci\JWT\Parser; - -$token = (new Parser())->parse((string) $token); // Parses from a string -$token->getHeaders(); // Retrieves the token header -$token->getClaims(); // Retrieves the token claims - -echo $token->getHeader('jti'); // will print "4f1g23a12aa" -echo $token->getClaim('iss'); // will print "http://example.com" -echo $token->getClaim('uid'); // will print "1" -``` - -### Validating - -We can easily validate if the token is valid (using the previous token and time as example): - -```php -use Lcobucci\JWT\ValidationData; - -$data = new ValidationData(); // It will use the current time to validate (iat, nbf and exp) -$data->setIssuer('http://example.com'); -$data->setAudience('http://example.org'); -$data->setId('4f1g23a12aa'); - -var_dump($token->validate($data)); // false, because token cannot be used before now() + 60 - -$data->setCurrentTime($time + 61); // changing the validation time to future - -var_dump($token->validate($data)); // true, because current time is between "nbf" and "exp" claims - -$data->setCurrentTime($time + 4000); // changing the validation time to future - -var_dump($token->validate($data)); // false, because token is expired since current time is greater than exp - -// We can also use the $leeway parameter to deal with clock skew (see notes below) -// If token's claimed time is invalid but the difference between that and the validation time is less than $leeway, -// then token is still considered valid -$dataWithLeeway = new ValidationData($time, 20); -$dataWithLeeway->setIssuer('http://example.com'); -$dataWithLeeway->setAudience('http://example.org'); -$dataWithLeeway->setId('4f1g23a12aa'); - -var_dump($token->validate($dataWithLeeway)); // false, because token can't be used before now() + 60, not within leeway - -$dataWithLeeway->setCurrentTime($time + 51); // changing the validation time to future - -var_dump($token->validate($dataWithLeeway)); // true, because current time plus leeway is between "nbf" and "exp" claims - -$dataWithLeeway->setCurrentTime($time + 3610); // changing the validation time to future but within leeway - -var_dump($token->validate($dataWithLeeway)); // true, because current time - 20 seconds leeway is less than exp - -$dataWithLeeway->setCurrentTime($time + 4000); // changing the validation time to future outside of leeway - -var_dump($token->validate($dataWithLeeway)); // false, because token is expired since current time is greater than exp -``` - -#### Important - -- You have to configure ```ValidationData``` informing all claims you want to validate the token. -- If ```ValidationData``` contains claims that are not being used in token or token has claims that are not -configured in ```ValidationData``` they will be ignored by ```Token::validate()```. -- ```exp```, ```nbf``` and ```iat``` claims are configured by default in ```ValidationData::__construct()``` -with the current UNIX time (```time()```). -- The optional ```$leeway``` parameter of ```ValidationData``` will cause us to use that number of seconds of leeway -when validating the time-based claims, pretending we are further in the future for the "Issued At" (```iat```) and "Not -Before" (```nbf```) claims and pretending we are further in the past for the "Expiration Time" (```exp```) claim. This -allows for situations where the clock of the issuing server has a different time than the clock of the verifying server, -as mentioned in [section 4.1 of RFC 7519](https://tools.ietf.org/html/rfc7519#section-4.1). - -## Token signature - -We can use signatures to be able to verify if the token was not modified after its generation. This library implements Hmac, RSA and ECDSA signatures (using 256, 384 and 512). - -### Important - -Do not allow the string sent to the Parser to dictate which signature algorithm -to use, or else your application will be vulnerable to a [critical JWT security vulnerability](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries). - -The examples below are safe because the choice in `Signer` is hard-coded and -cannot be influenced by malicious users. - -### Hmac - -Hmac signatures are really simple to be used: - -```php -use Lcobucci\JWT\Builder; -use Lcobucci\JWT\Signer\Key; -use Lcobucci\JWT\Signer\Hmac\Sha256; - -$signer = new Sha256(); -$time = time(); - -$token = (new Builder())->issuedBy('http://example.com') // Configures the issuer (iss claim) - ->permittedFor('http://example.org') // Configures the audience (aud claim) - ->identifiedBy('4f1g23a12aa', true) // Configures the id (jti claim), replicating as a header item - ->issuedAt($time) // Configures the time that the token was issue (iat claim) - ->canOnlyBeUsedAfter($time + 60) // Configures the time that the token can be used (nbf claim) - ->expiresAt($time + 3600) // Configures the expiration time of the token (exp claim) - ->withClaim('uid', 1) // Configures a new claim, called "uid" - ->getToken($signer, new Key('testing')); // Retrieves the generated token - - -var_dump($token->verify($signer, 'testing 1')); // false, because the key is different -var_dump($token->verify($signer, 'testing')); // true, because the key is the same -``` - -### RSA and ECDSA - -RSA and ECDSA signatures are based on public and private keys so you have to generate using the private key and verify using the public key: - -```php -use Lcobucci\JWT\Builder; -use Lcobucci\JWT\Signer\Key; -use Lcobucci\JWT\Signer\Rsa\Sha256; // you can use Lcobucci\JWT\Signer\Ecdsa\Sha256 if you're using ECDSA keys - -$signer = new Sha256(); -$privateKey = new Key('file://{path to your private key}'); -$time = time(); - -$token = (new Builder())->issuedBy('http://example.com') // Configures the issuer (iss claim) - ->permittedFor('http://example.org') // Configures the audience (aud claim) - ->identifiedBy('4f1g23a12aa', true) // Configures the id (jti claim), replicating as a header item - ->issuedAt($time) // Configures the time that the token was issue (iat claim) - ->canOnlyBeUsedAfter($time + 60) // Configures the time that the token can be used (nbf claim) - ->expiresAt($time + 3600) // Configures the expiration time of the token (exp claim) - ->withClaim('uid', 1) // Configures a new claim, called "uid" - ->getToken($signer, $privateKey); // Retrieves the generated token - -$publicKey = new Key('file://{path to your public key}'); - -var_dump($token->verify($signer, $publicKey)); // true when the public key was generated by the private one =) -``` - -**It's important to say that if you're using RSA keys you shouldn't invoke ECDSA signers (and vice-versa), otherwise ```sign()``` and ```verify()``` will raise an exception!** diff --git a/vendor/lcobucci/jwt/composer.json b/vendor/lcobucci/jwt/composer.json deleted file mode 100644 index 5823bf8b..00000000 --- a/vendor/lcobucci/jwt/composer.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "lcobucci/jwt", - "description": "A simple library to work with JSON Web Token and JSON Web Signature", - "type": "library", - "authors": [ - { - "name": "Luís Otávio Cobucci Oblonczyk", - "email": "lcobucci@gmail.com", - "role": "Developer" - } - ], - "keywords": [ - "JWT", - "JWS" - ], - "license": [ - "BSD-3-Clause" - ], - "require": { - "php": "^5.6 || ^7.0", - "ext-mbstring": "*", - "ext-openssl": "*" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^7.3", - "squizlabs/php_codesniffer": "~2.3", - "phpmd/phpmd": "~2.2", - "phpunit/php-invoker": "~1.1", - "mikey179/vfsstream": "~1.5" - }, - "autoload": { - "psr-4": { - "Lcobucci\\JWT\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "Lcobucci\\JWT\\": [ - "test/unit", - "test/functional" - ] - } - }, - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - } -} diff --git a/vendor/lcobucci/jwt/phpunit.xml.dist b/vendor/lcobucci/jwt/phpunit.xml.dist deleted file mode 100644 index e84d0f23..00000000 --- a/vendor/lcobucci/jwt/phpunit.xml.dist +++ /dev/null @@ -1,27 +0,0 @@ - - - - - test/unit - - - test/functional - - - - - - src - - - diff --git a/vendor/lcobucci/jwt/src/Builder.php b/vendor/lcobucci/jwt/src/Builder.php deleted file mode 100644 index f7aa9b65..00000000 --- a/vendor/lcobucci/jwt/src/Builder.php +++ /dev/null @@ -1,472 +0,0 @@ - - * @since 0.1.0 - */ -class Builder -{ - /** - * The token header - * - * @var array - */ - private $headers = ['typ'=> 'JWT', 'alg' => 'none']; - - /** - * The token claim set - * - * @var array - */ - private $claims = []; - - /** - * The data encoder - * - * @var Encoder - */ - private $encoder; - - /** - * The factory of claims - * - * @var ClaimFactory - */ - private $claimFactory; - - /** - * @var Signer|null - */ - private $signer; - - /** - * @var Key|null - */ - private $key; - - /** - * Initializes a new builder - * - * @param Encoder $encoder - * @param ClaimFactory $claimFactory - */ - public function __construct( - Encoder $encoder = null, - ClaimFactory $claimFactory = null - ) { - $this->encoder = $encoder ?: new Encoder(); - $this->claimFactory = $claimFactory ?: new ClaimFactory(); - } - - /** - * Configures the audience - * - * @deprecated This method has been wrongly added and doesn't exist on v4 - * @see Builder::permittedFor() - * - * @param string $audience - * @param bool $replicateAsHeader - * - * @return Builder - */ - public function canOnlyBeUsedBy($audience, $replicateAsHeader = false) - { - return $this->setRegisteredClaim('aud', (string) $audience, $replicateAsHeader); - } - - /** - * Configures the audience - * - * @param string $audience - * @param bool $replicateAsHeader - * - * @return Builder - */ - public function permittedFor($audience, $replicateAsHeader = false) - { - return $this->setRegisteredClaim('aud', (string) $audience, $replicateAsHeader); - } - - /** - * Configures the audience - * - * @deprecated This method will be removed on v4 - * @see Builder::permittedFor() - * - * @param string $audience - * @param boolean $replicateAsHeader - * - * @return Builder - */ - public function setAudience($audience, $replicateAsHeader = false) - { - return $this->setRegisteredClaim('aud', (string) $audience, $replicateAsHeader); - } - - /** - * Configures the expiration time - * - * @param int $expiration - * @param boolean $replicateAsHeader - * - * @return Builder - */ - public function expiresAt($expiration, $replicateAsHeader = false) - { - return $this->setRegisteredClaim('exp', (int) $expiration, $replicateAsHeader); - } - - /** - * Configures the expiration time - * - * @deprecated This method will be removed on v4 - * @see Builder::expiresAt() - * - * @param int $expiration - * @param boolean $replicateAsHeader - * - * @return Builder - */ - public function setExpiration($expiration, $replicateAsHeader = false) - { - return $this->setRegisteredClaim('exp', (int) $expiration, $replicateAsHeader); - } - - /** - * Configures the token id - * - * @param string $id - * @param boolean $replicateAsHeader - * - * @return Builder - */ - public function identifiedBy($id, $replicateAsHeader = false) - { - return $this->setRegisteredClaim('jti', (string) $id, $replicateAsHeader); - } - - /** - * Configures the token id - * - * @deprecated This method will be removed on v4 - * @see Builder::identifiedBy() - * - * @param string $id - * @param boolean $replicateAsHeader - * - * @return Builder - */ - public function setId($id, $replicateAsHeader = false) - { - return $this->identifiedBy($id, $replicateAsHeader); - } - - /** - * Configures the time that the token was issued - * - * @param int $issuedAt - * @param boolean $replicateAsHeader - * - * @return Builder - */ - public function issuedAt($issuedAt, $replicateAsHeader = false) - { - return $this->setRegisteredClaim('iat', (int) $issuedAt, $replicateAsHeader); - } - - /** - * Configures the time that the token was issued - * - * @deprecated This method will be removed on v4 - * @see Builder::issuedAt() - * - * @param int $issuedAt - * @param boolean $replicateAsHeader - * - * @return Builder - */ - public function setIssuedAt($issuedAt, $replicateAsHeader = false) - { - return $this->issuedAt($issuedAt, $replicateAsHeader); - } - - /** - * Configures the issuer - * - * @param string $issuer - * @param boolean $replicateAsHeader - * - * @return Builder - */ - public function issuedBy($issuer, $replicateAsHeader = false) - { - return $this->setRegisteredClaim('iss', (string) $issuer, $replicateAsHeader); - } - - /** - * Configures the issuer - * - * @deprecated This method will be removed on v4 - * @see Builder::issuedBy() - * - * @param string $issuer - * @param boolean $replicateAsHeader - * - * @return Builder - */ - public function setIssuer($issuer, $replicateAsHeader = false) - { - return $this->issuedBy($issuer, $replicateAsHeader); - } - - /** - * Configures the time before which the token cannot be accepted - * - * @param int $notBefore - * @param boolean $replicateAsHeader - * - * @return Builder - */ - public function canOnlyBeUsedAfter($notBefore, $replicateAsHeader = false) - { - return $this->setRegisteredClaim('nbf', (int) $notBefore, $replicateAsHeader); - } - - /** - * Configures the time before which the token cannot be accepted - * - * @deprecated This method will be removed on v4 - * @see Builder::canOnlyBeUsedAfter() - * - * @param int $notBefore - * @param boolean $replicateAsHeader - * - * @return Builder - */ - public function setNotBefore($notBefore, $replicateAsHeader = false) - { - return $this->canOnlyBeUsedAfter($notBefore, $replicateAsHeader); - } - - /** - * Configures the subject - * - * @param string $subject - * @param boolean $replicateAsHeader - * - * @return Builder - */ - public function relatedTo($subject, $replicateAsHeader = false) - { - return $this->setRegisteredClaim('sub', (string) $subject, $replicateAsHeader); - } - - /** - * Configures the subject - * - * @deprecated This method will be removed on v4 - * @see Builder::relatedTo() - * - * @param string $subject - * @param boolean $replicateAsHeader - * - * @return Builder - */ - public function setSubject($subject, $replicateAsHeader = false) - { - return $this->relatedTo($subject, $replicateAsHeader); - } - - /** - * Configures a registered claim - * - * @param string $name - * @param mixed $value - * @param boolean $replicate - * - * @return Builder - */ - protected function setRegisteredClaim($name, $value, $replicate) - { - $this->withClaim($name, $value); - - if ($replicate) { - $this->headers[$name] = $this->claims[$name]; - } - - return $this; - } - - /** - * Configures a header item - * - * @param string $name - * @param mixed $value - * - * @return Builder - */ - public function withHeader($name, $value) - { - $this->headers[(string) $name] = $this->claimFactory->create($name, $value); - - return $this; - } - - /** - * Configures a header item - * - * @deprecated This method will be removed on v4 - * @see Builder::withHeader() - * - * @param string $name - * @param mixed $value - * - * @return Builder - */ - public function setHeader($name, $value) - { - return $this->withHeader($name, $value); - } - - /** - * Configures a claim item - * - * @deprecated This method has been wrongly added and doesn't exist on v4 - * @see Builder::withClaim() - * - * @param string $name - * @param mixed $value - * - * @return Builder - */ - public function with($name, $value) - { - return $this->withClaim($name, $value); - } - - /** - * Configures a claim item - * - * @param string $name - * @param mixed $value - * - * @return Builder - */ - public function withClaim($name, $value) - { - $this->claims[(string) $name] = $this->claimFactory->create($name, $value); - - return $this; - } - - /** - * Configures a claim item - * - * @deprecated This method will be removed on v4 - * @see Builder::withClaim() - * - * @param string $name - * @param mixed $value - * - * @return Builder - */ - public function set($name, $value) - { - return $this->withClaim($name, $value); - } - - /** - * Signs the data - * - * @deprecated This method will be removed on v4 - * @see Builder::getToken() - * - * @param Signer $signer - * @param Key|string $key - * - * @return Builder - */ - public function sign(Signer $signer, $key) - { - if (! $key instanceof Key) { - $key = new Key($key); - } - - $this->signer = $signer; - $this->key = $key; - - return $this; - } - - /** - * Removes the signature from the builder - * - * @deprecated This method will be removed on v4 - * @see Builder::getToken() - * - * @return Builder - */ - public function unsign() - { - $this->signer = null; - $this->key = null; - - return $this; - } - - /** - * Returns the resultant token - * - * @return Token - */ - public function getToken(Signer $signer = null, Key $key = null) - { - $signer = $signer ?: $this->signer; - $key = $key ?: $this->key; - - if ($signer instanceof Signer) { - $signer->modifyHeader($this->headers); - } - - $payload = [ - $this->encoder->base64UrlEncode($this->encoder->jsonEncode($this->headers)), - $this->encoder->base64UrlEncode($this->encoder->jsonEncode($this->claims)) - ]; - - $signature = $this->createSignature($payload, $signer, $key); - - if ($signature !== null) { - $payload[] = $this->encoder->base64UrlEncode($signature); - } - - return new Token($this->headers, $this->claims, $signature, $payload); - } - - /** - * @param string[] $payload - * - * @return Signature|null - */ - private function createSignature(array $payload, Signer $signer = null, Key $key = null) - { - if ($signer === null || $key === null) { - return null; - } - - return $signer->sign(implode('.', $payload), $key); - } -} diff --git a/vendor/lcobucci/jwt/src/Claim.php b/vendor/lcobucci/jwt/src/Claim.php deleted file mode 100644 index e5617401..00000000 --- a/vendor/lcobucci/jwt/src/Claim.php +++ /dev/null @@ -1,40 +0,0 @@ - - * @since 2.0.0 - */ -interface Claim extends JsonSerializable -{ - /** - * Returns the claim name - * - * @return string - */ - public function getName(); - - /** - * Returns the claim value - * - * @return string - */ - public function getValue(); - - /** - * Returns the string representation of the claim - * - * @return string - */ - public function __toString(); -} diff --git a/vendor/lcobucci/jwt/src/Claim/Basic.php b/vendor/lcobucci/jwt/src/Claim/Basic.php deleted file mode 100644 index 3626d1b7..00000000 --- a/vendor/lcobucci/jwt/src/Claim/Basic.php +++ /dev/null @@ -1,75 +0,0 @@ - - * @since 2.0.0 - */ -class Basic implements Claim -{ - /** - * @var string - */ - private $name; - - /** - * @var mixed - */ - private $value; - - /** - * Initializes the claim - * - * @param string $name - * @param mixed $value - */ - public function __construct($name, $value) - { - $this->name = $name; - $this->value = $value; - } - - /** - * {@inheritdoc} - */ - public function getName() - { - return $this->name; - } - - /** - * {@inheritdoc} - */ - public function getValue() - { - return $this->value; - } - - /** - * {@inheritdoc} - */ - public function jsonSerialize() - { - return $this->value; - } - - /** - * {@inheritdoc} - */ - public function __toString() - { - return (string) $this->value; - } -} diff --git a/vendor/lcobucci/jwt/src/Claim/EqualsTo.php b/vendor/lcobucci/jwt/src/Claim/EqualsTo.php deleted file mode 100644 index b6cc49b9..00000000 --- a/vendor/lcobucci/jwt/src/Claim/EqualsTo.php +++ /dev/null @@ -1,34 +0,0 @@ - - * @since 2.0.0 - */ -class EqualsTo extends Basic implements Claim, Validatable -{ - /** - * {@inheritdoc} - */ - public function validate(ValidationData $data) - { - if ($data->has($this->getName())) { - return $this->getValue() === $data->get($this->getName()); - } - - return true; - } -} diff --git a/vendor/lcobucci/jwt/src/Claim/Factory.php b/vendor/lcobucci/jwt/src/Claim/Factory.php deleted file mode 100644 index 6a941057..00000000 --- a/vendor/lcobucci/jwt/src/Claim/Factory.php +++ /dev/null @@ -1,118 +0,0 @@ - - * @since 2.0.0 - */ -class Factory -{ - /** - * The list of claim callbacks - * - * @var array - */ - private $callbacks; - - /** - * Initializes the factory, registering the default callbacks - * - * @param array $callbacks - */ - public function __construct(array $callbacks = []) - { - $this->callbacks = array_merge( - [ - 'iat' => [$this, 'createLesserOrEqualsTo'], - 'nbf' => [$this, 'createLesserOrEqualsTo'], - 'exp' => [$this, 'createGreaterOrEqualsTo'], - 'iss' => [$this, 'createEqualsTo'], - 'aud' => [$this, 'createEqualsTo'], - 'sub' => [$this, 'createEqualsTo'], - 'jti' => [$this, 'createEqualsTo'] - ], - $callbacks - ); - } - - /** - * Create a new claim - * - * @param string $name - * @param mixed $value - * - * @return Claim - */ - public function create($name, $value) - { - if (!empty($this->callbacks[$name])) { - return call_user_func($this->callbacks[$name], $name, $value); - } - - return $this->createBasic($name, $value); - } - - /** - * Creates a claim that can be compared (greator or equals) - * - * @param string $name - * @param mixed $value - * - * @return GreaterOrEqualsTo - */ - private function createGreaterOrEqualsTo($name, $value) - { - return new GreaterOrEqualsTo($name, $value); - } - - /** - * Creates a claim that can be compared (greator or equals) - * - * @param string $name - * @param mixed $value - * - * @return LesserOrEqualsTo - */ - private function createLesserOrEqualsTo($name, $value) - { - return new LesserOrEqualsTo($name, $value); - } - - /** - * Creates a claim that can be compared (equals) - * - * @param string $name - * @param mixed $value - * - * @return EqualsTo - */ - private function createEqualsTo($name, $value) - { - return new EqualsTo($name, $value); - } - - /** - * Creates a basic claim - * - * @param string $name - * @param mixed $value - * - * @return Basic - */ - private function createBasic($name, $value) - { - return new Basic($name, $value); - } -} diff --git a/vendor/lcobucci/jwt/src/Claim/GreaterOrEqualsTo.php b/vendor/lcobucci/jwt/src/Claim/GreaterOrEqualsTo.php deleted file mode 100644 index 550e21e0..00000000 --- a/vendor/lcobucci/jwt/src/Claim/GreaterOrEqualsTo.php +++ /dev/null @@ -1,34 +0,0 @@ - - * @since 2.0.0 - */ -class GreaterOrEqualsTo extends Basic implements Claim, Validatable -{ - /** - * {@inheritdoc} - */ - public function validate(ValidationData $data) - { - if ($data->has($this->getName())) { - return $this->getValue() >= $data->get($this->getName()); - } - - return true; - } -} diff --git a/vendor/lcobucci/jwt/src/Claim/LesserOrEqualsTo.php b/vendor/lcobucci/jwt/src/Claim/LesserOrEqualsTo.php deleted file mode 100644 index 962edc89..00000000 --- a/vendor/lcobucci/jwt/src/Claim/LesserOrEqualsTo.php +++ /dev/null @@ -1,34 +0,0 @@ - - * @since 2.0.0 - */ -class LesserOrEqualsTo extends Basic implements Claim, Validatable -{ - /** - * {@inheritdoc} - */ - public function validate(ValidationData $data) - { - if ($data->has($this->getName())) { - return $this->getValue() <= $data->get($this->getName()); - } - - return true; - } -} diff --git a/vendor/lcobucci/jwt/src/Claim/Validatable.php b/vendor/lcobucci/jwt/src/Claim/Validatable.php deleted file mode 100644 index 63a27744..00000000 --- a/vendor/lcobucci/jwt/src/Claim/Validatable.php +++ /dev/null @@ -1,30 +0,0 @@ - - * @since 2.0.0 - */ -interface Validatable -{ - /** - * Returns if claim is valid according with given data - * - * @param ValidationData $data - * - * @return boolean - */ - public function validate(ValidationData $data); -} diff --git a/vendor/lcobucci/jwt/src/Parser.php b/vendor/lcobucci/jwt/src/Parser.php deleted file mode 100644 index 94973952..00000000 --- a/vendor/lcobucci/jwt/src/Parser.php +++ /dev/null @@ -1,157 +0,0 @@ - - * @since 0.1.0 - */ -class Parser -{ - /** - * The data decoder - * - * @var Decoder - */ - private $decoder; - - /** - * The claims factory - * - * @var ClaimFactory - */ - private $claimFactory; - - /** - * Initializes the object - * - * @param Decoder $decoder - * @param ClaimFactory $claimFactory - */ - public function __construct( - Decoder $decoder = null, - ClaimFactory $claimFactory = null - ) { - $this->decoder = $decoder ?: new Decoder(); - $this->claimFactory = $claimFactory ?: new ClaimFactory(); - } - - /** - * Parses the JWT and returns a token - * - * @param string $jwt - * - * @return Token - */ - public function parse($jwt) - { - $data = $this->splitJwt($jwt); - $header = $this->parseHeader($data[0]); - $claims = $this->parseClaims($data[1]); - $signature = $this->parseSignature($header, $data[2]); - - foreach ($claims as $name => $value) { - if (isset($header[$name])) { - $header[$name] = $value; - } - } - - if ($signature === null) { - unset($data[2]); - } - - return new Token($header, $claims, $signature, $data); - } - - /** - * Splits the JWT string into an array - * - * @param string $jwt - * - * @return array - * - * @throws InvalidArgumentException When JWT is not a string or is invalid - */ - protected function splitJwt($jwt) - { - if (!is_string($jwt)) { - throw new InvalidArgumentException('The JWT string must have two dots'); - } - - $data = explode('.', $jwt); - - if (count($data) != 3) { - throw new InvalidArgumentException('The JWT string must have two dots'); - } - - return $data; - } - - /** - * Parses the header from a string - * - * @param string $data - * - * @return array - * - * @throws InvalidArgumentException When an invalid header is informed - */ - protected function parseHeader($data) - { - $header = (array) $this->decoder->jsonDecode($this->decoder->base64UrlDecode($data)); - - if (isset($header['enc'])) { - throw new InvalidArgumentException('Encryption is not supported yet'); - } - - return $header; - } - - /** - * Parses the claim set from a string - * - * @param string $data - * - * @return array - */ - protected function parseClaims($data) - { - $claims = (array) $this->decoder->jsonDecode($this->decoder->base64UrlDecode($data)); - - foreach ($claims as $name => &$value) { - $value = $this->claimFactory->create($name, $value); - } - - return $claims; - } - - /** - * Returns the signature from given data - * - * @param array $header - * @param string $data - * - * @return Signature - */ - protected function parseSignature(array $header, $data) - { - if ($data == '' || !isset($header['alg']) || $header['alg'] == 'none') { - return null; - } - - $hash = $this->decoder->base64UrlDecode($data); - - return new Signature($hash); - } -} diff --git a/vendor/lcobucci/jwt/src/Parsing/Decoder.php b/vendor/lcobucci/jwt/src/Parsing/Decoder.php deleted file mode 100644 index 86336b08..00000000 --- a/vendor/lcobucci/jwt/src/Parsing/Decoder.php +++ /dev/null @@ -1,56 +0,0 @@ - - * @since 0.1.0 - * - * @link http://tools.ietf.org/html/rfc4648#section-5 - */ -class Decoder -{ - /** - * Decodes from JSON, validating the errors (will return an associative array - * instead of objects) - * - * @param string $json - * @return mixed - * - * @throws RuntimeException When something goes wrong while decoding - */ - public function jsonDecode($json) - { - $data = json_decode($json); - - if (json_last_error() != JSON_ERROR_NONE) { - throw new RuntimeException('Error while decoding to JSON: ' . json_last_error_msg()); - } - - return $data; - } - - /** - * Decodes from base64url - * - * @param string $data - * @return string - */ - public function base64UrlDecode($data) - { - if ($remainder = strlen($data) % 4) { - $data .= str_repeat('=', 4 - $remainder); - } - - return base64_decode(strtr($data, '-_', '+/')); - } -} diff --git a/vendor/lcobucci/jwt/src/Parsing/Encoder.php b/vendor/lcobucci/jwt/src/Parsing/Encoder.php deleted file mode 100644 index ece5b286..00000000 --- a/vendor/lcobucci/jwt/src/Parsing/Encoder.php +++ /dev/null @@ -1,51 +0,0 @@ - - * @since 0.1.0 - * - * @link http://tools.ietf.org/html/rfc4648#section-5 - */ -class Encoder -{ - /** - * Encodes to JSON, validating the errors - * - * @param mixed $data - * @return string - * - * @throws RuntimeException When something goes wrong while encoding - */ - public function jsonEncode($data) - { - $json = json_encode($data); - - if (json_last_error() != JSON_ERROR_NONE) { - throw new RuntimeException('Error while encoding to JSON: ' . json_last_error_msg()); - } - - return $json; - } - - /** - * Encodes to base64url - * - * @param string $data - * @return string - */ - public function base64UrlEncode($data) - { - return str_replace('=', '', strtr(base64_encode($data), '+/', '-_')); - } -} diff --git a/vendor/lcobucci/jwt/src/Signature.php b/vendor/lcobucci/jwt/src/Signature.php deleted file mode 100644 index 42f2b22a..00000000 --- a/vendor/lcobucci/jwt/src/Signature.php +++ /dev/null @@ -1,59 +0,0 @@ - - * @since 0.1.0 - */ -class Signature -{ - /** - * The resultant hash - * - * @var string - */ - protected $hash; - - /** - * Initializes the object - * - * @param string $hash - */ - public function __construct($hash) - { - $this->hash = $hash; - } - - /** - * Verifies if the current hash matches with with the result of the creation of - * a new signature with given data - * - * @param Signer $signer - * @param string $payload - * @param string $key - * - * @return boolean - */ - public function verify(Signer $signer, $payload, $key) - { - return $signer->verify($this->hash, $payload, $key); - } - - /** - * Returns the current hash as a string representation of the signature - * - * @return string - */ - public function __toString() - { - return $this->hash; - } -} diff --git a/vendor/lcobucci/jwt/src/Signer.php b/vendor/lcobucci/jwt/src/Signer.php deleted file mode 100644 index 9b2cd477..00000000 --- a/vendor/lcobucci/jwt/src/Signer.php +++ /dev/null @@ -1,59 +0,0 @@ - - * @since 0.1.0 - */ -interface Signer -{ - /** - * Returns the algorithm id - * - * @return string - */ - public function getAlgorithmId(); - - /** - * Apply changes on headers according with algorithm - * - * @param array $headers - */ - public function modifyHeader(array &$headers); - - /** - * Returns a signature for given data - * - * @param string $payload - * @param Key|string $key - * - * @return Signature - * - * @throws InvalidArgumentException When given key is invalid - */ - public function sign($payload, $key); - - /** - * Returns if the expected hash matches with the data and key - * - * @param string $expected - * @param string $payload - * @param Key|string $key - * - * @return boolean - * - * @throws InvalidArgumentException When given key is invalid - */ - public function verify($expected, $payload, $key); -} diff --git a/vendor/lcobucci/jwt/src/Signer/BaseSigner.php b/vendor/lcobucci/jwt/src/Signer/BaseSigner.php deleted file mode 100644 index dc659aa0..00000000 --- a/vendor/lcobucci/jwt/src/Signer/BaseSigner.php +++ /dev/null @@ -1,85 +0,0 @@ - - * @since 0.1.0 - */ -abstract class BaseSigner implements Signer -{ - /** - * {@inheritdoc} - */ - public function modifyHeader(array &$headers) - { - $headers['alg'] = $this->getAlgorithmId(); - } - - /** - * {@inheritdoc} - */ - public function sign($payload, $key) - { - return new Signature($this->createHash($payload, $this->getKey($key))); - } - - /** - * {@inheritdoc} - */ - public function verify($expected, $payload, $key) - { - return $this->doVerify($expected, $payload, $this->getKey($key)); - } - - /** - * @param Key|string $key - * - * @return Key - */ - private function getKey($key) - { - if (is_string($key)) { - $key = new Key($key); - } - - return $key; - } - - /** - * Creates a hash with the given data - * - * @internal - * - * @param string $payload - * @param Key $key - * - * @return string - */ - abstract public function createHash($payload, Key $key); - - /** - * Performs the signature verification - * - * @internal - * - * @param string $expected - * @param string $payload - * @param Key $key - * - * @return boolean - */ - abstract public function doVerify($expected, $payload, Key $key); -} diff --git a/vendor/lcobucci/jwt/src/Signer/Ecdsa.php b/vendor/lcobucci/jwt/src/Signer/Ecdsa.php deleted file mode 100644 index ccb029ec..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Ecdsa.php +++ /dev/null @@ -1,69 +0,0 @@ - - * @since 2.1.0 - */ -abstract class Ecdsa extends OpenSSL -{ - /** - * @var SignatureConverter - */ - private $converter; - - public function __construct(SignatureConverter $converter = null) - { - $this->converter = $converter ?: new MultibyteStringConverter(); - } - - /** - * {@inheritdoc} - */ - public function createHash($payload, Key $key) - { - return $this->converter->fromAsn1( - parent::createHash($payload, $key), - $this->getKeyLength() - ); - } - - /** - * {@inheritdoc} - */ - public function doVerify($expected, $payload, Key $key) - { - return parent::doVerify( - $this->converter->toAsn1($expected, $this->getKeyLength()), - $payload, - $key - ); - } - - /** - * Returns the length of each point in the signature, so that we can calculate and verify R and S points properly - * - * @internal - */ - abstract public function getKeyLength(); - - /** - * {@inheritdoc} - */ - final public function getKeyType() - { - return OPENSSL_KEYTYPE_EC; - } -} diff --git a/vendor/lcobucci/jwt/src/Signer/Ecdsa/MultibyteStringConverter.php b/vendor/lcobucci/jwt/src/Signer/Ecdsa/MultibyteStringConverter.php deleted file mode 100644 index 729267ee..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Ecdsa/MultibyteStringConverter.php +++ /dev/null @@ -1,134 +0,0 @@ - self::ASN1_MAX_SINGLE_BYTE ? self::ASN1_LENGTH_2BYTES : ''; - - $asn1 = hex2bin( - self::ASN1_SEQUENCE - . $lengthPrefix . dechex($totalLength) - . self::ASN1_INTEGER . dechex($lengthR) . $pointR - . self::ASN1_INTEGER . dechex($lengthS) . $pointS - ); - - return $asn1; - } - - private static function octetLength($data) - { - return (int) (mb_strlen($data, '8bit') / self::BYTE_SIZE); - } - - private static function preparePositiveInteger($data) - { - if (mb_substr($data, 0, self::BYTE_SIZE, '8bit') > self::ASN1_BIG_INTEGER_LIMIT) { - return self::ASN1_NEGATIVE_INTEGER . $data; - } - - while (mb_substr($data, 0, self::BYTE_SIZE, '8bit') === self::ASN1_NEGATIVE_INTEGER - && mb_substr($data, 2, self::BYTE_SIZE, '8bit') <= self::ASN1_BIG_INTEGER_LIMIT) { - $data = mb_substr($data, 2, null, '8bit'); - } - - return $data; - } - - public function fromAsn1($signature, $length) - { - $message = bin2hex($signature); - $position = 0; - - if (self::readAsn1Content($message, $position, self::BYTE_SIZE) !== self::ASN1_SEQUENCE) { - throw new InvalidArgumentException('Invalid data. Should start with a sequence.'); - } - - if (self::readAsn1Content($message, $position, self::BYTE_SIZE) === self::ASN1_LENGTH_2BYTES) { - $position += self::BYTE_SIZE; - } - - $pointR = self::retrievePositiveInteger(self::readAsn1Integer($message, $position)); - $pointS = self::retrievePositiveInteger(self::readAsn1Integer($message, $position)); - - $points = hex2bin(str_pad($pointR, $length, '0', STR_PAD_LEFT) . str_pad($pointS, $length, '0', STR_PAD_LEFT)); - - return $points; - } - - private static function readAsn1Content($message, &$position, $length) - { - $content = mb_substr($message, $position, $length, '8bit'); - $position += $length; - - return $content; - } - - private static function readAsn1Integer($message, &$position) - { - if (self::readAsn1Content($message, $position, self::BYTE_SIZE) !== self::ASN1_INTEGER) { - throw new InvalidArgumentException('Invalid data. Should contain an integer.'); - } - - $length = (int) hexdec(self::readAsn1Content($message, $position, self::BYTE_SIZE)); - - return self::readAsn1Content($message, $position, $length * self::BYTE_SIZE); - } - - private static function retrievePositiveInteger($data) - { - while (mb_substr($data, 0, self::BYTE_SIZE, '8bit') === self::ASN1_NEGATIVE_INTEGER - && mb_substr($data, 2, self::BYTE_SIZE, '8bit') > self::ASN1_BIG_INTEGER_LIMIT) { - $data = mb_substr($data, 2, null, '8bit'); - } - - return $data; - } -} diff --git a/vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha256.php b/vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha256.php deleted file mode 100644 index 16a010ff..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha256.php +++ /dev/null @@ -1,43 +0,0 @@ - - * @since 2.1.0 - */ -class Sha256 extends Ecdsa -{ - /** - * {@inheritdoc} - */ - public function getAlgorithmId() - { - return 'ES256'; - } - - /** - * {@inheritdoc} - */ - public function getAlgorithm() - { - return 'sha256'; - } - - /** - * {@inheritdoc} - */ - public function getKeyLength() - { - return 64; - } -} diff --git a/vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha384.php b/vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha384.php deleted file mode 100644 index ee56c244..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha384.php +++ /dev/null @@ -1,43 +0,0 @@ - - * @since 2.1.0 - */ -class Sha384 extends Ecdsa -{ - /** - * {@inheritdoc} - */ - public function getAlgorithmId() - { - return 'ES384'; - } - - /** - * {@inheritdoc} - */ - public function getAlgorithm() - { - return 'sha384'; - } - - /** - * {@inheritdoc} - */ - public function getKeyLength() - { - return 96; - } -} diff --git a/vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha512.php b/vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha512.php deleted file mode 100644 index e0bf4d60..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha512.php +++ /dev/null @@ -1,43 +0,0 @@ - - * @since 2.1.0 - */ -class Sha512 extends Ecdsa -{ - /** - * {@inheritdoc} - */ - public function getAlgorithmId() - { - return 'ES512'; - } - - /** - * {@inheritdoc} - */ - public function getAlgorithm() - { - return 'sha512'; - } - - /** - * {@inheritdoc} - */ - public function getKeyLength() - { - return 132; - } -} diff --git a/vendor/lcobucci/jwt/src/Signer/Ecdsa/SignatureConverter.php b/vendor/lcobucci/jwt/src/Signer/Ecdsa/SignatureConverter.php deleted file mode 100644 index b411dd35..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Ecdsa/SignatureConverter.php +++ /dev/null @@ -1,38 +0,0 @@ - - * @since 0.1.0 - */ -abstract class Hmac extends BaseSigner -{ - /** - * {@inheritdoc} - */ - public function createHash($payload, Key $key) - { - return hash_hmac($this->getAlgorithm(), $payload, $key->getContent(), true); - } - - /** - * {@inheritdoc} - */ - public function doVerify($expected, $payload, Key $key) - { - if (!is_string($expected)) { - return false; - } - - $callback = function_exists('hash_equals') ? 'hash_equals' : [$this, 'hashEquals']; - - return call_user_func($callback, $expected, $this->createHash($payload, $key)); - } - - /** - * PHP < 5.6 timing attack safe hash comparison - * - * @internal - * - * @param string $expected - * @param string $generated - * - * @return boolean - */ - public function hashEquals($expected, $generated) - { - $expectedLength = strlen($expected); - - if ($expectedLength !== strlen($generated)) { - return false; - } - - $res = 0; - - for ($i = 0; $i < $expectedLength; ++$i) { - $res |= ord($expected[$i]) ^ ord($generated[$i]); - } - - return $res === 0; - } - - /** - * Returns the algorithm name - * - * @internal - * - * @return string - */ - abstract public function getAlgorithm(); -} diff --git a/vendor/lcobucci/jwt/src/Signer/Hmac/Sha256.php b/vendor/lcobucci/jwt/src/Signer/Hmac/Sha256.php deleted file mode 100644 index 49d10b3b..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Hmac/Sha256.php +++ /dev/null @@ -1,35 +0,0 @@ - - * @since 0.1.0 - */ -class Sha256 extends Hmac -{ - /** - * {@inheritdoc} - */ - public function getAlgorithmId() - { - return 'HS256'; - } - - /** - * {@inheritdoc} - */ - public function getAlgorithm() - { - return 'sha256'; - } -} diff --git a/vendor/lcobucci/jwt/src/Signer/Hmac/Sha384.php b/vendor/lcobucci/jwt/src/Signer/Hmac/Sha384.php deleted file mode 100644 index 8618801a..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Hmac/Sha384.php +++ /dev/null @@ -1,35 +0,0 @@ - - * @since 0.1.0 - */ -class Sha384 extends Hmac -{ - /** - * {@inheritdoc} - */ - public function getAlgorithmId() - { - return 'HS384'; - } - - /** - * {@inheritdoc} - */ - public function getAlgorithm() - { - return 'sha384'; - } -} diff --git a/vendor/lcobucci/jwt/src/Signer/Hmac/Sha512.php b/vendor/lcobucci/jwt/src/Signer/Hmac/Sha512.php deleted file mode 100644 index 8ae19d8f..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Hmac/Sha512.php +++ /dev/null @@ -1,35 +0,0 @@ - - * @since 0.1.0 - */ -class Sha512 extends Hmac -{ - /** - * {@inheritdoc} - */ - public function getAlgorithmId() - { - return 'HS512'; - } - - /** - * {@inheritdoc} - */ - public function getAlgorithm() - { - return 'sha512'; - } -} diff --git a/vendor/lcobucci/jwt/src/Signer/Key.php b/vendor/lcobucci/jwt/src/Signer/Key.php deleted file mode 100644 index 317de1cd..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Key.php +++ /dev/null @@ -1,92 +0,0 @@ - - * @since 3.0.4 - */ -final class Key -{ - /** - * @var string - */ - private $content; - - /** - * @var string - */ - private $passphrase; - - /** - * @param string $content - * @param string $passphrase - */ - public function __construct($content, $passphrase = null) - { - $this->setContent($content); - $this->passphrase = $passphrase; - } - - /** - * @param string $content - * - * @throws InvalidArgumentException - */ - private function setContent($content) - { - if (strpos($content, 'file://') === 0) { - $content = $this->readFile($content); - } - - $this->content = $content; - } - - /** - * @param string $content - * - * @return string - * - * @throws InvalidArgumentException - */ - private function readFile($content) - { - try { - $file = new SplFileObject(substr($content, 7)); - $content = ''; - - while (! $file->eof()) { - $content .= $file->fgets(); - } - - return $content; - } catch (Exception $exception) { - throw new InvalidArgumentException('You must provide a valid key file', 0, $exception); - } - } - - /** - * @return string - */ - public function getContent() - { - return $this->content; - } - - /** - * @return string - */ - public function getPassphrase() - { - return $this->passphrase; - } -} diff --git a/vendor/lcobucci/jwt/src/Signer/Keychain.php b/vendor/lcobucci/jwt/src/Signer/Keychain.php deleted file mode 100644 index 3b367b6d..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Keychain.php +++ /dev/null @@ -1,44 +0,0 @@ - - * @since 2.1.0 - * - * @deprecated Since we've removed OpenSSL from ECDSA there's no reason to use this class - */ -class Keychain -{ - /** - * Returns a private key from file path or content - * - * @param string $key - * @param string $passphrase - * - * @return Key - */ - public function getPrivateKey($key, $passphrase = null) - { - return new Key($key, $passphrase); - } - - /** - * Returns a public key from file path or content - * - * @param string $certificate - * - * @return Key - */ - public function getPublicKey($certificate) - { - return new Key($certificate); - } -} diff --git a/vendor/lcobucci/jwt/src/Signer/OpenSSL.php b/vendor/lcobucci/jwt/src/Signer/OpenSSL.php deleted file mode 100644 index af1026c1..00000000 --- a/vendor/lcobucci/jwt/src/Signer/OpenSSL.php +++ /dev/null @@ -1,115 +0,0 @@ -getPrivateKey($key->getContent(), $key->getPassphrase()); - - try { - $signature = ''; - - if (! openssl_sign($payload, $signature, $privateKey, $this->getAlgorithm())) { - throw new InvalidArgumentException( - 'There was an error while creating the signature: ' . openssl_error_string() - ); - } - - return $signature; - } finally { - openssl_free_key($privateKey); - } - } - - /** - * @param string $pem - * @param string $passphrase - * - * @return resource - */ - private function getPrivateKey($pem, $passphrase) - { - $privateKey = openssl_pkey_get_private($pem, $passphrase); - $this->validateKey($privateKey); - - return $privateKey; - } - - /** - * @param $expected - * @param $payload - * @param $pem - * @return bool - */ - public function doVerify($expected, $payload, Key $key) - { - $publicKey = $this->getPublicKey($key->getContent()); - $result = openssl_verify($payload, $expected, $publicKey, $this->getAlgorithm()); - openssl_free_key($publicKey); - - return $result === 1; - } - - /** - * @param string $pem - * - * @return resource - */ - private function getPublicKey($pem) - { - $publicKey = openssl_pkey_get_public($pem); - $this->validateKey($publicKey); - - return $publicKey; - } - - /** - * Raises an exception when the key type is not the expected type - * - * @param resource|bool $key - * - * @throws InvalidArgumentException - */ - private function validateKey($key) - { - if (! is_resource($key)) { - throw new InvalidArgumentException( - 'It was not possible to parse your key, reason: ' . openssl_error_string() - ); - } - - $details = openssl_pkey_get_details($key); - - if (! isset($details['key']) || $details['type'] !== $this->getKeyType()) { - throw new InvalidArgumentException('This key is not compatible with this signer'); - } - } - - /** - * Returns the type of key to be used to create/verify the signature (using OpenSSL constants) - * - * @internal - */ - abstract public function getKeyType(); - - /** - * Returns which algorithm to be used to create/verify the signature (using OpenSSL constants) - * - * @internal - */ - abstract public function getAlgorithm(); -} diff --git a/vendor/lcobucci/jwt/src/Signer/Rsa.php b/vendor/lcobucci/jwt/src/Signer/Rsa.php deleted file mode 100644 index 55cc3611..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Rsa.php +++ /dev/null @@ -1,24 +0,0 @@ - - * @since 2.1.0 - */ -abstract class Rsa extends OpenSSL -{ - final public function getKeyType() - { - return OPENSSL_KEYTYPE_RSA; - } -} diff --git a/vendor/lcobucci/jwt/src/Signer/Rsa/Sha256.php b/vendor/lcobucci/jwt/src/Signer/Rsa/Sha256.php deleted file mode 100644 index 4e873e16..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Rsa/Sha256.php +++ /dev/null @@ -1,35 +0,0 @@ - - * @since 2.1.0 - */ -class Sha256 extends Rsa -{ - /** - * {@inheritdoc} - */ - public function getAlgorithmId() - { - return 'RS256'; - } - - /** - * {@inheritdoc} - */ - public function getAlgorithm() - { - return OPENSSL_ALGO_SHA256; - } -} diff --git a/vendor/lcobucci/jwt/src/Signer/Rsa/Sha384.php b/vendor/lcobucci/jwt/src/Signer/Rsa/Sha384.php deleted file mode 100644 index c5d26313..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Rsa/Sha384.php +++ /dev/null @@ -1,35 +0,0 @@ - - * @since 2.1.0 - */ -class Sha384 extends Rsa -{ - /** - * {@inheritdoc} - */ - public function getAlgorithmId() - { - return 'RS384'; - } - - /** - * {@inheritdoc} - */ - public function getAlgorithm() - { - return OPENSSL_ALGO_SHA384; - } -} diff --git a/vendor/lcobucci/jwt/src/Signer/Rsa/Sha512.php b/vendor/lcobucci/jwt/src/Signer/Rsa/Sha512.php deleted file mode 100644 index 0d8074b5..00000000 --- a/vendor/lcobucci/jwt/src/Signer/Rsa/Sha512.php +++ /dev/null @@ -1,35 +0,0 @@ - - * @since 2.1.0 - */ -class Sha512 extends Rsa -{ - /** - * {@inheritdoc} - */ - public function getAlgorithmId() - { - return 'RS512'; - } - - /** - * {@inheritdoc} - */ - public function getAlgorithm() - { - return OPENSSL_ALGO_SHA512; - } -} diff --git a/vendor/lcobucci/jwt/src/Token.php b/vendor/lcobucci/jwt/src/Token.php deleted file mode 100644 index 2f6299b1..00000000 --- a/vendor/lcobucci/jwt/src/Token.php +++ /dev/null @@ -1,284 +0,0 @@ - - * @since 0.1.0 - */ -class Token -{ - /** - * The token headers - * - * @var array - */ - private $headers; - - /** - * The token claim set - * - * @var array - */ - private $claims; - - /** - * The token signature - * - * @var Signature - */ - private $signature; - - /** - * The encoded data - * - * @var array - */ - private $payload; - - /** - * Initializes the object - * - * @param array $headers - * @param array $claims - * @param array $payload - * @param Signature $signature - */ - public function __construct( - array $headers = ['alg' => 'none'], - array $claims = [], - Signature $signature = null, - array $payload = ['', ''] - ) { - $this->headers = $headers; - $this->claims = $claims; - $this->signature = $signature; - $this->payload = $payload; - } - - /** - * Returns the token headers - * - * @return array - */ - public function getHeaders() - { - return $this->headers; - } - - /** - * Returns if the header is configured - * - * @param string $name - * - * @return boolean - */ - public function hasHeader($name) - { - return array_key_exists($name, $this->headers); - } - - /** - * Returns the value of a token header - * - * @param string $name - * @param mixed $default - * - * @return mixed - * - * @throws OutOfBoundsException - */ - public function getHeader($name, $default = null) - { - if ($this->hasHeader($name)) { - return $this->getHeaderValue($name); - } - - if ($default === null) { - throw new OutOfBoundsException('Requested header is not configured'); - } - - return $default; - } - - /** - * Returns the value stored in header - * - * @param string $name - * - * @return mixed - */ - private function getHeaderValue($name) - { - $header = $this->headers[$name]; - - if ($header instanceof Claim) { - return $header->getValue(); - } - - return $header; - } - - /** - * Returns the token claim set - * - * @return array - */ - public function getClaims() - { - return $this->claims; - } - - /** - * Returns if the claim is configured - * - * @param string $name - * - * @return boolean - */ - public function hasClaim($name) - { - return array_key_exists($name, $this->claims); - } - - /** - * Returns the value of a token claim - * - * @param string $name - * @param mixed $default - * - * @return mixed - * - * @throws OutOfBoundsException - */ - public function getClaim($name, $default = null) - { - if ($this->hasClaim($name)) { - return $this->claims[$name]->getValue(); - } - - if ($default === null) { - throw new OutOfBoundsException('Requested claim is not configured'); - } - - return $default; - } - - /** - * Verify if the key matches with the one that created the signature - * - * @param Signer $signer - * @param string $key - * - * @return boolean - * - * @throws BadMethodCallException When token is not signed - */ - public function verify(Signer $signer, $key) - { - if ($this->signature === null) { - throw new BadMethodCallException('This token is not signed'); - } - - if ($this->headers['alg'] !== $signer->getAlgorithmId()) { - return false; - } - - return $this->signature->verify($signer, $this->getPayload(), $key); - } - - /** - * Validates if the token is valid - * - * @param ValidationData $data - * - * @return boolean - */ - public function validate(ValidationData $data) - { - foreach ($this->getValidatableClaims() as $claim) { - if (!$claim->validate($data)) { - return false; - } - } - - return true; - } - - /** - * Determine if the token is expired. - * - * @param DateTimeInterface $now Defaults to the current time. - * - * @return bool - */ - public function isExpired(DateTimeInterface $now = null) - { - $exp = $this->getClaim('exp', false); - - if ($exp === false) { - return false; - } - - $now = $now ?: new DateTime(); - - $expiresAt = new DateTime(); - $expiresAt->setTimestamp($exp); - - return $now > $expiresAt; - } - - /** - * Yields the validatable claims - * - * @return Generator - */ - private function getValidatableClaims() - { - foreach ($this->claims as $claim) { - if ($claim instanceof Validatable) { - yield $claim; - } - } - } - - /** - * Returns the token payload - * - * @return string - */ - public function getPayload() - { - return $this->payload[0] . '.' . $this->payload[1]; - } - - /** - * Returns an encoded representation of the token - * - * @return string - */ - public function __toString() - { - $data = implode('.', $this->payload); - - if ($this->signature === null) { - $data .= '.'; - } - - return $data; - } -} diff --git a/vendor/lcobucci/jwt/src/ValidationData.php b/vendor/lcobucci/jwt/src/ValidationData.php deleted file mode 100644 index 6052ee50..00000000 --- a/vendor/lcobucci/jwt/src/ValidationData.php +++ /dev/null @@ -1,129 +0,0 @@ - - * @since 2.0.0 - */ -class ValidationData -{ - /** - * The list of things to be validated - * - * @var array - */ - private $items; - - /** - * The leeway (in seconds) to use when validating time claims - * @var int - */ - private $leeway; - - /** - * Initializes the object - * - * @param int $currentTime - * @param int $leeway - */ - public function __construct($currentTime = null, $leeway = 0) - { - $currentTime = $currentTime ?: time(); - $this->leeway = (int) $leeway; - - $this->items = [ - 'jti' => null, - 'iss' => null, - 'aud' => null, - 'sub' => null - ]; - - $this->setCurrentTime($currentTime); - } - - /** - * Configures the id - * - * @param string $id - */ - public function setId($id) - { - $this->items['jti'] = (string) $id; - } - - /** - * Configures the issuer - * - * @param string $issuer - */ - public function setIssuer($issuer) - { - $this->items['iss'] = (string) $issuer; - } - - /** - * Configures the audience - * - * @param string $audience - */ - public function setAudience($audience) - { - $this->items['aud'] = (string) $audience; - } - - /** - * Configures the subject - * - * @param string $subject - */ - public function setSubject($subject) - { - $this->items['sub'] = (string) $subject; - } - - /** - * Configures the time that "iat", "nbf" and "exp" should be based on - * - * @param int $currentTime - */ - public function setCurrentTime($currentTime) - { - $currentTime = (int) $currentTime; - - $this->items['iat'] = $currentTime + $this->leeway; - $this->items['nbf'] = $currentTime + $this->leeway; - $this->items['exp'] = $currentTime - $this->leeway; - } - - /** - * Returns the requested item - * - * @param string $name - * - * @return mixed - */ - public function get($name) - { - return isset($this->items[$name]) ? $this->items[$name] : null; - } - - /** - * Returns if the item is present - * - * @param string $name - * - * @return boolean - */ - public function has($name) - { - return !empty($this->items[$name]); - } -} diff --git a/vendor/lcobucci/jwt/test/functional/EcdsaTokenTest.php b/vendor/lcobucci/jwt/test/functional/EcdsaTokenTest.php deleted file mode 100644 index 5a18f952..00000000 --- a/vendor/lcobucci/jwt/test/functional/EcdsaTokenTest.php +++ /dev/null @@ -1,328 +0,0 @@ - - * @since 2.1.0 - */ -class EcdsaTokenTest extends \PHPUnit\Framework\TestCase -{ - use Keys; - - /** - * @var Sha256 - */ - private $signer; - - /** - * @before - */ - public function createSigner() - { - $this->signer = new Sha256(); - } - - /** - * @test - * - * @expectedException \InvalidArgumentException - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Ecdsa - * @covers \Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha256 - * @covers \Lcobucci\JWT\Signer\OpenSSL - */ - public function builderShouldRaiseExceptionWhenKeyIsInvalid() - { - $user = (object) ['name' => 'testing', 'email' => 'testing@abc.com']; - - (new Builder())->setId(1) - ->setAudience('http://client.abc.com') - ->setIssuer('http://api.abc.com') - ->set('user', $user) - ->getToken($this->signer, new Key('testing')); - } - - /** - * @test - * - * @expectedException \InvalidArgumentException - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Ecdsa - * @covers \Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha256 - * @covers \Lcobucci\JWT\Signer\OpenSSL - */ - public function builderShouldRaiseExceptionWhenKeyIsNotEcdsaCompatible() - { - $user = (object) ['name' => 'testing', 'email' => 'testing@abc.com']; - - (new Builder())->setId(1) - ->setAudience('http://client.abc.com') - ->setIssuer('http://api.abc.com') - ->set('user', $user) - ->getToken($this->signer, static::$rsaKeys['private']); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Ecdsa - * @covers \Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha256 - * @covers \Lcobucci\JWT\Signer\OpenSSL - */ - public function builderCanGenerateAToken() - { - $user = (object) ['name' => 'testing', 'email' => 'testing@abc.com']; - - $token = (new Builder())->setId(1) - ->setAudience('http://client.abc.com') - ->setIssuer('http://api.abc.com') - ->set('user', $user) - ->setHeader('jki', '1234') - ->sign($this->signer, static::$ecdsaKeys['private']) - ->getToken(); - - $this->assertAttributeInstanceOf(Signature::class, 'signature', $token); - $this->assertEquals('1234', $token->getHeader('jki')); - $this->assertEquals('http://client.abc.com', $token->getClaim('aud')); - $this->assertEquals('http://api.abc.com', $token->getClaim('iss')); - $this->assertEquals($user, $token->getClaim('user')); - - return $token; - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Parsing\Decoder - * @covers Lcobucci\JWT\Signer\Ecdsa - */ - public function parserCanReadAToken(Token $generated) - { - $read = (new Parser())->parse((string) $generated); - - $this->assertEquals($generated, $read); - $this->assertEquals('testing', $read->getClaim('user')->name); - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Ecdsa - * @covers \Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha256 - * @covers \Lcobucci\JWT\Signer\OpenSSL - */ - public function verifyShouldReturnFalseWhenKeyIsNotRight(Token $token) - { - $this->assertFalse($token->verify($this->signer, static::$ecdsaKeys['public2'])); - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Ecdsa - * @covers \Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha256 - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha512 - * @covers \Lcobucci\JWT\Signer\OpenSSL - */ - public function verifyShouldReturnFalseWhenAlgorithmIsDifferent(Token $token) - { - $this->assertFalse($token->verify(new Sha512(), static::$ecdsaKeys['public1'])); - } - - /** - * @test - * - * @expectedException \InvalidArgumentException - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Ecdsa - * @covers \Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha256 - * @covers \Lcobucci\JWT\Signer\OpenSSL - */ - public function verifyShouldRaiseExceptionWhenKeyIsNotEcdsaCompatible(Token $token) - { - $this->assertFalse($token->verify($this->signer, static::$rsaKeys['public'])); - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Ecdsa - * @covers \Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha256 - * @covers \Lcobucci\JWT\Signer\OpenSSL - */ - public function verifyShouldReturnTrueWhenKeyIsRight(Token $token) - { - $this->assertTrue($token->verify($this->signer, static::$ecdsaKeys['public1'])); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Ecdsa - * @covers \Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha256 - * @covers \Lcobucci\JWT\Signer\OpenSSL - */ - public function everythingShouldWorkWithAKeyWithParams() - { - $user = (object) ['name' => 'testing', 'email' => 'testing@abc.com']; - - $token = (new Builder())->setId(1) - ->setAudience('http://client.abc.com') - ->setIssuer('http://api.abc.com') - ->set('user', $user) - ->setHeader('jki', '1234') - ->sign($this->signer, static::$ecdsaKeys['private-params']) - ->getToken(); - - $this->assertTrue($token->verify($this->signer, static::$ecdsaKeys['public-params'])); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Ecdsa - * @covers \Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha512 - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers Lcobucci\JWT\Signer\Keychain - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Parsing\Decoder - */ - public function everythingShouldWorkWhenUsingATokenGeneratedByOtherLibs() - { - $data = 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJoZWxsbyI6IndvcmxkIn0.' - . 'AQx1MqdTni6KuzfOoedg2-7NUiwe-b88SWbdmviz40GTwrM0Mybp1i1tVtm' - . 'TSQ91oEXGXBdtwsN6yalzP9J-sp2YATX_Tv4h-BednbdSvYxZsYnUoZ--ZU' - . 'dL10t7g8Yt3y9hdY_diOjIptcha6ajX8yzkDGYG42iSe3f5LywSuD6FO5c'; - - $key = '-----BEGIN PUBLIC KEY-----' . PHP_EOL - . 'MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAcpkss6wI7PPlxj3t7A1RqMH3nvL4' . PHP_EOL - . 'L5Tzxze/XeeYZnHqxiX+gle70DlGRMqqOq+PJ6RYX7vK0PJFdiAIXlyPQq0B3KaU' . PHP_EOL - . 'e86IvFeQSFrJdCc0K8NfiH2G1loIk3fiR+YLqlXk6FAeKtpXJKxR1pCQCAM+vBCs' . PHP_EOL - . 'mZudf1zCUZ8/4eodlHU=' . PHP_EOL - . '-----END PUBLIC KEY-----'; - - $keychain = new Keychain(); - $token = (new Parser())->parse((string) $data); - - $this->assertEquals('world', $token->getClaim('hello')); - $this->assertTrue($token->verify(new Sha512(), $keychain->getPublicKey($key))); - } -} diff --git a/vendor/lcobucci/jwt/test/functional/HmacTokenTest.php b/vendor/lcobucci/jwt/test/functional/HmacTokenTest.php deleted file mode 100644 index 20101dd9..00000000 --- a/vendor/lcobucci/jwt/test/functional/HmacTokenTest.php +++ /dev/null @@ -1,186 +0,0 @@ - - * @since 2.1.0 - */ -class HmacTokenTest extends \PHPUnit\Framework\TestCase -{ - /** - * @var Sha256 - */ - private $signer; - - /** - * @before - */ - public function createSigner() - { - $this->signer = new Sha256(); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Hmac - * @covers Lcobucci\JWT\Signer\Hmac\Sha256 - */ - public function builderCanGenerateAToken() - { - $user = (object) ['name' => 'testing', 'email' => 'testing@abc.com']; - - $token = (new Builder())->setId(1) - ->setAudience('http://client.abc.com') - ->setIssuer('http://api.abc.com') - ->set('user', $user) - ->setHeader('jki', '1234') - ->sign($this->signer, 'testing') - ->getToken(); - - $this->assertAttributeInstanceOf(Signature::class, 'signature', $token); - $this->assertEquals('1234', $token->getHeader('jki')); - $this->assertEquals('http://client.abc.com', $token->getClaim('aud')); - $this->assertEquals('http://api.abc.com', $token->getClaim('iss')); - $this->assertEquals($user, $token->getClaim('user')); - - return $token; - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Parsing\Decoder - */ - public function parserCanReadAToken(Token $generated) - { - $read = (new Parser())->parse((string) $generated); - - $this->assertEquals($generated, $read); - $this->assertEquals('testing', $read->getClaim('user')->name); - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Hmac - * @covers Lcobucci\JWT\Signer\Hmac\Sha256 - */ - public function verifyShouldReturnFalseWhenKeyIsNotRight(Token $token) - { - $this->assertFalse($token->verify($this->signer, 'testing1')); - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Hmac - * @covers Lcobucci\JWT\Signer\Hmac\Sha256 - * @covers Lcobucci\JWT\Signer\Hmac\Sha512 - */ - public function verifyShouldReturnFalseWhenAlgorithmIsDifferent(Token $token) - { - $this->assertFalse($token->verify(new Sha512(), 'testing')); - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Hmac - * @covers Lcobucci\JWT\Signer\Hmac\Sha256 - */ - public function verifyShouldReturnTrueWhenKeyIsRight(Token $token) - { - $this->assertTrue($token->verify($this->signer, 'testing')); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers Lcobucci\JWT\Signer\Hmac - * @covers Lcobucci\JWT\Signer\Hmac\Sha256 - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Parsing\Decoder - */ - public function everythingShouldWorkWhenUsingATokenGeneratedByOtherLibs() - { - $data = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXUyJ9.eyJoZWxsbyI6IndvcmxkIn0.Rh' - . '7AEgqCB7zae1PkgIlvOpeyw9Ab8NGTbeOH7heHO0o'; - - $token = (new Parser())->parse((string) $data); - - $this->assertEquals('world', $token->getClaim('hello')); - $this->assertTrue($token->verify($this->signer, 'testing')); - } -} diff --git a/vendor/lcobucci/jwt/test/functional/Keys.php b/vendor/lcobucci/jwt/test/functional/Keys.php deleted file mode 100644 index f3a83d2c..00000000 --- a/vendor/lcobucci/jwt/test/functional/Keys.php +++ /dev/null @@ -1,53 +0,0 @@ - - */ -trait Keys -{ - /** - * @var array - */ - protected static $rsaKeys; - - /** - * @var array - */ - protected static $ecdsaKeys; - - /** - * @beforeClass - */ - public static function createRsaKeys() - { - $keychain = new Keychain(); - $dir = 'file://' . __DIR__; - - static::$rsaKeys = [ - 'private' => $keychain->getPrivateKey($dir . '/rsa/private.key'), - 'public' => $keychain->getPublicKey($dir . '/rsa/public.key'), - 'encrypted-private' => $keychain->getPrivateKey($dir . '/rsa/encrypted-private.key', 'testing'), - 'encrypted-public' => $keychain->getPublicKey($dir . '/rsa/encrypted-public.key') - ]; - } - - /** - * @beforeClass - */ - public static function createEcdsaKeys() - { - $keychain = new Keychain(); - $dir = 'file://' . __DIR__; - - static::$ecdsaKeys = [ - 'private' => $keychain->getPrivateKey($dir . '/ecdsa/private.key'), - 'private-params' => $keychain->getPrivateKey($dir . '/ecdsa/private2.key'), - 'public1' => $keychain->getPublicKey($dir . '/ecdsa/public1.key'), - 'public2' => $keychain->getPublicKey($dir . '/ecdsa/public2.key'), - 'public-params' => $keychain->getPublicKey($dir . '/ecdsa/public3.key'), - ]; - } -} diff --git a/vendor/lcobucci/jwt/test/functional/RFC6978VectorTest.php b/vendor/lcobucci/jwt/test/functional/RFC6978VectorTest.php deleted file mode 100644 index 0076b6d8..00000000 --- a/vendor/lcobucci/jwt/test/functional/RFC6978VectorTest.php +++ /dev/null @@ -1,154 +0,0 @@ -verify($signature, $payload, $key)); - } - - /** - * @return mixed[] - */ - public function dataRFC6979() - { - return $this->sha256Data() + $this->sha384Data() + $this->sha512Data(); - } - - /** - * @return mixed[] - */ - public function sha256Data() - { - $signer = new Sha256(); - $key = new Key( - '-----BEGIN PUBLIC KEY-----' . PHP_EOL - . 'MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYP7UuiVanTHJYet0xjVtaMBJuJI7' . PHP_EOL - . 'Yfps5mliLmDyn7Z5A/4QCLi8maQa6elWKLxk8vGyDC1+n1F3o8KU1EYimQ==' . PHP_EOL - . '-----END PUBLIC KEY-----' - ); - - return [ - 'SHA-256 (sample)' => [ - $signer, - $key, - 'sample', - 'EFD48B2AACB6A8FD1140DD9CD45E81D69D2C877B56AAF991C34D0EA84EAF3716', - 'F7CB1C942D657C41D436C7A1B6E29F65F3E900DBB9AFF4064DC4AB2F843ACDA8', - ], - 'SHA-256 (test)' => [ - $signer, - $key, - 'test', - 'F1ABB023518351CD71D881567B1EA663ED3EFCF6C5132B354F28D3B0B7D38367', - '019F4113742A2B14BD25926B49C649155F267E60D3814B4C0CC84250E46F0083', - ] - ]; - } - - /** - * @return mixed[] - */ - public function sha384Data() - { - $signer = new Sha384(); - $key = new Key( - '-----BEGIN PUBLIC KEY-----' . PHP_EOL - . 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE7DpOQVtOGaRWhhgCn0J/pdqai8SukuAu' . PHP_EOL - . 'BqrlKGswDGTe+PDqkFWGYGSiVFFUgLwTgBXZty19VyROqO+awMYhiWcIpZNn+d+5' . PHP_EOL - . '9UyoSz8cnbEoiyMcOuDU/nNE/SUzJkcg' . PHP_EOL - . '-----END PUBLIC KEY-----' - ); - - return [ - 'SHA-384 (sample)' => [ - $signer, - $key, - 'sample', - '94EDBB92A5ECB8AAD4736E56C691916B3F88140666CE9FA73D64C4EA95AD133C81A648152E44ACF96E36DD1E80FABE46', - '99EF4AEB15F178CEA1FE40DB2603138F130E740A19624526203B6351D0A3A94FA329C145786E679E7B82C71A38628AC8', - ], - 'SHA-384 (test)' => [ - $signer, - $key, - 'test', - '8203B63D3C853E8D77227FB377BCF7B7B772E97892A80F36AB775D509D7A5FEB0542A7F0812998DA8F1DD3CA3CF023DB', - 'DDD0760448D42D8A43AF45AF836FCE4DE8BE06B485E9B61B827C2F13173923E06A739F040649A667BF3B828246BAA5A5', - ] - ]; - } - - /** - * @return mixed[] - */ - public function sha512Data() - { - $signer = new Sha512(); - $key = new Key( - '-----BEGIN PUBLIC KEY-----' . PHP_EOL - . 'MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBiUVQ0HhZMuAOqiO2lPIT+MMSH4bc' . PHP_EOL - . 'l6BOWnFn205bzTcRI9RuRdtrXVNwp/IPtjMVXTj/oW0r12HcrEdLmi9QI6QASTEB' . PHP_EOL - . 'yWLNTS/d94IoXmRYQTnC+RtH+H/4I1TWYw90aiig2yV0G1s0qCgAiyKswj+ST6r7' . PHP_EOL - . '1NM/gepmlW3+qiv9/PU=' . PHP_EOL - . '-----END PUBLIC KEY-----' - ); - - return [ - 'SHA-512 (sample)' => [ - $signer, - $key, - 'sample', - '00C328FAFCBD79DD77850370C46325D987CB525569FB63C5D3BC53950E6D4C5F174E25A1EE9017B5D450606ADD152B534931D7D4E8' - . '455CC91F9B15BF05EC36E377FA', - '00617CCE7CF5064806C467F678D3B4080D6F1CC50AF26CA209417308281B68AF282623EAA63E5B5C0723D8B8C37FF0777B1A20F8CC' - . 'B1DCCC43997F1EE0E44DA4A67A', - ], - 'SHA-512 (test)' => [ - $signer, - $key, - 'test', - '013E99020ABF5CEE7525D16B69B229652AB6BDF2AFFCAEF38773B4B7D08725F10CDB93482FDCC54EDCEE91ECA4166B2A7C6265EF0C' - . 'E2BD7051B7CEF945BABD47EE6D', - '01FBD0013C674AA79CB39849527916CE301C66EA7CE8B80682786AD60F98F7E78A19CA69EFF5C57400E3B3A0AD66CE0978214D13BA' - . 'F4E9AC60752F7B155E2DE4DCE3', - ], - ]; - } -} diff --git a/vendor/lcobucci/jwt/test/functional/RsaTokenTest.php b/vendor/lcobucci/jwt/test/functional/RsaTokenTest.php deleted file mode 100644 index 99931836..00000000 --- a/vendor/lcobucci/jwt/test/functional/RsaTokenTest.php +++ /dev/null @@ -1,280 +0,0 @@ - - * @since 2.1.0 - */ -class RsaTokenTest extends \PHPUnit\Framework\TestCase -{ - use Keys; - - /** - * @var Sha256 - */ - private $signer; - - /** - * @before - */ - public function createSigner() - { - $this->signer = new Sha256(); - } - - /** - * @test - * - * @expectedException \InvalidArgumentException - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\Rsa - * @covers \Lcobucci\JWT\Signer\Rsa\Sha256 - */ - public function builderShouldRaiseExceptionWhenKeyIsInvalid() - { - $user = (object) ['name' => 'testing', 'email' => 'testing@abc.com']; - - (new Builder())->setId(1) - ->setAudience('http://client.abc.com') - ->setIssuer('http://api.abc.com') - ->set('user', $user) - ->getToken($this->signer, new Key('testing')); - } - - /** - * @test - * - * @expectedException \InvalidArgumentException - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\Rsa - * @covers \Lcobucci\JWT\Signer\Rsa\Sha256 - */ - public function builderShouldRaiseExceptionWhenKeyIsNotRsaCompatible() - { - $user = (object) ['name' => 'testing', 'email' => 'testing@abc.com']; - - (new Builder())->setId(1) - ->setAudience('http://client.abc.com') - ->setIssuer('http://api.abc.com') - ->set('user', $user) - ->getToken($this->signer, static::$ecdsaKeys['private']); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\Rsa - * @covers \Lcobucci\JWT\Signer\Rsa\Sha256 - */ - public function builderCanGenerateAToken() - { - $user = (object) ['name' => 'testing', 'email' => 'testing@abc.com']; - - $token = (new Builder())->setId(1) - ->setAudience('http://client.abc.com') - ->setIssuer('http://api.abc.com') - ->set('user', $user) - ->setHeader('jki', '1234') - ->sign($this->signer, static::$rsaKeys['private']) - ->getToken(); - - $this->assertAttributeInstanceOf(Signature::class, 'signature', $token); - $this->assertEquals('1234', $token->getHeader('jki')); - $this->assertEquals('http://client.abc.com', $token->getClaim('aud')); - $this->assertEquals('http://api.abc.com', $token->getClaim('iss')); - $this->assertEquals($user, $token->getClaim('user')); - - return $token; - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Parsing\Decoder - */ - public function parserCanReadAToken(Token $generated) - { - $read = (new Parser())->parse((string) $generated); - - $this->assertEquals($generated, $read); - $this->assertEquals('testing', $read->getClaim('user')->name); - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\Rsa - * @covers \Lcobucci\JWT\Signer\Rsa\Sha256 - */ - public function verifyShouldReturnFalseWhenKeyIsNotRight(Token $token) - { - $this->assertFalse($token->verify($this->signer, self::$rsaKeys['encrypted-public'])); - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\Rsa - * @covers \Lcobucci\JWT\Signer\Rsa\Sha256 - * @covers \Lcobucci\JWT\Signer\Rsa\Sha512 - */ - public function verifyShouldReturnFalseWhenAlgorithmIsDifferent(Token $token) - { - $this->assertFalse($token->verify(new Sha512(), self::$rsaKeys['public'])); - } - - /** - * @test - * - * @expectedException \InvalidArgumentException - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\Rsa - * @covers \Lcobucci\JWT\Signer\Rsa\Sha256 - */ - public function verifyShouldRaiseExceptionWhenKeyIsNotRsaCompatible(Token $token) - { - $this->assertFalse($token->verify($this->signer, self::$ecdsaKeys['public1'])); - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\Rsa - * @covers \Lcobucci\JWT\Signer\Rsa\Sha256 - */ - public function verifyShouldReturnTrueWhenKeyIsRight(Token $token) - { - $this->assertTrue($token->verify($this->signer, self::$rsaKeys['public'])); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Signature - * @covers Lcobucci\JWT\Signer\Key - * @covers Lcobucci\JWT\Signer\BaseSigner - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\Rsa - * @covers \Lcobucci\JWT\Signer\Rsa\Sha256 - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Parsing\Decoder - */ - public function everythingShouldWorkWhenUsingATokenGeneratedByOtherLibs() - { - $data = 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXUyJ9.eyJoZWxsbyI6IndvcmxkIn0.s' - . 'GYbB1KrmnESNfJ4D9hOe1Zad_BMyxdb8G4p4LNP7StYlOyBWck6q7XPpPj_6gB' - . 'Bo1ohD3MA2o0HY42lNIrAStaVhfsFKGdIou8TarwMGZBPcif_3ThUV1pGS3fZc' - . 'lFwF2SP7rqCngQis_xcUVCyqa8E1Wa_v28grnl1QZrnmQFO8B5JGGLqcrfUHJO' - . 'nJCupP-Lqh4TmIhftIimSCgLNmJg80wyrpUEfZYReE7hPuEmY0ClTqAGIMQoNS' - . '98ljwDxwhfbSuL2tAdbV4DekbTpWzspe3dOJ7RSzmPKVZ6NoezaIazKqyqkmHZfcMaHI1lQeGia6LTbHU1bp0gINi74Vw'; - - $token = (new Parser())->parse((string) $data); - - $this->assertEquals('world', $token->getClaim('hello')); - $this->assertTrue($token->verify($this->signer, self::$rsaKeys['public'])); - } -} diff --git a/vendor/lcobucci/jwt/test/functional/UnsignedTokenTest.php b/vendor/lcobucci/jwt/test/functional/UnsignedTokenTest.php deleted file mode 100644 index 6e26fdff..00000000 --- a/vendor/lcobucci/jwt/test/functional/UnsignedTokenTest.php +++ /dev/null @@ -1,161 +0,0 @@ - - * @since 2.1.0 - */ -class UnsignedTokenTest extends \PHPUnit\Framework\TestCase -{ - const CURRENT_TIME = 100000; - - /** - * @test - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - */ - public function builderCanGenerateAToken() - { - $user = (object) ['name' => 'testing', 'email' => 'testing@abc.com']; - - $token = (new Builder())->setId(1) - ->setAudience('http://client.abc.com') - ->setIssuer('http://api.abc.com') - ->setExpiration(self::CURRENT_TIME + 3000) - ->set('user', $user) - ->getToken(); - - $this->assertAttributeEquals(null, 'signature', $token); - $this->assertEquals('http://client.abc.com', $token->getClaim('aud')); - $this->assertEquals('http://api.abc.com', $token->getClaim('iss')); - $this->assertEquals(self::CURRENT_TIME + 3000, $token->getClaim('exp')); - $this->assertEquals($user, $token->getClaim('user')); - - return $token; - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Parsing\Decoder - */ - public function parserCanReadAToken(Token $generated) - { - $read = (new Parser())->parse((string) $generated); - - $this->assertEquals($generated, $read); - $this->assertEquals('testing', $read->getClaim('user')->name); - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\ValidationData - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Claim\EqualsTo - * @covers Lcobucci\JWT\Claim\GreaterOrEqualsTo - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Parsing\Decoder - */ - public function tokenValidationShouldReturnWhenEverythingIsFine(Token $generated) - { - $data = new ValidationData(self::CURRENT_TIME - 10); - $data->setAudience('http://client.abc.com'); - $data->setIssuer('http://api.abc.com'); - - $this->assertTrue($generated->validate($data)); - } - - /** - * @test - * - * @dataProvider invalidValidationData - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\ValidationData - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Claim\EqualsTo - * @covers Lcobucci\JWT\Claim\GreaterOrEqualsTo - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Parsing\Decoder - */ - public function tokenValidationShouldReturnFalseWhenExpectedDataDontMatch(ValidationData $data, Token $generated) - { - $this->assertFalse($generated->validate($data)); - } - - /** - * @test - * - * @depends builderCanGenerateAToken - * - * @covers Lcobucci\JWT\Builder - * @covers Lcobucci\JWT\Parser - * @covers Lcobucci\JWT\Token - * @covers Lcobucci\JWT\ValidationData - * @covers Lcobucci\JWT\Claim\Factory - * @covers Lcobucci\JWT\Claim\Basic - * @covers Lcobucci\JWT\Claim\EqualsTo - * @covers Lcobucci\JWT\Claim\GreaterOrEqualsTo - * @covers Lcobucci\JWT\Parsing\Encoder - * @covers Lcobucci\JWT\Parsing\Decoder - */ - public function tokenValidationShouldReturnTrueWhenExpectedDataMatchBecauseOfLeeway(Token $generated) - { - $notExpiredDueToLeeway = new ValidationData(self::CURRENT_TIME + 3020, 50); - $notExpiredDueToLeeway->setAudience('http://client.abc.com'); - $notExpiredDueToLeeway->setIssuer('http://api.abc.com'); - $this->assertTrue($generated->validate($notExpiredDueToLeeway)); - } - - public function invalidValidationData() - { - $expired = new ValidationData(self::CURRENT_TIME + 3020); - $expired->setAudience('http://client.abc.com'); - $expired->setIssuer('http://api.abc.com'); - - $invalidAudience = new ValidationData(self::CURRENT_TIME - 10); - $invalidAudience->setAudience('http://cclient.abc.com'); - $invalidAudience->setIssuer('http://api.abc.com'); - - $invalidIssuer = new ValidationData(self::CURRENT_TIME - 10); - $invalidIssuer->setAudience('http://client.abc.com'); - $invalidIssuer->setIssuer('http://aapi.abc.com'); - - return [[$expired], [$invalidAudience], [$invalidIssuer]]; - } -} diff --git a/vendor/lcobucci/jwt/test/functional/ecdsa/private.key b/vendor/lcobucci/jwt/test/functional/ecdsa/private.key deleted file mode 100644 index d8ac3a2a..00000000 --- a/vendor/lcobucci/jwt/test/functional/ecdsa/private.key +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -MHcCAQEEIBGpMoZJ64MMSzuo5JbmXpf9V4qSWdLIl/8RmJLcfn/qoAoGCCqGSM49 -AwEHoUQDQgAE7it/EKmcv9bfpcV1fBreLMRXxWpnd0wxa2iFruiI2tsEdGFTLTsy -U+GeRqC7zN0aTnTQajarUylKJ3UWr/r1kg== ------END EC PRIVATE KEY----- \ No newline at end of file diff --git a/vendor/lcobucci/jwt/test/functional/ecdsa/private2.key b/vendor/lcobucci/jwt/test/functional/ecdsa/private2.key deleted file mode 100644 index 7c4e1316..00000000 --- a/vendor/lcobucci/jwt/test/functional/ecdsa/private2.key +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN EC PARAMETERS----- -BggqhkjOPQMBBw== ------END EC PARAMETERS----- ------BEGIN EC PRIVATE KEY----- -MHcCAQEEIM6G7WZ6SqoPwrHwGXhOJkYD+ErT8dfRvrNifgBQvSb7oAoGCCqGSM49 -AwEHoUQDQgAE09Hkp/u0tIGdzlQ99R/sXCOr9DTZAfLex4D4Po0C1L3qUqHrzZ0m -B3bAhe+pwEDQ/jqVqdzxhA9i4PqT7F4Aew== ------END EC PRIVATE KEY----- diff --git a/vendor/lcobucci/jwt/test/functional/ecdsa/public1.key b/vendor/lcobucci/jwt/test/functional/ecdsa/public1.key deleted file mode 100644 index 21ea2e77..00000000 --- a/vendor/lcobucci/jwt/test/functional/ecdsa/public1.key +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN PUBLIC KEY----- -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7it/EKmcv9bfpcV1fBreLMRXxWpn -d0wxa2iFruiI2tsEdGFTLTsyU+GeRqC7zN0aTnTQajarUylKJ3UWr/r1kg== ------END PUBLIC KEY----- \ No newline at end of file diff --git a/vendor/lcobucci/jwt/test/functional/ecdsa/public2.key b/vendor/lcobucci/jwt/test/functional/ecdsa/public2.key deleted file mode 100644 index ad11abdb..00000000 --- a/vendor/lcobucci/jwt/test/functional/ecdsa/public2.key +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN PUBLIC KEY----- -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdgxRxlhzhHGj+v6S2ikp+33LoGp5 -QWbEWv8BORsr2Ayg6C7deDDRM/s/f0R++4zZqXro1gDTVF5VDv7nE+EfEw== ------END PUBLIC KEY----- \ No newline at end of file diff --git a/vendor/lcobucci/jwt/test/functional/ecdsa/public3.key b/vendor/lcobucci/jwt/test/functional/ecdsa/public3.key deleted file mode 100644 index 3bf5cd79..00000000 --- a/vendor/lcobucci/jwt/test/functional/ecdsa/public3.key +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN PUBLIC KEY----- -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE09Hkp/u0tIGdzlQ99R/sXCOr9DTZ -AfLex4D4Po0C1L3qUqHrzZ0mB3bAhe+pwEDQ/jqVqdzxhA9i4PqT7F4Aew== ------END PUBLIC KEY----- diff --git a/vendor/lcobucci/jwt/test/functional/rsa/encrypted-private.key b/vendor/lcobucci/jwt/test/functional/rsa/encrypted-private.key deleted file mode 100644 index 121f88f0..00000000 --- a/vendor/lcobucci/jwt/test/functional/rsa/encrypted-private.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,0D71668CE71033CB9150ED82FC87F4A1 - -uLzPNDdlHnZ77tAGMHyPYERDMBcdV4SsQJYcSjiHhR2o0dLGTdgOpQrXTHPX4GJF -LlEWLhAAV9wx2mM/2kHDWB4uZwThtT9/v+RFoW1WbVO/d3lhI9fg4/73/DWAH/7/ -afMRc7ZOVoAmVCESotPx4khCHoE97RdY/JtkLTzc3+peqmL53AbYXrg9rTN1B+ZV -U3w4ciQS8Uki87zDYIBjYtaOCyMUTvug25CvdssvUMBoc/Jc0xps6/vAyXrnzlGT -pZD0Tst8idswfDi613BhAaxJspeY0AErWA59qJ3eGzbiQq5RDWcbJe/Tz5r/6+NN -DkvNQ7DaEZ6LpeWX0MUq6/QWfrM8yE95XhjyC1d3LYn32lXHUygbgTFWIgLDoOE6 -nBhu34SWtbLAnqYGewaJFxhlYVS9rb/uvYQg70r5X9Sx6alCQPiPyIv39IItezn2 -HF2GRfE91MPZUeDhdqdvvOlSZVM5KnYc1fhamGAwM48gdDDXe8Czu/JEGoANNvC3 -l/Z1p5RtGF4hrel9WpeX9zQq3pvtfVcVIiWuRUwCOSQytXlieRK37sMuYeggvmjV -VvaCods3mS/panWg9T/D/deIXjhzNJLvyiJg8+3sY5H4yNe0XpbaAc/ySwt9Rcxy -FzFQ+5pghLSZgR1uV3AhdcnzXBU2GkYhdGKt2tUsH0UeVQ2BXxTlBFsCOh2dWqcj -y3suIG65bukDAAWidQ4q3S6ZIMpXBhhCj7nwB5jQ7wSlU3U9So0ndr7zxdUILiMm -chHi3q5apVZnMGcwv2B33rt4nD7HgGEmRKkCelrSrBATY1ut+T4rCDzKDqDs3jpv -hYIWrlNPTkJyQz3eWly6Db+FJEfdYGadYJusc7/nOxCh/QmUu8Sh3NhKT6TH0bS7 -1AAqd8H+2hJ9I32Dhd2qwAF7PkNe2LGi+P8tbAtepKGim5w65wnsPePMnrfxumsG -PeDnMrqeCKy+fME7a/MS5kmEBpmD4BMhVC6/OhFVz8gBty1f8yIEZggHNQN2QK7m -NIrG+PwqW2w8HoxOlAi2Ix4LTPifrdfsH02U7aM1pgo1rZzD4AOzqvzCaK43H2VB -BHLeTBGoLEUxXA9C+iGbeQlKXkMC00QKkjK5+nvkvnvePFfsrTQIpuyGufD/MoPb -6fpwsyHZDxhxMN1PJk1b1lPq2Ui4hXpVNOYd4Q6OQz7bwxTMRX9XQromUlKMMgAT -edX8v2NdM7Ssy1IwHuGVbDEpZdjoeaWZ1iNRV17i/EaJAqwYDQLfsuHBlzZL1ov1 -xkKVJdL8Y3q80oRAzTQDVdzL/rI44LLAfv609YByCnw29feYJY2W6gV0O7ZSw413 -XUkc5CaEbR1LuG8NtnOOPJV4Tb/hNsIDtvVm7Hl5npBKBe4iVgQ2LNuC2eT69d/z -uvzgjISlumPiO5ivuYe0QtLPuJSc+/Bl8bPL8gcNQEtqkzj7IftHPPZNs+bJC2uY -bPjq5KoDNAMF6VHuKHwu48MBYpnXDIg3ZenmJwGRULRBhK6324hDS6NJ7ULTBU2M -TZCHmg89ySLBfCAspVeo63o/R7bs9a7BP9x2h5uwCBogSvkEwhhPKnboVN45bp9c ------END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/vendor/lcobucci/jwt/test/functional/rsa/encrypted-public.key b/vendor/lcobucci/jwt/test/functional/rsa/encrypted-public.key deleted file mode 100644 index ae4a37c4..00000000 --- a/vendor/lcobucci/jwt/test/functional/rsa/encrypted-public.key +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwLpbUP8a9yflt5LKUUS3 -NPuRM7yEouPWg0VKeY5AURu4i8bqQ20K5jwfRJ+w05FvlywG4EuxpnpTFTVS2/do -q3xufzTf/C3KIDOAHEifkdx4140btKxxm4mD9Eu2CQ32adZyScha50KUFlfnAAic -Hb8wYxjFyWo3PAbGYmCQCn2z97Ab0Ar6NR1e+V9f8EL9Orr2f04puKJfQTZdWVDF -UJR4w7QZ/CPY0LEsiFLW3QQCNraka1mtrLJwPqreBtDEkj8IoISNkrguu/97RQZz -miJgBQkVjr6OfqG5WIFr0MzbRZc1/aK9g8ft88nhhQm0E3GqkCxBKTwgA03HtK07 -qQIDAQAB ------END PUBLIC KEY----- \ No newline at end of file diff --git a/vendor/lcobucci/jwt/test/functional/rsa/private.key b/vendor/lcobucci/jwt/test/functional/rsa/private.key deleted file mode 100644 index 962c7f9a..00000000 --- a/vendor/lcobucci/jwt/test/functional/rsa/private.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDTvwE87MtgREYL -TL4aHhQo3ZzogmxxvMUsKnPzyxRs1YrXOSOpwN0npsXarBKKVIUMNLfFODp/vnQn -2Zp06N8XG59WAOKwvC4MfxLDQkA+JXggzHlkbVoTN+dUkdYIFqSKuAPGwiWToRK2 -SxEhij3rE2FON8jQZvDxZkiP9a4vxJO3OTPQwKredXFiObsXD/c3RtLFhKctjCyH -OIrP0bQEsee/m7JNtG4ry6BPusN6wb+vJo5ieBYPa3c19akNq6q/nYWhplhkkJSu -aOrL5xXEFzI5TvcvnXR568GVcxK8YLfFkdxpsXGt5rAbeh0h/U5kILEAqv8P9PGT -ZpicKbrnAgMBAAECggEAd3yTQEQHR91/ASVfKPHMQns77eCbPVtekFusbugsMHYY -EPdHbqVMpvFvOMRc+f5Tzd15ziq6qBdbCJm8lThLm4iU0z1QrpaiDZ8vgUvDYM5Y -CXoZDli+uZWUTp60/n94fmb0ipZIChScsI2PrzOJWTvobvD/uso8MJydWc8zafQm -uqYzygOfjFZvU4lSfgzpefhpquy0JUy5TiKRmGUnwLb3TtcsVavjsn4QmNwLYgOF -2OE+R12ex3pAKTiRE6FcnE1xFIo1GKhBa2Otgw3MDO6Gg+kn8Q4alKz6C6RRlgaH -R7sYzEfJhsk/GGFTYOzXKQz2lSaStKt9wKCor04RcQKBgQDzPOu5jCTfayUo7xY2 -jHtiogHyKLLObt9l3qbwgXnaD6rnxYNvCrA0OMvT+iZXsFZKJkYzJr8ZOxOpPROk -10WdOaefiwUyL5dypueSwlIDwVm+hI4Bs82MajHtzOozh+73wA+aw5rPs84Uix9w -VbbwaVR6qP/BV09yJYS5kQ7fmwKBgQDe2xjywX2d2MC+qzRr+LfU+1+gq0jjhBCX -WHqRN6IECB0xTnXUf9WL/VCoI1/55BhdbbEja+4btYgcXSPmlXBIRKQ4VtFfVmYB -kPXeD8oZ7LyuNdCsbKNe+x1IHXDe6Wfs3L9ulCfXxeIE84wy3fd66mQahyXV9iD9 -CkuifMqUpQKBgQCiydHlY1LGJ/o9tA2Ewm5Na6mrvOs2V2Ox1NqbObwoYbX62eiF -53xX5u8bVl5U75JAm+79it/4bd5RtKux9dUETbLOhwcaOFm+hM+VG/IxyzRZ2nMD -1qcpY2U5BpxzknUvYF3RMTop6edxPk7zKpp9ubCtSu+oINvtxAhY/SkcIwKBgGP1 -upcImyO2GZ5shLL5eNubdSVILwV+M0LveOqyHYXZbd6z5r5OKKcGFKuWUnJwEU22 -6gGNY9wh7M9sJ7JBzX9c6pwqtPcidda2AtJ8GpbOTUOG9/afNBhiYpv6OKqD3w2r -ZmJfKg/qvpqh83zNezgy8nvDqwDxyZI2j/5uIx/RAoGBAMWRmxtv6H2cKhibI/aI -MTJM4QRjyPNxQqvAQsv+oHUbid06VK3JE+9iQyithjcfNOwnCaoO7I7qAj9QEfJS -MZQc/W/4DHJebo2kd11yoXPVTXXOuEwLSKCejBXABBY0MPNuPUmiXeU0O3Tyi37J -TUKzrgcd7NvlA41Y4xKcOqEA ------END PRIVATE KEY----- \ No newline at end of file diff --git a/vendor/lcobucci/jwt/test/functional/rsa/public.key b/vendor/lcobucci/jwt/test/functional/rsa/public.key deleted file mode 100644 index 99921791..00000000 --- a/vendor/lcobucci/jwt/test/functional/rsa/public.key +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA078BPOzLYERGC0y+Gh4U -KN2c6IJscbzFLCpz88sUbNWK1zkjqcDdJ6bF2qwSilSFDDS3xTg6f750J9madOjf -FxufVgDisLwuDH8Sw0JAPiV4IMx5ZG1aEzfnVJHWCBakirgDxsIlk6EStksRIYo9 -6xNhTjfI0Gbw8WZIj/WuL8STtzkz0MCq3nVxYjm7Fw/3N0bSxYSnLYwshziKz9G0 -BLHnv5uyTbRuK8ugT7rDesG/ryaOYngWD2t3NfWpDauqv52FoaZYZJCUrmjqy+cV -xBcyOU73L510eevBlXMSvGC3xZHcabFxreawG3odIf1OZCCxAKr/D/Txk2aYnCm6 -5wIDAQAB ------END PUBLIC KEY----- \ No newline at end of file diff --git a/vendor/lcobucci/jwt/test/unit/BuilderTest.php b/vendor/lcobucci/jwt/test/unit/BuilderTest.php deleted file mode 100644 index 30c43b66..00000000 --- a/vendor/lcobucci/jwt/test/unit/BuilderTest.php +++ /dev/null @@ -1,633 +0,0 @@ - - * @since 0.1.0 - */ -class BuilderTest extends \PHPUnit\Framework\TestCase -{ - /** - * @var Encoder|\PHPUnit_Framework_MockObject_MockObject - */ - protected $encoder; - - /** - * @var ClaimFactory|\PHPUnit_Framework_MockObject_MockObject - */ - protected $claimFactory; - - /** - * @var Claim|\PHPUnit_Framework_MockObject_MockObject - */ - protected $defaultClaim; - - /** - * {@inheritdoc} - */ - protected function setUp() - { - $this->encoder = $this->createMock(Encoder::class); - $this->claimFactory = $this->createMock(ClaimFactory::class); - $this->defaultClaim = $this->createMock(Claim::class); - - $this->claimFactory->expects($this->any()) - ->method('create') - ->willReturn($this->defaultClaim); - } - - /** - * @return Builder - */ - private function createBuilder() - { - return new Builder($this->encoder, $this->claimFactory); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Builder::__construct - */ - public function constructMustInitializeTheAttributes() - { - $builder = $this->createBuilder(); - - $this->assertAttributeEquals(['alg' => 'none', 'typ' => 'JWT'], 'headers', $builder); - $this->assertAttributeEquals([], 'claims', $builder); - $this->assertAttributeSame($this->encoder, 'encoder', $builder); - $this->assertAttributeSame($this->claimFactory, 'claimFactory', $builder); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::permittedFor - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function permittedForMustChangeTheAudClaim() - { - $builder = $this->createBuilder(); - $builder->permittedFor('test'); - - $this->assertAttributeEquals(['alg' => 'none', 'typ' => 'JWT'], 'headers', $builder); - $this->assertAttributeEquals(['aud' => $this->defaultClaim], 'claims', $builder); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::permittedFor - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function permittedForCanReplicateItemOnHeader() - { - $builder = $this->createBuilder(); - $builder->permittedFor('test', true); - - $this->assertAttributeEquals(['aud' => $this->defaultClaim], 'claims', $builder); - - $this->assertAttributeEquals( - ['alg' => 'none', 'typ' => 'JWT', 'aud' => $this->defaultClaim], - 'headers', - $builder - ); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::permittedFor - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function permittedForMustKeepAFluentInterface() - { - $builder = $this->createBuilder(); - - $this->assertSame($builder, $builder->permittedFor('test')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::expiresAt - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function expiresAtMustChangeTheExpClaim() - { - $builder = $this->createBuilder(); - $builder->expiresAt('2'); - - $this->assertAttributeEquals(['alg' => 'none', 'typ' => 'JWT'], 'headers', $builder); - $this->assertAttributeEquals(['exp' => $this->defaultClaim], 'claims', $builder); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::expiresAt - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function expiresAtCanReplicateItemOnHeader() - { - $builder = $this->createBuilder(); - $builder->expiresAt('2', true); - - $this->assertAttributeEquals(['exp' => $this->defaultClaim], 'claims', $builder); - - $this->assertAttributeEquals( - ['alg' => 'none', 'typ' => 'JWT', 'exp' => $this->defaultClaim], - 'headers', - $builder - ); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::expiresAt - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function expiresAtMustKeepAFluentInterface() - { - $builder = $this->createBuilder(); - - $this->assertSame($builder, $builder->expiresAt('2')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::identifiedBy - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function identifiedByMustChangeTheJtiClaim() - { - $builder = $this->createBuilder(); - $builder->identifiedBy('2'); - - $this->assertAttributeEquals(['alg' => 'none', 'typ' => 'JWT'], 'headers', $builder); - $this->assertAttributeEquals(['jti' => $this->defaultClaim], 'claims', $builder); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::identifiedBy - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function identifiedByCanReplicateItemOnHeader() - { - $builder = $this->createBuilder(); - $builder->identifiedBy('2', true); - - $this->assertAttributeEquals(['jti' => $this->defaultClaim], 'claims', $builder); - - $this->assertAttributeEquals( - ['alg' => 'none', 'typ' => 'JWT', 'jti' => $this->defaultClaim], - 'headers', - $builder - ); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::identifiedBy - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function identifiedByMustKeepAFluentInterface() - { - $builder = $this->createBuilder(); - - $this->assertSame($builder, $builder->identifiedBy('2')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::issuedAt - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function issuedAtMustChangeTheIatClaim() - { - $builder = $this->createBuilder(); - $builder->issuedAt('2'); - - $this->assertAttributeEquals(['alg' => 'none', 'typ' => 'JWT'], 'headers', $builder); - $this->assertAttributeEquals(['iat' => $this->defaultClaim], 'claims', $builder); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::issuedAt - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function issuedAtCanReplicateItemOnHeader() - { - $builder = $this->createBuilder(); - $builder->issuedAt('2', true); - - $this->assertAttributeEquals(['iat' => $this->defaultClaim], 'claims', $builder); - - $this->assertAttributeEquals( - ['alg' => 'none', 'typ' => 'JWT', 'iat' => $this->defaultClaim], - 'headers', - $builder - ); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::issuedAt - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function issuedAtMustKeepAFluentInterface() - { - $builder = $this->createBuilder(); - - $this->assertSame($builder, $builder->issuedAt('2')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::issuedBy - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function issuedByMustChangeTheIssClaim() - { - $builder = $this->createBuilder(); - $builder->issuedBy('2'); - - $this->assertAttributeEquals(['alg' => 'none', 'typ' => 'JWT'], 'headers', $builder); - $this->assertAttributeEquals(['iss' => $this->defaultClaim], 'claims', $builder); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::issuedBy - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function issuedByCanReplicateItemOnHeader() - { - $builder = $this->createBuilder(); - $builder->issuedBy('2', true); - - $this->assertAttributeEquals(['iss' => $this->defaultClaim], 'claims', $builder); - - $this->assertAttributeEquals( - ['alg' => 'none', 'typ' => 'JWT', 'iss' => $this->defaultClaim], - 'headers', - $builder - ); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::issuedBy - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function issuedByMustKeepAFluentInterface() - { - $builder = $this->createBuilder(); - - $this->assertSame($builder, $builder->issuedBy('2')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::canOnlyBeUsedAfter - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function canOnlyBeUsedAfterMustChangeTheNbfClaim() - { - $builder = $this->createBuilder(); - $builder->canOnlyBeUsedAfter('2'); - - $this->assertAttributeEquals(['alg' => 'none', 'typ' => 'JWT'], 'headers', $builder); - $this->assertAttributeEquals(['nbf' => $this->defaultClaim], 'claims', $builder); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::canOnlyBeUsedAfter - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function canOnlyBeUsedAfterCanReplicateItemOnHeader() - { - $builder = $this->createBuilder(); - $builder->canOnlyBeUsedAfter('2', true); - - $this->assertAttributeEquals(['nbf' => $this->defaultClaim], 'claims', $builder); - - $this->assertAttributeEquals( - ['alg' => 'none', 'typ' => 'JWT', 'nbf' => $this->defaultClaim], - 'headers', - $builder - ); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::canOnlyBeUsedAfter - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function canOnlyBeUsedAfterMustKeepAFluentInterface() - { - $builder = $this->createBuilder(); - - $this->assertSame($builder, $builder->canOnlyBeUsedAfter('2')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::relatedTo - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function relatedToMustChangeTheSubClaim() - { - $builder = $this->createBuilder(); - $builder->relatedTo('2'); - - $this->assertAttributeEquals(['alg' => 'none', 'typ' => 'JWT'], 'headers', $builder); - $this->assertAttributeEquals(['sub' => $this->defaultClaim], 'claims', $builder); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::relatedTo - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function relatedToCanReplicateItemOnHeader() - { - $builder = $this->createBuilder(); - $builder->relatedTo('2', true); - - $this->assertAttributeEquals(['sub' => $this->defaultClaim], 'claims', $builder); - - $this->assertAttributeEquals( - ['alg' => 'none', 'typ' => 'JWT', 'sub' => $this->defaultClaim], - 'headers', - $builder - ); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * - * @covers Lcobucci\JWT\Builder::relatedTo - * @covers Lcobucci\JWT\Builder::setRegisteredClaim - */ - public function relatedToMustKeepAFluentInterface() - { - $builder = $this->createBuilder(); - - $this->assertSame($builder, $builder->relatedTo('2')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * - * @covers Lcobucci\JWT\Builder::withClaim - */ - public function withClaimMustConfigureTheGivenClaim() - { - $builder = $this->createBuilder(); - $builder->withClaim('userId', 2); - - $this->assertAttributeEquals(['userId' => $this->defaultClaim], 'claims', $builder); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * - * @covers Lcobucci\JWT\Builder::withClaim - */ - public function withClaimMustKeepAFluentInterface() - { - $builder = $this->createBuilder(); - - $this->assertSame($builder, $builder->withClaim('userId', 2)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * - * @covers Lcobucci\JWT\Builder::withHeader - */ - public function withHeaderMustConfigureTheGivenClaim() - { - $builder = $this->createBuilder(); - $builder->withHeader('userId', 2); - - $this->assertAttributeEquals( - ['alg' => 'none', 'typ' => 'JWT', 'userId' => $this->defaultClaim], - 'headers', - $builder - ); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * - * @covers Lcobucci\JWT\Builder::withHeader - */ - public function withHeaderMustKeepAFluentInterface() - { - $builder = $this->createBuilder(); - - $this->assertSame($builder, $builder->withHeader('userId', 2)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::getToken - * @uses Lcobucci\JWT\Token - * - * @covers Lcobucci\JWT\Builder::sign - */ - public function signMustConfigureSignerAndKey() - { - $signer = $this->createMock(Signer::class); - - $builder = $this->createBuilder(); - $builder->sign($signer, 'test'); - - $this->assertAttributeSame($signer, 'signer', $builder); - $this->assertAttributeEquals(new Key('test'), 'key', $builder); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::getToken - * @uses Lcobucci\JWT\Token - * - * @covers Lcobucci\JWT\Builder::sign - */ - public function signMustKeepAFluentInterface() - { - $signer = $this->createMock(Signer::class); - $builder = $this->createBuilder(); - - $this->assertSame($builder, $builder->sign($signer, 'test')); - - return $builder; - } - - /** - * @test - * - * @depends signMustKeepAFluentInterface - * - * @covers Lcobucci\JWT\Builder::unsign - */ - public function unsignMustRemoveTheSignerAndKey(Builder $builder) - { - $builder->unsign(); - - $this->assertAttributeSame(null, 'signer', $builder); - $this->assertAttributeSame(null, 'key', $builder); - } - - /** - * @test - * - * @depends signMustKeepAFluentInterface - * - * @covers Lcobucci\JWT\Builder::unsign - */ - public function unsignMustKeepAFluentInterface(Builder $builder) - { - $this->assertSame($builder, $builder->unsign()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Builder::__construct - * @uses Lcobucci\JWT\Builder::withClaim - * @uses Lcobucci\JWT\Token - * - * @covers Lcobucci\JWT\Builder::getToken - */ - public function getTokenMustReturnANewTokenWithCurrentConfiguration() - { - $signer = $this->createMock(Signer::class); - $signature = $this->createMock(Signature::class); - - $signer->method('sign')->willReturn($signature); - - $this->encoder->expects($this->exactly(2)) - ->method('jsonEncode') - ->withConsecutive([['typ'=> 'JWT', 'alg' => 'none']], [['test' => $this->defaultClaim]]) - ->willReturnOnConsecutiveCalls('1', '2'); - - $this->encoder->expects($this->exactly(3)) - ->method('base64UrlEncode') - ->withConsecutive(['1'], ['2'], [$signature]) - ->willReturnOnConsecutiveCalls('1', '2', '3'); - - $builder = $this->createBuilder()->withClaim('test', 123); - $token = $builder->getToken($signer, new Key('testing')); - - $this->assertAttributeEquals(['1', '2', '3'], 'payload', $token); - $this->assertAttributeEquals($token->getHeaders(), 'headers', $builder); - $this->assertAttributeEquals($token->getClaims(), 'claims', $builder); - $this->assertAttributeSame($signature, 'signature', $token); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Claim/BasicTest.php b/vendor/lcobucci/jwt/test/unit/Claim/BasicTest.php deleted file mode 100644 index 3a0d928b..00000000 --- a/vendor/lcobucci/jwt/test/unit/Claim/BasicTest.php +++ /dev/null @@ -1,84 +0,0 @@ - - * @since 2.0.0 - */ -class BasicTest extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @covers Lcobucci\JWT\Claim\Basic::__construct - */ - public function constructorShouldConfigureTheAttributes() - { - $claim = new Basic('test', 1); - - $this->assertAttributeEquals('test', 'name', $claim); - $this->assertAttributeEquals(1, 'value', $claim); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * - * @covers Lcobucci\JWT\Claim\Basic::getName - */ - public function getNameShouldReturnTheClaimName() - { - $claim = new Basic('test', 1); - - $this->assertEquals('test', $claim->getName()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * - * @covers Lcobucci\JWT\Claim\Basic::getValue - */ - public function getValueShouldReturnTheClaimValue() - { - $claim = new Basic('test', 1); - - $this->assertEquals(1, $claim->getValue()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * - * @covers Lcobucci\JWT\Claim\Basic::jsonSerialize - */ - public function jsonSerializeShouldReturnTheClaimValue() - { - $claim = new Basic('test', 1); - - $this->assertEquals(1, $claim->jsonSerialize()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * - * @covers Lcobucci\JWT\Claim\Basic::__toString - */ - public function toStringShouldReturnTheClaimValue() - { - $claim = new Basic('test', 1); - - $this->assertEquals('1', (string) $claim); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Claim/EqualsToTest.php b/vendor/lcobucci/jwt/test/unit/Claim/EqualsToTest.php deleted file mode 100644 index aef76a9d..00000000 --- a/vendor/lcobucci/jwt/test/unit/Claim/EqualsToTest.php +++ /dev/null @@ -1,83 +0,0 @@ - - * @since 2.0.0 - */ -class EqualsToTest extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * @uses Lcobucci\JWT\Claim\Basic::getName - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::has - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\Claim\EqualsTo::validate - */ - public function validateShouldReturnTrueWhenValidationDontHaveTheClaim() - { - $claim = new EqualsTo('iss', 'test'); - - $this->assertTrue($claim->validate(new ValidationData())); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * @uses Lcobucci\JWT\Claim\Basic::getName - * @uses Lcobucci\JWT\Claim\Basic::getValue - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setIssuer - * @uses Lcobucci\JWT\ValidationData::has - * @uses Lcobucci\JWT\ValidationData::get - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\Claim\EqualsTo::validate - */ - public function validateShouldReturnTrueWhenValueIsEqualsToValidationData() - { - $claim = new EqualsTo('iss', 'test'); - - $data = new ValidationData(); - $data->setIssuer('test'); - - $this->assertTrue($claim->validate($data)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * @uses Lcobucci\JWT\Claim\Basic::getName - * @uses Lcobucci\JWT\Claim\Basic::getValue - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setIssuer - * @uses Lcobucci\JWT\ValidationData::has - * @uses Lcobucci\JWT\ValidationData::get - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\Claim\EqualsTo::validate - */ - public function validateShouldReturnFalseWhenValueIsNotEqualsToValidationData() - { - $claim = new EqualsTo('iss', 'test'); - - $data = new ValidationData(); - $data->setIssuer('test1'); - - $this->assertFalse($claim->validate($data)); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Claim/FactoryTest.php b/vendor/lcobucci/jwt/test/unit/Claim/FactoryTest.php deleted file mode 100644 index 7569257d..00000000 --- a/vendor/lcobucci/jwt/test/unit/Claim/FactoryTest.php +++ /dev/null @@ -1,168 +0,0 @@ - - * @since 2.0.0 - */ -class FactoryTest extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @covers Lcobucci\JWT\Claim\Factory::__construct - */ - public function constructMustConfigureTheCallbacks() - { - $callback = function () { - }; - $factory = new Factory(['test' => $callback]); - - $expected = [ - 'iat' => [$factory, 'createLesserOrEqualsTo'], - 'nbf' => [$factory, 'createLesserOrEqualsTo'], - 'exp' => [$factory, 'createGreaterOrEqualsTo'], - 'iss' => [$factory, 'createEqualsTo'], - 'aud' => [$factory, 'createEqualsTo'], - 'sub' => [$factory, 'createEqualsTo'], - 'jti' => [$factory, 'createEqualsTo'], - 'test' => $callback - ]; - - $this->assertAttributeEquals($expected, 'callbacks', $factory); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Factory::__construct - * @uses Lcobucci\JWT\Claim\Basic::__construct - * - * @covers Lcobucci\JWT\Claim\Factory::create - * @covers Lcobucci\JWT\Claim\Factory::createLesserOrEqualsTo - */ - public function createShouldReturnALesserOrEqualsToClaimForIssuedAt() - { - $claim = new Factory(); - - $this->assertInstanceOf(LesserOrEqualsTo::class, $claim->create('iat', 1)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Factory::__construct - * @uses Lcobucci\JWT\Claim\Basic::__construct - * - * @covers Lcobucci\JWT\Claim\Factory::create - * @covers Lcobucci\JWT\Claim\Factory::createLesserOrEqualsTo - */ - public function createShouldReturnALesserOrEqualsToClaimForNotBefore() - { - $claim = new Factory(); - - $this->assertInstanceOf(LesserOrEqualsTo::class, $claim->create('nbf', 1)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Factory::__construct - * @uses Lcobucci\JWT\Claim\Basic::__construct - * - * @covers Lcobucci\JWT\Claim\Factory::create - * @covers Lcobucci\JWT\Claim\Factory::createGreaterOrEqualsTo - */ - public function createShouldReturnAGreaterOrEqualsToClaimForExpiration() - { - $claim = new Factory(); - - $this->assertInstanceOf(GreaterOrEqualsTo::class, $claim->create('exp', 1)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Factory::__construct - * @uses Lcobucci\JWT\Claim\Basic::__construct - * - * @covers Lcobucci\JWT\Claim\Factory::create - * @covers Lcobucci\JWT\Claim\Factory::createEqualsTo - */ - public function createShouldReturnAnEqualsToClaimForId() - { - $claim = new Factory(); - - $this->assertInstanceOf(EqualsTo::class, $claim->create('jti', 1)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Factory::__construct - * @uses Lcobucci\JWT\Claim\Basic::__construct - * - * @covers Lcobucci\JWT\Claim\Factory::create - * @covers Lcobucci\JWT\Claim\Factory::createEqualsTo - */ - public function createShouldReturnAnEqualsToClaimForIssuer() - { - $claim = new Factory(); - - $this->assertInstanceOf(EqualsTo::class, $claim->create('iss', 1)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Factory::__construct - * @uses Lcobucci\JWT\Claim\Basic::__construct - * - * @covers Lcobucci\JWT\Claim\Factory::create - * @covers Lcobucci\JWT\Claim\Factory::createEqualsTo - */ - public function createShouldReturnAnEqualsToClaimForAudience() - { - $claim = new Factory(); - - $this->assertInstanceOf(EqualsTo::class, $claim->create('aud', 1)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Factory::__construct - * @uses Lcobucci\JWT\Claim\Basic::__construct - * - * @covers Lcobucci\JWT\Claim\Factory::create - * @covers Lcobucci\JWT\Claim\Factory::createEqualsTo - */ - public function createShouldReturnAnEqualsToClaimForSubject() - { - $claim = new Factory(); - - $this->assertInstanceOf(EqualsTo::class, $claim->create('sub', 1)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Factory::__construct - * @uses Lcobucci\JWT\Claim\Basic::__construct - * - * @covers Lcobucci\JWT\Claim\Factory::create - * @covers Lcobucci\JWT\Claim\Factory::createBasic - */ - public function createShouldReturnABasiclaimForOtherClaims() - { - $claim = new Factory(); - - $this->assertInstanceOf(Basic::class, $claim->create('test', 1)); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Claim/GreaterOrEqualsToTest.php b/vendor/lcobucci/jwt/test/unit/Claim/GreaterOrEqualsToTest.php deleted file mode 100644 index 38abc758..00000000 --- a/vendor/lcobucci/jwt/test/unit/Claim/GreaterOrEqualsToTest.php +++ /dev/null @@ -1,107 +0,0 @@ - - * @since 2.0.0 - */ -class GreaterOrEqualsToTest extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * @uses Lcobucci\JWT\Claim\Basic::getName - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::has - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\Claim\GreaterOrEqualsTo::validate - */ - public function validateShouldReturnTrueWhenValidationDontHaveTheClaim() - { - $claim = new GreaterOrEqualsTo('iss', 10); - - $this->assertTrue($claim->validate(new ValidationData())); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * @uses Lcobucci\JWT\Claim\Basic::getName - * @uses Lcobucci\JWT\Claim\Basic::getValue - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setIssuer - * @uses Lcobucci\JWT\ValidationData::has - * @uses Lcobucci\JWT\ValidationData::get - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\Claim\GreaterOrEqualsTo::validate - */ - public function validateShouldReturnTrueWhenValueIsGreaterThanValidationData() - { - $claim = new GreaterOrEqualsTo('iss', 11); - - $data = new ValidationData(); - $data->setIssuer(10); - - $this->assertTrue($claim->validate($data)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * @uses Lcobucci\JWT\Claim\Basic::getName - * @uses Lcobucci\JWT\Claim\Basic::getValue - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setIssuer - * @uses Lcobucci\JWT\ValidationData::has - * @uses Lcobucci\JWT\ValidationData::get - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\Claim\GreaterOrEqualsTo::validate - */ - public function validateShouldReturnTrueWhenValueIsEqualsToValidationData() - { - $claim = new GreaterOrEqualsTo('iss', 10); - - $data = new ValidationData(); - $data->setIssuer(10); - - $this->assertTrue($claim->validate($data)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * @uses Lcobucci\JWT\Claim\Basic::getName - * @uses Lcobucci\JWT\Claim\Basic::getValue - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setIssuer - * @uses Lcobucci\JWT\ValidationData::has - * @uses Lcobucci\JWT\ValidationData::get - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\Claim\GreaterOrEqualsTo::validate - */ - public function validateShouldReturnFalseWhenValueIsLesserThanValidationData() - { - $claim = new GreaterOrEqualsTo('iss', 10); - - $data = new ValidationData(); - $data->setIssuer(11); - - $this->assertFalse($claim->validate($data)); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Claim/LesserOrEqualsToTest.php b/vendor/lcobucci/jwt/test/unit/Claim/LesserOrEqualsToTest.php deleted file mode 100644 index edb32d9b..00000000 --- a/vendor/lcobucci/jwt/test/unit/Claim/LesserOrEqualsToTest.php +++ /dev/null @@ -1,107 +0,0 @@ - - * @since 2.0.0 - */ -class LesserOrEqualsToTest extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * @uses Lcobucci\JWT\Claim\Basic::getName - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::has - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\Claim\LesserOrEqualsTo::validate - */ - public function validateShouldReturnTrueWhenValidationDontHaveTheClaim() - { - $claim = new LesserOrEqualsTo('iss', 10); - - $this->assertTrue($claim->validate(new ValidationData())); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * @uses Lcobucci\JWT\Claim\Basic::getName - * @uses Lcobucci\JWT\Claim\Basic::getValue - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setIssuer - * @uses Lcobucci\JWT\ValidationData::has - * @uses Lcobucci\JWT\ValidationData::get - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\Claim\LesserOrEqualsTo::validate - */ - public function validateShouldReturnTrueWhenValueIsLesserThanValidationData() - { - $claim = new LesserOrEqualsTo('iss', 10); - - $data = new ValidationData(); - $data->setIssuer(11); - - $this->assertTrue($claim->validate($data)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * @uses Lcobucci\JWT\Claim\Basic::getName - * @uses Lcobucci\JWT\Claim\Basic::getValue - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setIssuer - * @uses Lcobucci\JWT\ValidationData::has - * @uses Lcobucci\JWT\ValidationData::get - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\Claim\LesserOrEqualsTo::validate - */ - public function validateShouldReturnTrueWhenValueIsEqualsToValidationData() - { - $claim = new LesserOrEqualsTo('iss', 10); - - $data = new ValidationData(); - $data->setIssuer(10); - - $this->assertTrue($claim->validate($data)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Claim\Basic::__construct - * @uses Lcobucci\JWT\Claim\Basic::getName - * @uses Lcobucci\JWT\Claim\Basic::getValue - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setIssuer - * @uses Lcobucci\JWT\ValidationData::has - * @uses Lcobucci\JWT\ValidationData::get - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\Claim\LesserOrEqualsTo::validate - */ - public function validateShouldReturnFalseWhenValueIsGreaterThanValidationData() - { - $claim = new LesserOrEqualsTo('iss', 11); - - $data = new ValidationData(); - $data->setIssuer(10); - - $this->assertFalse($claim->validate($data)); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/ParserTest.php b/vendor/lcobucci/jwt/test/unit/ParserTest.php deleted file mode 100644 index 664a7313..00000000 --- a/vendor/lcobucci/jwt/test/unit/ParserTest.php +++ /dev/null @@ -1,244 +0,0 @@ - - * @since 0.1.0 - */ -class ParserTest extends \PHPUnit\Framework\TestCase -{ - /** - * @var Decoder|\PHPUnit_Framework_MockObject_MockObject - */ - protected $decoder; - - /** - * @var ClaimFactory|\PHPUnit_Framework_MockObject_MockObject - */ - protected $claimFactory; - - /** - * @var Claim|\PHPUnit_Framework_MockObject_MockObject - */ - protected $defaultClaim; - - /** - * {@inheritdoc} - */ - protected function setUp() - { - $this->decoder = $this->createMock(Decoder::class); - $this->claimFactory = $this->createMock(ClaimFactory::class, [], [], '', false); - $this->defaultClaim = $this->createMock(Claim::class); - - $this->claimFactory->expects($this->any()) - ->method('create') - ->willReturn($this->defaultClaim); - } - - /** - * @return Parser - */ - private function createParser() - { - return new Parser($this->decoder, $this->claimFactory); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Parser::__construct - */ - public function constructMustConfigureTheAttributes() - { - $parser = $this->createParser(); - - $this->assertAttributeSame($this->decoder, 'decoder', $parser); - $this->assertAttributeSame($this->claimFactory, 'claimFactory', $parser); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Parser::__construct - * - * @covers Lcobucci\JWT\Parser::parse - * @covers Lcobucci\JWT\Parser::splitJwt - * - * @expectedException InvalidArgumentException - */ - public function parseMustRaiseExceptionWhenJWSIsNotAString() - { - $parser = $this->createParser(); - $parser->parse(['asdasd']); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Parser::__construct - * - * @covers Lcobucci\JWT\Parser::parse - * @covers Lcobucci\JWT\Parser::splitJwt - * - * @expectedException InvalidArgumentException - */ - public function parseMustRaiseExceptionWhenJWSDontHaveThreeParts() - { - $parser = $this->createParser(); - $parser->parse(''); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Parser::__construct - * - * @covers Lcobucci\JWT\Parser::parse - * @covers Lcobucci\JWT\Parser::splitJwt - * @covers Lcobucci\JWT\Parser::parseHeader - * - * @expectedException RuntimeException - */ - public function parseMustRaiseExceptionWhenHeaderCannotBeDecoded() - { - $this->decoder->expects($this->any()) - ->method('jsonDecode') - ->willThrowException(new RuntimeException()); - - $parser = $this->createParser(); - $parser->parse('asdfad.asdfasdf.'); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Parser::__construct - * - * @covers Lcobucci\JWT\Parser::parse - * @covers Lcobucci\JWT\Parser::splitJwt - * @covers Lcobucci\JWT\Parser::parseHeader - * - * @expectedException InvalidArgumentException - */ - public function parseMustRaiseExceptionWhenHeaderIsFromAnEncryptedToken() - { - $this->decoder->expects($this->any()) - ->method('jsonDecode') - ->willReturn(['enc' => 'AAA']); - - $parser = $this->createParser(); - $parser->parse('a.a.'); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Parser::__construct - * @uses Lcobucci\JWT\Token::__construct - * - * @covers Lcobucci\JWT\Parser::parse - * @covers Lcobucci\JWT\Parser::splitJwt - * @covers Lcobucci\JWT\Parser::parseHeader - * @covers Lcobucci\JWT\Parser::parseClaims - * @covers Lcobucci\JWT\Parser::parseSignature - * - */ - public function parseMustReturnANonSignedTokenWhenSignatureIsNotInformed() - { - $this->decoder->expects($this->at(1)) - ->method('jsonDecode') - ->willReturn(['typ' => 'JWT', 'alg' => 'none']); - - $this->decoder->expects($this->at(3)) - ->method('jsonDecode') - ->willReturn(['aud' => 'test']); - - $parser = $this->createParser(); - $token = $parser->parse('a.a.'); - - $this->assertAttributeEquals(['typ' => 'JWT', 'alg' => 'none'], 'headers', $token); - $this->assertAttributeEquals(['aud' => $this->defaultClaim], 'claims', $token); - $this->assertAttributeEquals(null, 'signature', $token); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Parser::__construct - * @uses Lcobucci\JWT\Token::__construct - * - * @covers Lcobucci\JWT\Parser::parse - * @covers Lcobucci\JWT\Parser::splitJwt - * @covers Lcobucci\JWT\Parser::parseHeader - * @covers Lcobucci\JWT\Parser::parseClaims - * @covers Lcobucci\JWT\Parser::parseSignature - */ - public function parseShouldReplicateClaimValueOnHeaderWhenNeeded() - { - $this->decoder->expects($this->at(1)) - ->method('jsonDecode') - ->willReturn(['typ' => 'JWT', 'alg' => 'none', 'aud' => 'test']); - - $this->decoder->expects($this->at(3)) - ->method('jsonDecode') - ->willReturn(['aud' => 'test']); - - $parser = $this->createParser(); - $token = $parser->parse('a.a.'); - - $this->assertAttributeEquals( - ['typ' => 'JWT', 'alg' => 'none', 'aud' => $this->defaultClaim], - 'headers', - $token - ); - - $this->assertAttributeEquals(['aud' => $this->defaultClaim], 'claims', $token); - $this->assertAttributeEquals(null, 'signature', $token); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Parser::__construct - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Signature::__construct - * - * @covers Lcobucci\JWT\Parser::parse - * @covers Lcobucci\JWT\Parser::splitJwt - * @covers Lcobucci\JWT\Parser::parseHeader - * @covers Lcobucci\JWT\Parser::parseClaims - * @covers Lcobucci\JWT\Parser::parseSignature - */ - public function parseMustReturnASignedTokenWhenSignatureIsInformed() - { - $this->decoder->expects($this->at(1)) - ->method('jsonDecode') - ->willReturn(['typ' => 'JWT', 'alg' => 'HS256']); - - $this->decoder->expects($this->at(3)) - ->method('jsonDecode') - ->willReturn(['aud' => 'test']); - - $this->decoder->expects($this->at(4)) - ->method('base64UrlDecode') - ->willReturn('aaa'); - - $parser = $this->createParser(); - $token = $parser->parse('a.a.a'); - - $this->assertAttributeEquals(['typ' => 'JWT', 'alg' => 'HS256'], 'headers', $token); - $this->assertAttributeEquals(['aud' => $this->defaultClaim], 'claims', $token); - $this->assertAttributeEquals(new Signature('aaa'), 'signature', $token); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Parsing/DecoderTest.php b/vendor/lcobucci/jwt/test/unit/Parsing/DecoderTest.php deleted file mode 100644 index 04b8d5d5..00000000 --- a/vendor/lcobucci/jwt/test/unit/Parsing/DecoderTest.php +++ /dev/null @@ -1,56 +0,0 @@ - - * @since 0.1.0 - */ -class DecoderTest extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @covers Lcobucci\JWT\Parsing\Decoder::jsonDecode - */ - public function jsonDecodeMustReturnTheDecodedData() - { - $decoder = new Decoder(); - - $this->assertEquals( - (object) ['test' => 'test'], - $decoder->jsonDecode('{"test":"test"}') - ); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Parsing\Decoder::jsonDecode - * - * @expectedException \RuntimeException - */ - public function jsonDecodeMustRaiseExceptionWhenAnErrorHasOccured() - { - $decoder = new Decoder(); - $decoder->jsonDecode('{"test":\'test\'}'); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Parsing\Decoder::base64UrlDecode - */ - public function base64UrlDecodeMustReturnTheRightData() - { - $data = base64_decode('0MB2wKB+L3yvIdzeggmJ+5WOSLaRLTUPXbpzqUe0yuo='); - - $decoder = new Decoder(); - $this->assertEquals($data, $decoder->base64UrlDecode('0MB2wKB-L3yvIdzeggmJ-5WOSLaRLTUPXbpzqUe0yuo')); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Parsing/EncoderTest.php b/vendor/lcobucci/jwt/test/unit/Parsing/EncoderTest.php deleted file mode 100644 index 4aed3184..00000000 --- a/vendor/lcobucci/jwt/test/unit/Parsing/EncoderTest.php +++ /dev/null @@ -1,53 +0,0 @@ - - * @since 0.1.0 - */ -class EncoderTest extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @covers Lcobucci\JWT\Parsing\Encoder::jsonEncode - */ - public function jsonEncodeMustReturnAJSONString() - { - $encoder = new Encoder(); - - $this->assertEquals('{"test":"test"}', $encoder->jsonEncode(['test' => 'test'])); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Parsing\Encoder::jsonEncode - * - * @expectedException \RuntimeException - */ - public function jsonEncodeMustRaiseExceptionWhenAnErrorHasOccured() - { - $encoder = new Encoder(); - $encoder->jsonEncode("\xB1\x31"); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Parsing\Encoder::base64UrlEncode - */ - public function base64UrlEncodeMustReturnAnUrlSafeBase64() - { - $data = base64_decode('0MB2wKB+L3yvIdzeggmJ+5WOSLaRLTUPXbpzqUe0yuo='); - - $encoder = new Encoder(); - $this->assertEquals('0MB2wKB-L3yvIdzeggmJ-5WOSLaRLTUPXbpzqUe0yuo', $encoder->base64UrlEncode($data)); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/SignatureTest.php b/vendor/lcobucci/jwt/test/unit/SignatureTest.php deleted file mode 100644 index 7a87e9de..00000000 --- a/vendor/lcobucci/jwt/test/unit/SignatureTest.php +++ /dev/null @@ -1,73 +0,0 @@ - - * @since 0.1.0 - */ -class SignatureTest extends \PHPUnit\Framework\TestCase -{ - /** - * @var Signer|\PHPUnit_Framework_MockObject_MockObject - */ - protected $signer; - - /** - * {@inheritdoc} - */ - protected function setUp() - { - $this->signer = $this->createMock(Signer::class); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Signature::__construct - */ - public function constructorMustConfigureAttributes() - { - $signature = new Signature('test'); - - $this->assertAttributeEquals('test', 'hash', $signature); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signature::__construct - * - * @covers Lcobucci\JWT\Signature::__toString - */ - public function toStringMustReturnTheHash() - { - $signature = new Signature('test'); - - $this->assertEquals('test', (string) $signature); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signature::__construct - * @uses Lcobucci\JWT\Signature::__toString - * - * @covers Lcobucci\JWT\Signature::verify - */ - public function verifyMustReturnWhatSignerSays() - { - $this->signer->expects($this->any()) - ->method('verify') - ->willReturn(true); - - $signature = new Signature('test'); - - $this->assertTrue($signature->verify($this->signer, 'one', 'key')); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/BaseSignerTest.php b/vendor/lcobucci/jwt/test/unit/Signer/BaseSignerTest.php deleted file mode 100644 index 799c9d03..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/BaseSignerTest.php +++ /dev/null @@ -1,128 +0,0 @@ - - * @since 0.1.0 - */ -class BaseSignerTest extends \PHPUnit\Framework\TestCase -{ - /** - * @var BaseSigner|\PHPUnit_Framework_MockObject_MockObject - */ - protected $signer; - - /** - * {@inheritdoc} - */ - protected function setUp() - { - $this->signer = $this->getMockForAbstractClass(BaseSigner::class); - - $this->signer->method('getAlgorithmId') - ->willReturn('TEST123'); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Signer\BaseSigner::modifyHeader - */ - public function modifyHeaderShouldChangeAlgorithm() - { - $headers = ['typ' => 'JWT']; - - $this->signer->modifyHeader($headers); - - $this->assertEquals($headers['typ'], 'JWT'); - $this->assertEquals($headers['alg'], 'TEST123'); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signature::__construct - * @uses Lcobucci\JWT\Signer\Key - * - * @covers Lcobucci\JWT\Signer\BaseSigner::sign - * @covers Lcobucci\JWT\Signer\BaseSigner::getKey - */ - public function signMustReturnANewSignature() - { - $key = new Key('123'); - - $this->signer->expects($this->once()) - ->method('createHash') - ->with('test', $key) - ->willReturn('test'); - - $this->assertEquals(new Signature('test'), $this->signer->sign('test', $key)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signature::__construct - * @uses Lcobucci\JWT\Signer\Key - * - * @covers Lcobucci\JWT\Signer\BaseSigner::sign - * @covers Lcobucci\JWT\Signer\BaseSigner::getKey - */ - public function signShouldConvertKeyWhenItsNotAnObject() - { - $this->signer->expects($this->once()) - ->method('createHash') - ->with('test', new Key('123')) - ->willReturn('test'); - - $this->assertEquals(new Signature('test'), $this->signer->sign('test', '123')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signature::__construct - * @uses Lcobucci\JWT\Signer\Key - * - * @covers Lcobucci\JWT\Signer\BaseSigner::verify - * @covers Lcobucci\JWT\Signer\BaseSigner::getKey - */ - public function verifyShouldDelegateTheCallToAbstractMethod() - { - $key = new Key('123'); - - $this->signer->expects($this->once()) - ->method('doVerify') - ->with('test', 'test', $key) - ->willReturn(true); - - $this->assertTrue($this->signer->verify('test', 'test', $key)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signature::__construct - * @uses Lcobucci\JWT\Signer\Key - * - * @covers Lcobucci\JWT\Signer\BaseSigner::verify - * @covers Lcobucci\JWT\Signer\BaseSigner::getKey - */ - public function verifyShouldConvertKeyWhenItsNotAnObject() - { - $this->signer->expects($this->once()) - ->method('doVerify') - ->with('test', 'test', new Key('123')) - ->willReturn(true); - - $this->assertTrue($this->signer->verify('test', 'test', '123')); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/Ecdsa/MultibyteStringConverterTest.php b/vendor/lcobucci/jwt/test/unit/Signer/Ecdsa/MultibyteStringConverterTest.php deleted file mode 100644 index f18e8bc2..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/Ecdsa/MultibyteStringConverterTest.php +++ /dev/null @@ -1,127 +0,0 @@ -toAsn1($message, strlen($r)))); - } - - /** - * @test - * - * @covers ::toAsn1 - * @covers ::octetLength - */ - public function toAsn1ShouldRaiseExceptionWhenPointsDoNotHaveCorrectLength() - { - $converter = new MultibyteStringConverter(); - - self::expectException(InvalidArgumentException::class); - $converter->toAsn1('a very wrong string', 64); - } - - /** - * @test - * @dataProvider pointsConversionData - * - * @covers ::fromAsn1 - * @covers ::readAsn1Content - * @covers ::readAsn1Integer - * @covers ::retrievePositiveInteger - */ - public function fromAsn1ShouldReturnTheConcatenatedPoints($r, $s, $asn1) - { - $converter = new MultibyteStringConverter(); - $message = hex2bin($asn1); - - self::assertSame($r . $s, bin2hex($converter->fromAsn1($message, strlen($r)))); - } - - /** - * @return string[][] - */ - public function pointsConversionData() - { - return [ - [ - 'efd48b2aacb6a8fd1140dd9cd45e81d69d2c877b56aaf991c34d0ea84eaf3716', - 'f7cb1c942d657c41d436c7a1b6e29f65f3e900dbb9aff4064dc4ab2f843acda8', - '3046022100efd48b2aacb6a8fd1140dd9cd45e81d69d2c877b56aaf991c34d0ea84eaf3716022100f7cb1c942d657c41d436c7' - . 'a1b6e29f65f3e900dbb9aff4064dc4ab2f843acda8', - ], - [ - '94edbb92a5ecb8aad4736e56c691916b3f88140666ce9fa73d64c4ea95ad133c81a648152e44acf96e36dd1e80fabe46', - '99ef4aeb15f178cea1fe40db2603138f130e740a19624526203b6351d0a3a94fa329c145786e679e7b82c71a38628ac8', - '306602310094edbb92a5ecb8aad4736e56c691916b3f88140666ce9fa73d64c4ea95ad133c81a648152e44acf96e36dd1e80fa' - . 'be4602310099ef4aeb15f178cea1fe40db2603138f130e740a19624526203b6351d0a3a94fa329c145786e679e7b82c71a38' - . '628ac8', - ], - [ - '00c328fafcbd79dd77850370c46325d987cb525569fb63c5d3bc53950e6d4c5f174e25a1ee9017b5d450606add152b534931d7' - . 'd4e8455cc91f9b15bf05ec36e377fa', - '00617cce7cf5064806c467f678d3b4080d6f1cc50af26ca209417308281b68af282623eaa63e5b5c0723d8b8c37ff0777b1a20' - . 'f8ccb1dccc43997f1ee0e44da4a67a', - '308187024200c328fafcbd79dd77850370c46325d987cb525569fb63c5d3bc53950e6d4c5f174e25a1ee9017b5d450606add15' - . '2b534931d7d4e8455cc91f9b15bf05ec36e377fa0241617cce7cf5064806c467f678d3b4080d6f1cc50af26ca20941730828' - . '1b68af282623eaa63e5b5c0723d8b8c37ff0777b1a20f8ccb1dccc43997f1ee0e44da4a67a', - ], - ]; - } - - /** - * @test - * @dataProvider invalidAsn1Structures - * - * @covers ::fromAsn1 - * @covers ::readAsn1Content - * @covers ::readAsn1Integer - * @covers ::retrievePositiveInteger - */ - public function fromAsn1ShouldRaiseExceptionOnInvalidMessage($message) - { - $converter = new MultibyteStringConverter(); - $message = hex2bin($message); - - $this->expectException(InvalidArgumentException::class); - $converter->fromAsn1($message, 64); - } - - /** - * @return string[][] - */ - public function invalidAsn1Structures() - { - return [ - 'Not a sequence' => [''], - 'Sequence without length' => ['30'], - 'Only one string element' => ['3006030204f0'], - 'Only one integer element' => ['3004020101'], - 'Integer+string elements' => ['300a020101030204f0'], - ]; - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/Ecdsa/Sha256Test.php b/vendor/lcobucci/jwt/test/unit/Signer/Ecdsa/Sha256Test.php deleted file mode 100644 index 3c6f663e..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/Ecdsa/Sha256Test.php +++ /dev/null @@ -1,60 +0,0 @@ - - * @since 2.1.0 - */ -class Sha256Test extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Ecdsa - * @uses Lcobucci\JWT\Signer\OpenSSL - * - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha256::getAlgorithmId - */ - public function getAlgorithmIdMustBeCorrect() - { - $signer = new Sha256(); - - $this->assertEquals('ES256', $signer->getAlgorithmId()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Ecdsa - * @uses Lcobucci\JWT\Signer\OpenSSL - * - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha256::getAlgorithm - */ - public function getAlgorithmMustBeCorrect() - { - $signer = new Sha256(); - - $this->assertEquals('sha256', $signer->getAlgorithm()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Ecdsa - * @uses Lcobucci\JWT\Signer\OpenSSL - * - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha256::getKeyLength - */ - public function getKeyLengthMustBeCorrect() - { - $signer = new Sha256(); - - $this->assertEquals(64, $signer->getKeyLength()); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/Ecdsa/Sha384Test.php b/vendor/lcobucci/jwt/test/unit/Signer/Ecdsa/Sha384Test.php deleted file mode 100644 index 335d0511..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/Ecdsa/Sha384Test.php +++ /dev/null @@ -1,60 +0,0 @@ - - * @since 2.1.0 - */ -class Sha384Test extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Ecdsa - * @uses Lcobucci\JWT\Signer\OpenSSL - * - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha384::getAlgorithmId - */ - public function getAlgorithmIdMustBeCorrect() - { - $signer = new Sha384(); - - $this->assertEquals('ES384', $signer->getAlgorithmId()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Ecdsa - * @uses Lcobucci\JWT\Signer\OpenSSL - * - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha384::getAlgorithm - */ - public function getAlgorithmMustBeCorrect() - { - $signer = new Sha384(); - - $this->assertEquals('sha384', $signer->getAlgorithm()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Ecdsa - * @uses Lcobucci\JWT\Signer\OpenSSL - * - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha384::getKeyLength - */ - public function getKeyLengthMustBeCorrect() - { - $signer = new Sha384(); - - $this->assertEquals(96, $signer->getKeyLength()); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/Ecdsa/Sha512Test.php b/vendor/lcobucci/jwt/test/unit/Signer/Ecdsa/Sha512Test.php deleted file mode 100644 index 0e1ab792..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/Ecdsa/Sha512Test.php +++ /dev/null @@ -1,60 +0,0 @@ - - * @since 2.1.0 - */ -class Sha512Test extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Ecdsa - * @uses Lcobucci\JWT\Signer\OpenSSL - * - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha512::getAlgorithmId - */ - public function getAlgorithmIdMustBeCorrect() - { - $signer = new Sha512(); - - $this->assertEquals('ES512', $signer->getAlgorithmId()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Ecdsa - * @uses Lcobucci\JWT\Signer\OpenSSL - * - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha512::getAlgorithm - */ - public function getAlgorithmMustBeCorrect() - { - $signer = new Sha512(); - - $this->assertEquals('sha512', $signer->getAlgorithm()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Ecdsa - * @uses Lcobucci\JWT\Signer\OpenSSL - * - * @covers Lcobucci\JWT\Signer\Ecdsa\Sha512::getKeyLength - */ - public function getKeyLengthMustBeCorrect() - { - $signer = new Sha512(); - - $this->assertEquals(132, $signer->getKeyLength()); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/EcdsaTest.php b/vendor/lcobucci/jwt/test/unit/Signer/EcdsaTest.php deleted file mode 100644 index 95f84081..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/EcdsaTest.php +++ /dev/null @@ -1,117 +0,0 @@ -pointsManipulator = new MultibyteStringConverter(); - } - - private function getSigner() - { - $signer = $this->getMockForAbstractClass(Ecdsa::class, [$this->pointsManipulator]); - - $signer->method('getAlgorithm') - ->willReturn(OPENSSL_ALGO_SHA256); - - $signer->method('getAlgorithmId') - ->willReturn('ES256'); - - $signer->method('getKeyLength') - ->willReturn(64); - - return $signer; - } - - /** - * @test - * - * @covers \Lcobucci\JWT\Signer\Ecdsa::createHash - * @covers \Lcobucci\JWT\Signer\Ecdsa::getKeyType - * @covers \Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\BaseSigner - * - * @uses \Lcobucci\JWT\Signer\Ecdsa::__construct - * @uses \Lcobucci\JWT\Signer\Key - * @uses \Lcobucci\JWT\Signature - */ - public function createHashShouldReturnTheAHashBasedOnTheOpenSslSignature() - { - $payload = 'testing'; - - $signer = $this->getSigner(); - $signature = $signer->sign($payload, self::$ecdsaKeys['private']); - - $publicKey = openssl_pkey_get_public(self::$ecdsaKeys['public1']->getContent()); - - self::assertInternalType('resource', $publicKey); - self::assertSame( - 1, - openssl_verify( - $payload, - $this->pointsManipulator->toAsn1($signature, $signer->getKeyLength()), - $publicKey, - OPENSSL_ALGO_SHA256 - ) - ); - } - - /** - * @test - * - * @covers \Lcobucci\JWT\Signer\Ecdsa::doVerify - * @covers \Lcobucci\JWT\Signer\Ecdsa::getKeyType - * @covers \Lcobucci\JWT\Signer\Ecdsa\MultibyteStringConverter - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\BaseSigner - * - * @uses \Lcobucci\JWT\Signer\Ecdsa::__construct - * @uses \Lcobucci\JWT\Signer\Key - */ - public function doVerifyShouldDelegateToEcdsaSignerUsingPublicKey() - { - $payload = 'testing'; - $privateKey = openssl_pkey_get_private(self::$ecdsaKeys['private']->getContent()); - - self::assertInternalType('resource', $privateKey); - - $signature = ''; - openssl_sign($payload, $signature, $privateKey, OPENSSL_ALGO_SHA256); - - $signer = $this->getSigner(); - - self::assertTrue( - $signer->verify( - $this->pointsManipulator->fromAsn1($signature, $signer->getKeyLength()), - $payload, - self::$ecdsaKeys['public1'] - ) - ); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/Hmac/Sha256Test.php b/vendor/lcobucci/jwt/test/unit/Signer/Hmac/Sha256Test.php deleted file mode 100644 index 80abad02..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/Hmac/Sha256Test.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @since 0.1.0 - */ -class Sha256Test extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Hmac\Sha256::getAlgorithmId - */ - public function getAlgorithmIdMustBeCorrect() - { - $signer = new Sha256(); - - $this->assertEquals('HS256', $signer->getAlgorithmId()); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Hmac\Sha256::getAlgorithm - */ - public function getAlgorithmMustBeCorrect() - { - $signer = new Sha256(); - - $this->assertEquals('sha256', $signer->getAlgorithm()); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/Hmac/Sha384Test.php b/vendor/lcobucci/jwt/test/unit/Signer/Hmac/Sha384Test.php deleted file mode 100644 index 804d0a08..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/Hmac/Sha384Test.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @since 0.1.0 - */ -class Sha384Test extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Hmac\Sha384::getAlgorithmId - */ - public function getAlgorithmIdMustBeCorrect() - { - $signer = new Sha384(); - - $this->assertEquals('HS384', $signer->getAlgorithmId()); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Hmac\Sha384::getAlgorithm - */ - public function getAlgorithmMustBeCorrect() - { - $signer = new Sha384(); - - $this->assertEquals('sha384', $signer->getAlgorithm()); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/Hmac/Sha512Test.php b/vendor/lcobucci/jwt/test/unit/Signer/Hmac/Sha512Test.php deleted file mode 100644 index 603c118e..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/Hmac/Sha512Test.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @since 0.1.0 - */ -class Sha512Test extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Hmac\Sha512::getAlgorithmId - */ - public function getAlgorithmIdMustBeCorrect() - { - $signer = new Sha512(); - - $this->assertEquals('HS512', $signer->getAlgorithmId()); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Hmac\Sha512::getAlgorithm - */ - public function getAlgorithmMustBeCorrect() - { - $signer = new Sha512(); - - $this->assertEquals('sha512', $signer->getAlgorithm()); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/HmacTest.php b/vendor/lcobucci/jwt/test/unit/Signer/HmacTest.php deleted file mode 100644 index cb44fc92..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/HmacTest.php +++ /dev/null @@ -1,134 +0,0 @@ - - * @since 0.1.0 - */ -class HmacTest extends \PHPUnit\Framework\TestCase -{ - /** - * @var Hmac|\PHPUnit_Framework_MockObject_MockObject - */ - protected $signer; - - /** - * {@inheritdoc} - */ - protected function setUp() - { - $this->signer = $this->getMockForAbstractClass(Hmac::class); - - $this->signer->expects($this->any()) - ->method('getAlgorithmId') - ->willReturn('TEST123'); - - $this->signer->expects($this->any()) - ->method('getAlgorithm') - ->willReturn('sha256'); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Key - * - * @covers Lcobucci\JWT\Signer\Hmac::createHash - */ - public function createHashMustReturnAHashAccordingWithTheAlgorithm() - { - $hash = hash_hmac('sha256', 'test', '123', true); - - $this->assertEquals($hash, $this->signer->createHash('test', new Key('123'))); - - return $hash; - } - - /** - * @test - * - * @depends createHashMustReturnAHashAccordingWithTheAlgorithm - * - * @uses Lcobucci\JWT\Signer\Hmac::createHash - * @uses Lcobucci\JWT\Signer\Key - * - * @covers Lcobucci\JWT\Signer\Hmac::doVerify - */ - public function doVerifyShouldReturnTrueWhenExpectedHashWasCreatedWithSameInformation($expected) - { - $this->assertTrue($this->signer->doVerify($expected, 'test', new Key('123'))); - } - - /** - * @test - * - * @depends createHashMustReturnAHashAccordingWithTheAlgorithm - * - * @uses Lcobucci\JWT\Signer\Hmac::createHash - * @uses Lcobucci\JWT\Signer\Key - * - * @covers Lcobucci\JWT\Signer\Hmac::doVerify - */ - public function doVerifyShouldReturnFalseWhenExpectedHashWasNotCreatedWithSameInformation($expected) - { - $this->assertFalse($this->signer->doVerify($expected, 'test', new Key('1234'))); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Key - * - * @covers Lcobucci\JWT\Signer\Hmac::doVerify - */ - public function doVerifyShouldReturnFalseWhenExpectedHashIsNotString() - { - $this->assertFalse($this->signer->doVerify(false, 'test', new Key('1234'))); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Hmac::hashEquals - */ - public function hashEqualsShouldReturnFalseWhenExpectedHashHasDifferentLengthThanGenerated() - { - $this->assertFalse($this->signer->hashEquals('123', '1234')); - } - - /** - * @test - * - * @depends createHashMustReturnAHashAccordingWithTheAlgorithm - * - * @uses Lcobucci\JWT\Signer\Hmac::createHash - * @uses Lcobucci\JWT\Signer\Key - * - * @covers Lcobucci\JWT\Signer\Hmac::hashEquals - */ - public function hashEqualsShouldReturnFalseWhenExpectedHashIsDifferentThanGenerated($expected) - { - $this->assertFalse($this->signer->hashEquals($expected, $this->signer->createHash('test', new Key('1234')))); - } - - /** - * @test - * - * @depends createHashMustReturnAHashAccordingWithTheAlgorithm - * - * @uses Lcobucci\JWT\Signer\Hmac::createHash - * @uses Lcobucci\JWT\Signer\Key - * - * @covers Lcobucci\JWT\Signer\Hmac::hashEquals - */ - public function hashEqualsShouldReturnTrueWhenExpectedHashIsEqualsThanGenerated($expected) - { - $this->assertTrue($this->signer->hashEquals($expected, $this->signer->createHash('test', new Key('123')))); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/KeyTest.php b/vendor/lcobucci/jwt/test/unit/Signer/KeyTest.php deleted file mode 100644 index 7fda4a34..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/KeyTest.php +++ /dev/null @@ -1,119 +0,0 @@ - - * @since 3.0.4 - */ -class KeyTest extends \PHPUnit\Framework\TestCase -{ - /** - * @before - */ - public function configureRootDir() - { - vfsStream::setup( - 'root', - null, - [ - 'test.pem' => 'testing', - 'emptyFolder' => [] - ] - ); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Key::__construct - * @covers Lcobucci\JWT\Signer\Key::setContent - */ - public function constructShouldConfigureContentAndPassphrase() - { - $key = new Key('testing', 'test'); - - $this->assertAttributeEquals('testing', 'content', $key); - $this->assertAttributeEquals('test', 'passphrase', $key); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Key::__construct - * @covers Lcobucci\JWT\Signer\Key::setContent - * @covers Lcobucci\JWT\Signer\Key::readFile - */ - public function constructShouldBeAbleToConfigureContentFromFile() - { - $key = new Key('file://' . vfsStream::url('root/test.pem')); - - $this->assertAttributeEquals('testing', 'content', $key); - $this->assertAttributeEquals(null, 'passphrase', $key); - } - - /** - * @test - * - * @expectedException \InvalidArgumentException - * - * @covers Lcobucci\JWT\Signer\Key::__construct - * @covers Lcobucci\JWT\Signer\Key::setContent - * @covers Lcobucci\JWT\Signer\Key::readFile - */ - public function constructShouldRaiseExceptionWhenFileDoesNotExists() - { - new Key('file://' . vfsStream::url('root/test2.pem')); - } - - /** - * @test - * - * @expectedException \InvalidArgumentException - * - * @covers Lcobucci\JWT\Signer\Key::__construct - * @covers Lcobucci\JWT\Signer\Key::setContent - * @covers Lcobucci\JWT\Signer\Key::readFile - */ - public function constructShouldRaiseExceptionWhenFileGetContentsFailed() - { - new Key('file://' . vfsStream::url('root/emptyFolder')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Key::__construct - * @uses Lcobucci\JWT\Signer\Key::setContent - * - * @covers Lcobucci\JWT\Signer\Key::getContent - */ - public function getContentShouldReturnConfiguredData() - { - $key = new Key('testing', 'test'); - - $this->assertEquals('testing', $key->getContent()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Key::__construct - * @uses Lcobucci\JWT\Signer\Key::setContent - * - * @covers Lcobucci\JWT\Signer\Key::getPassphrase - */ - public function getPassphraseShouldReturnConfiguredData() - { - $key = new Key('testing', 'test'); - - $this->assertEquals('test', $key->getPassphrase()); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/KeychainTest.php b/vendor/lcobucci/jwt/test/unit/Signer/KeychainTest.php deleted file mode 100644 index 40ccfc5f..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/KeychainTest.php +++ /dev/null @@ -1,49 +0,0 @@ - - * @since 2.1.0 - */ -class KeychainTest extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Key - * - * @covers Lcobucci\JWT\Signer\Keychain::getPrivateKey - */ - public function getPrivateKeyShouldReturnAKey() - { - $keychain = new Keychain(); - $key = $keychain->getPrivateKey('testing', 'test'); - - $this->assertInstanceOf(Key::class, $key); - $this->assertAttributeEquals('testing', 'content', $key); - $this->assertAttributeEquals('test', 'passphrase', $key); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Signer\Key - * - * @covers Lcobucci\JWT\Signer\Keychain::getPublicKey - */ - public function getPublicKeyShouldReturnAValidResource() - { - $keychain = new Keychain(); - $key = $keychain->getPublicKey('testing'); - - $this->assertInstanceOf(Key::class, $key); - $this->assertAttributeEquals('testing', 'content', $key); - $this->assertAttributeEquals(null, 'passphrase', $key); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/Rsa/Sha256Test.php b/vendor/lcobucci/jwt/test/unit/Signer/Rsa/Sha256Test.php deleted file mode 100644 index 3c389889..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/Rsa/Sha256Test.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @since 2.1.0 - */ -class Sha256Test extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Rsa\Sha256::getAlgorithmId - */ - public function getAlgorithmIdMustBeCorrect() - { - $signer = new Sha256(); - - $this->assertEquals('RS256', $signer->getAlgorithmId()); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Rsa\Sha256::getAlgorithm - */ - public function getAlgorithmMustBeCorrect() - { - $signer = new Sha256(); - - $this->assertEquals(OPENSSL_ALGO_SHA256, $signer->getAlgorithm()); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/Rsa/Sha384Test.php b/vendor/lcobucci/jwt/test/unit/Signer/Rsa/Sha384Test.php deleted file mode 100644 index 292f7b56..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/Rsa/Sha384Test.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @since 2.1.0 - */ -class Sha384Test extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Rsa\Sha384::getAlgorithmId - */ - public function getAlgorithmIdMustBeCorrect() - { - $signer = new Sha384(); - - $this->assertEquals('RS384', $signer->getAlgorithmId()); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Rsa\Sha384::getAlgorithm - */ - public function getAlgorithmMustBeCorrect() - { - $signer = new Sha384(); - - $this->assertEquals(OPENSSL_ALGO_SHA384, $signer->getAlgorithm()); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/Rsa/Sha512Test.php b/vendor/lcobucci/jwt/test/unit/Signer/Rsa/Sha512Test.php deleted file mode 100644 index 3036e3ee..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/Rsa/Sha512Test.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @since 2.1.0 - */ -class Sha512Test extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Rsa\Sha512::getAlgorithmId - */ - public function getAlgorithmIdMustBeCorrect() - { - $signer = new Sha512(); - - $this->assertEquals('RS512', $signer->getAlgorithmId()); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Signer\Rsa\Sha512::getAlgorithm - */ - public function getAlgorithmMustBeCorrect() - { - $signer = new Sha512(); - - $this->assertEquals(OPENSSL_ALGO_SHA512, $signer->getAlgorithm()); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/Signer/RsaTest.php b/vendor/lcobucci/jwt/test/unit/Signer/RsaTest.php deleted file mode 100644 index 46c5f89e..00000000 --- a/vendor/lcobucci/jwt/test/unit/Signer/RsaTest.php +++ /dev/null @@ -1,188 +0,0 @@ -getSigner(); - $signature = $signer->sign($payload, self::$rsaKeys['private']); - - $publicKey = openssl_pkey_get_public(self::$rsaKeys['public']->getContent()); - self::assertInternalType('resource', $publicKey); - self::assertSame(1, openssl_verify($payload, $signature, $publicKey, OPENSSL_ALGO_SHA256)); - } - - /** - * @test - * - * @covers \Lcobucci\JWT\Signer\Rsa::createHash - * @covers \Lcobucci\JWT\Signer\Rsa::validateKey - * @covers \Lcobucci\JWT\Signer\Rsa::getKeyType - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\BaseSigner - * - * @uses \Lcobucci\JWT\Signer\Key - */ - public function createHashShouldRaiseAnExceptionWhenKeyIsInvalid() - { - $key = <<getSigner(); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('There was an error while creating the signature'); - - $signer->sign('testing', new Key($key)); - } - - /** - * @test - * - * @covers \Lcobucci\JWT\Signer\Rsa::createHash - * @covers \Lcobucci\JWT\Signer\Rsa::validateKey - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\BaseSigner - * - * @uses \Lcobucci\JWT\Signer\Key - */ - public function createHashShouldRaiseAnExceptionWhenKeyIsNotParseable() - { - $signer = $this->getSigner(); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('It was not possible to parse your key'); - - $signer->sign('testing', new Key('blablabla')); - } - - /** - * @test - * - * @covers \Lcobucci\JWT\Signer\Rsa::createHash - * @covers \Lcobucci\JWT\Signer\Rsa::validateKey - * @covers \Lcobucci\JWT\Signer\Rsa::getKeyType - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\BaseSigner - * - * @uses \Lcobucci\JWT\Signer\Key - */ - public function createHashShouldRaiseAnExceptionWhenKeyTypeIsNotRsa() - { - $signer = $this->getSigner(); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('This key is not compatible with this signer'); - - $signer->sign('testing', self::$ecdsaKeys['private']); - } - - /** - * @test - * - * @covers \Lcobucci\JWT\Signer\Rsa::doVerify - * @covers \Lcobucci\JWT\Signer\Rsa::validateKey - * @covers \Lcobucci\JWT\Signer\Rsa::getKeyType - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\BaseSigner - * - * @uses \Lcobucci\JWT\Signer\Key - */ - public function doVerifyShouldReturnTrueWhenSignatureIsValid() - { - $payload = 'testing'; - $privateKey = openssl_pkey_get_private(self::$rsaKeys['private']->getContent()); - self::assertInternalType('resource', $privateKey); - - $signature = ''; - openssl_sign($payload, $signature, $privateKey, OPENSSL_ALGO_SHA256); - - $signer = $this->getSigner(); - - self::assertTrue($signer->verify($signature, $payload, self::$rsaKeys['public'])); - } - - /** - * @test - * - * @covers \Lcobucci\JWT\Signer\Rsa::doVerify - * @covers \Lcobucci\JWT\Signer\Rsa::validateKey - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\BaseSigner - * - * @uses \Lcobucci\JWT\Signer\Key - */ - public function doVerifyShouldRaiseAnExceptionWhenKeyIsNotParseable() - { - $signer = $this->getSigner(); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('It was not possible to parse your key'); - - $signer->verify('testing', 'testing', new Key('blablabla')); - } - - /** - * @test - * - * @covers \Lcobucci\JWT\Signer\Rsa::doVerify - * @covers \Lcobucci\JWT\Signer\Rsa::validateKey - * @covers \Lcobucci\JWT\Signer\OpenSSL - * @covers \Lcobucci\JWT\Signer\BaseSigner - * - * @uses \Lcobucci\JWT\Signer\Key - */ - public function doVerifyShouldRaiseAnExceptionWhenKeyTypeIsNotRsa() - { - $signer = $this->getSigner(); - - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('It was not possible to parse your key'); - - $signer->verify('testing', 'testing', self::$ecdsaKeys['private']); - } - - private function getSigner() - { - $signer = $this->getMockForAbstractClass(Rsa::class); - - $signer->method('getAlgorithm') - ->willReturn(OPENSSL_ALGO_SHA256); - - $signer->method('getAlgorithmId') - ->willReturn('RS256'); - - return $signer; - } -} diff --git a/vendor/lcobucci/jwt/test/unit/TokenTest.php b/vendor/lcobucci/jwt/test/unit/TokenTest.php deleted file mode 100644 index 092d1b62..00000000 --- a/vendor/lcobucci/jwt/test/unit/TokenTest.php +++ /dev/null @@ -1,573 +0,0 @@ - - * @since 0.1.0 - */ -class TokenTest extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @covers Lcobucci\JWT\Token::__construct - */ - public function constructMustInitializeAnEmptyPlainTextTokenWhenNoArgumentsArePassed() - { - $token = new Token(); - - $this->assertAttributeEquals(['alg' => 'none'], 'headers', $token); - $this->assertAttributeEquals([], 'claims', $token); - $this->assertAttributeEquals(null, 'signature', $token); - $this->assertAttributeEquals(['', ''], 'payload', $token); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * - * @covers Lcobucci\JWT\Token::hasHeader - */ - public function hasHeaderMustReturnTrueWhenItIsConfigured() - { - $token = new Token(['test' => 'testing']); - - $this->assertTrue($token->hasHeader('test')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * - * @covers Lcobucci\JWT\Token::hasHeader - */ - public function hasHeaderMustReturnFalseWhenItIsNotConfigured() - { - $token = new Token(['test' => 'testing']); - - $this->assertFalse($token->hasHeader('testing')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Token::hasHeader - * - * @covers Lcobucci\JWT\Token::getHeader - * - * @expectedException \OutOfBoundsException - */ - public function getHeaderMustRaiseExceptionWhenHeaderIsNotConfigured() - { - $token = new Token(['test' => 'testing']); - - $token->getHeader('testing'); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Token::hasHeader - * - * @covers Lcobucci\JWT\Token::getHeader - */ - public function getHeaderMustReturnTheDefaultValueWhenIsNotConfigured() - { - $token = new Token(['test' => 'testing']); - - $this->assertEquals('blah', $token->getHeader('testing', 'blah')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Token::hasHeader - * - * @covers Lcobucci\JWT\Token::getHeader - * @covers Lcobucci\JWT\Token::getHeaderValue - */ - public function getHeaderMustReturnTheRequestedHeader() - { - $token = new Token(['test' => 'testing']); - - $this->assertEquals('testing', $token->getHeader('test')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Token::hasHeader - * @uses Lcobucci\JWT\Claim\Basic - * - * @covers Lcobucci\JWT\Token::getHeader - * @covers Lcobucci\JWT\Token::getHeaderValue - */ - public function getHeaderMustReturnValueWhenItIsAReplicatedClaim() - { - $token = new Token(['jti' => new EqualsTo('jti', 1)]); - - $this->assertEquals(1, $token->getHeader('jti')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * - * @covers Lcobucci\JWT\Token::getHeaders - */ - public function getHeadersMustReturnTheConfiguredHeader() - { - $token = new Token(['test' => 'testing']); - - $this->assertEquals(['test' => 'testing'], $token->getHeaders()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * - * @covers Lcobucci\JWT\Token::getClaims - */ - public function getClaimsMustReturnTheConfiguredClaims() - { - $token = new Token([], ['test' => 'testing']); - - $this->assertEquals(['test' => 'testing'], $token->getClaims()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Claim\Basic - * - * @covers Lcobucci\JWT\Token::hasClaim - */ - public function hasClaimMustReturnTrueWhenItIsConfigured() - { - $token = new Token([], ['test' => new Basic('test', 'testing')]); - - $this->assertTrue($token->hasClaim('test')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Claim\Basic - * - * @covers Lcobucci\JWT\Token::hasClaim - */ - public function hasClaimMustReturnFalseWhenItIsNotConfigured() - { - $token = new Token([], ['test' => new Basic('test', 'testing')]); - - $this->assertFalse($token->hasClaim('testing')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Token::hasClaim - * @uses Lcobucci\JWT\Claim\Basic - * - * @covers Lcobucci\JWT\Token::getClaim - */ - public function getClaimMustReturnTheDefaultValueWhenIsNotConfigured() - { - $token = new Token([], ['test' => new Basic('test', 'testing')]); - - $this->assertEquals('blah', $token->getClaim('testing', 'blah')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Token::hasClaim - * @uses Lcobucci\JWT\Claim\Basic - * - * @covers Lcobucci\JWT\Token::getClaim - * - * @expectedException \OutOfBoundsException - */ - public function getClaimShouldRaiseExceptionWhenClaimIsNotConfigured() - { - $token = new Token(); - $token->getClaim('testing'); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Token::hasClaim - * @uses Lcobucci\JWT\Claim\Basic - * - * @covers Lcobucci\JWT\Token::getClaim - */ - public function getClaimShouldReturnTheClaimValueWhenItExists() - { - $token = new Token([], ['testing' => new Basic('testing', 'test')]); - - $this->assertEquals('test', $token->getClaim('testing')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * - * @covers Lcobucci\JWT\Token::verify - * - * @expectedException BadMethodCallException - */ - public function verifyMustRaiseExceptionWhenTokenIsUnsigned() - { - $signer = $this->createMock(Signer::class); - - $token = new Token(); - $token->verify($signer, 'test'); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * - * @covers Lcobucci\JWT\Token::verify - * @covers Lcobucci\JWT\Token::getPayload - */ - public function verifyShouldReturnFalseWhenTokenAlgorithmIsDifferent() - { - $signer = $this->createMock(Signer::class); - $signature = $this->createMock(Signature::class, [], [], '', false); - - $signer->expects($this->any()) - ->method('getAlgorithmId') - ->willReturn('HS256'); - - $signature->expects($this->never()) - ->method('verify'); - - $token = new Token(['alg' => 'RS256'], [], $signature); - - $this->assertFalse($token->verify($signer, 'test')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * - * @covers Lcobucci\JWT\Token::verify - * @covers Lcobucci\JWT\Token::getPayload - */ - public function verifyMustDelegateTheValidationToSignature() - { - $signer = $this->createMock(Signer::class); - $signature = $this->createMock(Signature::class, [], [], '', false); - - $signer->expects($this->any()) - ->method('getAlgorithmId') - ->willReturn('HS256'); - - $signature->expects($this->once()) - ->method('verify') - ->with($signer, $this->isType('string'), 'test') - ->willReturn(true); - - $token = new Token(['alg' => 'HS256'], [], $signature); - - $this->assertTrue($token->verify($signer, 'test')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\Token::validate - * @covers Lcobucci\JWT\Token::getValidatableClaims - */ - public function validateShouldReturnTrueWhenClaimsAreEmpty() - { - $token = new Token(); - - $this->assertTrue($token->validate(new ValidationData())); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * @uses Lcobucci\JWT\Claim\Basic::__construct - * - * @covers Lcobucci\JWT\Token::validate - * @covers Lcobucci\JWT\Token::getValidatableClaims - */ - public function validateShouldReturnTrueWhenThereAreNoValidatableClaims() - { - $token = new Token([], ['testing' => new Basic('testing', 'test')]); - - $this->assertTrue($token->validate(new ValidationData())); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\ValidationData - * @uses Lcobucci\JWT\Claim\Basic - * @uses Lcobucci\JWT\Claim\EqualsTo - * - * @covers Lcobucci\JWT\Token::validate - * @covers Lcobucci\JWT\Token::getValidatableClaims - */ - public function validateShouldReturnFalseWhenThereIsAtLeastOneFailedValidatableClaim() - { - $token = new Token( - [], - [ - 'iss' => new EqualsTo('iss', 'test'), - 'testing' => new Basic('testing', 'test') - ] - ); - - $data = new ValidationData(); - $data->setIssuer('test1'); - - $this->assertFalse($token->validate($data)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\ValidationData - * @uses Lcobucci\JWT\Claim\Basic - * @uses Lcobucci\JWT\Claim\EqualsTo - * @uses Lcobucci\JWT\Claim\LesserOrEqualsTo - * @uses Lcobucci\JWT\Claim\GreaterOrEqualsTo - * - * @covers Lcobucci\JWT\Token::validate - * @covers Lcobucci\JWT\Token::getValidatableClaims - */ - public function validateShouldReturnFalseWhenATimeBasedClaimFails() - { - $now = time(); - - $token = new Token( - [], - [ - 'iss' => new EqualsTo('iss', 'test'), - 'iat' => new LesserOrEqualsTo('iat', $now), - 'nbf' => new LesserOrEqualsTo('nbf', $now + 20), - 'exp' => new GreaterOrEqualsTo('exp', $now + 500), - 'testing' => new Basic('testing', 'test') - ] - ); - - $data = new ValidationData($now + 10); - $data->setIssuer('test'); - - $this->assertFalse($token->validate($data)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\ValidationData - * @uses Lcobucci\JWT\Claim\Basic - * @uses Lcobucci\JWT\Claim\EqualsTo - * @uses Lcobucci\JWT\Claim\LesserOrEqualsTo - * @uses Lcobucci\JWT\Claim\GreaterOrEqualsTo - * - * @covers Lcobucci\JWT\Token::validate - * @covers Lcobucci\JWT\Token::getValidatableClaims - */ - public function validateShouldReturnTrueWhenThereAreNoFailedValidatableClaims() - { - $now = time(); - - $token = new Token( - [], - [ - 'iss' => new EqualsTo('iss', 'test'), - 'iat' => new LesserOrEqualsTo('iat', $now), - 'exp' => new GreaterOrEqualsTo('exp', $now + 500), - 'testing' => new Basic('testing', 'test') - ] - ); - - $data = new ValidationData($now + 10); - $data->setIssuer('test'); - - $this->assertTrue($token->validate($data)); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\ValidationData - * @uses Lcobucci\JWT\Claim\Basic - * @uses Lcobucci\JWT\Claim\EqualsTo - * @uses Lcobucci\JWT\Claim\LesserOrEqualsTo - * @uses Lcobucci\JWT\Claim\GreaterOrEqualsTo - * - * @covers Lcobucci\JWT\Token::validate - * @covers Lcobucci\JWT\Token::getValidatableClaims - */ - public function validateShouldReturnTrueWhenLeewayMakesAllTimeBasedClaimsTrueAndOtherClaimsAreTrue() - { - $now = time(); - - $token = new Token( - [], - [ - 'iss' => new EqualsTo('iss', 'test'), - 'iat' => new LesserOrEqualsTo('iat', $now), - 'nbf' => new LesserOrEqualsTo('nbf', $now + 20), - 'exp' => new GreaterOrEqualsTo('exp', $now + 500), - 'testing' => new Basic('testing', 'test') - ] - ); - - $data = new ValidationData($now + 10, 20); - $data->setIssuer('test'); - - $this->assertTrue($token->validate($data)); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Token::isExpired - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Token::getClaim - * @uses Lcobucci\JWT\Token::hasClaim - */ - public function isExpiredShouldReturnFalseWhenTokenDoesNotExpires() - { - $token = new Token(['alg' => 'none']); - - $this->assertFalse($token->isExpired()); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Token::isExpired - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Token::getClaim - * @uses Lcobucci\JWT\Token::hasClaim - * @uses Lcobucci\JWT\Claim\Basic - * @uses Lcobucci\JWT\Claim\GreaterOrEqualsTo - */ - public function isExpiredShouldReturnFalseWhenTokenIsNotExpired() - { - $token = new Token( - ['alg' => 'none'], - ['exp' => new GreaterOrEqualsTo('exp', time() + 500)] - ); - - $this->assertFalse($token->isExpired()); - } - - /** - * @test - * - * @covers Lcobucci\JWT\Token::isExpired - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Token::getClaim - * @uses Lcobucci\JWT\Token::hasClaim - * @uses Lcobucci\JWT\Claim\Basic - * @uses Lcobucci\JWT\Claim\GreaterOrEqualsTo - */ - public function isExpiredShouldReturnTrueAfterTokenExpires() - { - $token = new Token( - ['alg' => 'none'], - ['exp' => new GreaterOrEqualsTo('exp', time())] - ); - - $this->assertTrue($token->isExpired(new DateTime('+10 days'))); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * - * @covers Lcobucci\JWT\Token::getPayload - */ - public function getPayloadShouldReturnAStringWithTheTwoEncodePartsThatGeneratedTheToken() - { - $token = new Token(['alg' => 'none'], [], null, ['test1', 'test2', 'test3']); - - $this->assertEquals('test1.test2', $token->getPayload()); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Token::getPayload - * - * @covers Lcobucci\JWT\Token::__toString - */ - public function toStringMustReturnEncodedDataWithEmptySignature() - { - $token = new Token(['alg' => 'none'], [], null, ['test', 'test']); - - $this->assertEquals('test.test.', (string) $token); - } - - /** - * @test - * - * @uses Lcobucci\JWT\Token::__construct - * @uses Lcobucci\JWT\Token::getPayload - * - * @covers Lcobucci\JWT\Token::__toString - */ - public function toStringMustReturnEncodedData() - { - $signature = $this->createMock(Signature::class, [], [], '', false); - - $token = new Token(['alg' => 'none'], [], $signature, ['test', 'test', 'test']); - - $this->assertEquals('test.test.test', (string) $token); - } -} diff --git a/vendor/lcobucci/jwt/test/unit/ValidationDataTest.php b/vendor/lcobucci/jwt/test/unit/ValidationDataTest.php deleted file mode 100644 index 32df8d43..00000000 --- a/vendor/lcobucci/jwt/test/unit/ValidationDataTest.php +++ /dev/null @@ -1,270 +0,0 @@ - - * @since 2.0.0 - */ -class ValidationDataTest extends \PHPUnit\Framework\TestCase -{ - /** - * @test - * - * @covers Lcobucci\JWT\ValidationData::__construct - * @covers Lcobucci\JWT\ValidationData::setCurrentTime - */ - public function constructorShouldConfigureTheItems() - { - $expected = $this->createExpectedData(); - $data = new ValidationData(1); - - $this->assertAttributeSame($expected, 'items', $data); - } - - /** - * @test - * - * @covers Lcobucci\JWT\ValidationData::__construct - * @covers Lcobucci\JWT\ValidationData::setCurrentTime - */ - public function constructorWithLeewayShouldConfigureTheItems() - { - $expected = $this->createExpectedData(null, null, null, null, 111, 111, 89); - $data = new ValidationData(100, 11); - - $this->assertAttributeSame($expected, 'items', $data); - } - - /** - * @test - * - * @dataProvider claimValues - * - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\ValidationData::setId - */ - public function setIdShouldChangeTheId($id) - { - $expected = $this->createExpectedData($id); - $data = new ValidationData(1); - $data->setId($id); - - $this->assertAttributeSame($expected, 'items', $data); - } - - /** - * @test - * - * @dataProvider claimValues - * - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\ValidationData::setIssuer - */ - public function setIssuerShouldChangeTheIssuer($iss) - { - $expected = $this->createExpectedData(null, null, $iss); - $data = new ValidationData(1); - $data->setIssuer($iss); - - $this->assertAttributeSame($expected, 'items', $data); - } - - /** - * @test - * - * @dataProvider claimValues - * - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\ValidationData::setAudience - */ - public function setAudienceShouldChangeTheAudience($aud) - { - $expected = $this->createExpectedData(null, null, null, $aud); - $data = new ValidationData(1); - $data->setAudience($aud); - - $this->assertAttributeSame($expected, 'items', $data); - } - - /** - * @test - * - * @dataProvider claimValues - * - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\ValidationData::setSubject - */ - public function setSubjectShouldChangeTheSubject($sub) - { - $expected = $this->createExpectedData(null, $sub); - $data = new ValidationData(1); - $data->setSubject($sub); - - $this->assertAttributeSame($expected, 'items', $data); - } - - /** - * @test - * - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\ValidationData::setCurrentTime - */ - public function setCurrentTimeShouldChangeTheTimeBasedValues() - { - $expected = $this->createExpectedData(null, null, null, null, 2); - $data = new ValidationData(1); - $data->setCurrentTime(2); - - $this->assertAttributeSame($expected, 'items', $data); - } - - /** - * @test - * - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\ValidationData::setCurrentTime - */ - public function setCurrentTimeShouldChangeTheTimeBasedValuesUsingLeeway() - { - $expected = $this->createExpectedData(null, null, null, null, 30, 30, 10); - $data = new ValidationData(15, 10); - $data->setCurrentTime(20); - - $this->assertAttributeSame($expected, 'items', $data); - } - - /** - * @test - * - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\ValidationData::has - */ - public function hasShouldReturnTrueWhenItemIsNotEmpty() - { - $data = new ValidationData(1); - - $this->assertTrue($data->has('iat')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\ValidationData::has - */ - public function hasShouldReturnFalseWhenItemIsEmpty() - { - $data = new ValidationData(1); - - $this->assertFalse($data->has('jti')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\ValidationData::has - */ - public function hasShouldReturnFalseWhenItemIsNotDefined() - { - $data = new ValidationData(1); - - $this->assertFalse($data->has('test')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\ValidationData::get - */ - public function getShouldReturnTheItemValue() - { - $data = new ValidationData(1); - - $this->assertEquals(1, $data->get('iat')); - } - - /** - * @test - * - * @uses Lcobucci\JWT\ValidationData::__construct - * @uses Lcobucci\JWT\ValidationData::setCurrentTime - * - * @covers Lcobucci\JWT\ValidationData::get - */ - public function getShouldReturnNullWhenItemIsNotDefined() - { - $data = new ValidationData(1); - - $this->assertNull($data->get('test')); - } - - /** - * @return array - */ - public function claimValues() - { - return [ - [1], - ['test'] - ]; - } - - /** - * @param string|null $id - * @param string|null $sub - * @param string|null $iss - * @param string|null $aud - * @param int $iat - * @param int|null $nbf - * @param int|null $exp - * - * @return array - */ - private function createExpectedData( - $id = null, - $sub = null, - $iss = null, - $aud = null, - $iat = 1, - $nbf = null, - $exp = null - ) { - return [ - 'jti' => $id !== null ? (string) $id : null, - 'iss' => $iss !== null ? (string) $iss : null, - 'aud' => $aud !== null ? (string) $aud : null, - 'sub' => $sub !== null ? (string) $sub : null, - 'iat' => $iat, - 'nbf' => $nbf !== null ? $nbf: $iat, - 'exp' => $exp !== null ? $exp: $iat - ]; - } -} diff --git a/vendor/league/commonmark/.phpstorm.meta.php b/vendor/league/commonmark/.phpstorm.meta.php new file mode 100644 index 00000000..13de8734 --- /dev/null +++ b/vendor/league/commonmark/.phpstorm.meta.php @@ -0,0 +1,34 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PHPSTORM_META +{ + expectedArguments(\League\CommonMark\HtmlElement::__construct(), 0, 'a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kdb', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'pre', 'progress', 'q', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr'); + + expectedArguments(\League\CommonMark\Block\Element\Heading::__construct(), 0, 1, 2, 3, 4, 5, 6); + expectedReturnValues(\League\CommonMark\Block\Element\Heading::getLevel(), 1, 2, 3, 4, 5, 6); + + registerArgumentsSet('league_commonmark_htmlblock_types', \League\CommonMark\Block\Element\HtmlBlock::TYPE_1_CODE_CONTAINER, \League\CommonMark\Block\Element\HtmlBlock::TYPE_2_COMMENT, \League\CommonMark\Block\Element\HtmlBlock::TYPE_3, \League\CommonMark\Block\Element\HtmlBlock::TYPE_4, \League\CommonMark\Block\Element\HtmlBlock::TYPE_5_CDATA, \League\CommonMark\Block\Element\HtmlBlock::TYPE_6_BLOCK_ELEMENT, \League\CommonMark\Block\Element\HtmlBlock::TYPE_7_MISC_ELEMENT); + expectedArguments(\League\CommonMark\Block\Element\HtmlBlock::__construct(), 0, argumentsSet('league_commonmark_htmlblock_types')); + expectedArguments(\League\CommonMark\Block\Element\HtmlBlock::setType(), 0, argumentsSet('league_commonmark_htmlblock_types')); + expectedReturnValues(\League\CommonMark\Block\Element\HtmlBlock::getType(), argumentsSet('league_commonmark_htmlblock_types')); + expectedArguments(\League\CommonMark\Util\RegexHelper::getHtmlBlockOpenRegex(), 0, argumentsSet('league_commonmark_htmlblock_types')); + expectedArguments(\League\CommonMark\Util\RegexHelper::getHtmlBlockCloseRegex(), 0, argumentsSet('league_commonmark_htmlblock_types')); + + registerArgumentsSet('league_commonmark_newline_types', \League\CommonMark\Inline\Element\Newline::HARDBREAK, \League\CommonMark\Inline\Element\Newline::SOFTBREAK); + expectedArguments(\League\CommonMark\Inline\Element\Newline::__construct(), 0, argumentsSet('league_commonmark_newline_types')); + expectedReturnValues(\League\CommonMark\Inline\Element\Newline::getType(), argumentsSet('league_commonmark_newline_types')); + + registerArgumentsSet('league_commonmark_options', 'renderer', 'commonmark', 'commonmark/enable_em', 'commonmark/enable_strong', 'commonmark/use_asterisk', 'commonmark/use_underscore', 'commonmark/unordered_list_markers', 'html_input', 'allow_unsafe_links', 'max_nesting_level', 'external_link', 'external_link/nofollow', 'external_link/noopener', 'external_link/noreferrer', 'footnote', 'footnote/backref_class', 'footnote/container_add_hr', 'footnote/container_class', 'footnote/ref_class', 'footnote/ref_id_prefix', 'footnote/footnote_class', 'footnote/footnote_id_prefix', 'heading_permalink', 'heading_permalink/html_class', 'heading_permalink/id_prefix', 'heading_permalink/inner_contents', 'heading_permalink/insert', 'heading_permalink/slug_normalizer', 'heading_permalink/symbol', 'heading_permalink/title', 'table_of_contents', 'table_of_contents/style', 'table_of_contents/normalize', 'table_of_contents/position', 'table_of_contents/html_class', 'table_of_contents/min_heading_level', 'table_of_contents/max_heading_level', 'table_of_contents/placeholder'); + expectedArguments(\League\CommonMark\EnvironmentInterface::getConfig(), 0, argumentsSet('league_commonmark_options')); + expectedArguments(\League\CommonMark\Util\ConfigurationInterface::get(), 0, argumentsSet('league_commonmark_options')); + expectedArguments(\League\CommonMark\Util\ConfigurationInterface::set(), 0, argumentsSet('league_commonmark_options')); +} diff --git a/vendor/league/commonmark/CHANGELOG-0.x.md b/vendor/league/commonmark/CHANGELOG-0.x.md new file mode 100644 index 00000000..16f96dd1 --- /dev/null +++ b/vendor/league/commonmark/CHANGELOG-0.x.md @@ -0,0 +1,842 @@ +# Change Log +All notable changes to this project will be documented in this file. +Updates should follow the [Keep a CHANGELOG](https://keepachangelog.com/) principles. + +## [0.19.3] - 2019-06-18 + +### Fixed + + - Fixed bug where elements with content of `"0"` wouldn't be rendered (#376) + +## [0.19.2] - 2019-05-19 + +### Fixed + + - Fixed bug where default values for nested configuration paths were inadvertently cast to strings + +## [0.19.1] - 2019-04-10 + +### Added + + - Added the missing `addExtension()` method to the new `ConfigurableEnvironmentInterface` + +### Fixed + + - Fixed extensions not being able to register other extensions + +## [0.19.0] - 2019-04-10 + +### Added + + - The priority of parsers, processors, and renderers can now be set when `add()`ing them; you no longer need to rely on the order in which they are added + - Added support for trying multiple parsers per block/inline + - Extracted two new base interfaces from `Environment`: + - `EnvironmentInterface` + - `ConfigurableEnvironmentInterface` + - Extracted a new `AbstractStringContainerBlock` base class and corresponding `StringContainerInterface` from `AbstractBlock` + - Added `Cursor::getEncoding()` method + - Added `.phpstorm.meta.php` file for better IDE code completion + - Made some minor optimizations here and there + +### Changed + + - Pretty much everything now has parameter and return types (#346) + - Attributes passed to `HtmlElement` will now be escaped by default + - `Environment` is now a `final` class + - `Environment::getBlockRendererForClass()` was replaced with `Environment::getBlockRenderersForClass()` (note the added `s`) + - `Environment::getInlineRendererForClass()` was replaced with `Environment::getInlineRenderersForClass()` (note the added `s`) + - The `Environment::get____()` methods now return an iterator instead of an array + - `Context::addBlock()` no longer returns the same block instance you passed into the method, as this served no useful purpose + - `RegexHelper::isEscapable()` no longer accepts `null` values + - `Node::replaceChildren()` now accepts any type of `iterable`, not just `array`s + - Some block elements now extend `AbstractStringContainerBlock` instead of `AbstractBlock` + - `InlineContainerInterface` now extends the new `StringContainerInterface` + - The `handleRemainingContents()` method (formerly on `AbstractBlock`, now on `AbstractStringContainerBlock`) is now an `abstract method + - The `InlineParserContext` constructor now requires an `AbstractStringContainerBlock` instead of an `AbstractBlock` + +### Removed + + - Removed support for PHP 5.6 and 7.0 (#346) + - Removed support for `add()`ing parsers with just the target block/inline class name - you need to include the full namespace now + - Removed the following unused methods from `Environment`: + - `getInlineParser($name)` + - `getInlineParsers()` + - `createInlineParserEngine()` + - Removed the unused `getName()` methods: + - `AbstractBlockParser::getName()` + - `AbstractInlineParser::getName()` + - `BlockParserInterface::getName()` + - `InlinerParserInterface::getName()` + - Removed the now-useless classes: + - `AbstractBlockParser` + - `AbstractInlinerParser` + - `InlineContainer` + - Removed the `AbstractBlock::acceptsLines()` method + - Removed the now-useless constructor from `AbstractBlock` + - Removed previously-deprecated functionality: + - `InlineContainer` class + - `RegexHelper::$instance` + - `RegexHelper::getInstance()` + - `RegexHelper::getPartialRegex()` + - `RegexHelper::getHtmlTagRegex()` + - `RegexHelper::getLinkTitleRegex()` + - `RegexHelper::getLinkDestinationBracesRegex()` + - `RegexHelper::getThematicBreakRegex()` + - Removed the second `$preserveEntities` parameter from `Xml:escape()` + +## [0.18.5] - 2019-03-28 + +### Fixed + + - Fixed the adjoining `Text` collapser not handling the full tree (thephpleague/commonmark-ext-autolink#10) + +## [0.18.4] - 2019-03-23 + +### Changed + + - Modified how URL normalization decodes certain characters in order to align with the JS library's output + - Disallowed unescaped `(` in parenthesized link title + +### Fixed + + - Fixed two exponential backtracking issues + +## [0.18.3] - 2019-03-21 + +This is a **security update** release. + +### Changed + + - XML/HTML entities in attributes will no longer be preserved when rendering (#353) + +### Fixed + + - Fix XSS vulnerability caused by improper preservation of entities when rendering (#353) + +### Deprecated + + - Deprecated the `$preserveEntites` argument of `Xml::escape()` for removal in the next release (#353) + +## [0.18.2] - 2019-03-16 + +### Fixed + + - Fixed adjoining `Text` elements not being collapsed after delimiter processing + +### Deprecated + + - Deprecated the `CommonmarkConverter::VERSION` constant for removal in 1.0.0 + +## [0.18.1] - 2018-12-29 + +This is a **security update** release. + +### Fixed + + - Fix XSS vulnerability caused by URL normalization not handling/encoding newlines properly (#337, CVE-2018-20583) + +## [0.18.0] - 2018-09-18 + +### Added + + - Added `ConverterInterface` to `Converter` and `CommonMarkConverter` (#330) + - Added `ListItem::getListData()` method (#329) + +### Changed + + - Links with `target="_blank"` will also get `rel="noopener noreferrer"` by default (#331) + - Implemented several performance optimizations (#324) + +## [0.17.5] - 2018-03-29 + +### Fixed + + - Fixed incorrect version constant value (again) + - Fixed release checklist to prevent the above from happening + - Fixed incorrect dates in CHANGELOG + +## [0.17.4] - 2018-03-28 + +### Added + + - Added `ListBlock::setTight()` method + +## [0.17.3] - 2018-03-26 + +### Fixed + + - Fixed incorrect version constant value + +## [0.17.2] - 2018-03-25 + +### Added + + - Added new `RegexHelper::isEscapable()` method + +### Fixed + + - Fixed spec compliance bug where escaped spaces should not be allowed in link destinations + +## [0.17.1] - 2018-03-18 + +### Added + + - Added a new constant containing the current version: `CommonMarkConverter::VERSION` (#314) + +## [0.17.0] - 2017-12-30 + +This release contains several breaking changes and a minimum PHP version bump - see for more details. + +### Added + + - Added new `max_nesting_level` setting (#243) + - Added minor performance optimizations to `Cursor` + +### Changed + + - Minimum PHP version is now 5.6.5. + - All full and partial regular expressions in `RegexHelper` are now defined as constants instead of being built on-the-fly. + - `Cursor::saveState()` now returns an `array` instead of a `CursorState` object. + - `Cursor::restoreState()` now accepts an `array` parameter instead of a `CursorState` object. + - Saving/restoring the Cursor state no longer tracks things that don't change (like the text content). + - `RegexHelper` is now `final`. + - References to `InlineContainer` changed to new `InlineContainerInterface` interface. + - `MiscExtension::addInlineParser()` and `MiscExtension::addBlockRenderer()` now return `$this` instead of nothing. + +### Fixed + - Fixed `Reference::normalizeReference()` not properly collapsing whitespace to a single space + +### Deprecated + + - `RegexHelper::getInstance()` and all instance (non-static) methods have been deprecated. + - The `InlineContainer` interface has been deprecated. Use `InlineContainerInterface` instead. + +### Removed + + - Removed support for PHP 5.4 and 5.5. + - Removed `CursorState` class + - Removed all previous deprecations: + - `Cursor::getFirstNonSpacePosition()` + - `Cursor::getFirstNonSpaceCharacter()` + - `Cursor::advanceWhileMatches()` + - `Cursor::advanceToFirstNonSpace()` + - `ElementRendererInterface::escape()` + - `HtmlRenderer::escape()` + - `RegexHelper::REGEX_UNICODE_WHITESPACE` + - `RegexHelper::getLinkDestinationRegex()` + +## [0.16.0] - 2017-10-30 + +This release contains breaking changes, several performance improvements, and two deprecations: + +### Added + + - Added new `Xml` utility class; moved HTML/XML escaping logic into there (see deprecations below) + +### Changed + + - `Environment::getInlineParsersForCharacter()` now returns an empty array (instead of `null`) when no matching parsers are found + - Three utility classes are now marked `final`: + - `Html5Entities` + - `LinkParserHelper` + - `UrlEncoder` + +### Fixed + + - Improved performance of several methods (for a 10% overall performance boost - #292) + +### Deprecated + +The following methods were deprecated and are scheduled for removal in 0.17.0 or 1.0.0 (whichever comes first). See for more information. + + - `Cursor::advanceWhileMatches()` deprecated; use `Cursor::match()` instead. + - `HtmlRenderer::escape()` deprecated; use `Xml::escape()` instead. + +### Removed + + - Removed `DelimiterStack::findFirstMatchingOpener()` which was previously deprecated in 0.15.0 + +## [0.15.7] - 2017-10-26 + +### Fixed + + - Improved performance of `Cursor::advanceBy()` (for a 16% performance boost) + +## [0.15.6] - 2017-08-08 + +### Fixed + + - Fixed URI normalization not properly encoding/decoding special characters in certain cases (#287) + +## [0.15.5] - 2017-08-05 + +This release bumps spec compliance to 0.28 without breaking changes to the API. + +### Added + + - Project is now tested against PHP 7.2 + +### Changed + + - Bumped CommonMark spec target to 0.28 + - Changed internal implementation of `LinkParserHelper::parseLinkDestination()` to allow nested parens + - Changed precedence of strong/emph when both nestings are possible (rule 14) + - Allow tabs before and after ATX closing header + +### Fixed + + - Fixed HTML type 6 block regex matching against `
` (it shouldn't) and not matching `