diff --git a/.gitignore b/.gitignore index 6822a2688..3efdc55eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -/vendor/ -*.phar +deployer.phar .phpunit.result.cache docker-compose.override.yml .php-cs-fixer.cache diff --git a/bin/build b/bin/build index 9aed8cfc8..72d1546c3 100755 --- a/bin/build +++ b/bin/build @@ -24,8 +24,6 @@ if (!preg_match('/^\d+\.\d+\.\d+(\-\w+(\.\d+)?)?$/', $version)) { exit(1); } -echo `set -x; composer install --no-dev --prefer-dist --optimize-autoloader`; - $pharName = "deployer.phar"; $pharFile = __ROOT__ . '/' . $pharName; if (file_exists($pharFile)) { diff --git a/deps/composer.json b/deps/composer.json deleted file mode 100644 index 8b4bb48b2..000000000 --- a/deps/composer.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "require": { - "php": "^8.0|^7.3", - "ext-json": "*", - "justinrainbow/json-schema": "^5.2", - "psr/http-message": "^1", - "react/http": "^1.5", - "symfony/console": "^5.4.9", - "symfony/polyfill-php80": "^1.22", - "symfony/polyfill-php81": "^1.26", - "symfony/process": "^5", - "symfony/yaml": "^5" - } -} diff --git a/deps/composer.lock b/deps/composer.lock deleted file mode 100644 index 3042e95e4..000000000 --- a/deps/composer.lock +++ /dev/null @@ -1,4898 +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#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "2e4a876ba583ea7b5ddf4bebd46c0262", - "packages": [ - { - "name": "evenement/evenement", - "version": "v3.0.1", - "source": { - "type": "git", - "url": "https://github.com/igorw/evenement.git", - "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/igorw/evenement/zipball/531bfb9d15f8aa57454f5f0285b18bec903b8fb7", - "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7", - "shasum": "" - }, - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "Evenement": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - } - ], - "description": "Événement is a very simple event dispatching library for PHP", - "keywords": [ - "event-dispatcher", - "event-emitter" - ], - "support": { - "issues": "https://github.com/igorw/evenement/issues", - "source": "https://github.com/igorw/evenement/tree/master" - }, - "time": "2017-07-23T21:35:13+00:00" - }, - { - "name": "fig/http-message-util", - "version": "1.1.5", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message-util.git", - "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765", - "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0 || ^8.0" - }, - "suggest": { - "psr/http-message": "The package containing the PSR-7 interfaces" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Fig\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "issues": "https://github.com/php-fig/http-message-util/issues", - "source": "https://github.com/php-fig/http-message-util/tree/1.1.5" - }, - "time": "2020-11-24T22:02:12+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "5.2.11", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ab6744b7296ded80f8cc4f9509abbff393399aa", - "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.11" - }, - "time": "2021-07-22T09:24:00+00:00" - }, - { - "name": "psr/container", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "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.1" - }, - "time": "2021-03-05T17:36:06+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "react/cache", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/reactphp/cache.git", - "reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/cache/zipball/4bf736a2cccec7298bdf745db77585966fc2ca7e", - "reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "react/promise": "^3.0 || ^2.0 || ^1.1" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Async, Promise-based cache interface for ReactPHP", - "keywords": [ - "cache", - "caching", - "promise", - "reactphp" - ], - "support": { - "issues": "https://github.com/reactphp/cache/issues", - "source": "https://github.com/reactphp/cache/tree/v1.1.1" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2021-02-02T06:47:52+00:00" - }, - { - "name": "react/dns", - "version": "v1.9.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/dns.git", - "reference": "6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb", - "reference": "6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "react/cache": "^1.0 || ^0.6 || ^0.5", - "react/event-loop": "^1.2", - "react/promise": "^3.0 || ^2.7 || ^1.2.1", - "react/promise-timer": "^1.8" - }, - "require-dev": { - "clue/block-react": "^1.2", - "phpunit/phpunit": "^9.3 || ^4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Dns\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Async DNS resolver for ReactPHP", - "keywords": [ - "async", - "dns", - "dns-resolver", - "reactphp" - ], - "support": { - "issues": "https://github.com/reactphp/dns/issues", - "source": "https://github.com/reactphp/dns/tree/v1.9.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2021-12-20T08:46:54+00:00" - }, - { - "name": "react/event-loop", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/event-loop.git", - "reference": "be6dee480fc4692cec0504e65eb486e3be1aa6f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/be6dee480fc4692cec0504e65eb486e3be1aa6f2", - "reference": "be6dee480fc4692cec0504e65eb486e3be1aa6f2", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "suggest": { - "ext-event": "~1.0 for ExtEventLoop", - "ext-pcntl": "For signal handling support when using the StreamSelectLoop", - "ext-uv": "* for ExtUvLoop" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\EventLoop\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", - "keywords": [ - "asynchronous", - "event-loop" - ], - "support": { - "issues": "https://github.com/reactphp/event-loop/issues", - "source": "https://github.com/reactphp/event-loop/tree/v1.2.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2021-07-11T12:31:24+00:00" - }, - { - "name": "react/http", - "version": "v1.6.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/http.git", - "reference": "59961cc4a5b14481728f07c591546be18fa3a5c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/http/zipball/59961cc4a5b14481728f07c591546be18fa3a5c7", - "reference": "59961cc4a5b14481728f07c591546be18fa3a5c7", - "shasum": "" - }, - "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "fig/http-message-util": "^1.1", - "php": ">=5.3.0", - "psr/http-message": "^1.0", - "react/event-loop": "^1.2", - "react/promise": "^2.3 || ^1.2.1", - "react/promise-stream": "^1.1", - "react/socket": "^1.9", - "react/stream": "^1.2", - "ringcentral/psr7": "^1.2" - }, - "require-dev": { - "clue/block-react": "^1.5", - "clue/http-proxy-react": "^1.7", - "clue/reactphp-ssh-proxy": "^1.3", - "clue/socks-react": "^1.3", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Http\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Event-driven, streaming HTTP client and server implementation for ReactPHP", - "keywords": [ - "async", - "client", - "event-driven", - "http", - "http client", - "http server", - "https", - "psr-7", - "reactphp", - "server", - "streaming" - ], - "support": { - "issues": "https://github.com/reactphp/http/issues", - "source": "https://github.com/reactphp/http/tree/v1.6.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-02-03T13:17:37+00:00" - }, - { - "name": "react/promise", - "version": "v2.9.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", - "keywords": [ - "promise", - "promises" - ], - "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.9.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-02-11T10:27:51+00:00" - }, - { - "name": "react/promise-stream", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise-stream.git", - "reference": "3ebd94fe0d8edbf44937948af28d02d5437e9949" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise-stream/zipball/3ebd94fe0d8edbf44937948af28d02d5437e9949", - "reference": "3ebd94fe0d8edbf44937948af28d02d5437e9949", - "shasum": "" - }, - "require": { - "php": ">=5.3", - "react/promise": "^2.1 || ^1.2", - "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4.6" - }, - "require-dev": { - "clue/block-react": "^1.0", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", - "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3", - "react/promise-timer": "^1.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\Stream\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "The missing link between Promise-land and Stream-land for ReactPHP", - "homepage": "https://github.com/reactphp/promise-stream", - "keywords": [ - "Buffer", - "async", - "promise", - "reactphp", - "stream", - "unwrap" - ], - "support": { - "issues": "https://github.com/reactphp/promise-stream/issues", - "source": "https://github.com/reactphp/promise-stream/tree/v1.3.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2021-10-18T10:47:09+00:00" - }, - { - "name": "react/promise-timer", - "version": "v1.8.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise-timer.git", - "reference": "0bbbcc79589e5bfdddba68a287f1cb805581a479" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/0bbbcc79589e5bfdddba68a287f1cb805581a479", - "reference": "0bbbcc79589e5bfdddba68a287f1cb805581a479", - "shasum": "" - }, - "require": { - "php": ">=5.3", - "react/event-loop": "^1.2", - "react/promise": "^3.0 || ^2.7.0 || ^1.2.1" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\Timer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "A trivial implementation of timeouts for Promises, built on top of ReactPHP.", - "homepage": "https://github.com/reactphp/promise-timer", - "keywords": [ - "async", - "event-loop", - "promise", - "reactphp", - "timeout", - "timer" - ], - "support": { - "issues": "https://github.com/reactphp/promise-timer/issues", - "source": "https://github.com/reactphp/promise-timer/tree/v1.8.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2021-12-06T11:08:48+00:00" - }, - { - "name": "react/socket", - "version": "v1.11.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/socket.git", - "reference": "f474156aaab4f09041144fa8b57c7d70aed32a1c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/f474156aaab4f09041144fa8b57c7d70aed32a1c", - "reference": "f474156aaab4f09041144fa8b57c7d70aed32a1c", - "shasum": "" - }, - "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.0", - "react/dns": "^1.8", - "react/event-loop": "^1.2", - "react/promise": "^2.6.0 || ^1.2.1", - "react/promise-timer": "^1.8", - "react/stream": "^1.2" - }, - "require-dev": { - "clue/block-react": "^1.5", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", - "react/promise-stream": "^1.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Socket\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", - "keywords": [ - "Connection", - "Socket", - "async", - "reactphp", - "stream" - ], - "support": { - "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.11.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-01-14T10:14:32+00:00" - }, - { - "name": "react/stream", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/stream.git", - "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/stream/zipball/7a423506ee1903e89f1e08ec5f0ed430ff784ae9", - "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9", - "shasum": "" - }, - "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.8", - "react/event-loop": "^1.2" - }, - "require-dev": { - "clue/stream-filter": "~1.2", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Stream\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", - "keywords": [ - "event-driven", - "io", - "non-blocking", - "pipe", - "reactphp", - "readable", - "stream", - "writable" - ], - "support": { - "issues": "https://github.com/reactphp/stream/issues", - "source": "https://github.com/reactphp/stream/tree/v1.2.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2021-07-11T12:37:55+00:00" - }, - { - "name": "ringcentral/psr7", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/ringcentral/psr7.git", - "reference": "360faaec4b563958b673fb52bbe94e37f14bc686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ringcentral/psr7/zipball/360faaec4b563958b673fb52bbe94e37f14bc686", - "reference": "360faaec4b563958b673fb52bbe94e37f14bc686", - "shasum": "" - }, - "require": { - "php": ">=5.3", - "psr/http-message": "~1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "RingCentral\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "PSR-7 message implementation", - "keywords": [ - "http", - "message", - "stream", - "uri" - ], - "support": { - "source": "https://github.com/ringcentral/psr7/tree/master" - }, - "time": "2018-05-29T20:21:04+00:00" - }, - { - "name": "symfony/console", - "version": "v5.4.17", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f", - "reference": "58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f", - "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": "" - }, - "type": "library", - "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.17" - }, - "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-12-28T14:15:31+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.5.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" - }, - "type": "library", - "extra": { - "branch-alias": { - "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/polyfill-ctype", - "version": "v1.25.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" - }, - "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\\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" - } - ], - "time": "2021-10-20T20:35:02+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.25.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" - }, - "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\\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-normalizer", - "version": "v1.25.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" - }, - "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" - }, - "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\\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" - } - ], - "time": "2021-11-30T18:21:41+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.25.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" - }, - "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\\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" - } - ], - "time": "2021-06-05T21:20:04+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.25.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" - }, - "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\\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.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-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.26.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-05-24T11:49:31+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\\": "" - }, - "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" - } - ], - "time": "2022-01-30T18:16:22+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v2.5.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": "" - }, - "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\\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" - } - ], - "time": "2021-11-04T16:48:04+00:00" - }, - { - "name": "symfony/string", - "version": "v5.4.3", - "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" - }, - "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/yaml", - "version": "v5.4.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<5.3" - }, - "require-dev": { - "symfony/console": "^5.3|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "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": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/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:32:32+00:00" - } - ], - "packages-dev": [ - { - "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v0.7.2", - "source": { - "type": "git", - "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" - }, - "require-dev": { - "composer/composer": "*", - "php-parallel-lint/php-parallel-lint": "^1.3.1", - "phpcompatibility/php-compatibility": "^9.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" - }, - "autoload": { - "psr-4": { - "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Franck Nijhof", - "email": "franck.nijhof@dealerdirect.com", - "homepage": "http://www.frenck.nl", - "role": "Developer / IT Manager" - }, - { - "name": "Contributors", - "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" - } - ], - "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "homepage": "http://www.dealerdirect.com", - "keywords": [ - "PHPCodeSniffer", - "PHP_CodeSniffer", - "code quality", - "codesniffer", - "composer", - "installer", - "phpcbf", - "phpcs", - "plugin", - "qa", - "quality", - "standard", - "standards", - "style guide", - "stylecheck", - "tests" - ], - "support": { - "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", - "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" - }, - "time": "2022-02-04T12:51:07+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.4.1", - "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" - }, - "type": "library", - "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" - } - ], - "time": "2022-03-03T08:28:38+00:00" - }, - { - "name": "facade/ignition-contracts", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/facade/ignition-contracts.git", - "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", - "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^v2.15.8", - "phpunit/phpunit": "^9.3.11", - "vimeo/psalm": "^3.17.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Facade\\IgnitionContracts\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://flareapp.io", - "role": "Developer" - } - ], - "description": "Solution contracts for Ignition", - "homepage": "https://github.com/facade/ignition-contracts", - "keywords": [ - "contracts", - "flare", - "ignition" - ], - "support": { - "issues": "https://github.com/facade/ignition-contracts/issues", - "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" - }, - "time": "2020-10-16T08:27:54+00:00" - }, - { - "name": "filp/whoops", - "version": "2.14.5", - "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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "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" - } - ], - "time": "2022-01-07T12:00:00+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.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" - }, - "type": "library", - "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" - } - ], - "time": "2022-03-03T13:19:32+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.13.2", - "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" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "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" - }, - "time": "2021-11-30T19:35:32+00:00" - }, - { - "name": "nunomaduro/collision", - "version": "v5.11.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461", - "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461", - "shasum": "" - }, - "require": { - "facade/ignition-contracts": "^1.0", - "filp/whoops": "^2.14.3", - "php": "^7.3 || ^8.0", - "symfony/console": "^5.0" - }, - "require-dev": { - "brianium/paratest": "^6.1", - "fideloper/proxy": "^4.4.1", - "fruitcake/laravel-cors": "^2.0.3", - "laravel/framework": "8.x-dev", - "nunomaduro/larastan": "^0.6.2", - "nunomaduro/mock-final-classes": "^1.0", - "orchestra/testbench": "^6.0", - "phpstan/phpstan": "^0.12.64", - "phpunit/phpunit": "^9.5.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "NunoMaduro\\Collision\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Cli error handling for console/command-line PHP applications.", - "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "error", - "handling", - "laravel", - "laravel-zero", - "php", - "symfony" - ], - "support": { - "issues": "https://github.com/nunomaduro/collision/issues", - "source": "https://github.com/nunomaduro/collision" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2022-01-10T16:22:52+00:00" - }, - { - "name": "pestphp/pest", - "version": "v1.21.2", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest.git", - "reference": "63f009fadf9b37f611fda43928d03336475d5d9f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/63f009fadf9b37f611fda43928d03336475d5d9f", - "reference": "63f009fadf9b37f611fda43928d03336475d5d9f", - "shasum": "" - }, - "require": { - "nunomaduro/collision": "^5.10.0|^6.0", - "pestphp/pest-plugin": "^1.0.0", - "php": "^7.3 || ^8.0", - "phpunit/phpunit": "^9.5.5" - }, - "require-dev": { - "illuminate/console": "^8.47.0", - "illuminate/support": "^8.47.0", - "laravel/dusk": "^6.15.0", - "pestphp/pest-dev-tools": "dev-master", - "pestphp/pest-plugin-parallel": "^1.0" - }, - "bin": [ - "bin/pest" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - }, - "pest": { - "plugins": [ - "Pest\\Plugins\\Coverage", - "Pest\\Plugins\\Init", - "Pest\\Plugins\\Version", - "Pest\\Plugins\\Environment" - ] - }, - "laravel": { - "providers": [ - "Pest\\Laravel\\PestServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/Functions.php", - "src/Pest.php" - ], - "psr-4": { - "Pest\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "An elegant PHP Testing Framework.", - "keywords": [ - "framework", - "pest", - "php", - "test", - "testing", - "unit" - ], - "support": { - "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v1.21.2" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/lukeraymonddowning", - "type": "github" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://github.com/octoper", - "type": "github" - }, - { - "url": "https://github.com/olivernybroe", - "type": "github" - }, - { - "url": "https://github.com/owenvoke", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2022-03-05T19:34:40+00:00" - }, - { - "name": "pestphp/pest-plugin", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin.git", - "reference": "fc8519de148699fe612d9c669be60554cd2db4fa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/fc8519de148699fe612d9c669be60554cd2db4fa", - "reference": "fc8519de148699fe612d9c669be60554cd2db4fa", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1 || ^2.0", - "php": "^7.3 || ^8.0" - }, - "conflict": { - "pestphp/pest": "<1.0" - }, - "require-dev": { - "composer/composer": "^1.10.19", - "pestphp/pest": "^1.0", - "pestphp/pest-dev-tools": "dev-master" - }, - "type": "composer-plugin", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - }, - "class": "Pest\\Plugin\\Manager" - }, - "autoload": { - "psr-4": { - "Pest\\Plugin\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Pest plugin manager", - "keywords": [ - "framework", - "manager", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin/tree/v1.0.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2021-01-03T15:53:42+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "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)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" - }, - "time": "2021-07-20T11:28:43+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "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": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "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" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "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" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "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.1" - }, - "time": "2022-03-15T21:29:03+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.16.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "be8cac52a0827776ff9ccda8c381ac5b71aeb359" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be8cac52a0827776ff9ccda8c381ac5b71aeb359", - "reference": "be8cac52a0827776ff9ccda8c381ac5b71aeb359", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || 8.0.* || 8.1.* || 8.2.*", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "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.16.0" - }, - "time": "2022-11-29T15:06:56+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "1.4.2", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "4cb3021a4e10ffe3d5f94a4c34cf4b3f6de2fa3d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/4cb3021a4e10ffe3d5f94a4c34cf4b3f6de2fa3d", - "reference": "4cb3021a4e10ffe3d5f94a4c34cf4b3f6de2fa3d", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.4.2" - }, - "time": "2022-03-30T13:33:37+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "1.4.10", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "898c479c39caa727bedf4311dd294a8f4e250e72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/898c479c39caa727bedf4311dd294a8f4e250e72", - "reference": "898c479c39caa727bedf4311dd294a8f4e250e72", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "support": { - "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.4.10" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", - "type": "github" - }, - { - "url": "https://www.patreon.com/phpstan", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" - } - ], - "time": "2022-03-14T10:25:45+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.15", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-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": "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" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-03-07T09:28:20+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-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": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-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": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-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": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-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": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.5.20", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "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" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-04-01T12:37:26+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "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" - }, - "time": "2021-05-03T11:20:27+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "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", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "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", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "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/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "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": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:49:45+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-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": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-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" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:52:38+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "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": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-11-11T14:18:36+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.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" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-02-14T08:28:10+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "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", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "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/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "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/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "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/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:17:30+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "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", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-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": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-03-15T09:54:48+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-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": "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/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "slevomat/coding-standard", - "version": "7.1", - "source": { - "type": "git", - "url": "https://github.com/slevomat/coding-standard.git", - "reference": "b521bd358b5f7a7d69e9637fd139e036d8adeb6f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/b521bd358b5f7a7d69e9637fd139e036d8adeb6f", - "reference": "b521bd358b5f7a7d69e9637fd139e036d8adeb6f", - "shasum": "" - }, - "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", - "php": "^7.2 || ^8.0", - "phpstan/phpdoc-parser": "^1.4.1", - "squizlabs/php_codesniffer": "^3.6.2" - }, - "require-dev": { - "phing/phing": "2.17.2", - "php-parallel-lint/php-parallel-lint": "1.3.2", - "phpstan/phpstan": "1.4.10|1.5.2", - "phpstan/phpstan-deprecation-rules": "1.0.0", - "phpstan/phpstan-phpunit": "1.0.0|1.1.0", - "phpstan/phpstan-strict-rules": "1.1.0", - "phpunit/phpunit": "7.5.20|8.5.21|9.5.19" - }, - "type": "phpcodesniffer-standard", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, - "autoload": { - "psr-4": { - "SlevomatCodingStandard\\": "SlevomatCodingStandard" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", - "support": { - "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/7.1" - }, - "funding": [ - { - "url": "https://github.com/kukulich", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", - "type": "tidelift" - } - ], - "time": "2022-03-29T12:44:16+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.6.2", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - }, - "time": "2021-12-12T21:44:58+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.1", - "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" - }, - "type": "library", - "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" - } - ], - "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.10.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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "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" - }, - "time": "2021-03-09T10:59:23+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "^8.0|^7.3", - "ext-json": "*" - }, - "platform-dev": [], - "plugin-api-version": "2.3.0" -} diff --git a/deps/vendor/autoload.php b/deps/vendor/autoload.php deleted file mode 100644 index 7486648cf..000000000 --- a/deps/vendor/autoload.php +++ /dev/null @@ -1,25 +0,0 @@ -realpath = realpath($opened_path) ?: $opened_path; - $opened_path = $this->realpath; - $this->handle = fopen($this->realpath, $mode); - $this->position = 0; - - return (bool) $this->handle; - } - - public function stream_read($count) - { - $data = fread($this->handle, $count); - - if ($this->position === 0) { - $data = preg_replace('{^#!.*\r?\n}', '', $data); - } - - $this->position += strlen($data); - - return $data; - } - - public function stream_cast($castAs) - { - return $this->handle; - } - - public function stream_close() - { - fclose($this->handle); - } - - public function stream_lock($operation) - { - return $operation ? flock($this->handle, $operation) : true; - } - - public function stream_seek($offset, $whence) - { - if (0 === fseek($this->handle, $offset, $whence)) { - $this->position = ftell($this->handle); - return true; - } - - return false; - } - - public function stream_tell() - { - return $this->position; - } - - public function stream_eof() - { - return feof($this->handle); - } - - public function stream_stat() - { - return array(); - } - - public function stream_set_option($option, $arg1, $arg2) - { - return true; - } - - public function url_stat($path, $flags) - { - $path = substr($path, 17); - if (file_exists($path)) { - return stat($path); - } - - return false; - } - } - } - - if ( - (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true)) - || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) - ) { - return include("phpvfscomposer://" . __DIR__ . '/..'.'/justinrainbow/json-schema/bin/validate-json'); - } -} - -return include __DIR__ . '/..'.'/justinrainbow/json-schema/bin/validate-json'; diff --git a/deps/vendor/bin/yaml-lint b/deps/vendor/bin/yaml-lint deleted file mode 100755 index 388092f5b..000000000 --- a/deps/vendor/bin/yaml-lint +++ /dev/null @@ -1,119 +0,0 @@ -#!/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_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true)) - || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) - ) { - return include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint'); - } -} - -return include __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint'; diff --git a/deps/vendor/composer/InstalledVersions.php b/deps/vendor/composer/InstalledVersions.php deleted file mode 100644 index 51e734a77..000000000 --- a/deps/vendor/composer/InstalledVersions.php +++ /dev/null @@ -1,359 +0,0 @@ - - * 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` - * - * @final - */ -class InstalledVersions -{ - /** - * @var mixed[]|null - * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|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 || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; - } - } - - return false; - } - - /** - * Checks whether the given package satisfies a version constraint - * - * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: - * - * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') - * - * @param VersionParser $parser Install composer/semver to have access to this class and functionality - * @param string $packageName - * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package - * @return bool - */ - public static function satisfies(VersionParser $parser, $packageName, $constraint) - { - $constraint = $parser->parseConstraints((string) $constraint); - $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); - - return $provided->matches($constraint); - } - - /** - * Returns a version constraint representing all the range(s) which are installed for a given package - * - * It is easier to use this via isInstalled() with the $constraint argument if you need to check - * whether a given version of a package is installed, and not just whether it exists - * - * @param string $packageName - * @return string Version constraint usable with composer/semver - */ - public static function getVersionRanges($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - $ranges = array(); - if (isset($installed['versions'][$packageName]['pretty_version'])) { - $ranges[] = $installed['versions'][$packageName]['pretty_version']; - } - if (array_key_exists('aliases', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); - } - if (array_key_exists('replaced', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); - } - if (array_key_exists('provided', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); - } - - return implode(' || ', $ranges); - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['version'])) { - return null; - } - - return $installed['versions'][$packageName]['version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getPrettyVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['pretty_version'])) { - return null; - } - - return $installed['versions'][$packageName]['pretty_version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference - */ - public static function getReference($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['reference'])) { - return null; - } - - return $installed['versions'][$packageName]['reference']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. - */ - public static function getInstallPath($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @return array - * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} - */ - public static function getRootPackage() - { - $installed = self::getInstalled(); - - return $installed[0]['root']; - } - - /** - * Returns the raw installed.php data for custom implementations - * - * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. - * @return array[] - * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} - */ - 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, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, 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')) { - /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ - $required = require $vendorDir.'/composer/installed.php'; - $installed[] = self::$installedByVendor[$vendorDir] = $required; - if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { - self::$installed = $installed[count($installed) - 1]; - } - } - } - } - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ - $required = require __DIR__ . '/installed.php'; - self::$installed = $required; - } else { - self::$installed = array(); - } - } - - if (self::$installed !== array()) { - $installed[] = self::$installed; - } - - return $installed; - } -} diff --git a/deps/vendor/composer/LICENSE b/deps/vendor/composer/LICENSE deleted file mode 100644 index f27399a04..000000000 --- a/deps/vendor/composer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - -Copyright (c) Nils Adermann, Jordi Boggiano - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/deps/vendor/composer/autoload_classmap.php b/deps/vendor/composer/autoload_classmap.php deleted file mode 100644 index 8d72fe0f8..000000000 --- a/deps/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,18 +0,0 @@ - $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', - 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', - 'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', - 'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', - 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', - 'ReturnTypeWillChange' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', - 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', - 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', - 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', -); diff --git a/deps/vendor/composer/autoload_real.php b/deps/vendor/composer/autoload_real.php deleted file mode 100644 index 5492b3fc9..000000000 --- a/deps/vendor/composer/autoload_real.php +++ /dev/null @@ -1,48 +0,0 @@ -register(true); - - $filesToLoad = \Composer\Autoload\ComposerStaticInit6e0324fc886fd55694e53338d30399bc::$files; - $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - - require $file; - } - }, null, null); - foreach ($filesToLoad as $fileIdentifier => $file) { - $requireFile($fileIdentifier, $file); - } - - return $loader; - } -} diff --git a/deps/vendor/composer/autoload_static.php b/deps/vendor/composer/autoload_static.php deleted file mode 100644 index 853e559e5..000000000 --- a/deps/vendor/composer/autoload_static.php +++ /dev/null @@ -1,208 +0,0 @@ - __DIR__ . '/..' . '/react/promise/src/functions_include.php', - '972fda704d680a3a53c68e34e193cb22' => __DIR__ . '/..' . '/react/promise-timer/src/functions_include.php', - '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', - 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', - '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', - '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', - '8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php', - 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', - 'cea474b4340aa9fa53661e887a21a316' => __DIR__ . '/..' . '/react/promise-stream/src/functions_include.php', - 'ebf8799635f67b5d7248946fe2154f4a' => __DIR__ . '/..' . '/ringcentral/psr7/src/functions_include.php', - '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php', - 'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php', - '23c18046f52bef3eea034657bafda50f' => __DIR__ . '/..' . '/symfony/polyfill-php81/bootstrap.php', - ); - - public static $prefixLengthsPsr4 = array ( - 'S' => - array ( - 'Symfony\\Polyfill\\Php81\\' => 23, - 'Symfony\\Polyfill\\Php80\\' => 23, - 'Symfony\\Polyfill\\Php73\\' => 23, - 'Symfony\\Polyfill\\Mbstring\\' => 26, - 'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33, - 'Symfony\\Polyfill\\Intl\\Grapheme\\' => 31, - 'Symfony\\Polyfill\\Ctype\\' => 23, - 'Symfony\\Contracts\\Service\\' => 26, - 'Symfony\\Component\\Yaml\\' => 23, - 'Symfony\\Component\\String\\' => 25, - 'Symfony\\Component\\Process\\' => 26, - 'Symfony\\Component\\Console\\' => 26, - ), - 'R' => - array ( - 'RingCentral\\Psr7\\' => 17, - 'React\\Stream\\' => 13, - 'React\\Socket\\' => 13, - 'React\\Promise\\Timer\\' => 20, - 'React\\Promise\\Stream\\' => 21, - 'React\\Promise\\' => 14, - 'React\\Http\\' => 11, - 'React\\EventLoop\\' => 16, - 'React\\Dns\\' => 10, - 'React\\Cache\\' => 12, - ), - 'P' => - array ( - 'Psr\\Http\\Message\\' => 17, - 'Psr\\Container\\' => 14, - ), - 'J' => - array ( - 'JsonSchema\\' => 11, - ), - 'F' => - array ( - 'Fig\\Http\\Message\\' => 17, - ), - ); - - public static $prefixDirsPsr4 = array ( - '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', - ), - 'Symfony\\Polyfill\\Mbstring\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', - ), - 'Symfony\\Polyfill\\Intl\\Normalizer\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer', - ), - 'Symfony\\Polyfill\\Intl\\Grapheme\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme', - ), - 'Symfony\\Polyfill\\Ctype\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', - ), - 'Symfony\\Contracts\\Service\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/service-contracts', - ), - 'Symfony\\Component\\Yaml\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/yaml', - ), - 'Symfony\\Component\\String\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/string', - ), - 'Symfony\\Component\\Process\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/process', - ), - 'Symfony\\Component\\Console\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/console', - ), - 'RingCentral\\Psr7\\' => - array ( - 0 => __DIR__ . '/..' . '/ringcentral/psr7/src', - ), - 'React\\Stream\\' => - array ( - 0 => __DIR__ . '/..' . '/react/stream/src', - ), - 'React\\Socket\\' => - array ( - 0 => __DIR__ . '/..' . '/react/socket/src', - ), - 'React\\Promise\\Timer\\' => - array ( - 0 => __DIR__ . '/..' . '/react/promise-timer/src', - ), - 'React\\Promise\\Stream\\' => - array ( - 0 => __DIR__ . '/..' . '/react/promise-stream/src', - ), - 'React\\Promise\\' => - array ( - 0 => __DIR__ . '/..' . '/react/promise/src', - ), - 'React\\Http\\' => - array ( - 0 => __DIR__ . '/..' . '/react/http/src', - ), - 'React\\EventLoop\\' => - array ( - 0 => __DIR__ . '/..' . '/react/event-loop/src', - ), - 'React\\Dns\\' => - array ( - 0 => __DIR__ . '/..' . '/react/dns/src', - ), - 'React\\Cache\\' => - array ( - 0 => __DIR__ . '/..' . '/react/cache/src', - ), - 'Psr\\Http\\Message\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/http-message/src', - ), - 'Psr\\Container\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/container/src', - ), - 'JsonSchema\\' => - array ( - 0 => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema', - ), - 'Fig\\Http\\Message\\' => - array ( - 0 => __DIR__ . '/..' . '/fig/http-message-util/src', - ), - ); - - public static $prefixesPsr0 = array ( - 'E' => - array ( - 'Evenement' => - array ( - 0 => __DIR__ . '/..' . '/evenement/evenement/src', - ), - ), - ); - - public static $classMap = array ( - 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', - 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', - 'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', - 'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', - 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', - 'ReturnTypeWillChange' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', - 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', - 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', - 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit6e0324fc886fd55694e53338d30399bc::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit6e0324fc886fd55694e53338d30399bc::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInit6e0324fc886fd55694e53338d30399bc::$prefixesPsr0; - $loader->classMap = ComposerStaticInit6e0324fc886fd55694e53338d30399bc::$classMap; - - }, null, ClassLoader::class); - } -} diff --git a/deps/vendor/composer/installed.json b/deps/vendor/composer/installed.json deleted file mode 100644 index 379a5f682..000000000 --- a/deps/vendor/composer/installed.json +++ /dev/null @@ -1,2208 +0,0 @@ -{ - "packages": [ - { - "name": "evenement/evenement", - "version": "v3.0.1", - "version_normalized": "3.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/igorw/evenement.git", - "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/igorw/evenement/zipball/531bfb9d15f8aa57454f5f0285b18bec903b8fb7", - "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7", - "shasum": "" - }, - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "time": "2017-07-23T21:35:13+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "Evenement": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - } - ], - "description": "Événement is a very simple event dispatching library for PHP", - "keywords": [ - "event-dispatcher", - "event-emitter" - ], - "support": { - "issues": "https://github.com/igorw/evenement/issues", - "source": "https://github.com/igorw/evenement/tree/master" - }, - "install-path": "../evenement/evenement" - }, - { - "name": "fig/http-message-util", - "version": "1.1.5", - "version_normalized": "1.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message-util.git", - "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765", - "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0 || ^8.0" - }, - "suggest": { - "psr/http-message": "The package containing the PSR-7 interfaces" - }, - "time": "2020-11-24T22:02:12+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Fig\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "issues": "https://github.com/php-fig/http-message-util/issues", - "source": "https://github.com/php-fig/http-message-util/tree/1.1.5" - }, - "install-path": "../fig/http-message-util" - }, - { - "name": "justinrainbow/json-schema", - "version": "5.2.11", - "version_normalized": "5.2.11.0", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ab6744b7296ded80f8cc4f9509abbff393399aa", - "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "time": "2021-07-22T09:24:00+00:00", - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.11" - }, - "install-path": "../justinrainbow/json-schema" - }, - { - "name": "psr/container", - "version": "1.1.1", - "version_normalized": "1.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "time": "2021-03-05T17:36:06+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.1" - }, - "install-path": "../psr/container" - }, - { - "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" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "install-path": "../psr/http-message" - }, - { - "name": "react/cache", - "version": "v1.1.1", - "version_normalized": "1.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/cache.git", - "reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/cache/zipball/4bf736a2cccec7298bdf745db77585966fc2ca7e", - "reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "react/promise": "^3.0 || ^2.0 || ^1.1" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "time": "2021-02-02T06:47:52+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "React\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Async, Promise-based cache interface for ReactPHP", - "keywords": [ - "cache", - "caching", - "promise", - "reactphp" - ], - "support": { - "issues": "https://github.com/reactphp/cache/issues", - "source": "https://github.com/reactphp/cache/tree/v1.1.1" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "install-path": "../react/cache" - }, - { - "name": "react/dns", - "version": "v1.9.0", - "version_normalized": "1.9.0.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/dns.git", - "reference": "6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb", - "reference": "6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "react/cache": "^1.0 || ^0.6 || ^0.5", - "react/event-loop": "^1.2", - "react/promise": "^3.0 || ^2.7 || ^1.2.1", - "react/promise-timer": "^1.8" - }, - "require-dev": { - "clue/block-react": "^1.2", - "phpunit/phpunit": "^9.3 || ^4.8.35" - }, - "time": "2021-12-20T08:46:54+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "React\\Dns\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Async DNS resolver for ReactPHP", - "keywords": [ - "async", - "dns", - "dns-resolver", - "reactphp" - ], - "support": { - "issues": "https://github.com/reactphp/dns/issues", - "source": "https://github.com/reactphp/dns/tree/v1.9.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "install-path": "../react/dns" - }, - { - "name": "react/event-loop", - "version": "v1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/event-loop.git", - "reference": "be6dee480fc4692cec0504e65eb486e3be1aa6f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/be6dee480fc4692cec0504e65eb486e3be1aa6f2", - "reference": "be6dee480fc4692cec0504e65eb486e3be1aa6f2", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "suggest": { - "ext-event": "~1.0 for ExtEventLoop", - "ext-pcntl": "For signal handling support when using the StreamSelectLoop", - "ext-uv": "* for ExtUvLoop" - }, - "time": "2021-07-11T12:31:24+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "React\\EventLoop\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", - "keywords": [ - "asynchronous", - "event-loop" - ], - "support": { - "issues": "https://github.com/reactphp/event-loop/issues", - "source": "https://github.com/reactphp/event-loop/tree/v1.2.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "install-path": "../react/event-loop" - }, - { - "name": "react/http", - "version": "v1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/http.git", - "reference": "59961cc4a5b14481728f07c591546be18fa3a5c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/http/zipball/59961cc4a5b14481728f07c591546be18fa3a5c7", - "reference": "59961cc4a5b14481728f07c591546be18fa3a5c7", - "shasum": "" - }, - "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "fig/http-message-util": "^1.1", - "php": ">=5.3.0", - "psr/http-message": "^1.0", - "react/event-loop": "^1.2", - "react/promise": "^2.3 || ^1.2.1", - "react/promise-stream": "^1.1", - "react/socket": "^1.9", - "react/stream": "^1.2", - "ringcentral/psr7": "^1.2" - }, - "require-dev": { - "clue/block-react": "^1.5", - "clue/http-proxy-react": "^1.7", - "clue/reactphp-ssh-proxy": "^1.3", - "clue/socks-react": "^1.3", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "time": "2022-02-03T13:17:37+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "React\\Http\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Event-driven, streaming HTTP client and server implementation for ReactPHP", - "keywords": [ - "async", - "client", - "event-driven", - "http", - "http client", - "http server", - "https", - "psr-7", - "reactphp", - "server", - "streaming" - ], - "support": { - "issues": "https://github.com/reactphp/http/issues", - "source": "https://github.com/reactphp/http/tree/v1.6.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "install-path": "../react/http" - }, - { - "name": "react/promise", - "version": "v2.9.0", - "version_normalized": "2.9.0.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" - }, - "time": "2022-02-11T10:27:51+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", - "keywords": [ - "promise", - "promises" - ], - "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.9.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "install-path": "../react/promise" - }, - { - "name": "react/promise-stream", - "version": "v1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise-stream.git", - "reference": "3ebd94fe0d8edbf44937948af28d02d5437e9949" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise-stream/zipball/3ebd94fe0d8edbf44937948af28d02d5437e9949", - "reference": "3ebd94fe0d8edbf44937948af28d02d5437e9949", - "shasum": "" - }, - "require": { - "php": ">=5.3", - "react/promise": "^2.1 || ^1.2", - "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4.6" - }, - "require-dev": { - "clue/block-react": "^1.0", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", - "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3", - "react/promise-timer": "^1.0" - }, - "time": "2021-10-18T10:47:09+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\Stream\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "The missing link between Promise-land and Stream-land for ReactPHP", - "homepage": "https://github.com/reactphp/promise-stream", - "keywords": [ - "Buffer", - "async", - "promise", - "reactphp", - "stream", - "unwrap" - ], - "support": { - "issues": "https://github.com/reactphp/promise-stream/issues", - "source": "https://github.com/reactphp/promise-stream/tree/v1.3.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "install-path": "../react/promise-stream" - }, - { - "name": "react/promise-timer", - "version": "v1.8.0", - "version_normalized": "1.8.0.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise-timer.git", - "reference": "0bbbcc79589e5bfdddba68a287f1cb805581a479" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/0bbbcc79589e5bfdddba68a287f1cb805581a479", - "reference": "0bbbcc79589e5bfdddba68a287f1cb805581a479", - "shasum": "" - }, - "require": { - "php": ">=5.3", - "react/event-loop": "^1.2", - "react/promise": "^3.0 || ^2.7.0 || ^1.2.1" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "time": "2021-12-06T11:08:48+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\Timer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "A trivial implementation of timeouts for Promises, built on top of ReactPHP.", - "homepage": "https://github.com/reactphp/promise-timer", - "keywords": [ - "async", - "event-loop", - "promise", - "reactphp", - "timeout", - "timer" - ], - "support": { - "issues": "https://github.com/reactphp/promise-timer/issues", - "source": "https://github.com/reactphp/promise-timer/tree/v1.8.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "install-path": "../react/promise-timer" - }, - { - "name": "react/socket", - "version": "v1.11.0", - "version_normalized": "1.11.0.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/socket.git", - "reference": "f474156aaab4f09041144fa8b57c7d70aed32a1c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/f474156aaab4f09041144fa8b57c7d70aed32a1c", - "reference": "f474156aaab4f09041144fa8b57c7d70aed32a1c", - "shasum": "" - }, - "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.0", - "react/dns": "^1.8", - "react/event-loop": "^1.2", - "react/promise": "^2.6.0 || ^1.2.1", - "react/promise-timer": "^1.8", - "react/stream": "^1.2" - }, - "require-dev": { - "clue/block-react": "^1.5", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", - "react/promise-stream": "^1.2" - }, - "time": "2022-01-14T10:14:32+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "React\\Socket\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", - "keywords": [ - "Connection", - "Socket", - "async", - "reactphp", - "stream" - ], - "support": { - "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.11.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "install-path": "../react/socket" - }, - { - "name": "react/stream", - "version": "v1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/stream.git", - "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/stream/zipball/7a423506ee1903e89f1e08ec5f0ed430ff784ae9", - "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9", - "shasum": "" - }, - "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.8", - "react/event-loop": "^1.2" - }, - "require-dev": { - "clue/stream-filter": "~1.2", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "time": "2021-07-11T12:37:55+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "React\\Stream\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", - "keywords": [ - "event-driven", - "io", - "non-blocking", - "pipe", - "reactphp", - "readable", - "stream", - "writable" - ], - "support": { - "issues": "https://github.com/reactphp/stream/issues", - "source": "https://github.com/reactphp/stream/tree/v1.2.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "install-path": "../react/stream" - }, - { - "name": "ringcentral/psr7", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/ringcentral/psr7.git", - "reference": "360faaec4b563958b673fb52bbe94e37f14bc686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ringcentral/psr7/zipball/360faaec4b563958b673fb52bbe94e37f14bc686", - "reference": "360faaec4b563958b673fb52bbe94e37f14bc686", - "shasum": "" - }, - "require": { - "php": ">=5.3", - "psr/http-message": "~1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "time": "2018-05-29T20:21:04+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "RingCentral\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "PSR-7 message implementation", - "keywords": [ - "http", - "message", - "stream", - "uri" - ], - "support": { - "source": "https://github.com/ringcentral/psr7/tree/master" - }, - "install-path": "../ringcentral/psr7" - }, - { - "name": "symfony/console", - "version": "v5.4.17", - "version_normalized": "5.4.17.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f", - "reference": "58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f", - "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-12-28T14:15:31+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.17" - }, - "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/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/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-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-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-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.26.0", - "version_normalized": "1.26.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "time": "2022-05-24T11:49:31+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-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.26.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/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/yaml", - "version": "v5.4.3", - "version_normalized": "5.4.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<5.3" - }, - "require-dev": { - "symfony/console": "^5.3|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "time": "2022-01-26T16:32:32+00:00", - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "installation-source": "dist", - "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": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/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/yaml" - } - ], - "dev": false, - "dev-package-names": [] -} diff --git a/deps/vendor/composer/installed.php b/deps/vendor/composer/installed.php deleted file mode 100644 index 1ec93e724..000000000 --- a/deps/vendor/composer/installed.php +++ /dev/null @@ -1,287 +0,0 @@ - array( - 'name' => '__root__', - 'pretty_version' => 'dev-master', - 'version' => 'dev-master', - 'reference' => 'b29bfee344eadad849be1bc7b6b11751ee4924eb', - 'type' => 'library', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'dev' => false, - ), - 'versions' => array( - '__root__' => array( - 'pretty_version' => 'dev-master', - 'version' => 'dev-master', - 'reference' => 'b29bfee344eadad849be1bc7b6b11751ee4924eb', - 'type' => 'library', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'evenement/evenement' => array( - 'pretty_version' => 'v3.0.1', - 'version' => '3.0.1.0', - 'reference' => '531bfb9d15f8aa57454f5f0285b18bec903b8fb7', - 'type' => 'library', - 'install_path' => __DIR__ . '/../evenement/evenement', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'fig/http-message-util' => array( - 'pretty_version' => '1.1.5', - 'version' => '1.1.5.0', - 'reference' => '9d94dc0154230ac39e5bf89398b324a86f63f765', - 'type' => 'library', - 'install_path' => __DIR__ . '/../fig/http-message-util', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'justinrainbow/json-schema' => array( - 'pretty_version' => '5.2.11', - 'version' => '5.2.11.0', - 'reference' => '2ab6744b7296ded80f8cc4f9509abbff393399aa', - 'type' => 'library', - 'install_path' => __DIR__ . '/../justinrainbow/json-schema', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'psr/container' => array( - 'pretty_version' => '1.1.1', - 'version' => '1.1.1.0', - 'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/container', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'psr/http-message' => array( - 'pretty_version' => '1.0.1', - 'version' => '1.0.1.0', - 'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/http-message', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'psr/http-message-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.0', - ), - ), - 'psr/log-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.0|2.0', - ), - ), - 'react/cache' => array( - 'pretty_version' => 'v1.1.1', - 'version' => '1.1.1.0', - 'reference' => '4bf736a2cccec7298bdf745db77585966fc2ca7e', - 'type' => 'library', - 'install_path' => __DIR__ . '/../react/cache', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'react/dns' => array( - 'pretty_version' => 'v1.9.0', - 'version' => '1.9.0.0', - 'reference' => '6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb', - 'type' => 'library', - 'install_path' => __DIR__ . '/../react/dns', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'react/event-loop' => array( - 'pretty_version' => 'v1.2.0', - 'version' => '1.2.0.0', - 'reference' => 'be6dee480fc4692cec0504e65eb486e3be1aa6f2', - 'type' => 'library', - 'install_path' => __DIR__ . '/../react/event-loop', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'react/http' => array( - 'pretty_version' => 'v1.6.0', - 'version' => '1.6.0.0', - 'reference' => '59961cc4a5b14481728f07c591546be18fa3a5c7', - 'type' => 'library', - 'install_path' => __DIR__ . '/../react/http', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'react/promise' => array( - 'pretty_version' => 'v2.9.0', - 'version' => '2.9.0.0', - 'reference' => '234f8fd1023c9158e2314fa9d7d0e6a83db42910', - 'type' => 'library', - 'install_path' => __DIR__ . '/../react/promise', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'react/promise-stream' => array( - 'pretty_version' => 'v1.3.0', - 'version' => '1.3.0.0', - 'reference' => '3ebd94fe0d8edbf44937948af28d02d5437e9949', - 'type' => 'library', - 'install_path' => __DIR__ . '/../react/promise-stream', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'react/promise-timer' => array( - 'pretty_version' => 'v1.8.0', - 'version' => '1.8.0.0', - 'reference' => '0bbbcc79589e5bfdddba68a287f1cb805581a479', - 'type' => 'library', - 'install_path' => __DIR__ . '/../react/promise-timer', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'react/socket' => array( - 'pretty_version' => 'v1.11.0', - 'version' => '1.11.0.0', - 'reference' => 'f474156aaab4f09041144fa8b57c7d70aed32a1c', - 'type' => 'library', - 'install_path' => __DIR__ . '/../react/socket', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'react/stream' => array( - 'pretty_version' => 'v1.2.0', - 'version' => '1.2.0.0', - 'reference' => '7a423506ee1903e89f1e08ec5f0ed430ff784ae9', - 'type' => 'library', - 'install_path' => __DIR__ . '/../react/stream', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'ringcentral/psr7' => array( - 'pretty_version' => '1.3.0', - 'version' => '1.3.0.0', - 'reference' => '360faaec4b563958b673fb52bbe94e37f14bc686', - 'type' => 'library', - 'install_path' => __DIR__ . '/../ringcentral/psr7', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/console' => array( - 'pretty_version' => 'v5.4.17', - 'version' => '5.4.17.0', - 'reference' => '58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/console', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/deprecation-contracts' => array( - 'pretty_version' => 'v2.5.0', - 'version' => '2.5.0.0', - 'reference' => '6f981ee24cf69ee7ce9736146d1c57c2780598a8', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-ctype' => array( - 'pretty_version' => 'v1.25.0', - 'version' => '1.25.0.0', - 'reference' => '30885182c981ab175d4d034db0f6f469898070ab', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-intl-grapheme' => array( - 'pretty_version' => 'v1.25.0', - 'version' => '1.25.0.0', - 'reference' => '81b86b50cf841a64252b439e738e97f4a34e2783', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-intl-normalizer' => array( - 'pretty_version' => 'v1.25.0', - 'version' => '1.25.0.0', - 'reference' => '8590a5f561694770bdcd3f9b5c69dde6945028e8', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-mbstring' => array( - 'pretty_version' => 'v1.25.0', - 'version' => '1.25.0.0', - 'reference' => '0abb51d2f102e00a4eefcf46ba7fec406d245825', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-php73' => array( - 'pretty_version' => 'v1.25.0', - 'version' => '1.25.0.0', - 'reference' => 'cc5db0e22b3cb4111010e48785a97f670b350ca5', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-php73', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-php80' => array( - 'pretty_version' => 'v1.25.0', - 'version' => '1.25.0.0', - 'reference' => '4407588e0d3f1f52efb65fbe92babe41f37fe50c', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-php80', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-php81' => array( - 'pretty_version' => 'v1.26.0', - 'version' => '1.26.0.0', - 'reference' => '13f6d1271c663dc5ae9fb843a8f16521db7687a1', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-php81', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/process' => array( - 'pretty_version' => 'v5.4.5', - 'version' => '5.4.5.0', - 'reference' => '95440409896f90a5f85db07a32b517ecec17fa4c', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/process', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/service-contracts' => array( - 'pretty_version' => 'v2.5.0', - 'version' => '2.5.0.0', - 'reference' => '1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/service-contracts', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/string' => array( - 'pretty_version' => 'v5.4.3', - 'version' => '5.4.3.0', - 'reference' => '92043b7d8383e48104e411bc9434b260dbeb5a10', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/string', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/yaml' => array( - 'pretty_version' => 'v5.4.3', - 'version' => '5.4.3.0', - 'reference' => 'e80f87d2c9495966768310fc531b487ce64237a2', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/yaml', - 'aliases' => array(), - 'dev_requirement' => false, - ), - ), -); diff --git a/deps/vendor/evenement/evenement/.gitignore b/deps/vendor/evenement/evenement/.gitignore deleted file mode 100644 index 987e2a253..000000000 --- a/deps/vendor/evenement/evenement/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -composer.lock -vendor diff --git a/deps/vendor/evenement/evenement/.travis.yml b/deps/vendor/evenement/evenement/.travis.yml deleted file mode 100644 index 65ba0ced9..000000000 --- a/deps/vendor/evenement/evenement/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ -language: php - -php: - - 7.0 - - 7.1 - - hhvm - - nightly - -matrix: - allow_failures: - - php: hhvm - - php: nightly - -before_script: - - wget http://getcomposer.org/composer.phar - - php composer.phar install - -script: - - ./vendor/bin/phpunit --coverage-text - - php -n examples/benchmark-emit-no-arguments.php - - php -n examples/benchmark-emit-one-argument.php - - php -n examples/benchmark-emit.php - - php -n examples/benchmark-emit-once.php - - php -n examples/benchmark-remove-listener-once.php diff --git a/deps/vendor/evenement/evenement/CHANGELOG.md b/deps/vendor/evenement/evenement/CHANGELOG.md deleted file mode 100644 index 568f2295a..000000000 --- a/deps/vendor/evenement/evenement/CHANGELOG.md +++ /dev/null @@ -1,35 +0,0 @@ -CHANGELOG -========= - - -* v3.0.1 (2017-07-23) - - * Resolved regression introduced in once listeners in v3.0.0 [#49](https://github.com/igorw/evenement/pull/49) - -* v3.0.0 (2017-07-23) - - * Passing null as event name throw exception [#46](https://github.com/igorw/evenement/pull/46), and [#47](https://github.com/igorw/evenement/pull/47) - * Performance improvements [#39](https://github.com/igorw/evenement/pull/39), and [#45](https://github.com/igorw/evenement/pull/45) - * Remove once listeners [#44](https://github.com/igorw/evenement/pull/44), [#45](https://github.com/igorw/evenement/pull/45) - -* v2.1.0 (2017-07-17) - - * Chaining for "on" method [#30](https://github.com/igorw/evenement/pull/30) - * Unit tests (on Travis) improvements [#33](https://github.com/igorw/evenement/pull/33), [#36](https://github.com/igorw/evenement/pull/36), and [#37](https://github.com/igorw/evenement/pull/37) - * Benchmarks added [#35](https://github.com/igorw/evenement/pull/35), and [#40](https://github.com/igorw/evenement/pull/40) - * Minor performance improvements [#42](https://github.com/igorw/evenement/pull/42), and [#38](https://github.com/igorw/evenement/pull/38) - -* v2.0.0 (2012-11-02) - - * Require PHP >=5.4.0 - * Added EventEmitterTrait - * Removed EventEmitter2 - -* v1.1.0 (2017-07-17) - - * Chaining for "on" method [#29](https://github.com/igorw/evenement/pull/29) - * Minor performance improvements [#43](https://github.com/igorw/evenement/pull/43) - -* v1.0.0 (2012-05-30) - - * Inital stable release diff --git a/deps/vendor/evenement/evenement/LICENSE b/deps/vendor/evenement/evenement/LICENSE deleted file mode 100644 index d9a37d0a0..000000000 --- a/deps/vendor/evenement/evenement/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Igor Wiedler - -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/deps/vendor/evenement/evenement/README.md b/deps/vendor/evenement/evenement/README.md deleted file mode 100644 index 94430119b..000000000 --- a/deps/vendor/evenement/evenement/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# Événement - -Événement is a very simple event dispatching library for PHP. - -It has the same design goals as [Silex](http://silex-project.org) and -[Pimple](http://pimple-project.org), to empower the user while staying concise -and simple. - -It is very strongly inspired by the EventEmitter API found in -[node.js](http://nodejs.org). - -[![Build Status](https://secure.travis-ci.org/igorw/evenement.png?branch=master)](http://travis-ci.org/igorw/evenement) - -## Fetch - -The recommended way to install Événement is [through composer](http://getcomposer.org). - -Just create a composer.json file for your project: - -```JSON -{ - "require": { - "evenement/evenement": "^3.0 || ^2.0" - } -} -``` - -**Note:** The `3.x` version of Événement requires PHP 7 and the `2.x` version requires PHP 5.4. If you are -using PHP 5.3, please use the `1.x` version: - -```JSON -{ - "require": { - "evenement/evenement": "^1.0" - } -} -``` - -And run these two commands to install it: - - $ curl -s http://getcomposer.org/installer | php - $ php composer.phar install - -Now you can add the autoloader, and you will have access to the library: - -```php -on('user.created', function (User $user) use ($logger) { - $logger->log(sprintf("User '%s' was created.", $user->getLogin())); -}); -``` - -### Emitting Events - -```php -emit('user.created', [$user]); -``` - -Tests ------ - - $ ./vendor/bin/phpunit - -License -------- -MIT, see LICENSE. diff --git a/deps/vendor/evenement/evenement/composer.json b/deps/vendor/evenement/evenement/composer.json deleted file mode 100644 index cbb4827b6..000000000 --- a/deps/vendor/evenement/evenement/composer.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "evenement/evenement", - "description": "Événement is a very simple event dispatching library for PHP", - "keywords": ["event-dispatcher", "event-emitter"], - "license": "MIT", - "authors": [ - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - } - ], - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "autoload": { - "psr-0": { - "Evenement": "src" - } - }, - "autoload-dev": { - "psr-0": { - "Evenement": "tests" - }, - "files": ["tests/Evenement/Tests/functions.php"] - } -} diff --git a/deps/vendor/evenement/evenement/doc/00-intro.md b/deps/vendor/evenement/evenement/doc/00-intro.md deleted file mode 100644 index 6c28a2ab2..000000000 --- a/deps/vendor/evenement/evenement/doc/00-intro.md +++ /dev/null @@ -1,28 +0,0 @@ -# Introduction - -Événement is is French and means "event". The événement library aims to -provide a simple way of subscribing to events and notifying those subscribers -whenever an event occurs. - -The API that it exposes is almost a direct port of the EventEmitter API found -in node.js. It also includes an "EventEmitter". There are some minor -differences however. - -The EventEmitter is an implementation of the publish-subscribe pattern, which -is a generalized version of the observer pattern. The observer pattern -specifies an observable subject, which observers can register themselves to. -Once something interesting happens, the subject notifies its observers. - -Pub/sub takes the same idea but encapsulates the observation logic inside a -separate object which manages all of its subscribers or listeners. Subscribers -are bound to an event name, and will only receive notifications of the events -they subscribed to. - -**TLDR: What does evenement do, in short? It provides a mapping from event -names to a list of listener functions and triggers each listener for a given -event when it is emitted.** - -Why do we do this, you ask? To achieve decoupling. - -It allows you to design a system where the core will emit events, and modules -are able to subscribe to these events. And respond to them. diff --git a/deps/vendor/evenement/evenement/doc/01-api.md b/deps/vendor/evenement/evenement/doc/01-api.md deleted file mode 100644 index 17ba333ec..000000000 --- a/deps/vendor/evenement/evenement/doc/01-api.md +++ /dev/null @@ -1,91 +0,0 @@ -# API - -The API that événement exposes is defined by the -`Evenement\EventEmitterInterface`. The interface is useful if you want to -define an interface that extends the emitter and implicitly defines certain -events to be emitted, or if you want to type hint an `EventEmitter` to be -passed to a method without coupling to the specific implementation. - -## on($event, callable $listener) - -Allows you to subscribe to an event. - -Example: - -```php -$emitter->on('user.created', function (User $user) use ($logger) { - $logger->log(sprintf("User '%s' was created.", $user->getLogin())); -}); -``` - -Since the listener can be any callable, you could also use an instance method -instead of the anonymous function: - -```php -$loggerSubscriber = new LoggerSubscriber($logger); -$emitter->on('user.created', array($loggerSubscriber, 'onUserCreated')); -``` - -This has the benefit that listener does not even need to know that the emitter -exists. - -You can also accept more than one parameter for the listener: - -```php -$emitter->on('numbers_added', function ($result, $a, $b) {}); -``` - -## once($event, callable $listener) - -Convenience method that adds a listener which is guaranteed to only be called -once. - -Example: - -```php -$conn->once('connected', function () use ($conn, $data) { - $conn->send($data); -}); -``` - -## emit($event, array $arguments = []) - -Emit an event, which will call all listeners. - -Example: - -```php -$conn->emit('data', [$data]); -``` - -The second argument to emit is an array of listener arguments. This is how you -specify more args: - -```php -$result = $a + $b; -$emitter->emit('numbers_added', [$result, $a, $b]); -``` - -## listeners($event) - -Allows you to inspect the listeners attached to an event. Particularly useful -to check if there are any listeners at all. - -Example: - -```php -$e = new \RuntimeException('Everything is broken!'); -if (0 === count($emitter->listeners('error'))) { - throw $e; -} -``` - -## removeListener($event, callable $listener) - -Remove a specific listener for a specific event. - -## removeAllListeners($event = null) - -Remove all listeners for a specific event or all listeners all together. This -is useful for long-running processes, where you want to remove listeners in -order to allow them to get garbage collected. diff --git a/deps/vendor/evenement/evenement/doc/02-plugin-system.md b/deps/vendor/evenement/evenement/doc/02-plugin-system.md deleted file mode 100644 index 6a0837193..000000000 --- a/deps/vendor/evenement/evenement/doc/02-plugin-system.md +++ /dev/null @@ -1,155 +0,0 @@ -# Example: Plugin system - -In this example I will show you how to create a generic plugin system with -événement where plugins can alter the behaviour of the app. The app is a blog. -Boring, I know. By using the EventEmitter it will be easy to extend this blog -with additional functionality without modifying the core system. - -The blog is quite basic. Users are able to create blog posts when they log in. -The users are stored in a static config file, so there is no sign up process. -Once logged in they get a "new post" link which gives them a form where they -can create a new blog post with plain HTML. That will store the post in a -document database. The index lists all blog post titles by date descending. -Clicking on the post title will take you to the full post. - -## Plugin structure - -The goal of the plugin system is to allow features to be added to the blog -without modifying any core files of the blog. - -The plugins are managed through a config file, `plugins.json`. This JSON file -contains a JSON-encoded list of class-names for plugin classes. This allows -you to enable and disable plugins in a central location. The initial -`plugins.json` is just an empty array: -```json -[] -``` - -A plugin class must implement the `PluginInterface`: -```php -interface PluginInterface -{ - function attachEvents(EventEmitterInterface $emitter); -} -``` - -The `attachEvents` method allows the plugin to attach any events to the -emitter. For example: -```php -class FooPlugin implements PluginInterface -{ - public function attachEvents(EventEmitterInterface $emitter) - { - $emitter->on('foo', function () { - echo 'bar!'; - }); - } -} -``` - -The blog system creates an emitter instance and loads the plugins: -```php -$emitter = new EventEmitter(); - -$pluginClasses = json_decode(file_get_contents('plugins.json'), true); -foreach ($pluginClasses as $pluginClass) { - $plugin = new $pluginClass(); - $pluginClass->attachEvents($emitter); -} -``` - -This is the base system. There are no plugins yet, and there are no events yet -either. That's because I don't know which extension points will be needed. I -will add them on demand. - -## Feature: Markdown - -Writing blog posts in HTML sucks! Wouldn't it be great if I could write them -in a nice format such as markdown, and have that be converted to HTML for me? - -This feature will need two extension points. I need to be able to mark posts -as markdown, and I need to be able to hook into the rendering of the post body -and convert it from markdown to HTML. So the blog needs two new events: -`post.create` and `post.render`. - -In the code that creates the post, I'll insert the `post.create` event: -```php -class PostEvent -{ - public $post; - - public function __construct(array $post) - { - $this->post = $post; - } -} - -$post = createPostFromRequest($_POST); - -$event = new PostEvent($post); -$emitter->emit('post.create', [$event]); -$post = $event->post; - -$db->save('post', $post); -``` - -This shows that you can wrap a value in an event object to make it mutable, -allowing listeners to change it. - -The same thing for the `post.render` event: -```php -public function renderPostBody(array $post) -{ - $emitter = $this->emitter; - - $event = new PostEvent($post); - $emitter->emit('post.render', [$event]); - $post = $event->post; - - return $post['body']; -} - -

-

-``` - -Ok, the events are in place. It's time to create the first plugin, woohoo! I -will call this the `MarkdownPlugin`, so here's `plugins.json`: -```json -[ - "MarkdownPlugin" -] -``` - -The `MarkdownPlugin` class will be autoloaded, so I don't have to worry about -including any files. I just have to worry about implementing the plugin class. -The `markdown` function represents a markdown to HTML converter. -```php -class MarkdownPlugin implements PluginInterface -{ - public function attachEvents(EventEmitterInterface $emitter) - { - $emitter->on('post.create', function (PostEvent $event) { - $event->post['format'] = 'markdown'; - }); - - $emitter->on('post.render', function (PostEvent $event) { - if (isset($event->post['format']) && 'markdown' === $event->post['format']) { - $event->post['body'] = markdown($event->post['body']); - } - }); - } -} -``` - -There you go, the blog now renders posts as markdown. But all of the previous -posts before the addition of the markdown plugin are still rendered correctly -as raw HTML. - -## Feature: Comments - -TODO - -## Feature: Comment spam control - -TODO diff --git a/deps/vendor/evenement/evenement/phpunit.xml.dist b/deps/vendor/evenement/evenement/phpunit.xml.dist deleted file mode 100644 index 70bc693a5..000000000 --- a/deps/vendor/evenement/evenement/phpunit.xml.dist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - ./tests/Evenement/ - - - - - - ./src/ - - - diff --git a/deps/vendor/evenement/evenement/tests/Evenement/Tests/EventEmitterTest.php b/deps/vendor/evenement/evenement/tests/Evenement/Tests/EventEmitterTest.php deleted file mode 100644 index 28f3011d6..000000000 --- a/deps/vendor/evenement/evenement/tests/Evenement/Tests/EventEmitterTest.php +++ /dev/null @@ -1,438 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Evenement\Tests; - -use Evenement\EventEmitter; -use InvalidArgumentException; -use PHPUnit\Framework\TestCase; - -class EventEmitterTest extends TestCase -{ - private $emitter; - - public function setUp() - { - $this->emitter = new EventEmitter(); - } - - public function testAddListenerWithLambda() - { - $this->emitter->on('foo', function () {}); - } - - public function testAddListenerWithMethod() - { - $listener = new Listener(); - $this->emitter->on('foo', [$listener, 'onFoo']); - } - - public function testAddListenerWithStaticMethod() - { - $this->emitter->on('bar', ['Evenement\Tests\Listener', 'onBar']); - } - - public function testAddListenerWithInvalidListener() - { - try { - $this->emitter->on('foo', 'not a callable'); - $this->fail(); - } catch (\Exception $e) { - } catch (\TypeError $e) { - } - } - - public function testOnce() - { - $listenerCalled = 0; - - $this->emitter->once('foo', function () use (&$listenerCalled) { - $listenerCalled++; - }); - - $this->assertSame(0, $listenerCalled); - - $this->emitter->emit('foo'); - - $this->assertSame(1, $listenerCalled); - - $this->emitter->emit('foo'); - - $this->assertSame(1, $listenerCalled); - } - - public function testOnceWithArguments() - { - $capturedArgs = []; - - $this->emitter->once('foo', function ($a, $b) use (&$capturedArgs) { - $capturedArgs = array($a, $b); - }); - - $this->emitter->emit('foo', array('a', 'b')); - - $this->assertSame(array('a', 'b'), $capturedArgs); - } - - public function testEmitWithoutArguments() - { - $listenerCalled = false; - - $this->emitter->on('foo', function () use (&$listenerCalled) { - $listenerCalled = true; - }); - - $this->assertSame(false, $listenerCalled); - $this->emitter->emit('foo'); - $this->assertSame(true, $listenerCalled); - } - - public function testEmitWithOneArgument() - { - $test = $this; - - $listenerCalled = false; - - $this->emitter->on('foo', function ($value) use (&$listenerCalled, $test) { - $listenerCalled = true; - - $test->assertSame('bar', $value); - }); - - $this->assertSame(false, $listenerCalled); - $this->emitter->emit('foo', ['bar']); - $this->assertSame(true, $listenerCalled); - } - - public function testEmitWithTwoArguments() - { - $test = $this; - - $listenerCalled = false; - - $this->emitter->on('foo', function ($arg1, $arg2) use (&$listenerCalled, $test) { - $listenerCalled = true; - - $test->assertSame('bar', $arg1); - $test->assertSame('baz', $arg2); - }); - - $this->assertSame(false, $listenerCalled); - $this->emitter->emit('foo', ['bar', 'baz']); - $this->assertSame(true, $listenerCalled); - } - - public function testEmitWithNoListeners() - { - $this->emitter->emit('foo'); - $this->emitter->emit('foo', ['bar']); - $this->emitter->emit('foo', ['bar', 'baz']); - } - - public function testEmitWithTwoListeners() - { - $listenersCalled = 0; - - $this->emitter->on('foo', function () use (&$listenersCalled) { - $listenersCalled++; - }); - - $this->emitter->on('foo', function () use (&$listenersCalled) { - $listenersCalled++; - }); - - $this->assertSame(0, $listenersCalled); - $this->emitter->emit('foo'); - $this->assertSame(2, $listenersCalled); - } - - public function testRemoveListenerMatching() - { - $listenersCalled = 0; - - $listener = function () use (&$listenersCalled) { - $listenersCalled++; - }; - - $this->emitter->on('foo', $listener); - $this->emitter->removeListener('foo', $listener); - - $this->assertSame(0, $listenersCalled); - $this->emitter->emit('foo'); - $this->assertSame(0, $listenersCalled); - } - - public function testRemoveListenerNotMatching() - { - $listenersCalled = 0; - - $listener = function () use (&$listenersCalled) { - $listenersCalled++; - }; - - $this->emitter->on('foo', $listener); - $this->emitter->removeListener('bar', $listener); - - $this->assertSame(0, $listenersCalled); - $this->emitter->emit('foo'); - $this->assertSame(1, $listenersCalled); - } - - public function testRemoveAllListenersMatching() - { - $listenersCalled = 0; - - $this->emitter->on('foo', function () use (&$listenersCalled) { - $listenersCalled++; - }); - - $this->emitter->removeAllListeners('foo'); - - $this->assertSame(0, $listenersCalled); - $this->emitter->emit('foo'); - $this->assertSame(0, $listenersCalled); - } - - public function testRemoveAllListenersNotMatching() - { - $listenersCalled = 0; - - $this->emitter->on('foo', function () use (&$listenersCalled) { - $listenersCalled++; - }); - - $this->emitter->removeAllListeners('bar'); - - $this->assertSame(0, $listenersCalled); - $this->emitter->emit('foo'); - $this->assertSame(1, $listenersCalled); - } - - public function testRemoveAllListenersWithoutArguments() - { - $listenersCalled = 0; - - $this->emitter->on('foo', function () use (&$listenersCalled) { - $listenersCalled++; - }); - - $this->emitter->on('bar', function () use (&$listenersCalled) { - $listenersCalled++; - }); - - $this->emitter->removeAllListeners(); - - $this->assertSame(0, $listenersCalled); - $this->emitter->emit('foo'); - $this->emitter->emit('bar'); - $this->assertSame(0, $listenersCalled); - } - - public function testCallablesClosure() - { - $calledWith = null; - - $this->emitter->on('foo', function ($data) use (&$calledWith) { - $calledWith = $data; - }); - - $this->emitter->emit('foo', ['bar']); - - self::assertSame('bar', $calledWith); - } - - public function testCallablesClass() - { - $listener = new Listener(); - $this->emitter->on('foo', [$listener, 'onFoo']); - - $this->emitter->emit('foo', ['bar']); - - self::assertSame(['bar'], $listener->getData()); - } - - - public function testCallablesClassInvoke() - { - $listener = new Listener(); - $this->emitter->on('foo', $listener); - - $this->emitter->emit('foo', ['bar']); - - self::assertSame(['bar'], $listener->getMagicData()); - } - - public function testCallablesStaticClass() - { - $this->emitter->on('foo', '\Evenement\Tests\Listener::onBar'); - - $this->emitter->emit('foo', ['bar']); - - self::assertSame(['bar'], Listener::getStaticData()); - } - - public function testCallablesFunction() - { - $this->emitter->on('foo', '\Evenement\Tests\setGlobalTestData'); - - $this->emitter->emit('foo', ['bar']); - - self::assertSame('bar', $GLOBALS['evenement-evenement-test-data']); - - unset($GLOBALS['evenement-evenement-test-data']); - } - - public function testListeners() - { - $onA = function () {}; - $onB = function () {}; - $onC = function () {}; - $onceA = function () {}; - $onceB = function () {}; - $onceC = function () {}; - - self::assertCount(0, $this->emitter->listeners('event')); - $this->emitter->on('event', $onA); - self::assertCount(1, $this->emitter->listeners('event')); - self::assertSame([$onA], $this->emitter->listeners('event')); - $this->emitter->once('event', $onceA); - self::assertCount(2, $this->emitter->listeners('event')); - self::assertSame([$onA, $onceA], $this->emitter->listeners('event')); - $this->emitter->once('event', $onceB); - self::assertCount(3, $this->emitter->listeners('event')); - self::assertSame([$onA, $onceA, $onceB], $this->emitter->listeners('event')); - $this->emitter->on('event', $onB); - self::assertCount(4, $this->emitter->listeners('event')); - self::assertSame([$onA, $onB, $onceA, $onceB], $this->emitter->listeners('event')); - $this->emitter->removeListener('event', $onceA); - self::assertCount(3, $this->emitter->listeners('event')); - self::assertSame([$onA, $onB, $onceB], $this->emitter->listeners('event')); - $this->emitter->once('event', $onceC); - self::assertCount(4, $this->emitter->listeners('event')); - self::assertSame([$onA, $onB, $onceB, $onceC], $this->emitter->listeners('event')); - $this->emitter->on('event', $onC); - self::assertCount(5, $this->emitter->listeners('event')); - self::assertSame([$onA, $onB, $onC, $onceB, $onceC], $this->emitter->listeners('event')); - $this->emitter->once('event', $onceA); - self::assertCount(6, $this->emitter->listeners('event')); - self::assertSame([$onA, $onB, $onC, $onceB, $onceC, $onceA], $this->emitter->listeners('event')); - $this->emitter->removeListener('event', $onB); - self::assertCount(5, $this->emitter->listeners('event')); - self::assertSame([$onA, $onC, $onceB, $onceC, $onceA], $this->emitter->listeners('event')); - $this->emitter->emit('event'); - self::assertCount(2, $this->emitter->listeners('event')); - self::assertSame([$onA, $onC], $this->emitter->listeners('event')); - } - - public function testOnceCallIsNotRemovedWhenWorkingOverOnceListeners() - { - $aCalled = false; - $aCallable = function () use (&$aCalled) { - $aCalled = true; - }; - $bCalled = false; - $bCallable = function () use (&$bCalled, $aCallable) { - $bCalled = true; - $this->emitter->once('event', $aCallable); - }; - $this->emitter->once('event', $bCallable); - - self::assertFalse($aCalled); - self::assertFalse($bCalled); - $this->emitter->emit('event'); - - self::assertFalse($aCalled); - self::assertTrue($bCalled); - $this->emitter->emit('event'); - - self::assertTrue($aCalled); - self::assertTrue($bCalled); - } - - public function testEventNameMustBeStringOn() - { - self::expectException(InvalidArgumentException::class); - self::expectExceptionMessage('event name must not be null'); - - $this->emitter->on(null, function () {}); - } - - public function testEventNameMustBeStringOnce() - { - self::expectException(InvalidArgumentException::class); - self::expectExceptionMessage('event name must not be null'); - - $this->emitter->once(null, function () {}); - } - - public function testEventNameMustBeStringRemoveListener() - { - self::expectException(InvalidArgumentException::class); - self::expectExceptionMessage('event name must not be null'); - - $this->emitter->removeListener(null, function () {}); - } - - public function testEventNameMustBeStringEmit() - { - self::expectException(InvalidArgumentException::class); - self::expectExceptionMessage('event name must not be null'); - - $this->emitter->emit(null); - } - - public function testListenersGetAll() - { - $a = function () {}; - $b = function () {}; - $c = function () {}; - $d = function () {}; - - $this->emitter->once('event2', $c); - $this->emitter->on('event', $a); - $this->emitter->once('event', $b); - $this->emitter->on('event', $c); - $this->emitter->once('event', $d); - - self::assertSame( - [ - 'event' => [ - $a, - $c, - $b, - $d, - ], - 'event2' => [ - $c, - ], - ], - $this->emitter->listeners() - ); - } - - public function testOnceNestedCallRegression() - { - $first = 0; - $second = 0; - - $this->emitter->once('event', function () use (&$first, &$second) { - $first++; - $this->emitter->once('event', function () use (&$second) { - $second++; - }); - $this->emitter->emit('event'); - }); - $this->emitter->emit('event'); - - self::assertSame(1, $first); - self::assertSame(1, $second); - } -} diff --git a/deps/vendor/evenement/evenement/tests/Evenement/Tests/Listener.php b/deps/vendor/evenement/evenement/tests/Evenement/Tests/Listener.php deleted file mode 100644 index df1742465..000000000 --- a/deps/vendor/evenement/evenement/tests/Evenement/Tests/Listener.php +++ /dev/null @@ -1,51 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Evenement\Tests; - -class Listener -{ - private $data = []; - - private $magicData = []; - - private static $staticData = []; - - public function onFoo($data) - { - $this->data[] = $data; - } - - public function __invoke($data) - { - $this->magicData[] = $data; - } - - public static function onBar($data) - { - self::$staticData[] = $data; - } - - public function getData() - { - return $this->data; - } - - public function getMagicData() - { - return $this->magicData; - } - - public static function getStaticData() - { - return self::$staticData; - } -} diff --git a/deps/vendor/evenement/evenement/tests/Evenement/Tests/functions.php b/deps/vendor/evenement/evenement/tests/Evenement/Tests/functions.php deleted file mode 100644 index 7f11f5ba9..000000000 --- a/deps/vendor/evenement/evenement/tests/Evenement/Tests/functions.php +++ /dev/null @@ -1,17 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Evenement\Tests; - -function setGlobalTestData($data) -{ - $GLOBALS['evenement-evenement-test-data'] = $data; -} diff --git a/deps/vendor/fig/http-message-util/.gitignore b/deps/vendor/fig/http-message-util/.gitignore deleted file mode 100644 index 48b8bf907..000000000 --- a/deps/vendor/fig/http-message-util/.gitignore +++ /dev/null @@ -1 +0,0 @@ -vendor/ diff --git a/deps/vendor/fig/http-message-util/CHANGELOG.md b/deps/vendor/fig/http-message-util/CHANGELOG.md deleted file mode 100644 index 1a02e547f..000000000 --- a/deps/vendor/fig/http-message-util/CHANGELOG.md +++ /dev/null @@ -1,147 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file, in reverse chronological order by release. - -## 1.1.5 - 2020-11-24 - -### Added - -- [#19](https://github.com/php-fig/http-message-util/pull/19) adds support for PHP 8. - -### Changed - -- Nothing. - -### Deprecated - -- Nothing. - -### Removed - -- Nothing. - -### Fixed - -- Nothing. - -## 1.1.4 - 2020-02-05 - -### Added - -- Nothing. - -### Changed - -- Nothing. - -### Deprecated - -- Nothing. - -### Removed - -- [#15](https://github.com/php-fig/http-message-util/pull/15) removes the dependency on psr/http-message, as it is not technically necessary for usage of this package. - -### Fixed - -- Nothing. - -## 1.1.3 - 2018-11-19 - -### Added - -- [#10](https://github.com/php-fig/http-message-util/pull/10) adds the constants `StatusCodeInterface::STATUS_EARLY_HINTS` (103) and - `StatusCodeInterface::STATUS_TOO_EARLY` (425). - -### Changed - -- Nothing. - -### Deprecated - -- Nothing. - -### Removed - -- Nothing. - -### Fixed - -- Nothing. - -## 1.1.2 - 2017-02-09 - -### Added - -- [#4](https://github.com/php-fig/http-message-util/pull/4) adds the constant - `StatusCodeInterface::STATUS_MISDIRECTED_REQUEST` (421). - -### Deprecated - -- Nothing. - -### Removed - -- Nothing. - -### Fixed - -- Nothing. - -## 1.1.1 - 2017-02-06 - -### Added - -- [#3](https://github.com/php-fig/http-message-util/pull/3) adds the constant - `StatusCodeInterface::STATUS_IM_A_TEAPOT` (418). - -### Deprecated - -- Nothing. - -### Removed - -- Nothing. - -### Fixed - -- Nothing. - -## 1.1.0 - 2016-09-19 - -### Added - -- [#1](https://github.com/php-fig/http-message-util/pull/1) adds - `Fig\Http\Message\StatusCodeInterface`, with constants named after common - status reason phrases, with values indicating the status codes themselves. - -### Deprecated - -- Nothing. - -### Removed - -- Nothing. - -### Fixed - -- Nothing. - -## 1.0.0 - 2017-08-05 - -### Added - -- Adds `Fig\Http\Message\RequestMethodInterface`, with constants covering the - most common HTTP request methods as specified by the IETF. - -### Deprecated - -- Nothing. - -### Removed - -- Nothing. - -### Fixed - -- Nothing. diff --git a/deps/vendor/fig/http-message-util/LICENSE b/deps/vendor/fig/http-message-util/LICENSE deleted file mode 100644 index e2fa347ae..000000000 --- a/deps/vendor/fig/http-message-util/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2016 PHP Framework Interoperability Group - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/deps/vendor/fig/http-message-util/README.md b/deps/vendor/fig/http-message-util/README.md deleted file mode 100644 index ea5b5aa75..000000000 --- a/deps/vendor/fig/http-message-util/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# PSR Http Message Util - -This repository holds utility classes and constants to facilitate common -operations of [PSR-7](https://www.php-fig.org/psr/psr-7/); the primary purpose is -to provide constants for referring to request methods, response status codes and -messages, and potentially common headers. - -Implementation of PSR-7 interfaces is **not** within the scope of this package. - -## Installation - -Install by adding the package as a [Composer](https://getcomposer.org) -requirement: - -```bash -$ composer require fig/http-message-util -``` diff --git a/deps/vendor/fig/http-message-util/composer.json b/deps/vendor/fig/http-message-util/composer.json deleted file mode 100644 index 8645893b0..000000000 --- a/deps/vendor/fig/http-message-util/composer.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "fig/http-message-util", - "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", - "keywords": ["psr", "psr-7", "http", "http-message", "request", "response"], - "license": "MIT", - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "require": { - "php": "^5.3 || ^7.0 || ^8.0" - }, - "suggest": { - "psr/http-message": "The package containing the PSR-7 interfaces" - }, - "autoload": { - "psr-4": { - "Fig\\Http\\Message\\": "src/" - } - }, - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - } -} diff --git a/deps/vendor/justinrainbow/json-schema/.php_cs.dist b/deps/vendor/justinrainbow/json-schema/.php_cs.dist deleted file mode 100644 index a9e7e4ed1..000000000 --- a/deps/vendor/justinrainbow/json-schema/.php_cs.dist +++ /dev/null @@ -1,34 +0,0 @@ -in(__DIR__); - -/* Based on ^2.1 of php-cs-fixer */ -$config - ->setRules(array( - // default - '@PSR2' => true, - '@Symfony' => true, - // additionally - 'array_syntax' => array('syntax' => 'long'), - 'binary_operator_spaces' => false, - 'concat_space' => array('spacing' => 'one'), - 'no_useless_else' => true, - 'no_useless_return' => true, - 'ordered_imports' => true, - 'phpdoc_no_package' => false, - 'phpdoc_order' => true, - 'phpdoc_summary' => false, - 'pre_increment' => false, - 'increment_style' => false, - 'simplified_null_return' => false, - 'trailing_comma_in_multiline_array' => false, - 'yoda_style' => false, - 'phpdoc_types_order' => array('null_adjustment' => 'none', 'sort_algorithm' => 'none'), - 'no_superfluous_phpdoc_tags' => false, - )) - ->setFinder($finder) -; - -return $config; diff --git a/deps/vendor/justinrainbow/json-schema/LICENSE b/deps/vendor/justinrainbow/json-schema/LICENSE deleted file mode 100644 index fa020fce0..000000000 --- a/deps/vendor/justinrainbow/json-schema/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 - -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/deps/vendor/justinrainbow/json-schema/README.md b/deps/vendor/justinrainbow/json-schema/README.md deleted file mode 100644 index 8df14db79..000000000 --- a/deps/vendor/justinrainbow/json-schema/README.md +++ /dev/null @@ -1,206 +0,0 @@ -# JSON Schema for PHP - -[![Build Status](https://travis-ci.org/justinrainbow/json-schema.svg?branch=master)](https://travis-ci.org/justinrainbow/json-schema) -[![Latest Stable Version](https://poser.pugx.org/justinrainbow/json-schema/v/stable.png)](https://packagist.org/packages/justinrainbow/json-schema) -[![Total Downloads](https://poser.pugx.org/justinrainbow/json-schema/downloads.png)](https://packagist.org/packages/justinrainbow/json-schema) - -A PHP Implementation for validating `JSON` Structures against a given `Schema`. - -See [json-schema](http://json-schema.org/) for more details. - -## Installation - -### Library - -```bash -git clone https://github.com/justinrainbow/json-schema.git -``` - -### Composer - -[Install PHP Composer](https://getcomposer.org/doc/00-intro.md) - -```bash -composer require justinrainbow/json-schema -``` - -## Usage - -```php -validate($data, (object)['$ref' => 'file://' . realpath('schema.json')]); - -if ($validator->isValid()) { - echo "The supplied JSON validates against the schema.\n"; -} else { - echo "JSON does not validate. Violations:\n"; - foreach ($validator->getErrors() as $error) { - echo sprintf("[%s] %s\n", $error['property'], $error['message']); - } -} -``` - -### Type coercion - -If you're validating data passed to your application via HTTP, you can cast strings and booleans to -the expected types defined by your schema: - -```php -"true", - 'refundAmount'=>"17" -]; - -$validator->validate( - $request, (object) [ - "type"=>"object", - "properties"=>(object)[ - "processRefund"=>(object)[ - "type"=>"boolean" - ], - "refundAmount"=>(object)[ - "type"=>"number" - ] - ] - ], - Constraint::CHECK_MODE_COERCE_TYPES -); // validates! - -is_bool($request->processRefund); // true -is_int($request->refundAmount); // true -``` - -A shorthand method is also available: -```PHP -$validator->coerce($request, $schema); -// equivalent to $validator->validate($data, $schema, Constraint::CHECK_MODE_COERCE_TYPES); -``` - -### Default values - -If your schema contains default values, you can have these automatically applied during validation: - -```php -17 -]; - -$validator = new Validator(); - -$validator->validate( - $request, - (object)[ - "type"=>"object", - "properties"=>(object)[ - "processRefund"=>(object)[ - "type"=>"boolean", - "default"=>true - ] - ] - ], - Constraint::CHECK_MODE_APPLY_DEFAULTS -); //validates, and sets defaults for missing properties - -is_bool($request->processRefund); // true -$request->processRefund; // true -``` - -### With inline references - -```php -addSchema('file://mySchema', $jsonSchemaObject); - -// Provide $schemaStorage to the Validator so that references can be resolved during validation -$jsonValidator = new Validator( new Factory($schemaStorage)); - -// JSON must be decoded before it can be validated -$jsonToValidateObject = json_decode('{"data":123}'); - -// Do validation (use isValid() and getErrors() to check the result) -$jsonValidator->validate($jsonToValidateObject, $jsonSchemaObject); -``` - -### Configuration Options -A number of flags are available to alter the behavior of the validator. These can be passed as the -third argument to `Validator::validate()`, or can be provided as the third argument to -`Factory::__construct()` if you wish to persist them across multiple `validate()` calls. - -| Flag | Description | -|------|-------------| -| `Constraint::CHECK_MODE_NORMAL` | Validate in 'normal' mode - this is the default | -| `Constraint::CHECK_MODE_TYPE_CAST` | Enable fuzzy type checking for associative arrays and objects | -| `Constraint::CHECK_MODE_COERCE_TYPES` | Convert data types to match the schema where possible | -| `Constraint::CHECK_MODE_APPLY_DEFAULTS` | Apply default values from the schema if not set | -| `Constraint::CHECK_MODE_ONLY_REQUIRED_DEFAULTS` | When applying defaults, only set values that are required | -| `Constraint::CHECK_MODE_EXCEPTIONS` | Throw an exception immediately if validation fails | -| `Constraint::CHECK_MODE_DISABLE_FORMAT` | Do not validate "format" constraints | -| `Constraint::CHECK_MODE_VALIDATE_SCHEMA` | Validate the schema as well as the provided document | - -Please note that using `Constraint::CHECK_MODE_COERCE_TYPES` or `Constraint::CHECK_MODE_APPLY_DEFAULTS` -will modify your original data. - -## Running the tests - -```bash -composer test # run all unit tests -composer testOnly TestClass # run specific unit test class -composer testOnly TestClass::testMethod # run specific unit test method -composer style-check # check code style for errors -composer style-fix # automatically fix code style errors -``` diff --git a/deps/vendor/justinrainbow/json-schema/bin/validate-json b/deps/vendor/justinrainbow/json-schema/bin/validate-json deleted file mode 100755 index d2102fe94..000000000 --- a/deps/vendor/justinrainbow/json-schema/bin/validate-json +++ /dev/null @@ -1,251 +0,0 @@ -#!/usr/bin/env php - - */ - -/** - * Dead simple autoloader - * - * @param string $className Name of class to load - * - * @return void - */ -spl_autoload_register(function ($className) -{ - $className = ltrim($className, '\\'); - $fileName = ''; - if ($lastNsPos = strrpos($className, '\\')) { - $namespace = substr($className, 0, $lastNsPos); - $className = substr($className, $lastNsPos + 1); - $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; - } - $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; - if (stream_resolve_include_path($fileName)) { - require_once $fileName; - } -}); - -// support running this tool from git checkout -if (is_dir(__DIR__ . '/../src/JsonSchema')) { - set_include_path(__DIR__ . '/../src' . PATH_SEPARATOR . get_include_path()); -} - -$arOptions = array(); -$arArgs = array(); -array_shift($argv);//script itself -foreach ($argv as $arg) { - if ($arg[0] == '-') { - $arOptions[$arg] = true; - } else { - $arArgs[] = $arg; - } -} - -if (count($arArgs) == 0 - || isset($arOptions['--help']) || isset($arOptions['-h']) -) { - echo << $value) { - if (!strncmp($name, 'JSON_ERROR_', 11)) { - $json_errors[$value] = $name; - } - } - - output('JSON parse error: ' . $json_errors[json_last_error()] . "\n"); -} - -function getUrlFromPath($path) -{ - if (parse_url($path, PHP_URL_SCHEME) !== null) { - //already an URL - return $path; - } - if ($path[0] == '/') { - //absolute path - return 'file://' . $path; - } - - //relative path: make absolute - return 'file://' . getcwd() . '/' . $path; -} - -/** - * Take a HTTP header value and split it up into parts. - * - * @param $headerValue - * @return array Key "_value" contains the main value, all others - * as given in the header value - */ -function parseHeaderValue($headerValue) -{ - if (strpos($headerValue, ';') === false) { - return array('_value' => $headerValue); - } - - $parts = explode(';', $headerValue); - $arData = array('_value' => array_shift($parts)); - foreach ($parts as $part) { - list($name, $value) = explode('=', $part); - $arData[$name] = trim($value, ' "\''); - } - return $arData; -} - -/** - * Send a string to the output stream, but only if --quiet is not enabled - * - * @param $str string A string output - */ -function output($str) { - global $arOptions; - if (!isset($arOptions['--quiet'])) { - echo $str; - } -} - -$urlData = getUrlFromPath($pathData); - -$context = stream_context_create( - array( - 'http' => array( - 'header' => array( - 'Accept: */*', - 'Connection: Close' - ), - 'max_redirects' => 5 - ) - ) -); -$dataString = file_get_contents($pathData, false, $context); -if ($dataString == '') { - output("Data file is not readable or empty.\n"); - exit(3); -} - -$data = json_decode($dataString); -unset($dataString); -if ($data === null) { - output("Error loading JSON data file\n"); - showJsonError(); - exit(5); -} - -if ($pathSchema === null) { - if (isset($http_response_header)) { - array_shift($http_response_header);//HTTP/1.0 line - foreach ($http_response_header as $headerLine) { - list($hName, $hValue) = explode(':', $headerLine, 2); - $hName = strtolower($hName); - if ($hName == 'link') { - //Link: ; rel="describedBy" - $hParts = parseHeaderValue($hValue); - if (isset($hParts['rel']) && $hParts['rel'] == 'describedBy') { - $pathSchema = trim($hParts['_value'], ' <>'); - } - } else if ($hName == 'content-type') { - //Content-Type: application/my-media-type+json; - // profile=http://example.org/schema# - $hParts = parseHeaderValue($hValue); - if (isset($hParts['profile'])) { - $pathSchema = $hParts['profile']; - } - - } - } - } - if (is_object($data) && property_exists($data, '$schema')) { - $pathSchema = $data->{'$schema'}; - } - - //autodetect schema - if ($pathSchema === null) { - output("JSON data must be an object and have a \$schema property.\n"); - output("You can pass the schema file on the command line as well.\n"); - output("Schema autodetection failed.\n"); - exit(6); - } -} -if ($pathSchema[0] == '/') { - $pathSchema = 'file://' . $pathSchema; -} - -$resolver = new JsonSchema\Uri\UriResolver(); -$retriever = new JsonSchema\Uri\UriRetriever(); -try { - $urlSchema = $resolver->resolve($pathSchema, $urlData); - - if (isset($arOptions['--dump-schema-url'])) { - echo $urlSchema . "\n"; - exit(); - } -} catch (Exception $e) { - output("Error loading JSON schema file\n"); - output($urlSchema . "\n"); - output($e->getMessage() . "\n"); - exit(2); -} -$refResolver = new JsonSchema\SchemaStorage($retriever, $resolver); -$schema = $refResolver->resolveRef($urlSchema); - -if (isset($arOptions['--dump-schema'])) { - $options = defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0; - echo json_encode($schema, $options) . "\n"; - exit(); -} - -try { - $validator = new JsonSchema\Validator(); - $validator->check($data, $schema); - - if ($validator->isValid()) { - if(isset($arOptions['--verbose'])) { - output("OK. The supplied JSON validates against the schema.\n"); - } - } else { - output("JSON does not validate. Violations:\n"); - foreach ($validator->getErrors() as $error) { - output(sprintf("[%s] %s\n", $error['property'], $error['message'])); - } - exit(23); - } -} catch (Exception $e) { - output("JSON does not validate. Error:\n"); - output($e->getMessage() . "\n"); - output("Error code: " . $e->getCode() . "\n"); - exit(24); -} diff --git a/deps/vendor/justinrainbow/json-schema/composer.json b/deps/vendor/justinrainbow/json-schema/composer.json deleted file mode 100644 index fcacd40c3..000000000 --- a/deps/vendor/justinrainbow/json-schema/composer.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "justinrainbow/json-schema", - "type": "library", - "description": "A library to validate a json schema.", - "keywords": [ - "json", - "schema" - ], - "homepage": "https://github.com/justinrainbow/json-schema", - "license": "MIT", - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "autoload-dev": { - "psr-4": { - "JsonSchema\\Tests\\": "tests/" - } - }, - "repositories": [ - { - "type": "package", - "package": { - "name": "json-schema/json-schema-test-suite", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/json-schema/JSON-Schema-Test-Suite", - "reference": "1.2.0" - } - } - } - ], - "bin": [ - "bin/validate-json" - ], - "scripts": { - "coverage": "phpunit --coverage-text", - "style-check": "php-cs-fixer fix --dry-run --verbose --diff", - "style-fix": "php-cs-fixer fix --verbose", - "test": "phpunit", - "testOnly": "phpunit --colors --filter" - } -} diff --git a/deps/vendor/justinrainbow/json-schema/demo/README.md b/deps/vendor/justinrainbow/json-schema/demo/README.md deleted file mode 100644 index 0309ee89f..000000000 --- a/deps/vendor/justinrainbow/json-schema/demo/README.md +++ /dev/null @@ -1,14 +0,0 @@ -## JsonSchema\Validator Demo - -This demo script uses the example from the root README.md and provides sample JSON files for testing `JsonSchema\Validator`. - -To change or replace the JSON schema document, please edit `/path/to/json-schema/demo/schema.json`. - -To change or replace the JSON document that is validated, please edit `/path/to/json-schema/demo/data.json`. - -To run the demo, change the path in the following example and run it in your terminal. - -``` -cd /path/to/json-schema/demo -php demo.php // The supplied JSON validates against the schema. -``` diff --git a/deps/vendor/justinrainbow/json-schema/demo/data.json b/deps/vendor/justinrainbow/json-schema/demo/data.json deleted file mode 100644 index 69591b710..000000000 --- a/deps/vendor/justinrainbow/json-schema/demo/data.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "foo":"bar" -} diff --git a/deps/vendor/justinrainbow/json-schema/demo/schema.json b/deps/vendor/justinrainbow/json-schema/demo/schema.json deleted file mode 100644 index e6307dc1c..000000000 --- a/deps/vendor/justinrainbow/json-schema/demo/schema.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "object" -} diff --git a/deps/vendor/justinrainbow/json-schema/dist/schema/json-schema-draft-03.json b/deps/vendor/justinrainbow/json-schema/dist/schema/json-schema-draft-03.json deleted file mode 100644 index 7a1a2d389..000000000 --- a/deps/vendor/justinrainbow/json-schema/dist/schema/json-schema-draft-03.json +++ /dev/null @@ -1,174 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-03/schema#", - "id": "http://json-schema.org/draft-03/schema#", - "type": "object", - - "properties": { - "type": { - "type": [ "string", "array" ], - "items": { - "type": [ "string", { "$ref": "#" } ] - }, - "uniqueItems": true, - "default": "any" - }, - - "properties": { - "type": "object", - "additionalProperties": { "$ref": "#" }, - "default": {} - }, - - "patternProperties": { - "type": "object", - "additionalProperties": { "$ref": "#" }, - "default": {} - }, - - "additionalProperties": { - "type": [ { "$ref": "#" }, "boolean" ], - "default": {} - }, - - "items": { - "type": [ { "$ref": "#" }, "array" ], - "items": { "$ref": "#" }, - "default": {} - }, - - "additionalItems": { - "type": [ { "$ref": "#" }, "boolean" ], - "default": {} - }, - - "required": { - "type": "boolean", - "default": false - }, - - "dependencies": { - "type": "object", - "additionalProperties": { - "type": [ "string", "array", { "$ref": "#" } ], - "items": { - "type": "string" - } - }, - "default": {} - }, - - "minimum": { - "type": "number" - }, - - "maximum": { - "type": "number" - }, - - "exclusiveMinimum": { - "type": "boolean", - "default": false - }, - - "exclusiveMaximum": { - "type": "boolean", - "default": false - }, - - "minItems": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - - "maxItems": { - "type": "integer", - "minimum": 0 - }, - - "uniqueItems": { - "type": "boolean", - "default": false - }, - - "pattern": { - "type": "string", - "format": "regex" - }, - - "minLength": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - - "maxLength": { - "type": "integer" - }, - - "enum": { - "type": "array", - "minItems": 1, - "uniqueItems": true - }, - - "default": { - "type": "any" - }, - - "title": { - "type": "string" - }, - - "description": { - "type": "string" - }, - - "format": { - "type": "string" - }, - - "divisibleBy": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true, - "default": 1 - }, - - "disallow": { - "type": [ "string", "array" ], - "items": { - "type": [ "string", { "$ref": "#" } ] - }, - "uniqueItems": true - }, - - "extends": { - "type": [ { "$ref": "#" }, "array" ], - "items": { "$ref": "#" }, - "default": {} - }, - - "id": { - "type": "string", - "format": "uri" - }, - - "$ref": { - "type": "string", - "format": "uri" - }, - - "$schema": { - "type": "string", - "format": "uri" - } - }, - - "dependencies": { - "exclusiveMinimum": "minimum", - "exclusiveMaximum": "maximum" - }, - - "default": {} -} diff --git a/deps/vendor/justinrainbow/json-schema/dist/schema/json-schema-draft-04.json b/deps/vendor/justinrainbow/json-schema/dist/schema/json-schema-draft-04.json deleted file mode 100644 index 85eb502a6..000000000 --- a/deps/vendor/justinrainbow/json-schema/dist/schema/json-schema-draft-04.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "id": "http://json-schema.org/draft-04/schema#", - "$schema": "http://json-schema.org/draft-04/schema#", - "description": "Core schema meta-schema", - "definitions": { - "schemaArray": { - "type": "array", - "minItems": 1, - "items": { "$ref": "#" } - }, - "positiveInteger": { - "type": "integer", - "minimum": 0 - }, - "positiveIntegerDefault0": { - "allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ] - }, - "simpleTypes": { - "enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ] - }, - "stringArray": { - "type": "array", - "items": { "type": "string" }, - "minItems": 1, - "uniqueItems": true - } - }, - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uri" - }, - "$schema": { - "type": "string", - "format": "uri" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "default": {}, - "multipleOf": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "boolean", - "default": false - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "boolean", - "default": false - }, - "maxLength": { "$ref": "#/definitions/positiveInteger" }, - "minLength": { "$ref": "#/definitions/positiveIntegerDefault0" }, - "pattern": { - "type": "string", - "format": "regex" - }, - "additionalItems": { - "anyOf": [ - { "type": "boolean" }, - { "$ref": "#" } - ], - "default": {} - }, - "items": { - "anyOf": [ - { "$ref": "#" }, - { "$ref": "#/definitions/schemaArray" } - ], - "default": {} - }, - "maxItems": { "$ref": "#/definitions/positiveInteger" }, - "minItems": { "$ref": "#/definitions/positiveIntegerDefault0" }, - "uniqueItems": { - "type": "boolean", - "default": false - }, - "maxProperties": { "$ref": "#/definitions/positiveInteger" }, - "minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" }, - "required": { "$ref": "#/definitions/stringArray" }, - "additionalProperties": { - "anyOf": [ - { "type": "boolean" }, - { "$ref": "#" } - ], - "default": {} - }, - "definitions": { - "type": "object", - "additionalProperties": { "$ref": "#" }, - "default": {} - }, - "properties": { - "type": "object", - "additionalProperties": { "$ref": "#" }, - "default": {} - }, - "patternProperties": { - "type": "object", - "additionalProperties": { "$ref": "#" }, - "default": {} - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { "$ref": "#" }, - { "$ref": "#/definitions/stringArray" } - ] - } - }, - "enum": { - "type": "array", - "minItems": 1, - "uniqueItems": true - }, - "type": { - "anyOf": [ - { "$ref": "#/definitions/simpleTypes" }, - { - "type": "array", - "items": { "$ref": "#/definitions/simpleTypes" }, - "minItems": 1, - "uniqueItems": true - } - ] - }, - "allOf": { "$ref": "#/definitions/schemaArray" }, - "anyOf": { "$ref": "#/definitions/schemaArray" }, - "oneOf": { "$ref": "#/definitions/schemaArray" }, - "not": { "$ref": "#" } - }, - "dependencies": { - "exclusiveMaximum": [ "maximum" ], - "exclusiveMinimum": [ "minimum" ] - }, - "default": {} -} diff --git a/deps/vendor/justinrainbow/json-schema/phpunit.xml.dist b/deps/vendor/justinrainbow/json-schema/phpunit.xml.dist deleted file mode 100644 index 0136d8edc..000000000 --- a/deps/vendor/justinrainbow/json-schema/phpunit.xml.dist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - tests - - - - - - ./src/JsonSchema/ - - - diff --git a/deps/vendor/psr/container/.gitignore b/deps/vendor/psr/container/.gitignore deleted file mode 100644 index b2395aa05..000000000 --- a/deps/vendor/psr/container/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -composer.lock -composer.phar -/vendor/ diff --git a/deps/vendor/psr/container/LICENSE b/deps/vendor/psr/container/LICENSE deleted file mode 100644 index 2877a4894..000000000 --- a/deps/vendor/psr/container/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2016 container-interop -Copyright (c) 2016 PHP Framework Interoperability Group - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/deps/vendor/psr/container/README.md b/deps/vendor/psr/container/README.md deleted file mode 100644 index 1b9d9e570..000000000 --- a/deps/vendor/psr/container/README.md +++ /dev/null @@ -1,13 +0,0 @@ -Container interface -============== - -This repository holds all interfaces related to [PSR-11 (Container Interface)][psr-url]. - -Note that this is not a Container implementation of its own. It is merely abstractions that describe the components of a Dependency Injection Container. - -The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist. - -[psr-url]: https://www.php-fig.org/psr/psr-11/ -[package-url]: https://packagist.org/packages/psr/container -[implementation-url]: https://packagist.org/providers/psr/container-implementation - diff --git a/deps/vendor/psr/container/composer.json b/deps/vendor/psr/container/composer.json deleted file mode 100644 index 3797a2538..000000000 --- a/deps/vendor/psr/container/composer.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "psr/container", - "type": "library", - "description": "Common Container Interface (PHP FIG PSR-11)", - "keywords": ["psr", "psr-11", "container", "container-interop", "container-interface"], - "homepage": "https://github.com/php-fig/container", - "license": "MIT", - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "require": { - "php": ">=7.2.0" - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - } -} diff --git a/deps/vendor/psr/http-message/CHANGELOG.md b/deps/vendor/psr/http-message/CHANGELOG.md deleted file mode 100644 index 74b1ef923..000000000 --- a/deps/vendor/psr/http-message/CHANGELOG.md +++ /dev/null @@ -1,36 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file, in reverse chronological order by release. - -## 1.0.1 - 2016-08-06 - -### Added - -- Nothing. - -### Deprecated - -- Nothing. - -### Removed - -- Nothing. - -### Fixed - -- Updated all `@return self` annotation references in interfaces to use - `@return static`, which more closelly follows the semantics of the - specification. -- Updated the `MessageInterface::getHeaders()` return annotation to use the - value `string[][]`, indicating the format is a nested array of strings. -- Updated the `@link` annotation for `RequestInterface::withRequestTarget()` - to point to the correct section of RFC 7230. -- Updated the `ServerRequestInterface::withUploadedFiles()` parameter annotation - to add the parameter name (`$uploadedFiles`). -- Updated a `@throws` annotation for the `UploadedFileInterface::moveTo()` - method to correctly reference the method parameter (it was referencing an - incorrect parameter name previously). - -## 1.0.0 - 2016-05-18 - -Initial stable release; reflects accepted PSR-7 specification. diff --git a/deps/vendor/psr/http-message/LICENSE b/deps/vendor/psr/http-message/LICENSE deleted file mode 100644 index c2d8e452d..000000000 --- a/deps/vendor/psr/http-message/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2014 PHP Framework Interoperability Group - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/deps/vendor/psr/http-message/README.md b/deps/vendor/psr/http-message/README.md deleted file mode 100644 index 28185338f..000000000 --- a/deps/vendor/psr/http-message/README.md +++ /dev/null @@ -1,13 +0,0 @@ -PSR Http Message -================ - -This repository holds all interfaces/classes/traits related to -[PSR-7](http://www.php-fig.org/psr/psr-7/). - -Note that this is not a HTTP message implementation of its own. It is merely an -interface that describes a HTTP message. See the specification for more details. - -Usage ------ - -We'll certainly need some stuff in here. \ No newline at end of file diff --git a/deps/vendor/psr/http-message/composer.json b/deps/vendor/psr/http-message/composer.json deleted file mode 100644 index b0d2937a0..000000000 --- a/deps/vendor/psr/http-message/composer.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "psr/http-message", - "description": "Common interface for HTTP messages", - "keywords": ["psr", "psr-7", "http", "http-message", "request", "response"], - "homepage": "https://github.com/php-fig/http-message", - "license": "MIT", - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "require": { - "php": ">=5.3.0" - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - } -} diff --git a/deps/vendor/react/cache/CHANGELOG.md b/deps/vendor/react/cache/CHANGELOG.md deleted file mode 100644 index 56ddc4ace..000000000 --- a/deps/vendor/react/cache/CHANGELOG.md +++ /dev/null @@ -1,85 +0,0 @@ -# Changelog - -## 1.1.0 (2020-09-18) - -* Feature: Forward compatibility with react/promise 3. - (#39 by @WyriHaximus) - -* Add `.gitattributes` to exclude dev files from exports. - (#40 by @reedy) - -* Improve test suite, update to support PHP 8 and PHPUnit 9.3. - (#41 and #43 by @SimonFrings and #42 by @WyriHaximus) - -## 1.0.0 (2019-07-11) - -* First stable LTS release, now following [SemVer](https://semver.org/). - We'd like to emphasize that this component is production ready and battle-tested. - We plan to support all long-term support (LTS) releases for at least 24 months, - so you have a rock-solid foundation to build on top of. - -> Contains no other changes, so it's actually fully compatible with the v0.6.0 release. - -## 0.6.0 (2019-07-04) - -* Feature / BC break: Add support for `getMultiple()`, `setMultiple()`, `deleteMultiple()`, `clear()` and `has()` - supporting multiple cache items (inspired by PSR-16). - (#32 by @krlv and #37 by @clue) - -* Documentation for TTL precision with millisecond accuracy or below and - use high-resolution timer for cache TTL on PHP 7.3+. - (#35 and #38 by @clue) - -* Improve API documentation and allow legacy HHVM to fail in Travis CI config. - (#34 and #36 by @clue) - -* Prefix all global functions calls with \ to skip the look up and resolve process and go straight to the global function. - (#31 by @WyriHaximus) - -## 0.5.0 (2018-06-25) - -* Improve documentation by describing what is expected of a class implementing `CacheInterface`. - (#21, #22, #23, #27 by @WyriHaximus) - -* Implemented (optional) Least Recently Used (LRU) cache algorithm for `ArrayCache`. - (#26 by @clue) - -* Added support for cache expiration (TTL). - (#29 by @clue and @WyriHaximus) - -* Renamed `remove` to `delete` making it more in line with `PSR-16`. - (#30 by @clue) - -## 0.4.2 (2017-12-20) - -* Improve documentation with usage and installation instructions - (#10 by @clue) - -* Improve test suite by adding PHPUnit to `require-dev` and - add forward compatibility with PHPUnit 5 and PHPUnit 6 and - sanitize Composer autoload paths - (#14 by @shaunbramley and #12 and #18 by @clue) - -## 0.4.1 (2016-02-25) - -* Repository maintenance, split off from main repo, improve test suite and documentation -* First class support for PHP7 and HHVM (#9 by @clue) -* Adjust compatibility to 5.3 (#7 by @clue) - -## 0.4.0 (2014-02-02) - -* BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks -* BC break: Update to React/Promise 2.0 -* Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0 - -## 0.3.2 (2013-05-10) - -* Version bump - -## 0.3.0 (2013-04-14) - -* Version bump - -## 0.2.6 (2012-12-26) - -* Feature: New cache component, used by DNS diff --git a/deps/vendor/react/cache/LICENSE b/deps/vendor/react/cache/LICENSE deleted file mode 100644 index d6f8901f9..000000000 --- a/deps/vendor/react/cache/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012 Christian Lück, Cees-Jan Kiewiet, Jan Sorgalla, Chris Boden, Igor Wiedler - -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/deps/vendor/react/cache/README.md b/deps/vendor/react/cache/README.md deleted file mode 100644 index 2986e2552..000000000 --- a/deps/vendor/react/cache/README.md +++ /dev/null @@ -1,366 +0,0 @@ -# Cache - -[![Build Status](https://travis-ci.org/reactphp/cache.svg?branch=master)](https://travis-ci.org/reactphp/cache) - -Async, [Promise](https://github.com/reactphp/promise)-based cache interface -for [ReactPHP](https://reactphp.org/). - -The cache component provides a -[Promise](https://github.com/reactphp/promise)-based -[`CacheInterface`](#cacheinterface) and an in-memory [`ArrayCache`](#arraycache) -implementation of that. -This allows consumers to type hint against the interface and third parties to -provide alternate implementations. -This project is heavily inspired by -[PSR-16: Common Interface for Caching Libraries](https://www.php-fig.org/psr/psr-16/), -but uses an interface more suited for async, non-blocking applications. - -**Table of Contents** - -* [Usage](#usage) - * [CacheInterface](#cacheinterface) - * [get()](#get) - * [set()](#set) - * [delete()](#delete) - * [getMultiple()](#getmultiple) - * [setMultiple()](#setmultiple) - * [deleteMultiple()](#deletemultiple) - * [clear()](#clear) - * [has()](#has) - * [ArrayCache](#arraycache) -* [Common usage](#common-usage) - * [Fallback get](#fallback-get) - * [Fallback-get-and-set](#fallback-get-and-set) -* [Install](#install) -* [Tests](#tests) -* [License](#license) - -## Usage - -### CacheInterface - -The `CacheInterface` describes the main interface of this component. -This allows consumers to type hint against the interface and third parties to -provide alternate implementations. - -#### get() - -The `get(string $key, mixed $default = null): PromiseInterface` method can be used to -retrieve an item from the cache. - -This method will resolve with the cached value on success or with the -given `$default` value when no item can be found or when an error occurs. -Similarly, an expired cache item (once the time-to-live is expired) is -considered a cache miss. - -```php -$cache - ->get('foo') - ->then('var_dump'); -``` - -This example fetches the value of the key `foo` and passes it to the -`var_dump` function. You can use any of the composition provided by -[promises](https://github.com/reactphp/promise). - -#### set() - -The `set(string $key, mixed $value, ?float $ttl = null): PromiseInterface` method can be used to -store an item in the cache. - -This method will resolve with `true` on success or `false` when an error -occurs. If the cache implementation has to go over the network to store -it, it may take a while. - -The optional `$ttl` parameter sets the maximum time-to-live in seconds -for this cache item. If this parameter is omitted (or `null`), the item -will stay in the cache for as long as the underlying implementation -supports. Trying to access an expired cache item results in a cache miss, -see also [`get()`](#get). - -```php -$cache->set('foo', 'bar', 60); -``` - -This example eventually sets the value of the key `foo` to `bar`. If it -already exists, it is overridden. - -This interface does not enforce any particular TTL resolution, so special -care may have to be taken if you rely on very high precision with -millisecond accuracy or below. Cache implementations SHOULD work on a -best effort basis and SHOULD provide at least second accuracy unless -otherwise noted. Many existing cache implementations are known to provide -microsecond or millisecond accuracy, but it's generally not recommended -to rely on this high precision. - -This interface suggests that cache implementations SHOULD use a monotonic -time source if available. Given that a monotonic time source is only -available as of PHP 7.3 by default, cache implementations MAY fall back -to using wall-clock time. -While this does not affect many common use cases, this is an important -distinction for programs that rely on a high time precision or on systems -that are subject to discontinuous time adjustments (time jumps). -This means that if you store a cache item with a TTL of 30s and then -adjust your system time forward by 20s, the cache item SHOULD still -expire in 30s. - -#### delete() - -The `delete(string $key): PromiseInterface` method can be used to -delete an item from the cache. - -This method will resolve with `true` on success or `false` when an error -occurs. When no item for `$key` is found in the cache, it also resolves -to `true`. If the cache implementation has to go over the network to -delete it, it may take a while. - -```php -$cache->delete('foo'); -``` - -This example eventually deletes the key `foo` from the cache. As with -`set()`, this may not happen instantly and a promise is returned to -provide guarantees whether or not the item has been removed from cache. - -#### getMultiple() - -The `getMultiple(string[] $keys, mixed $default = null): PromiseInterface` method can be used to -retrieve multiple cache items by their unique keys. - -This method will resolve with an array of cached values on success or with the -given `$default` value when an item can not be found or when an error occurs. -Similarly, an expired cache item (once the time-to-live is expired) is -considered a cache miss. - -```php -$cache->getMultiple(array('name', 'age'))->then(function (array $values) { - $name = $values['name'] ?? 'User'; - $age = $values['age'] ?? 'n/a'; - - echo $name . ' is ' . $age . PHP_EOL; -}); -``` - -This example fetches the cache items for the `name` and `age` keys and -prints some example output. You can use any of the composition provided -by [promises](https://github.com/reactphp/promise). - -#### setMultiple() - -The `setMultiple(array $values, ?float $ttl = null): PromiseInterface` method can be used to -persist a set of key => value pairs in the cache, with an optional TTL. - -This method will resolve with `true` on success or `false` when an error -occurs. If the cache implementation has to go over the network to store -it, it may take a while. - -The optional `$ttl` parameter sets the maximum time-to-live in seconds -for these cache items. If this parameter is omitted (or `null`), these items -will stay in the cache for as long as the underlying implementation -supports. Trying to access an expired cache items results in a cache miss, -see also [`getMultiple()`](#getmultiple). - -```php -$cache->setMultiple(array('foo' => 1, 'bar' => 2), 60); -``` - -This example eventually sets the list of values - the key `foo` to `1` value -and the key `bar` to `2`. If some of the keys already exist, they are overridden. - -#### deleteMultiple() - -The `setMultiple(string[] $keys): PromiseInterface` method can be used to -delete multiple cache items in a single operation. - -This method will resolve with `true` on success or `false` when an error -occurs. When no items for `$keys` are found in the cache, it also resolves -to `true`. If the cache implementation has to go over the network to -delete it, it may take a while. - -```php -$cache->deleteMultiple(array('foo', 'bar, 'baz')); -``` - -This example eventually deletes keys `foo`, `bar` and `baz` from the cache. -As with `setMultiple()`, this may not happen instantly and a promise is returned to -provide guarantees whether or not the item has been removed from cache. - -#### clear() - -The `clear(): PromiseInterface` method can be used to -wipe clean the entire cache. - -This method will resolve with `true` on success or `false` when an error -occurs. If the cache implementation has to go over the network to -delete it, it may take a while. - -```php -$cache->clear(); -``` - -This example eventually deletes all keys from the cache. As with `deleteMultiple()`, -this may not happen instantly and a promise is returned to provide guarantees -whether or not all the items have been removed from cache. - -#### has() - -The `has(string $key): PromiseInterface` method can be used to -determine whether an item is present in the cache. - -This method will resolve with `true` on success or `false` when no item can be found -or when an error occurs. Similarly, an expired cache item (once the time-to-live -is expired) is considered a cache miss. - -```php -$cache - ->has('foo') - ->then('var_dump'); -``` - -This example checks if the value of the key `foo` is set in the cache and passes -the result to the `var_dump` function. You can use any of the composition provided by -[promises](https://github.com/reactphp/promise). - -NOTE: It is recommended that has() is only to be used for cache warming type purposes -and not to be used within your live applications operations for get/set, as this method -is subject to a race condition where your has() will return true and immediately after, -another script can remove it making the state of your app out of date. - -### ArrayCache - -The `ArrayCache` provides an in-memory implementation of the [`CacheInterface`](#cacheinterface). - -```php -$cache = new ArrayCache(); - -$cache->set('foo', 'bar'); -``` - -Its constructor accepts an optional `?int $limit` parameter to limit the -maximum number of entries to store in the LRU cache. If you add more -entries to this instance, it will automatically take care of removing -the one that was least recently used (LRU). - -For example, this snippet will overwrite the first value and only store -the last two entries: - -```php -$cache = new ArrayCache(2); - -$cache->set('foo', '1'); -$cache->set('bar', '2'); -$cache->set('baz', '3'); -``` - -This cache implementation is known to rely on wall-clock time to schedule -future cache expiration times when using any version before PHP 7.3, -because a monotonic time source is only available as of PHP 7.3 (`hrtime()`). -While this does not affect many common use cases, this is an important -distinction for programs that rely on a high time precision or on systems -that are subject to discontinuous time adjustments (time jumps). -This means that if you store a cache item with a TTL of 30s on PHP < 7.3 -and then adjust your system time forward by 20s, the cache item may -expire in 10s. See also [`set()`](#set) for more details. - -## Common usage - -### Fallback get - -A common use case of caches is to attempt fetching a cached value and as a -fallback retrieve it from the original data source if not found. Here is an -example of that: - -```php -$cache - ->get('foo') - ->then(function ($result) { - if ($result === null) { - return getFooFromDb(); - } - - return $result; - }) - ->then('var_dump'); -``` - -First an attempt is made to retrieve the value of `foo`. A callback function is -registered that will call `getFooFromDb` when the resulting value is null. -`getFooFromDb` is a function (can be any PHP callable) that will be called if the -key does not exist in the cache. - -`getFooFromDb` can handle the missing key by returning a promise for the -actual value from the database (or any other data source). As a result, this -chain will correctly fall back, and provide the value in both cases. - -### Fallback get and set - -To expand on the fallback get example, often you want to set the value on the -cache after fetching it from the data source. - -```php -$cache - ->get('foo') - ->then(function ($result) { - if ($result === null) { - return $this->getAndCacheFooFromDb(); - } - - return $result; - }) - ->then('var_dump'); - -public function getAndCacheFooFromDb() -{ - return $this->db - ->get('foo') - ->then(array($this, 'cacheFooFromDb')); -} - -public function cacheFooFromDb($foo) -{ - $this->cache->set('foo', $foo); - - return $foo; -} -``` - -By using chaining you can easily conditionally cache the value if it is -fetched from the database. - -## Install - -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 react/cache:^1.1 -``` - -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 -HHVM. -It's *highly recommended to use PHP 7+* for this project. - -## Tests - -To run the test suite, you first need to clone this repo and then install all -dependencies [through Composer](https://getcomposer.org): - -```bash -$ composer install -``` - -To run the test suite, go to the project root and run: - -```bash -$ php vendor/bin/phpunit -``` - -## License - -MIT, see [LICENSE file](LICENSE). diff --git a/deps/vendor/react/cache/composer.json b/deps/vendor/react/cache/composer.json deleted file mode 100644 index ad0d9fee3..000000000 --- a/deps/vendor/react/cache/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "react/cache", - "description": "Async, Promise-based cache interface for ReactPHP", - "keywords": ["cache", "caching", "promise", "ReactPHP"], - "license": "MIT", - "authors": [ - { - "name": "Christian Lück", - "homepage": "https://clue.engineering/", - "email": "christian@clue.engineering" - }, - { - "name": "Cees-Jan Kiewiet", - "homepage": "https://wyrihaximus.net/", - "email": "reactphp@ceesjankiewiet.nl" - }, - { - "name": "Jan Sorgalla", - "homepage": "https://sorgalla.com/", - "email": "jsorgalla@gmail.com" - }, - { - "name": "Chris Boden", - "homepage": "https://cboden.dev/", - "email": "cboden@gmail.com" - } - ], - "require": { - "php": ">=5.3.0", - "react/promise": "^3.0 || ^2.0 || ^1.1" - }, - "autoload": { - "psr-4": { "React\\Cache\\": "src/" } - }, - "autoload-dev": { - "psr-4": { "React\\Tests\\Cache\\": "tests/" } - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - } -} diff --git a/deps/vendor/react/dns/CHANGELOG.md b/deps/vendor/react/dns/CHANGELOG.md deleted file mode 100644 index 9aaa004dc..000000000 --- a/deps/vendor/react/dns/CHANGELOG.md +++ /dev/null @@ -1,411 +0,0 @@ -# Changelog - -## 1.9.0 (2021-12-20) - -* Feature: Full support for PHP 8.1 release and prepare PHP 8.2 compatibility - by refactoring `Parser` to avoid assigning dynamic properties. - (#188 and #186 by @clue and #184 by @SimonFrings) - -* Feature: Avoid dependency on `ext-filter`. - (#185 by @clue) - -* Feature / Fix: Skip invalid nameserver entries from `resolv.conf` and ignore IPv6 zone IDs. - (#187 by @clue) - -* Feature / Fix: Reduce socket read chunk size for queries over TCP/IP. - (#189 by @clue) - -## 1.8.0 (2021-07-11) - -A major new feature release, see [**release announcement**](https://clue.engineering/2021/announcing-reactphp-default-loop). - -* Feature: Simplify usage by supporting new [default loop](https://reactphp.org/event-loop/#loop). - (#182 by @clue) - - ```php - // old (still supported) - $factory = new React\Dns\Resolver\Factory(); - $resolver = $factory->create($config, $loop); - - // new (using default loop) - $factory = new React\Dns\Resolver\Factory(); - $resolver = $factory->create($config); - ``` - -## 1.7.0 (2021-06-25) - -* Feature: Update DNS `Factory` to accept complete `Config` object. - Add new `FallbackExecutor` and use fallback DNS servers when `Config` lists multiple servers. - (#179 and #180 by @clue) - - ```php - // old (still supported) - $config = React\Dns\Config\Config::loadSystemConfigBlocking(); - $server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8'; - $resolver = $factory->create($server, $loop); - - // new - $config = React\Dns\Config\Config::loadSystemConfigBlocking(); - if (!$config->nameservers) { - $config->nameservers[] = '8.8.8.8'; - } - $resolver = $factory->create($config, $loop); - ``` - -## 1.6.0 (2021-06-21) - -* Feature: Add support for legacy `SPF` record type. - (#178 by @akondas and @clue) - -* Fix: Fix integer overflow for TCP/IP chunk size on 32 bit platforms. - (#177 by @clue) - -## 1.5.0 (2021-03-05) - -* Feature: Improve error reporting when query fails, include domain and query type and DNS server address where applicable. - (#174 by @clue) - -* Feature: Improve error handling when sending data to DNS server fails (macOS). - (#171 and #172 by @clue) - -* Fix: Improve DNS response parser to limit recursion for compressed labels. - (#169 by @clue) - -* Improve test suite, use GitHub actions for continuous integration (CI). - (#170 by @SimonFrings) - -## 1.4.0 (2020-09-18) - -* Feature: Support upcoming PHP 8. - (#168 by @clue) - -* Improve test suite and update to PHPUnit 9.3. - (#164 by @clue, #165 and #166 by @SimonFrings and #167 by @WyriHaximus) - -## 1.3.0 (2020-07-10) - -* Feature: Forward compatibility with react/promise v3. - (#153 by @WyriHaximus) - -* Feature: Support parsing `OPT` records (EDNS0). - (#157 by @clue) - -* Fix: Avoid PHP warnings due to lack of args in exception trace on PHP 7.4. - (#160 by @clue) - -* Improve test suite and add `.gitattributes` to exclude dev files from exports. - Run tests on PHPUnit 9 and PHP 7.4 and clean up test suite. - (#154 by @reedy, #156 by @clue and #163 by @SimonFrings) - -## 1.2.0 (2019-08-15) - -* Feature: Add `TcpTransportExecutor` to send DNS queries over TCP/IP connection, - add `SelectiveTransportExecutor` to retry with TCP if UDP is truncated and - automatically select transport protocol when no explicit `udp://` or `tcp://` scheme is given in `Factory`. - (#145, #146, #147 and #148 by @clue) - -* Feature: Support escaping literal dots and special characters in domain names. - (#144 by @clue) - -## 1.1.0 (2019-07-18) - -* Feature: Support parsing `CAA` and `SSHFP` records. - (#141 and #142 by @clue) - -* Feature: Add `ResolverInterface` as common interface for `Resolver` class. - (#139 by @clue) - -* Fix: Add missing private property definitions and - remove unneeded dependency on `react/stream`. - (#140 and #143 by @clue) - -## 1.0.0 (2019-07-11) - -* First stable LTS release, now following [SemVer](https://semver.org/). - We'd like to emphasize that this component is production ready and battle-tested. - We plan to support all long-term support (LTS) releases for at least 24 months, - so you have a rock-solid foundation to build on top of. - -This update involves a number of BC breaks due to dropped support for -deprecated functionality and some internal API cleanup. We've tried hard to -avoid BC breaks where possible and minimize impact otherwise. We expect that -most consumers of this package will actually not be affected by any BC -breaks, see below for more details: - -* BC break: Delete all deprecated APIs, use `Query` objects for `Message` questions - instead of nested arrays and increase code coverage to 100%. - (#130 by @clue) - -* BC break: Move `$nameserver` from `ExecutorInterface` to `UdpTransportExecutor`, - remove advanced/internal `UdpTransportExecutor` args for `Parser`/`BinaryDumper` and - add API documentation for `ExecutorInterface`. - (#135, #137 and #138 by @clue) - -* BC break: Replace `HeaderBag` attributes with simple `Message` properties. - (#132 by @clue) - -* BC break: Mark all `Record` attributes as required, add documentation vs `Query`. - (#136 by @clue) - -* BC break: Mark all classes as final to discourage inheritance - (#134 by @WyriHaximus) - -## 0.4.19 (2019-07-10) - -* Feature: Avoid garbage references when DNS resolution rejects on legacy PHP <= 5.6. - (#133 by @clue) - -## 0.4.18 (2019-09-07) - -* Feature / Fix: Implement `CachingExecutor` using cache TTL, deprecate old `CachedExecutor`, - respect TTL from response records when caching and do not cache truncated responses. - (#129 by @clue) - -* Feature: Limit cache size to 256 last responses by default. - (#127 by @clue) - -* Feature: Cooperatively resolve hosts to avoid running same query concurrently. - (#125 by @clue) - -## 0.4.17 (2019-04-01) - -* Feature: Support parsing `authority` and `additional` records from DNS response. - (#123 by @clue) - -* Feature: Support dumping records as part of outgoing binary DNS message. - (#124 by @clue) - -* Feature: Forward compatibility with upcoming Cache v0.6 and Cache v1.0 - (#121 by @clue) - -* Improve test suite to add forward compatibility with PHPUnit 7, - test against PHP 7.3 and use legacy PHPUnit 5 on legacy HHVM. - (#122 by @clue) - -## 0.4.16 (2018-11-11) - -* Feature: Improve promise cancellation for DNS lookup retries and clean up any garbage references. - (#118 by @clue) - -* Fix: Reject parsing malformed DNS response messages such as incomplete DNS response messages, - malformed record data or malformed compressed domain name labels. - (#115 and #117 by @clue) - -* Fix: Fix interpretation of TTL as UINT32 with most significant bit unset. - (#116 by @clue) - -* Fix: Fix caching advanced MX/SRV/TXT/SOA structures. - (#112 by @clue) - -## 0.4.15 (2018-07-02) - -* Feature: Add `resolveAll()` method to support custom query types in `Resolver`. - (#110 by @clue and @WyriHaximus) - - ```php - $resolver->resolveAll('reactphp.org', Message::TYPE_AAAA)->then(function ($ips) { - echo 'IPv6 addresses for reactphp.org ' . implode(', ', $ips) . PHP_EOL; - }); - ``` - -* Feature: Support parsing `NS`, `TXT`, `MX`, `SOA` and `SRV` records. - (#104, #105, #106, #107 and #108 by @clue) - -* Feature: Add support for `Message::TYPE_ANY` and parse unknown types as binary data. - (#104 by @clue) - -* Feature: Improve error messages for failed queries and improve documentation. - (#109 by @clue) - -* Feature: Add reverse DNS lookup example. - (#111 by @clue) - -## 0.4.14 (2018-06-26) - -* Feature: Add `UdpTransportExecutor`, validate incoming DNS response messages - to avoid cache poisoning attacks and deprecate legacy `Executor`. - (#101 and #103 by @clue) - -* Feature: Forward compatibility with Cache 0.5 - (#102 by @clue) - -* Deprecate legacy `Query::$currentTime` and binary parser data attributes to clean up and simplify API. - (#99 by @clue) - -## 0.4.13 (2018-02-27) - -* Add `Config::loadSystemConfigBlocking()` to load default system config - and support parsing DNS config on all supported platforms - (`/etc/resolv.conf` on Unix/Linux/Mac and WMIC on Windows) - (#92, #93, #94 and #95 by @clue) - - ```php - $config = Config::loadSystemConfigBlocking(); - $server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8'; - ``` - -* Remove unneeded cyclic dependency on react/socket - (#96 by @clue) - -## 0.4.12 (2018-01-14) - -* Improve test suite by adding forward compatibility with PHPUnit 6, - test against PHP 7.2, fix forward compatibility with upcoming EventLoop releases, - add test group to skip integration tests relying on internet connection - and add minor documentation improvements. - (#85 and #87 by @carusogabriel, #88 and #89 by @clue and #83 by @jsor) - -## 0.4.11 (2017-08-25) - -* Feature: Support resolving from default hosts file - (#75, #76 and #77 by @clue) - - This means that resolving hosts such as `localhost` will now work as - expected across all platforms with no changes required: - - ```php - $resolver->resolve('localhost')->then(function ($ip) { - echo 'IP: ' . $ip; - }); - ``` - - The new `HostsExecutor` exists for advanced usage and is otherwise used - internally for this feature. - -## 0.4.10 (2017-08-10) - -* Feature: Forward compatibility with EventLoop v1.0 and v0.5 and - lock minimum dependencies and work around circular dependency for tests - (#70 and #71 by @clue) - -* Fix: Work around DNS timeout issues for Windows users - (#74 by @clue) - -* Documentation and examples for advanced usage - (#66 by @WyriHaximus) - -* Remove broken TCP code, do not retry with invalid TCP query - (#73 by @clue) - -* Improve test suite by fixing HHVM build for now again and ignore future HHVM build errors and - lock Travis distro so new defaults will not break the build and - fix failing tests for PHP 7.1 - (#68 by @WyriHaximus and #69 and #72 by @clue) - -## 0.4.9 (2017-05-01) - -* Feature: Forward compatibility with upcoming Socket v1.0 and v0.8 - (#61 by @clue) - -## 0.4.8 (2017-04-16) - -* Feature: Add support for the AAAA record type to the protocol parser - (#58 by @othillo) - -* Feature: Add support for the PTR record type to the protocol parser - (#59 by @othillo) - -## 0.4.7 (2017-03-31) - -* Feature: Forward compatibility with upcoming Socket v0.6 and v0.7 component - (#57 by @clue) - -## 0.4.6 (2017-03-11) - -* Fix: Fix DNS timeout issues for Windows users and add forward compatibility - with Stream v0.5 and upcoming v0.6 - (#53 by @clue) - -* Improve test suite by adding PHPUnit to `require-dev` - (#54 by @clue) - -## 0.4.5 (2017-03-02) - -* Fix: Ensure we ignore the case of the answer - (#51 by @WyriHaximus) - -* Feature: Add `TimeoutExecutor` and simplify internal APIs to allow internal - code re-use for upcoming versions. - (#48 and #49 by @clue) - -## 0.4.4 (2017-02-13) - -* Fix: Fix handling connection and stream errors - (#45 by @clue) - -* Feature: Add examples and forward compatibility with upcoming Socket v0.5 component - (#46 and #47 by @clue) - -## 0.4.3 (2016-07-31) - -* Feature: Allow for cache adapter injection (#38 by @WyriHaximus) - - ```php - $factory = new React\Dns\Resolver\Factory(); - - $cache = new MyCustomCacheInstance(); - $resolver = $factory->createCached('8.8.8.8', $loop, $cache); - ``` - -* Feature: Support Promise cancellation (#35 by @clue) - - ```php - $promise = $resolver->resolve('reactphp.org'); - - $promise->cancel(); - ``` - -## 0.4.2 (2016-02-24) - -* Repository maintenance, split off from main repo, improve test suite and documentation -* First class support for PHP7 and HHVM (#34 by @clue) -* Adjust compatibility to 5.3 (#30 by @clue) - -## 0.4.1 (2014-04-13) - -* Bug fix: Fixed PSR-4 autoload path (@marcj/WyriHaximus) - -## 0.4.0 (2014-02-02) - -* BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks -* BC break: Update to React/Promise 2.0 -* Bug fix: Properly resolve CNAME aliases -* Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0 -* Bump React dependencies to v0.4 - -## 0.3.2 (2013-05-10) - -* Feature: Support default port for IPv6 addresses (@clue) - -## 0.3.0 (2013-04-14) - -* Bump React dependencies to v0.3 - -## 0.2.6 (2012-12-26) - -* Feature: New cache component, used by DNS - -## 0.2.5 (2012-11-26) - -* Version bump - -## 0.2.4 (2012-11-18) - -* Feature: Change to promise-based API (@jsor) - -## 0.2.3 (2012-11-14) - -* Version bump - -## 0.2.2 (2012-10-28) - -* Feature: DNS executor timeout handling (@arnaud-lb) -* Feature: DNS retry executor (@arnaud-lb) - -## 0.2.1 (2012-10-14) - -* Minor adjustments to DNS parser - -## 0.2.0 (2012-09-10) - -* Feature: DNS resolver diff --git a/deps/vendor/react/dns/LICENSE b/deps/vendor/react/dns/LICENSE deleted file mode 100644 index d6f8901f9..000000000 --- a/deps/vendor/react/dns/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012 Christian Lück, Cees-Jan Kiewiet, Jan Sorgalla, Chris Boden, Igor Wiedler - -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/deps/vendor/react/dns/README.md b/deps/vendor/react/dns/README.md deleted file mode 100644 index 92eac9720..000000000 --- a/deps/vendor/react/dns/README.md +++ /dev/null @@ -1,452 +0,0 @@ -# DNS - -[![CI status](https://github.com/reactphp/dns/workflows/CI/badge.svg)](https://github.com/reactphp/dns/actions) - -Async DNS resolver for [ReactPHP](https://reactphp.org/). - -The main point of the DNS component is to provide async DNS resolution. -However, it is really a toolkit for working with DNS messages, and could -easily be used to create a DNS server. - -**Table of contents** - -* [Basic usage](#basic-usage) -* [Caching](#caching) - * [Custom cache adapter](#custom-cache-adapter) -* [ResolverInterface](#resolverinterface) - * [resolve()](#resolve) - * [resolveAll()](#resolveall) -* [Advanced usage](#advanced-usage) - * [UdpTransportExecutor](#udptransportexecutor) - * [TcpTransportExecutor](#tcptransportexecutor) - * [SelectiveTransportExecutor](#selectivetransportexecutor) - * [HostsFileExecutor](#hostsfileexecutor) -* [Install](#install) -* [Tests](#tests) -* [License](#license) -* [References](#references) - -## Basic usage - -The most basic usage is to just create a resolver through the resolver -factory. All you need to give it is a nameserver, then you can start resolving -names, baby! - -```php -$config = React\Dns\Config\Config::loadSystemConfigBlocking(); -if (!$config->nameservers) { - $config->nameservers[] = '8.8.8.8'; -} - -$factory = new React\Dns\Resolver\Factory(); -$dns = $factory->create($config); - -$dns->resolve('igor.io')->then(function ($ip) { - echo "Host: $ip\n"; -}); -``` - -See also the [first example](examples). - -The `Config` class can be used to load the system default config. This is an -operation that may access the filesystem and block. Ideally, this method should -thus be executed only once before the loop starts and not repeatedly while it is -running. -Note that this class may return an *empty* configuration if the system config -can not be loaded. As such, you'll likely want to apply a default nameserver -as above if none can be found. - -> Note that the factory loads the hosts file from the filesystem once when - creating the resolver instance. - Ideally, this method should thus be executed only once before the loop starts - and not repeatedly while it is running. - -But there's more. - -## Caching - -You can cache results by configuring the resolver to use a `CachedExecutor`: - -```php -$config = React\Dns\Config\Config::loadSystemConfigBlocking(); -if (!$config->nameservers) { - $config->nameservers[] = '8.8.8.8'; -} - -$factory = new React\Dns\Resolver\Factory(); -$dns = $factory->createCached($config); - -$dns->resolve('igor.io')->then(function ($ip) { - echo "Host: $ip\n"; -}); - -... - -$dns->resolve('igor.io')->then(function ($ip) { - echo "Host: $ip\n"; -}); -``` - -If the first call returns before the second, only one query will be executed. -The second result will be served from an in memory cache. -This is particularly useful for long running scripts where the same hostnames -have to be looked up multiple times. - -See also the [third example](examples). - -### Custom cache adapter - -By default, the above will use an in memory cache. - -You can also specify a custom cache implementing [`CacheInterface`](https://github.com/reactphp/cache) to handle the record cache instead: - -```php -$cache = new React\Cache\ArrayCache(); -$factory = new React\Dns\Resolver\Factory(); -$dns = $factory->createCached('8.8.8.8', null, $cache); -``` - -See also the wiki for possible [cache implementations](https://github.com/reactphp/react/wiki/Users#cache-implementations). - -## ResolverInterface - - - -### resolve() - -The `resolve(string $domain): PromiseInterface` method can be used to -resolve the given $domain name to a single IPv4 address (type `A` query). - -```php -$resolver->resolve('reactphp.org')->then(function ($ip) { - echo 'IP for reactphp.org is ' . $ip . PHP_EOL; -}); -``` - -This is one of the main methods in this package. It sends a DNS query -for the given $domain name to your DNS server and returns a single IP -address on success. - -If the DNS server sends a DNS response message that contains more than -one IP address for this query, it will randomly pick one of the IP -addresses from the response. If you want the full list of IP addresses -or want to send a different type of query, you should use the -[`resolveAll()`](#resolveall) method instead. - -If the DNS server sends a DNS response message that indicates an error -code, this method will reject with a `RecordNotFoundException`. Its -message and code can be used to check for the response code. - -If the DNS communication fails and the server does not respond with a -valid response message, this message will reject with an `Exception`. - -Pending DNS queries can be cancelled by cancelling its pending promise like so: - -```php -$promise = $resolver->resolve('reactphp.org'); - -$promise->cancel(); -``` - -### resolveAll() - -The `resolveAll(string $host, int $type): PromiseInterface` method can be used to -resolve all record values for the given $domain name and query $type. - -```php -$resolver->resolveAll('reactphp.org', Message::TYPE_A)->then(function ($ips) { - echo 'IPv4 addresses for reactphp.org ' . implode(', ', $ips) . PHP_EOL; -}); - -$resolver->resolveAll('reactphp.org', Message::TYPE_AAAA)->then(function ($ips) { - echo 'IPv6 addresses for reactphp.org ' . implode(', ', $ips) . PHP_EOL; -}); -``` - -This is one of the main methods in this package. It sends a DNS query -for the given $domain name to your DNS server and returns a list with all -record values on success. - -If the DNS server sends a DNS response message that contains one or more -records for this query, it will return a list with all record values -from the response. You can use the `Message::TYPE_*` constants to control -which type of query will be sent. Note that this method always returns a -list of record values, but each record value type depends on the query -type. For example, it returns the IPv4 addresses for type `A` queries, -the IPv6 addresses for type `AAAA` queries, the hostname for type `NS`, -`CNAME` and `PTR` queries and structured data for other queries. See also -the `Record` documentation for more details. - -If the DNS server sends a DNS response message that indicates an error -code, this method will reject with a `RecordNotFoundException`. Its -message and code can be used to check for the response code. - -If the DNS communication fails and the server does not respond with a -valid response message, this message will reject with an `Exception`. - -Pending DNS queries can be cancelled by cancelling its pending promise like so: - -```php -$promise = $resolver->resolveAll('reactphp.org', Message::TYPE_AAAA); - -$promise->cancel(); -``` - -## Advanced Usage - -### UdpTransportExecutor - -The `UdpTransportExecutor` can be used to -send DNS queries over a UDP transport. - -This is the main class that sends a DNS query to your DNS server and is used -internally by the `Resolver` for the actual message transport. - -For more advanced usages one can utilize this class directly. -The following example looks up the `IPv6` address for `igor.io`. - -```php -$executor = new UdpTransportExecutor('8.8.8.8:53'); - -$executor->query( - new Query($name, Message::TYPE_AAAA, Message::CLASS_IN) -)->then(function (Message $message) { - foreach ($message->answers as $answer) { - echo 'IPv6: ' . $answer->data . PHP_EOL; - } -}, 'printf'); -``` - -See also the [fourth example](examples). - -Note that this executor does not implement a timeout, so you will very likely -want to use this in combination with a `TimeoutExecutor` like this: - -```php -$executor = new TimeoutExecutor( - new UdpTransportExecutor($nameserver), - 3.0 -); -``` - -Also note that this executor uses an unreliable UDP transport and that it -does not implement any retry logic, so you will likely want to use this in -combination with a `RetryExecutor` like this: - -```php -$executor = new RetryExecutor( - new TimeoutExecutor( - new UdpTransportExecutor($nameserver), - 3.0 - ) -); -``` - -Note that this executor is entirely async and as such allows you to execute -any number of queries concurrently. You should probably limit the number of -concurrent queries in your application or you're very likely going to face -rate limitations and bans on the resolver end. For many common applications, -you may want to avoid sending the same query multiple times when the first -one is still pending, so you will likely want to use this in combination with -a `CoopExecutor` like this: - -```php -$executor = new CoopExecutor( - new RetryExecutor( - new TimeoutExecutor( - new UdpTransportExecutor($nameserver), - 3.0 - ) - ) -); -``` - -> Internally, this class uses PHP's UDP sockets and does not take advantage - of [react/datagram](https://github.com/reactphp/datagram) purely for - organizational reasons to avoid a cyclic dependency between the two - packages. Higher-level components should take advantage of the Datagram - component instead of reimplementing this socket logic from scratch. - -### TcpTransportExecutor - -The `TcpTransportExecutor` class can be used to -send DNS queries over a TCP/IP stream transport. - -This is one of the main classes that send a DNS query to your DNS server. - -For more advanced usages one can utilize this class directly. -The following example looks up the `IPv6` address for `reactphp.org`. - -```php -$executor = new TcpTransportExecutor('8.8.8.8:53'); - -$executor->query( - new Query($name, Message::TYPE_AAAA, Message::CLASS_IN) -)->then(function (Message $message) { - foreach ($message->answers as $answer) { - echo 'IPv6: ' . $answer->data . PHP_EOL; - } -}, 'printf'); -``` - -See also [example #92](examples). - -Note that this executor does not implement a timeout, so you will very likely -want to use this in combination with a `TimeoutExecutor` like this: - -```php -$executor = new TimeoutExecutor( - new TcpTransportExecutor($nameserver), - 3.0 -); -``` - -Unlike the `UdpTransportExecutor`, this class uses a reliable TCP/IP -transport, so you do not necessarily have to implement any retry logic. - -Note that this executor is entirely async and as such allows you to execute -queries concurrently. The first query will establish a TCP/IP socket -connection to the DNS server which will be kept open for a short period. -Additional queries will automatically reuse this existing socket connection -to the DNS server, will pipeline multiple requests over this single -connection and will keep an idle connection open for a short period. The -initial TCP/IP connection overhead may incur a slight delay if you only send -occasional queries – when sending a larger number of concurrent queries over -an existing connection, it becomes increasingly more efficient and avoids -creating many concurrent sockets like the UDP-based executor. You may still -want to limit the number of (concurrent) queries in your application or you -may be facing rate limitations and bans on the resolver end. For many common -applications, you may want to avoid sending the same query multiple times -when the first one is still pending, so you will likely want to use this in -combination with a `CoopExecutor` like this: - -```php -$executor = new CoopExecutor( - new TimeoutExecutor( - new TcpTransportExecutor($nameserver), - 3.0 - ) -); -``` - -> Internally, this class uses PHP's TCP/IP sockets and does not take advantage - of [react/socket](https://github.com/reactphp/socket) purely for - organizational reasons to avoid a cyclic dependency between the two - packages. Higher-level components should take advantage of the Socket - component instead of reimplementing this socket logic from scratch. - -### SelectiveTransportExecutor - -The `SelectiveTransportExecutor` class can be used to -Send DNS queries over a UDP or TCP/IP stream transport. - -This class will automatically choose the correct transport protocol to send -a DNS query to your DNS server. It will always try to send it over the more -efficient UDP transport first. If this query yields a size related issue -(truncated messages), it will retry over a streaming TCP/IP transport. - -For more advanced usages one can utilize this class directly. -The following example looks up the `IPv6` address for `reactphp.org`. - -```php -$executor = new SelectiveTransportExecutor($udpExecutor, $tcpExecutor); - -$executor->query( - new Query($name, Message::TYPE_AAAA, Message::CLASS_IN) -)->then(function (Message $message) { - foreach ($message->answers as $answer) { - echo 'IPv6: ' . $answer->data . PHP_EOL; - } -}, 'printf'); -``` - -Note that this executor only implements the logic to select the correct -transport for the given DNS query. Implementing the correct transport logic, -implementing timeouts and any retry logic is left up to the given executors, -see also [`UdpTransportExecutor`](#udptransportexecutor) and -[`TcpTransportExecutor`](#tcptransportexecutor) for more details. - -Note that this executor is entirely async and as such allows you to execute -any number of queries concurrently. You should probably limit the number of -concurrent queries in your application or you're very likely going to face -rate limitations and bans on the resolver end. For many common applications, -you may want to avoid sending the same query multiple times when the first -one is still pending, so you will likely want to use this in combination with -a `CoopExecutor` like this: - -```php -$executor = new CoopExecutor( - new SelectiveTransportExecutor( - $datagramExecutor, - $streamExecutor - ) -); -``` - -### HostsFileExecutor - -Note that the above `UdpTransportExecutor` class always performs an actual DNS query. -If you also want to take entries from your hosts file into account, you may -use this code: - -```php -$hosts = \React\Dns\Config\HostsFile::loadFromPathBlocking(); - -$executor = new UdpTransportExecutor('8.8.8.8:53'); -$executor = new HostsFileExecutor($hosts, $executor); - -$executor->query( - new Query('localhost', Message::TYPE_A, Message::CLASS_IN) -); -``` - -## Install - -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 react/dns:^1.9 -``` - -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 8+ and -HHVM. -It's *highly recommended to use the latest supported PHP version* for this project. - -## Tests - -To run the test suite, you first need to clone this repo and then install all -dependencies [through Composer](https://getcomposer.org/): - -```bash -$ composer install -``` - -To run the test suite, go to the project root and run: - -```bash -$ vendor/bin/phpunit -``` - -The test suite also contains a number of functional integration tests that rely -on a stable internet connection. -If you do not want to run these, they can simply be skipped like this: - -```bash -$ vendor/bin/phpunit --exclude-group internet -``` - -## License - -MIT, see [LICENSE file](LICENSE). - -## References - -* [RFC 1034](https://tools.ietf.org/html/rfc1034) Domain Names - Concepts and Facilities -* [RFC 1035](https://tools.ietf.org/html/rfc1035) Domain Names - Implementation and Specification diff --git a/deps/vendor/react/dns/composer.json b/deps/vendor/react/dns/composer.json deleted file mode 100644 index 0126343f0..000000000 --- a/deps/vendor/react/dns/composer.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "react/dns", - "description": "Async DNS resolver for ReactPHP", - "keywords": ["dns", "dns-resolver", "ReactPHP", "async"], - "license": "MIT", - "authors": [ - { - "name": "Christian Lück", - "homepage": "https://clue.engineering/", - "email": "christian@clue.engineering" - }, - { - "name": "Cees-Jan Kiewiet", - "homepage": "https://wyrihaximus.net/", - "email": "reactphp@ceesjankiewiet.nl" - }, - { - "name": "Jan Sorgalla", - "homepage": "https://sorgalla.com/", - "email": "jsorgalla@gmail.com" - }, - { - "name": "Chris Boden", - "homepage": "https://cboden.dev/", - "email": "cboden@gmail.com" - } - ], - "require": { - "php": ">=5.3.0", - "react/cache": "^1.0 || ^0.6 || ^0.5", - "react/event-loop": "^1.2", - "react/promise": "^3.0 || ^2.7 || ^1.2.1", - "react/promise-timer": "^1.8" - }, - "require-dev": { - "clue/block-react": "^1.2", - "phpunit/phpunit": "^9.3 || ^4.8.35" - }, - "autoload": { - "psr-4": { "React\\Dns\\": "src" } - }, - "autoload-dev": { - "psr-4": { "React\\Tests\\Dns\\": "tests" } - } -} diff --git a/deps/vendor/react/event-loop/CHANGELOG.md b/deps/vendor/react/event-loop/CHANGELOG.md deleted file mode 100644 index bd9e69d43..000000000 --- a/deps/vendor/react/event-loop/CHANGELOG.md +++ /dev/null @@ -1,426 +0,0 @@ -# Changelog - -## 1.2.0 (2021-07-11) - -A major new feature release, see [**release announcement**](https://clue.engineering/2021/announcing-reactphp-default-loop). - -* Feature: Introduce new concept of default loop with the new `Loop` class. - (#226 by @WyriHaximus, #229, #231 and #232 by @clue) - - The `Loop` class exists as a convenient global accessor for the event loop. - It provides all methods that exist on the `LoopInterface` as static methods and - will automatically execute the loop at the end of the program: - - ```php - $timer = Loop::addPeriodicTimer(0.1, function () { - echo 'Tick' . PHP_EOL; - }); - - Loop::addTimer(1.0, function () use ($timer) { - Loop::cancelTimer($timer); - echo 'Done' . PHP_EOL; - }); - ``` - - The explicit loop instructions are still valid and may still be useful in some applications, - especially for a transition period towards the more concise style. - The `Loop::get()` method can be used to get the currently active event loop instance. - - ```php - // deprecated - $loop = React\EventLoop\Factory::create(); - - // new - $loop = React\EventLoop\Loop::get(); - ``` - -* Minor documentation improvements and mark legacy extensions as deprecated. - (#234 by @SimonFrings, #214 by @WyriHaximus and #233 and #235 by @nhedger) - -* Improve test suite, use GitHub actions for continuous integration (CI), - update PHPUnit config and run tests on PHP 8. - (#212 and #215 by @SimonFrings and #230 by @clue) - -## 1.1.1 (2020-01-01) - -* Fix: Fix reporting connection refused errors with `ExtUvLoop` on Linux and `StreamSelectLoop` on Windows. - (#207 and #208 by @clue) - -* Fix: Fix unsupported EventConfig and `SEGFAULT` on shutdown with `ExtEventLoop` on Windows. - (#205 by @clue) - -* Fix: Prevent interval overflow for timers very far in the future with `ExtUvLoop`. - (#196 by @PabloKowalczyk) - -* Fix: Check PCNTL functions for signal support instead of PCNTL extension with `StreamSelectLoop`. - (#195 by @clue) - -* Add `.gitattributes` to exclude dev files from exports. - (#201 by @reedy) - -* Improve test suite to fix testing `ExtUvLoop` on Travis, - fix Travis CI builds, do not install `libuv` on legacy PHP setups, - fix failing test cases due to inaccurate timers, - run tests on Windows via Travis CI and - run tests on PHP 7.4 and simplify test matrix and test setup. - (#197 by @WyriHaximus and #202, #203, #204 and #209 by @clue) - -## 1.1.0 (2019-02-07) - -* New UV based event loop (ext-uv). - (#112 by @WyriHaximus) - -* Use high resolution timer on PHP 7.3+. - (#182 by @clue) - -* Improve PCNTL signals by using async signal dispatching if available. - (#179 by @CharlotteDunois) - -* Improve test suite and test suite set up. - (#174 by @WyriHaximus, #181 by @clue) - -* Fix PCNTL signals edge case. - (#183 by @clue) - -## 1.0.0 (2018-07-11) - -* First stable LTS release, now following [SemVer](https://semver.org/). - We'd like to emphasize that this component is production ready and battle-tested. - We plan to support all long-term support (LTS) releases for at least 24 months, - so you have a rock-solid foundation to build on top of. - -> Contains no other changes, so it's actually fully compatible with the v0.5.3 release. - -## 0.5.3 (2018-07-09) - -* Improve performance by importing global functions. - (#167 by @Ocramius) - -* Improve test suite by simplifying test bootstrap by using dev autoloader. - (#169 by @lcobucci) - -* Minor internal changes to improved backward compatibility with PHP 5.3. - (#166 by @Donatello-za) - -## 0.5.2 (2018-04-24) - -* Feature: Improve memory consumption and runtime performance for `StreamSelectLoop` timers. - (#164 by @clue) - -* Improve test suite by removing I/O dependency at `StreamSelectLoopTest` to fix Mac OS X tests. - (#161 by @nawarian) - -## 0.5.1 (2018-04-09) - -* Feature: New `ExtEvLoop` (PECL ext-ev) (#148 by @kaduev13) - -## 0.5.0 (2018-04-05) - -A major feature release with a significant documentation overhaul and long overdue API cleanup! - -This update involves a number of BC breaks due to dropped support for deprecated -functionality. We've tried hard to avoid BC breaks where possible and minimize -impact otherwise. We expect that most consumers of this package will actually -not be affected by any BC breaks, see below for more details. - -We realize that the changes listed below may seem overwhelming, but we've tried -to be very clear about any possible BC breaks. Don't worry: In fact, all ReactPHP -components are already compatible and support both this new release as well as -providing backwards compatibility with the last release. - -* Feature / BC break: Add support for signal handling via new - `LoopInterface::addSignal()` and `LoopInterface::removeSignal()` methods. - (#104 by @WyriHaximus and #111 and #150 by @clue) - - ```php - $loop->addSignal(SIGINT, function () { - echo 'CTRL-C'; - }); - ``` - -* Feature: Significant documentation updates for `LoopInterface` and `Factory`. - (#100, #119, #126, #127, #159 and #160 by @clue, #113 by @WyriHaximus and #81 and #91 by @jsor) - -* Feature: Add examples to ease getting started - (#99, #100 and #125 by @clue, #59 by @WyriHaximus and #143 by @jsor) - -* Feature: Documentation for advanced timer concepts, such as monotonic time source vs wall-clock time - and high precision timers with millisecond accuracy or below. - (#130 and #157 by @clue) - -* Feature: Documentation for advanced stream concepts, such as edge-triggered event listeners - and stream buffers and allow throwing Exception if stream resource is not supported. - (#129 and #158 by @clue) - -* Feature: Throw `BadMethodCallException` on manual loop creation when required extension isn't installed. - (#153 by @WyriHaximus) - -* Feature / BC break: First class support for legacy PHP 5.3 through PHP 7.2 and HHVM - and remove all `callable` type hints for consistency reasons. - (#141 and #151 by @clue) - -* BC break: Documentation for timer API and clean up unneeded timer API. - (#102 by @clue) - - Remove `TimerInterface::cancel()`, use `LoopInterface::cancelTimer()` instead: - - ```php - // old (method invoked on timer instance) - $timer->cancel(); - - // already supported before: invoke method on loop instance - $loop->cancelTimer($timer); - ``` - - Remove unneeded `TimerInterface::setData()` and `TimerInterface::getData()`, - use closure binding to add arbitrary data to timer instead: - - ```php - // old (limited setData() and getData() only allows single variable) - $name = 'Tester'; - $timer = $loop->addTimer(1.0, function ($timer) { - echo 'Hello ' . $timer->getData() . PHP_EOL; - }); - $timer->setData($name); - - // already supported before: closure binding allows any number of variables - $name = 'Tester'; - $loop->addTimer(1.0, function () use ($name) { - echo 'Hello ' . $name . PHP_EOL; - }); - ``` - - Remove unneeded `TimerInterface::getLoop()`, use closure binding instead: - - ```php - // old (getLoop() called on timer instance) - $loop->addTimer(0.1, function ($timer) { - $timer->getLoop()->stop(); - }); - - // already supported before: use closure binding as usual - $loop->addTimer(0.1, function () use ($loop) { - $loop->stop(); - }); - ``` - -* BC break: Remove unneeded `LoopInterface::isTimerActive()` and - `TimerInterface::isActive()` to reduce API surface. - (#133 by @clue) - - ```php - // old (method on timer instance or on loop instance) - $timer->isActive(); - $loop->isTimerActive($timer); - ``` - -* BC break: Move `TimerInterface` one level up to `React\EventLoop\TimerInterface`. - (#138 by @WyriHaximus) - - ```php - // old (notice obsolete "Timer" namespace) - assert($timer instanceof React\EventLoop\Timer\TimerInterface); - - // new - assert($timer instanceof React\EventLoop\TimerInterface); - ``` - -* BC break: Remove unneeded `LoopInterface::nextTick()` (and internal `NextTickQueue`), - use `LoopInterface::futureTick()` instead. - (#30 by @clue) - - ```php - // old (removed) - $loop->nextTick(function () { - echo 'tick'; - }); - - // already supported before - $loop->futureTick(function () { - echo 'tick'; - }); - ``` - -* BC break: Remove unneeded `$loop` argument for `LoopInterface::futureTick()` - (and fix internal cyclic dependency). - (#103 by @clue) - - ```php - // old ($loop gets passed by default) - $loop->futureTick(function ($loop) { - $loop->stop(); - }); - - // already supported before: use closure binding as usual - $loop->futureTick(function () use ($loop) { - $loop->stop(); - }); - ``` - -* BC break: Remove unneeded `LoopInterface::tick()`. - (#72 by @jsor) - - ```php - // old (removed) - $loop->tick(); - - // suggested work around for testing purposes only - $loop->futureTick(function () use ($loop) { - $loop->stop(); - }); - ``` - -* BC break: Documentation for advanced stream API and clean up unneeded stream API. - (#110 by @clue) - - Remove unneeded `$loop` argument for `LoopInterface::addReadStream()` - and `LoopInterface::addWriteStream()`, use closure binding instead: - - ```php - // old ($loop gets passed by default) - $loop->addReadStream($stream, function ($stream, $loop) { - $loop->removeReadStream($stream); - }); - - // already supported before: use closure binding as usual - $loop->addReadStream($stream, function ($stream) use ($loop) { - $loop->removeReadStream($stream); - }); - ``` - -* BC break: Remove unneeded `LoopInterface::removeStream()` method, - use `LoopInterface::removeReadStream()` and `LoopInterface::removeWriteStream()` instead. - (#118 by @clue) - - ```php - // old - $loop->removeStream($stream); - - // already supported before - $loop->removeReadStream($stream); - $loop->removeWriteStream($stream); - ``` - -* BC break: Rename `LibEventLoop` to `ExtLibeventLoop` and `LibEvLoop` to `ExtLibevLoop` - for consistent naming for event loop implementations. - (#128 by @clue) - -* BC break: Remove optional `EventBaseConfig` argument from `ExtEventLoop` - and make its `FEATURE_FDS` enabled by default. - (#156 by @WyriHaximus) - -* BC break: Mark all classes as final to discourage inheritance. - (#131 by @clue) - -* Fix: Fix `ExtEventLoop` to keep track of stream resources (refcount) - (#123 by @clue) - -* Fix: Ensure large timer interval does not overflow on 32bit systems - (#132 by @clue) - -* Fix: Fix separately removing readable and writable side of stream when closing - (#139 by @clue) - -* Fix: Properly clean up event watchers for `ext-event` and `ext-libev` - (#149 by @clue) - -* Fix: Minor code cleanup and remove unneeded references - (#145 by @seregazhuk) - -* Fix: Discourage outdated `ext-libevent` on PHP 7 - (#62 by @cboden) - -* Improve test suite by adding forward compatibility with PHPUnit 6 and PHPUnit 5, - lock Travis distro so new defaults will not break the build, - improve test suite to be less fragile and increase test timeouts, - test against PHP 7.2 and reduce fwrite() call length to one chunk. - (#106 and #144 by @clue, #120 and #124 by @carusogabriel, #147 by nawarian and #92 by @kelunik) - -* A number of changes were originally planned for this release but have been backported - to the last `v0.4.3` already: #74, #76, #79, #81 (refs #65, #66, #67), #88 and #93 - -## 0.4.3 (2017-04-27) - -* Bug fix: Bugfix in the usage sample code #57 (@dandelionred) -* Improvement: Remove branch-alias definition #53 (@WyriHaximus) -* Improvement: StreamSelectLoop: Use fresh time so Timers added during stream events are accurate #51 (@andrewminerd) -* Improvement: Avoid deprecation warnings in test suite due to deprecation of getMock() in PHPUnit #68 (@martinschroeder) -* Improvement: Add PHPUnit 4.8 to require-dev #69 (@shaunbramley) -* Improvement: Increase test timeouts for HHVM and unify timeout handling #70 (@clue) -* Improvement: Travis improvements (backported from #74) #75 (@clue) -* Improvement: Test suite now uses socket pairs instead of memory streams #66 (@martinschroeder) -* Improvement: StreamSelectLoop: Test suite uses signal constant names in data provider #67 (@martinschroeder) -* Improvement: ExtEventLoop: No longer suppress all errors #65 (@mamciek) -* Improvement: Readme cleanup #89 (@jsor) -* Improvement: Restructure and improve README #90 (@jsor) -* Bug fix: StreamSelectLoop: Fix erroneous zero-time sleep (backport to 0.4) #94 (@jsor) - -## 0.4.2 (2016-03-07) - -* Bug fix: No longer error when signals sent to StreamSelectLoop -* Support HHVM and PHP7 (@ondrejmirtes, @cebe) -* Feature: Added support for EventConfig for ExtEventLoop (@steverhoades) -* Bug fix: Fixed an issue loading loop extension libs via autoloader (@czarpino) - -## 0.4.1 (2014-04-13) - -* Bug fix: null timeout in StreamSelectLoop causing 100% CPU usage (@clue) -* Bug fix: v0.3.4 changes merged for v0.4.1 - -## 0.4.0 (2014-02-02) - -* Feature: Added `EventLoopInterface::nextTick()`, implemented in all event loops (@jmalloc) -* Feature: Added `EventLoopInterface::futureTick()`, implemented in all event loops (@jmalloc) -* Feature: Added `ExtEventLoop` implementation using pecl/event (@jmalloc) -* BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks -* BC break: New method: `EventLoopInterface::nextTick()` -* BC break: New method: `EventLoopInterface::futureTick()` -* Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0 - -## 0.3.5 (2016-12-28) - -This is a compatibility release that eases upgrading to the v0.4 release branch. -You should consider upgrading to the v0.4 release branch. - -* Feature: Cap min timer interval at 1µs, thus improving compatibility with v0.4 - (#47 by @clue) - -## 0.3.4 (2014-03-30) - -* Bug fix: Changed StreamSelectLoop to use non-blocking behavior on tick() (@astephens25) - -## 0.3.3 (2013-07-08) - -* Bug fix: No error on removing non-existent streams (@clue) -* Bug fix: Do not silently remove feof listeners in `LibEvLoop` - -## 0.3.0 (2013-04-14) - -* BC break: New timers API (@nrk) -* BC break: Remove check on return value from stream callbacks (@nrk) - -## 0.2.7 (2013-01-05) - -* Bug fix: Fix libevent timers with PHP 5.3 -* Bug fix: Fix libevent timer cancellation (@nrk) - -## 0.2.6 (2012-12-26) - -* Bug fix: Plug memory issue in libevent timers (@cameronjacobson) -* Bug fix: Correctly pause LibEvLoop on stop() - -## 0.2.3 (2012-11-14) - -* Feature: LibEvLoop, integration of `php-libev` - -## 0.2.0 (2012-09-10) - -* Version bump - -## 0.1.1 (2012-07-12) - -* Version bump - -## 0.1.0 (2012-07-11) - -* First tagged release diff --git a/deps/vendor/react/event-loop/LICENSE b/deps/vendor/react/event-loop/LICENSE deleted file mode 100644 index d6f8901f9..000000000 --- a/deps/vendor/react/event-loop/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012 Christian Lück, Cees-Jan Kiewiet, Jan Sorgalla, Chris Boden, Igor Wiedler - -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/deps/vendor/react/event-loop/README.md b/deps/vendor/react/event-loop/README.md deleted file mode 100644 index b89ad5750..000000000 --- a/deps/vendor/react/event-loop/README.md +++ /dev/null @@ -1,919 +0,0 @@ -# EventLoop Component - -[![CI status](https://github.com/reactphp/event-loop/workflows/CI/badge.svg)](https://github.com/reactphp/event-loop/actions) - -[ReactPHP](https://reactphp.org/)'s core reactor event loop that libraries can use for evented I/O. - -In order for async based libraries to be interoperable, they need to use the -same event loop. This component provides a common `LoopInterface` that any -library can target. This allows them to be used in the same loop, with one -single [`run()`](#run) call that is controlled by the user. - -**Table of Contents** - -* [Quickstart example](#quickstart-example) -* [Usage](#usage) - * [Loop](#loop) - * [Loop methods](#loop-methods) - * [Loop autorun](#loop-autorun) - * [get()](#get) - * [~~Factory~~](#factory) - * [~~create()~~](#create) - * [Loop implementations](#loop-implementations) - * [StreamSelectLoop](#streamselectloop) - * [ExtEventLoop](#exteventloop) - * [ExtEvLoop](#extevloop) - * [ExtUvLoop](#extuvloop) - * [~~ExtLibeventLoop~~](#extlibeventloop) - * [~~ExtLibevLoop~~](#extlibevloop) - * [LoopInterface](#loopinterface) - * [run()](#run) - * [stop()](#stop) - * [addTimer()](#addtimer) - * [addPeriodicTimer()](#addperiodictimer) - * [cancelTimer()](#canceltimer) - * [futureTick()](#futuretick) - * [addSignal()](#addsignal) - * [removeSignal()](#removesignal) - * [addReadStream()](#addreadstream) - * [addWriteStream()](#addwritestream) - * [removeReadStream()](#removereadstream) - * [removeWriteStream()](#removewritestream) -* [Install](#install) -* [Tests](#tests) -* [License](#license) -* [More](#more) - -## Quickstart example - -Here is an async HTTP server built with just the event loop. - -```php -addPeriodicTimer(0.1, function () { - echo 'Tick' . PHP_EOL; -}); - -$loop->addTimer(1.0, function () use ($loop, $timer) { - $loop->cancelTimer($timer); - echo 'Done' . PHP_EOL; -}); - -$loop->run(); -``` - -While the former is more concise, the latter is more explicit. -In both cases, the program would perform the exact same steps. - -1. The event loop instance is created at the beginning of the program. This is - implicitly done the first time you call the [`Loop` class](#loop) or - explicitly when using the deprecated [`Factory::create() method`](#create) - (or manually instantiating any of the [loop implementations](#loop-implementations)). -2. The event loop is used directly or passed as an instance to library and - application code. In this example, a periodic timer is registered with the - event loop which simply outputs `Tick` every fraction of a second until another - timer stops the periodic timer after a second. -3. The event loop is run at the end of the program. This is automatically done - when using [`Loop` class](#loop) or explicitly with a single [`run()`](#run) - call at the end of the program. - -As of `v1.2.0`, we highly recommend using the [`Loop` class](#loop). -The explicit loop instructions are still valid and may still be useful in some -applications, especially for a transition period towards the more concise style. - -### Loop - -The `Loop` class exists as a convenient global accessor for the event loop. - -#### Loop methods - -The `Loop` class provides all methods that exist on the [`LoopInterface`](#loopinterface) -as static methods: - -* [run()](#run) -* [stop()](#stop) -* [addTimer()](#addtimer) -* [addPeriodicTimer()](#addperiodictimer) -* [cancelTimer()](#canceltimer) -* [futureTick()](#futuretick) -* [addSignal()](#addsignal) -* [removeSignal()](#removesignal) -* [addReadStream()](#addreadstream) -* [addWriteStream()](#addwritestream) -* [removeReadStream()](#removereadstream) -* [removeWriteStream()](#removewritestream) - -If you're working with the event loop in your application code, it's often -easiest to directly interface with the static methods defined on the `Loop` class -like this: - -```php -use React\EventLoop\Loop; - -$timer = Loop::addPeriodicTimer(0.1, function () { - echo 'Tick' . PHP_EOL; -}); - -Loop::addTimer(1.0, function () use ($timer) { - Loop::cancelTimer($timer); - echo 'Done' . PHP_EOL; -}); -``` - -On the other hand, if you're familiar with object-oriented programming (OOP) and -dependency injection (DI), you may want to inject an event loop instance and -invoke instance methods on the `LoopInterface` like this: - -```php -use React\EventLoop\Loop; -use React\EventLoop\LoopInterface; - -class Greeter -{ - private $loop; - - public function __construct(LoopInterface $loop) - { - $this->loop = $loop; - } - - public function greet(string $name) - { - $this->loop->addTimer(1.0, function () use ($name) { - echo 'Hello ' . $name . '!' . PHP_EOL; - }); - } -} - -$greeter = new Greeter(Loop::get()); -$greeter->greet('Alice'); -$greeter->greet('Bob'); -``` - -Each static method call will be forwarded as-is to the underlying event loop -instance by using the [`Loop::get()`](#get) call internally. -See [`LoopInterface`](#loopinterface) for more details about available methods. - -#### Loop autorun - -When using the `Loop` class, it will automatically execute the loop at the end of -the program. This means the following example will schedule a timer and will -automatically execute the program until the timer event fires: - -```php -use React\EventLoop\Loop; - -Loop::addTimer(1.0, function () { - echo 'Hello' . PHP_EOL; -}); -``` - -As of `v1.2.0`, we highly recommend using the `Loop` class this way and omitting any -explicit [`run()`](#run) calls. For BC reasons, the explicit [`run()`](#run) -method is still valid and may still be useful in some applications, especially -for a transition period towards the more concise style. - -If you don't want the `Loop` to run automatically, you can either explicitly -[`run()`](#run) or [`stop()`](#stop) it. This can be useful if you're using -a global exception handler like this: - -```php -use React\EventLoop\Loop; - -Loop::addTimer(10.0, function () { - echo 'Never happens'; -}); - -set_exception_handler(function (Throwable $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; - Loop::stop(); -}); - -throw new RuntimeException('Demo'); -``` - -#### get() - -The `get(): LoopInterface` method can be used to -get the currently active event loop instance. - -This method will always return the same event loop instance throughout the -lifetime of your application. - -```php -use React\EventLoop\Loop; -use React\EventLoop\LoopInterface; - -$loop = Loop::get(); - -assert($loop instanceof LoopInterface); -assert($loop === Loop::get()); -``` - -This is particularly useful if you're using object-oriented programming (OOP) -and dependency injection (DI). In this case, you may want to inject an event -loop instance and invoke instance methods on the `LoopInterface` like this: - -```php -use React\EventLoop\Loop; -use React\EventLoop\LoopInterface; - -class Greeter -{ - private $loop; - - public function __construct(LoopInterface $loop) - { - $this->loop = $loop; - } - - public function greet(string $name) - { - $this->loop->addTimer(1.0, function () use ($name) { - echo 'Hello ' . $name . '!' . PHP_EOL; - }); - } -} - -$greeter = new Greeter(Loop::get()); -$greeter->greet('Alice'); -$greeter->greet('Bob'); -``` - -See [`LoopInterface`](#loopinterface) for more details about available methods. - -### ~~Factory~~ - -> Deprecated since v1.2.0, see [`Loop` class](#loop) instead. - -The deprecated `Factory` class exists as a convenient way to pick the best available -[event loop implementation](#loop-implementations). - -#### ~~create()~~ - -> Deprecated since v1.2.0, see [`Loop::get()`](#get) instead. - -The deprecated `create(): LoopInterface` method can be used to -create a new event loop instance: - -```php -// deprecated -$loop = React\EventLoop\Factory::create(); - -// new -$loop = React\EventLoop\Loop::get(); -``` - -This method always returns an instance implementing [`LoopInterface`](#loopinterface), -the actual [event loop implementation](#loop-implementations) is an implementation detail. - -This method should usually only be called once at the beginning of the program. - -### Loop implementations - -In addition to the [`LoopInterface`](#loopinterface), there are a number of -event loop implementations provided. - -All of the event loops support these features: - -* File descriptor polling -* One-off timers -* Periodic timers -* Deferred execution on future loop tick - -For most consumers of this package, the underlying event loop implementation is -an implementation detail. -You should use the [`Factory`](#factory) to automatically create a new instance. - -Advanced! If you explicitly need a certain event loop implementation, you can -manually instantiate one of the following classes. -Note that you may have to install the required PHP extensions for the respective -event loop implementation first or they will throw a `BadMethodCallException` on creation. - -#### StreamSelectLoop - -A `stream_select()` based event loop. - -This uses the [`stream_select()`](https://www.php.net/manual/en/function.stream-select.php) -function and is the only implementation which works out of the box with PHP. - -This event loop works out of the box on PHP 5.3 through PHP 7+ and HHVM. -This means that no installation is required and this library works on all -platforms and supported PHP versions. -Accordingly, the [`Factory`](#factory) will use this event loop by default if -you do not install any of the event loop extensions listed below. - -Under the hood, it does a simple `select` system call. -This system call is limited to the maximum file descriptor number of -`FD_SETSIZE` (platform dependent, commonly 1024) and scales with `O(m)` -(`m` being the maximum file descriptor number passed). -This means that you may run into issues when handling thousands of streams -concurrently and you may want to look into using one of the alternative -event loop implementations listed below in this case. -If your use case is among the many common use cases that involve handling only -dozens or a few hundred streams at once, then this event loop implementation -performs really well. - -If you want to use signal handling (see also [`addSignal()`](#addsignal) below), -this event loop implementation requires `ext-pcntl`. -This extension is only available for Unix-like platforms and does not support -Windows. -It is commonly installed as part of many PHP distributions. -If this extension is missing (or you're running on Windows), signal handling is -not supported and throws a `BadMethodCallException` instead. - -This event loop is known to rely on wall-clock time to schedule future timers -when using any version before PHP 7.3, because a monotonic time source is -only available as of PHP 7.3 (`hrtime()`). -While this does not affect many common use cases, this is an important -distinction for programs that rely on a high time precision or on systems -that are subject to discontinuous time adjustments (time jumps). -This means that if you schedule a timer to trigger in 30s on PHP < 7.3 and -then adjust your system time forward by 20s, the timer may trigger in 10s. -See also [`addTimer()`](#addtimer) for more details. - -#### ExtEventLoop - -An `ext-event` based event loop. - -This uses the [`event` PECL extension](https://pecl.php.net/package/event), -that provides an interface to `libevent` library. -`libevent` itself supports a number of system-specific backends (epoll, kqueue). - -This loop is known to work with PHP 5.4 through PHP 7+. - -#### ExtEvLoop - -An `ext-ev` based event loop. - -This loop uses the [`ev` PECL extension](https://pecl.php.net/package/ev), -that provides an interface to `libev` library. -`libev` itself supports a number of system-specific backends (epoll, kqueue). - - -This loop is known to work with PHP 5.4 through PHP 7+. - -#### ExtUvLoop - -An `ext-uv` based event loop. - -This loop uses the [`uv` PECL extension](https://pecl.php.net/package/uv), -that provides an interface to `libuv` library. -`libuv` itself supports a number of system-specific backends (epoll, kqueue). - -This loop is known to work with PHP 7+. - -#### ~~ExtLibeventLoop~~ - -> Deprecated since v1.2.0, use [`ExtEventLoop`](#exteventloop) instead. - -An `ext-libevent` based event loop. - -This uses the [`libevent` PECL extension](https://pecl.php.net/package/libevent), -that provides an interface to `libevent` library. -`libevent` itself supports a number of system-specific backends (epoll, kqueue). - -This event loop does only work with PHP 5. -An [unofficial update](https://github.com/php/pecl-event-libevent/pull/2) for -PHP 7 does exist, but it is known to cause regular crashes due to `SEGFAULT`s. -To reiterate: Using this event loop on PHP 7 is not recommended. -Accordingly, the [`Factory`](#factory) will not try to use this event loop on -PHP 7. - -This event loop is known to trigger a readable listener only if -the stream *becomes* readable (edge-triggered) and may not trigger if the -stream has already been readable from the beginning. -This also implies that a stream may not be recognized as readable when data -is still left in PHP's internal stream buffers. -As such, it's recommended to use `stream_set_read_buffer($stream, 0);` -to disable PHP's internal read buffer in this case. -See also [`addReadStream()`](#addreadstream) for more details. - -#### ~~ExtLibevLoop~~ - -> Deprecated since v1.2.0, use [`ExtEvLoop`](#extevloop) instead. - -An `ext-libev` based event loop. - -This uses an [unofficial `libev` extension](https://github.com/m4rw3r/php-libev), -that provides an interface to `libev` library. -`libev` itself supports a number of system-specific backends (epoll, kqueue). - -This loop does only work with PHP 5. -An update for PHP 7 is [unlikely](https://github.com/m4rw3r/php-libev/issues/8) -to happen any time soon. - -### LoopInterface - -#### run() - -The `run(): void` method can be used to -run the event loop until there are no more tasks to perform. - -For many applications, this method is the only directly visible -invocation on the event loop. -As a rule of thumb, it is usally recommended to attach everything to the -same loop instance and then run the loop once at the bottom end of the -application. - -```php -$loop->run(); -``` - -This method will keep the loop running until there are no more tasks -to perform. In other words: This method will block until the last -timer, stream and/or signal has been removed. - -Likewise, it is imperative to ensure the application actually invokes -this method once. Adding listeners to the loop and missing to actually -run it will result in the application exiting without actually waiting -for any of the attached listeners. - -This method MUST NOT be called while the loop is already running. -This method MAY be called more than once after it has explicity been -[`stop()`ped](#stop) or after it automatically stopped because it -previously did no longer have anything to do. - -#### stop() - -The `stop(): void` method can be used to -instruct a running event loop to stop. - -This method is considered advanced usage and should be used with care. -As a rule of thumb, it is usually recommended to let the loop stop -only automatically when it no longer has anything to do. - -This method can be used to explicitly instruct the event loop to stop: - -```php -$loop->addTimer(3.0, function () use ($loop) { - $loop->stop(); -}); -``` - -Calling this method on a loop instance that is not currently running or -on a loop instance that has already been stopped has no effect. - -#### addTimer() - -The `addTimer(float $interval, callable $callback): TimerInterface` method can be used to -enqueue a callback to be invoked once after the given interval. - -The timer callback function MUST be able to accept a single parameter, -the timer instance as also returned by this method or you MAY use a -function which has no parameters at all. - -The timer callback function MUST NOT throw an `Exception`. -The return value of the timer callback function will be ignored and has -no effect, so for performance reasons you're recommended to not return -any excessive data structures. - -Unlike [`addPeriodicTimer()`](#addperiodictimer), this method will ensure -the callback will be invoked only once after the given interval. -You can invoke [`cancelTimer`](#canceltimer) to cancel a pending timer. - -```php -$loop->addTimer(0.8, function () { - echo 'world!' . PHP_EOL; -}); - -$loop->addTimer(0.3, function () { - echo 'hello '; -}); -``` - -See also [example #1](examples). - -If you want to access any variables within your callback function, you -can bind arbitrary data to a callback closure like this: - -```php -function hello($name, LoopInterface $loop) -{ - $loop->addTimer(1.0, function () use ($name) { - echo "hello $name\n"; - }); -} - -hello('Tester', $loop); -``` - -This interface does not enforce any particular timer resolution, so -special care may have to be taken if you rely on very high precision with -millisecond accuracy or below. Event loop implementations SHOULD work on -a best effort basis and SHOULD provide at least millisecond accuracy -unless otherwise noted. Many existing event loop implementations are -known to provide microsecond accuracy, but it's generally not recommended -to rely on this high precision. - -Similarly, the execution order of timers scheduled to execute at the -same time (within its possible accuracy) is not guaranteed. - -This interface suggests that event loop implementations SHOULD use a -monotonic time source if available. Given that a monotonic time source is -only available as of PHP 7.3 by default, event loop implementations MAY -fall back to using wall-clock time. -While this does not affect many common use cases, this is an important -distinction for programs that rely on a high time precision or on systems -that are subject to discontinuous time adjustments (time jumps). -This means that if you schedule a timer to trigger in 30s and then adjust -your system time forward by 20s, the timer SHOULD still trigger in 30s. -See also [event loop implementations](#loop-implementations) for more details. - -#### addPeriodicTimer() - -The `addPeriodicTimer(float $interval, callable $callback): TimerInterface` method can be used to -enqueue a callback to be invoked repeatedly after the given interval. - -The timer callback function MUST be able to accept a single parameter, -the timer instance as also returned by this method or you MAY use a -function which has no parameters at all. - -The timer callback function MUST NOT throw an `Exception`. -The return value of the timer callback function will be ignored and has -no effect, so for performance reasons you're recommended to not return -any excessive data structures. - -Unlike [`addTimer()`](#addtimer), this method will ensure the the -callback will be invoked infinitely after the given interval or until you -invoke [`cancelTimer`](#canceltimer). - -```php -$timer = $loop->addPeriodicTimer(0.1, function () { - echo 'tick!' . PHP_EOL; -}); - -$loop->addTimer(1.0, function () use ($loop, $timer) { - $loop->cancelTimer($timer); - echo 'Done' . PHP_EOL; -}); -``` - -See also [example #2](examples). - -If you want to limit the number of executions, you can bind -arbitrary data to a callback closure like this: - -```php -function hello($name, LoopInterface $loop) -{ - $n = 3; - $loop->addPeriodicTimer(1.0, function ($timer) use ($name, $loop, &$n) { - if ($n > 0) { - --$n; - echo "hello $name\n"; - } else { - $loop->cancelTimer($timer); - } - }); -} - -hello('Tester', $loop); -``` - -This interface does not enforce any particular timer resolution, so -special care may have to be taken if you rely on very high precision with -millisecond accuracy or below. Event loop implementations SHOULD work on -a best effort basis and SHOULD provide at least millisecond accuracy -unless otherwise noted. Many existing event loop implementations are -known to provide microsecond accuracy, but it's generally not recommended -to rely on this high precision. - -Similarly, the execution order of timers scheduled to execute at the -same time (within its possible accuracy) is not guaranteed. - -This interface suggests that event loop implementations SHOULD use a -monotonic time source if available. Given that a monotonic time source is -only available as of PHP 7.3 by default, event loop implementations MAY -fall back to using wall-clock time. -While this does not affect many common use cases, this is an important -distinction for programs that rely on a high time precision or on systems -that are subject to discontinuous time adjustments (time jumps). -This means that if you schedule a timer to trigger in 30s and then adjust -your system time forward by 20s, the timer SHOULD still trigger in 30s. -See also [event loop implementations](#loop-implementations) for more details. - -Additionally, periodic timers may be subject to timer drift due to -re-scheduling after each invocation. As such, it's generally not -recommended to rely on this for high precision intervals with millisecond -accuracy or below. - -#### cancelTimer() - -The `cancelTimer(TimerInterface $timer): void` method can be used to -cancel a pending timer. - -See also [`addPeriodicTimer()`](#addperiodictimer) and [example #2](examples). - -Calling this method on a timer instance that has not been added to this -loop instance or on a timer that has already been cancelled has no effect. - -#### futureTick() - -The `futureTick(callable $listener): void` method can be used to -schedule a callback to be invoked on a future tick of the event loop. - -This works very much similar to timers with an interval of zero seconds, -but does not require the overhead of scheduling a timer queue. - -The tick callback function MUST be able to accept zero parameters. - -The tick callback function MUST NOT throw an `Exception`. -The return value of the tick callback function will be ignored and has -no effect, so for performance reasons you're recommended to not return -any excessive data structures. - -If you want to access any variables within your callback function, you -can bind arbitrary data to a callback closure like this: - -```php -function hello($name, LoopInterface $loop) -{ - $loop->futureTick(function () use ($name) { - echo "hello $name\n"; - }); -} - -hello('Tester', $loop); -``` - -Unlike timers, tick callbacks are guaranteed to be executed in the order -they are enqueued. -Also, once a callback is enqueued, there's no way to cancel this operation. - -This is often used to break down bigger tasks into smaller steps (a form -of cooperative multitasking). - -```php -$loop->futureTick(function () { - echo 'b'; -}); -$loop->futureTick(function () { - echo 'c'; -}); -echo 'a'; -``` - -See also [example #3](examples). - -#### addSignal() - -The `addSignal(int $signal, callable $listener): void` method can be used to -register a listener to be notified when a signal has been caught by this process. - -This is useful to catch user interrupt signals or shutdown signals from -tools like `supervisor` or `systemd`. - -The listener callback function MUST be able to accept a single parameter, -the signal added by this method or you MAY use a function which -has no parameters at all. - -The listener callback function MUST NOT throw an `Exception`. -The return value of the listener callback function will be ignored and has -no effect, so for performance reasons you're recommended to not return -any excessive data structures. - -```php -$loop->addSignal(SIGINT, function (int $signal) { - echo 'Caught user interrupt signal' . PHP_EOL; -}); -``` - -See also [example #4](examples). - -Signaling is only available on Unix-like platform, Windows isn't -supported due to operating system limitations. -This method may throw a `BadMethodCallException` if signals aren't -supported on this platform, for example when required extensions are -missing. - -**Note: A listener can only be added once to the same signal, any -attempts to add it more then once will be ignored.** - -#### removeSignal() - -The `removeSignal(int $signal, callable $listener): void` method can be used to -remove a previously added signal listener. - -```php -$loop->removeSignal(SIGINT, $listener); -``` - -Any attempts to remove listeners that aren't registered will be ignored. - -#### addReadStream() - -> Advanced! Note that this low-level API is considered advanced usage. - Most use cases should probably use the higher-level - [readable Stream API](https://github.com/reactphp/stream#readablestreaminterface) - instead. - -The `addReadStream(resource $stream, callable $callback): void` method can be used to -register a listener to be notified when a stream is ready to read. - -The first parameter MUST be a valid stream resource that supports -checking whether it is ready to read by this loop implementation. -A single stream resource MUST NOT be added more than once. -Instead, either call [`removeReadStream()`](#removereadstream) first or -react to this event with a single listener and then dispatch from this -listener. This method MAY throw an `Exception` if the given resource type -is not supported by this loop implementation. - -The listener callback function MUST be able to accept a single parameter, -the stream resource added by this method or you MAY use a function which -has no parameters at all. - -The listener callback function MUST NOT throw an `Exception`. -The return value of the listener callback function will be ignored and has -no effect, so for performance reasons you're recommended to not return -any excessive data structures. - -If you want to access any variables within your callback function, you -can bind arbitrary data to a callback closure like this: - -```php -$loop->addReadStream($stream, function ($stream) use ($name) { - echo $name . ' said: ' . fread($stream); -}); -``` - -See also [example #11](examples). - -You can invoke [`removeReadStream()`](#removereadstream) to remove the -read event listener for this stream. - -The execution order of listeners when multiple streams become ready at -the same time is not guaranteed. - -Some event loop implementations are known to only trigger the listener if -the stream *becomes* readable (edge-triggered) and may not trigger if the -stream has already been readable from the beginning. -This also implies that a stream may not be recognized as readable when data -is still left in PHP's internal stream buffers. -As such, it's recommended to use `stream_set_read_buffer($stream, 0);` -to disable PHP's internal read buffer in this case. - -#### addWriteStream() - -> Advanced! Note that this low-level API is considered advanced usage. - Most use cases should probably use the higher-level - [writable Stream API](https://github.com/reactphp/stream#writablestreaminterface) - instead. - -The `addWriteStream(resource $stream, callable $callback): void` method can be used to -register a listener to be notified when a stream is ready to write. - -The first parameter MUST be a valid stream resource that supports -checking whether it is ready to write by this loop implementation. -A single stream resource MUST NOT be added more than once. -Instead, either call [`removeWriteStream()`](#removewritestream) first or -react to this event with a single listener and then dispatch from this -listener. This method MAY throw an `Exception` if the given resource type -is not supported by this loop implementation. - -The listener callback function MUST be able to accept a single parameter, -the stream resource added by this method or you MAY use a function which -has no parameters at all. - -The listener callback function MUST NOT throw an `Exception`. -The return value of the listener callback function will be ignored and has -no effect, so for performance reasons you're recommended to not return -any excessive data structures. - -If you want to access any variables within your callback function, you -can bind arbitrary data to a callback closure like this: - -```php -$loop->addWriteStream($stream, function ($stream) use ($name) { - fwrite($stream, 'Hello ' . $name); -}); -``` - -See also [example #12](examples). - -You can invoke [`removeWriteStream()`](#removewritestream) to remove the -write event listener for this stream. - -The execution order of listeners when multiple streams become ready at -the same time is not guaranteed. - -#### removeReadStream() - -The `removeReadStream(resource $stream): void` method can be used to -remove the read event listener for the given stream. - -Removing a stream from the loop that has already been removed or trying -to remove a stream that was never added or is invalid has no effect. - -#### removeWriteStream() - -The `removeWriteStream(resource $stream): void` method can be used to -remove the write event listener for the given stream. - -Removing a stream from the loop that has already been removed or trying -to remove a stream that was never added or is invalid has no effect. - -## Install - -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 react/event-loop:^1.2 -``` - -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 8+ and -HHVM. -It's *highly recommended to use PHP 7+* for this project. - -Installing any of the event loop extensions is suggested, but entirely optional. -See also [event loop implementations](#loop-implementations) for more details. - -## Tests - -To run the test suite, you first need to clone this repo and then install all -dependencies [through Composer](https://getcomposer.org): - -```bash -$ composer install -``` - -To run the test suite, go to the project root and run: - -```bash -$ php vendor/bin/phpunit -``` - -## License - -MIT, see [LICENSE file](LICENSE). - -## More - -* See our [Stream component](https://github.com/reactphp/stream) for more - information on how streams are used in real-world applications. -* See our [users wiki](https://github.com/reactphp/react/wiki/Users) and the - [dependents on Packagist](https://packagist.org/packages/react/event-loop/dependents) - for a list of packages that use the EventLoop in real-world applications. diff --git a/deps/vendor/react/event-loop/composer.json b/deps/vendor/react/event-loop/composer.json deleted file mode 100644 index d9b032e1f..000000000 --- a/deps/vendor/react/event-loop/composer.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "react/event-loop", - "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", - "keywords": ["event-loop", "asynchronous"], - "license": "MIT", - "authors": [ - { - "name": "Christian Lück", - "homepage": "https://clue.engineering/", - "email": "christian@clue.engineering" - }, - { - "name": "Cees-Jan Kiewiet", - "homepage": "https://wyrihaximus.net/", - "email": "reactphp@ceesjankiewiet.nl" - }, - { - "name": "Jan Sorgalla", - "homepage": "https://sorgalla.com/", - "email": "jsorgalla@gmail.com" - }, - { - "name": "Chris Boden", - "homepage": "https://cboden.dev/", - "email": "cboden@gmail.com" - } - ], - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "suggest": { - "ext-event": "~1.0 for ExtEventLoop", - "ext-pcntl": "For signal handling support when using the StreamSelectLoop", - "ext-uv": "* for ExtUvLoop" - }, - "autoload": { - "psr-4": { - "React\\EventLoop\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "React\\Tests\\EventLoop\\": "tests" - } - } -} diff --git a/deps/vendor/react/http/CHANGELOG.md b/deps/vendor/react/http/CHANGELOG.md deleted file mode 100644 index 41079cdbe..000000000 --- a/deps/vendor/react/http/CHANGELOG.md +++ /dev/null @@ -1,803 +0,0 @@ -# Changelog - -## 1.6.0 (2022-02-03) - -* Feature: Add factory methods for common HTML/JSON/plaintext/XML response types. - (#439 by @clue) - - ```php - $response = React\Http\Response\html("

Hello wörld!

\n"); - $response = React\Http\Response\json(['message' => 'Hello wörld!']); - $response = React\Http\Response\plaintext("Hello wörld!\n"); - $response = React\Http\Response\xml("Hello wörld!\n"); - $response = React\Http\Response\redirect('https://reactphp.org/'); - ``` - -* Feature: Expose all status code constants via `Response` class. - (#432 by @clue) - - ```php - $response = new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, // 200 OK - … - ); - $response = new React\Http\Message\Response( - React\Http\Message\Response::STATUS_NOT_FOUND, // 404 Not Found - … - ); - ``` - -* Feature: Full support for PHP 8.1 release. - (#433 by @SimonFrings and #434 by @clue) - -* Feature / Fix: Improve protocol handling for HTTP responses with no body. - (#429 and #430 by @clue) - -* Internal refactoring and internal improvements for handling requests and responses. - (#422 by @WyriHaximus and #431 by @clue) - -* Improve documentation, update proxy examples, include error reporting in examples. - (#420, #424, #426, and #427 by @clue) - -* Update test suite to use default loop. - (#438 by @clue) - -## 1.5.0 (2021-08-04) - -* Feature: Update `Browser` signature to take optional `$connector` as first argument and - to match new Socket API without nullable loop arguments. - (#418 and #419 by @clue) - - ```php - // unchanged - $browser = new React\Http\Browser(); - - // deprecated - $browser = new React\Http\Browser(null, $connector); - $browser = new React\Http\Browser($loop, $connector); - - // new - $browser = new React\Http\Browser($connector); - $browser = new React\Http\Browser($connector, $loop); - ``` - -* Feature: Rename `Server` to `HttpServer` to avoid class name collisions and - to avoid any ambiguities with regards to the new `SocketServer` API. - (#417 and #419 by @clue) - - ```php - // deprecated - $server = new React\Http\Server($handler); - $server->listen(new React\Socket\Server(8080)); - - // new - $http = new React\Http\HttpServer($handler); - $http->listen(new React\Socket\SocketServer('127.0.0.1:8080')); - ``` - -## 1.4.0 (2021-07-11) - -A major new feature release, see [**release announcement**](https://clue.engineering/2021/announcing-reactphp-default-loop). - -* Feature: Simplify usage by supporting new [default loop](https://reactphp.org/event-loop/#loop). - (#410 by @clue) - - ```php - // old (still supported) - $browser = new React\Http\Browser($loop); - $server = new React\Http\Server($loop, $handler); - - // new (using default loop) - $browser = new React\Http\Browser(); - $server = new React\Http\Server($handler); - ``` - -## 1.3.0 (2021-04-11) - -* Feature: Support persistent connections (`Connection: keep-alive`). - (#405 by @clue) - - This shows a noticeable performance improvement especially when benchmarking - using persistent connections (which is the default pretty much everywhere). - Together with other changes in this release, this improves benchmarking - performance by around 100%. - -* Feature: Require `Host` request header for HTTP/1.1 requests. - (#404 by @clue) - -* Minor documentation improvements. - (#398 by @fritz-gerneth and #399 and #400 by @pavog) - -* Improve test suite, use GitHub actions for continuous integration (CI). - (#402 by @SimonFrings) - -## 1.2.0 (2020-12-04) - -* Feature: Keep request body in memory also after consuming request body. - (#395 by @clue) - - This means consumers can now always access the complete request body as - detailed in the documentation. This allows building custom parsers and more - advanced processing models without having to mess with the default parsers. - -## 1.1.0 (2020-09-11) - -* Feature: Support upcoming PHP 8 release, update to reactphp/socket v1.6 and adjust type checks for invalid chunk headers. - (#391 by @clue) - -* Feature: Consistently resolve base URL according to HTTP specs. - (#379 by @clue) - -* Feature / Fix: Expose `Transfer-Encoding: chunked` response header and fix chunked responses for `HEAD` requests. - (#381 by @clue) - -* Internal refactoring to remove unneeded `MessageFactory` and `Response` classes. - (#380 and #389 by @clue) - -* Minor documentation improvements and improve test suite, update to support PHPUnit 9.3. - (#385 by @clue and #393 by @SimonFrings) - -## 1.0.0 (2020-07-11) - -A major new feature release, see [**release announcement**](https://clue.engineering/2020/announcing-reactphp-http). - -* First stable LTS release, now following [SemVer](https://semver.org/). - We'd like to emphasize that this component is production ready and battle-tested. - We plan to support all long-term support (LTS) releases for at least 24 months, - so you have a rock-solid foundation to build on top of. - -This update involves some major new features and a number of BC breaks due to -some necessary API cleanup. We've tried hard to avoid BC breaks where possible -and minimize impact otherwise. We expect that most consumers of this package -will be affected by BC breaks, but updating should take no longer than a few -minutes. See below for more details: - -* Feature: Add async HTTP client implementation. - (#368 by @clue) - - ```php - $browser = new React\Http\Browser($loop); - $browser->get($url)->then(function (Psr\Http\Message\ResponseInterface $response) { - echo $response->getBody(); - }); - ``` - - The code has been imported as-is from [clue/reactphp-buzz v2.9.0](https://github.com/clue/reactphp-buzz), - with only minor changes to the namespace and we otherwise leave all the existing APIs unchanged. - Upgrading from [clue/reactphp-buzz v2.9.0](https://github.com/clue/reactphp-buzz) - to this release should be a matter of updating some namespace references only: - - ```php - // old - $browser = new Clue\React\Buzz\Browser($loop); - - // new - $browser = new React\Http\Browser($loop); - ``` - -* Feature / BC break: Add `LoopInterface` as required first constructor argument to `Server` and - change `Server` to accept variadic middleware handlers instead of `array`. - (#361 and #362 by @WyriHaximus) - - ```php - // old - $server = new React\Http\Server($handler); - $server = new React\Http\Server([$middleware, $handler]); - - // new - $server = new React\Http\Server($loop, $handler); - $server = new React\Http\Server($loop, $middleware, $handler); - ``` - -* Feature / BC break: Move `Response` class to `React\Http\Message\Response` and - expose `ServerRequest` class to `React\Http\Message\ServerRequest`. - (#370 by @clue) - - ```php - // old - $response = new React\Http\Response(200, [], 'Hello!'); - - // new - $response = new React\Http\Message\Response(200, [], 'Hello!'); - ``` - -* Feature / BC break: Add `StreamingRequestMiddleware` to stream incoming requests, mark `StreamingServer` as internal. - (#367 by @clue) - - ```php - // old: advanced StreamingServer is now internal only - $server = new React\Http\StreamingServer($handler); - - // new: use StreamingRequestMiddleware instead of StreamingServer - $server = new React\Http\Server( - $loop, - new React\Http\Middleware\StreamingRequestMiddleware(), - $handler - ); - ``` - -* Feature / BC break: Improve default concurrency to 1024 requests and cap default request buffer at 64K. - (#371 by @clue) - - This improves default concurrency to 1024 requests and caps the default request buffer at 64K. - The previous defaults resulted in just 4 concurrent requests with a request buffer of 8M. - See [`Server`](README.md#server) for details on how to override these defaults. - -* Feature: Expose ReactPHP in `User-Agent` client-side request header and in `Server` server-side response header. - (#374 by @clue) - -* Mark all classes as `final` to discourage inheriting from it. - (#373 by @WyriHaximus) - -* Improve documentation and use fully-qualified class names throughout the documentation and - add ReactPHP core team as authors to `composer.json` and license file. - (#366 and #369 by @WyriHaximus and #375 by @clue) - -* Improve test suite and support skipping all online tests with `--exclude-group internet`. - (#372 by @clue) - -## 0.8.7 (2020-07-05) - -* Fix: Fix parsing multipart request body with quoted header parameters (dot net). - (#363 by @ebimmel) - -* Fix: Fix calculating concurrency when `post_max_size` ini is unlimited. - (#365 by @clue) - -* Improve test suite to run tests on PHPUnit 9 and clean up test suite. - (#364 by @SimonFrings) - -## 0.8.6 (2020-01-12) - -* Fix: Fix parsing `Cookie` request header with comma in its values. - (#352 by @fiskie) - -* Fix: Avoid unneeded warning when decoding invalid data on PHP 7.4. - (#357 by @WyriHaximus) - -* Add .gitattributes to exclude dev files from exports. - (#353 by @reedy) - -## 0.8.5 (2019-10-29) - -* Internal refactorings and optimizations to improve request parsing performance. - Benchmarks suggest number of requests/s improved by ~30% for common `GET` requests. - (#345, #346, #349 and #350 by @clue) - -* Add documentation and example for JSON/XML request body and - improve documentation for concurrency and streaming requests and for error handling. - (#341 and #342 by @clue) - -## 0.8.4 (2019-01-16) - -* Improvement: Internal refactoring to simplify response header logic. - (#321 by @clue) - -* Improvement: Assign Content-Length response header automatically only when size is known. - (#329 by @clue) - -* Improvement: Import global functions for better performance. - (#330 by @WyriHaximus) - -## 0.8.3 (2018-04-11) - -* Feature: Do not pause connection stream to detect closed connections immediately. - (#315 by @clue) - -* Feature: Keep incoming `Transfer-Encoding: chunked` request header. - (#316 by @clue) - -* Feature: Reject invalid requests that contain both `Content-Length` and `Transfer-Encoding` request headers. - (#318 by @clue) - -* Minor internal refactoring to simplify connection close logic after sending response. - (#317 by @clue) - -## 0.8.2 (2018-04-06) - -* Fix: Do not pass `$next` handler to final request handler. - (#308 by @clue) - -* Fix: Fix awaiting queued handlers when cancelling a queued handler. - (#313 by @clue) - -* Fix: Fix Server to skip `SERVER_ADDR` params for Unix domain sockets (UDS). - (#307 by @clue) - -* Documentation for PSR-15 middleware and minor documentation improvements. - (#314 by @clue and #297, #298 and #310 by @seregazhuk) - -* Minor code improvements and micro optimizations. - (#301 by @seregazhuk and #305 by @kalessil) - -## 0.8.1 (2018-01-05) - -* Major request handler performance improvement. Benchmarks suggest number of - requests/s improved by more than 50% for common `GET` requests! - We now avoid queuing, buffering and wrapping incoming requests in promises - when we're below limits and instead can directly process common requests. - (#291, #292, #293, #294 and #296 by @clue) - -* Fix: Fix concurrent invoking next middleware request handlers - (#293 by @clue) - -* Small code improvements - (#286 by @seregazhuk) - -* Improve test suite to be less fragile when using `ext-event` and - fix test suite forward compatibility with upcoming EventLoop releases - (#288 and #290 by @clue) - -## 0.8.0 (2017-12-12) - -* Feature / BC break: Add new `Server` facade that buffers and parses incoming - HTTP requests. This provides full PSR-7 compatibility, including support for - form submissions with POST fields and file uploads. - The old `Server` has been renamed to `StreamingServer` for advanced usage - and is used internally. - (#266, #271, #281, #282, #283 and #284 by @WyriHaximus and @clue) - - ```php - // old: handle incomplete/streaming requests - $server = new Server($handler); - - // new: handle complete, buffered and parsed requests - // new: full PSR-7 support, including POST fields and file uploads - $server = new Server($handler); - - // new: handle incomplete/streaming requests - $server = new StreamingServer($handler); - ``` - - > While this is technically a small BC break, this should in fact not break - most consuming code. If you rely on the old request streaming, you can - explicitly use the advanced `StreamingServer` to restore old behavior. - -* Feature: Add support for middleware request handler arrays - (#215, #228, #229, #236, #237, #238, #246, #247, #277, #279 and #285 by @WyriHaximus, @clue and @jsor) - - ```php - // new: middleware request handler arrays - $server = new Server(array( - function (ServerRequestInterface $request, callable $next) { - $request = $request->withHeader('Processed', time()); - return $next($request); - }, - function (ServerRequestInterface $request) { - return new Response(); - } - )); - ``` - -* Feature: Add support for limiting how many next request handlers can be - executed concurrently (`LimitConcurrentRequestsMiddleware`) - (#272 by @clue and @WyriHaximus) - - ```php - // new: explicitly limit concurrency - $server = new Server(array( - new LimitConcurrentRequestsMiddleware(10), - $handler - )); - ``` - -* Feature: Add support for buffering the incoming request body - (`RequestBodyBufferMiddleware`). - This feature mimics PHP's default behavior and respects its `post_max_size` - ini setting by default and allows explicit configuration. - (#216, #224, #263, #276 and #278 by @WyriHaximus and #235 by @andig) - - ```php - // new: buffer up to 10 requests with 8 MiB each - $server = new StreamingServer(array( - new LimitConcurrentRequestsMiddleware(10), - new RequestBodyBufferMiddleware('8M'), - $handler - )); - ``` - -* Feature: Add support for parsing form submissions with POST fields and file - uploads (`RequestBodyParserMiddleware`). - This feature mimics PHP's default behavior and respects its ini settings and - `MAX_FILE_SIZE` POST fields by default and allows explicit configuration. - (#220, #226, #252, #261, #264, #265, #267, #268, #274 by @WyriHaximus and @clue) - - ```php - // new: buffer up to 10 requests with 8 MiB each - // and limit to 4 uploads with 2 MiB each - $server = new StreamingServer(array( - new LimitConcurrentRequestsMiddleware(10), - new RequestBodyBufferMiddleware('8M'), - new RequestBodyParserMiddleware('2M', 4) - $handler - )); - ``` - -* Feature: Update Socket to work around sending secure HTTPS responses with PHP < 7.1.4 - (#244 by @clue) - -* Feature: Support sending same response header multiple times (e.g. `Set-Cookie`) - (#248 by @clue) - -* Feature: Raise maximum request header size to 8k to match common implementations - (#253 by @clue) - -* Improve test suite by adding forward compatibility with PHPUnit 6, test - against PHP 7.1 and PHP 7.2 and refactor and remove risky and duplicate tests. - (#243, #269 and #270 by @carusogabriel and #249 by @clue) - -* Minor code refactoring to move internal classes to `React\Http\Io` namespace - and clean up minor code and documentation issues - (#251 by @clue, #227 by @kalessil, #240 by @christoph-kluge, #230 by @jsor and #280 by @andig) - -## 0.7.4 (2017-08-16) - -* Improvement: Target evenement 3.0 a long side 2.0 and 1.0 - (#212 by @WyriHaximus) - -## 0.7.3 (2017-08-14) - -* Feature: Support `Throwable` when setting previous exception from server callback - (#155 by @jsor) - -* Fix: Fixed URI parsing for origin-form requests that contain scheme separator - such as `/path?param=http://example.com`. - (#209 by @aaronbonneau) - -* Improve test suite by locking Travis distro so new defaults will not break the build - (#211 by @clue) - -## 0.7.2 (2017-07-04) - -* Fix: Stricter check for invalid request-line in HTTP requests - (#206 by @clue) - -* Refactor to use HTTP response reason phrases from response object - (#205 by @clue) - -## 0.7.1 (2017-06-17) - -* Fix: Fix parsing CONNECT request without `Host` header - (#201 by @clue) - -* Internal preparation for future PSR-7 `UploadedFileInterface` - (#199 by @WyriHaximus) - -## 0.7.0 (2017-05-29) - -* Feature / BC break: Use PSR-7 (http-message) standard and - `Request-In-Response-Out`-style request handler callback. - Pass standard PSR-7 `ServerRequestInterface` and expect any standard - PSR-7 `ResponseInterface` in return for the request handler callback. - (#146 and #152 and #170 by @legionth) - - ```php - // old - $app = function (Request $request, Response $response) { - $response->writeHead(200, array('Content-Type' => 'text/plain')); - $response->end("Hello world!\n"); - }; - - // new - $app = function (ServerRequestInterface $request) { - return new Response( - 200, - array('Content-Type' => 'text/plain'), - "Hello world!\n" - ); - }; - ``` - - A `Content-Length` header will automatically be included if the size can be - determined from the response body. - (#164 by @maciejmrozinski) - - The request handler callback will automatically make sure that responses to - HEAD requests and certain status codes, such as `204` (No Content), never - contain a response body. - (#156 by @clue) - - The intermediary `100 Continue` response will automatically be sent if - demanded by a HTTP/1.1 client. - (#144 by @legionth) - - The request handler callback can now return a standard `Promise` if - processing the request needs some time, such as when querying a database. - Similarly, the request handler may return a streaming response if the - response body comes from a `ReadableStreamInterface` or its size is - unknown in advance. - - ```php - // old - $app = function (Request $request, Response $response) use ($db) { - $db->query()->then(function ($result) use ($response) { - $response->writeHead(200, array('Content-Type' => 'text/plain')); - $response->end($result); - }); - }; - - // new - $app = function (ServerRequestInterface $request) use ($db) { - return $db->query()->then(function ($result) { - return new Response( - 200, - array('Content-Type' => 'text/plain'), - $result - ); - }); - }; - ``` - - Pending promies and response streams will automatically be canceled once the - client connection closes. - (#187 and #188 by @clue) - - The `ServerRequestInterface` contains the full effective request URI, - server-side parameters, query parameters and parsed cookies values as - defined in PSR-7. - (#167 by @clue and #174, #175 and #180 by @legionth) - - ```php - $app = function (ServerRequestInterface $request) { - return new Response( - 200, - array('Content-Type' => 'text/plain'), - $request->getUri()->getScheme() - ); - }; - ``` - - Advanced: Support duplex stream response for `Upgrade` requests such as - `Upgrade: WebSocket` or custom protocols and `CONNECT` requests - (#189 and #190 by @clue) - - > Note that the request body will currently not be buffered and parsed by - default, which depending on your particilar use-case, may limit - interoperability with the PSR-7 (http-message) ecosystem. - The provided streaming request body interfaces allow you to perform - buffering and parsing as needed in the request handler callback. - See also the README and examples for more details. - -* Feature / BC break: Replace `request` listener with callback function and - use `listen()` method to support multiple listening sockets - (#97 by @legionth and #193 by @clue) - - ```php - // old - $server = new Server($socket); - $server->on('request', $app); - - // new - $server = new Server($app); - $server->listen($socket); - ``` - -* Feature: Support the more advanced HTTP requests, such as - `OPTIONS * HTTP/1.1` (`OPTIONS` method in asterisk-form), - `GET http://example.com/path HTTP/1.1` (plain proxy requests in absolute-form), - `CONNECT example.com:443 HTTP/1.1` (`CONNECT` proxy requests in authority-form) - and sanitize `Host` header value across all requests. - (#157, #158, #161, #165, #169 and #173 by @clue) - -* Feature: Forward compatibility with Socket v1.0, v0.8, v0.7 and v0.6 and - forward compatibility with Stream v1.0 and v0.7 - (#154, #163, #183, #184 and #191 by @clue) - -* Feature: Simplify examples to ease getting started and - add benchmarking example - (#151 and #162 by @clue) - -* Improve test suite by adding tests for case insensitive chunked transfer - encoding and ignoring HHVM test failures until Travis tests work again. - (#150 by @legionth and #185 by @clue) - -## 0.6.0 (2017-03-09) - -* Feature / BC break: The `Request` and `Response` objects now follow strict - stream semantics and their respective methods and events. - (#116, #129, #133, #135, #136, #137, #138, #140, #141 by @legionth - and #122, #123, #130, #131, #132, #142 by @clue) - - This implies that the `Server` now supports proper detection of the request - message body stream, such as supporting decoding chunked transfer encoding, - delimiting requests with an explicit `Content-Length` header - and those with an empty request message body. - - These streaming semantics are compatible with previous Stream v0.5, future - compatible with v0.5 and upcoming v0.6 versions and can be used like this: - - ```php - $http->on('request', function (Request $request, Response $response) { - $contentLength = 0; - $request->on('data', function ($data) use (&$contentLength) { - $contentLength += strlen($data); - }); - - $request->on('end', function () use ($response, &$contentLength){ - $response->writeHead(200, array('Content-Type' => 'text/plain')); - $response->end("The length of the submitted request body is: " . $contentLength); - }); - - // an error occured - // e.g. on invalid chunked encoded data or an unexpected 'end' event - $request->on('error', function (\Exception $exception) use ($response, &$contentLength) { - $response->writeHead(400, array('Content-Type' => 'text/plain')); - $response->end("An error occured while reading at length: " . $contentLength); - }); - }); - ``` - - Similarly, the `Request` and `Response` now strictly follow the - `close()` method and `close` event semantics. - Closing the `Request` does not interrupt the underlying TCP/IP in - order to allow still sending back a valid response message. - Closing the `Response` does terminate the underlying TCP/IP - connection in order to clean up resources. - - You should make sure to always attach a `request` event listener - like above. The `Server` will not respond to an incoming HTTP - request otherwise and keep the TCP/IP connection pending until the - other side chooses to close the connection. - -* Feature: Support `HTTP/1.1` and `HTTP/1.0` for `Request` and `Response`. - (#124, #125, #126, #127, #128 by @clue and #139 by @legionth) - - The outgoing `Response` will automatically use the same HTTP version as the - incoming `Request` message and will only apply `HTTP/1.1` semantics if - applicable. This includes that the `Response` will automatically attach a - `Date` and `Connection: close` header if applicable. - - This implies that the `Server` now automatically responds with HTTP error - messages for invalid requests (status 400) and those exceeding internal - request header limits (status 431). - -## 0.5.0 (2017-02-16) - -* Feature / BC break: Change `Request` methods to be in line with PSR-7 - (#117 by @clue) - * Rename `getQuery()` to `getQueryParams()` - * Rename `getHttpVersion()` to `getProtocolVersion()` - * Change `getHeaders()` to always return an array of string values - for each header - -* Feature / BC break: Update Socket component to v0.5 and - add secure HTTPS server support - (#90 and #119 by @clue) - - ```php - // old plaintext HTTP server - $socket = new React\Socket\Server($loop); - $socket->listen(8080, '127.0.0.1'); - $http = new React\Http\Server($socket); - - // new plaintext HTTP server - $socket = new React\Socket\Server('127.0.0.1:8080', $loop); - $http = new React\Http\Server($socket); - - // new secure HTTPS server - $socket = new React\Socket\Server('127.0.0.1:8080', $loop); - $socket = new React\Socket\SecureServer($socket, $loop, array( - 'local_cert' => __DIR__ . '/localhost.pem' - )); - $http = new React\Http\Server($socket); - ``` - -* BC break: Mark internal APIs as internal or private and - remove unneeded `ServerInterface` - (#118 by @clue, #95 by @legionth) - -## 0.4.4 (2017-02-13) - -* Feature: Add request header accessors (à la PSR-7) - (#103 by @clue) - - ```php - // get value of host header - $host = $request->getHeaderLine('Host'); - - // get list of all cookie headers - $cookies = $request->getHeader('Cookie'); - ``` - -* Feature: Forward `pause()` and `resume()` from `Request` to underlying connection - (#110 by @clue) - - ```php - // support back-pressure when piping request into slower destination - $request->pipe($dest); - - // manually pause/resume request - $request->pause(); - $request->resume(); - ``` - -* Fix: Fix `100-continue` to be handled case-insensitive and ignore it for HTTP/1.0. - Similarly, outgoing response headers are now handled case-insensitive, e.g - we no longer apply chunked transfer encoding with mixed-case `Content-Length`. - (#107 by @clue) - - ```php - // now handled case-insensitive - $request->expectsContinue(); - - // now works just like properly-cased header - $response->writeHead($status, array('content-length' => 0)); - ``` - -* Fix: Do not emit empty `data` events and ignore empty writes in order to - not mess up chunked transfer encoding - (#108 and #112 by @clue) - -* Lock and test minimum required dependency versions and support PHPUnit v5 - (#113, #115 and #114 by @andig) - -## 0.4.3 (2017-02-10) - -* Fix: Do not take start of body into account when checking maximum header size - (#88 by @nopolabs) - -* Fix: Remove `data` listener if `HeaderParser` emits an error - (#83 by @nick4fake) - -* First class support for PHP 5.3 through PHP 7 and HHVM - (#101 and #102 by @clue, #66 by @WyriHaximus) - -* Improve test suite by adding PHPUnit to require-dev, - improving forward compatibility with newer PHPUnit versions - and replacing unneeded test stubs - (#92 and #93 by @nopolabs, #100 by @legionth) - -## 0.4.2 (2016-11-09) - -* Remove all listeners after emitting error in RequestHeaderParser #68 @WyriHaximus -* Catch Guzzle parse request errors #65 @WyriHaximus -* Remove branch-alias definition as per reactphp/react#343 #58 @WyriHaximus -* Add functional example to ease getting started #64 by @clue -* Naming, immutable array manipulation #37 @cboden - -## 0.4.1 (2015-05-21) - -* Replaced guzzle/parser with guzzlehttp/psr7 by @cboden -* FIX Continue Header by @iannsp -* Missing type hint by @marenzo - -## 0.4.0 (2014-02-02) - -* BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks -* BC break: Update to React/Promise 2.0 -* BC break: Update to Evenement 2.0 -* Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0 -* Bump React dependencies to v0.4 - -## 0.3.0 (2013-04-14) - -* Bump React dependencies to v0.3 - -## 0.2.6 (2012-12-26) - -* Bug fix: Emit end event when Response closes (@beaucollins) - -## 0.2.3 (2012-11-14) - -* Bug fix: Forward drain events from HTTP response (@cs278) -* Dependency: Updated guzzle deps to `3.0.*` - -## 0.2.2 (2012-10-28) - -* Version bump - -## 0.2.1 (2012-10-14) - -* Feature: Support HTTP 1.1 continue - -## 0.2.0 (2012-09-10) - -* Bump React dependencies to v0.2 - -## 0.1.1 (2012-07-12) - -* Version bump - -## 0.1.0 (2012-07-11) - -* First tagged release diff --git a/deps/vendor/react/http/LICENSE b/deps/vendor/react/http/LICENSE deleted file mode 100644 index d6f8901f9..000000000 --- a/deps/vendor/react/http/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012 Christian Lück, Cees-Jan Kiewiet, Jan Sorgalla, Chris Boden, Igor Wiedler - -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/deps/vendor/react/http/README.md b/deps/vendor/react/http/README.md deleted file mode 100644 index 8e58aebca..000000000 --- a/deps/vendor/react/http/README.md +++ /dev/null @@ -1,2949 +0,0 @@ -# HTTP - -[![CI status](https://github.com/reactphp/http/workflows/CI/badge.svg)](https://github.com/reactphp/http/actions) - -Event-driven, streaming HTTP client and server implementation for [ReactPHP](https://reactphp.org/). - -This HTTP library provides re-usable implementations for an HTTP client and -server based on ReactPHP's [`Socket`](https://github.com/reactphp/socket) and -[`EventLoop`](https://github.com/reactphp/event-loop) components. -Its client component allows you to send any number of async HTTP/HTTPS requests -concurrently. -Its server component allows you to build plaintext HTTP and secure HTTPS servers -that accept incoming HTTP requests from HTTP clients (such as web browsers). -This library provides async, streaming means for all of this, so you can handle -multiple concurrent HTTP requests without blocking. - -**Table of contents** - -* [Quickstart example](#quickstart-example) -* [Client Usage](#client-usage) - * [Request methods](#request-methods) - * [Promises](#promises) - * [Cancellation](#cancellation) - * [Timeouts](#timeouts) - * [Authentication](#authentication) - * [Redirects](#redirects) - * [Blocking](#blocking) - * [Concurrency](#concurrency) - * [Streaming response](#streaming-response) - * [Streaming request](#streaming-request) - * [HTTP proxy](#http-proxy) - * [SOCKS proxy](#socks-proxy) - * [SSH proxy](#ssh-proxy) - * [Unix domain sockets](#unix-domain-sockets) -* [Server Usage](#server-usage) - * [HttpServer](#httpserver) - * [listen()](#listen) - * [Server Request](#server-request) - * [Request parameters](#request-parameters) - * [Query parameters](#query-parameters) - * [Request body](#request-body) - * [Streaming incoming request](#streaming-incoming-request) - * [Request method](#request-method) - * [Cookie parameters](#cookie-parameters) - * [Invalid request](#invalid-request) - * [Server Response](#server-response) - * [Deferred response](#deferred-response) - * [Streaming outgoing response](#streaming-outgoing-response) - * [Response length](#response-length) - * [Invalid response](#invalid-response) - * [Default response headers](#default-response-headers) - * [Middleware](#middleware) - * [Custom middleware](#custom-middleware) - * [Third-Party Middleware](#third-party-middleware) -* [API](#api) - * [Browser](#browser) - * [get()](#get) - * [post()](#post) - * [head()](#head) - * [patch()](#patch) - * [put()](#put) - * [delete()](#delete) - * [request()](#request) - * [requestStreaming()](#requeststreaming) - * [withTimeout()](#withtimeout) - * [withFollowRedirects()](#withfollowredirects) - * [withRejectErrorResponse()](#withrejecterrorresponse) - * [withBase()](#withbase) - * [withProtocolVersion()](#withprotocolversion) - * [withResponseBuffer()](#withresponsebuffer) - * [React\Http\Message](#reacthttpmessage) - * [Response](#response) - * [html()](#html) - * [json()](#json) - * [plaintext()](#plaintext) - * [xml()](#xml) - * [ServerRequest](#serverrequest) - * [ResponseException](#responseexception) - * [React\Http\Middleware](#reacthttpmiddleware) - * [StreamingRequestMiddleware](#streamingrequestmiddleware) - * [LimitConcurrentRequestsMiddleware](#limitconcurrentrequestsmiddleware) - * [RequestBodyBufferMiddleware](#requestbodybuffermiddleware) - * [RequestBodyParserMiddleware](#requestbodyparsermiddleware) -* [Install](#install) -* [Tests](#tests) -* [License](#license) - -## Quickstart example - -Once [installed](#install), you can use the following code to access an -HTTP web server and send some simple HTTP GET requests: - -```php -get('http://www.google.com/')->then(function (Psr\Http\Message\ResponseInterface $response) { - var_dump($response->getHeaders(), (string)$response->getBody()); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -This is an HTTP server which responds with `Hello World!` to every request. - -```php -listen($socket); -``` - -See also the [examples](examples/). - -## Client Usage - -### Request methods - -Most importantly, this project provides a [`Browser`](#browser) object that -offers several methods that resemble the HTTP protocol methods: - -```php -$browser->get($url, array $headers = array()); -$browser->head($url, array $headers = array()); -$browser->post($url, array $headers = array(), string|ReadableStreamInterface $body = ''); -$browser->delete($url, array $headers = array(), string|ReadableStreamInterface $body = ''); -$browser->put($url, array $headers = array(), string|ReadableStreamInterface $body = ''); -$browser->patch($url, array $headers = array(), string|ReadableStreamInterface $body = ''); -``` - -Each of these methods requires a `$url` and some optional parameters to send an -HTTP request. Each of these method names matches the respective HTTP request -method, for example the [`get()`](#get) method sends an HTTP `GET` request. - -You can optionally pass an associative array of additional `$headers` that will be -sent with this HTTP request. Additionally, each method will automatically add a -matching `Content-Length` request header if an outgoing request body is given and its -size is known and non-empty. For an empty request body, if will only include a -`Content-Length: 0` request header if the request method usually expects a request -body (only applies to `POST`, `PUT` and `PATCH` HTTP request methods). - -If you're using a [streaming request body](#streaming-request), it will default -to using `Transfer-Encoding: chunked` unless you explicitly pass in a matching `Content-Length` -request header. See also [streaming request](#streaming-request) for more details. - -By default, all of the above methods default to sending requests using the -HTTP/1.1 protocol version. If you want to explicitly use the legacy HTTP/1.0 -protocol version, you can use the [`withProtocolVersion()`](#withprotocolversion) -method. If you want to use any other or even custom HTTP request method, you can -use the [`request()`](#request) method. - -Each of the above methods supports async operation and either *fulfills* with a -[PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) -or *rejects* with an `Exception`. -Please see the following chapter about [promises](#promises) for more details. - -### Promises - -Sending requests is async (non-blocking), so you can actually send multiple -requests in parallel. -The `Browser` will respond to each request with a -[PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) -message, the order is not guaranteed. -Sending requests uses a [Promise](https://github.com/reactphp/promise)-based -interface that makes it easy to react to when an HTTP request is completed -(i.e. either successfully fulfilled or rejected with an error): - -```php -$browser->get($url)->then( - function (Psr\Http\Message\ResponseInterface $response) { - var_dump('Response received', $response); - }, - function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; - } -); -``` - -If this looks strange to you, you can also use the more traditional [blocking API](#blocking). - -Keep in mind that resolving the Promise with the full response message means the -whole response body has to be kept in memory. -This is easy to get started and works reasonably well for smaller responses -(such as common HTML pages or RESTful or JSON API requests). - -You may also want to look into the [streaming API](#streaming-response): - -* If you're dealing with lots of concurrent requests (100+) or -* If you want to process individual data chunks as they happen (without having to wait for the full response body) or -* If you're expecting a big response body size (1 MiB or more, for example when downloading binary files) or -* If you're unsure about the response body size (better be safe than sorry when accessing arbitrary remote HTTP endpoints and the response body size is unknown in advance). - -### Cancellation - -The returned Promise is implemented in such a way that it can be cancelled -when it is still pending. -Cancelling a pending promise will reject its value with an Exception and -clean up any underlying resources. - -```php -$promise = $browser->get($url); - -Loop::addTimer(2.0, function () use ($promise) { - $promise->cancel(); -}); -``` - -### Timeouts - -This library uses a very efficient HTTP implementation, so most HTTP requests -should usually be completed in mere milliseconds. However, when sending HTTP -requests over an unreliable network (the internet), there are a number of things -that can go wrong and may cause the request to fail after a time. As such, this -library respects PHP's `default_socket_timeout` setting (default 60s) as a timeout -for sending the outgoing HTTP request and waiting for a successful response and -will otherwise cancel the pending request and reject its value with an Exception. - -Note that this timeout value covers creating the underlying transport connection, -sending the HTTP request, receiving the HTTP response headers and its full -response body and following any eventual [redirects](#redirects). See also -[redirects](#redirects) below to configure the number of redirects to follow (or -disable following redirects altogether) and also [streaming](#streaming-response) -below to not take receiving large response bodies into account for this timeout. - -You can use the [`withTimeout()` method](#withtimeout) to pass a custom timeout -value in seconds like this: - -```php -$browser = $browser->withTimeout(10.0); - -$browser->get($url)->then(function (Psr\Http\Message\ResponseInterface $response) { - // response received within 10 seconds maximum - var_dump($response->getHeaders()); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -Similarly, you can use a bool `false` to not apply a timeout at all -or use a bool `true` value to restore the default handling. -See [`withTimeout()`](#withtimeout) for more details. - -If you're using a [streaming response body](#streaming-response), the time it -takes to receive the response body stream will not be included in the timeout. -This allows you to keep this incoming stream open for a longer time, such as -when downloading a very large stream or when streaming data over a long-lived -connection. - -If you're using a [streaming request body](#streaming-request), the time it -takes to send the request body stream will not be included in the timeout. This -allows you to keep this outgoing stream open for a longer time, such as when -uploading a very large stream. - -Note that this timeout handling applies to the higher-level HTTP layer. Lower -layers such as socket and DNS may also apply (different) timeout values. In -particular, the underlying socket connection uses the same `default_socket_timeout` -setting to establish the underlying transport connection. To control this -connection timeout behavior, you can [inject a custom `Connector`](#browser) -like this: - -```php -$browser = new React\Http\Browser( - new React\Socket\Connector( - array( - 'timeout' => 5 - ) - ) -); -``` - -### Authentication - -This library supports [HTTP Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) -using the `Authorization: Basic …` request header or allows you to set an explicit -`Authorization` request header. - -By default, this library does not include an outgoing `Authorization` request -header. If the server requires authentication, if may return a `401` (Unauthorized) -status code which will reject the request by default (see also the -[`withRejectErrorResponse()` method](#withrejecterrorresponse) below). - -In order to pass authentication details, you can simply pass the username and -password as part of the request URL like this: - -```php -$promise = $browser->get('https://user:pass@example.com/api'); -``` - -Note that special characters in the authentication details have to be -percent-encoded, see also [`rawurlencode()`](https://www.php.net/manual/en/function.rawurlencode.php). -This example will automatically pass the base64-encoded authentication details -using the outgoing `Authorization: Basic …` request header. If the HTTP endpoint -you're talking to requires any other authentication scheme, you can also pass -this header explicitly. This is common when using (RESTful) HTTP APIs that use -OAuth access tokens or JSON Web Tokens (JWT): - -```php -$token = 'abc123'; - -$promise = $browser->get( - 'https://example.com/api', - array( - 'Authorization' => 'Bearer ' . $token - ) -); -``` - -When following redirects, the `Authorization` request header will never be sent -to any remote hosts by default. When following a redirect where the `Location` -response header contains authentication details, these details will be sent for -following requests. See also [redirects](#redirects) below. - -### Redirects - -By default, this library follows any redirects and obeys `3xx` (Redirection) -status codes using the `Location` response header from the remote server. -The promise will be fulfilled with the last response from the chain of redirects. - -```php -$browser->get($url, $headers)->then(function (Psr\Http\Message\ResponseInterface $response) { - // the final response will end up here - var_dump($response->getHeaders()); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -Any redirected requests will follow the semantics of the original request and -will include the same request headers as the original request except for those -listed below. -If the original request contained a request body, this request body will never -be passed to the redirected request. Accordingly, each redirected request will -remove any `Content-Length` and `Content-Type` request headers. - -If the original request used HTTP authentication with an `Authorization` request -header, this request header will only be passed as part of the redirected -request if the redirected URL is using the same host. In other words, the -`Authorizaton` request header will not be forwarded to other foreign hosts due to -possible privacy/security concerns. When following a redirect where the `Location` -response header contains authentication details, these details will be sent for -following requests. - -You can use the [`withFollowRedirects()`](#withfollowredirects) method to -control the maximum number of redirects to follow or to return any redirect -responses as-is and apply custom redirection logic like this: - -```php -$browser = $browser->withFollowRedirects(false); - -$browser->get($url)->then(function (Psr\Http\Message\ResponseInterface $response) { - // any redirects will now end up here - var_dump($response->getHeaders()); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -See also [`withFollowRedirects()`](#withfollowredirects) for more details. - -### Blocking - -As stated above, this library provides you a powerful, async API by default. - -If, however, you want to integrate this into your traditional, blocking environment, -you should look into also using [clue/reactphp-block](https://github.com/clue/reactphp-block). - -The resulting blocking code could look something like this: - -```php -use Clue\React\Block; - -$browser = new React\Http\Browser(); - -$promise = $browser->get('http://example.com/'); - -try { - $response = Block\await($promise, Loop::get()); - // response successfully received -} catch (Exception $e) { - // an error occured while performing the request -} -``` - -Similarly, you can also process multiple requests concurrently and await an array of `Response` objects: - -```php -$promises = array( - $browser->get('http://example.com/'), - $browser->get('http://www.example.org/'), -); - -$responses = Block\awaitAll($promises, Loop::get()); -``` - -Please refer to [clue/reactphp-block](https://github.com/clue/reactphp-block#readme) for more details. - -Keep in mind the above remark about buffering the whole response message in memory. -As an alternative, you may also see one of the following chapters for the -[streaming API](#streaming-response). - -### Concurrency - -As stated above, this library provides you a powerful, async API. Being able to -send a large number of requests at once is one of the core features of this -project. For instance, you can easily send 100 requests concurrently while -processing SQL queries at the same time. - -Remember, with great power comes great responsibility. Sending an excessive -number of requests may either take up all resources on your side or it may even -get you banned by the remote side if it sees an unreasonable number of requests -from your side. - -```php -// watch out if array contains many elements -foreach ($urls as $url) { - $browser->get($url)->then(function (Psr\Http\Message\ResponseInterface $response) { - var_dump($response->getHeaders()); - }, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; - }); -} -``` - -As a consequence, it's usually recommended to limit concurrency on the sending -side to a reasonable value. It's common to use a rather small limit, as doing -more than a dozen of things at once may easily overwhelm the receiving side. You -can use [clue/reactphp-mq](https://github.com/clue/reactphp-mq) as a lightweight -in-memory queue to concurrently do many (but not too many) things at once: - -```php -// wraps Browser in a Queue object that executes no more than 10 operations at once -$q = new Clue\React\Mq\Queue(10, null, function ($url) use ($browser) { - return $browser->get($url); -}); - -foreach ($urls as $url) { - $q($url)->then(function (Psr\Http\Message\ResponseInterface $response) { - var_dump($response->getHeaders()); - }, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; - }); -} -``` - -Additional requests that exceed the concurrency limit will automatically be -enqueued until one of the pending requests completes. This integrates nicely -with the existing [Promise-based API](#promises). Please refer to -[clue/reactphp-mq](https://github.com/clue/reactphp-mq) for more details. - -This in-memory approach works reasonably well for some thousand outstanding -requests. If you're processing a very large input list (think millions of rows -in a CSV or NDJSON file), you may want to look into using a streaming approach -instead. See [clue/reactphp-flux](https://github.com/clue/reactphp-flux) for -more details. - -### Streaming response - -All of the above examples assume you want to store the whole response body in memory. -This is easy to get started and works reasonably well for smaller responses. - -However, there are several situations where it's usually a better idea to use a -streaming approach, where only small chunks have to be kept in memory: - -* If you're dealing with lots of concurrent requests (100+) or -* If you want to process individual data chunks as they happen (without having to wait for the full response body) or -* If you're expecting a big response body size (1 MiB or more, for example when downloading binary files) or -* If you're unsure about the response body size (better be safe than sorry when accessing arbitrary remote HTTP endpoints and the response body size is unknown in advance). - -You can use the [`requestStreaming()`](#requeststreaming) method to send an -arbitrary HTTP request and receive a streaming response. It uses the same HTTP -message API, but does not buffer the response body in memory. It only processes -the response body in small chunks as data is received and forwards this data -through [ReactPHP's Stream API](https://github.com/reactphp/stream). This works -for (any number of) responses of arbitrary sizes. - -This means it resolves with a normal -[PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface), -which can be used to access the response message parameters as usual. -You can access the message body as usual, however it now also -implements [ReactPHP's `ReadableStreamInterface`](https://github.com/reactphp/stream#readablestreaminterface) -as well as parts of the [PSR-7 `StreamInterface`](https://www.php-fig.org/psr/psr-7/#34-psrhttpmessagestreaminterface). - -```php -$browser->requestStreaming('GET', $url)->then(function (Psr\Http\Message\ResponseInterface $response) { - $body = $response->getBody(); - assert($body instanceof Psr\Http\Message\StreamInterface); - assert($body instanceof React\Stream\ReadableStreamInterface); - - $body->on('data', function ($chunk) { - echo $chunk; - }); - - $body->on('error', function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; - }); - - $body->on('close', function () { - echo '[DONE]' . PHP_EOL; - }); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -See also the [stream download benchmark example](examples/91-client-benchmark-download.php) and -the [stream forwarding example](examples/21-client-request-streaming-to-stdout.php). - -You can invoke the following methods on the message body: - -```php -$body->on($event, $callback); -$body->eof(); -$body->isReadable(); -$body->pipe(React\Stream\WritableStreamInterface $dest, array $options = array()); -$body->close(); -$body->pause(); -$body->resume(); -``` - -Because the message body is in a streaming state, invoking the following methods -doesn't make much sense: - -```php -$body->__toString(); // '' -$body->detach(); // throws BadMethodCallException -$body->getSize(); // null -$body->tell(); // throws BadMethodCallException -$body->isSeekable(); // false -$body->seek(); // throws BadMethodCallException -$body->rewind(); // throws BadMethodCallException -$body->isWritable(); // false -$body->write(); // throws BadMethodCallException -$body->read(); // throws BadMethodCallException -$body->getContents(); // throws BadMethodCallException -``` - -Note how [timeouts](#timeouts) apply slightly differently when using streaming. -In streaming mode, the timeout value covers creating the underlying transport -connection, sending the HTTP request, receiving the HTTP response headers and -following any eventual [redirects](#redirects). In particular, the timeout value -does not take receiving (possibly large) response bodies into account. - -If you want to integrate the streaming response into a higher level API, then -working with Promise objects that resolve with Stream objects is often inconvenient. -Consider looking into also using [react/promise-stream](https://github.com/reactphp/promise-stream). -The resulting streaming code could look something like this: - -```php -use React\Promise\Stream; - -function download(Browser $browser, string $url): React\Stream\ReadableStreamInterface { - return Stream\unwrapReadable( - $browser->requestStreaming('GET', $url)->then(function (Psr\Http\Message\ResponseInterface $response) { - return $response->getBody(); - }) - ); -} - -$stream = download($browser, $url); -$stream->on('data', function ($data) { - echo $data; -}); -$stream->on('error', function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -See also the [`requestStreaming()`](#requeststreaming) method for more details. - -### Streaming request - -Besides streaming the response body, you can also stream the request body. -This can be useful if you want to send big POST requests (uploading files etc.) -or process many outgoing streams at once. -Instead of passing the body as a string, you can simply pass an instance -implementing [ReactPHP's `ReadableStreamInterface`](https://github.com/reactphp/stream#readablestreaminterface) -to the [request methods](#request-methods) like this: - -```php -$browser->post($url, array(), $stream)->then(function (Psr\Http\Message\ResponseInterface $response) { - echo 'Successfully sent.'; -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -If you're using a streaming request body (`React\Stream\ReadableStreamInterface`), it will -default to using `Transfer-Encoding: chunked` or you have to explicitly pass in a -matching `Content-Length` request header like so: - -```php -$body = new React\Stream\ThroughStream(); -Loop::addTimer(1.0, function () use ($body) { - $body->end("hello world"); -}); - -$browser->post($url, array('Content-Length' => '11'), $body); -``` - -If the streaming request body emits an `error` event or is explicitly closed -without emitting a successful `end` event first, the request will automatically -be closed and rejected. - -### HTTP proxy - -You can also establish your outgoing connections through an HTTP CONNECT proxy server -by adding a dependency to [clue/reactphp-http-proxy](https://github.com/clue/reactphp-http-proxy). - -HTTP CONNECT proxy servers (also commonly known as "HTTPS proxy" or "SSL proxy") -are commonly used to tunnel HTTPS traffic through an intermediary ("proxy"), to -conceal the origin address (anonymity) or to circumvent address blocking -(geoblocking). While many (public) HTTP CONNECT proxy servers often limit this -to HTTPS port `443` only, this can technically be used to tunnel any TCP/IP-based -protocol, such as plain HTTP and TLS-encrypted HTTPS. - -```php -$proxy = new Clue\React\HttpProxy\ProxyConnector('127.0.0.1:8080'); - -$connector = new React\Socket\Connector(array( - 'tcp' => $proxy, - 'dns' => false -)); - -$browser = new React\Http\Browser($connector); -``` - -See also the [HTTP proxy example](examples/11-client-http-proxy.php). - -### SOCKS proxy - -You can also establish your outgoing connections through a SOCKS proxy server -by adding a dependency to [clue/reactphp-socks](https://github.com/clue/reactphp-socks). - -The SOCKS proxy protocol family (SOCKS5, SOCKS4 and SOCKS4a) is commonly used to -tunnel HTTP(S) traffic through an intermediary ("proxy"), to conceal the origin -address (anonymity) or to circumvent address blocking (geoblocking). While many -(public) SOCKS proxy servers often limit this to HTTP(S) port `80` and `443` -only, this can technically be used to tunnel any TCP/IP-based protocol. - -```php -$proxy = new Clue\React\Socks\Client('127.0.0.1:1080'); - -$connector = new React\Socket\Connector(array( - 'tcp' => $proxy, - 'dns' => false -)); - -$browser = new React\Http\Browser($connector); -``` - -See also the [SOCKS proxy example](examples/12-client-socks-proxy.php). - -### SSH proxy - -You can also establish your outgoing connections through an SSH server -by adding a dependency to [clue/reactphp-ssh-proxy](https://github.com/clue/reactphp-ssh-proxy). - -[Secure Shell (SSH)](https://en.wikipedia.org/wiki/Secure_Shell) is a secure -network protocol that is most commonly used to access a login shell on a remote -server. Its architecture allows it to use multiple secure channels over a single -connection. Among others, this can also be used to create an "SSH tunnel", which -is commonly used to tunnel HTTP(S) traffic through an intermediary ("proxy"), to -conceal the origin address (anonymity) or to circumvent address blocking -(geoblocking). This can be used to tunnel any TCP/IP-based protocol (HTTP, SMTP, -IMAP etc.), allows you to access local services that are otherwise not accessible -from the outside (database behind firewall) and as such can also be used for -plain HTTP and TLS-encrypted HTTPS. - -```php -$proxy = new Clue\React\SshProxy\SshSocksConnector('alice@example.com'); - -$connector = new React\Socket\Connector(array( - 'tcp' => $proxy, - 'dns' => false -)); - -$browser = new React\Http\Browser($connector); -``` - -See also the [SSH proxy example](examples/13-client-ssh-proxy.php). - -### Unix domain sockets - -By default, this library supports transport over plaintext TCP/IP and secure -TLS connections for the `http://` and `https://` URL schemes respectively. -This library also supports Unix domain sockets (UDS) when explicitly configured. - -In order to use a UDS path, you have to explicitly configure the connector to -override the destination URL so that the hostname given in the request URL will -no longer be used to establish the connection: - -```php -$connector = new React\Socket\FixedUriConnector( - 'unix:///var/run/docker.sock', - new React\Socket\UnixConnector() -); - -$browser = new React\Http\Browser($connector); - -$client->get('http://localhost/info')->then(function (Psr\Http\Message\ResponseInterface $response) { - var_dump($response->getHeaders(), (string)$response->getBody()); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -See also the [Unix Domain Sockets (UDS) example](examples/14-client-unix-domain-sockets.php). - - -## Server Usage - -### HttpServer - - - -The `React\Http\HttpServer` class is responsible for handling incoming connections and then -processing each incoming HTTP request. - -When a complete HTTP request has been received, it will invoke the given -request handler function. This request handler function needs to be passed to -the constructor and will be invoked with the respective [request](#server-request) -object and expects a [response](#server-response) object in return: - -```php -$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { - return React\Http\Message\Response::plaintext( - "Hello World!\n" - ); -}); -``` - -Each incoming HTTP request message is always represented by the -[PSR-7 `ServerRequestInterface`](https://www.php-fig.org/psr/psr-7/#321-psrhttpmessageserverrequestinterface), -see also following [request](#server-request) chapter for more details. - -Each outgoing HTTP response message is always represented by the -[PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface), -see also following [response](#server-response) chapter for more details. - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -In order to start listening for any incoming connections, the `HttpServer` needs -to be attached to an instance of -[`React\Socket\ServerInterface`](https://github.com/reactphp/socket#serverinterface) -through the [`listen()`](#listen) method as described in the following -chapter. In its most simple form, you can attach this to a -[`React\Socket\SocketServer`](https://github.com/reactphp/socket#socketserver) -in order to start a plaintext HTTP server like this: - -```php -$http = new React\Http\HttpServer($handler); - -$socket = new React\Socket\SocketServer('0.0.0.0:8080'); -$http->listen($socket); -``` - -See also the [`listen()`](#listen) method and the -[hello world server example](examples/51-server-hello-world.php) -for more details. - -By default, the `HttpServer` buffers and parses the complete incoming HTTP -request in memory. It will invoke the given request handler function when the -complete request headers and request body has been received. This means the -[request](#server-request) object passed to your request handler function will be -fully compatible with PSR-7 (http-message). This provides sane defaults for -80% of the use cases and is the recommended way to use this library unless -you're sure you know what you're doing. - -On the other hand, buffering complete HTTP requests in memory until they can -be processed by your request handler function means that this class has to -employ a number of limits to avoid consuming too much memory. In order to -take the more advanced configuration out your hand, it respects setting from -your [`php.ini`](https://www.php.net/manual/en/ini.core.php) to apply its -default settings. This is a list of PHP settings this class respects with -their respective default values: - -``` -memory_limit 128M -post_max_size 8M // capped at 64K - -enable_post_data_reading 1 -max_input_nesting_level 64 -max_input_vars 1000 - -file_uploads 1 -upload_max_filesize 2M -max_file_uploads 20 -``` - -In particular, the `post_max_size` setting limits how much memory a single -HTTP request is allowed to consume while buffering its request body. This -needs to be limited because the server can process a large number of requests -concurrently, so the server may potentially consume a large amount of memory -otherwise. To support higher concurrency by default, this value is capped -at `64K`. If you assign a higher value, it will only allow `64K` by default. -If a request exceeds this limit, its request body will be ignored and it will -be processed like a request with no request body at all. See below for -explicit configuration to override this setting. - -By default, this class will try to avoid consuming more than half of your -`memory_limit` for buffering multiple concurrent HTTP requests. As such, with -the above default settings of `128M` max, it will try to consume no more than -`64M` for buffering multiple concurrent HTTP requests. As a consequence, it -will limit the concurrency to `1024` HTTP requests with the above defaults. - -It is imperative that you assign reasonable values to your PHP ini settings. -It is usually recommended to not support buffering incoming HTTP requests -with a large HTTP request body (e.g. large file uploads). If you want to -increase this buffer size, you will have to also increase the total memory -limit to allow for more concurrent requests (set `memory_limit 512M` or more) -or explicitly limit concurrency. - -In order to override the above buffering defaults, you can configure the -`HttpServer` explicitly. You can use the -[`LimitConcurrentRequestsMiddleware`](#limitconcurrentrequestsmiddleware) and -[`RequestBodyBufferMiddleware`](#requestbodybuffermiddleware) (see below) -to explicitly configure the total number of requests that can be handled at -once like this: - -```php -$http = new React\Http\HttpServer( - new React\Http\Middleware\StreamingRequestMiddleware(), - new React\Http\Middleware\LimitConcurrentRequestsMiddleware(100), // 100 concurrent buffering handlers - new React\Http\Middleware\RequestBodyBufferMiddleware(2 * 1024 * 1024), // 2 MiB per request - new React\Http\Middleware\RequestBodyParserMiddleware(), - $handler -); -``` - -In this example, we allow processing up to 100 concurrent requests at once -and each request can buffer up to `2M`. This means you may have to keep a -maximum of `200M` of memory for incoming request body buffers. Accordingly, -you need to adjust the `memory_limit` ini setting to allow for these buffers -plus your actual application logic memory requirements (think `512M` or more). - -> Internally, this class automatically assigns these middleware handlers - automatically when no [`StreamingRequestMiddleware`](#streamingrequestmiddleware) - is given. Accordingly, you can use this example to override all default - settings to implement custom limits. - -As an alternative to buffering the complete request body in memory, you can -also use a streaming approach where only small chunks of data have to be kept -in memory: - -```php -$http = new React\Http\HttpServer( - new React\Http\Middleware\StreamingRequestMiddleware(), - $handler -); -``` - -In this case, it will invoke the request handler function once the HTTP -request headers have been received, i.e. before receiving the potentially -much larger HTTP request body. This means the [request](#server-request) passed to -your request handler function may not be fully compatible with PSR-7. This is -specifically designed to help with more advanced use cases where you want to -have full control over consuming the incoming HTTP request body and -concurrency settings. See also [streaming incoming request](#streaming-incoming-request) -below for more details. - -> Changelog v1.5.0: This class has been renamed to `HttpServer` from the - previous `Server` class in order to avoid any ambiguities. - The previous name has been deprecated and should not be used anymore. - -### listen() - -The `listen(React\Socket\ServerInterface $socket): void` method can be used to -start listening for HTTP requests on the given socket server instance. - -The given [`React\Socket\ServerInterface`](https://github.com/reactphp/socket#serverinterface) -is responsible for emitting the underlying streaming connections. This -HTTP server needs to be attached to it in order to process any -connections and pase incoming streaming data as incoming HTTP request -messages. In its most common form, you can attach this to a -[`React\Socket\SocketServer`](https://github.com/reactphp/socket#socketserver) -in order to start a plaintext HTTP server like this: - -```php -$http = new React\Http\HttpServer($handler); - -$socket = new React\Socket\SocketServer('0.0.0.0:8080'); -$http->listen($socket); -``` - -See also [hello world server example](examples/51-server-hello-world.php) -for more details. - -This example will start listening for HTTP requests on the alternative -HTTP port `8080` on all interfaces (publicly). As an alternative, it is -very common to use a reverse proxy and let this HTTP server listen on the -localhost (loopback) interface only by using the listen address -`127.0.0.1:8080` instead. This way, you host your application(s) on the -default HTTP port `80` and only route specific requests to this HTTP -server. - -Likewise, it's usually recommended to use a reverse proxy setup to accept -secure HTTPS requests on default HTTPS port `443` (TLS termination) and -only route plaintext requests to this HTTP server. As an alternative, you -can also accept secure HTTPS requests with this HTTP server by attaching -this to a [`React\Socket\SocketServer`](https://github.com/reactphp/socket#socketserver) -using a secure TLS listen address, a certificate file and optional -`passphrase` like this: - -```php -$http = new React\Http\HttpServer($handler); - -$socket = new React\Socket\SocketServer('tls://0.0.0.0:8443', array( - 'tls' => array( - 'local_cert' => __DIR__ . '/localhost.pem' - ) -)); -$http->listen($socket); -``` - -See also [hello world HTTPS example](examples/61-server-hello-world-https.php) -for more details. - -### Server Request - -As seen above, the [`HttpServer`](#httpserver) class is responsible for handling -incoming connections and then processing each incoming HTTP request. - -The request object will be processed once the request has -been received by the client. -This request object implements the -[PSR-7 `ServerRequestInterface`](https://www.php-fig.org/psr/psr-7/#321-psrhttpmessageserverrequestinterface) -which in turn extends the -[PSR-7 `RequestInterface`](https://www.php-fig.org/psr/psr-7/#32-psrhttpmessagerequestinterface) -and will be passed to the callback function like this. - - ```php -$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { - $body = "The method of the request is: " . $request->getMethod() . "\n"; - $body .= "The requested path is: " . $request->getUri()->getPath() . "\n"; - - return React\Http\Message\Response::plaintext( - $body - ); -}); -``` - -For more details about the request object, also check out the documentation of -[PSR-7 `ServerRequestInterface`](https://www.php-fig.org/psr/psr-7/#321-psrhttpmessageserverrequestinterface) -and -[PSR-7 `RequestInterface`](https://www.php-fig.org/psr/psr-7/#32-psrhttpmessagerequestinterface). - -#### Request parameters - -The `getServerParams(): mixed[]` method can be used to -get server-side parameters similar to the `$_SERVER` variable. -The following parameters are currently available: - -* `REMOTE_ADDR` - The IP address of the request sender -* `REMOTE_PORT` - Port of the request sender -* `SERVER_ADDR` - The IP address of the server -* `SERVER_PORT` - The port of the server -* `REQUEST_TIME` - Unix timestamp when the complete request header has been received, - as integer similar to `time()` -* `REQUEST_TIME_FLOAT` - Unix timestamp when the complete request header has been received, - as float similar to `microtime(true)` -* `HTTPS` - Set to 'on' if the request used HTTPS, otherwise it won't be set - -```php -$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { - $body = "Your IP is: " . $request->getServerParams()['REMOTE_ADDR'] . "\n"; - - return React\Http\Message\Response::plaintext( - $body - ); -}); -``` - -See also [whatsmyip server example](examples/53-server-whatsmyip.php). - -> Advanced: Note that address parameters will not be set if you're listening on - a Unix domain socket (UDS) path as this protocol lacks the concept of - host/port. - -#### Query parameters - -The `getQueryParams(): array` method can be used to get the query parameters -similiar to the `$_GET` variable. - -```php -$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { - $queryParams = $request->getQueryParams(); - - $body = 'The query parameter "foo" is not set. Click the following link '; - $body .= 'to use query parameter in your request'; - - if (isset($queryParams['foo'])) { - $body = 'The value of "foo" is: ' . htmlspecialchars($queryParams['foo']); - } - - return React\Http\Message\Response::html( - $body - ); -}); -``` - -The response in the above example will return a response body with a link. -The URL contains the query parameter `foo` with the value `bar`. -Use [`htmlentities`](https://www.php.net/manual/en/function.htmlentities.php) -like in this example to prevent -[Cross-Site Scripting (abbreviated as XSS)](https://en.wikipedia.org/wiki/Cross-site_scripting). - -See also [server query parameters example](examples/54-server-query-parameter.php). - -#### Request body - -By default, the [`Server`](#httpserver) will buffer and parse the full request body -in memory. This means the given request object includes the parsed request body -and any file uploads. - -> As an alternative to the default buffering logic, you can also use the - [`StreamingRequestMiddleware`](#streamingrequestmiddleware). Jump to the next - chapter to learn more about how to process a - [streaming incoming request](#streaming-incoming-request). - -As stated above, each incoming HTTP request is always represented by the -[PSR-7 `ServerRequestInterface`](https://www.php-fig.org/psr/psr-7/#321-psrhttpmessageserverrequestinterface). -This interface provides several methods that are useful when working with the -incoming request body as described below. - -The `getParsedBody(): null|array|object` method can be used to -get the parsed request body, similar to -[PHP's `$_POST` variable](https://www.php.net/manual/en/reserved.variables.post.php). -This method may return a (possibly nested) array structure with all body -parameters or a `null` value if the request body could not be parsed. -By default, this method will only return parsed data for requests using -`Content-Type: application/x-www-form-urlencoded` or `Content-Type: multipart/form-data` -request headers (commonly used for `POST` requests for HTML form submission data). - -```php -$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { - $name = $request->getParsedBody()['name'] ?? 'anonymous'; - - return React\Http\Message\Response::plaintext( - "Hello $name!\n" - ); -}); -``` - -See also [form upload example](examples/62-server-form-upload.php) for more details. - -The `getBody(): StreamInterface` method can be used to -get the raw data from this request body, similar to -[PHP's `php://input` stream](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.input). -This method returns an instance of the request body represented by the -[PSR-7 `StreamInterface`](https://www.php-fig.org/psr/psr-7/#34-psrhttpmessagestreaminterface). -This is particularly useful when using a custom request body that will not -otherwise be parsed by default, such as a JSON (`Content-Type: application/json`) or -an XML (`Content-Type: application/xml`) request body (which is commonly used for -`POST`, `PUT` or `PATCH` requests in JSON-based or RESTful/RESTish APIs). - -```php -$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { - $data = json_decode((string)$request->getBody()); - $name = $data->name ?? 'anonymous'; - - return React\Http\Message\Response::json( - ['message' => "Hello $name!"] - ); -}); -``` - -See also [JSON API server example](examples/59-server-json-api.php) for more details. - -The `getUploadedFiles(): array` method can be used to -get the uploaded files in this request, similar to -[PHP's `$_FILES` variable](https://www.php.net/manual/en/reserved.variables.files.php). -This method returns a (possibly nested) array structure with all file uploads, each represented by the -[PSR-7 `UploadedFileInterface`](https://www.php-fig.org/psr/psr-7/#36-psrhttpmessageuploadedfileinterface). -This array will only be filled when using the `Content-Type: multipart/form-data` -request header (commonly used for `POST` requests for HTML file uploads). - -```php -$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { - $files = $request->getUploadedFiles(); - $name = isset($files['avatar']) ? $files['avatar']->getClientFilename() : 'nothing'; - - return React\Http\Message\Response::plaintext( - "Uploaded $name\n" - ); -}); -``` - -See also [form upload server example](examples/62-server-form-upload.php) for more details. - -The `getSize(): ?int` method can be used to -get the size of the request body, similar to PHP's `$_SERVER['CONTENT_LENGTH']` variable. -This method returns the complete size of the request body measured in number -of bytes as defined by the message boundaries. -This value may be `0` if the request message does not contain a request body -(such as a simple `GET` request). -This method operates on the buffered request body, i.e. the request body size -is always known, even when the request does not specify a `Content-Length` request -header or when using `Transfer-Encoding: chunked` for HTTP/1.1 requests. - -> Note: The `HttpServer` automatically takes care of handling requests with the - additional `Expect: 100-continue` request header. When HTTP/1.1 clients want to - send a bigger request body, they MAY send only the request headers with an - additional `Expect: 100-continue` request header and wait before sending the actual - (large) message body. In this case the server will automatically send an - intermediary `HTTP/1.1 100 Continue` response to the client. This ensures you - will receive the request body without a delay as expected. - -#### Streaming incoming request - -If you're using the advanced [`StreamingRequestMiddleware`](#streamingrequestmiddleware), -the request object will be processed once the request headers have been received. -This means that this happens irrespective of (i.e. *before*) receiving the -(potentially much larger) request body. - -> Note that this is non-standard behavior considered advanced usage. Jump to the - previous chapter to learn more about how to process a buffered [request body](#request-body). - -While this may be uncommon in the PHP ecosystem, this is actually a very powerful -approach that gives you several advantages not otherwise possible: - -* React to requests *before* receiving a large request body, - such as rejecting an unauthenticated request or one that exceeds allowed - message lengths (file uploads). -* Start processing parts of the request body before the remainder of the request - body arrives or if the sender is slowly streaming data. -* Process a large request body without having to buffer anything in memory, - such as accepting a huge file upload or possibly unlimited request body stream. - -The `getBody(): StreamInterface` method can be used to -access the request body stream. -In the streaming mode, this method returns a stream instance that implements both the -[PSR-7 `StreamInterface`](https://www.php-fig.org/psr/psr-7/#34-psrhttpmessagestreaminterface) -and the [ReactPHP `ReadableStreamInterface`](https://github.com/reactphp/stream#readablestreaminterface). -However, most of the -[PSR-7 `StreamInterface`](https://www.php-fig.org/psr/psr-7/#34-psrhttpmessagestreaminterface) -methods have been designed under the assumption of being in control of a -synchronous request body. -Given that this does not apply to this server, the following -[PSR-7 `StreamInterface`](https://www.php-fig.org/psr/psr-7/#34-psrhttpmessagestreaminterface) -methods are not used and SHOULD NOT be called: -`tell()`, `eof()`, `seek()`, `rewind()`, `write()` and `read()`. -If this is an issue for your use case and/or you want to access uploaded files, -it's highly recommended to use a buffered [request body](#request-body) or use the -[`RequestBodyBufferMiddleware`](#requestbodybuffermiddleware) instead. -The [ReactPHP `ReadableStreamInterface`](https://github.com/reactphp/stream#readablestreaminterface) -gives you access to the incoming request body as the individual chunks arrive: - -```php -$http = new React\Http\HttpServer( - new React\Http\Middleware\StreamingRequestMiddleware(), - function (Psr\Http\Message\ServerRequestInterface $request) { - $body = $request->getBody(); - assert($body instanceof Psr\Http\Message\StreamInterface); - assert($body instanceof React\Stream\ReadableStreamInterface); - - return new React\Promise\Promise(function ($resolve, $reject) use ($body) { - $bytes = 0; - $body->on('data', function ($data) use (&$bytes) { - $bytes += strlen($data); - }); - - $body->on('end', function () use ($resolve, &$bytes){ - $resolve(React\Http\Message\Response::plaintext( - "Received $bytes bytes\n" - )); - }); - - // an error occures e.g. on invalid chunked encoded data or an unexpected 'end' event - $body->on('error', function (Exception $e) use ($resolve, &$bytes) { - $resolve(React\Http\Message\Response::plaintext( - "Encountered error after $bytes bytes: {$e->getMessage()}\n" - )->withStatus(React\Http\Message\Response::STATUS_BAD_REQUEST)); - }); - }); - } -); -``` - -The above example simply counts the number of bytes received in the request body. -This can be used as a skeleton for buffering or processing the request body. - -See also [streaming request server example](examples/63-server-streaming-request.php) for more details. - -The `data` event will be emitted whenever new data is available on the request -body stream. -The server also automatically takes care of decoding any incoming requests using -`Transfer-Encoding: chunked` and will only emit the actual payload as data. - -The `end` event will be emitted when the request body stream terminates -successfully, i.e. it was read until its expected end. - -The `error` event will be emitted in case the request stream contains invalid -data for `Transfer-Encoding: chunked` or when the connection closes before -the complete request stream has been received. -The server will automatically stop reading from the connection and discard all -incoming data instead of closing it. -A response message can still be sent (unless the connection is already closed). - -A `close` event will be emitted after an `error` or `end` event. - -For more details about the request body stream, check out the documentation of -[ReactPHP `ReadableStreamInterface`](https://github.com/reactphp/stream#readablestreaminterface). - -The `getSize(): ?int` method can be used to -get the size of the request body, similar to PHP's `$_SERVER['CONTENT_LENGTH']` variable. -This method returns the complete size of the request body measured in number -of bytes as defined by the message boundaries. -This value may be `0` if the request message does not contain a request body -(such as a simple `GET` request). -This method operates on the streaming request body, i.e. the request body size -may be unknown (`null`) when using `Transfer-Encoding: chunked` for HTTP/1.1 requests. - -```php -$http = new React\Http\HttpServer( - new React\Http\Middleware\StreamingRequestMiddleware(), - function (Psr\Http\Message\ServerRequestInterface $request) { - $size = $request->getBody()->getSize(); - if ($size === null) { - $body = "The request does not contain an explicit length. "; - $body .= "This example does not accept chunked transfer encoding.\n"; - - return React\Http\Message\Response::plaintext( - $body - )->withStatus(React\Http\Message\Response::STATUS_LENGTH_REQUIRED); - } - - return React\Http\Message\Response::plaintext( - "Request body size: " . $size . " bytes\n" - ); - } -); -``` - -> Note: The `HttpServer` automatically takes care of handling requests with the - additional `Expect: 100-continue` request header. When HTTP/1.1 clients want to - send a bigger request body, they MAY send only the request headers with an - additional `Expect: 100-continue` request header and wait before sending the actual - (large) message body. In this case the server will automatically send an - intermediary `HTTP/1.1 100 Continue` response to the client. This ensures you - will receive the streaming request body without a delay as expected. - -#### Request method - -Note that the server supports *any* request method (including custom and non- -standard ones) and all request-target formats defined in the HTTP specs for each -respective method, including *normal* `origin-form` requests as well as -proxy requests in `absolute-form` and `authority-form`. -The `getUri(): UriInterface` method can be used to get the effective request -URI which provides you access to individiual URI components. -Note that (depending on the given `request-target`) certain URI components may -or may not be present, for example the `getPath(): string` method will return -an empty string for requests in `asterisk-form` or `authority-form`. -Its `getHost(): string` method will return the host as determined by the -effective request URI, which defaults to the local socket address if an HTTP/1.0 -client did not specify one (i.e. no `Host` header). -Its `getScheme(): string` method will return `http` or `https` depending -on whether the request was made over a secure TLS connection to the target host. - -The `Host` header value will be sanitized to match this host component plus the -port component only if it is non-standard for this URI scheme. - -You can use `getMethod(): string` and `getRequestTarget(): string` to -check this is an accepted request and may want to reject other requests with -an appropriate error code, such as `400` (Bad Request) or `405` (Method Not -Allowed). - -> The `CONNECT` method is useful in a tunneling setup (HTTPS proxy) and not - something most HTTP servers would want to care about. - Note that if you want to handle this method, the client MAY send a different - request-target than the `Host` header value (such as removing default ports) - and the request-target MUST take precendence when forwarding. - -#### Cookie parameters - -The `getCookieParams(): string[]` method can be used to -get all cookies sent with the current request. - -```php -$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { - $key = 'react\php'; - - if (isset($request->getCookieParams()[$key])) { - $body = "Your cookie value is: " . $request->getCookieParams()[$key] . "\n"; - - return React\Http\Message\Response::plaintext( - $body - ); - } - - return React\Http\Message\Response::plaintext( - "Your cookie has been set.\n" - )->withHeader('Set-Cookie', urlencode($key) . '=' . urlencode('test;more')); -}); -``` - -The above example will try to set a cookie on first access and -will try to print the cookie value on all subsequent tries. -Note how the example uses the `urlencode()` function to encode -non-alphanumeric characters. -This encoding is also used internally when decoding the name and value of cookies -(which is in line with other implementations, such as PHP's cookie functions). - -See also [cookie server example](examples/55-server-cookie-handling.php) for more details. - -#### Invalid request - -The `HttpServer` class supports both HTTP/1.1 and HTTP/1.0 request messages. -If a client sends an invalid request message, uses an invalid HTTP -protocol version or sends an invalid `Transfer-Encoding` request header value, -the server will automatically send a `400` (Bad Request) HTTP error response -to the client and close the connection. -On top of this, it will emit an `error` event that can be used for logging -purposes like this: - -```php -$http->on('error', function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -Note that the server will also emit an `error` event if you do not return a -valid response object from your request handler function. See also -[invalid response](#invalid-response) for more details. - -### Server Response - -The callback function passed to the constructor of the [`HttpServer`](#httpserver) is -responsible for processing the request and returning a response, which will be -delivered to the client. - -This function MUST return an instance implementing -[PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) -object or a -[ReactPHP Promise](https://github.com/reactphp/promise) -which resolves with a [PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) object. - -This projects ships a [`Response` class](#response) which implements the -[PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface). -In its most simple form, you can use it like this: - -```php -$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { - return React\Http\Message\Response::plaintext( - "Hello World!\n" - ); -}); -``` - -We use this [`Response` class](#response) throughout our project examples, but -feel free to use any other implementation of the -[PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface). -See also the [`Response` class](#response) for more details. - -#### Deferred response - -The example above returns the response directly, because it needs -no time to be processed. -Using a database, the file system or long calculations -(in fact every action that will take >=1ms) to create your -response, will slow down the server. -To prevent this you SHOULD use a -[ReactPHP Promise](https://github.com/reactphp/promise#reactpromise). -This example shows how such a long-term action could look like: - -```php -$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { - $promise = new Promise(function ($resolve, $reject) { - Loop::addTimer(1.5, function() use ($resolve) { - $resolve(); - }); - }); - - return $promise->then(function () { - return React\Http\Message\Response::plaintext( - "Hello World!" - ); - }); -}); -``` - -The above example will create a response after 1.5 second. -This example shows that you need a promise, -if your response needs time to created. -The `ReactPHP Promise` will resolve in a `Response` object when the request -body ends. -If the client closes the connection while the promise is still pending, the -promise will automatically be cancelled. -The promise cancellation handler can be used to clean up any pending resources -allocated in this case (if applicable). -If a promise is resolved after the client closes, it will simply be ignored. - -#### Streaming outgoing response - -The `Response` class in this project supports to add an instance which implements the -[ReactPHP `ReadableStreamInterface`](https://github.com/reactphp/stream#readablestreaminterface) -for the response body. -So you are able stream data directly into the response body. -Note that other implementations of the -[PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) -may only support strings. - -```php -$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { - $stream = new ThroughStream(); - - $timer = Loop::addPeriodicTimer(0.5, function () use ($stream) { - $stream->write(microtime(true) . PHP_EOL); - }); - - Loop::addTimer(5, function() use ($timer, $stream) { - Loop::cancelTimer($timer); - $stream->end(); - }); - - return new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, - array( - 'Content-Type' => 'text/plain' - ), - $stream - ); -}); -``` - -The above example will emit every 0.5 seconds the current Unix timestamp -with microseconds as float to the client and will end after 5 seconds. -This is just a example you could use of the streaming, -you could also send a big amount of data via little chunks -or use it for body data that needs to calculated. - -If the request handler resolves with a response stream that is already closed, -it will simply send an empty response body. -If the client closes the connection while the stream is still open, the -response stream will automatically be closed. -If a promise is resolved with a streaming body after the client closes, the -response stream will automatically be closed. -The `close` event can be used to clean up any pending resources allocated -in this case (if applicable). - -> Note that special care has to be taken if you use a body stream instance that - implements ReactPHP's - [`DuplexStreamInterface`](https://github.com/reactphp/stream#duplexstreaminterface) - (such as the `ThroughStream` in the above example). -> -> For *most* cases, this will simply only consume its readable side and forward - (send) any data that is emitted by the stream, thus entirely ignoring the - writable side of the stream. - If however this is either a `101` (Switching Protocols) response or a `2xx` - (Successful) response to a `CONNECT` method, it will also *write* data to the - writable side of the stream. - This can be avoided by either rejecting all requests with the `CONNECT` - method (which is what most *normal* origin HTTP servers would likely do) or - or ensuring that only ever an instance of - [ReactPHP's `ReadableStreamInterface`](https://github.com/reactphp/stream#readablestreaminterface) - is used. -> -> The `101` (Switching Protocols) response code is useful for the more advanced - `Upgrade` requests, such as upgrading to the WebSocket protocol or - implementing custom protocol logic that is out of scope of the HTTP specs and - this HTTP library. - If you want to handle the `Upgrade: WebSocket` header, you will likely want - to look into using [Ratchet](http://socketo.me/) instead. - If you want to handle a custom protocol, you will likely want to look into the - [HTTP specs](https://tools.ietf.org/html/rfc7230#section-6.7) and also see - [examples #81 and #82](examples/) for more details. - In particular, the `101` (Switching Protocols) response code MUST NOT be used - unless you send an `Upgrade` response header value that is also present in - the corresponding HTTP/1.1 `Upgrade` request header value. - The server automatically takes care of sending a `Connection: upgrade` - header value in this case, so you don't have to. -> -> The `CONNECT` method is useful in a tunneling setup (HTTPS proxy) and not - something most origin HTTP servers would want to care about. - The HTTP specs define an opaque "tunneling mode" for this method and make no - use of the message body. - For consistency reasons, this library uses a `DuplexStreamInterface` in the - response body for tunneled application data. - This implies that that a `2xx` (Successful) response to a `CONNECT` request - can in fact use a streaming response body for the tunneled application data, - so that any raw data the client sends over the connection will be piped - through the writable stream for consumption. - Note that while the HTTP specs make no use of the request body for `CONNECT` - requests, one may still be present. Normal request body processing applies - here and the connection will only turn to "tunneling mode" after the request - body has been processed (which should be empty in most cases). - See also [HTTP CONNECT server example](examples/72-server-http-connect-proxy.php) for more details. - -#### Response length - -If the response body size is known, a `Content-Length` response header will be -added automatically. This is the most common use case, for example when using -a `string` response body like this: - -```php -$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { - return React\Http\Message\Response::plaintext( - "Hello World!\n" - ); -}); -``` - -If the response body size is unknown, a `Content-Length` response header can not -be added automatically. When using a [streaming outgoing response](#streaming-outgoing-response) -without an explicit `Content-Length` response header, outgoing HTTP/1.1 response -messages will automatically use `Transfer-Encoding: chunked` while legacy HTTP/1.0 -response messages will contain the plain response body. If you know the length -of your streaming response body, you MAY want to specify it explicitly like this: - -```php -$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { - $stream = new ThroughStream(); - - Loop::addTimer(2.0, function () use ($stream) { - $stream->end("Hello World!\n"); - }); - - return new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, - array( - 'Content-Length' => '13', - 'Content-Type' => 'text/plain', - ), - $stream - ); -}); -``` - -Any response to a `HEAD` request and any response with a `1xx` (Informational), -`204` (No Content) or `304` (Not Modified) status code will *not* include a -message body as per the HTTP specs. -This means that your callback does not have to take special care of this and any -response body will simply be ignored. - -Similarly, any `2xx` (Successful) response to a `CONNECT` request, any response -with a `1xx` (Informational) or `204` (No Content) status code will *not* -include a `Content-Length` or `Transfer-Encoding` header as these do not apply -to these messages. -Note that a response to a `HEAD` request and any response with a `304` (Not -Modified) status code MAY include these headers even though -the message does not contain a response body, because these header would apply -to the message if the same request would have used an (unconditional) `GET`. - -#### Invalid response - -As stated above, each outgoing HTTP response is always represented by the -[PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface). -If your request handler function returns an invalid value or throws an -unhandled `Exception` or `Throwable`, the server will automatically send a `500` -(Internal Server Error) HTTP error response to the client. -On top of this, it will emit an `error` event that can be used for logging -purposes like this: - -```php -$http->on('error', function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; - if ($e->getPrevious() !== null) { - echo 'Previous: ' . $e->getPrevious()->getMessage() . PHP_EOL; - } -}); -``` - -Note that the server will also emit an `error` event if the client sends an -invalid HTTP request that never reaches your request handler function. See -also [invalid request](#invalid-request) for more details. -Additionally, a [streaming incoming request](#streaming-incoming-request) body -can also emit an `error` event on the request body. - -The server will only send a very generic `500` (Interval Server Error) HTTP -error response without any further details to the client if an unhandled -error occurs. While we understand this might make initial debugging harder, -it also means that the server does not leak any application details or stack -traces to the outside by default. It is usually recommended to catch any -`Exception` or `Throwable` within your request handler function or alternatively -use a [`middleware`](#middleware) to avoid this generic error handling and -create your own HTTP response message instead. - -#### Default response headers - -When a response is returned from the request handler function, it will be -processed by the [`HttpServer`](#httpserver) and then sent back to the client. - -A `Server: ReactPHP/1` response header will be added automatically. You can add -a custom `Server` response header like this: - -```php -$http = new React\Http\HttpServer(function (ServerRequestInterface $request) { - return new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, - array( - 'Server' => 'PHP/3' - ) - ); -}); -``` - -If you do not want to send this `Sever` response header at all (such as when you -don't want to expose the underlying server software), you can use an empty -string value like this: - -```php -$http = new React\Http\HttpServer(function (ServerRequestInterface $request) { - return new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, - array( - 'Server' => '' - ) - ); -}); -``` - -A `Date` response header will be added automatically with the current system -date and time if none is given. You can add a custom `Date` response header -like this: - -```php -$http = new React\Http\HttpServer(function (ServerRequestInterface $request) { - return new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, - array( - 'Date' => gmdate('D, d M Y H:i:s \G\M\T') - ) - ); -}); -``` - -If you do not want to send this `Date` response header at all (such as when you -don't have an appropriate clock to rely on), you can use an empty string value -like this: - -```php -$http = new React\Http\HttpServer(function (ServerRequestInterface $request) { - return new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, - array( - 'Date' => '' - ) - ); -}); -``` - -The `HttpServer` class will automatically add the protocol version of the request, -so you don't have to. For instance, if the client sends the request using the -HTTP/1.1 protocol version, the response message will also use the same protocol -version, no matter what version is returned from the request handler function. - -The server supports persistent connections. An appropriate `Connection: keep-alive` -or `Connection: close` response header will be added automatically, respecting the -matching request header value and HTTP default header values. The server is -responsible for handling the `Connection` response header, so you SHOULD NOT pass -this response header yourself, unless you explicitly want to override the user's -choice with a `Connection: close` response header. - -### Middleware - -As documented above, the [`HttpServer`](#httpserver) accepts a single request handler -argument that is responsible for processing an incoming HTTP request and then -creating and returning an outgoing HTTP response. - -Many common use cases involve validating, processing, manipulating the incoming -HTTP request before passing it to the final business logic request handler. -As such, this project supports the concept of middleware request handlers. - -#### Custom middleware - -A middleware request handler is expected to adhere the following rules: - -* It is a valid `callable`. -* It accepts an instance implementing - [PSR-7 `ServerRequestInterface`](https://www.php-fig.org/psr/psr-7/#321-psrhttpmessageserverrequestinterface) - as first argument and an optional `callable` as second argument. -* It returns either: - * An instance implementing - [PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) - for direct consumption. - * Any promise which can be consumed by - [`Promise\resolve()`](https://reactphp.org/promise/#resolve) resolving to a - [PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) - for deferred consumption. - * It MAY throw an `Exception` (or return a rejected promise) in order to - signal an error condition and abort the chain. -* It calls `$next($request)` to continue processing the next middleware - request handler or returns explicitly without calling `$next` to - abort the chain. - * The `$next` request handler (recursively) invokes the next request - handler from the chain with the same logic as above and returns (or throws) - as above. - * The `$request` may be modified prior to calling `$next($request)` to - change the incoming request the next middleware operates on. - * The `$next` return value may be consumed to modify the outgoing response. - * The `$next` request handler MAY be called more than once if you want to - implement custom "retry" logic etc. - -Note that this very simple definition allows you to use either anonymous -functions or any classes that use the magic `__invoke()` method. -This allows you to easily create custom middleware request handlers on the fly -or use a class based approach to ease using existing middleware implementations. - -While this project does provide the means to *use* middleware implementations, -it does not aim to *define* how middleware implementations should look like. -We realize that there's a vivid ecosystem of middleware implementations and -ongoing effort to standardize interfaces between these with -[PSR-15](https://www.php-fig.org/psr/psr-15/) (HTTP Server Request Handlers) -and support this goal. -As such, this project only bundles a few middleware implementations that are -required to match PHP's request behavior (see below) and otherwise actively -encourages [Third-Party Middleware](#third-party-middleware) implementations. - -In order to use middleware request handlers, simply pass a list of all -callables as defined above to the [`HttpServer`](#httpserver). -The following example adds a middleware request handler that adds the current time to the request as a -header (`Request-Time`) and a final request handler that always returns a `200 OK` status code without a body: - -```php -$http = new React\Http\HttpServer( - function (Psr\Http\Message\ServerRequestInterface $request, callable $next) { - $request = $request->withHeader('Request-Time', time()); - return $next($request); - }, - function (Psr\Http\Message\ServerRequestInterface $request) { - return new React\Http\Message\Response(React\Http\Message\Response::STATUS_OK); - } -); -``` - -> Note how the middleware request handler and the final request handler have a - very simple (and similar) interface. The only difference is that the final - request handler does not receive a `$next` handler. - -Similarly, you can use the result of the `$next` middleware request handler -function to modify the outgoing response. -Note that as per the above documentation, the `$next` middleware request handler may return a -[PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) -directly or one wrapped in a promise for deferred resolution. -In order to simplify handling both paths, you can simply wrap this in a -[`Promise\resolve()`](https://reactphp.org/promise/#resolve) call like this: - -```php -$http = new React\Http\HttpServer( - function (Psr\Http\Message\ServerRequestInterface $request, callable $next) { - $promise = React\Promise\resolve($next($request)); - return $promise->then(function (ResponseInterface $response) { - return $response->withHeader('Content-Type', 'text/html'); - }); - }, - function (Psr\Http\Message\ServerRequestInterface $request) { - return new React\Http\Message\Response(React\Http\Message\Response::STATUS_OK); - } -); -``` - -Note that the `$next` middleware request handler may also throw an -`Exception` (or return a rejected promise) as described above. -The previous example does not catch any exceptions and would thus signal an -error condition to the `HttpServer`. -Alternatively, you can also catch any `Exception` to implement custom error -handling logic (or logging etc.) by wrapping this in a -[`Promise`](https://reactphp.org/promise/#promise) like this: - -```php -$http = new React\Http\HttpServer( - function (Psr\Http\Message\ServerRequestInterface $request, callable $next) { - $promise = new React\Promise\Promise(function ($resolve) use ($next, $request) { - $resolve($next($request)); - }); - return $promise->then(null, function (Exception $e) { - return React\Http\Message\Response::plaintext( - 'Internal error: ' . $e->getMessage() . "\n" - )->withStatus(React\Http\Message\Response::STATUS_INTERNAL_SERVER_ERROR); - }); - }, - function (Psr\Http\Message\ServerRequestInterface $request) { - if (mt_rand(0, 1) === 1) { - throw new RuntimeException('Database error'); - } - return new React\Http\Message\Response(React\Http\Message\Response::STATUS_OK); - } -); -``` - -#### Third-Party Middleware - -While this project does provide the means to *use* middleware implementations -(see above), it does not aim to *define* how middleware implementations should -look like. We realize that there's a vivid ecosystem of middleware -implementations and ongoing effort to standardize interfaces between these with -[PSR-15](https://www.php-fig.org/psr/psr-15/) (HTTP Server Request Handlers) -and support this goal. -As such, this project only bundles a few middleware implementations that are -required to match PHP's request behavior (see -[middleware implementations](#reacthttpmiddleware)) and otherwise actively -encourages third-party middleware implementations. - -While we would love to support PSR-15 directly in `react/http`, we understand -that this interface does not specifically target async APIs and as such does -not take advantage of promises for [deferred responses](#deferred-response). -The gist of this is that where PSR-15 enforces a -[PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) -return value, we also accept a `PromiseInterface`. -As such, we suggest using the external -[PSR-15 middleware adapter](https://github.com/friends-of-reactphp/http-middleware-psr15-adapter) -that uses on the fly monkey patching of these return values which makes using -most PSR-15 middleware possible with this package without any changes required. - -Other than that, you can also use the above [middleware definition](#middleware) -to create custom middleware. A non-exhaustive list of third-party middleware can -be found at the [middleware wiki](https://github.com/reactphp/reactphp/wiki/Users#http-middleware). -If you build or know a custom middleware, make sure to let the world know and -feel free to add it to this list. - -## API - -### Browser - -The `React\Http\Browser` is responsible for sending HTTP requests to your HTTP server -and keeps track of pending incoming HTTP responses. - -```php -$browser = new React\Http\Browser(); -``` - -This class takes two optional arguments for more advanced usage: - -```php -// constructor signature as of v1.5.0 -$browser = new React\Http\Browser(?ConnectorInterface $connector = null, ?LoopInterface $loop = null); - -// legacy constructor signature before v1.5.0 -$browser = new React\Http\Browser(?LoopInterface $loop = null, ?ConnectorInterface $connector = null); -``` - -If you need custom connector settings (DNS resolution, TLS parameters, timeouts, -proxy servers etc.), you can explicitly pass a custom instance of the -[`ConnectorInterface`](https://github.com/reactphp/socket#connectorinterface): - -```php -$connector = new React\Socket\Connector(array( - 'dns' => '127.0.0.1', - 'tcp' => array( - 'bindto' => '192.168.10.1:0' - ), - 'tls' => array( - 'verify_peer' => false, - 'verify_peer_name' => false - ) -)); - -$browser = new React\Http\Browser($connector); -``` - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -> Note that the browser class is final and shouldn't be extended, it is likely to be marked final in a future release. - -#### get() - -The `get(string $url, array $headers = array()): PromiseInterface` method can be used to -send an HTTP GET request. - -```php -$browser->get($url)->then(function (Psr\Http\Message\ResponseInterface $response) { - var_dump((string)$response->getBody()); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -See also [GET request client example](examples/01-client-get-request.php). - -#### post() - -The `post(string $url, array $headers = array(), string|ReadableStreamInterface $body = ''): PromiseInterface` method can be used to -send an HTTP POST request. - -```php -$browser->post( - $url, - [ - 'Content-Type' => 'application/json' - ], - json_encode($data) -)->then(function (Psr\Http\Message\ResponseInterface $response) { - var_dump(json_decode((string)$response->getBody())); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -See also [POST JSON client example](examples/04-client-post-json.php). - -This method is also commonly used to submit HTML form data: - -```php -$data = [ - 'user' => 'Alice', - 'password' => 'secret' -]; - -$browser->post( - $url, - [ - 'Content-Type' => 'application/x-www-form-urlencoded' - ], - http_build_query($data) -); -``` - -This method will automatically add a matching `Content-Length` request -header if the outgoing request body is a `string`. If you're using a -streaming request body (`ReadableStreamInterface`), it will default to -using `Transfer-Encoding: chunked` or you have to explicitly pass in a -matching `Content-Length` request header like so: - -```php -$body = new React\Stream\ThroughStream(); -Loop::addTimer(1.0, function () use ($body) { - $body->end("hello world"); -}); - -$browser->post($url, array('Content-Length' => '11'), $body); -``` - -#### head() - -The `head(string $url, array $headers = array()): PromiseInterface` method can be used to -send an HTTP HEAD request. - -```php -$browser->head($url)->then(function (Psr\Http\Message\ResponseInterface $response) { - var_dump($response->getHeaders()); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -#### patch() - -The `patch(string $url, array $headers = array(), string|ReadableStreamInterface $body = ''): PromiseInterface` method can be used to -send an HTTP PATCH request. - -```php -$browser->patch( - $url, - [ - 'Content-Type' => 'application/json' - ], - json_encode($data) -)->then(function (Psr\Http\Message\ResponseInterface $response) { - var_dump(json_decode((string)$response->getBody())); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -This method will automatically add a matching `Content-Length` request -header if the outgoing request body is a `string`. If you're using a -streaming request body (`ReadableStreamInterface`), it will default to -using `Transfer-Encoding: chunked` or you have to explicitly pass in a -matching `Content-Length` request header like so: - -```php -$body = new React\Stream\ThroughStream(); -Loop::addTimer(1.0, function () use ($body) { - $body->end("hello world"); -}); - -$browser->patch($url, array('Content-Length' => '11'), $body); -``` - -#### put() - -The `put(string $url, array $headers = array(), string|ReadableStreamInterface $body = ''): PromiseInterface` method can be used to -send an HTTP PUT request. - -```php -$browser->put( - $url, - [ - 'Content-Type' => 'text/xml' - ], - $xml->asXML() -)->then(function (Psr\Http\Message\ResponseInterface $response) { - var_dump((string)$response->getBody()); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -See also [PUT XML client example](examples/05-client-put-xml.php). - -This method will automatically add a matching `Content-Length` request -header if the outgoing request body is a `string`. If you're using a -streaming request body (`ReadableStreamInterface`), it will default to -using `Transfer-Encoding: chunked` or you have to explicitly pass in a -matching `Content-Length` request header like so: - -```php -$body = new React\Stream\ThroughStream(); -Loop::addTimer(1.0, function () use ($body) { - $body->end("hello world"); -}); - -$browser->put($url, array('Content-Length' => '11'), $body); -``` - -#### delete() - -The `delete(string $url, array $headers = array(), string|ReadableStreamInterface $body = ''): PromiseInterface` method can be used to -send an HTTP DELETE request. - -```php -$browser->delete($url)->then(function (Psr\Http\Message\ResponseInterface $response) { - var_dump((string)$response->getBody()); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -#### request() - -The `request(string $method, string $url, array $headers = array(), string|ReadableStreamInterface $body = ''): PromiseInterface` method can be used to -send an arbitrary HTTP request. - -The preferred way to send an HTTP request is by using the above -[request methods](#request-methods), for example the [`get()`](#get) -method to send an HTTP `GET` request. - -As an alternative, if you want to use a custom HTTP request method, you -can use this method: - -```php -$browser->request('OPTIONS', $url)->then(function (Psr\Http\Message\ResponseInterface $response) { - var_dump((string)$response->getBody()); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -This method will automatically add a matching `Content-Length` request -header if the size of the outgoing request body is known and non-empty. -For an empty request body, if will only include a `Content-Length: 0` -request header if the request method usually expects a request body (only -applies to `POST`, `PUT` and `PATCH`). - -If you're using a streaming request body (`ReadableStreamInterface`), it -will default to using `Transfer-Encoding: chunked` or you have to -explicitly pass in a matching `Content-Length` request header like so: - -```php -$body = new React\Stream\ThroughStream(); -Loop::addTimer(1.0, function () use ($body) { - $body->end("hello world"); -}); - -$browser->request('POST', $url, array('Content-Length' => '11'), $body); -``` - -#### requestStreaming() - -The `requestStreaming(string $method, string $url, array $headers = array(), string|ReadableStreamInterface $body = ''): PromiseInterface` method can be used to -send an arbitrary HTTP request and receive a streaming response without buffering the response body. - -The preferred way to send an HTTP request is by using the above -[request methods](#request-methods), for example the [`get()`](#get) -method to send an HTTP `GET` request. Each of these methods will buffer -the whole response body in memory by default. This is easy to get started -and works reasonably well for smaller responses. - -In some situations, it's a better idea to use a streaming approach, where -only small chunks have to be kept in memory. You can use this method to -send an arbitrary HTTP request and receive a streaming response. It uses -the same HTTP message API, but does not buffer the response body in -memory. It only processes the response body in small chunks as data is -received and forwards this data through [ReactPHP's Stream API](https://github.com/reactphp/stream). -This works for (any number of) responses of arbitrary sizes. - -```php -$browser->requestStreaming('GET', $url)->then(function (Psr\Http\Message\ResponseInterface $response) { - $body = $response->getBody(); - assert($body instanceof Psr\Http\Message\StreamInterface); - assert($body instanceof React\Stream\ReadableStreamInterface); - - $body->on('data', function ($chunk) { - echo $chunk; - }); - - $body->on('error', function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; - }); - - $body->on('close', function () { - echo '[DONE]' . PHP_EOL; - }); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -See also [ReactPHP's `ReadableStreamInterface`](https://github.com/reactphp/stream#readablestreaminterface) -and the [streaming response](#streaming-response) for more details, -examples and possible use-cases. - -This method will automatically add a matching `Content-Length` request -header if the size of the outgoing request body is known and non-empty. -For an empty request body, if will only include a `Content-Length: 0` -request header if the request method usually expects a request body (only -applies to `POST`, `PUT` and `PATCH`). - -If you're using a streaming request body (`ReadableStreamInterface`), it -will default to using `Transfer-Encoding: chunked` or you have to -explicitly pass in a matching `Content-Length` request header like so: - -```php -$body = new React\Stream\ThroughStream(); -Loop::addTimer(1.0, function () use ($body) { - $body->end("hello world"); -}); - -$browser->requestStreaming('POST', $url, array('Content-Length' => '11'), $body); -``` - -#### withTimeout() - -The `withTimeout(bool|number $timeout): Browser` method can be used to -change the maximum timeout used for waiting for pending requests. - -You can pass in the number of seconds to use as a new timeout value: - -```php -$browser = $browser->withTimeout(10.0); -``` - -You can pass in a bool `false` to disable any timeouts. In this case, -requests can stay pending forever: - -```php -$browser = $browser->withTimeout(false); -``` - -You can pass in a bool `true` to re-enable default timeout handling. This -will respects PHP's `default_socket_timeout` setting (default 60s): - -```php -$browser = $browser->withTimeout(true); -``` - -See also [timeouts](#timeouts) for more details about timeout handling. - -Notice that the [`Browser`](#browser) is an immutable object, i.e. this -method actually returns a *new* [`Browser`](#browser) instance with the -given timeout value applied. - -#### withFollowRedirects() - -The `withFollowRedirects(bool|int $followRedirects): Browser` method can be used to -change how HTTP redirects will be followed. - -You can pass in the maximum number of redirects to follow: - -```php -$browser = $browser->withFollowRedirects(5); -``` - -The request will automatically be rejected when the number of redirects -is exceeded. You can pass in a `0` to reject the request for any -redirects encountered: - -```php -$browser = $browser->withFollowRedirects(0); - -$browser->get($url)->then(function (Psr\Http\Message\ResponseInterface $response) { - // only non-redirected responses will now end up here - var_dump($response->getHeaders()); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -You can pass in a bool `false` to disable following any redirects. In -this case, requests will resolve with the redirection response instead -of following the `Location` response header: - -```php -$browser = $browser->withFollowRedirects(false); - -$browser->get($url)->then(function (Psr\Http\Message\ResponseInterface $response) { - // any redirects will now end up here - var_dump($response->getHeaderLine('Location')); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -You can pass in a bool `true` to re-enable default redirect handling. -This defaults to following a maximum of 10 redirects: - -```php -$browser = $browser->withFollowRedirects(true); -``` - -See also [redirects](#redirects) for more details about redirect handling. - -Notice that the [`Browser`](#browser) is an immutable object, i.e. this -method actually returns a *new* [`Browser`](#browser) instance with the -given redirect setting applied. - -#### withRejectErrorResponse() - -The `withRejectErrorResponse(bool $obeySuccessCode): Browser` method can be used to -change whether non-successful HTTP response status codes (4xx and 5xx) will be rejected. - -You can pass in a bool `false` to disable rejecting incoming responses -that use a 4xx or 5xx response status code. In this case, requests will -resolve with the response message indicating an error condition: - -```php -$browser = $browser->withRejectErrorResponse(false); - -$browser->get($url)->then(function (Psr\Http\Message\ResponseInterface $response) { - // any HTTP response will now end up here - var_dump($response->getStatusCode(), $response->getReasonPhrase()); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -You can pass in a bool `true` to re-enable default status code handling. -This defaults to rejecting any response status codes in the 4xx or 5xx -range with a [`ResponseException`](#responseexception): - -```php -$browser = $browser->withRejectErrorResponse(true); - -$browser->get($url)->then(function (Psr\Http\Message\ResponseInterface $response) { - // any successful HTTP response will now end up here - var_dump($response->getStatusCode(), $response->getReasonPhrase()); -}, function (Exception $e) { - if ($e instanceof React\Http\Message\ResponseException) { - // any HTTP response error message will now end up here - $response = $e->getResponse(); - var_dump($response->getStatusCode(), $response->getReasonPhrase()); - } else { - echo 'Error: ' . $e->getMessage() . PHP_EOL; - } -}); -``` - -Notice that the [`Browser`](#browser) is an immutable object, i.e. this -method actually returns a *new* [`Browser`](#browser) instance with the -given setting applied. - -#### withBase() - -The `withBase(string|null $baseUrl): Browser` method can be used to -change the base URL used to resolve relative URLs to. - -If you configure a base URL, any requests to relative URLs will be -processed by first resolving this relative to the given absolute base -URL. This supports resolving relative path references (like `../` etc.). -This is particularly useful for (RESTful) API calls where all endpoints -(URLs) are located under a common base URL. - -```php -$browser = $browser->withBase('http://api.example.com/v3/'); - -// will request http://api.example.com/v3/users -$browser->get('users')->then(…); -``` - -You can pass in a `null` base URL to return a new instance that does not -use a base URL: - -```php -$browser = $browser->withBase(null); -``` - -Accordingly, any requests using relative URLs to a browser that does not -use a base URL can not be completed and will be rejected without sending -a request. - -This method will throw an `InvalidArgumentException` if the given -`$baseUrl` argument is not a valid URL. - -Notice that the [`Browser`](#browser) is an immutable object, i.e. the `withBase()` method -actually returns a *new* [`Browser`](#browser) instance with the given base URL applied. - -#### withProtocolVersion() - -The `withProtocolVersion(string $protocolVersion): Browser` method can be used to -change the HTTP protocol version that will be used for all subsequent requests. - -All the above [request methods](#request-methods) default to sending -requests as HTTP/1.1. This is the preferred HTTP protocol version which -also provides decent backwards-compatibility with legacy HTTP/1.0 -servers. As such, there should rarely be a need to explicitly change this -protocol version. - -If you want to explicitly use the legacy HTTP/1.0 protocol version, you -can use this method: - -```php -$browser = $browser->withProtocolVersion('1.0'); - -$browser->get($url)->then(…); -``` - -Notice that the [`Browser`](#browser) is an immutable object, i.e. this -method actually returns a *new* [`Browser`](#browser) instance with the -new protocol version applied. - -#### withResponseBuffer() - -The `withResponseBuffer(int $maximumSize): Browser` method can be used to -change the maximum size for buffering a response body. - -The preferred way to send an HTTP request is by using the above -[request methods](#request-methods), for example the [`get()`](#get) -method to send an HTTP `GET` request. Each of these methods will buffer -the whole response body in memory by default. This is easy to get started -and works reasonably well for smaller responses. - -By default, the response body buffer will be limited to 16 MiB. If the -response body exceeds this maximum size, the request will be rejected. - -You can pass in the maximum number of bytes to buffer: - -```php -$browser = $browser->withResponseBuffer(1024 * 1024); - -$browser->get($url)->then(function (Psr\Http\Message\ResponseInterface $response) { - // response body will not exceed 1 MiB - var_dump($response->getHeaders(), (string) $response->getBody()); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -Note that the response body buffer has to be kept in memory for each -pending request until its transfer is completed and it will only be freed -after a pending request is fulfilled. As such, increasing this maximum -buffer size to allow larger response bodies is usually not recommended. -Instead, you can use the [`requestStreaming()` method](#requeststreaming) -to receive responses with arbitrary sizes without buffering. Accordingly, -this maximum buffer size setting has no effect on streaming responses. - -Notice that the [`Browser`](#browser) is an immutable object, i.e. this -method actually returns a *new* [`Browser`](#browser) instance with the -given setting applied. - -### React\Http\Message - -#### Response - -The `React\Http\Message\Response` class can be used to -represent an outgoing server response message. - -```php -$response = new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, - array( - 'Content-Type' => 'text/html' - ), - "Hello world!\n" -); -``` - -This class implements the -[PSR-7 `ResponseInterface`](https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface) -which in turn extends the -[PSR-7 `MessageInterface`](https://www.php-fig.org/psr/psr-7/#31-psrhttpmessagemessageinterface). - -On top of this, this class implements the -[PSR-7 Message Util `StatusCodeInterface`](https://github.com/php-fig/http-message-util/blob/master/src/StatusCodeInterface.php) -which means that most common HTTP status codes are available as class -constants with the `STATUS_*` prefix. For instance, the `200 OK` and -`404 Not Found` status codes can used as `Response::STATUS_OK` and -`Response::STATUS_NOT_FOUND` respectively. - -> Internally, this implementation builds on top of an existing incoming - response message and only adds required streaming support. This base class is - considered an implementation detail that may change in the future. - -##### html() - -The static `html(string $html): Response` method can be used to -create an HTML response. - -```php -$html = << - -Hello wörld! - - -HTML; - -$response = React\Http\Message\Response::html($html); -``` - -This is a convenient shortcut method that returns the equivalent of this: - -``` -$response = new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, - [ - 'Content-Type' => 'text/html; charset=utf-8' - ], - $html -); -``` - -This method always returns a response with a `200 OK` status code and -the appropriate `Content-Type` response header for the given HTTP source -string encoded in UTF-8 (Unicode). It's generally recommended to end the -given plaintext string with a trailing newline. - -If you want to use a different status code or custom HTTP response -headers, you can manipulate the returned response object using the -provided PSR-7 methods or directly instantiate a custom HTTP response -object using the `Response` constructor: - -```php -$response = React\Http\Message\Response::html( - "

Error

\n

Invalid user name given.

\n" -)->withStatus(React\Http\Message\Response::STATUS_BAD_REQUEST); -``` - -##### json() - -The static `json(mixed $data): Response` method can be used to -create a JSON response. - -```php -$response = React\Http\Message\Response::json(['name' => 'Alice']); -``` - -This is a convenient shortcut method that returns the equivalent of this: - -``` -$response = new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, - [ - 'Content-Type' => 'application/json' - ], - json_encode( - ['name' => 'Alice'], - JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRESERVE_ZERO_FRACTION - ) . "\n" -); -``` - -This method always returns a response with a `200 OK` status code and -the appropriate `Content-Type` response header for the given structured -data encoded as a JSON text. - -The given structured data will be encoded as a JSON text. Any `string` -values in the data must be encoded in UTF-8 (Unicode). If the encoding -fails, this method will throw an `InvalidArgumentException`. - -By default, the given structured data will be encoded with the flags as -shown above. This includes pretty printing (PHP 5.4+) and preserving -zero fractions for `float` values (PHP 5.6.6+) to ease debugging. It is -assumed any additional data overhead is usually compensated by using HTTP -response compression. - -If you want to use a different status code or custom HTTP response -headers, you can manipulate the returned response object using the -provided PSR-7 methods or directly instantiate a custom HTTP response -object using the `Response` constructor: - -```php -$response = React\Http\Message\Response::json( - ['error' => 'Invalid user name given'] -)->withStatus(React\Http\Message\Response::STATUS_BAD_REQUEST); -``` - -##### plaintext() - -The static `plaintext(string $text): Response` method can be used to -create a plaintext response. - -```php -$response = React\Http\Message\Response::plaintext("Hello wörld!\n"); -``` - -This is a convenient shortcut method that returns the equivalent of this: - -``` -$response = new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, - [ - 'Content-Type' => 'text/plain; charset=utf-8' - ], - "Hello wörld!\n" -); -``` - -This method always returns a response with a `200 OK` status code and -the appropriate `Content-Type` response header for the given plaintext -string encoded in UTF-8 (Unicode). It's generally recommended to end the -given plaintext string with a trailing newline. - -If you want to use a different status code or custom HTTP response -headers, you can manipulate the returned response object using the -provided PSR-7 methods or directly instantiate a custom HTTP response -object using the `Response` constructor: - -```php -$response = React\Http\Message\Response::plaintext( - "Error: Invalid user name given.\n" -)->withStatus(React\Http\Message\Response::STATUS_BAD_REQUEST); -``` - -##### xml() - -The static `xml(string $xml): Response` method can be used to -create an XML response. - -```php -$xml = << - - Hello wörld! - - -XML; - -$response = React\Http\Message\Response::xml($xml); -``` - -This is a convenient shortcut method that returns the equivalent of this: - -``` -$response = new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, - [ - 'Content-Type' => 'application/xml' - ], - $xml -); -``` - -This method always returns a response with a `200 OK` status code and -the appropriate `Content-Type` response header for the given XML source -string. It's generally recommended to use UTF-8 (Unicode) and specify -this as part of the leading XML declaration and to end the given XML -source string with a trailing newline. - -If you want to use a different status code or custom HTTP response -headers, you can manipulate the returned response object using the -provided PSR-7 methods or directly instantiate a custom HTTP response -object using the `Response` constructor: - -```php -$response = React\Http\Message\Response::xml( - "Invalid user name given.\n" -)->withStatus(React\Http\Message\Response::STATUS_BAD_REQUEST); -``` - -#### ServerRequest - -The `React\Http\Message\ServerRequest` class can be used to -respresent an incoming server request message. - -This class implements the -[PSR-7 `ServerRequestInterface`](https://www.php-fig.org/psr/psr-7/#321-psrhttpmessageserverrequestinterface) -which extends the -[PSR-7 `RequestInterface`](https://www.php-fig.org/psr/psr-7/#32-psrhttpmessagerequestinterface) -which in turn extends the -[PSR-7 `MessageInterface`](https://www.php-fig.org/psr/psr-7/#31-psrhttpmessagemessageinterface). - -This is mostly used internally to represent each incoming request message. -Likewise, you can also use this class in test cases to test how your web -application reacts to certain HTTP requests. - -> Internally, this implementation builds on top of an existing outgoing - request message and only adds required server methods. This base class is - considered an implementation detail that may change in the future. - -#### ResponseException - -The `React\Http\Message\ResponseException` is an `Exception` sub-class that will be used to reject -a request promise if the remote server returns a non-success status code -(anything but 2xx or 3xx). -You can control this behavior via the [`withRejectErrorResponse()` method](#withrejecterrorresponse). - -The `getCode(): int` method can be used to -return the HTTP response status code. - -The `getResponse(): ResponseInterface` method can be used to -access its underlying response object. - -### React\Http\Middleware - -#### StreamingRequestMiddleware - -The `React\Http\Middleware\StreamingRequestMiddleware` can be used to -process incoming requests with a streaming request body (without buffering). - -This allows you to process requests of any size without buffering the request -body in memory. Instead, it will represent the request body as a -[`ReadableStreamInterface`](https://github.com/reactphp/stream#readablestreaminterface) -that emit chunks of incoming data as it is received: - -```php -$http = new React\Http\HttpServer( - new React\Http\Middleware\StreamingRequestMiddleware(), - function (Psr\Http\Message\ServerRequestInterface $request) { - $body = $request->getBody(); - assert($body instanceof Psr\Http\Message\StreamInterface); - assert($body instanceof React\Stream\ReadableStreamInterface); - - return new React\Promise\Promise(function ($resolve) use ($body) { - $bytes = 0; - $body->on('data', function ($chunk) use (&$bytes) { - $bytes += \count($chunk); - }); - $body->on('close', function () use (&$bytes, $resolve) { - $resolve(new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, - [], - "Received $bytes bytes\n" - )); - }); - }); - } -); -``` - -See also [streaming incoming request](#streaming-incoming-request) -for more details. - -Additionally, this middleware can be used in combination with the -[`LimitConcurrentRequestsMiddleware`](#limitconcurrentrequestsmiddleware) and -[`RequestBodyBufferMiddleware`](#requestbodybuffermiddleware) (see below) -to explicitly configure the total number of requests that can be handled at -once: - -```php -$http = new React\Http\HttpServer( - new React\Http\Middleware\StreamingRequestMiddleware(), - new React\Http\Middleware\LimitConcurrentRequestsMiddleware(100), // 100 concurrent buffering handlers - new React\Http\Middleware\RequestBodyBufferMiddleware(2 * 1024 * 1024), // 2 MiB per request - new React\Http\Middleware\RequestBodyParserMiddleware(), - $handler -); -``` - -> Internally, this class is used as a "marker" to not trigger the default - request buffering behavior in the `HttpServer`. It does not implement any logic - on its own. - -#### LimitConcurrentRequestsMiddleware - -The `React\Http\Middleware\LimitConcurrentRequestsMiddleware` can be used to -limit how many next handlers can be executed concurrently. - -If this middleware is invoked, it will check if the number of pending -handlers is below the allowed limit and then simply invoke the next handler -and it will return whatever the next handler returns (or throws). - -If the number of pending handlers exceeds the allowed limit, the request will -be queued (and its streaming body will be paused) and it will return a pending -promise. -Once a pending handler returns (or throws), it will pick the oldest request -from this queue and invokes the next handler (and its streaming body will be -resumed). - -The following example shows how this middleware can be used to ensure no more -than 10 handlers will be invoked at once: - -```php -$http = new React\Http\HttpServer( - new React\Http\Middleware\LimitConcurrentRequestsMiddleware(10), - $handler -); -``` - -Similarly, this middleware is often used in combination with the -[`RequestBodyBufferMiddleware`](#requestbodybuffermiddleware) (see below) -to limit the total number of requests that can be buffered at once: - -```php -$http = new React\Http\HttpServer( - new React\Http\Middleware\StreamingRequestMiddleware(), - new React\Http\Middleware\LimitConcurrentRequestsMiddleware(100), // 100 concurrent buffering handlers - new React\Http\Middleware\RequestBodyBufferMiddleware(2 * 1024 * 1024), // 2 MiB per request - new React\Http\Middleware\RequestBodyParserMiddleware(), - $handler -); -``` - -More sophisticated examples include limiting the total number of requests -that can be buffered at once and then ensure the actual request handler only -processes one request after another without any concurrency: - -```php -$http = new React\Http\HttpServer( - new React\Http\Middleware\StreamingRequestMiddleware(), - new React\Http\Middleware\LimitConcurrentRequestsMiddleware(100), // 100 concurrent buffering handlers - new React\Http\Middleware\RequestBodyBufferMiddleware(2 * 1024 * 1024), // 2 MiB per request - new React\Http\Middleware\RequestBodyParserMiddleware(), - new React\Http\Middleware\LimitConcurrentRequestsMiddleware(1), // only execute 1 handler (no concurrency) - $handler -); -``` - -#### RequestBodyBufferMiddleware - -One of the built-in middleware is the `React\Http\Middleware\RequestBodyBufferMiddleware` which -can be used to buffer the whole incoming request body in memory. -This can be useful if full PSR-7 compatibility is needed for the request handler -and the default streaming request body handling is not needed. -The constructor accepts one optional argument, the maximum request body size. -When one isn't provided it will use `post_max_size` (default 8 MiB) from PHP's -configuration. -(Note that the value from your matching SAPI will be used, which is the CLI -configuration in most cases.) - -Any incoming request that has a request body that exceeds this limit will be -accepted, but its request body will be discarded (empty request body). -This is done in order to avoid having to keep an incoming request with an -excessive size (for example, think of a 2 GB file upload) in memory. -This allows the next middleware handler to still handle this request, but it -will see an empty request body. -This is similar to PHP's default behavior, where the body will not be parsed -if this limit is exceeded. However, unlike PHP's default behavior, the raw -request body is not available via `php://input`. - -The `RequestBodyBufferMiddleware` will buffer requests with bodies of known size -(i.e. with `Content-Length` header specified) as well as requests with bodies of -unknown size (i.e. with `Transfer-Encoding: chunked` header). - -All requests will be buffered in memory until the request body end has -been reached and then call the next middleware handler with the complete, -buffered request. -Similarly, this will immediately invoke the next middleware handler for requests -that have an empty request body (such as a simple `GET` request) and requests -that are already buffered (such as due to another middleware). - -Note that the given buffer size limit is applied to each request individually. -This means that if you allow a 2 MiB limit and then receive 1000 concurrent -requests, up to 2000 MiB may be allocated for these buffers alone. -As such, it's highly recommended to use this along with the -[`LimitConcurrentRequestsMiddleware`](#limitconcurrentrequestsmiddleware) (see above) to limit -the total number of concurrent requests. - -Usage: - -```php -$http = new React\Http\HttpServer( - new React\Http\Middleware\StreamingRequestMiddleware(), - new React\Http\Middleware\LimitConcurrentRequestsMiddleware(100), // 100 concurrent buffering handlers - new React\Http\Middleware\RequestBodyBufferMiddleware(16 * 1024 * 1024), // 16 MiB - function (Psr\Http\Message\ServerRequestInterface $request) { - // The body from $request->getBody() is now fully available without the need to stream it - return new React\Http\Message\Response(React\Http\Message\Response::STATUS_OK); - }, -); -``` - -#### RequestBodyParserMiddleware - -The `React\Http\Middleware\RequestBodyParserMiddleware` takes a fully buffered request body -(generally from [`RequestBodyBufferMiddleware`](#requestbodybuffermiddleware)), -and parses the form values and file uploads from the incoming HTTP request body. - -This middleware handler takes care of applying values from HTTP -requests that use `Content-Type: application/x-www-form-urlencoded` or -`Content-Type: multipart/form-data` to resemble PHP's default superglobals -`$_POST` and `$_FILES`. -Instead of relying on these superglobals, you can use the -`$request->getParsedBody()` and `$request->getUploadedFiles()` methods -as defined by PSR-7. - -Accordingly, each file upload will be represented as instance implementing the -[PSR-7 `UploadedFileInterface`](https://www.php-fig.org/psr/psr-7/#36-psrhttpmessageuploadedfileinterface). -Due to its blocking nature, the `moveTo()` method is not available and throws -a `RuntimeException` instead. -You can use `$contents = (string)$file->getStream();` to access the file -contents and persist this to your favorite data store. - -```php -$handler = function (Psr\Http\Message\ServerRequestInterface $request) { - // If any, parsed form fields are now available from $request->getParsedBody() - $body = $request->getParsedBody(); - $name = isset($body['name']) ? $body['name'] : 'unnamed'; - - $files = $request->getUploadedFiles(); - $avatar = isset($files['avatar']) ? $files['avatar'] : null; - if ($avatar instanceof Psr\Http\Message\UploadedFileInterface) { - if ($avatar->getError() === UPLOAD_ERR_OK) { - $uploaded = $avatar->getSize() . ' bytes'; - } elseif ($avatar->getError() === UPLOAD_ERR_INI_SIZE) { - $uploaded = 'file too large'; - } else { - $uploaded = 'with error'; - } - } else { - $uploaded = 'nothing'; - } - - return new React\Http\Message\Response( - React\Http\Message\Response::STATUS_OK, - array( - 'Content-Type' => 'text/plain' - ), - $name . ' uploaded ' . $uploaded - ); -}; - -$http = new React\Http\HttpServer( - new React\Http\Middleware\StreamingRequestMiddleware(), - new React\Http\Middleware\LimitConcurrentRequestsMiddleware(100), // 100 concurrent buffering handlers - new React\Http\Middleware\RequestBodyBufferMiddleware(16 * 1024 * 1024), // 16 MiB - new React\Http\Middleware\RequestBodyParserMiddleware(), - $handler -); -``` - -See also [form upload server example](examples/62-server-form-upload.php) for more details. - -By default, this middleware respects the -[`upload_max_filesize`](https://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize) -(default `2M`) ini setting. -Files that exceed this limit will be rejected with an `UPLOAD_ERR_INI_SIZE` error. -You can control the maximum filesize for each individual file upload by -explicitly passing the maximum filesize in bytes as the first parameter to the -constructor like this: - -```php -new React\Http\Middleware\RequestBodyParserMiddleware(8 * 1024 * 1024); // 8 MiB limit per file -``` - -By default, this middleware respects the -[`file_uploads`](https://www.php.net/manual/en/ini.core.php#ini.file-uploads) -(default `1`) and -[`max_file_uploads`](https://www.php.net/manual/en/ini.core.php#ini.max-file-uploads) -(default `20`) ini settings. -These settings control if any and how many files can be uploaded in a single request. -If you upload more files in a single request, additional files will be ignored -and the `getUploadedFiles()` method returns a truncated array. -Note that upload fields left blank on submission do not count towards this limit. -You can control the maximum number of file uploads per request by explicitly -passing the second parameter to the constructor like this: - -```php -new React\Http\Middleware\RequestBodyParserMiddleware(10 * 1024, 100); // 100 files with 10 KiB each -``` - -> Note that this middleware handler simply parses everything that is already - buffered in the request body. - It is imperative that the request body is buffered by a prior middleware - handler as given in the example above. - This previous middleware handler is also responsible for rejecting incoming - requests that exceed allowed message sizes (such as big file uploads). - The [`RequestBodyBufferMiddleware`](#requestbodybuffermiddleware) used above - simply discards excessive request bodies, resulting in an empty body. - If you use this middleware without buffering first, it will try to parse an - empty (streaming) body and may thus assume an empty data structure. - See also [`RequestBodyBufferMiddleware`](#requestbodybuffermiddleware) for - more details. - -> PHP's `MAX_FILE_SIZE` hidden field is respected by this middleware. - Files that exceed this limit will be rejected with an `UPLOAD_ERR_FORM_SIZE` error. - -> This middleware respects the - [`max_input_vars`](https://www.php.net/manual/en/info.configuration.php#ini.max-input-vars) - (default `1000`) and - [`max_input_nesting_level`](https://www.php.net/manual/en/info.configuration.php#ini.max-input-nesting-level) - (default `64`) ini settings. - -> Note that this middleware ignores the - [`enable_post_data_reading`](https://www.php.net/manual/en/ini.core.php#ini.enable-post-data-reading) - (default `1`) ini setting because it makes little sense to respect here and - is left up to higher-level implementations. - If you want to respect this setting, you have to check its value and - effectively avoid using this middleware entirely. - -## Install - -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 react/http:^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 8+ and -HHVM. -It's *highly recommended to use the latest supported PHP version* for this project. - -## Tests - -To run the test suite, you first need to clone this repo and then install all -dependencies [through Composer](https://getcomposer.org/): - -```bash -$ composer install -``` - -To run the test suite, go to the project root and run: - -```bash -$ vendor/bin/phpunit -``` - -The test suite also contains a number of functional integration tests that rely -on a stable internet connection. -If you do not want to run these, they can simply be skipped like this: - -```bash -$ vendor/bin/phpunit --exclude-group internet -``` - -## License - -MIT, see [LICENSE file](LICENSE). diff --git a/deps/vendor/react/http/composer.json b/deps/vendor/react/http/composer.json deleted file mode 100644 index 4c9a03834..000000000 --- a/deps/vendor/react/http/composer.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "react/http", - "description": "Event-driven, streaming HTTP client and server implementation for ReactPHP", - "keywords": ["HTTP client", "HTTP server", "HTTP", "HTTPS", "event-driven", "streaming", "client", "server", "PSR-7", "async", "ReactPHP"], - "license": "MIT", - "authors": [ - { - "name": "Christian Lück", - "homepage": "https://clue.engineering/", - "email": "christian@clue.engineering" - }, - { - "name": "Cees-Jan Kiewiet", - "homepage": "https://wyrihaximus.net/", - "email": "reactphp@ceesjankiewiet.nl" - }, - { - "name": "Jan Sorgalla", - "homepage": "https://sorgalla.com/", - "email": "jsorgalla@gmail.com" - }, - { - "name": "Chris Boden", - "homepage": "https://cboden.dev/", - "email": "cboden@gmail.com" - } - ], - "require": { - "php": ">=5.3.0", - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "fig/http-message-util": "^1.1", - "psr/http-message": "^1.0", - "react/event-loop": "^1.2", - "react/promise": "^2.3 || ^1.2.1", - "react/promise-stream": "^1.1", - "react/socket": "^1.9", - "react/stream": "^1.2", - "ringcentral/psr7": "^1.2" - }, - "require-dev": { - "clue/block-react": "^1.5", - "clue/http-proxy-react": "^1.7", - "clue/reactphp-ssh-proxy": "^1.3", - "clue/socks-react": "^1.3", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "autoload": { - "psr-4": { "React\\Http\\": "src" } - }, - "autoload-dev": { - "psr-4": { "React\\Tests\\Http\\": "tests" } - } -} diff --git a/deps/vendor/react/promise-stream/CHANGELOG.md b/deps/vendor/react/promise-stream/CHANGELOG.md deleted file mode 100644 index 63d6f0182..000000000 --- a/deps/vendor/react/promise-stream/CHANGELOG.md +++ /dev/null @@ -1,79 +0,0 @@ -# Changelog - -## 1.3.0 (2021-10-18) - -* Feature: Improve error reporting by appending previous exception messages. - (#26 by @clue) - - For most common use cases this means that simply reporting the `Exception` - message should give the most relevant details for any issues: - - ```php - React\Promise\Stream\buffer($stream)->then(function (string $contents) { - // … - }, function (Exception $e) { - echo 'Error:' . $e->getMessage() . PHP_EOL; - }); - ``` - -* Improve documentation, describe promise and stream data types. - (#27 by @clue and #23 by @WyriHaximus) - -* Improve test suite and add `.gitattributes` to exclude dev files from exports. - Use GitHub actions for continuous integration (CI) and run tests on PHPUnit 9 and PHP 8. - (#21 by @reedy and #22, #24 and #25 by @SimonFrings) - -## 1.2.0 (2019-07-03) - -* Feature: Support unwrapping object streams by buffering original write chunks in array. - (#15 by @clue) - -* Feature: Clean up unneeded references for unwrapped streams when closing. - (#18 by @clue) - -* Fix: Writing to closed unwrapped stream should return false (backpressure). - (#17 by @clue) - -* Improve test suite to support PHPUnit 7, PHP 7.3 and fix incomplete test - and improve API documentation. - (#16 and #19 by @clue) - -## 1.1.1 (2017-12-22) - -* Fix: Fix `all()` to assume null values if no event data is passed - (#13 by @clue) - -* Improve test suite by simplifying test bootstrapping logic via Composer and - add forward compatibility with PHPUnit 5 and PHPUnit 6 and - test against PHP 7.1 and 7.2 - (#11 and #12 by @clue and #9 by @carusogabriel) - -## 1.1.0 (2017-11-28) - -* Feature: Reject `first()` when stream emits an error event - (#7 by @clue) - -* Fix: Explicit `close()` of unwrapped stream should not emit `error` event - (#8 by @clue) - -* Internal refactoring to simplify `buffer()` function - (#6 by @kelunik) - -## 1.0.0 (2017-10-24) - -* First stable release, now following SemVer - -> Contains no other changes, so it's actually fully compatible with the v0.1.2 release. - -## 0.1.2 (2017-10-18) - -* Feature: Optional maximum buffer length for `buffer()` (#3 by @WyriHaximus) -* Improvement: Readme improvements (#5 by @jsor) - -## 0.1.1 (2017-05-15) - -* Improvement: Forward compatibility with stream 1.0, 0.7, 0.6, and 0.5 (#2 by @WyriHaximus) - -## 0.1.0 (2017-05-10) - -* Initial release, adapted from [`clue/promise-stream-react`](https://github.com/clue/php-promise-stream-react) diff --git a/deps/vendor/react/promise-stream/LICENSE b/deps/vendor/react/promise-stream/LICENSE deleted file mode 100644 index 25e707125..000000000 --- a/deps/vendor/react/promise-stream/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Christian Lück, Cees-Jan Kiewiet, Jan Sorgalla, Chris Boden - -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/deps/vendor/react/promise-stream/README.md b/deps/vendor/react/promise-stream/README.md deleted file mode 100644 index b8ad1b457..000000000 --- a/deps/vendor/react/promise-stream/README.md +++ /dev/null @@ -1,292 +0,0 @@ -# PromiseStream - -[![CI status](https://github.com/reactphp/promise-stream/workflows/CI/badge.svg)](https://github.com/reactphp/promise-stream/actions) - -The missing link between Promise-land and Stream-land -for [ReactPHP](https://reactphp.org/). - -**Table of Contents** - -* [Usage](#usage) - * [buffer()](#buffer) - * [first()](#first) - * [all()](#all) - * [unwrapReadable()](#unwrapreadable) - * [unwrapWritable()](#unwrapwritable) -* [Install](#install) -* [Tests](#tests) -* [License](#license) - -## Usage - -This lightweight library consists only of a few simple functions. -All functions reside under the `React\Promise\Stream` namespace. - -The below examples refer to all functions with their fully-qualified names like this: - -```php -React\Promise\Stream\buffer(…); -``` - -As of PHP 5.6+ you can also import each required function into your code like this: - -```php -use function React\Promise\Stream\buffer; - -buffer(…); -``` - -Alternatively, you can also use an import statement similar to this: - -```php -use React\Promise\Stream; - -Stream\buffer(…); -``` - -### buffer() - -The `buffer(ReadableStreamInterface $stream, ?int $maxLength = null): PromiseInterface` function can be used to -create a `Promise` which will be fulfilled with the stream data buffer. - -```php -$stream = accessSomeJsonStream(); - -React\Promise\Stream\buffer($stream)->then(function (string $contents) { - var_dump(json_decode($contents)); -}); -``` - -The promise will be fulfilled with a `string` of all data chunks concatenated once the stream closes. - -The promise will be fulfilled with an empty `string` if the stream is already closed. - -The promise will be rejected with a `RuntimeException` if the stream emits an error. - -The promise will be rejected with a `RuntimeException` if it is cancelled. - -The optional `$maxLength` argument defaults to no limit. In case the maximum -length is given and the stream emits more data before the end, the promise -will be rejected with an `OverflowException`. - -```php -$stream = accessSomeToLargeStream(); - -React\Promise\Stream\buffer($stream, 1024)->then(function ($contents) { - var_dump(json_decode($contents)); -}, function ($error) { - // Reaching here when the stream buffer goes above the max size, - // in this example that is 1024 bytes, - // or when the stream emits an error. -}); -``` - -### first() - -The `first(ReadableStreamInterface|WritableStreamInterface $stream, string $event = 'data'): PromiseInterface` function can be used to -create a `Promise` which will be fulfilled once the given event triggers for the first time. - -```php -$stream = accessSomeJsonStream(); - -React\Promise\Stream\first($stream)->then(function (string $chunk) { - echo 'The first chunk arrived: ' . $chunk; -}); -``` - -The promise will be fulfilled with a `mixed` value of whatever the first event -emitted or `null` if the event does not pass any data. -If you do not pass a custom event name, then it will wait for the first "data" -event. -For common streams of type `ReadableStreamInterface`, this means it will be -fulfilled with a `string` containing the first data chunk. - -The promise will be rejected with a `RuntimeException` if the stream emits an error -– unless you're waiting for the "error" event, in which case it will be fulfilled. - -The promise will be rejected with a `RuntimeException` once the stream closes -– unless you're waiting for the "close" event, in which case it will be fulfilled. - -The promise will be rejected with a `RuntimeException` if the stream is already closed. - -The promise will be rejected with a `RuntimeException` if it is cancelled. - -### all() - -The `all(ReadableStreamInterface|WritableStreamInterface $stream, string $event = 'data'): PromiseInterface` function can be used to -create a `Promise` which will be fulfilled with an array of all the event data. - -```php -$stream = accessSomeJsonStream(); - -React\Promise\Stream\all($stream)->then(function (array $chunks) { - echo 'The stream consists of ' . count($chunks) . ' chunk(s)'; -}); -``` - -The promise will be fulfilled with an `array` once the stream closes. The array -will contain whatever all events emitted or `null` values if the events do not pass any data. -If you do not pass a custom event name, then it will wait for all the "data" -events. -For common streams of type `ReadableStreamInterface`, this means it will be -fulfilled with a `string[]` array containing all the data chunk. - -The promise will be fulfilled with an empty `array` if the stream is already closed. - -The promise will be rejected with a `RuntimeException` if the stream emits an error. - -The promise will be rejected with a `RuntimeException` if it is cancelled. - -### unwrapReadable() - -The `unwrapReadable(PromiseInterface,Exception> $promise): ReadableStreamInterface` function can be used to -unwrap a `Promise` which will be fulfilled with a `ReadableStreamInterface`. - -This function returns a readable stream instance (implementing `ReadableStreamInterface`) -right away which acts as a proxy for the future promise resolution. -Once the given Promise will be fulfilled with a `ReadableStreamInterface`, its -data will be piped to the output stream. - -```php -//$promise = someFunctionWhichResolvesWithAStream(); -$promise = startDownloadStream($uri); - -$stream = React\Promise\Stream\unwrapReadable($promise); - -$stream->on('data', function (string $data) { - echo $data; -}); - -$stream->on('end', function () { - echo 'DONE'; -}); -``` - -If the given promise is either rejected or fulfilled with anything but an -instance of `ReadableStreamInterface`, then the output stream will emit -an `error` event and close: - -```php -$promise = startDownloadStream($invalidUri); - -$stream = React\Promise\Stream\unwrapReadable($promise); - -$stream->on('error', function (Exception $error) { - echo 'Error: ' . $error->getMessage(); -}); -``` - -The given `$promise` SHOULD be pending, i.e. it SHOULD NOT be fulfilled or rejected -at the time of invoking this function. -If the given promise is already settled and does not fulfill with an instance of -`ReadableStreamInterface`, then you will not be able to receive the `error` event. - -You can `close()` the resulting stream at any time, which will either try to -`cancel()` the pending promise or try to `close()` the underlying stream. - -```php -$promise = startDownloadStream($uri); - -$stream = React\Promise\Stream\unwrapReadable($promise); - -$loop->addTimer(2.0, function () use ($stream) { - $stream->close(); -}); -``` - -### unwrapWritable() - -The `unwrapWritable(PromiseInterface,Exception> $promise): WritableStreamInterface` function can be used to -unwrap a `Promise` which will be fulfilled with a `WritableStreamInterface`. - -This function returns a writable stream instance (implementing `WritableStreamInterface`) -right away which acts as a proxy for the future promise resolution. -Any writes to this instance will be buffered in memory for when the promise will -be fulfilled. -Once the given Promise will be fulfilled with a `WritableStreamInterface`, any -data you have written to the proxy will be forwarded transparently to the inner -stream. - -```php -//$promise = someFunctionWhichResolvesWithAStream(); -$promise = startUploadStream($uri); - -$stream = React\Promise\Stream\unwrapWritable($promise); - -$stream->write('hello'); -$stream->end('world'); - -$stream->on('close', function () { - echo 'DONE'; -}); -``` - -If the given promise is either rejected or fulfilled with anything but an -instance of `WritableStreamInterface`, then the output stream will emit -an `error` event and close: - -```php -$promise = startUploadStream($invalidUri); - -$stream = React\Promise\Stream\unwrapWritable($promise); - -$stream->on('error', function (Exception $error) { - echo 'Error: ' . $error->getMessage(); -}); -``` - -The given `$promise` SHOULD be pending, i.e. it SHOULD NOT be fulfilled or rejected -at the time of invoking this function. -If the given promise is already settled and does not fulfill with an instance of -`WritableStreamInterface`, then you will not be able to receive the `error` event. - -You can `close()` the resulting stream at any time, which will either try to -`cancel()` the pending promise or try to `close()` the underlying stream. - -```php -$promise = startUploadStream($uri); - -$stream = React\Promise\Stream\unwrapWritable($promise); - -$loop->addTimer(2.0, function () use ($stream) { - $stream->close(); -}); -``` - -## Install - -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 react/promise-stream:^1.3 -``` - -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 8+ and -HHVM. -It's *highly recommended to use the latest supported PHP version* for this project. - -## Tests - -To run the test suite, you first need to clone this repo and then install all -dependencies [through Composer](https://getcomposer.org/): - -```bash -$ composer install -``` - -To run the test suite, go to the project root and run: - -```bash -$ vendor/bin/phpunit -``` - -## License - -MIT, see [LICENSE file](LICENSE). diff --git a/deps/vendor/react/promise-stream/composer.json b/deps/vendor/react/promise-stream/composer.json deleted file mode 100644 index ee3972cee..000000000 --- a/deps/vendor/react/promise-stream/composer.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "react/promise-stream", - "description": "The missing link between Promise-land and Stream-land for ReactPHP", - "keywords": ["unwrap", "stream", "buffer", "promise", "ReactPHP", "async"], - "homepage": "https://github.com/reactphp/promise-stream", - "license": "MIT", - "authors": [ - { - "name": "Christian Lück", - "homepage": "https://clue.engineering/", - "email": "christian@clue.engineering" - }, - { - "name": "Cees-Jan Kiewiet", - "homepage": "https://wyrihaximus.net/", - "email": "reactphp@ceesjankiewiet.nl" - }, - { - "name": "Jan Sorgalla", - "homepage": "https://sorgalla.com/", - "email": "jsorgalla@gmail.com" - }, - { - "name": "Chris Boden", - "homepage": "https://cboden.dev/", - "email": "cboden@gmail.com" - } - ], - "autoload": { - "psr-4": { "React\\Promise\\Stream\\" : "src/" }, - "files": [ "src/functions_include.php" ] - }, - "autoload-dev": { - "psr-4": { "React\\Tests\\Promise\\Stream\\": "tests/" } - }, - "require": { - "php": ">=5.3", - "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4.6", - "react/promise": "^2.1 || ^1.2" - }, - "require-dev": { - "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3", - "react/promise-timer": "^1.0", - "clue/block-react": "^1.0", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - } -} diff --git a/deps/vendor/react/promise-timer/CHANGELOG.md b/deps/vendor/react/promise-timer/CHANGELOG.md deleted file mode 100644 index 6c7d8ea47..000000000 --- a/deps/vendor/react/promise-timer/CHANGELOG.md +++ /dev/null @@ -1,115 +0,0 @@ -# Changelog - -## 1.8.0 (2021-12-06) - -* Feature: Add new `sleep()` function and deprecate `resolve()` and `reject()` functions. - (#51 by @clue) - - ```php - // deprecated - React\Promise\Timer\resolve($time); - React\Promise\Timer\reject($time); - - // new - React\Promise\Timer\sleep($time); - ``` - -* Feature: Support PHP 8.1 release. - (#50 by @Thomas-Gelf, #52 by @clue and #48 by @SimonFrings) - -* Improve API documentation and add parameter types and return types. - (#49 by @clue and #47 by @SimonFrings) - -## 1.7.0 (2021-07-11) - -A major new feature release, see [**release announcement**](https://clue.engineering/2021/announcing-reactphp-default-loop). - -* Feature: Simplify usage by supporting new [default loop](https://reactphp.org/event-loop/#loop). - (#46 by @clue) - - ```php - // old (still supported) - $promise = timeout($promise, $time, $loop); - $promise = resolve($time, $loop); - $promise = reject($time, $loop); - - // new (using default loop) - $promise = timeout($promise, $time); - $promise = resolve($time); - $promise = reject($time); - ``` - -* Improve test suite, use GitHub actions for continuous integration (CI), - update PHPUnit config, run tests on PHP 8 and add full core team to the license. - (#43 by @WyriHaximus, #44 and #45 by @SimonFrings) - -## 1.6.0 (2020-07-10) - -* Feature: Forward compatibility with react/promise v3. - (#37 by @WyriHaximus) - -* Improve test suite and add `.gitattributes` to exclude dev files from exports. - Run tests on PHPUnit 9 and PHP 7.4 and clean up test suite. - (#38 by @WyriHaximus, #39 by @reedy, #41 by @clue and #42 by @SimonFrings) - -## 1.5.1 (2019-03-27) - -* Fix: Typo in readme - (#35 by @aak74) - -* Improvement: Only include functions file when functions aren't defined - (#36 by @Niko9911) - -## 1.5.0 (2018-06-13) - -* Feature: Improve memory consumption by cleaning up garbage references to pending promise without canceller. - (#34 by @clue) - -## 1.4.0 (2018-06-11) - -* Feature: Improve memory consumption by cleaning up garbage references. - (#33 by @clue) - -## 1.3.0 (2018-04-24) - -* Feature: Improve memory consumption by cleaning up unneeded references. - (#32 by @clue) - -## 1.2.1 (2017-12-22) - -* README improvements - (#28 by @jsor) - -* Improve test suite by adding forward compatiblity with PHPUnit 6 and - fix test suite forward compatibility with upcoming EventLoop releases - (#30 and #31 by @clue) - -## 1.2.0 (2017-08-08) - -* Feature: Only start timers if input Promise is still pending and - return a settled output promise if the input is already settled. - (#25 by @clue) - -* Feature: Cap minimum timer interval at 1µs across all versions - (#23 by @clue) - -* Feature: Forward compatibility with EventLoop v1.0 and v0.5 - (#27 by @clue) - -* Improve test suite by adding PHPUnit to require-dev and - lock Travis distro so new defaults will not break the build - (#24 and #26 by @clue) - -## 1.1.1 (2016-12-27) - -* Improve test suite to use PSR-4 autoloader and proper namespaces. - (#21 by @clue) - -## 1.1.0 (2016-02-29) - -* Feature: Support promise cancellation for all timer primitives - (#18 by @clue) - -## 1.0.0 (2015-09-29) - -* First tagged release diff --git a/deps/vendor/react/promise-timer/LICENSE b/deps/vendor/react/promise-timer/LICENSE deleted file mode 100644 index 56119ec10..000000000 --- a/deps/vendor/react/promise-timer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Christian Lück, Cees-Jan Kiewiet, Jan Sorgalla, Chris Boden - -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/deps/vendor/react/promise-timer/README.md b/deps/vendor/react/promise-timer/README.md deleted file mode 100644 index 4bbbf9093..000000000 --- a/deps/vendor/react/promise-timer/README.md +++ /dev/null @@ -1,321 +0,0 @@ -# PromiseTimer - -[![CI status](https://github.com/reactphp/promise-timer/workflows/CI/badge.svg)](https://github.com/reactphp/promise-timer/actions) - -A trivial implementation of timeouts for `Promise`s, built on top of [ReactPHP](https://reactphp.org/). - -**Table of contents** - -* [Usage](#usage) - * [timeout()](#timeout) - * [sleep()](#sleep) - * [~~resolve()~~](#resolve) - * [~~reject()~~](#reject) - * [TimeoutException](#timeoutexception) - * [getTimeout()](#gettimeout) -* [Install](#install) -* [Tests](#tests) -* [License](#license) - -## Usage - -This lightweight library consists only of a few simple functions. -All functions reside under the `React\Promise\Timer` namespace. - -The below examples refer to all functions with their fully-qualified names like this: - -```php -React\Promise\Timer\timeout(…); -``` - -As of PHP 5.6+ you can also import each required function into your code like this: - -```php -use function React\Promise\Timer\timeout; - -timeout(…); -``` - -Alternatively, you can also use an import statement similar to this: - -```php -use React\Promise\Timer; - -Timer\timeout(…); -``` - -### timeout() - -The `timeout(PromiseInterface $promise, float $time, ?LoopInterface $loop = null): PromiseInterface` function can be used to -cancel operations that take *too long*. - -You need to pass in an input `$promise` that represents a pending operation -and timeout parameters. It returns a new promise with the following -resolution behavior: - -- If the input `$promise` resolves before `$time` seconds, resolve the - resulting promise with its fulfillment value. - -- If the input `$promise` rejects before `$time` seconds, reject the - resulting promise with its rejection value. - -- If the input `$promise` does not settle before `$time` seconds, *cancel* - the operation and reject the resulting promise with a [`TimeoutException`](#timeoutexception). - -Internally, the given `$time` value will be used to start a timer that will -*cancel* the pending operation once it triggers. This implies that if you -pass a really small (or negative) value, it will still start a timer and will -thus trigger at the earliest possible time in the future. - -If the input `$promise` is already settled, then the resulting promise will -resolve or reject immediately without starting a timer at all. - -This function takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use. You can use a `null` value here in order to -use the [default loop](https://github.com/reactphp/event-loop#loop). This value -SHOULD NOT be given unless you're sure you want to explicitly use a given event -loop instance. - -A common use case for handling only resolved values looks like this: - -```php -$promise = accessSomeRemoteResource(); -React\Promise\Timer\timeout($promise, 10.0)->then(function ($value) { - // the operation finished within 10.0 seconds -}); -``` - -A more complete example could look like this: - -```php -$promise = accessSomeRemoteResource(); -React\Promise\Timer\timeout($promise, 10.0)->then( - function ($value) { - // the operation finished within 10.0 seconds - }, - function ($error) { - if ($error instanceof React\Promise\Timer\TimeoutException) { - // the operation has failed due to a timeout - } else { - // the input operation has failed due to some other error - } - } -); -``` - -Or if you're using [react/promise v2.2.0](https://github.com/reactphp/promise) or up: - -```php -React\Promise\Timer\timeout($promise, 10.0) - ->then(function ($value) { - // the operation finished within 10.0 seconds - }) - ->otherwise(function (React\Promise\Timer\TimeoutException $error) { - // the operation has failed due to a timeout - }) - ->otherwise(function ($error) { - // the input operation has failed due to some other error - }) -; -``` - -As discussed above, the [`timeout()`](#timeout) function will take care of -the underlying operation if it takes *too long*. In this case, you can be -sure the resulting promise will always be rejected with a -[`TimeoutException`](#timeoutexception). On top of this, the function will -try to *cancel* the underlying operation. Responsibility for this -cancellation logic is left up to the underlying operation. - -- A common use case involves cleaning up any resources like open network - sockets or file handles or terminating external processes or timers. - -- If the given input `$promise` does not support cancellation, then this is a - NO-OP. This means that while the resulting promise will still be rejected, - the underlying input `$promise` may still be pending and can hence continue - consuming resources - -On top of this, the returned promise is implemented in such a way that it can -be cancelled when it is still pending. Cancelling a pending promise will -cancel the underlying operation. As discussed above, responsibility for this -cancellation logic is left up to the underlying operation. - -```php -$promise = accessSomeRemoteResource(); -$timeout = React\Promise\Timer\timeout($promise, 10.0); - -$timeout->cancel(); -``` - -For more details on the promise cancellation, please refer to the -[Promise documentation](https://github.com/reactphp/promise#cancellablepromiseinterface). - -If you want to wait for multiple promises to resolve, you can use the normal -promise primitives like this: - -```php -$promises = array( - accessSomeRemoteResource(), - accessSomeRemoteResource(), - accessSomeRemoteResource() -); - -$promise = React\Promise\all($promises); - -React\Promise\Timer\timeout($promise, 10)->then(function ($values) { - // *all* promises resolved -}); -``` - -The applies to all promise collection primitives alike, i.e. `all()`, -`race()`, `any()`, `some()` etc. - -For more details on the promise primitives, please refer to the -[Promise documentation](https://github.com/reactphp/promise#functions). - -### sleep() - -The `sleep(float $time, ?LoopInterface $loop = null): PromiseInterface` function can be used to -create a new promise that resolves in `$time` seconds. - -```php -React\Promise\Timer\sleep(1.5)->then(function () { - echo 'Thanks for waiting!' . PHP_EOL; -}); -``` - -Internally, the given `$time` value will be used to start a timer that will -resolve the promise once it triggers. This implies that if you pass a really -small (or negative) value, it will still start a timer and will thus trigger -at the earliest possible time in the future. - -This function takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use. You can use a `null` value here in order to -use the [default loop](https://github.com/reactphp/event-loop#loop). This value -SHOULD NOT be given unless you're sure you want to explicitly use a given event -loop instance. - -The returned promise is implemented in such a way that it can be cancelled -when it is still pending. Cancelling a pending promise will reject its value -with a `RuntimeException` and clean up any pending timers. - -```php -$timer = React\Promise\Timer\sleep(2.0); - -$timer->cancel(); -``` - -### ~~resolve()~~ - -> Deprecated since v1.8.0, see [`sleep()`](#sleep) instead. - -The `resolve(float $time, ?LoopInterface $loop = null): PromiseInterface` function can be used to -create a new promise that resolves in `$time` seconds with the `$time` as the fulfillment value. - -```php -React\Promise\Timer\resolve(1.5)->then(function ($time) { - echo 'Thanks for waiting ' . $time . ' seconds' . PHP_EOL; -}); -``` - -Internally, the given `$time` value will be used to start a timer that will -resolve the promise once it triggers. This implies that if you pass a really -small (or negative) value, it will still start a timer and will thus trigger -at the earliest possible time in the future. - -This function takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use. You can use a `null` value here in order to -use the [default loop](https://github.com/reactphp/event-loop#loop). This value -SHOULD NOT be given unless you're sure you want to explicitly use a given event -loop instance. - -The returned promise is implemented in such a way that it can be cancelled -when it is still pending. Cancelling a pending promise will reject its value -with a `RuntimeException` and clean up any pending timers. - -```php -$timer = React\Promise\Timer\resolve(2.0); - -$timer->cancel(); -``` - -### ~~reject()~~ - -> Deprecated since v1.8.0, see [`sleep()`](#sleep) instead. - -The `reject(float $time, ?LoopInterface $loop = null): PromiseInterface` function can be used to -create a new promise which rejects in `$time` seconds with a `TimeoutException`. - -```php -React\Promise\Timer\reject(2.0)->then(null, function (React\Promise\Timer\TimeoutException $e) { - echo 'Rejected after ' . $e->getTimeout() . ' seconds ' . PHP_EOL; -}); -``` - -Internally, the given `$time` value will be used to start a timer that will -reject the promise once it triggers. This implies that if you pass a really -small (or negative) value, it will still start a timer and will thus trigger -at the earliest possible time in the future. - -This function takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use. You can use a `null` value here in order to -use the [default loop](https://github.com/reactphp/event-loop#loop). This value -SHOULD NOT be given unless you're sure you want to explicitly use a given event -loop instance. - -The returned promise is implemented in such a way that it can be cancelled -when it is still pending. Cancelling a pending promise will reject its value -with a `RuntimeException` and clean up any pending timers. - -```php -$timer = React\Promise\Timer\reject(2.0); - -$timer->cancel(); -``` - -### TimeoutException - -The `TimeoutException` extends PHP's built-in `RuntimeException`. - - -#### getTimeout() - -The `getTimeout(): float` method can be used to -get the timeout value in seconds. - -## Install - -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 react/promise-timer:^1.8 -``` - -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 8+ and -HHVM. -It's *highly recommended to use the latest supported PHP version* for this project. - -## Tests - -To run the test suite, you first need to clone this repo and then install all -dependencies [through Composer](https://getcomposer.org/): - -```bash -$ composer install -``` - -To run the test suite, go to the project root and run: - -```bash -$ vendor/bin/phpunit -``` - -## License - -MIT, see [LICENSE file](LICENSE). diff --git a/deps/vendor/react/promise-timer/composer.json b/deps/vendor/react/promise-timer/composer.json deleted file mode 100644 index 7335298cc..000000000 --- a/deps/vendor/react/promise-timer/composer.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "react/promise-timer", - "description": "A trivial implementation of timeouts for Promises, built on top of ReactPHP.", - "keywords": ["Promise", "timeout", "timer", "event-loop", "ReactPHP", "async"], - "homepage": "https://github.com/reactphp/promise-timer", - "license": "MIT", - "authors": [ - { - "name": "Christian Lück", - "homepage": "https://clue.engineering/", - "email": "christian@clue.engineering" - }, - { - "name": "Cees-Jan Kiewiet", - "homepage": "https://wyrihaximus.net/", - "email": "reactphp@ceesjankiewiet.nl" - }, - { - "name": "Jan Sorgalla", - "homepage": "https://sorgalla.com/", - "email": "jsorgalla@gmail.com" - }, - { - "name": "Chris Boden", - "homepage": "https://cboden.dev/", - "email": "cboden@gmail.com" - } - ], - "autoload": { - "psr-4": { "React\\Promise\\Timer\\": "src/" }, - "files": [ "src/functions_include.php" ] - }, - "autoload-dev": { - "psr-4": { "React\\Tests\\Promise\\Timer\\": "tests/" } - }, - "require": { - "php": ">=5.3", - "react/event-loop": "^1.2", - "react/promise": "^3.0 || ^2.7.0 || ^1.2.1" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - } -} diff --git a/deps/vendor/react/promise/CHANGELOG.md b/deps/vendor/react/promise/CHANGELOG.md deleted file mode 100644 index 7f785eb5c..000000000 --- a/deps/vendor/react/promise/CHANGELOG.md +++ /dev/null @@ -1,186 +0,0 @@ -CHANGELOG for 2.x -================= - -* 2.9.0 (2022-02-11) - - * Feature: Support union types and address deprecation of `ReflectionType::getClass()` (PHP 8+). - (#198 by @cdosoftei and @SimonFrings) - - ```php - $promise->otherwise(function (OverflowException|UnderflowException $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; - }); - ``` - - * Feature: Support intersection types (PHP 8.1+). - (#195 by @bzikarsky) - - ```php - $promise->otherwise(function (OverflowException&CacheException $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; - }); - ``` - - * Improve test suite, use GitHub actions for continuous integration (CI), - update to PHPUnit 9, and add full core team to the license. - (#174, #183, #186, and #201 by @SimonFrings and #211 by @clue) - -* 2.8.0 (2020-05-12) - - * Mark `FulfilledPromise`, `RejectedPromise` and `LazyPromise` as deprecated for Promise v2 (and remove for Promise v3). - (#143 and #165 by @clue) - - ```php - // deprecated - $fulfilled = new React\Promise\FulfilledPromise($value); - $rejected = new React\Promise\RejectedPromise($reason); - - // recommended alternatives - $fulfilled = React\Promise\resolve($value); - $rejected = React\Promise\reject($reason); - ``` - - * Fix: Fix checking whether cancellable promise is an object and avoid possible warning. - (#168 by @smscr and @jsor) - - * Improve documentation and add docblocks to functions and interfaces. - (#135 by @CharlotteDunois) - - * Add `.gitattributes` to exclude dev files from exports. - (#154 by @reedy) - - * Improve test suite, run tests on PHP 7.4 and update PHPUnit test setup. - (#163 by @clue) - -* 2.7.1 (2018-01-07) - - * Fix: file_exists warning when resolving with long strings. - (#130 by @sbesselsen) - * Improve performance by prefixing all global functions calls with \ to skip the look up and resolve process and go straight to the global function. - (#133 by @WyriHaximus) - -* 2.7.0 (2018-06-13) - - * Feature: Improve memory consumption for pending promises by using static internal callbacks without binding to self. - (#124 by @clue) - -* 2.6.0 (2018-06-11) - - * Feature: Significantly improve memory consumption and performance by only passing resolver args - to resolver and canceller if callback requires them. Also use static callbacks without - binding to promise, clean up canceller function reference when they are no longer - needed and hide resolver and canceller references from call stack on PHP 7+. - (#113, #115, #116, #117, #118, #119 and #123 by @clue) - - These changes combined mean that rejecting promises with an `Exception` should - no longer cause any internal circular references which could cause some unexpected - memory growth in previous versions. By explicitly avoiding and explicitly - cleaning up said references, we can avoid relying on PHP's circular garbage collector - to kick in which significantly improves performance when rejecting many promises. - - * Mark legacy progress support / notification API as deprecated - (#112 by @clue) - - * Recommend rejecting promises by throwing an exception - (#114 by @jsor) - - * Improve documentation to properly instantiate LazyPromise - (#121 by @holtkamp) - - * Follower cancellation propagation was originally planned for this release - but has been reverted for now and is planned for a future release. - (#99 by @jsor and #122 by @clue) - -* 2.5.1 (2017-03-25) - - * Fix circular references when resolving with a promise which follows - itself (#94). - -* 2.5.0 (2016-12-22) - - * Revert automatic cancellation of pending collection promises once the - output promise resolves. This was introduced in 42d86b7 (PR #36, released - in [v2.3.0](https://github.com/reactphp/promise/releases/tag/v2.3.0)) and - was both unintended and backward incompatible. - - If you need automatic cancellation, you can use something like: - - ```php - function allAndCancel(array $promises) - { - return \React\Promise\all($promises) - ->always(function() use ($promises) { - foreach ($promises as $promise) { - if ($promise instanceof \React\Promise\CancellablePromiseInterface) { - $promise->cancel(); - } - } - }); - } - ``` - * `all()` and `map()` functions now preserve the order of the array (#77). - * Fix circular references when resolving a promise with itself (#71). - -* 2.4.1 (2016-05-03) - - * Fix `some()` not cancelling pending promises when too much input promises - reject (16ff799). - -* 2.4.0 (2016-03-31) - - * Support foreign thenables in `resolve()`. - Any object that provides a `then()` method is now assimilated to a trusted - promise that follows the state of this thenable (#52). - * Fix `some()` and `any()` for input arrays containing not enough items - (#34). - -* 2.3.0 (2016-03-24) - - * Allow cancellation of promises returned by functions working on promise - collections (#36). - * Handle `\Throwable` in the same way as `\Exception` (#51 by @joshdifabio). - -* 2.2.2 (2016-02-26) - - * Fix cancellation handlers called multiple times (#47 by @clue). - -* 2.2.1 (2015-07-03) - - * Fix stack error when resolving a promise in its own fulfillment or - rejection handlers. - -* 2.2.0 (2014-12-30) - - * Introduce new `ExtendedPromiseInterface` implemented by all promises. - * Add new `done()` method (part of the `ExtendedPromiseInterface`). - * Add new `otherwise()` method (part of the `ExtendedPromiseInterface`). - * Add new `always()` method (part of the `ExtendedPromiseInterface`). - * Add new `progress()` method (part of the `ExtendedPromiseInterface`). - * Rename `Deferred::progress` to `Deferred::notify` to avoid confusion with - `ExtendedPromiseInterface::progress` (a `Deferred::progress` alias is - still available for backward compatibility) - * `resolve()` now always returns a `ExtendedPromiseInterface`. - -* 2.1.0 (2014-10-15) - - * Introduce new `CancellablePromiseInterface` implemented by all promises. - * Add new `cancel()` method (part of the `CancellablePromiseInterface`). - -* 2.0.0 (2013-12-10) - - New major release. The goal is to streamline the API and to make it more - compliant with other promise libraries and especially with the new upcoming - [ES6 promises specification](https://github.com/domenic/promises-unwrapping/). - - * Add standalone Promise class. - * Add new `race()` function. - * BC break: Bump minimum PHP version to PHP 5.4. - * BC break: Remove `ResolverInterface` and `PromiseInterface` from - `Deferred`. - * BC break: Change signature of `PromiseInterface`. - * BC break: Remove `When` and `Util` classes and move static methods to - functions. - * BC break: `FulfilledPromise` and `RejectedPromise` now throw an exception - when initialized with a promise instead of a value/reason. - * BC break: `Deferred::resolve()` and `Deferred::reject()` no longer return - a promise. diff --git a/deps/vendor/react/promise/LICENSE b/deps/vendor/react/promise/LICENSE deleted file mode 100644 index 21c1357b7..000000000 --- a/deps/vendor/react/promise/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012 Jan Sorgalla, Christian Lück, Cees-Jan Kiewiet, Chris Boden - -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/deps/vendor/react/promise/README.md b/deps/vendor/react/promise/README.md deleted file mode 100644 index d904a1d8f..000000000 --- a/deps/vendor/react/promise/README.md +++ /dev/null @@ -1,874 +0,0 @@ -Promise -======= - -A lightweight implementation of -[CommonJS Promises/A](http://wiki.commonjs.org/wiki/Promises/A) for PHP. - -[![CI status](https://github.com/reactphp/promise/workflows/CI/badge.svg?branch=2.x)](https://github.com/reactphp/promise/actions) - -Table of Contents ------------------ - -1. [Introduction](#introduction) -2. [Concepts](#concepts) - * [Deferred](#deferred) - * [Promise](#promise-1) -3. [API](#api) - * [Deferred](#deferred-1) - * [Deferred::promise()](#deferredpromise) - * [Deferred::resolve()](#deferredresolve) - * [Deferred::reject()](#deferredreject) - * [Deferred::notify()](#deferrednotify) - * [PromiseInterface](#promiseinterface) - * [PromiseInterface::then()](#promiseinterfacethen) - * [ExtendedPromiseInterface](#extendedpromiseinterface) - * [ExtendedPromiseInterface::done()](#extendedpromiseinterfacedone) - * [ExtendedPromiseInterface::otherwise()](#extendedpromiseinterfaceotherwise) - * [ExtendedPromiseInterface::always()](#extendedpromiseinterfacealways) - * [ExtendedPromiseInterface::progress()](#extendedpromiseinterfaceprogress) - * [CancellablePromiseInterface](#cancellablepromiseinterface) - * [CancellablePromiseInterface::cancel()](#cancellablepromiseinterfacecancel) - * [Promise](#promise-2) - * [FulfilledPromise](#fulfilledpromise) - * [RejectedPromise](#rejectedpromise) - * [LazyPromise](#lazypromise) - * [Functions](#functions) - * [resolve()](#resolve) - * [reject()](#reject) - * [all()](#all) - * [race()](#race) - * [any()](#any) - * [some()](#some) - * [map()](#map) - * [reduce()](#reduce) - * [PromisorInterface](#promisorinterface) -4. [Examples](#examples) - * [How to use Deferred](#how-to-use-deferred) - * [How promise forwarding works](#how-promise-forwarding-works) - * [Resolution forwarding](#resolution-forwarding) - * [Rejection forwarding](#rejection-forwarding) - * [Mixed resolution and rejection forwarding](#mixed-resolution-and-rejection-forwarding) - * [Progress event forwarding](#progress-event-forwarding) - * [done() vs. then()](#done-vs-then) -5. [Install](#install) -6. [Credits](#credits) -7. [License](#license) - -Introduction ------------- - -Promise is a library implementing -[CommonJS Promises/A](http://wiki.commonjs.org/wiki/Promises/A) for PHP. - -It also provides several other useful promise-related concepts, such as joining -multiple promises and mapping and reducing collections of promises. - -If you've never heard about promises before, -[read this first](https://gist.github.com/3889970). - -Concepts --------- - -### Deferred - -A **Deferred** represents a computation or unit of work that may not have -completed yet. Typically (but not always), that computation will be something -that executes asynchronously and completes at some point in the future. - -### Promise - -While a deferred represents the computation itself, a **Promise** represents -the result of that computation. Thus, each deferred has a promise that acts as -a placeholder for its actual result. - -API ---- - -### Deferred - -A deferred represents an operation whose resolution is pending. It has separate -promise and resolver parts. - -```php -$deferred = new React\Promise\Deferred(); - -$promise = $deferred->promise(); - -$deferred->resolve(mixed $value = null); -$deferred->reject(mixed $reason = null); -$deferred->notify(mixed $update = null); -``` - -The `promise` method returns the promise of the deferred. - -The `resolve` and `reject` methods control the state of the deferred. - -The deprecated `notify` method is for progress notification. - -The constructor of the `Deferred` accepts an optional `$canceller` argument. -See [Promise](#promise-2) for more information. - -#### Deferred::promise() - -```php -$promise = $deferred->promise(); -``` - -Returns the promise of the deferred, which you can hand out to others while -keeping the authority to modify its state to yourself. - -#### Deferred::resolve() - -```php -$deferred->resolve(mixed $value = null); -``` - -Resolves the promise returned by `promise()`. All consumers are notified by -having `$onFulfilled` (which they registered via `$promise->then()`) called with -`$value`. - -If `$value` itself is a promise, the promise will transition to the state of -this promise once it is resolved. - -#### Deferred::reject() - -```php -$deferred->reject(mixed $reason = null); -``` - -Rejects the promise returned by `promise()`, signalling that the deferred's -computation failed. -All consumers are notified by having `$onRejected` (which they registered via -`$promise->then()`) called with `$reason`. - -If `$reason` itself is a promise, the promise will be rejected with the outcome -of this promise regardless whether it fulfills or rejects. - -#### Deferred::notify() - -> Deprecated in v2.6.0: Progress support is deprecated and should not be used anymore. - -```php -$deferred->notify(mixed $update = null); -``` - -Triggers progress notifications, to indicate to consumers that the computation -is making progress toward its result. - -All consumers are notified by having `$onProgress` (which they registered via -`$promise->then()`) called with `$update`. - -### PromiseInterface - -The promise interface provides the common interface for all promise -implementations. - -A promise represents an eventual outcome, which is either fulfillment (success) -and an associated value, or rejection (failure) and an associated reason. - -Once in the fulfilled or rejected state, a promise becomes immutable. -Neither its state nor its result (or error) can be modified. - -#### Implementations - -* [Promise](#promise-2) -* [FulfilledPromise](#fulfilledpromise) (deprecated) -* [RejectedPromise](#rejectedpromise) (deprecated) -* [LazyPromise](#lazypromise) (deprecated) - -#### PromiseInterface::then() - -```php -$transformedPromise = $promise->then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null); -``` - -Transforms a promise's value by applying a function to the promise's fulfillment -or rejection value. Returns a new promise for the transformed result. - -The `then()` method registers new fulfilled, rejection and progress handlers -with a promise (all parameters are optional): - - * `$onFulfilled` will be invoked once the promise is fulfilled and passed - the result as the first argument. - * `$onRejected` will be invoked once the promise is rejected and passed the - reason as the first argument. - * `$onProgress` (deprecated) will be invoked whenever the producer of the promise - triggers progress notifications and passed a single argument (whatever it - wants) to indicate progress. - -It returns a new promise that will fulfill with the return value of either -`$onFulfilled` or `$onRejected`, whichever is called, or will reject with -the thrown exception if either throws. - -A promise makes the following guarantees about handlers registered in -the same call to `then()`: - - 1. Only one of `$onFulfilled` or `$onRejected` will be called, - never both. - 2. `$onFulfilled` and `$onRejected` will never be called more - than once. - 3. `$onProgress` (deprecated) may be called multiple times. - -#### See also - -* [resolve()](#resolve) - Creating a resolved promise -* [reject()](#reject) - Creating a rejected promise -* [ExtendedPromiseInterface::done()](#extendedpromiseinterfacedone) -* [done() vs. then()](#done-vs-then) - -### ExtendedPromiseInterface - -The ExtendedPromiseInterface extends the PromiseInterface with useful shortcut -and utility methods which are not part of the Promises/A specification. - -#### Implementations - -* [Promise](#promise-1) -* [FulfilledPromise](#fulfilledpromise) (deprecated) -* [RejectedPromise](#rejectedpromise) (deprecated) -* [LazyPromise](#lazypromise) (deprecated) - -#### ExtendedPromiseInterface::done() - -```php -$promise->done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null); -``` - -Consumes the promise's ultimate value if the promise fulfills, or handles the -ultimate error. - -It will cause a fatal error if either `$onFulfilled` or `$onRejected` throw or -return a rejected promise. - -Since the purpose of `done()` is consumption rather than transformation, -`done()` always returns `null`. - -#### See also - -* [PromiseInterface::then()](#promiseinterfacethen) -* [done() vs. then()](#done-vs-then) - -#### ExtendedPromiseInterface::otherwise() - -```php -$promise->otherwise(callable $onRejected); -``` - -Registers a rejection handler for promise. It is a shortcut for: - -```php -$promise->then(null, $onRejected); -``` - -Additionally, you can type hint the `$reason` argument of `$onRejected` to catch -only specific errors. - -```php -$promise - ->otherwise(function (\RuntimeException $reason) { - // Only catch \RuntimeException instances - // All other types of errors will propagate automatically - }) - ->otherwise(function ($reason) { - // Catch other errors - )}; -``` - -#### ExtendedPromiseInterface::always() - -```php -$newPromise = $promise->always(callable $onFulfilledOrRejected); -``` - -Allows you to execute "cleanup" type tasks in a promise chain. - -It arranges for `$onFulfilledOrRejected` to be called, with no arguments, -when the promise is either fulfilled or rejected. - -* If `$promise` fulfills, and `$onFulfilledOrRejected` returns successfully, - `$newPromise` will fulfill with the same value as `$promise`. -* If `$promise` fulfills, and `$onFulfilledOrRejected` throws or returns a - rejected promise, `$newPromise` will reject with the thrown exception or - rejected promise's reason. -* If `$promise` rejects, and `$onFulfilledOrRejected` returns successfully, - `$newPromise` will reject with the same reason as `$promise`. -* If `$promise` rejects, and `$onFulfilledOrRejected` throws or returns a - rejected promise, `$newPromise` will reject with the thrown exception or - rejected promise's reason. - -`always()` behaves similarly to the synchronous finally statement. When combined -with `otherwise()`, `always()` allows you to write code that is similar to the familiar -synchronous catch/finally pair. - -Consider the following synchronous code: - -```php -try { - return doSomething(); -} catch(\Exception $e) { - return handleError($e); -} finally { - cleanup(); -} -``` - -Similar asynchronous code (with `doSomething()` that returns a promise) can be -written: - -```php -return doSomething() - ->otherwise('handleError') - ->always('cleanup'); -``` - -#### ExtendedPromiseInterface::progress() - -> Deprecated in v2.6.0: Progress support is deprecated and should not be used anymore. - -```php -$promise->progress(callable $onProgress); -``` - -Registers a handler for progress updates from promise. It is a shortcut for: - -```php -$promise->then(null, null, $onProgress); -``` - -### CancellablePromiseInterface - -A cancellable promise provides a mechanism for consumers to notify the creator -of the promise that they are not longer interested in the result of an -operation. - -#### CancellablePromiseInterface::cancel() - -``` php -$promise->cancel(); -``` - -The `cancel()` method notifies the creator of the promise that there is no -further interest in the results of the operation. - -Once a promise is settled (either fulfilled or rejected), calling `cancel()` on -a promise has no effect. - -#### Implementations - -* [Promise](#promise-1) -* [FulfilledPromise](#fulfilledpromise) (deprecated) -* [RejectedPromise](#rejectedpromise) (deprecated) -* [LazyPromise](#lazypromise) (deprecated) - -### Promise - -Creates a promise whose state is controlled by the functions passed to -`$resolver`. - -```php -$resolver = function (callable $resolve, callable $reject, callable $notify) { - // Do some work, possibly asynchronously, and then - // resolve or reject. You can notify of progress events (deprecated) - // along the way if you want/need. - - $resolve($awesomeResult); - // or throw new Exception('Promise rejected'); - // or $resolve($anotherPromise); - // or $reject($nastyError); - // or $notify($progressNotification); -}; - -$canceller = function () { - // Cancel/abort any running operations like network connections, streams etc. - - // Reject promise by throwing an exception - throw new Exception('Promise cancelled'); -}; - -$promise = new React\Promise\Promise($resolver, $canceller); -``` - -The promise constructor receives a resolver function and an optional canceller -function which both will be called with 3 arguments: - - * `$resolve($value)` - Primary function that seals the fate of the - returned promise. Accepts either a non-promise value, or another promise. - When called with a non-promise value, fulfills promise with that value. - When called with another promise, e.g. `$resolve($otherPromise)`, promise's - fate will be equivalent to that of `$otherPromise`. - * `$reject($reason)` - Function that rejects the promise. It is recommended to - just throw an exception instead of using `$reject()`. - * `$notify($update)` - Deprecated function that issues progress events for the promise. - -If the resolver or canceller throw an exception, the promise will be rejected -with that thrown exception as the rejection reason. - -The resolver function will be called immediately, the canceller function only -once all consumers called the `cancel()` method of the promise. - -### FulfilledPromise - -> Deprecated in v2.8.0: External usage of `FulfilledPromise` is deprecated, use `resolve()` instead. - -Creates a already fulfilled promise. - -```php -$promise = React\Promise\FulfilledPromise($value); -``` - -Note, that `$value` **cannot** be a promise. It's recommended to use -[resolve()](#resolve) for creating resolved promises. - -### RejectedPromise - -> Deprecated in v2.8.0: External usage of `RejectedPromise` is deprecated, use `reject()` instead. - -Creates a already rejected promise. - -```php -$promise = React\Promise\RejectedPromise($reason); -``` - -Note, that `$reason` **cannot** be a promise. It's recommended to use -[reject()](#reject) for creating rejected promises. - -### LazyPromise - -> Deprecated in v2.8.0: LazyPromise is deprecated and should not be used anymore. - -Creates a promise which will be lazily initialized by `$factory` once a consumer -calls the `then()` method. - -```php -$factory = function () { - $deferred = new React\Promise\Deferred(); - - // Do some heavy stuff here and resolve the deferred once completed - - return $deferred->promise(); -}; - -$promise = new React\Promise\LazyPromise($factory); - -// $factory will only be executed once we call then() -$promise->then(function ($value) { -}); -``` - -### Functions - -Useful functions for creating, joining, mapping and reducing collections of -promises. - -All functions working on promise collections (like `all()`, `race()`, `some()` -etc.) support cancellation. This means, if you call `cancel()` on the returned -promise, all promises in the collection are cancelled. If the collection itself -is a promise which resolves to an array, this promise is also cancelled. - -#### resolve() - -```php -$promise = React\Promise\resolve(mixed $promiseOrValue); -``` - -Creates a promise for the supplied `$promiseOrValue`. - -If `$promiseOrValue` is a value, it will be the resolution value of the -returned promise. - -If `$promiseOrValue` is a thenable (any object that provides a `then()` method), -a trusted promise that follows the state of the thenable is returned. - -If `$promiseOrValue` is a promise, it will be returned as is. - -Note: The promise returned is always a promise implementing -[ExtendedPromiseInterface](#extendedpromiseinterface). If you pass in a custom -promise which only implements [PromiseInterface](#promiseinterface), this -promise will be assimilated to a extended promise following `$promiseOrValue`. - -#### reject() - -```php -$promise = React\Promise\reject(mixed $promiseOrValue); -``` - -Creates a rejected promise for the supplied `$promiseOrValue`. - -If `$promiseOrValue` is a value, it will be the rejection value of the -returned promise. - -If `$promiseOrValue` is a promise, its completion value will be the rejected -value of the returned promise. - -This can be useful in situations where you need to reject a promise without -throwing an exception. For example, it allows you to propagate a rejection with -the value of another promise. - -#### all() - -```php -$promise = React\Promise\all(array|React\Promise\PromiseInterface $promisesOrValues); -``` - -Returns a promise that will resolve only once all the items in -`$promisesOrValues` have resolved. The resolution value of the returned promise -will be an array containing the resolution values of each of the items in -`$promisesOrValues`. - -#### race() - -```php -$promise = React\Promise\race(array|React\Promise\PromiseInterface $promisesOrValues); -``` - -Initiates a competitive race that allows one winner. Returns a promise which is -resolved in the same way the first settled promise resolves. - -#### any() - -```php -$promise = React\Promise\any(array|React\Promise\PromiseInterface $promisesOrValues); -``` - -Returns a promise that will resolve when any one of the items in -`$promisesOrValues` resolves. The resolution value of the returned promise -will be the resolution value of the triggering item. - -The returned promise will only reject if *all* items in `$promisesOrValues` are -rejected. The rejection value will be an array of all rejection reasons. - -The returned promise will also reject with a `React\Promise\Exception\LengthException` -if `$promisesOrValues` contains 0 items. - -#### some() - -```php -$promise = React\Promise\some(array|React\Promise\PromiseInterface $promisesOrValues, integer $howMany); -``` - -Returns a promise that will resolve when `$howMany` of the supplied items in -`$promisesOrValues` resolve. The resolution value of the returned promise -will be an array of length `$howMany` containing the resolution values of the -triggering items. - -The returned promise will reject if it becomes impossible for `$howMany` items -to resolve (that is, when `(count($promisesOrValues) - $howMany) + 1` items -reject). The rejection value will be an array of -`(count($promisesOrValues) - $howMany) + 1` rejection reasons. - -The returned promise will also reject with a `React\Promise\Exception\LengthException` -if `$promisesOrValues` contains less items than `$howMany`. - -#### map() - -```php -$promise = React\Promise\map(array|React\Promise\PromiseInterface $promisesOrValues, callable $mapFunc); -``` - -Traditional map function, similar to `array_map()`, but allows input to contain -promises and/or values, and `$mapFunc` may return either a value or a promise. - -The map function receives each item as argument, where item is a fully resolved -value of a promise or value in `$promisesOrValues`. - -#### reduce() - -```php -$promise = React\Promise\reduce(array|React\Promise\PromiseInterface $promisesOrValues, callable $reduceFunc , $initialValue = null); -``` - -Traditional reduce function, similar to `array_reduce()`, but input may contain -promises and/or values, and `$reduceFunc` may return either a value or a -promise, *and* `$initialValue` may be a promise or a value for the starting -value. - -### PromisorInterface - -The `React\Promise\PromisorInterface` provides a common interface for objects -that provide a promise. `React\Promise\Deferred` implements it, but since it -is part of the public API anyone can implement it. - -Examples --------- - -### How to use Deferred - -```php -function getAwesomeResultPromise() -{ - $deferred = new React\Promise\Deferred(); - - // Execute a Node.js-style function using the callback pattern - computeAwesomeResultAsynchronously(function ($error, $result) use ($deferred) { - if ($error) { - $deferred->reject($error); - } else { - $deferred->resolve($result); - } - }); - - // Return the promise - return $deferred->promise(); -} - -getAwesomeResultPromise() - ->then( - function ($value) { - // Deferred resolved, do something with $value - }, - function ($reason) { - // Deferred rejected, do something with $reason - }, - function ($update) { - // Progress notification triggered, do something with $update - } - ); -``` - -### How promise forwarding works - -A few simple examples to show how the mechanics of Promises/A forwarding works. -These examples are contrived, of course, and in real usage, promise chains will -typically be spread across several function calls, or even several levels of -your application architecture. - -#### Resolution forwarding - -Resolved promises forward resolution values to the next promise. -The first promise, `$deferred->promise()`, will resolve with the value passed -to `$deferred->resolve()` below. - -Each call to `then()` returns a new promise that will resolve with the return -value of the previous handler. This creates a promise "pipeline". - -```php -$deferred = new React\Promise\Deferred(); - -$deferred->promise() - ->then(function ($x) { - // $x will be the value passed to $deferred->resolve() below - // and returns a *new promise* for $x + 1 - return $x + 1; - }) - ->then(function ($x) { - // $x === 2 - // This handler receives the return value of the - // previous handler. - return $x + 1; - }) - ->then(function ($x) { - // $x === 3 - // This handler receives the return value of the - // previous handler. - return $x + 1; - }) - ->then(function ($x) { - // $x === 4 - // This handler receives the return value of the - // previous handler. - echo 'Resolve ' . $x; - }); - -$deferred->resolve(1); // Prints "Resolve 4" -``` - -#### Rejection forwarding - -Rejected promises behave similarly, and also work similarly to try/catch: -When you catch an exception, you must rethrow for it to propagate. - -Similarly, when you handle a rejected promise, to propagate the rejection, -"rethrow" it by either returning a rejected promise, or actually throwing -(since promise translates thrown exceptions into rejections) - -```php -$deferred = new React\Promise\Deferred(); - -$deferred->promise() - ->then(function ($x) { - throw new \Exception($x + 1); - }) - ->otherwise(function (\Exception $x) { - // Propagate the rejection - throw $x; - }) - ->otherwise(function (\Exception $x) { - // Can also propagate by returning another rejection - return React\Promise\reject( - new \Exception($x->getMessage() + 1) - ); - }) - ->otherwise(function ($x) { - echo 'Reject ' . $x->getMessage(); // 3 - }); - -$deferred->resolve(1); // Prints "Reject 3" -``` - -#### Mixed resolution and rejection forwarding - -Just like try/catch, you can choose to propagate or not. Mixing resolutions and -rejections will still forward handler results in a predictable way. - -```php -$deferred = new React\Promise\Deferred(); - -$deferred->promise() - ->then(function ($x) { - return $x + 1; - }) - ->then(function ($x) { - throw new \Exception($x + 1); - }) - ->otherwise(function (\Exception $x) { - // Handle the rejection, and don't propagate. - // This is like catch without a rethrow - return $x->getMessage() + 1; - }) - ->then(function ($x) { - echo 'Mixed ' . $x; // 4 - }); - -$deferred->resolve(1); // Prints "Mixed 4" -``` - -#### Progress event forwarding - -> Deprecated in v2.6.0: Progress support is deprecated and should not be used anymore. - -In the same way as resolution and rejection handlers, your progress handler -**MUST** return a progress event to be propagated to the next link in the chain. -If you return nothing, `null` will be propagated. - -Also in the same way as resolutions and rejections, if you don't register a -progress handler, the update will be propagated through. - -If your progress handler throws an exception, the exception will be propagated -to the next link in the chain. The best thing to do is to ensure your progress -handlers do not throw exceptions. - -This gives you the opportunity to transform progress events at each step in the -chain so that they are meaningful to the next step. It also allows you to choose -not to transform them, and simply let them propagate untransformed, by not -registering a progress handler. - -```php -$deferred = new React\Promise\Deferred(); - -$deferred->promise() - ->progress(function ($update) { - return $update + 1; - }) - ->progress(function ($update) { - echo 'Progress ' . $update; // 2 - }); - -$deferred->notify(1); // Prints "Progress 2" -``` - -### done() vs. then() - -The golden rule is: - - Either return your promise, or call done() on it. - -At a first glance, `then()` and `done()` seem very similar. However, there are -important distinctions. - -The intent of `then()` is to transform a promise's value and to pass or return -a new promise for the transformed value along to other parts of your code. - -The intent of `done()` is to consume a promise's value, transferring -responsibility for the value to your code. - -In addition to transforming a value, `then()` allows you to recover from, or -propagate intermediate errors. Any errors that are not handled will be caught -by the promise machinery and used to reject the promise returned by `then()`. - -Calling `done()` transfers all responsibility for errors to your code. If an -error (either a thrown exception or returned rejection) escapes the -`$onFulfilled` or `$onRejected` callbacks you provide to done, it will be -rethrown in an uncatchable way causing a fatal error. - -```php -function getJsonResult() -{ - return queryApi() - ->then( - // Transform API results to an object - function ($jsonResultString) { - return json_decode($jsonResultString); - }, - // Transform API errors to an exception - function ($jsonErrorString) { - $object = json_decode($jsonErrorString); - throw new ApiErrorException($object->errorMessage); - } - ); -} - -// Here we provide no rejection handler. If the promise returned has been -// rejected, the ApiErrorException will be thrown -getJsonResult() - ->done( - // Consume transformed object - function ($jsonResultObject) { - // Do something with $jsonResultObject - } - ); - -// Here we provide a rejection handler which will either throw while debugging -// or log the exception -getJsonResult() - ->done( - function ($jsonResultObject) { - // Do something with $jsonResultObject - }, - function (ApiErrorException $exception) { - if (isDebug()) { - throw $exception; - } else { - logException($exception); - } - } - ); -``` - -Note that if a rejection value is not an instance of `\Exception`, it will be -wrapped in an exception of the type `React\Promise\UnhandledRejectionException`. - -You can get the original rejection reason by calling `$exception->getReason()`. - -Install -------- - -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 react/promise:^2.9 -``` - -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.4 through current PHP 8+ and HHVM. -It's *highly recommended to use the latest supported PHP version* for this project. - -Credits -------- - -Promise is a port of [when.js](https://github.com/cujojs/when) -by [Brian Cavalier](https://github.com/briancavalier). - -Also, large parts of the documentation have been ported from the when.js -[Wiki](https://github.com/cujojs/when/wiki) and the -[API docs](https://github.com/cujojs/when/blob/master/docs/api.md). - -License -------- - -Released under the [MIT](LICENSE) license. diff --git a/deps/vendor/react/promise/composer.json b/deps/vendor/react/promise/composer.json deleted file mode 100644 index f933f1537..000000000 --- a/deps/vendor/react/promise/composer.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "react/promise", - "description": "A lightweight implementation of CommonJS Promises/A for PHP", - "license": "MIT", - "authors": [ - { - "name": "Jan Sorgalla", - "homepage": "https://sorgalla.com/", - "email": "jsorgalla@gmail.com" - }, - { - "name": "Christian Lück", - "homepage": "https://clue.engineering/", - "email": "christian@clue.engineering" - }, - { - "name": "Cees-Jan Kiewiet", - "homepage": "https://wyrihaximus.net/", - "email": "reactphp@ceesjankiewiet.nl" - }, - { - "name": "Chris Boden", - "homepage": "https://cboden.dev/", - "email": "cboden@gmail.com" - } - ], - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" - }, - "autoload": { - "psr-4": { - "React\\Promise\\": "src/" - }, - "files": ["src/functions_include.php"] - }, - "autoload-dev": { - "psr-4": { - "React\\Promise\\": ["tests", "tests/fixtures"] - } - }, - "keywords": [ - "promise", - "promises" - ] -} diff --git a/deps/vendor/react/socket/CHANGELOG.md b/deps/vendor/react/socket/CHANGELOG.md deleted file mode 100644 index 76ba85f25..000000000 --- a/deps/vendor/react/socket/CHANGELOG.md +++ /dev/null @@ -1,730 +0,0 @@ -# Changelog - -## 1.11.0 (2022-01-14) - -* Feature: Full support for PHP 8.1 release. - (#277 by @clue) - -* Feature: Avoid dependency on `ext-filter`. - (#279 by @clue) - -* Improve test suite to skip FD test when hitting memory limit - and skip legacy TLS 1.0 tests if disabled by system. - (#278 and #281 by @clue and #283 by @SimonFrings) - -## 1.10.0 (2021-11-29) - -* Feature: Support listening on existing file descriptors (FDs) with `SocketServer`. - (#269 by @clue) - - ```php - $socket = new React\Socket\SocketSever('php://fd/3'); - ``` - - This is particularly useful when using [systemd socket activation](https://www.freedesktop.org/software/systemd/man/systemd.socket.html) like this: - - ```bash - $ systemd-socket-activate -l 8000 php examples/03-http-server.php php://fd/3 - ``` - -* Feature: Improve error messages for failed connection attempts with `errno` and `errstr`. - (#265, #266, #267, #270 and #271 by @clue and #268 by @SimonFrings) - - All error messages now always include the appropriate `errno` and `errstr` to - give more details about the error reason when available. Along with these - error details exposed by the underlying system functions, it will also - include the appropriate error constant name (such as `ECONNREFUSED`) when - available. Accordingly, failed TCP/IP connections will now report the actual - underlying error condition instead of a generic "Connection refused" error. - Higher-level error messages will now consistently report the connection URI - scheme and hostname used in all error messages. - - For most common use cases this means that simply reporting the `Exception` - message should give the most relevant details for any connection issues: - - ```php - $connector = new React\Socket\Connector(); - $connector->connect($uri)->then(function (React\Socket\ConnectionInterface $conn) { - // … - }, function (Exception $e) { - echo 'Error:' . $e->getMessage() . PHP_EOL; - }); - ``` - -* Improve test suite, test against PHP 8.1 release. - (#274 by @SimonFrings) - -## 1.9.0 (2021-08-03) - -* Feature: Add new `SocketServer` and deprecate `Server` to avoid class name collisions. - (#263 by @clue) - - The new `SocketServer` class has been added with an improved constructor signature - as a replacement for the previous `Server` class in order to avoid any ambiguities. - The previous name has been deprecated and should not be used anymore. - In its most basic form, the deprecated `Server` can now be considered an alias for new `SocketServer`. - - ```php - // deprecated - $socket = new React\Socket\Server(0); - $socket = new React\Socket\Server('127.0.0.1:8000'); - $socket = new React\Socket\Server('127.0.0.1:8000', null, $context); - $socket = new React\Socket\Server('127.0.0.1:8000', $loop, $context); - - // new - $socket = new React\Socket\SocketServer('127.0.0.1:0'); - $socket = new React\Socket\SocketServer('127.0.0.1:8000'); - $socket = new React\Socket\SocketServer('127.0.0.1:8000', $context); - $socket = new React\Socket\SocketServer('127.0.0.1:8000', $context, $loop); - ``` - -* Feature: Update `Connector` signature to take optional `$context` as first argument. - (#264 by @clue) - - The new signature has been added to match the new `SocketServer` and - consistently move the now commonly unneeded loop argument to the last argument. - The previous signature has been deprecated and should not be used anymore. - In its most basic form, both signatures are compatible. - - ```php - // deprecated - $connector = new React\Socket\Connector(null, $context); - $connector = new React\Socket\Connector($loop, $context); - - // new - $connector = new React\Socket\Connector($context); - $connector = new React\Socket\Connector($context, $loop); - ``` - -## 1.8.0 (2021-07-11) - -A major new feature release, see [**release announcement**](https://clue.engineering/2021/announcing-reactphp-default-loop). - -* Feature: Simplify usage by supporting new [default loop](https://reactphp.org/event-loop/#loop). - (#260 by @clue) - - ```php - // old (still supported) - $socket = new React\Socket\Server('127.0.0.1:8080', $loop); - $connector = new React\Socket\Connector($loop); - - // new (using default loop) - $socket = new React\Socket\Server('127.0.0.1:8080'); - $connector = new React\Socket\Connector(); - ``` - -## 1.7.0 (2021-06-25) - -* Feature: Support falling back to multiple DNS servers from DNS config. - (#257 by @clue) - - If you're using the default `Connector`, it will now use all DNS servers - configured on your system. If you have multiple DNS servers configured and - connectivity to the primary DNS server is broken, it will now fall back to - your other DNS servers, thus providing improved connectivity and redundancy - for broken DNS configurations. - -* Feature: Use round robin for happy eyeballs DNS responses (load balancing). - (#247 by @clue) - - If you're using the default `Connector`, it will now randomize the order of - the IP addresses resolved via DNS when connecting. This allows the load to - be distributed more evenly across all returned IP addresses. This can be - used as a very basic DNS load balancing mechanism. - -* Internal improvement to avoid unhandled rejection for future Promise API. - (#258 by @clue) - -* Improve test suite, use GitHub actions for continuous integration (CI). - (#254 by @SimonFrings) - -## 1.6.0 (2020-08-28) - -* Feature: Support upcoming PHP 8 release. - (#246 by @clue) - -* Feature: Change default socket backlog size to 511. - (#242 by @clue) - -* Fix: Fix closing connection when cancelling during TLS handshake. - (#241 by @clue) - -* Fix: Fix blocking during possible `accept()` race condition - when multiple socket servers listen on same socket address. - (#244 by @clue) - -* Improve test suite, update PHPUnit config and add full core team to the license. - (#243 by @SimonFrings and #245 by @WyriHaximus) - -## 1.5.0 (2020-07-01) - -* Feature / Fix: Improve error handling and reporting for happy eyeballs and - immediately try next connection when one connection attempt fails. - (#230, #231, #232 and #233 by @clue) - - Error messages for failed connection attempts now include more details to - ease debugging. Additionally, the happy eyeballs algorithm has been improved - to avoid having to wait for some timers to expire which significantly - improves connection setup times (in particular when IPv6 isn't available). - -* Improve test suite, minor code cleanup and improve code coverage to 100%. - Update to PHPUnit 9 and skip legacy TLS 1.0 / TLS 1.1 tests if disabled by - system. Run tests on Windows and simplify Travis CI test matrix for Mac OS X - setup and skip all TLS tests on legacy HHVM. - (#229, #235, #236 and #238 by @clue and #239 by @SimonFrings) - -## 1.4.0 (2020-03-12) - -A major new feature release, see [**release announcement**](https://clue.engineering/2020/introducing-ipv6-for-reactphp). - -* Feature: Add IPv6 support to `Connector` (implement "Happy Eyeballs" algorithm to support IPv6 probing). - IPv6 support is turned on by default, use new `happy_eyeballs` option in `Connector` to toggle behavior. - (#196, #224 and #225 by @WyriHaximus and @clue) - -* Feature: Default to using DNS cache (with max 256 entries) for `Connector`. - (#226 by @clue) - -* Add `.gitattributes` to exclude dev files from exports and some minor code style fixes. - (#219 by @reedy and #218 by @mmoreram) - -* Improve test suite to fix failing test cases when using new DNS component, - significantly improve test performance by awaiting events instead of sleeping, - exclude TLS 1.3 test on PHP 7.3, run tests on PHP 7.4 and simplify test matrix. - (#208, #209, #210, #217 and #223 by @clue) - -## 1.3.0 (2019-07-10) - -* Feature: Forward compatibility with upcoming stable DNS component. - (#206 by @clue) - -## 1.2.1 (2019-06-03) - -* Avoid uneeded fragmented TLS work around for PHP 7.3.3+ and - work around failing test case detecting EOF on TLS 1.3 socket streams. - (#201 and #202 by @clue) - -* Improve TLS certificate/passphrase example. - (#190 by @jsor) - -## 1.2.0 (2019-01-07) - -* Feature / Fix: Improve TLS 1.3 support. - (#186 by @clue) - - TLS 1.3 is now an official standard as of August 2018! :tada: - The protocol has major improvements in the areas of security, performance, and privacy. - TLS 1.3 is supported by default as of [OpenSSL 1.1.1](https://www.openssl.org/blog/blog/2018/09/11/release111/). - For example, this version ships with Ubuntu 18.10 (and newer) by default, meaning that recent installations support TLS 1.3 out of the box :shipit: - -* Fix: Avoid possibility of missing remote address when TLS handshake fails. - (#188 by @clue) - -* Improve performance by prefixing all global functions calls with `\` to skip the look up and resolve process and go straight to the global function. - (#183 by @WyriHaximus) - -* Update documentation to use full class names with namespaces. - (#187 by @clue) - -* Improve test suite to avoid some possible race conditions, - test against PHP 7.3 on Travis and - use dedicated `assertInstanceOf()` assertions. - (#185 by @clue, #178 by @WyriHaximus and #181 by @carusogabriel) - -## 1.1.0 (2018-10-01) - -* Feature: Improve error reporting for failed connection attempts and improve - cancellation forwarding during DNS lookup, TCP/IP connection or TLS handshake. - (#168, #169, #170, #171, #176 and #177 by @clue) - - All error messages now always contain a reference to the remote URI to give - more details which connection actually failed and the reason for this error. - Accordingly, failures during DNS lookup will now mention both the remote URI - as well as the DNS error reason. TCP/IP connection issues and errors during - a secure TLS handshake will both mention the remote URI as well as the - underlying socket error. Similarly, lost/dropped connections during a TLS - handshake will now report a lost connection instead of an empty error reason. - - For most common use cases this means that simply reporting the `Exception` - message should give the most relevant details for any connection issues: - - ```php - $promise = $connector->connect('tls://example.com:443'); - $promise->then(function (ConnectionInterface $conn) use ($loop) { - // … - }, function (Exception $e) { - echo $e->getMessage(); - }); - ``` - -## 1.0.0 (2018-07-11) - -* First stable LTS release, now following [SemVer](https://semver.org/). - We'd like to emphasize that this component is production ready and battle-tested. - We plan to support all long-term support (LTS) releases for at least 24 months, - so you have a rock-solid foundation to build on top of. - -> Contains no other changes, so it's actually fully compatible with the v0.8.12 release. - -## 0.8.12 (2018-06-11) - -* Feature: Improve memory consumption for failed and cancelled connection attempts. - (#161 by @clue) - -* Improve test suite to fix Travis config to test against legacy PHP 5.3 again. - (#162 by @clue) - -## 0.8.11 (2018-04-24) - -* Feature: Improve memory consumption for cancelled connection attempts and - simplify skipping DNS lookup when connecting to IP addresses. - (#159 and #160 by @clue) - -## 0.8.10 (2018-02-28) - -* Feature: Update DNS dependency to support loading system default DNS - nameserver config on all supported platforms - (`/etc/resolv.conf` on Unix/Linux/Mac/Docker/WSL and WMIC on Windows) - (#152 by @clue) - - This means that connecting to hosts that are managed by a local DNS server, - such as a corporate DNS server or when using Docker containers, will now - work as expected across all platforms with no changes required: - - ```php - $connector = new Connector($loop); - $connector->connect('intranet.example:80')->then(function ($connection) { - // … - }); - ``` - -## 0.8.9 (2018-01-18) - -* Feature: Support explicitly choosing TLS version to negotiate with remote side - by respecting `crypto_method` context parameter for all classes. - (#149 by @clue) - - By default, all connector and server classes support TLSv1.0+ and exclude - support for legacy SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly - choose the TLS version you want to negotiate with the remote side: - - ```php - // new: now supports 'crypto_method` context parameter for all classes - $connector = new Connector($loop, array( - 'tls' => array( - 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT - ) - )); - ``` - -* Minor internal clean up to unify class imports - (#148 by @clue) - -## 0.8.8 (2018-01-06) - -* Improve test suite by adding test group to skip integration tests relying on - internet connection and fix minor documentation typo. - (#146 by @clue and #145 by @cn007b) - -## 0.8.7 (2017-12-24) - -* Fix: Fix closing socket resource before removing from loop - (#141 by @clue) - - This fixes the root cause of an uncaught `Exception` that only manifested - itself after the recent Stream v0.7.4 component update and only if you're - using `ext-event` (`ExtEventLoop`). - -* Improve test suite by testing against PHP 7.2 - (#140 by @carusogabriel) - -## 0.8.6 (2017-11-18) - -* Feature: Add Unix domain socket (UDS) support to `Server` with `unix://` URI scheme - and add advanced `UnixServer` class. - (#120 by @andig) - - ```php - // new: Server now supports "unix://" scheme - $server = new Server('unix:///tmp/server.sock', $loop); - - // new: advanced usage - $server = new UnixServer('/tmp/server.sock', $loop); - ``` - -* Restructure examples to ease getting started - (#136 by @clue) - -* Improve test suite by adding forward compatibility with PHPUnit 6 and - ignore Mac OS X test failures for now until Travis tests work again - (#133 by @gabriel-caruso and #134 by @clue) - -## 0.8.5 (2017-10-23) - -* Fix: Work around PHP bug with Unix domain socket (UDS) paths for Mac OS X - (#123 by @andig) - -* Fix: Fix `SecureServer` to return `null` URI if server socket is already closed - (#129 by @clue) - -* Improve test suite by adding forward compatibility with PHPUnit v5 and - forward compatibility with upcoming EventLoop releases in tests and - test Mac OS X on Travis - (#122 by @andig and #125, #127 and #130 by @clue) - -* Readme improvements - (#118 by @jsor) - -## 0.8.4 (2017-09-16) - -* Feature: Add `FixedUriConnector` decorator to use fixed, preconfigured URI instead - (#117 by @clue) - - This can be useful for consumers that do not support certain URIs, such as - when you want to explicitly connect to a Unix domain socket (UDS) path - instead of connecting to a default address assumed by an higher-level API: - - ```php - $connector = new FixedUriConnector( - 'unix:///var/run/docker.sock', - new UnixConnector($loop) - ); - - // destination will be ignored, actually connects to Unix domain socket - $promise = $connector->connect('localhost:80'); - ``` - -## 0.8.3 (2017-09-08) - -* Feature: Reduce memory consumption for failed connections - (#113 by @valga) - -* Fix: Work around write chunk size for TLS streams for PHP < 7.1.14 - (#114 by @clue) - -## 0.8.2 (2017-08-25) - -* Feature: Update DNS dependency to support hosts file on all platforms - (#112 by @clue) - - This means that connecting to hosts such as `localhost` will now work as - expected across all platforms with no changes required: - - ```php - $connector = new Connector($loop); - $connector->connect('localhost:8080')->then(function ($connection) { - // … - }); - ``` - -## 0.8.1 (2017-08-15) - -* Feature: Forward compatibility with upcoming EventLoop v1.0 and v0.5 and - target evenement 3.0 a long side 2.0 and 1.0 - (#104 by @clue and #111 by @WyriHaximus) - -* Improve test suite by locking Travis distro so new defaults will not break the build and - fix HHVM build for now again and ignore future HHVM build errors - (#109 and #110 by @clue) - -* Minor documentation fixes - (#103 by @christiaan and #108 by @hansott) - -## 0.8.0 (2017-05-09) - -* Feature: New `Server` class now acts as a facade for existing server classes - and renamed old `Server` to `TcpServer` for advanced usage. - (#96 and #97 by @clue) - - The `Server` class is now the main class in this package that implements the - `ServerInterface` and allows you to accept incoming streaming connections, - such as plaintext TCP/IP or secure TLS connection streams. - - > This is not a BC break and consumer code does not have to be updated. - -* Feature / BC break: All addresses are now URIs that include the URI scheme - (#98 by @clue) - - ```diff - - $parts = parse_url('tcp://' . $conn->getRemoteAddress()); - + $parts = parse_url($conn->getRemoteAddress()); - ``` - -* Fix: Fix `unix://` addresses for Unix domain socket (UDS) paths - (#100 by @clue) - -* Feature: Forward compatibility with Stream v1.0 and v0.7 - (#99 by @clue) - -## 0.7.2 (2017-04-24) - -* Fix: Work around latest PHP 7.0.18 and 7.1.4 no longer accepting full URIs - (#94 by @clue) - -## 0.7.1 (2017-04-10) - -* Fix: Ignore HHVM errors when closing connection that is already closing - (#91 by @clue) - -## 0.7.0 (2017-04-10) - -* Feature: Merge SocketClient component into this component - (#87 by @clue) - - This means that this package now provides async, streaming plaintext TCP/IP - and secure TLS socket server and client connections for ReactPHP. - - ``` - $connector = new React\Socket\Connector($loop); - $connector->connect('google.com:80')->then(function (ConnectionInterface $conn) { - $connection->write('…'); - }); - ``` - - Accordingly, the `ConnectionInterface` is now used to represent both incoming - server side connections as well as outgoing client side connections. - - If you've previously used the SocketClient component to establish outgoing - client connections, upgrading should take no longer than a few minutes. - All classes have been merged as-is from the latest `v0.7.0` release with no - other changes, so you can simply update your code to use the updated namespace - like this: - - ```php - // old from SocketClient component and namespace - $connector = new React\SocketClient\Connector($loop); - $connector->connect('google.com:80')->then(function (ConnectionInterface $conn) { - $connection->write('…'); - }); - - // new - $connector = new React\Socket\Connector($loop); - $connector->connect('google.com:80')->then(function (ConnectionInterface $conn) { - $connection->write('…'); - }); - ``` - -## 0.6.0 (2017-04-04) - -* Feature: Add `LimitingServer` to limit and keep track of open connections - (#86 by @clue) - - ```php - $server = new Server(0, $loop); - $server = new LimitingServer($server, 100); - - $server->on('connection', function (ConnectionInterface $connection) { - $connection->write('hello there!' . PHP_EOL); - … - }); - ``` - -* Feature / BC break: Add `pause()` and `resume()` methods to limit active - connections - (#84 by @clue) - - ```php - $server = new Server(0, $loop); - $server->pause(); - - $loop->addTimer(1.0, function() use ($server) { - $server->resume(); - }); - ``` - -## 0.5.1 (2017-03-09) - -* Feature: Forward compatibility with Stream v0.5 and upcoming v0.6 - (#79 by @clue) - -## 0.5.0 (2017-02-14) - -* Feature / BC break: Replace `listen()` call with URIs passed to constructor - and reject listening on hostnames with `InvalidArgumentException` - and replace `ConnectionException` with `RuntimeException` for consistency - (#61, #66 and #72 by @clue) - - ```php - // old - $server = new Server($loop); - $server->listen(8080); - - // new - $server = new Server(8080, $loop); - ``` - - Similarly, you can now pass a full listening URI to the constructor to change - the listening host: - - ```php - // old - $server = new Server($loop); - $server->listen(8080, '127.0.0.1'); - - // new - $server = new Server('127.0.0.1:8080', $loop); - ``` - - Trying to start listening on (DNS) host names will now throw an - `InvalidArgumentException`, use IP addresses instead: - - ```php - // old - $server = new Server($loop); - $server->listen(8080, 'localhost'); - - // new - $server = new Server('127.0.0.1:8080', $loop); - ``` - - If trying to listen fails (such as if port is already in use or port below - 1024 may require root access etc.), it will now throw a `RuntimeException`, - the `ConnectionException` class has been removed: - - ```php - // old: throws React\Socket\ConnectionException - $server = new Server($loop); - $server->listen(80); - - // new: throws RuntimeException - $server = new Server(80, $loop); - ``` - -* Feature / BC break: Rename `shutdown()` to `close()` for consistency throughout React - (#62 by @clue) - - ```php - // old - $server->shutdown(); - - // new - $server->close(); - ``` - -* Feature / BC break: Replace `getPort()` with `getAddress()` - (#67 by @clue) - - ```php - // old - echo $server->getPort(); // 8080 - - // new - echo $server->getAddress(); // 127.0.0.1:8080 - ``` - -* Feature / BC break: `getRemoteAddress()` returns full address instead of only IP - (#65 by @clue) - - ```php - // old - echo $connection->getRemoteAddress(); // 192.168.0.1 - - // new - echo $connection->getRemoteAddress(); // 192.168.0.1:51743 - ``` - -* Feature / BC break: Add `getLocalAddress()` method - (#68 by @clue) - - ```php - echo $connection->getLocalAddress(); // 127.0.0.1:8080 - ``` - -* BC break: The `Server` and `SecureServer` class are now marked `final` - and you can no longer `extend` them - (which was never documented or recommended anyway). - Public properties and event handlers are now internal only. - Please use composition instead of extension. - (#71, #70 and #69 by @clue) - -## 0.4.6 (2017-01-26) - -* Feature: Support socket context options passed to `Server` - (#64 by @clue) - -* Fix: Properly return `null` for unknown addresses - (#63 by @clue) - -* Improve documentation for `ServerInterface` and lock test suite requirements - (#60 by @clue, #57 by @shaunbramley) - -## 0.4.5 (2017-01-08) - -* Feature: Add `SecureServer` for secure TLS connections - (#55 by @clue) - -* Add functional integration tests - (#54 by @clue) - -## 0.4.4 (2016-12-19) - -* Feature / Fix: `ConnectionInterface` should extend `DuplexStreamInterface` + documentation - (#50 by @clue) - -* Feature / Fix: Improve test suite and switch to normal stream handler - (#51 by @clue) - -* Feature: Add examples - (#49 by @clue) - -## 0.4.3 (2016-03-01) - -* Bug fix: Suppress errors on stream_socket_accept to prevent PHP from crashing -* Support for PHP7 and HHVM -* Support PHP 5.3 again - -## 0.4.2 (2014-05-25) - -* Verify stream is a valid resource in Connection - -## 0.4.1 (2014-04-13) - -* Bug fix: Check read buffer for data before shutdown signal and end emit (@ArtyDev) -* Bug fix: v0.3.4 changes merged for v0.4.1 - -## 0.3.4 (2014-03-30) - -* Bug fix: Reset socket to non-blocking after shutting down (PHP bug) - -## 0.4.0 (2014-02-02) - -* BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks -* BC break: Update to React/Promise 2.0 -* BC break: Update to Evenement 2.0 -* Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0 -* Bump React dependencies to v0.4 - -## 0.3.3 (2013-07-08) - -* Version bump - -## 0.3.2 (2013-05-10) - -* Version bump - -## 0.3.1 (2013-04-21) - -* Feature: Support binding to IPv6 addresses (@clue) - -## 0.3.0 (2013-04-14) - -* Bump React dependencies to v0.3 - -## 0.2.6 (2012-12-26) - -* Version bump - -## 0.2.3 (2012-11-14) - -* Version bump - -## 0.2.0 (2012-09-10) - -* Bump React dependencies to v0.2 - -## 0.1.1 (2012-07-12) - -* Version bump - -## 0.1.0 (2012-07-11) - -* First tagged release diff --git a/deps/vendor/react/socket/LICENSE b/deps/vendor/react/socket/LICENSE deleted file mode 100644 index d6f8901f9..000000000 --- a/deps/vendor/react/socket/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012 Christian Lück, Cees-Jan Kiewiet, Jan Sorgalla, Chris Boden, Igor Wiedler - -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/deps/vendor/react/socket/README.md b/deps/vendor/react/socket/README.md deleted file mode 100644 index 1b7afc8ac..000000000 --- a/deps/vendor/react/socket/README.md +++ /dev/null @@ -1,1563 +0,0 @@ -# Socket - -[![CI status](https://github.com/reactphp/socket/workflows/CI/badge.svg)](https://github.com/reactphp/socket/actions) - -Async, streaming plaintext TCP/IP and secure TLS socket server and client -connections for [ReactPHP](https://reactphp.org/). - -The socket library provides re-usable interfaces for a socket-layer -server and client based on the [`EventLoop`](https://github.com/reactphp/event-loop) -and [`Stream`](https://github.com/reactphp/stream) components. -Its server component allows you to build networking servers that accept incoming -connections from networking clients (such as an HTTP server). -Its client component allows you to build networking clients that establish -outgoing connections to networking servers (such as an HTTP or database client). -This library provides async, streaming means for all of this, so you can -handle multiple concurrent connections without blocking. - -**Table of Contents** - -* [Quickstart example](#quickstart-example) -* [Connection usage](#connection-usage) - * [ConnectionInterface](#connectioninterface) - * [getRemoteAddress()](#getremoteaddress) - * [getLocalAddress()](#getlocaladdress) -* [Server usage](#server-usage) - * [ServerInterface](#serverinterface) - * [connection event](#connection-event) - * [error event](#error-event) - * [getAddress()](#getaddress) - * [pause()](#pause) - * [resume()](#resume) - * [close()](#close) - * [SocketServer](#socketserver) - * [Advanced server usage](#advanced-server-usage) - * [TcpServer](#tcpserver) - * [SecureServer](#secureserver) - * [UnixServer](#unixserver) - * [LimitingServer](#limitingserver) - * [getConnections()](#getconnections) -* [Client usage](#client-usage) - * [ConnectorInterface](#connectorinterface) - * [connect()](#connect) - * [Connector](#connector) - * [Advanced client usage](#advanced-client-usage) - * [TcpConnector](#tcpconnector) - * [HappyEyeBallsConnector](#happyeyeballsconnector) - * [DnsConnector](#dnsconnector) - * [SecureConnector](#secureconnector) - * [TimeoutConnector](#timeoutconnector) - * [UnixConnector](#unixconnector) - * [FixUriConnector](#fixeduriconnector) -* [Install](#install) -* [Tests](#tests) -* [License](#license) - -## Quickstart example - -Here is a server that closes the connection if you send it anything: - -```php -$socket = new React\Socket\SocketServer('127.0.0.1:8080'); - -$socket->on('connection', function (React\Socket\ConnectionInterface $connection) { - $connection->write("Hello " . $connection->getRemoteAddress() . "!\n"); - $connection->write("Welcome to this amazing server!\n"); - $connection->write("Here's a tip: don't say anything.\n"); - - $connection->on('data', function ($data) use ($connection) { - $connection->close(); - }); -}); -``` - -See also the [examples](examples). - -Here's a client that outputs the output of said server and then attempts to -send it a string: - -```php -$connector = new React\Socket\Connector(); - -$connector->connect('127.0.0.1:8080')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->pipe(new React\Stream\WritableResourceStream(STDOUT)); - $connection->write("Hello World!\n"); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -## Connection usage - -### ConnectionInterface - -The `ConnectionInterface` is used to represent any incoming and outgoing -connection, such as a normal TCP/IP connection. - -An incoming or outgoing connection is a duplex stream (both readable and -writable) that implements React's -[`DuplexStreamInterface`](https://github.com/reactphp/stream#duplexstreaminterface). -It contains additional properties for the local and remote address (client IP) -where this connection has been established to/from. - -Most commonly, instances implementing this `ConnectionInterface` are emitted -by all classes implementing the [`ServerInterface`](#serverinterface) and -used by all classes implementing the [`ConnectorInterface`](#connectorinterface). - -Because the `ConnectionInterface` implements the underlying -[`DuplexStreamInterface`](https://github.com/reactphp/stream#duplexstreaminterface) -you can use any of its events and methods as usual: - -```php -$connection->on('data', function ($chunk) { - echo $chunk; -}); - -$connection->on('end', function () { - echo 'ended'; -}); - -$connection->on('error', function (Exception $e) { - echo 'error: ' . $e->getMessage(); -}); - -$connection->on('close', function () { - echo 'closed'; -}); - -$connection->write($data); -$connection->end($data = null); -$connection->close(); -// … -``` - -For more details, see the -[`DuplexStreamInterface`](https://github.com/reactphp/stream#duplexstreaminterface). - -#### getRemoteAddress() - -The `getRemoteAddress(): ?string` method returns the full remote address -(URI) where this connection has been established with. - -```php -$address = $connection->getRemoteAddress(); -echo 'Connection with ' . $address . PHP_EOL; -``` - -If the remote address can not be determined or is unknown at this time (such as -after the connection has been closed), it MAY return a `NULL` value instead. - -Otherwise, it will return the full address (URI) as a string value, such -as `tcp://127.0.0.1:8080`, `tcp://[::1]:80`, `tls://127.0.0.1:443`, -`unix://example.sock` or `unix:///path/to/example.sock`. -Note that individual URI components are application specific and depend -on the underlying transport protocol. - -If this is a TCP/IP based connection and you only want the remote IP, you may -use something like this: - -```php -$address = $connection->getRemoteAddress(); -$ip = trim(parse_url($address, PHP_URL_HOST), '[]'); -echo 'Connection with ' . $ip . PHP_EOL; -``` - -#### getLocalAddress() - -The `getLocalAddress(): ?string` method returns the full local address -(URI) where this connection has been established with. - -```php -$address = $connection->getLocalAddress(); -echo 'Connection with ' . $address . PHP_EOL; -``` - -If the local address can not be determined or is unknown at this time (such as -after the connection has been closed), it MAY return a `NULL` value instead. - -Otherwise, it will return the full address (URI) as a string value, such -as `tcp://127.0.0.1:8080`, `tcp://[::1]:80`, `tls://127.0.0.1:443`, -`unix://example.sock` or `unix:///path/to/example.sock`. -Note that individual URI components are application specific and depend -on the underlying transport protocol. - -This method complements the [`getRemoteAddress()`](#getremoteaddress) method, -so they should not be confused. - -If your `TcpServer` instance is listening on multiple interfaces (e.g. using -the address `0.0.0.0`), you can use this method to find out which interface -actually accepted this connection (such as a public or local interface). - -If your system has multiple interfaces (e.g. a WAN and a LAN interface), -you can use this method to find out which interface was actually -used for this connection. - -## Server usage - -### ServerInterface - -The `ServerInterface` is responsible for providing an interface for accepting -incoming streaming connections, such as a normal TCP/IP connection. - -Most higher-level components (such as a HTTP server) accept an instance -implementing this interface to accept incoming streaming connections. -This is usually done via dependency injection, so it's fairly simple to actually -swap this implementation against any other implementation of this interface. -This means that you SHOULD typehint against this interface instead of a concrete -implementation of this interface. - -Besides defining a few methods, this interface also implements the -[`EventEmitterInterface`](https://github.com/igorw/evenement) -which allows you to react to certain events. - -#### connection event - -The `connection` event will be emitted whenever a new connection has been -established, i.e. a new client connects to this server socket: - -```php -$socket->on('connection', function (React\Socket\ConnectionInterface $connection) { - echo 'new connection' . PHP_EOL; -}); -``` - -See also the [`ConnectionInterface`](#connectioninterface) for more details -about handling the incoming connection. - -#### error event - -The `error` event will be emitted whenever there's an error accepting a new -connection from a client. - -```php -$socket->on('error', function (Exception $e) { - echo 'error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -Note that this is not a fatal error event, i.e. the server keeps listening for -new connections even after this event. - -#### getAddress() - -The `getAddress(): ?string` method can be used to -return the full address (URI) this server is currently listening on. - -```php -$address = $socket->getAddress(); -echo 'Server listening on ' . $address . PHP_EOL; -``` - -If the address can not be determined or is unknown at this time (such as -after the socket has been closed), it MAY return a `NULL` value instead. - -Otherwise, it will return the full address (URI) as a string value, such -as `tcp://127.0.0.1:8080`, `tcp://[::1]:80`, `tls://127.0.0.1:443` -`unix://example.sock` or `unix:///path/to/example.sock`. -Note that individual URI components are application specific and depend -on the underlying transport protocol. - -If this is a TCP/IP based server and you only want the local port, you may -use something like this: - -```php -$address = $socket->getAddress(); -$port = parse_url($address, PHP_URL_PORT); -echo 'Server listening on port ' . $port . PHP_EOL; -``` - -#### pause() - -The `pause(): void` method can be used to -pause accepting new incoming connections. - -Removes the socket resource from the EventLoop and thus stop accepting -new connections. Note that the listening socket stays active and is not -closed. - -This means that new incoming connections will stay pending in the -operating system backlog until its configurable backlog is filled. -Once the backlog is filled, the operating system may reject further -incoming connections until the backlog is drained again by resuming -to accept new connections. - -Once the server is paused, no futher `connection` events SHOULD -be emitted. - -```php -$socket->pause(); - -$socket->on('connection', assertShouldNeverCalled()); -``` - -This method is advisory-only, though generally not recommended, the -server MAY continue emitting `connection` events. - -Unless otherwise noted, a successfully opened server SHOULD NOT start -in paused state. - -You can continue processing events by calling `resume()` again. - -Note that both methods can be called any number of times, in particular -calling `pause()` more than once SHOULD NOT have any effect. -Similarly, calling this after `close()` is a NO-OP. - -#### resume() - -The `resume(): void` method can be used to -resume accepting new incoming connections. - -Re-attach the socket resource to the EventLoop after a previous `pause()`. - -```php -$socket->pause(); - -Loop::addTimer(1.0, function () use ($socket) { - $socket->resume(); -}); -``` - -Note that both methods can be called any number of times, in particular -calling `resume()` without a prior `pause()` SHOULD NOT have any effect. -Similarly, calling this after `close()` is a NO-OP. - -#### close() - -The `close(): void` method can be used to -shut down this listening socket. - -This will stop listening for new incoming connections on this socket. - -```php -echo 'Shutting down server socket' . PHP_EOL; -$socket->close(); -``` - -Calling this method more than once on the same instance is a NO-OP. - -### SocketServer - - - -The `SocketServer` class is the main class in this package that implements the -[`ServerInterface`](#serverinterface) and allows you to accept incoming -streaming connections, such as plaintext TCP/IP or secure TLS connection streams. - -In order to accept plaintext TCP/IP connections, you can simply pass a host -and port combination like this: - -```php -$socket = new React\Socket\SocketServer('127.0.0.1:8080'); -``` - -Listening on the localhost address `127.0.0.1` means it will not be reachable from -outside of this system. -In order to change the host the socket is listening on, you can provide an IP -address of an interface or use the special `0.0.0.0` address to listen on all -interfaces: - -```php -$socket = new React\Socket\SocketServer('0.0.0.0:8080'); -``` - -If you want to listen on an IPv6 address, you MUST enclose the host in square -brackets: - -```php -$socket = new React\Socket\SocketServer('[::1]:8080'); -``` - -In order to use a random port assignment, you can use the port `0`: - -```php -$socket = new React\Socket\SocketServer('127.0.0.1:0'); -$address = $socket->getAddress(); -``` - -To listen on a Unix domain socket (UDS) path, you MUST prefix the URI with the -`unix://` scheme: - -```php -$socket = new React\Socket\SocketServer('unix:///tmp/server.sock'); -``` - -In order to listen on an existing file descriptor (FD) number, you MUST prefix -the URI with `php://fd/` like this: - -```php -$socket = new React\Socket\SocketServer('php://fd/3'); -``` - -If the given URI is invalid, does not contain a port, any other scheme or if it -contains a hostname, it will throw an `InvalidArgumentException`: - -```php -// throws InvalidArgumentException due to missing port -$socket = new React\Socket\SocketServer('127.0.0.1'); -``` - -If the given URI appears to be valid, but listening on it fails (such as if port -is already in use or port below 1024 may require root access etc.), it will -throw a `RuntimeException`: - -```php -$first = new React\Socket\SocketServer('127.0.0.1:8080'); - -// throws RuntimeException because port is already in use -$second = new React\Socket\SocketServer('127.0.0.1:8080'); -``` - -> Note that these error conditions may vary depending on your system and/or - configuration. - See the exception message and code for more details about the actual error - condition. - -Optionally, you can specify [TCP socket context options](https://www.php.net/manual/en/context.socket.php) -for the underlying stream socket resource like this: - -```php -$socket = new React\Socket\SocketServer('[::1]:8080', array( - 'tcp' => array( - 'backlog' => 200, - 'so_reuseport' => true, - 'ipv6_v6only' => true - ) -)); -``` - -> Note that available [socket context options](https://www.php.net/manual/en/context.socket.php), - their defaults and effects of changing these may vary depending on your system - and/or PHP version. - Passing unknown context options has no effect. - The `backlog` context option defaults to `511` unless given explicitly. - -You can start a secure TLS (formerly known as SSL) server by simply prepending -the `tls://` URI scheme. -Internally, it will wait for plaintext TCP/IP connections and then performs a -TLS handshake for each connection. -It thus requires valid [TLS context options](https://www.php.net/manual/en/context.ssl.php), -which in its most basic form may look something like this if you're using a -PEM encoded certificate file: - -```php -$socket = new React\Socket\SocketServer('tls://127.0.0.1:8080', array( - 'tls' => array( - 'local_cert' => 'server.pem' - ) -)); -``` - -> Note that the certificate file will not be loaded on instantiation but when an - incoming connection initializes its TLS context. - This implies that any invalid certificate file paths or contents will only cause - an `error` event at a later time. - -If your private key is encrypted with a passphrase, you have to specify it -like this: - -```php -$socket = new React\Socket\SocketServer('tls://127.0.0.1:8000', array( - 'tls' => array( - 'local_cert' => 'server.pem', - 'passphrase' => 'secret' - ) -)); -``` - -By default, this server supports TLSv1.0+ and excludes support for legacy -SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly choose the TLS version you -want to negotiate with the remote side: - -```php -$socket = new React\Socket\SocketServer('tls://127.0.0.1:8000', array( - 'tls' => array( - 'local_cert' => 'server.pem', - 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_SERVER - ) -)); -``` - -> Note that available [TLS context options](https://www.php.net/manual/en/context.ssl.php), - their defaults and effects of changing these may vary depending on your system - and/or PHP version. - The outer context array allows you to also use `tcp` (and possibly more) - context options at the same time. - Passing unknown context options has no effect. - If you do not use the `tls://` scheme, then passing `tls` context options - has no effect. - -Whenever a client connects, it will emit a `connection` event with a connection -instance implementing [`ConnectionInterface`](#connectioninterface): - -```php -$socket->on('connection', function (React\Socket\ConnectionInterface $connection) { - echo 'Plaintext connection from ' . $connection->getRemoteAddress() . PHP_EOL; - - $connection->write('hello there!' . PHP_EOL); - … -}); -``` - -See also the [`ServerInterface`](#serverinterface) for more details. - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -> Note that the `SocketServer` class is a concrete implementation for TCP/IP sockets. - If you want to typehint in your higher-level protocol implementation, you SHOULD - use the generic [`ServerInterface`](#serverinterface) instead. - -> Changelog v1.9.0: This class has been added with an improved constructor signature - as a replacement for the previous `Server` class in order to avoid any ambiguities. - The previous name has been deprecated and should not be used anymore. - -### Advanced server usage - -#### TcpServer - -The `TcpServer` class implements the [`ServerInterface`](#serverinterface) and -is responsible for accepting plaintext TCP/IP connections. - -```php -$server = new React\Socket\TcpServer(8080); -``` - -As above, the `$uri` parameter can consist of only a port, in which case the -server will default to listening on the localhost address `127.0.0.1`, -which means it will not be reachable from outside of this system. - -In order to use a random port assignment, you can use the port `0`: - -```php -$server = new React\Socket\TcpServer(0); -$address = $server->getAddress(); -``` - -In order to change the host the socket is listening on, you can provide an IP -address through the first parameter provided to the constructor, optionally -preceded by the `tcp://` scheme: - -```php -$server = new React\Socket\TcpServer('192.168.0.1:8080'); -``` - -If you want to listen on an IPv6 address, you MUST enclose the host in square -brackets: - -```php -$server = new React\Socket\TcpServer('[::1]:8080'); -``` - -If the given URI is invalid, does not contain a port, any other scheme or if it -contains a hostname, it will throw an `InvalidArgumentException`: - -```php -// throws InvalidArgumentException due to missing port -$server = new React\Socket\TcpServer('127.0.0.1'); -``` - -If the given URI appears to be valid, but listening on it fails (such as if port -is already in use or port below 1024 may require root access etc.), it will -throw a `RuntimeException`: - -```php -$first = new React\Socket\TcpServer(8080); - -// throws RuntimeException because port is already in use -$second = new React\Socket\TcpServer(8080); -``` - -> Note that these error conditions may vary depending on your system and/or -configuration. -See the exception message and code for more details about the actual error -condition. - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -Optionally, you can specify [socket context options](https://www.php.net/manual/en/context.socket.php) -for the underlying stream socket resource like this: - -```php -$server = new React\Socket\TcpServer('[::1]:8080', null, array( - 'backlog' => 200, - 'so_reuseport' => true, - 'ipv6_v6only' => true -)); -``` - -> Note that available [socket context options](https://www.php.net/manual/en/context.socket.php), -their defaults and effects of changing these may vary depending on your system -and/or PHP version. -Passing unknown context options has no effect. -The `backlog` context option defaults to `511` unless given explicitly. - -Whenever a client connects, it will emit a `connection` event with a connection -instance implementing [`ConnectionInterface`](#connectioninterface): - -```php -$server->on('connection', function (React\Socket\ConnectionInterface $connection) { - echo 'Plaintext connection from ' . $connection->getRemoteAddress() . PHP_EOL; - - $connection->write('hello there!' . PHP_EOL); - … -}); -``` - -See also the [`ServerInterface`](#serverinterface) for more details. - -#### SecureServer - -The `SecureServer` class implements the [`ServerInterface`](#serverinterface) -and is responsible for providing a secure TLS (formerly known as SSL) server. - -It does so by wrapping a [`TcpServer`](#tcpserver) instance which waits for plaintext -TCP/IP connections and then performs a TLS handshake for each connection. -It thus requires valid [TLS context options](https://www.php.net/manual/en/context.ssl.php), -which in its most basic form may look something like this if you're using a -PEM encoded certificate file: - -```php -$server = new React\Socket\TcpServer(8000); -$server = new React\Socket\SecureServer($server, null, array( - 'local_cert' => 'server.pem' -)); -``` - -> Note that the certificate file will not be loaded on instantiation but when an -incoming connection initializes its TLS context. -This implies that any invalid certificate file paths or contents will only cause -an `error` event at a later time. - -If your private key is encrypted with a passphrase, you have to specify it -like this: - -```php -$server = new React\Socket\TcpServer(8000); -$server = new React\Socket\SecureServer($server, null, array( - 'local_cert' => 'server.pem', - 'passphrase' => 'secret' -)); -``` - -By default, this server supports TLSv1.0+ and excludes support for legacy -SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly choose the TLS version you -want to negotiate with the remote side: - -```php -$server = new React\Socket\TcpServer(8000); -$server = new React\Socket\SecureServer($server, null, array( - 'local_cert' => 'server.pem', - 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_SERVER -)); -``` - -> Note that available [TLS context options](https://www.php.net/manual/en/context.ssl.php), -their defaults and effects of changing these may vary depending on your system -and/or PHP version. -Passing unknown context options has no effect. - -Whenever a client completes the TLS handshake, it will emit a `connection` event -with a connection instance implementing [`ConnectionInterface`](#connectioninterface): - -```php -$server->on('connection', function (React\Socket\ConnectionInterface $connection) { - echo 'Secure connection from' . $connection->getRemoteAddress() . PHP_EOL; - - $connection->write('hello there!' . PHP_EOL); - … -}); -``` - -Whenever a client fails to perform a successful TLS handshake, it will emit an -`error` event and then close the underlying TCP/IP connection: - -```php -$server->on('error', function (Exception $e) { - echo 'Error' . $e->getMessage() . PHP_EOL; -}); -``` - -See also the [`ServerInterface`](#serverinterface) for more details. - -Note that the `SecureServer` class is a concrete implementation for TLS sockets. -If you want to typehint in your higher-level protocol implementation, you SHOULD -use the generic [`ServerInterface`](#serverinterface) instead. - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -> Advanced usage: Despite allowing any `ServerInterface` as first parameter, -you SHOULD pass a `TcpServer` instance as first parameter, unless you -know what you're doing. -Internally, the `SecureServer` has to set the required TLS context options on -the underlying stream resources. -These resources are not exposed through any of the interfaces defined in this -package, but only through the internal `Connection` class. -The `TcpServer` class is guaranteed to emit connections that implement -the `ConnectionInterface` and uses the internal `Connection` class in order to -expose these underlying resources. -If you use a custom `ServerInterface` and its `connection` event does not -meet this requirement, the `SecureServer` will emit an `error` event and -then close the underlying connection. - -#### UnixServer - -The `UnixServer` class implements the [`ServerInterface`](#serverinterface) and -is responsible for accepting connections on Unix domain sockets (UDS). - -```php -$server = new React\Socket\UnixServer('/tmp/server.sock'); -``` - -As above, the `$uri` parameter can consist of only a socket path or socket path -prefixed by the `unix://` scheme. - -If the given URI appears to be valid, but listening on it fails (such as if the -socket is already in use or the file not accessible etc.), it will throw a -`RuntimeException`: - -```php -$first = new React\Socket\UnixServer('/tmp/same.sock'); - -// throws RuntimeException because socket is already in use -$second = new React\Socket\UnixServer('/tmp/same.sock'); -``` - -> Note that these error conditions may vary depending on your system and/or - configuration. - In particular, Zend PHP does only report "Unknown error" when the UDS path - already exists and can not be bound. You may want to check `is_file()` on the - given UDS path to report a more user-friendly error message in this case. - See the exception message and code for more details about the actual error - condition. - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -Whenever a client connects, it will emit a `connection` event with a connection -instance implementing [`ConnectionInterface`](#connectioninterface): - -```php -$server->on('connection', function (React\Socket\ConnectionInterface $connection) { - echo 'New connection' . PHP_EOL; - - $connection->write('hello there!' . PHP_EOL); - … -}); -``` - -See also the [`ServerInterface`](#serverinterface) for more details. - -#### LimitingServer - -The `LimitingServer` decorator wraps a given `ServerInterface` and is responsible -for limiting and keeping track of open connections to this server instance. - -Whenever the underlying server emits a `connection` event, it will check its -limits and then either - - keep track of this connection by adding it to the list of - open connections and then forward the `connection` event - - or reject (close) the connection when its limits are exceeded and will - forward an `error` event instead. - -Whenever a connection closes, it will remove this connection from the list of -open connections. - -```php -$server = new React\Socket\LimitingServer($server, 100); -$server->on('connection', function (React\Socket\ConnectionInterface $connection) { - $connection->write('hello there!' . PHP_EOL); - … -}); -``` - -See also the [second example](examples) for more details. - -You have to pass a maximum number of open connections to ensure -the server will automatically reject (close) connections once this limit -is exceeded. In this case, it will emit an `error` event to inform about -this and no `connection` event will be emitted. - -```php -$server = new React\Socket\LimitingServer($server, 100); -$server->on('connection', function (React\Socket\ConnectionInterface $connection) { - $connection->write('hello there!' . PHP_EOL); - … -}); -``` - -You MAY pass a `null` limit in order to put no limit on the number of -open connections and keep accepting new connection until you run out of -operating system resources (such as open file handles). This may be -useful if you do not want to take care of applying a limit but still want -to use the `getConnections()` method. - -You can optionally configure the server to pause accepting new -connections once the connection limit is reached. In this case, it will -pause the underlying server and no longer process any new connections at -all, thus also no longer closing any excessive connections. -The underlying operating system is responsible for keeping a backlog of -pending connections until its limit is reached, at which point it will -start rejecting further connections. -Once the server is below the connection limit, it will continue consuming -connections from the backlog and will process any outstanding data on -each connection. -This mode may be useful for some protocols that are designed to wait for -a response message (such as HTTP), but may be less useful for other -protocols that demand immediate responses (such as a "welcome" message in -an interactive chat). - -```php -$server = new React\Socket\LimitingServer($server, 100, true); -$server->on('connection', function (React\Socket\ConnectionInterface $connection) { - $connection->write('hello there!' . PHP_EOL); - … -}); -``` - -##### getConnections() - -The `getConnections(): ConnectionInterface[]` method can be used to -return an array with all currently active connections. - -```php -foreach ($server->getConnection() as $connection) { - $connection->write('Hi!'); -} -``` - -## Client usage - -### ConnectorInterface - -The `ConnectorInterface` is responsible for providing an interface for -establishing streaming connections, such as a normal TCP/IP connection. - -This is the main interface defined in this package and it is used throughout -React's vast ecosystem. - -Most higher-level components (such as HTTP, database or other networking -service clients) accept an instance implementing this interface to create their -TCP/IP connection to the underlying networking service. -This is usually done via dependency injection, so it's fairly simple to actually -swap this implementation against any other implementation of this interface. - -The interface only offers a single method: - -#### connect() - -The `connect(string $uri): PromiseInterface` method -can be used to create a streaming connection to the given remote address. - -It returns a [Promise](https://github.com/reactphp/promise) which either -fulfills with a stream implementing [`ConnectionInterface`](#connectioninterface) -on success or rejects with an `Exception` if the connection is not successful: - -```php -$connector->connect('google.com:443')->then( - function (React\Socket\ConnectionInterface $connection) { - // connection successfully established - }, - function (Exception $error) { - // failed to connect due to $error - } -); -``` - -See also [`ConnectionInterface`](#connectioninterface) for more details. - -The returned Promise MUST be implemented in such a way that it can be -cancelled when it is still pending. Cancelling a pending promise MUST -reject its value with an `Exception`. It SHOULD clean up any underlying -resources and references as applicable: - -```php -$promise = $connector->connect($uri); - -$promise->cancel(); -``` - -### Connector - -The `Connector` class is the main class in this package that implements the -[`ConnectorInterface`](#connectorinterface) and allows you to create streaming connections. - -You can use this connector to create any kind of streaming connections, such -as plaintext TCP/IP, secure TLS or local Unix connection streams. - -It binds to the main event loop and can be used like this: - -```php -$connector = new React\Socket\Connector(); - -$connector->connect($uri)->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write('...'); - $connection->end(); -}, function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -In order to create a plaintext TCP/IP connection, you can simply pass a host -and port combination like this: - -```php -$connector->connect('www.google.com:80')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write('...'); - $connection->end(); -}); -``` - -> If you do no specify a URI scheme in the destination URI, it will assume - `tcp://` as a default and establish a plaintext TCP/IP connection. - Note that TCP/IP connections require a host and port part in the destination - URI like above, all other URI components are optional. - -In order to create a secure TLS connection, you can use the `tls://` URI scheme -like this: - -```php -$connector->connect('tls://www.google.com:443')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write('...'); - $connection->end(); -}); -``` - -In order to create a local Unix domain socket connection, you can use the -`unix://` URI scheme like this: - -```php -$connector->connect('unix:///tmp/demo.sock')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write('...'); - $connection->end(); -}); -``` - -> The [`getRemoteAddress()`](#getremoteaddress) method will return the target - Unix domain socket (UDS) path as given to the `connect()` method, including - the `unix://` scheme, for example `unix:///tmp/demo.sock`. - The [`getLocalAddress()`](#getlocaladdress) method will most likely return a - `null` value as this value is not applicable to UDS connections here. - -Under the hood, the `Connector` is implemented as a *higher-level facade* -for the lower-level connectors implemented in this package. This means it -also shares all of their features and implementation details. -If you want to typehint in your higher-level protocol implementation, you SHOULD -use the generic [`ConnectorInterface`](#connectorinterface) instead. - -As of `v1.4.0`, the `Connector` class defaults to using the -[happy eyeballs algorithm](https://en.wikipedia.org/wiki/Happy_Eyeballs) to -automatically connect over IPv4 or IPv6 when a hostname is given. -This automatically attempts to connect using both IPv4 and IPv6 at the same time -(preferring IPv6), thus avoiding the usual problems faced by users with imperfect -IPv6 connections or setups. -If you want to revert to the old behavior of only doing an IPv4 lookup and -only attempt a single IPv4 connection, you can set up the `Connector` like this: - -```php -$connector = new React\Socket\Connector(array( - 'happy_eyeballs' => false -)); -``` - -Similarly, you can also affect the default DNS behavior as follows. -The `Connector` class will try to detect your system DNS settings (and uses -Google's public DNS server `8.8.8.8` as a fallback if unable to determine your -system settings) to resolve all public hostnames into underlying IP addresses by -default. -If you explicitly want to use a custom DNS server (such as a local DNS relay or -a company wide DNS server), you can set up the `Connector` like this: - -```php -$connector = new React\Socket\Connector(array( - 'dns' => '127.0.1.1' -)); - -$connector->connect('localhost:80')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write('...'); - $connection->end(); -}); -``` - -If you do not want to use a DNS resolver at all and want to connect to IP -addresses only, you can also set up your `Connector` like this: - -```php -$connector = new React\Socket\Connector(array( - 'dns' => false -)); - -$connector->connect('127.0.0.1:80')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write('...'); - $connection->end(); -}); -``` - -Advanced: If you need a custom DNS `React\Dns\Resolver\ResolverInterface` instance, you -can also set up your `Connector` like this: - -```php -$dnsResolverFactory = new React\Dns\Resolver\Factory(); -$resolver = $dnsResolverFactory->createCached('127.0.1.1'); - -$connector = new React\Socket\Connector(array( - 'dns' => $resolver -)); - -$connector->connect('localhost:80')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write('...'); - $connection->end(); -}); -``` - -By default, the `tcp://` and `tls://` URI schemes will use timeout value that -respects your `default_socket_timeout` ini setting (which defaults to 60s). -If you want a custom timeout value, you can simply pass this like this: - -```php -$connector = new React\Socket\Connector(array( - 'timeout' => 10.0 -)); -``` - -Similarly, if you do not want to apply a timeout at all and let the operating -system handle this, you can pass a boolean flag like this: - -```php -$connector = new React\Socket\Connector(array( - 'timeout' => false -)); -``` - -By default, the `Connector` supports the `tcp://`, `tls://` and `unix://` -URI schemes. If you want to explicitly prohibit any of these, you can simply -pass boolean flags like this: - -```php -// only allow secure TLS connections -$connector = new React\Socket\Connector(array( - 'tcp' => false, - 'tls' => true, - 'unix' => false, -)); - -$connector->connect('tls://google.com:443')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write('...'); - $connection->end(); -}); -``` - -The `tcp://` and `tls://` also accept additional context options passed to -the underlying connectors. -If you want to explicitly pass additional context options, you can simply -pass arrays of context options like this: - -```php -// allow insecure TLS connections -$connector = new React\Socket\Connector(array( - 'tcp' => array( - 'bindto' => '192.168.0.1:0' - ), - 'tls' => array( - 'verify_peer' => false, - 'verify_peer_name' => false - ), -)); - -$connector->connect('tls://localhost:443')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write('...'); - $connection->end(); -}); -``` - -By default, this connector supports TLSv1.0+ and excludes support for legacy -SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly choose the TLS version you -want to negotiate with the remote side: - -```php -$connector = new React\Socket\Connector(array( - 'tls' => array( - 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT - ) -)); -``` - -> For more details about context options, please refer to the PHP documentation - about [socket context options](https://www.php.net/manual/en/context.socket.php) - and [SSL context options](https://www.php.net/manual/en/context.ssl.php). - -Advanced: By default, the `Connector` supports the `tcp://`, `tls://` and -`unix://` URI schemes. -For this, it sets up the required connector classes automatically. -If you want to explicitly pass custom connectors for any of these, you can simply -pass an instance implementing the `ConnectorInterface` like this: - -```php -$dnsResolverFactory = new React\Dns\Resolver\Factory(); -$resolver = $dnsResolverFactory->createCached('127.0.1.1'); -$tcp = new React\Socket\HappyEyeBallsConnector(null, new React\Socket\TcpConnector(), $resolver); - -$tls = new React\Socket\SecureConnector($tcp); - -$unix = new React\Socket\UnixConnector(); - -$connector = new React\Socket\Connector(array( - 'tcp' => $tcp, - 'tls' => $tls, - 'unix' => $unix, - - 'dns' => false, - 'timeout' => false, -)); - -$connector->connect('google.com:80')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write('...'); - $connection->end(); -}); -``` - -> Internally, the `tcp://` connector will always be wrapped by the DNS resolver, - unless you disable DNS like in the above example. In this case, the `tcp://` - connector receives the actual hostname instead of only the resolved IP address - and is thus responsible for performing the lookup. - Internally, the automatically created `tls://` connector will always wrap the - underlying `tcp://` connector for establishing the underlying plaintext - TCP/IP connection before enabling secure TLS mode. If you want to use a custom - underlying `tcp://` connector for secure TLS connections only, you may - explicitly pass a `tls://` connector like above instead. - Internally, the `tcp://` and `tls://` connectors will always be wrapped by - `TimeoutConnector`, unless you disable timeouts like in the above example. - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -> Changelog v1.9.0: The constructur signature has been updated to take the -> optional `$context` as the first parameter and the optional `$loop` as a second -> argument. The previous signature has been deprecated and should not be used anymore. -> -> ```php -> // constructor signature as of v1.9.0 -> $connector = new React\Socket\Connector(array $context = [], ?LoopInterface $loop = null); -> -> // legacy constructor signature before v1.9.0 -> $connector = new React\Socket\Connector(?LoopInterface $loop = null, array $context = []); -> ``` - -### Advanced client usage - -#### TcpConnector - -The `TcpConnector` class implements the -[`ConnectorInterface`](#connectorinterface) and allows you to create plaintext -TCP/IP connections to any IP-port-combination: - -```php -$tcpConnector = new React\Socket\TcpConnector(); - -$tcpConnector->connect('127.0.0.1:80')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write('...'); - $connection->end(); -}); -``` - -See also the [examples](examples). - -Pending connection attempts can be cancelled by cancelling its pending promise like so: - -```php -$promise = $tcpConnector->connect('127.0.0.1:80'); - -$promise->cancel(); -``` - -Calling `cancel()` on a pending promise will close the underlying socket -resource, thus cancelling the pending TCP/IP connection, and reject the -resulting promise. - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -You can optionally pass additional -[socket context options](https://www.php.net/manual/en/context.socket.php) -to the constructor like this: - -```php -$tcpConnector = new React\Socket\TcpConnector(null, array( - 'bindto' => '192.168.0.1:0' -)); -``` - -Note that this class only allows you to connect to IP-port-combinations. -If the given URI is invalid, does not contain a valid IP address and port -or contains any other scheme, it will reject with an -`InvalidArgumentException`: - -If the given URI appears to be valid, but connecting to it fails (such as if -the remote host rejects the connection etc.), it will reject with a -`RuntimeException`. - -If you want to connect to hostname-port-combinations, see also the following chapter. - -> Advanced usage: Internally, the `TcpConnector` allocates an empty *context* -resource for each stream resource. -If the destination URI contains a `hostname` query parameter, its value will -be used to set up the TLS peer name. -This is used by the `SecureConnector` and `DnsConnector` to verify the peer -name and can also be used if you want a custom TLS peer name. - -#### HappyEyeBallsConnector - -The `HappyEyeBallsConnector` class implements the -[`ConnectorInterface`](#connectorinterface) and allows you to create plaintext -TCP/IP connections to any hostname-port-combination. Internally it implements the -happy eyeballs algorithm from [`RFC6555`](https://tools.ietf.org/html/rfc6555) and -[`RFC8305`](https://tools.ietf.org/html/rfc8305) to support IPv6 and IPv4 hostnames. - -It does so by decorating a given `TcpConnector` instance so that it first -looks up the given domain name via DNS (if applicable) and then establishes the -underlying TCP/IP connection to the resolved target IP address. - -Make sure to set up your DNS resolver and underlying TCP connector like this: - -```php -$dnsResolverFactory = new React\Dns\Resolver\Factory(); -$dns = $dnsResolverFactory->createCached('8.8.8.8'); - -$dnsConnector = new React\Socket\HappyEyeBallsConnector(null, $tcpConnector, $dns); - -$dnsConnector->connect('www.google.com:80')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write('...'); - $connection->end(); -}); -``` - -See also the [examples](examples). - -Pending connection attempts can be cancelled by cancelling its pending promise like so: - -```php -$promise = $dnsConnector->connect('www.google.com:80'); - -$promise->cancel(); -``` - -Calling `cancel()` on a pending promise will cancel the underlying DNS lookups -and/or the underlying TCP/IP connection(s) and reject the resulting promise. - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -> Advanced usage: Internally, the `HappyEyeBallsConnector` relies on a `Resolver` to -look up the IP addresses for the given hostname. -It will then replace the hostname in the destination URI with this IP's and -append a `hostname` query parameter and pass this updated URI to the underlying -connector. -The Happy Eye Balls algorithm describes looking the IPv6 and IPv4 address for -the given hostname so this connector sends out two DNS lookups for the A and -AAAA records. It then uses all IP addresses (both v6 and v4) and tries to -connect to all of them with a 50ms interval in between. Alterating between IPv6 -and IPv4 addresses. When a connection is established all the other DNS lookups -and connection attempts are cancelled. - -#### DnsConnector - -The `DnsConnector` class implements the -[`ConnectorInterface`](#connectorinterface) and allows you to create plaintext -TCP/IP connections to any hostname-port-combination. - -It does so by decorating a given `TcpConnector` instance so that it first -looks up the given domain name via DNS (if applicable) and then establishes the -underlying TCP/IP connection to the resolved target IP address. - -Make sure to set up your DNS resolver and underlying TCP connector like this: - -```php -$dnsResolverFactory = new React\Dns\Resolver\Factory(); -$dns = $dnsResolverFactory->createCached('8.8.8.8'); - -$dnsConnector = new React\Socket\DnsConnector($tcpConnector, $dns); - -$dnsConnector->connect('www.google.com:80')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write('...'); - $connection->end(); -}); -``` - -See also the [examples](examples). - -Pending connection attempts can be cancelled by cancelling its pending promise like so: - -```php -$promise = $dnsConnector->connect('www.google.com:80'); - -$promise->cancel(); -``` - -Calling `cancel()` on a pending promise will cancel the underlying DNS lookup -and/or the underlying TCP/IP connection and reject the resulting promise. - -> Advanced usage: Internally, the `DnsConnector` relies on a `React\Dns\Resolver\ResolverInterface` -to look up the IP address for the given hostname. -It will then replace the hostname in the destination URI with this IP and -append a `hostname` query parameter and pass this updated URI to the underlying -connector. -The underlying connector is thus responsible for creating a connection to the -target IP address, while this query parameter can be used to check the original -hostname and is used by the `TcpConnector` to set up the TLS peer name. -If a `hostname` is given explicitly, this query parameter will not be modified, -which can be useful if you want a custom TLS peer name. - -#### SecureConnector - -The `SecureConnector` class implements the -[`ConnectorInterface`](#connectorinterface) and allows you to create secure -TLS (formerly known as SSL) connections to any hostname-port-combination. - -It does so by decorating a given `DnsConnector` instance so that it first -creates a plaintext TCP/IP connection and then enables TLS encryption on this -stream. - -```php -$secureConnector = new React\Socket\SecureConnector($dnsConnector); - -$secureConnector->connect('www.google.com:443')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write("GET / HTTP/1.0\r\nHost: www.google.com\r\n\r\n"); - ... -}); -``` - -See also the [examples](examples). - -Pending connection attempts can be cancelled by cancelling its pending promise like so: - -```php -$promise = $secureConnector->connect('www.google.com:443'); - -$promise->cancel(); -``` - -Calling `cancel()` on a pending promise will cancel the underlying TCP/IP -connection and/or the SSL/TLS negotiation and reject the resulting promise. - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -You can optionally pass additional -[SSL context options](https://www.php.net/manual/en/context.ssl.php) -to the constructor like this: - -```php -$secureConnector = new React\Socket\SecureConnector($dnsConnector, null, array( - 'verify_peer' => false, - 'verify_peer_name' => false -)); -``` - -By default, this connector supports TLSv1.0+ and excludes support for legacy -SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly choose the TLS version you -want to negotiate with the remote side: - -```php -$secureConnector = new React\Socket\SecureConnector($dnsConnector, null, array( - 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT -)); -``` - -> Advanced usage: Internally, the `SecureConnector` relies on setting up the -required *context options* on the underlying stream resource. -It should therefor be used with a `TcpConnector` somewhere in the connector -stack so that it can allocate an empty *context* resource for each stream -resource and verify the peer name. -Failing to do so may result in a TLS peer name mismatch error or some hard to -trace race conditions, because all stream resources will use a single, shared -*default context* resource otherwise. - -#### TimeoutConnector - -The `TimeoutConnector` class implements the -[`ConnectorInterface`](#connectorinterface) and allows you to add timeout -handling to any existing connector instance. - -It does so by decorating any given [`ConnectorInterface`](#connectorinterface) -instance and starting a timer that will automatically reject and abort any -underlying connection attempt if it takes too long. - -```php -$timeoutConnector = new React\Socket\TimeoutConnector($connector, 3.0); - -$timeoutConnector->connect('google.com:80')->then(function (React\Socket\ConnectionInterface $connection) { - // connection succeeded within 3.0 seconds -}); -``` - -See also any of the [examples](examples). - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -Pending connection attempts can be cancelled by cancelling its pending promise like so: - -```php -$promise = $timeoutConnector->connect('google.com:80'); - -$promise->cancel(); -``` - -Calling `cancel()` on a pending promise will cancel the underlying connection -attempt, abort the timer and reject the resulting promise. - -#### UnixConnector - -The `UnixConnector` class implements the -[`ConnectorInterface`](#connectorinterface) and allows you to connect to -Unix domain socket (UDS) paths like this: - -```php -$connector = new React\Socket\UnixConnector(); - -$connector->connect('/tmp/demo.sock')->then(function (React\Socket\ConnectionInterface $connection) { - $connection->write("HELLO\n"); -}); -``` - -Connecting to Unix domain sockets is an atomic operation, i.e. its promise will -settle (either resolve or reject) immediately. -As such, calling `cancel()` on the resulting promise has no effect. - -> The [`getRemoteAddress()`](#getremoteaddress) method will return the target - Unix domain socket (UDS) path as given to the `connect()` method, prepended - with the `unix://` scheme, for example `unix:///tmp/demo.sock`. - The [`getLocalAddress()`](#getlocaladdress) method will most likely return a - `null` value as this value is not applicable to UDS connections here. - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -#### FixedUriConnector - -The `FixedUriConnector` class implements the -[`ConnectorInterface`](#connectorinterface) and decorates an existing Connector -to always use a fixed, preconfigured URI. - -This can be useful for consumers that do not support certain URIs, such as -when you want to explicitly connect to a Unix domain socket (UDS) path -instead of connecting to a default address assumed by an higher-level API: - -```php -$connector = new React\Socket\FixedUriConnector( - 'unix:///var/run/docker.sock', - new React\Socket\UnixConnector() -); - -// destination will be ignored, actually connects to Unix domain socket -$promise = $connector->connect('localhost:80'); -``` - -## Install - -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 react/socket:^1.11 -``` - -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 8+ and HHVM. -It's *highly recommended to use the latest supported PHP version* for this project, -partly due to its vast performance improvements and partly because legacy PHP -versions require several workarounds as described below. - -Secure TLS connections received some major upgrades starting with PHP 5.6, with -the defaults now being more secure, while older versions required explicit -context options. -This library does not take responsibility over these context options, so it's -up to consumers of this library to take care of setting appropriate context -options as described above. - -PHP < 7.3.3 (and PHP < 7.2.15) suffers from a bug where feof() might -block with 100% CPU usage on fragmented TLS records. -We try to work around this by always consuming the complete receive -buffer at once to avoid stale data in TLS buffers. This is known to -work around high CPU usage for well-behaving peers, but this may -cause very large data chunks for high throughput scenarios. The buggy -behavior can still be triggered due to network I/O buffers or -malicious peers on affected versions, upgrading is highly recommended. - -PHP < 7.1.4 (and PHP < 7.0.18) suffers from a bug when writing big -chunks of data over TLS streams at once. -We try to work around this by limiting the write chunk size to 8192 -bytes for older PHP versions only. -This is only a work-around and has a noticable performance penalty on -affected versions. - -This project also supports running on HHVM. -Note that really old HHVM < 3.8 does not support secure TLS connections, as it -lacks the required `stream_socket_enable_crypto()` function. -As such, trying to create a secure TLS connections on affected versions will -return a rejected promise instead. -This issue is also covered by our test suite, which will skip related tests -on affected versions. - -## Tests - -To run the test suite, you first need to clone this repo and then install all -dependencies [through Composer](https://getcomposer.org/): - -```bash -$ composer install -``` - -To run the test suite, go to the project root and run: - -```bash -$ vendor/bin/phpunit -``` - -The test suite also contains a number of functional integration tests that rely -on a stable internet connection. -If you do not want to run these, they can simply be skipped like this: - -```bash -$ vendor/bin/phpunit --exclude-group internet -``` - -## License - -MIT, see [LICENSE file](LICENSE). diff --git a/deps/vendor/react/socket/composer.json b/deps/vendor/react/socket/composer.json deleted file mode 100644 index ec50942e6..000000000 --- a/deps/vendor/react/socket/composer.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "react/socket", - "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", - "keywords": ["async", "socket", "stream", "connection", "ReactPHP"], - "license": "MIT", - "authors": [ - { - "name": "Christian Lück", - "homepage": "https://clue.engineering/", - "email": "christian@clue.engineering" - }, - { - "name": "Cees-Jan Kiewiet", - "homepage": "https://wyrihaximus.net/", - "email": "reactphp@ceesjankiewiet.nl" - }, - { - "name": "Jan Sorgalla", - "homepage": "https://sorgalla.com/", - "email": "jsorgalla@gmail.com" - }, - { - "name": "Chris Boden", - "homepage": "https://cboden.dev/", - "email": "cboden@gmail.com" - } - ], - "require": { - "php": ">=5.3.0", - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "react/dns": "^1.8", - "react/event-loop": "^1.2", - "react/promise": "^2.6.0 || ^1.2.1", - "react/promise-timer": "^1.8", - "react/stream": "^1.2" - }, - "require-dev": { - "clue/block-react": "^1.5", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", - "react/promise-stream": "^1.2" - }, - "autoload": { - "psr-4": { - "React\\Socket\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "React\\Tests\\Socket\\": "tests" - } - } -} diff --git a/deps/vendor/react/stream/CHANGELOG.md b/deps/vendor/react/stream/CHANGELOG.md deleted file mode 100644 index 9bafba707..000000000 --- a/deps/vendor/react/stream/CHANGELOG.md +++ /dev/null @@ -1,435 +0,0 @@ -# Changelog - -## 1.2.0 (2021-07-11) - -A major new feature release, see [**release announcement**](https://clue.engineering/2021/announcing-reactphp-default-loop). - -* Feature: Simplify usage by supporting new [default loop](https://reactphp.org/event-loop/#loop). - (#159 by @clue) - - ```php - // old (still supported) - $stream = new ReadableResourceStream($resource, $loop); - $stream = new WritabeResourceStream($resource, $loop); - $stream = new DuplexResourceStream($resource, $loop); - - // new (using default loop) - $stream = new ReadableResourceStream($resource); - $stream = new WritabeResourceStream($resource); - $stream = new DuplexResourceStream($resource); - ``` - -* Improve test suite, use GitHub actions for continuous integration (CI), - update PHPUnit config, run tests on PHP 8 and add full core team to the license. - (#153, #156 and #157 by @SimonFrings and #154 by @WyriHaximus) - -## 1.1.1 (2020-05-04) - -* Fix: Fix faulty write buffer behavior when sending large data chunks over TLS (Mac OS X only). - (#150 by @clue) - -* Minor code style improvements to fix phpstan analysis warnings and - add `.gitattributes` to exclude dev files from exports. - (#140 by @flow-control and #144 by @reedy) - -* Improve test suite to run tests on PHP 7.4 and simplify test matrix. - (#147 by @clue) - -## 1.1.0 (2019-01-01) - -* Improvement: Increase performance by optimizing global function and constant look ups. - (#137 by @WyriHaximus) - -* Travis: Test against PHP 7.3. - (#138 by @WyriHaximus) - -* Fix: Ignore empty reads. - (#139 by @WyriHaximus) - -## 1.0.0 (2018-07-11) - -* First stable LTS release, now following [SemVer](https://semver.org/). - We'd like to emphasize that this component is production ready and battle-tested. - We plan to support all long-term support (LTS) releases for at least 24 months, - so you have a rock-solid foundation to build on top of. - -> Contains no other changes, so it's actually fully compatible with the v0.7.7 release. - -## 0.7.7 (2018-01-19) - -* Improve test suite by fixing forward compatibility with upcoming EventLoop - releases, avoid risky tests and add test group to skip integration tests - relying on internet connection and apply appropriate test timeouts. - (#128, #131 and #132 by @clue) - -## 0.7.6 (2017-12-21) - -* Fix: Work around reading from unbuffered pipe stream in legacy PHP < 5.4.28 and PHP < 5.5.12 - (#126 by @clue) - -* Improve test suite by simplifying test bootstrapping logic via Composer and - test against PHP 7.2 - (#127 by @clue and #124 by @carusogabriel) - -## 0.7.5 (2017-11-20) - -* Fix: Igore excessive `fopen()` mode flags for `WritableResourceStream` - (#119 by @clue) - -* Fix: Fix forward compatibility with upcoming EventLoop releases - (#121 by @clue) - -* Restructure examples to ease getting started - (#123 by @clue) - -* Improve test suite by adding forward compatibility with PHPUnit 6 and - ignore Mac OS X test failures for now until Travis tests work again - (#122 by @gabriel-caruso and #120 by @clue) - -## 0.7.4 (2017-10-11) - -* Fix: Remove event listeners from `CompositeStream` once closed and - remove undocumented left-over `close` event argument - (#116 by @clue) - -* Minor documentation improvements: Fix wrong class name in example, - fix typos in README and - fix forward compatibility with upcoming EventLoop releases in example - (#113 by @docteurklein and #114 and #115 by @clue) - -* Improve test suite by running against Mac OS X on Travis - (#112 by @clue) - -## 0.7.3 (2017-08-05) - -* Improvement: Support Événement 3.0 a long side 2.0 and 1.0 - (#108 by @WyriHaximus) - -* Readme: Corrected loop initialization in usage example - (#109 by @pulyavin) - -* Travis: Lock linux distribution preventing future builds from breaking - (#110 by @clue) - -## 0.7.2 (2017-06-15) - -* Bug fix: WritableResourceStream: Close the underlying stream when closing the stream. - (#107 by @WyriHaximus) - -## 0.7.1 (2017-05-20) - -* Feature: Add optional `$writeChunkSize` parameter to limit maximum number of - bytes to write at once. - (#105 by @clue) - - ```php - $stream = new WritableResourceStream(STDOUT, $loop, null, 8192); - ``` - -* Ignore HHVM test failures for now until Travis tests work again - (#106 by @clue) - -## 0.7.0 (2017-05-04) - -* Removed / BC break: Remove deprecated and unneeded functionality - (#45, #87, #90, #91 and #93 by @clue) - - * Remove deprecated `Stream` class, use `DuplexResourceStream` instead - (#87 by @clue) - - * Remove public `$buffer` property, use new constructor parameters instead - (#91 by @clue) - - * Remove public `$stream` property from all resource streams - (#90 by @clue) - - * Remove undocumented and now unused `ReadableStream` and `WritableStream` - (#93 by @clue) - - * Remove `BufferedSink` - (#45 by @clue) - -* Feature / BC break: Simplify `ThroughStream` by using data callback instead of - inheritance. It is now a direct implementation of `DuplexStreamInterface`. - (#88 and #89 by @clue) - - ```php - $through = new ThroughStream(function ($data) { - return json_encode($data) . PHP_EOL; - }); - $through->on('data', $this->expectCallableOnceWith("[2, true]\n")); - - $through->write(array(2, true)); - ``` - -* Feature / BC break: The `CompositeStream` starts closed if either side is - already closed and forwards pause to pipe source on first write attempt. - (#96 and #103 by @clue) - - If either side of the composite stream closes, it will also close the other - side. We now also ensure that if either side is already closed during - instantiation, it will also close the other side. - -* BC break: Mark all classes as `final` and - mark internal API as `private` to discourage inheritance - (#95 and #99 by @clue) - -* Feature / BC break: Only emit `error` event for fatal errors - (#92 by @clue) - - > The `error` event was previously also allowed to be emitted for non-fatal - errors, but our implementations actually only ever emitted this as a fatal - error and then closed the stream. - -* Feature: Explicitly allow custom events and exclude any semantics - (#97 by @clue) - -* Strict definition for event callback functions - (#101 by @clue) - -* Support legacy PHP 5.3 through PHP 7.1 and HHVM and improve usage documentation - (#100 and #102 by @clue) - -* Actually require all dependencies so this is self-contained and improve - forward compatibility with EventLoop v1.0 and v0.5 - (#94 and #98 by @clue) - -## 0.6.0 (2017-03-26) - -* Feature / Fix / BC break: Add `DuplexResourceStream` and deprecate `Stream` - (#85 by @clue) - - ```php - // old (does still work for BC reasons) - $stream = new Stream($connection, $loop); - - // new - $stream = new DuplexResourceStream($connection, $loop); - ``` - - Note that the `DuplexResourceStream` now rejects read-only or write-only - streams, so this may affect BC. If you want a read-only or write-only - resource, use `ReadableResourceStream` or `WritableResourceStream` instead of - `DuplexResourceStream`. - - > BC note: This class was previously called `Stream`. The `Stream` class still - exists for BC reasons and will be removed in future versions of this package. - -* Feature / BC break: Add `WritableResourceStream` (previously called `Buffer`) - (#84 by @clue) - - ```php - // old - $stream = new Buffer(STDOUT, $loop); - - // new - $stream = new WritableResourceStream(STDOUT, $loop); - ``` - -* Feature: Add `ReadableResourceStream` - (#83 by @clue) - - ```php - $stream = new ReadableResourceStream(STDIN, $loop); - ``` - -* Fix / BC Break: Enforce using non-blocking I/O - (#46 by @clue) - - > BC note: This is known to affect process pipes on Windows which do not - support non-blocking I/O and could thus block the whole EventLoop previously. - -* Feature / Fix / BC break: Consistent semantics for - `DuplexStreamInterface::end()` to ensure it SHOULD also end readable side - (#86 by @clue) - -* Fix: Do not use unbuffered reads on pipe streams for legacy PHP < 5.4 - (#80 by @clue) - -## 0.5.0 (2017-03-08) - -* Feature / BC break: Consistent `end` event semantics (EOF) - (#70 by @clue) - - The `end` event will now only be emitted for a *successful* end, not if the - stream closes due to an unrecoverable `error` event or if you call `close()` - explicitly. - If you want to detect when the stream closes (terminates), use the `close` - event instead. - -* BC break: Remove custom (undocumented) `full-drain` event from `Buffer` - (#63 and #68 by @clue) - - > The `full-drain` event was undocumented and mostly used internally. - Relying on this event has attracted some low-quality code in the past, so - we've removed this from the public API in order to work out a better - solution instead. - If you want to detect when the buffer finishes flushing data to the stream, - you may want to look into its `end()` method or the `close` event instead. - -* Feature / BC break: Consistent event semantics and documentation, - explicitly state *when* events will be emitted and *which* arguments they - receive. - (#73 and #69 by @clue) - - The documentation now explicitly defines each event and its arguments. - Custom events and event arguments are still supported. - Most notably, all defined events only receive inherently required event - arguments and no longer transmit the instance they are emitted on for - consistency and performance reasons. - - ```php - // old (inconsistent and not supported by all implementations) - $stream->on('data', function ($data, $stream) { - // process $data - }); - - // new (consistent throughout the whole ecosystem) - $stream->on('data', function ($data) use ($stream) { - // process $data - }); - ``` - - > This mostly adds documentation (and thus some stricter, consistent - definitions) for the existing behavior, it does NOT define any major - changes otherwise. - Most existing code should be compatible with these changes, unless - it relied on some undocumented/unintended semantics. - -* Feature / BC break: Consistent method semantics and documentation - (#72 by @clue) - - > This mostly adds documentation (and thus some stricter, consistent - definitions) for the existing behavior, it does NOT define any major - changes otherwise. - Most existing code should be compatible with these changes, unless - it relied on some undocumented/unintended semantics. - -* Feature: Consistent `pipe()` semantics for closed and closing streams - (#71 from @clue) - - The source stream will now always be paused via `pause()` when the - destination stream closes. Also, properly stop piping if the source - stream closes and remove all event forwarding. - -* Improve test suite by adding PHPUnit to `require-dev` and improving coverage. - (#74 and #75 by @clue, #66 by @nawarian) - -## 0.4.6 (2017-01-25) - -* Feature: The `Buffer` can now be injected into the `Stream` (or be used standalone) - (#62 by @clue) - -* Fix: Forward `close` event only once for `CompositeStream` and `ThroughStream` - (#60 by @clue) - -* Fix: Consistent `close` event behavior for `Buffer` - (#61 by @clue) - -## 0.4.5 (2016-11-13) - -* Feature: Support setting read buffer size to `null` (infinite) - (#42 by @clue) - -* Fix: Do not emit `full-drain` event if `Buffer` is closed during `drain` event - (#55 by @clue) - -* Vastly improved performance by factor of 10x to 20x. - Raise default buffer sizes to 64 KiB and simplify and improve error handling - and unneeded function calls. - (#53, #55, #56 by @clue) - -## 0.4.4 (2016-08-22) - -* Bug fix: Emit `error` event and close `Stream` when accessing the underlying - stream resource fails with a permanent error. - (#52 and #40 by @clue, #25 by @lysenkobv) - -* Bug fix: Do not emit empty `data` event if nothing has been read (stream reached EOF) - (#39 by @clue) - -* Bug fix: Ignore empty writes to `Buffer` - (#51 by @clue) - -* Add benchmarking script to measure throughput in CI - (#41 by @clue) - -## 0.4.3 (2015-10-07) - -* Bug fix: Read buffer to 0 fixes error with libevent and large quantity of I/O (@mbonneau) -* Bug fix: No double-write during drain call (@arnaud-lb) -* Bug fix: Support HHVM (@clue) -* Adjust compatibility to 5.3 (@clue) - -## 0.4.2 (2014-09-09) - -* Added DuplexStreamInterface -* Stream sets stream resources to non-blocking -* Fixed potential race condition in pipe - -## 0.4.1 (2014-04-13) - -* Bug fix: v0.3.4 changes merged for v0.4.1 - -## 0.3.4 (2014-03-30) - -* Bug fix: [Stream] Fixed 100% CPU spike from non-empty write buffer on closed stream - -## 0.4.0 (2014-02-02) - -* BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks -* BC break: Update to Evenement 2.0 -* Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0 - -## 0.3.3 (2013-07-08) - -* Bug fix: [Stream] Correctly detect closed connections - -## 0.3.2 (2013-05-10) - -* Bug fix: [Stream] Make sure CompositeStream is closed properly - -## 0.3.1 (2013-04-21) - -* Bug fix: [Stream] Allow any `ReadableStreamInterface` on `BufferedSink::createPromise()` - -## 0.3.0 (2013-04-14) - -* Feature: [Stream] Factory method for BufferedSink - -## 0.2.6 (2012-12-26) - -* Version bump - -## 0.2.5 (2012-11-26) - -* Feature: Make BufferedSink trigger progress events on the promise (@jsor) - -## 0.2.4 (2012-11-18) - -* Feature: Added ThroughStream, CompositeStream, ReadableStream and WritableStream -* Feature: Added BufferedSink - -## 0.2.3 (2012-11-14) - -* Version bump - -## 0.2.2 (2012-10-28) - -* Version bump - -## 0.2.1 (2012-10-14) - -* Bug fix: Check for EOF in `Buffer::write()` - -## 0.2.0 (2012-09-10) - -* Version bump - -## 0.1.1 (2012-07-12) - -* Bug fix: Testing and functional against PHP >= 5.3.3 and <= 5.3.8 - -## 0.1.0 (2012-07-11) - -* First tagged release diff --git a/deps/vendor/react/stream/LICENSE b/deps/vendor/react/stream/LICENSE deleted file mode 100644 index d6f8901f9..000000000 --- a/deps/vendor/react/stream/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012 Christian Lück, Cees-Jan Kiewiet, Jan Sorgalla, Chris Boden, Igor Wiedler - -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/deps/vendor/react/stream/README.md b/deps/vendor/react/stream/README.md deleted file mode 100644 index 460f51a9f..000000000 --- a/deps/vendor/react/stream/README.md +++ /dev/null @@ -1,1248 +0,0 @@ -# Stream - -[![CI status](https://github.com/reactphp/stream/workflows/CI/badge.svg)](https://github.com/reactphp/stream/actions) - -Event-driven readable and writable streams for non-blocking I/O in [ReactPHP](https://reactphp.org/). - -In order to make the [EventLoop](https://github.com/reactphp/event-loop) -easier to use, this component introduces the powerful concept of "streams". -Streams allow you to efficiently process huge amounts of data (such as a multi -Gigabyte file download) in small chunks without having to store everything in -memory at once. -They are very similar to the streams found in PHP itself, -but have an interface more suited for async, non-blocking I/O. - -**Table of contents** - -* [Stream usage](#stream-usage) - * [ReadableStreamInterface](#readablestreaminterface) - * [data event](#data-event) - * [end event](#end-event) - * [error event](#error-event) - * [close event](#close-event) - * [isReadable()](#isreadable) - * [pause()](#pause) - * [resume()](#resume) - * [pipe()](#pipe) - * [close()](#close) - * [WritableStreamInterface](#writablestreaminterface) - * [drain event](#drain-event) - * [pipe event](#pipe-event) - * [error event](#error-event-1) - * [close event](#close-event-1) - * [isWritable()](#iswritable) - * [write()](#write) - * [end()](#end) - * [close()](#close-1) - * [DuplexStreamInterface](#duplexstreaminterface) -* [Creating streams](#creating-streams) - * [ReadableResourceStream](#readableresourcestream) - * [WritableResourceStream](#writableresourcestream) - * [DuplexResourceStream](#duplexresourcestream) - * [ThroughStream](#throughstream) - * [CompositeStream](#compositestream) -* [Usage](#usage) -* [Install](#install) -* [Tests](#tests) -* [License](#license) -* [More](#more) - -## Stream usage - -ReactPHP uses the concept of "streams" throughout its ecosystem to provide a -consistent higher-level abstraction for processing streams of arbitrary data -contents and size. -While a stream itself is a quite low-level concept, it can be used as a powerful -abstraction to build higher-level components and protocols on top. - -If you're new to this concept, it helps to think of them as a water pipe: -You can consume water from a source or you can produce water and forward (pipe) -it to any destination (sink). - -Similarly, streams can either be - -* readable (such as `STDIN` terminal input) or -* writable (such as `STDOUT` terminal output) or -* duplex (both readable *and* writable, such as a TCP/IP connection) - -Accordingly, this package defines the following three interfaces - -* [`ReadableStreamInterface`](#readablestreaminterface) -* [`WritableStreamInterface`](#writablestreaminterface) -* [`DuplexStreamInterface`](#duplexstreaminterface) - -### ReadableStreamInterface - -The `ReadableStreamInterface` is responsible for providing an interface for -read-only streams and the readable side of duplex streams. - -Besides defining a few methods, this interface also implements the -`EventEmitterInterface` which allows you to react to certain events. - -The event callback functions MUST be a valid `callable` that obeys strict -parameter definitions and MUST accept event parameters exactly as documented. -The event callback functions MUST NOT throw an `Exception`. -The return value of the event callback functions will be ignored and has no -effect, so for performance reasons you're recommended to not return any -excessive data structures. - -Every implementation of this interface MUST follow these event semantics in -order to be considered a well-behaving stream. - -> Note that higher-level implementations of this interface may choose to - define additional events with dedicated semantics not defined as part of - this low-level stream specification. Conformance with these event semantics - is out of scope for this interface, so you may also have to refer to the - documentation of such a higher-level implementation. - -#### data event - -The `data` event will be emitted whenever some data was read/received -from this source stream. -The event receives a single mixed argument for incoming data. - -```php -$stream->on('data', function ($data) { - echo $data; -}); -``` - -This event MAY be emitted any number of times, which may be zero times if -this stream does not send any data at all. -It SHOULD not be emitted after an `end` or `close` event. - -The given `$data` argument may be of mixed type, but it's usually -recommended it SHOULD be a `string` value or MAY use a type that allows -representation as a `string` for maximum compatibility. - -Many common streams (such as a TCP/IP connection or a file-based stream) -will emit the raw (binary) payload data that is received over the wire as -chunks of `string` values. - -Due to the stream-based nature of this, the sender may send any number -of chunks with varying sizes. There are no guarantees that these chunks -will be received with the exact same framing the sender intended to send. -In other words, many lower-level protocols (such as TCP/IP) transfer the -data in chunks that may be anywhere between single-byte values to several -dozens of kilobytes. You may want to apply a higher-level protocol to -these low-level data chunks in order to achieve proper message framing. - -#### end event - -The `end` event will be emitted once the source stream has successfully -reached the end of the stream (EOF). - -```php -$stream->on('end', function () { - echo 'END'; -}); -``` - -This event SHOULD be emitted once or never at all, depending on whether -a successful end was detected. -It SHOULD NOT be emitted after a previous `end` or `close` event. -It MUST NOT be emitted if the stream closes due to a non-successful -end, such as after a previous `error` event. - -After the stream is ended, it MUST switch to non-readable mode, -see also `isReadable()`. - -This event will only be emitted if the *end* was reached successfully, -not if the stream was interrupted by an unrecoverable error or explicitly -closed. Not all streams know this concept of a "successful end". -Many use-cases involve detecting when the stream closes (terminates) -instead, in this case you should use the `close` event. -After the stream emits an `end` event, it SHOULD usually be followed by a -`close` event. - -Many common streams (such as a TCP/IP connection or a file-based stream) -will emit this event if either the remote side closes the connection or -a file handle was successfully read until reaching its end (EOF). - -Note that this event should not be confused with the `end()` method. -This event defines a successful end *reading* from a source stream, while -the `end()` method defines *writing* a successful end to a destination -stream. - -#### error event - -The `error` event will be emitted once a fatal error occurs, usually while -trying to read from this stream. -The event receives a single `Exception` argument for the error instance. - -```php -$server->on('error', function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -This event SHOULD be emitted once the stream detects a fatal error, such -as a fatal transmission error or after an unexpected `data` or premature -`end` event. -It SHOULD NOT be emitted after a previous `error`, `end` or `close` event. -It MUST NOT be emitted if this is not a fatal error condition, such as -a temporary network issue that did not cause any data to be lost. - -After the stream errors, it MUST close the stream and SHOULD thus be -followed by a `close` event and then switch to non-readable mode, see -also `close()` and `isReadable()`. - -Many common streams (such as a TCP/IP connection or a file-based stream) -only deal with data transmission and do not make assumption about data -boundaries (such as unexpected `data` or premature `end` events). -In other words, many lower-level protocols (such as TCP/IP) may choose -to only emit this for a fatal transmission error once and will then -close (terminate) the stream in response. - -If this stream is a `DuplexStreamInterface`, you should also notice -how the writable side of the stream also implements an `error` event. -In other words, an error may occur while either reading or writing the -stream which should result in the same error processing. - -#### close event - -The `close` event will be emitted once the stream closes (terminates). - -```php -$stream->on('close', function () { - echo 'CLOSED'; -}); -``` - -This event SHOULD be emitted once or never at all, depending on whether -the stream ever terminates. -It SHOULD NOT be emitted after a previous `close` event. - -After the stream is closed, it MUST switch to non-readable mode, -see also `isReadable()`. - -Unlike the `end` event, this event SHOULD be emitted whenever the stream -closes, irrespective of whether this happens implicitly due to an -unrecoverable error or explicitly when either side closes the stream. -If you only want to detect a *successful* end, you should use the `end` -event instead. - -Many common streams (such as a TCP/IP connection or a file-based stream) -will likely choose to emit this event after reading a *successful* `end` -event or after a fatal transmission `error` event. - -If this stream is a `DuplexStreamInterface`, you should also notice -how the writable side of the stream also implements a `close` event. -In other words, after receiving this event, the stream MUST switch into -non-writable AND non-readable mode, see also `isWritable()`. -Note that this event should not be confused with the `end` event. - -#### isReadable() - -The `isReadable(): bool` method can be used to -check whether this stream is in a readable state (not closed already). - -This method can be used to check if the stream still accepts incoming -data events or if it is ended or closed already. -Once the stream is non-readable, no further `data` or `end` events SHOULD -be emitted. - -```php -assert($stream->isReadable() === false); - -$stream->on('data', assertNeverCalled()); -$stream->on('end', assertNeverCalled()); -``` - -A successfully opened stream always MUST start in readable mode. - -Once the stream ends or closes, it MUST switch to non-readable mode. -This can happen any time, explicitly through `close()` or -implicitly due to a remote close or an unrecoverable transmission error. -Once a stream has switched to non-readable mode, it MUST NOT transition -back to readable mode. - -If this stream is a `DuplexStreamInterface`, you should also notice -how the writable side of the stream also implements an `isWritable()` -method. Unless this is a half-open duplex stream, they SHOULD usually -have the same return value. - -#### pause() - -The `pause(): void` method can be used to -pause reading incoming data events. - -Removes the data source file descriptor from the event loop. This -allows you to throttle incoming data. - -Unless otherwise noted, a successfully opened stream SHOULD NOT start -in paused state. - -Once the stream is paused, no futher `data` or `end` events SHOULD -be emitted. - -```php -$stream->pause(); - -$stream->on('data', assertShouldNeverCalled()); -$stream->on('end', assertShouldNeverCalled()); -``` - -This method is advisory-only, though generally not recommended, the -stream MAY continue emitting `data` events. - -You can continue processing events by calling `resume()` again. - -Note that both methods can be called any number of times, in particular -calling `pause()` more than once SHOULD NOT have any effect. - -See also `resume()`. - -#### resume() - -The `resume(): void` method can be used to -resume reading incoming data events. - -Re-attach the data source after a previous `pause()`. - -```php -$stream->pause(); - -Loop::addTimer(1.0, function () use ($stream) { - $stream->resume(); -}); -``` - -Note that both methods can be called any number of times, in particular -calling `resume()` without a prior `pause()` SHOULD NOT have any effect. - -See also `pause()`. - -#### pipe() - -The `pipe(WritableStreamInterface $dest, array $options = [])` method can be used to -pipe all the data from this readable source into the given writable destination. - -Automatically sends all incoming data to the destination. -Automatically throttles the source based on what the destination can handle. - -```php -$source->pipe($dest); -``` - -Similarly, you can also pipe an instance implementing `DuplexStreamInterface` -into itself in order to write back all the data that is received. -This may be a useful feature for a TCP/IP echo service: - -```php -$connection->pipe($connection); -``` - -This method returns the destination stream as-is, which can be used to -set up chains of piped streams: - -```php -$source->pipe($decodeGzip)->pipe($filterBadWords)->pipe($dest); -``` - -By default, this will call `end()` on the destination stream once the -source stream emits an `end` event. This can be disabled like this: - -```php -$source->pipe($dest, array('end' => false)); -``` - -Note that this only applies to the `end` event. -If an `error` or explicit `close` event happens on the source stream, -you'll have to manually close the destination stream: - -```php -$source->pipe($dest); -$source->on('close', function () use ($dest) { - $dest->end('BYE!'); -}); -``` - -If the source stream is not readable (closed state), then this is a NO-OP. - -```php -$source->close(); -$source->pipe($dest); // NO-OP -``` - -If the destinantion stream is not writable (closed state), then this will simply -throttle (pause) the source stream: - -```php -$dest->close(); -$source->pipe($dest); // calls $source->pause() -``` - -Similarly, if the destination stream is closed while the pipe is still -active, it will also throttle (pause) the source stream: - -```php -$source->pipe($dest); -$dest->close(); // calls $source->pause() -``` - -Once the pipe is set up successfully, the destination stream MUST emit -a `pipe` event with this source stream an event argument. - -#### close() - -The `close(): void` method can be used to -close the stream (forcefully). - -This method can be used to (forcefully) close the stream. - -```php -$stream->close(); -``` - -Once the stream is closed, it SHOULD emit a `close` event. -Note that this event SHOULD NOT be emitted more than once, in particular -if this method is called multiple times. - -After calling this method, the stream MUST switch into a non-readable -mode, see also `isReadable()`. -This means that no further `data` or `end` events SHOULD be emitted. - -```php -$stream->close(); -assert($stream->isReadable() === false); - -$stream->on('data', assertNeverCalled()); -$stream->on('end', assertNeverCalled()); -``` - -If this stream is a `DuplexStreamInterface`, you should also notice -how the writable side of the stream also implements a `close()` method. -In other words, after calling this method, the stream MUST switch into -non-writable AND non-readable mode, see also `isWritable()`. -Note that this method should not be confused with the `end()` method. - -### WritableStreamInterface - -The `WritableStreamInterface` is responsible for providing an interface for -write-only streams and the writable side of duplex streams. - -Besides defining a few methods, this interface also implements the -`EventEmitterInterface` which allows you to react to certain events. - -The event callback functions MUST be a valid `callable` that obeys strict -parameter definitions and MUST accept event parameters exactly as documented. -The event callback functions MUST NOT throw an `Exception`. -The return value of the event callback functions will be ignored and has no -effect, so for performance reasons you're recommended to not return any -excessive data structures. - -Every implementation of this interface MUST follow these event semantics in -order to be considered a well-behaving stream. - -> Note that higher-level implementations of this interface may choose to - define additional events with dedicated semantics not defined as part of - this low-level stream specification. Conformance with these event semantics - is out of scope for this interface, so you may also have to refer to the - documentation of such a higher-level implementation. - -#### drain event - -The `drain` event will be emitted whenever the write buffer became full -previously and is now ready to accept more data. - -```php -$stream->on('drain', function () use ($stream) { - echo 'Stream is now ready to accept more data'; -}); -``` - -This event SHOULD be emitted once every time the buffer became full -previously and is now ready to accept more data. -In other words, this event MAY be emitted any number of times, which may -be zero times if the buffer never became full in the first place. -This event SHOULD NOT be emitted if the buffer has not become full -previously. - -This event is mostly used internally, see also `write()` for more details. - -#### pipe event - -The `pipe` event will be emitted whenever a readable stream is `pipe()`d -into this stream. -The event receives a single `ReadableStreamInterface` argument for the -source stream. - -```php -$stream->on('pipe', function (ReadableStreamInterface $source) use ($stream) { - echo 'Now receiving piped data'; - - // explicitly close target if source emits an error - $source->on('error', function () use ($stream) { - $stream->close(); - }); -}); - -$source->pipe($stream); -``` - -This event MUST be emitted once for each readable stream that is -successfully piped into this destination stream. -In other words, this event MAY be emitted any number of times, which may -be zero times if no stream is ever piped into this stream. -This event MUST NOT be emitted if either the source is not readable -(closed already) or this destination is not writable (closed already). - -This event is mostly used internally, see also `pipe()` for more details. - -#### error event - -The `error` event will be emitted once a fatal error occurs, usually while -trying to write to this stream. -The event receives a single `Exception` argument for the error instance. - -```php -$stream->on('error', function (Exception $e) { - echo 'Error: ' . $e->getMessage() . PHP_EOL; -}); -``` - -This event SHOULD be emitted once the stream detects a fatal error, such -as a fatal transmission error. -It SHOULD NOT be emitted after a previous `error` or `close` event. -It MUST NOT be emitted if this is not a fatal error condition, such as -a temporary network issue that did not cause any data to be lost. - -After the stream errors, it MUST close the stream and SHOULD thus be -followed by a `close` event and then switch to non-writable mode, see -also `close()` and `isWritable()`. - -Many common streams (such as a TCP/IP connection or a file-based stream) -only deal with data transmission and may choose -to only emit this for a fatal transmission error once and will then -close (terminate) the stream in response. - -If this stream is a `DuplexStreamInterface`, you should also notice -how the readable side of the stream also implements an `error` event. -In other words, an error may occur while either reading or writing the -stream which should result in the same error processing. - -#### close event - -The `close` event will be emitted once the stream closes (terminates). - -```php -$stream->on('close', function () { - echo 'CLOSED'; -}); -``` - -This event SHOULD be emitted once or never at all, depending on whether -the stream ever terminates. -It SHOULD NOT be emitted after a previous `close` event. - -After the stream is closed, it MUST switch to non-writable mode, -see also `isWritable()`. - -This event SHOULD be emitted whenever the stream closes, irrespective of -whether this happens implicitly due to an unrecoverable error or -explicitly when either side closes the stream. - -Many common streams (such as a TCP/IP connection or a file-based stream) -will likely choose to emit this event after flushing the buffer from -the `end()` method, after receiving a *successful* `end` event or after -a fatal transmission `error` event. - -If this stream is a `DuplexStreamInterface`, you should also notice -how the readable side of the stream also implements a `close` event. -In other words, after receiving this event, the stream MUST switch into -non-writable AND non-readable mode, see also `isReadable()`. -Note that this event should not be confused with the `end` event. - -#### isWritable() - -The `isWritable(): bool` method can be used to -check whether this stream is in a writable state (not closed already). - -This method can be used to check if the stream still accepts writing -any data or if it is ended or closed already. -Writing any data to a non-writable stream is a NO-OP: - -```php -assert($stream->isWritable() === false); - -$stream->write('end'); // NO-OP -$stream->end('end'); // NO-OP -``` - -A successfully opened stream always MUST start in writable mode. - -Once the stream ends or closes, it MUST switch to non-writable mode. -This can happen any time, explicitly through `end()` or `close()` or -implicitly due to a remote close or an unrecoverable transmission error. -Once a stream has switched to non-writable mode, it MUST NOT transition -back to writable mode. - -If this stream is a `DuplexStreamInterface`, you should also notice -how the readable side of the stream also implements an `isReadable()` -method. Unless this is a half-open duplex stream, they SHOULD usually -have the same return value. - -#### write() - -The `write(mixed $data): bool` method can be used to -write some data into the stream. - -A successful write MUST be confirmed with a boolean `true`, which means -that either the data was written (flushed) immediately or is buffered and -scheduled for a future write. Note that this interface gives you no -control over explicitly flushing the buffered data, as finding the -appropriate time for this is beyond the scope of this interface and left -up to the implementation of this interface. - -Many common streams (such as a TCP/IP connection or file-based stream) -may choose to buffer all given data and schedule a future flush by using -an underlying EventLoop to check when the resource is actually writable. - -If a stream cannot handle writing (or flushing) the data, it SHOULD emit -an `error` event and MAY `close()` the stream if it can not recover from -this error. - -If the internal buffer is full after adding `$data`, then `write()` -SHOULD return `false`, indicating that the caller should stop sending -data until the buffer drains. -The stream SHOULD send a `drain` event once the buffer is ready to accept -more data. - -Similarly, if the the stream is not writable (already in a closed state) -it MUST NOT process the given `$data` and SHOULD return `false`, -indicating that the caller should stop sending data. - -The given `$data` argument MAY be of mixed type, but it's usually -recommended it SHOULD be a `string` value or MAY use a type that allows -representation as a `string` for maximum compatibility. - -Many common streams (such as a TCP/IP connection or a file-based stream) -will only accept the raw (binary) payload data that is transferred over -the wire as chunks of `string` values. - -Due to the stream-based nature of this, the sender may send any number -of chunks with varying sizes. There are no guarantees that these chunks -will be received with the exact same framing the sender intended to send. -In other words, many lower-level protocols (such as TCP/IP) transfer the -data in chunks that may be anywhere between single-byte values to several -dozens of kilobytes. You may want to apply a higher-level protocol to -these low-level data chunks in order to achieve proper message framing. - -#### end() - -The `end(mixed $data = null): void` method can be used to -successfully end the stream (after optionally sending some final data). - -This method can be used to successfully end the stream, i.e. close -the stream after sending out all data that is currently buffered. - -```php -$stream->write('hello'); -$stream->write('world'); -$stream->end(); -``` - -If there's no data currently buffered and nothing to be flushed, then -this method MAY `close()` the stream immediately. - -If there's still data in the buffer that needs to be flushed first, then -this method SHOULD try to write out this data and only then `close()` -the stream. -Once the stream is closed, it SHOULD emit a `close` event. - -Note that this interface gives you no control over explicitly flushing -the buffered data, as finding the appropriate time for this is beyond the -scope of this interface and left up to the implementation of this -interface. - -Many common streams (such as a TCP/IP connection or file-based stream) -may choose to buffer all given data and schedule a future flush by using -an underlying EventLoop to check when the resource is actually writable. - -You can optionally pass some final data that is written to the stream -before ending the stream. If a non-`null` value is given as `$data`, then -this method will behave just like calling `write($data)` before ending -with no data. - -```php -// shorter version -$stream->end('bye'); - -// same as longer version -$stream->write('bye'); -$stream->end(); -``` - -After calling this method, the stream MUST switch into a non-writable -mode, see also `isWritable()`. -This means that no further writes are possible, so any additional -`write()` or `end()` calls have no effect. - -```php -$stream->end(); -assert($stream->isWritable() === false); - -$stream->write('nope'); // NO-OP -$stream->end(); // NO-OP -``` - -If this stream is a `DuplexStreamInterface`, calling this method SHOULD -also end its readable side, unless the stream supports half-open mode. -In other words, after calling this method, these streams SHOULD switch -into non-writable AND non-readable mode, see also `isReadable()`. -This implies that in this case, the stream SHOULD NOT emit any `data` -or `end` events anymore. -Streams MAY choose to use the `pause()` method logic for this, but -special care may have to be taken to ensure a following call to the -`resume()` method SHOULD NOT continue emitting readable events. - -Note that this method should not be confused with the `close()` method. - -#### close() - -The `close(): void` method can be used to -close the stream (forcefully). - -This method can be used to forcefully close the stream, i.e. close -the stream without waiting for any buffered data to be flushed. -If there's still data in the buffer, this data SHOULD be discarded. - -```php -$stream->close(); -``` - -Once the stream is closed, it SHOULD emit a `close` event. -Note that this event SHOULD NOT be emitted more than once, in particular -if this method is called multiple times. - -After calling this method, the stream MUST switch into a non-writable -mode, see also `isWritable()`. -This means that no further writes are possible, so any additional -`write()` or `end()` calls have no effect. - -```php -$stream->close(); -assert($stream->isWritable() === false); - -$stream->write('nope'); // NO-OP -$stream->end(); // NO-OP -``` - -Note that this method should not be confused with the `end()` method. -Unlike the `end()` method, this method does not take care of any existing -buffers and simply discards any buffer contents. -Likewise, this method may also be called after calling `end()` on a -stream in order to stop waiting for the stream to flush its final data. - -```php -$stream->end(); -Loop::addTimer(1.0, function () use ($stream) { - $stream->close(); -}); -``` - -If this stream is a `DuplexStreamInterface`, you should also notice -how the readable side of the stream also implements a `close()` method. -In other words, after calling this method, the stream MUST switch into -non-writable AND non-readable mode, see also `isReadable()`. - -### DuplexStreamInterface - -The `DuplexStreamInterface` is responsible for providing an interface for -duplex streams (both readable and writable). - -It builds on top of the existing interfaces for readable and writable streams -and follows the exact same method and event semantics. -If you're new to this concept, you should look into the -`ReadableStreamInterface` and `WritableStreamInterface` first. - -Besides defining a few methods, this interface also implements the -`EventEmitterInterface` which allows you to react to the same events defined -on the `ReadbleStreamInterface` and `WritableStreamInterface`. - -The event callback functions MUST be a valid `callable` that obeys strict -parameter definitions and MUST accept event parameters exactly as documented. -The event callback functions MUST NOT throw an `Exception`. -The return value of the event callback functions will be ignored and has no -effect, so for performance reasons you're recommended to not return any -excessive data structures. - -Every implementation of this interface MUST follow these event semantics in -order to be considered a well-behaving stream. - -> Note that higher-level implementations of this interface may choose to - define additional events with dedicated semantics not defined as part of - this low-level stream specification. Conformance with these event semantics - is out of scope for this interface, so you may also have to refer to the - documentation of such a higher-level implementation. - -See also [`ReadableStreamInterface`](#readablestreaminterface) and -[`WritableStreamInterface`](#writablestreaminterface) for more details. - -## Creating streams - -ReactPHP uses the concept of "streams" throughout its ecosystem, so that -many higher-level consumers of this package only deal with -[stream usage](#stream-usage). -This implies that stream instances are most often created within some -higher-level components and many consumers never actually have to deal with -creating a stream instance. - -* Use [react/socket](https://github.com/reactphp/socket) - if you want to accept incoming or establish outgoing plaintext TCP/IP or - secure TLS socket connection streams. -* Use [react/http](https://github.com/reactphp/http) - if you want to receive an incoming HTTP request body streams. -* Use [react/child-process](https://github.com/reactphp/child-process) - if you want to communicate with child processes via process pipes such as - STDIN, STDOUT, STDERR etc. -* Use experimental [react/filesystem](https://github.com/reactphp/filesystem) - if you want to read from / write to the filesystem. -* See also the last chapter for [more real-world applications](#more). - -However, if you are writing a lower-level component or want to create a stream -instance from a stream resource, then the following chapter is for you. - -> Note that the following examples use `fopen()` and `stream_socket_client()` - for illustration purposes only. - These functions SHOULD NOT be used in a truly async program because each call - may take several seconds to complete and would block the EventLoop otherwise. - Additionally, the `fopen()` call will return a file handle on some platforms - which may or may not be supported by all EventLoop implementations. - As an alternative, you may want to use higher-level libraries listed above. - -### ReadableResourceStream - -The `ReadableResourceStream` is a concrete implementation of the -[`ReadableStreamInterface`](#readablestreaminterface) for PHP's stream resources. - -This can be used to represent a read-only resource like a file stream opened in -readable mode or a stream such as `STDIN`: - -```php -$stream = new ReadableResourceStream(STDIN); -$stream->on('data', function ($chunk) { - echo $chunk; -}); -$stream->on('end', function () { - echo 'END'; -}); -``` - -See also [`ReadableStreamInterface`](#readablestreaminterface) for more details. - -The first parameter given to the constructor MUST be a valid stream resource -that is opened in reading mode (e.g. `fopen()` mode `r`). -Otherwise, it will throw an `InvalidArgumentException`: - -```php -// throws InvalidArgumentException -$stream = new ReadableResourceStream(false); -``` - -See also the [`DuplexResourceStream`](#readableresourcestream) for read-and-write -stream resources otherwise. - -Internally, this class tries to enable non-blocking mode on the stream resource -which may not be supported for all stream resources. -Most notably, this is not supported by pipes on Windows (STDIN etc.). -If this fails, it will throw a `RuntimeException`: - -```php -// throws RuntimeException on Windows -$stream = new ReadableResourceStream(STDIN); -``` - -Once the constructor is called with a valid stream resource, this class will -take care of the underlying stream resource. -You SHOULD only use its public API and SHOULD NOT interfere with the underlying -stream resource manually. - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -This class takes an optional `int|null $readChunkSize` parameter that controls -the maximum buffer size in bytes to read at once from the stream. -You can use a `null` value here in order to apply its default value. -This value SHOULD NOT be changed unless you know what you're doing. -This can be a positive number which means that up to X bytes will be read -at once from the underlying stream resource. Note that the actual number -of bytes read may be lower if the stream resource has less than X bytes -currently available. -This can be `-1` which means "read everything available" from the -underlying stream resource. -This should read until the stream resource is not readable anymore -(i.e. underlying buffer drained), note that this does not neccessarily -mean it reached EOF. - -```php -$stream = new ReadableResourceStream(STDIN, null, 8192); -``` - -> PHP bug warning: If the PHP process has explicitly been started without a - `STDIN` stream, then trying to read from `STDIN` may return data from - another stream resource. This does not happen if you start this with an empty - stream like `php test.php < /dev/null` instead of `php test.php <&-`. - See [#81](https://github.com/reactphp/stream/issues/81) for more details. - -> Changelog: As of v1.2.0 the `$loop` parameter can be omitted (or skipped with a - `null` value) to use the [default loop](https://github.com/reactphp/event-loop#loop). - -### WritableResourceStream - -The `WritableResourceStream` is a concrete implementation of the -[`WritableStreamInterface`](#writablestreaminterface) for PHP's stream resources. - -This can be used to represent a write-only resource like a file stream opened in -writable mode or a stream such as `STDOUT` or `STDERR`: - -```php -$stream = new WritableResourceStream(STDOUT); -$stream->write('hello!'); -$stream->end(); -``` - -See also [`WritableStreamInterface`](#writablestreaminterface) for more details. - -The first parameter given to the constructor MUST be a valid stream resource -that is opened for writing. -Otherwise, it will throw an `InvalidArgumentException`: - -```php -// throws InvalidArgumentException -$stream = new WritableResourceStream(false); -``` - -See also the [`DuplexResourceStream`](#readableresourcestream) for read-and-write -stream resources otherwise. - -Internally, this class tries to enable non-blocking mode on the stream resource -which may not be supported for all stream resources. -Most notably, this is not supported by pipes on Windows (STDOUT, STDERR etc.). -If this fails, it will throw a `RuntimeException`: - -```php -// throws RuntimeException on Windows -$stream = new WritableResourceStream(STDOUT); -``` - -Once the constructor is called with a valid stream resource, this class will -take care of the underlying stream resource. -You SHOULD only use its public API and SHOULD NOT interfere with the underlying -stream resource manually. - -Any `write()` calls to this class will not be performed instantly, but will -be performed asynchronously, once the EventLoop reports the stream resource is -ready to accept data. -For this, it uses an in-memory buffer string to collect all outstanding writes. -This buffer has a soft-limit applied which defines how much data it is willing -to accept before the caller SHOULD stop sending further data. - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -This class takes an optional `int|null $writeBufferSoftLimit` parameter that controls -this maximum buffer size in bytes. -You can use a `null` value here in order to apply its default value. -This value SHOULD NOT be changed unless you know what you're doing. - -```php -$stream = new WritableResourceStream(STDOUT, null, 8192); -``` - -This class takes an optional `int|null $writeChunkSize` parameter that controls -this maximum buffer size in bytes to write at once to the stream. -You can use a `null` value here in order to apply its default value. -This value SHOULD NOT be changed unless you know what you're doing. -This can be a positive number which means that up to X bytes will be written -at once to the underlying stream resource. Note that the actual number -of bytes written may be lower if the stream resource has less than X bytes -currently available. -This can be `-1` which means "write everything available" to the -underlying stream resource. - -```php -$stream = new WritableResourceStream(STDOUT, null, null, 8192); -``` - -See also [`write()`](#write) for more details. - -> Changelog: As of v1.2.0 the `$loop` parameter can be omitted (or skipped with a - `null` value) to use the [default loop](https://github.com/reactphp/event-loop#loop). - -### DuplexResourceStream - -The `DuplexResourceStream` is a concrete implementation of the -[`DuplexStreamInterface`](#duplexstreaminterface) for PHP's stream resources. - -This can be used to represent a read-and-write resource like a file stream opened -in read and write mode mode or a stream such as a TCP/IP connection: - -```php -$conn = stream_socket_client('tcp://google.com:80'); -$stream = new DuplexResourceStream($conn); -$stream->write('hello!'); -$stream->end(); -``` - -See also [`DuplexStreamInterface`](#duplexstreaminterface) for more details. - -The first parameter given to the constructor MUST be a valid stream resource -that is opened for reading *and* writing. -Otherwise, it will throw an `InvalidArgumentException`: - -```php -// throws InvalidArgumentException -$stream = new DuplexResourceStream(false); -``` - -See also the [`ReadableResourceStream`](#readableresourcestream) for read-only -and the [`WritableResourceStream`](#writableresourcestream) for write-only -stream resources otherwise. - -Internally, this class tries to enable non-blocking mode on the stream resource -which may not be supported for all stream resources. -Most notably, this is not supported by pipes on Windows (STDOUT, STDERR etc.). -If this fails, it will throw a `RuntimeException`: - -```php -// throws RuntimeException on Windows -$stream = new DuplexResourceStream(STDOUT); -``` - -Once the constructor is called with a valid stream resource, this class will -take care of the underlying stream resource. -You SHOULD only use its public API and SHOULD NOT interfere with the underlying -stream resource manually. - -This class takes an optional `LoopInterface|null $loop` parameter that can be used to -pass the event loop instance to use for this object. You can use a `null` value -here in order to use the [default loop](https://github.com/reactphp/event-loop#loop). -This value SHOULD NOT be given unless you're sure you want to explicitly use a -given event loop instance. - -This class takes an optional `int|null $readChunkSize` parameter that controls -the maximum buffer size in bytes to read at once from the stream. -You can use a `null` value here in order to apply its default value. -This value SHOULD NOT be changed unless you know what you're doing. -This can be a positive number which means that up to X bytes will be read -at once from the underlying stream resource. Note that the actual number -of bytes read may be lower if the stream resource has less than X bytes -currently available. -This can be `-1` which means "read everything available" from the -underlying stream resource. -This should read until the stream resource is not readable anymore -(i.e. underlying buffer drained), note that this does not neccessarily -mean it reached EOF. - -```php -$conn = stream_socket_client('tcp://google.com:80'); -$stream = new DuplexResourceStream($conn, null, 8192); -``` - -Any `write()` calls to this class will not be performed instantly, but will -be performed asynchronously, once the EventLoop reports the stream resource is -ready to accept data. -For this, it uses an in-memory buffer string to collect all outstanding writes. -This buffer has a soft-limit applied which defines how much data it is willing -to accept before the caller SHOULD stop sending further data. - -This class takes another optional `WritableStreamInterface|null $buffer` parameter -that controls this write behavior of this stream. -You can use a `null` value here in order to apply its default value. -This value SHOULD NOT be changed unless you know what you're doing. - -If you want to change the write buffer soft limit, you can pass an instance of -[`WritableResourceStream`](#writableresourcestream) like this: - -```php -$conn = stream_socket_client('tcp://google.com:80'); -$buffer = new WritableResourceStream($conn, null, 8192); -$stream = new DuplexResourceStream($conn, null, null, $buffer); -``` - -See also [`WritableResourceStream`](#writableresourcestream) for more details. - -> Changelog: As of v1.2.0 the `$loop` parameter can be omitted (or skipped with a - `null` value) to use the [default loop](https://github.com/reactphp/event-loop#loop). - -### ThroughStream - -The `ThroughStream` implements the -[`DuplexStreamInterface`](#duplexstreaminterface) and will simply pass any data -you write to it through to its readable end. - -```php -$through = new ThroughStream(); -$through->on('data', $this->expectCallableOnceWith('hello')); - -$through->write('hello'); -``` - -Similarly, the [`end()` method](#end) will end the stream and emit an -[`end` event](#end-event) and then [`close()`](#close-1) the stream. -The [`close()` method](#close-1) will close the stream and emit a -[`close` event](#close-event). -Accordingly, this is can also be used in a [`pipe()`](#pipe) context like this: - -```php -$through = new ThroughStream(); -$source->pipe($through)->pipe($dest); -``` - -Optionally, its constructor accepts any callable function which will then be -used to *filter* any data written to it. This function receives a single data -argument as passed to the writable side and must return the data as it will be -passed to its readable end: - -```php -$through = new ThroughStream('strtoupper'); -$source->pipe($through)->pipe($dest); -``` - -Note that this class makes no assumptions about any data types. This can be -used to convert data, for example for transforming any structured data into -a newline-delimited JSON (NDJSON) stream like this: - -```php -$through = new ThroughStream(function ($data) { - return json_encode($data) . PHP_EOL; -}); -$through->on('data', $this->expectCallableOnceWith("[2, true]\n")); - -$through->write(array(2, true)); -``` - -The callback function is allowed to throw an `Exception`. In this case, -the stream will emit an `error` event and then [`close()`](#close-1) the stream. - -```php -$through = new ThroughStream(function ($data) { - if (!is_string($data)) { - throw new \UnexpectedValueException('Only strings allowed'); - } - return $data; -}); -$through->on('error', $this->expectCallableOnce())); -$through->on('close', $this->expectCallableOnce())); -$through->on('data', $this->expectCallableNever())); - -$through->write(2); -``` - -### CompositeStream - -The `CompositeStream` implements the -[`DuplexStreamInterface`](#duplexstreaminterface) and can be used to create a -single duplex stream from two individual streams implementing -[`ReadableStreamInterface`](#readablestreaminterface) and -[`WritableStreamInterface`](#writablestreaminterface) respectively. - -This is useful for some APIs which may require a single -[`DuplexStreamInterface`](#duplexstreaminterface) or simply because it's often -more convenient to work with a single stream instance like this: - -```php -$stdin = new ReadableResourceStream(STDIN); -$stdout = new WritableResourceStream(STDOUT); - -$stdio = new CompositeStream($stdin, $stdout); - -$stdio->on('data', function ($chunk) use ($stdio) { - $stdio->write('You said: ' . $chunk); -}); -``` - -This is a well-behaving stream which forwards all stream events from the -underlying streams and forwards all streams calls to the underlying streams. - -If you `write()` to the duplex stream, it will simply `write()` to the -writable side and return its status. - -If you `end()` the duplex stream, it will `end()` the writable side and will -`pause()` the readable side. - -If you `close()` the duplex stream, both input streams will be closed. -If either of the two input streams emits a `close` event, the duplex stream -will also close. -If either of the two input streams is already closed while constructing the -duplex stream, it will `close()` the other side and return a closed stream. - -## Usage - -The following example can be used to pipe the contents of a source file into -a destination file without having to ever read the whole file into memory: - -```php -$source = new React\Stream\ReadableResourceStream(fopen('source.txt', 'r')); -$dest = new React\Stream\WritableResourceStream(fopen('destination.txt', 'w')); - -$source->pipe($dest); -``` - -> Note that this example uses `fopen()` for illustration purposes only. - This should not be used in a truly async program because the filesystem is - inherently blocking and each call could potentially take several seconds. - See also [creating streams](#creating-streams) for more sophisticated - examples. - -## Install - -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 react/stream:^1.2 -``` - -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 8+ and HHVM. -It's *highly recommended to use PHP 7+* for this project due to its vast -performance improvements. - -## Tests - -To run the test suite, you first need to clone this repo and then install all -dependencies [through Composer](https://getcomposer.org): - -```bash -$ composer install -``` - -To run the test suite, go to the project root and run: - -```bash -$ php vendor/bin/phpunit -``` - -The test suite also contains a number of functional integration tests that rely -on a stable internet connection. -If you do not want to run these, they can simply be skipped like this: - -```bash -$ php vendor/bin/phpunit --exclude-group internet -``` - -## License - -MIT, see [LICENSE file](LICENSE). - -## More - -* See [creating streams](#creating-streams) for more information on how streams - are created in real-world applications. -* See our [users wiki](https://github.com/reactphp/react/wiki/Users) and the - [dependents on Packagist](https://packagist.org/packages/react/stream/dependents) - for a list of packages that use streams in real-world applications. diff --git a/deps/vendor/react/stream/composer.json b/deps/vendor/react/stream/composer.json deleted file mode 100644 index b235f5a50..000000000 --- a/deps/vendor/react/stream/composer.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "react/stream", - "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", - "keywords": ["event-driven", "readable", "writable", "stream", "non-blocking", "io", "pipe", "ReactPHP"], - "license": "MIT", - "authors": [ - { - "name": "Christian Lück", - "homepage": "https://clue.engineering/", - "email": "christian@clue.engineering" - }, - { - "name": "Cees-Jan Kiewiet", - "homepage": "https://wyrihaximus.net/", - "email": "reactphp@ceesjankiewiet.nl" - }, - { - "name": "Jan Sorgalla", - "homepage": "https://sorgalla.com/", - "email": "jsorgalla@gmail.com" - }, - { - "name": "Chris Boden", - "homepage": "https://cboden.dev/", - "email": "cboden@gmail.com" - } - ], - "require": { - "php": ">=5.3.8", - "react/event-loop": "^1.2", - "evenement/evenement": "^3.0 || ^2.0 || ^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", - "clue/stream-filter": "~1.2" - }, - "autoload": { - "psr-4": { - "React\\Stream\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "React\\Tests\\Stream\\": "tests" - } - } -} diff --git a/deps/vendor/ringcentral/psr7/.gitignore b/deps/vendor/ringcentral/psr7/.gitignore deleted file mode 100644 index 83ec41e24..000000000 --- a/deps/vendor/ringcentral/psr7/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -phpunit.xml -composer.phar -composer.lock -composer-test.lock -vendor/ -build/artifacts/ -artifacts/ -docs/_build -docs/*.pyc -.idea -.DS_STORE diff --git a/deps/vendor/ringcentral/psr7/.travis.yml b/deps/vendor/ringcentral/psr7/.travis.yml deleted file mode 100644 index 08f372132..000000000 --- a/deps/vendor/ringcentral/psr7/.travis.yml +++ /dev/null @@ -1,21 +0,0 @@ -language: php - -sudo: false - -install: - - travis_retry composer install --no-interaction --prefer-source - -script: make test - -matrix: - include: - - php: 5.3 - dist: precise - - php: 5.4 - - php: 5.5 - - php: 5.6 - - php: 7.0 - - php: hhvm - allow_failures: - - php: hhvm - fast_finish: true diff --git a/deps/vendor/ringcentral/psr7/CHANGELOG.md b/deps/vendor/ringcentral/psr7/CHANGELOG.md deleted file mode 100644 index 642dc9a4b..000000000 --- a/deps/vendor/ringcentral/psr7/CHANGELOG.md +++ /dev/null @@ -1,28 +0,0 @@ -# CHANGELOG - -## 1.2.0 - 2015-08-15 - -* Body as `"0"` is now properly added to a response. -* Now allowing forward seeking in CachingStream. -* Now properly parsing HTTP requests that contain proxy targets in - `parse_request`. -* functions.php is now conditionally required. -* user-info is no longer dropped when resolving URIs. - -## 1.1.0 - 2015-06-24 - -* URIs can now be relative. -* `multipart/form-data` headers are now overridden case-insensitively. -* URI paths no longer encode the following characters because they are allowed - in URIs: "(", ")", "*", "!", "'" -* A port is no longer added to a URI when the scheme is missing and no port is - present. - -## 1.0.0 - 2015-05-19 - -Initial release. - -Currently unsupported: - -- `Psr\Http\Message\ServerRequestInterface` -- `Psr\Http\Message\UploadedFileInterface` diff --git a/deps/vendor/ringcentral/psr7/Dockerfile b/deps/vendor/ringcentral/psr7/Dockerfile deleted file mode 100644 index 846e8cfe7..000000000 --- a/deps/vendor/ringcentral/psr7/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM greensheep/dockerfiles-php-5.3 -RUN apt-get update -y -RUN apt-get install -y curl -RUN curl -sS https://getcomposer.org/installer | php -RUN mv composer.phar /usr/local/bin/composer \ No newline at end of file diff --git a/deps/vendor/ringcentral/psr7/LICENSE b/deps/vendor/ringcentral/psr7/LICENSE deleted file mode 100644 index 581d95f92..000000000 --- a/deps/vendor/ringcentral/psr7/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015 Michael Dowling, https://github.com/mtdowling - -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/deps/vendor/ringcentral/psr7/Makefile b/deps/vendor/ringcentral/psr7/Makefile deleted file mode 100644 index 73a5c5b75..000000000 --- a/deps/vendor/ringcentral/psr7/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -all: clean test - -test: - vendor/bin/phpunit $(TEST) - -coverage: - vendor/bin/phpunit --coverage-html=artifacts/coverage $(TEST) - -view-coverage: - open artifacts/coverage/index.html - -clean: - rm -rf artifacts/* - -.PHONY: docker-login -docker-login: - docker run -t -i -v $(shell pwd):/opt/psr7 ringcentral-psr7 /bin/bash - -.PHONY: docker-build -docker-build: - docker build -t ringcentral-psr7 . \ No newline at end of file diff --git a/deps/vendor/ringcentral/psr7/README.md b/deps/vendor/ringcentral/psr7/README.md deleted file mode 100644 index b4a6061e7..000000000 --- a/deps/vendor/ringcentral/psr7/README.md +++ /dev/null @@ -1,587 +0,0 @@ -# PSR-7 Message Implementation - -This repository contains a partial [PSR-7](http://www.php-fig.org/psr/psr-7/) -message implementation, several stream decorators, and some helpful -functionality like query string parsing. Currently missing -ServerRequestInterface and UploadedFileInterface; a pull request for these features is welcome. - - -# Stream implementation - -This package comes with a number of stream implementations and stream -decorators. - - -## AppendStream - -`RingCentral\Psr7\AppendStream` - -Reads from multiple streams, one after the other. - -```php -use RingCentral\Psr7; - -$a = Psr7\stream_for('abc, '); -$b = Psr7\stream_for('123.'); -$composed = new Psr7\AppendStream([$a, $b]); - -$composed->addStream(Psr7\stream_for(' Above all listen to me'). - -echo $composed(); // abc, 123. Above all listen to me. -``` - - -## BufferStream - -`RingCentral\Psr7\BufferStream` - -Provides a buffer stream that can be written to to fill a buffer, and read -from to remove bytes from the buffer. - -This stream returns a "hwm" metadata value that tells upstream consumers -what the configured high water mark of the stream is, or the maximum -preferred size of the buffer. - -```php -use RingCentral\Psr7; - -// When more than 1024 bytes are in the buffer, it will begin returning -// false to writes. This is an indication that writers should slow down. -$buffer = new Psr7\BufferStream(1024); -``` - - -## CachingStream - -The CachingStream is used to allow seeking over previously read bytes on -non-seekable streams. This can be useful when transferring a non-seekable -entity body fails due to needing to rewind the stream (for example, resulting -from a redirect). Data that is read from the remote stream will be buffered in -a PHP temp stream so that previously read bytes are cached first in memory, -then on disk. - -```php -use RingCentral\Psr7; - -$original = Psr7\stream_for(fopen('http://www.google.com', 'r')); -$stream = new Psr7\CachingStream($original); - -$stream->read(1024); -echo $stream->tell(); -// 1024 - -$stream->seek(0); -echo $stream->tell(); -// 0 -``` - - -## DroppingStream - -`RingCentral\Psr7\DroppingStream` - -Stream decorator that begins dropping data once the size of the underlying -stream becomes too full. - -```php -use RingCentral\Psr7; - -// Create an empty stream -$stream = Psr7\stream_for(); - -// Start dropping data when the stream has more than 10 bytes -$dropping = new Psr7\DroppingStream($stream, 10); - -$stream->write('01234567890123456789'); -echo $stream; // 0123456789 -``` - - -## FnStream - -`RingCentral\Psr7\FnStream` - -Compose stream implementations based on a hash of functions. - -Allows for easy testing and extension of a provided stream without needing to -to create a concrete class for a simple extension point. - -```php - -use RingCentral\Psr7; - -$stream = Psr7\stream_for('hi'); -$fnStream = Psr7\FnStream::decorate($stream, [ - 'rewind' => function () use ($stream) { - echo 'About to rewind - '; - $stream->rewind(); - echo 'rewound!'; - } -]); - -$fnStream->rewind(); -// Outputs: About to rewind - rewound! -``` - - -## InflateStream - -`RingCentral\Psr7\InflateStream` - -Uses PHP's zlib.inflate filter to inflate deflate or gzipped 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, -then appends the zlib.inflate filter. The stream is then converted back -to a Guzzle stream resource to be used as a Guzzle stream. - - -## LazyOpenStream - -`RingCentral\Psr7\LazyOpenStream` - -Lazily reads or writes to a file that is opened only after an IO operation -take place on the stream. - -```php -use RingCentral\Psr7; - -$stream = new Psr7\LazyOpenStream('/path/to/file', 'r'); -// The file has not yet been opened... - -echo $stream->read(10); -// The file is opened and read from only when needed. -``` - - -## LimitStream - -`RingCentral\Psr7\LimitStream` - -LimitStream can be used to read a subset or slice of an existing stream object. -This can be useful for breaking a large file into smaller pieces to be sent in -chunks (e.g. Amazon S3's multipart upload API). - -```php -use RingCentral\Psr7; - -$original = Psr7\stream_for(fopen('/tmp/test.txt', 'r+')); -echo $original->getSize(); -// >>> 1048576 - -// Limit the size of the body to 1024 bytes and start reading from byte 2048 -$stream = new Psr7\LimitStream($original, 1024, 2048); -echo $stream->getSize(); -// >>> 1024 -echo $stream->tell(); -// >>> 0 -``` - - -## MultipartStream - -`RingCentral\Psr7\MultipartStream` - -Stream that when read returns bytes for a streaming multipart or -multipart/form-data stream. - - -## NoSeekStream - -`RingCentral\Psr7\NoSeekStream` - -NoSeekStream wraps a stream and does not allow seeking. - -```php -use RingCentral\Psr7; - -$original = Psr7\stream_for('foo'); -$noSeek = new Psr7\NoSeekStream($original); - -echo $noSeek->read(3); -// foo -var_export($noSeek->isSeekable()); -// false -$noSeek->seek(0); -var_export($noSeek->read(3)); -// NULL -``` - - -## PumpStream - -`RingCentral\Psr7\PumpStream` - -Provides a read only stream that pumps data from a PHP callable. - -When invoking the provided callable, the PumpStream will pass the amount of -data requested to read to the callable. The callable can choose to ignore -this value and return fewer or more bytes than requested. Any extra data -returned by the provided callable is buffered internally until drained using -the read() function of the PumpStream. The provided callable MUST return -false when there is no more data to read. - - -## Implementing stream decorators - -Creating a stream decorator is very easy thanks to the -`RingCentral\Psr7\StreamDecoratorTrait`. This trait provides methods that -implement `Psr\Http\Message\StreamInterface` by proxying to an underlying -stream. Just `use` the `StreamDecoratorTrait` and implement your custom -methods. - -For example, let's say we wanted to call a specific function each time the last -byte is read from a stream. This could be implemented by overriding the -`read()` method. - -```php -use Psr\Http\Message\StreamInterface; -use RingCentral\Psr7\StreamDecoratorTrait; - -class EofCallbackStream implements StreamInterface -{ - use StreamDecoratorTrait; - - private $callback; - - public function __construct(StreamInterface $stream, callable $cb) - { - $this->stream = $stream; - $this->callback = $cb; - } - - public function read($length) - { - $result = $this->stream->read($length); - - // Invoke the callback when EOF is hit. - if ($this->eof()) { - call_user_func($this->callback); - } - - return $result; - } -} -``` - -This decorator could be added to any existing stream and used like so: - -```php -use RingCentral\Psr7; - -$original = Psr7\stream_for('foo'); - -$eofStream = new EofCallbackStream($original, function () { - echo 'EOF!'; -}); - -$eofStream->read(2); -$eofStream->read(1); -// echoes "EOF!" -$eofStream->seek(0); -$eofStream->read(3); -// echoes "EOF!" -``` - - -## PHP StreamWrapper - -You can use the `RingCentral\Psr7\StreamWrapper` class if you need to use a -PSR-7 stream as a PHP stream resource. - -Use the `RingCentral\Psr7\StreamWrapper::getResource()` method to create a PHP -stream from a PSR-7 stream. - -```php -use RingCentral\Psr7\StreamWrapper; - -$stream = RingCentral\Psr7\stream_for('hello!'); -$resource = StreamWrapper::getResource($stream); -echo fread($resource, 6); // outputs hello! -``` - - -# Function API - -There are various functions available under the `RingCentral\Psr7` namespace. - - -## `function str` - -`function str(MessageInterface $message)` - -Returns the string representation of an HTTP message. - -```php -$request = new RingCentral\Psr7\Request('GET', 'http://example.com'); -echo RingCentral\Psr7\str($request); -``` - - -## `function uri_for` - -`function uri_for($uri)` - -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. - -```php -$uri = RingCentral\Psr7\uri_for('http://example.com'); -assert($uri === RingCentral\Psr7\uri_for($uri)); -``` - - -## `function stream_for` - -`function stream_for($resource = '', array $options = [])` - -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. - -```php -$stream = RingCentral\Psr7\stream_for('foo'); -$stream = RingCentral\Psr7\stream_for(fopen('/path/to/file', 'r')); - -$generator function ($bytes) { - for ($i = 0; $i < $bytes; $i++) { - yield ' '; - } -} - -$stream = RingCentral\Psr7\stream_for($generator(100)); -``` - - -## `function parse_header` - -`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)` - -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. - - -## `function copy_to_string` - -`function copy_to_string(StreamInterface $stream, $maxLen = -1)` - -Copy the contents of a stream into a string until the given number of bytes -have been read. - - -## `function copy_to_stream` - -`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_server_request` - -`function parse_server_request($message, array $serverParams = array())` - -Parses a request message string into a server-side 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 parseQuery() 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)` - -Determines the mimetype of a file by looking at its extension. - - -## `function mimetype_from_extension` - -`function mimetype_from_extension($extension)` - -Maps a file extensions to a mimetype. - - -# Static URI methods - -The `RingCentral\Psr7\Uri` class has several static methods to manipulate URIs. - - -## `RingCentral\Psr7\Uri::removeDotSegments` - -`public static function removeDotSegments($path) -> UriInterface` - -Removes dot segments from a path and returns the new path. - -See http://tools.ietf.org/html/rfc3986#section-5.2.4 - - -## `RingCentral\Psr7\Uri::resolve` - -`public static function resolve(UriInterface $base, $rel) -> UriInterface` - -Resolve a base URI with a relative URI and return a new URI. - -See http://tools.ietf.org/html/rfc3986#section-5 - - -## `RingCentral\Psr7\Uri::withQueryValue` - -`public static function withQueryValue(UriInterface $uri, $key, $value) -> UriInterface` - -Create a new URI with a specific query string value. - -Any existing query string values that exactly match the provided key are -removed and replaced with the given key value pair. - -Note: this function will convert "=" to "%3D" and "&" to "%26". - - -## `RingCentral\Psr7\Uri::withoutQueryValue` - -`public static function withoutQueryValue(UriInterface $uri, $key, $value) -> UriInterface` - -Create a new URI with a specific query string value removed. - -Any existing query string values that exactly match the provided key are -removed. - -Note: this function will convert "=" to "%3D" and "&" to "%26". - - -## `RingCentral\Psr7\Uri::fromParts` - -`public static function fromParts(array $parts) -> UriInterface` - -Create a `RingCentral\Psr7\Uri` object from a hash of `parse_url` parts. - - -# Not Implemented - -A few aspects of PSR-7 are not implemented in this project. A pull request for -any of these features is welcome: - -- `Psr\Http\Message\ServerRequestInterface` -- `Psr\Http\Message\UploadedFileInterface` diff --git a/deps/vendor/ringcentral/psr7/composer.json b/deps/vendor/ringcentral/psr7/composer.json deleted file mode 100644 index 4955053e9..000000000 --- a/deps/vendor/ringcentral/psr7/composer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "ringcentral/psr7", - "type": "library", - "description": "PSR-7 message implementation", - "keywords": ["message", "stream", "http", "uri"], - "license": "MIT", - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "require": { - "php": ">=5.3", - "psr/http-message": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "autoload": { - "psr-4": { - "RingCentral\\Psr7\\": "src/" - }, - "files": ["src/functions_include.php"] - }, - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - } -} diff --git a/deps/vendor/ringcentral/psr7/phpunit.xml.dist b/deps/vendor/ringcentral/psr7/phpunit.xml.dist deleted file mode 100644 index 500cd53a0..000000000 --- a/deps/vendor/ringcentral/psr7/phpunit.xml.dist +++ /dev/null @@ -1,17 +0,0 @@ - - - - - tests - - - - - src - - src/ - - - - diff --git a/deps/vendor/ringcentral/psr7/tests/AppendStreamTest.php b/deps/vendor/ringcentral/psr7/tests/AppendStreamTest.php deleted file mode 100644 index ac8bb9088..000000000 --- a/deps/vendor/ringcentral/psr7/tests/AppendStreamTest.php +++ /dev/null @@ -1,186 +0,0 @@ -getMockBuilder('Psr\Http\Message\StreamInterface') - ->setMethods(array('isReadable')) - ->getMockForAbstractClass(); - $s->expects($this->once()) - ->method('isReadable') - ->will($this->returnValue(false)); - $a->addStream($s); - } - - /** - * @expectedException \RuntimeException - * @expectedExceptionMessage The AppendStream can only seek with SEEK_SET - */ - public function testValidatesSeekType() - { - $a = new AppendStream(); - $a->seek(100, SEEK_CUR); - } - - /** - * @expectedException \RuntimeException - * @expectedExceptionMessage Unable to seek stream 0 of the AppendStream - */ - public function testTriesToRewindOnSeek() - { - $a = new AppendStream(); - $s = $this->getMockBuilder('Psr\Http\Message\StreamInterface') - ->setMethods(array('isReadable', 'rewind', 'isSeekable')) - ->getMockForAbstractClass(); - $s->expects($this->once()) - ->method('isReadable') - ->will($this->returnValue(true)); - $s->expects($this->once()) - ->method('isSeekable') - ->will($this->returnValue(true)); - $s->expects($this->once()) - ->method('rewind') - ->will($this->throwException(new \RuntimeException())); - $a->addStream($s); - $a->seek(10); - } - - public function testSeeksToPositionByReading() - { - $a = new AppendStream(array( - Psr7\stream_for('foo'), - Psr7\stream_for('bar'), - Psr7\stream_for('baz'), - )); - - $a->seek(3); - $this->assertEquals(3, $a->tell()); - $this->assertEquals('bar', $a->read(3)); - - $a->seek(6); - $this->assertEquals(6, $a->tell()); - $this->assertEquals('baz', $a->read(3)); - } - - public function testDetachesEachStream() - { - $s1 = Psr7\stream_for('foo'); - $s2 = Psr7\stream_for('bar'); - $a = new AppendStream(array($s1, $s2)); - $this->assertSame('foobar', (string) $a); - $a->detach(); - $this->assertSame('', (string) $a); - $this->assertSame(0, $a->getSize()); - } - - public function testClosesEachStream() - { - $s1 = Psr7\stream_for('foo'); - $a = new AppendStream(array($s1)); - $a->close(); - $this->assertSame('', (string) $a); - } - - /** - * @expectedExceptionMessage Cannot write to an AppendStream - * @expectedException \RuntimeException - */ - public function testIsNotWritable() - { - $a = new AppendStream(array(Psr7\stream_for('foo'))); - $this->assertFalse($a->isWritable()); - $this->assertTrue($a->isSeekable()); - $this->assertTrue($a->isReadable()); - $a->write('foo'); - } - - public function testDoesNotNeedStreams() - { - $a = new AppendStream(); - $this->assertEquals('', (string) $a); - } - - public function testCanReadFromMultipleStreams() - { - $a = new AppendStream(array( - Psr7\stream_for('foo'), - Psr7\stream_for('bar'), - Psr7\stream_for('baz'), - )); - $this->assertFalse($a->eof()); - $this->assertSame(0, $a->tell()); - $this->assertEquals('foo', $a->read(3)); - $this->assertEquals('bar', $a->read(3)); - $this->assertEquals('baz', $a->read(3)); - $this->assertSame('', $a->read(1)); - $this->assertTrue($a->eof()); - $this->assertSame(9, $a->tell()); - $this->assertEquals('foobarbaz', (string) $a); - } - - public function testCanDetermineSizeFromMultipleStreams() - { - $a = new AppendStream(array( - Psr7\stream_for('foo'), - Psr7\stream_for('bar') - )); - $this->assertEquals(6, $a->getSize()); - - $s = $this->getMockBuilder('Psr\Http\Message\StreamInterface') - ->setMethods(array('isSeekable', 'isReadable')) - ->getMockForAbstractClass(); - $s->expects($this->once()) - ->method('isSeekable') - ->will($this->returnValue(null)); - $s->expects($this->once()) - ->method('isReadable') - ->will($this->returnValue(true)); - $a->addStream($s); - $this->assertNull($a->getSize()); - } - - public function testCatchesExceptionsWhenCastingToString() - { - $s = $this->getMockBuilder('Psr\Http\Message\StreamInterface') - ->setMethods(array('isSeekable', 'read', 'isReadable', 'eof')) - ->getMockForAbstractClass(); - $s->expects($this->once()) - ->method('isSeekable') - ->will($this->returnValue(true)); - $s->expects($this->once()) - ->method('read') - ->will($this->throwException(new \RuntimeException('foo'))); - $s->expects($this->once()) - ->method('isReadable') - ->will($this->returnValue(true)); - $s->expects($this->any()) - ->method('eof') - ->will($this->returnValue(false)); - $a = new AppendStream(array($s)); - $this->assertFalse($a->eof()); - $this->assertSame('', (string) $a); - } - - public function testCanDetach() - { - $s = new AppendStream(); - $s->detach(); - } - - public function testReturnsEmptyMetadata() - { - $s = new AppendStream(); - $this->assertEquals(array(), $s->getMetadata()); - $this->assertNull($s->getMetadata('foo')); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/BufferStreamTest.php b/deps/vendor/ringcentral/psr7/tests/BufferStreamTest.php deleted file mode 100644 index 79f907aa2..000000000 --- a/deps/vendor/ringcentral/psr7/tests/BufferStreamTest.php +++ /dev/null @@ -1,63 +0,0 @@ -assertTrue($b->isReadable()); - $this->assertTrue($b->isWritable()); - $this->assertFalse($b->isSeekable()); - $this->assertEquals(null, $b->getMetadata('foo')); - $this->assertEquals(10, $b->getMetadata('hwm')); - $this->assertEquals(array(), $b->getMetadata()); - } - - public function testRemovesReadDataFromBuffer() - { - $b = new BufferStream(); - $this->assertEquals(3, $b->write('foo')); - $this->assertEquals(3, $b->getSize()); - $this->assertFalse($b->eof()); - $this->assertEquals('foo', $b->read(10)); - $this->assertTrue($b->eof()); - $this->assertEquals('', $b->read(10)); - } - - /** - * @expectedException \RuntimeException - * @expectedExceptionMessage Cannot determine the position of a BufferStream - */ - public function testCanCastToStringOrGetContents() - { - $b = new BufferStream(); - $b->write('foo'); - $b->write('baz'); - $this->assertEquals('foo', $b->read(3)); - $b->write('bar'); - $this->assertEquals('bazbar', (string) $b); - $b->tell(); - } - - public function testDetachClearsBuffer() - { - $b = new BufferStream(); - $b->write('foo'); - $b->detach(); - $this->assertTrue($b->eof()); - $this->assertEquals(3, $b->write('abc')); - $this->assertEquals('abc', $b->read(10)); - } - - public function testExceedingHighwaterMarkReturnsFalseButStillBuffers() - { - $b = new BufferStream(5); - $this->assertEquals(3, $b->write('hi ')); - $this->assertFalse($b->write('hello')); - $this->assertEquals('hi hello', (string) $b); - $this->assertEquals(4, $b->write('test')); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/CachingStreamTest.php b/deps/vendor/ringcentral/psr7/tests/CachingStreamTest.php deleted file mode 100644 index f394fc9a1..000000000 --- a/deps/vendor/ringcentral/psr7/tests/CachingStreamTest.php +++ /dev/null @@ -1,166 +0,0 @@ -decorated = Psr7\stream_for('testing'); - $this->body = new CachingStream($this->decorated); - } - - public function tearDown() - { - $this->decorated->close(); - $this->body->close(); - } - - public function testUsesRemoteSizeIfPossible() - { - $body = Psr7\stream_for('test'); - $caching = new CachingStream($body); - $this->assertEquals(4, $caching->getSize()); - } - - public function testReadsUntilCachedToByte() - { - $this->body->seek(5); - $this->assertEquals('n', $this->body->read(1)); - $this->body->seek(0); - $this->assertEquals('t', $this->body->read(1)); - } - - public function testCanSeekNearEndWithSeekEnd() - { - $baseStream = Psr7\stream_for(implode('', range('a', 'z'))); - $cached = new CachingStream($baseStream); - $cached->seek(1, SEEK_END); - $this->assertEquals(24, $baseStream->tell()); - $this->assertEquals('y', $cached->read(1)); - $this->assertEquals(26, $cached->getSize()); - } - - public function testCanSeekToEndWithSeekEnd() - { - $baseStream = Psr7\stream_for(implode('', range('a', 'z'))); - $cached = new CachingStream($baseStream); - $cached->seek(0, SEEK_END); - $this->assertEquals(25, $baseStream->tell()); - $this->assertEquals('z', $cached->read(1)); - $this->assertEquals(26, $cached->getSize()); - } - - public function testCanUseSeekEndWithUnknownSize() - { - $baseStream = Psr7\stream_for('testing'); - $decorated = Psr7\FnStream::decorate($baseStream, array( - 'getSize' => function () { return null; } - )); - $cached = new CachingStream($decorated); - $cached->seek(1, SEEK_END); - $this->assertEquals('ng', $cached->read(2)); - } - - public function testRewindUsesSeek() - { - $a = Psr7\stream_for('foo'); - $d = $this->getMockBuilder('RingCentral\Psr7\CachingStream') - ->setMethods(array('seek')) - ->setConstructorArgs(array($a)) - ->getMock(); - $d->expects($this->once()) - ->method('seek') - ->with(0) - ->will($this->returnValue(true)); - $d->seek(0); - } - - public function testCanSeekToReadBytes() - { - $this->assertEquals('te', $this->body->read(2)); - $this->body->seek(0); - $this->assertEquals('test', $this->body->read(4)); - $this->assertEquals(4, $this->body->tell()); - $this->body->seek(2); - $this->assertEquals(2, $this->body->tell()); - $this->body->seek(2, SEEK_CUR); - $this->assertEquals(4, $this->body->tell()); - $this->assertEquals('ing', $this->body->read(3)); - } - - public function testWritesToBufferStream() - { - $this->body->read(2); - $this->body->write('hi'); - $this->body->seek(0); - $this->assertEquals('tehiing', (string) $this->body); - } - - public function testSkipsOverwrittenBytes() - { - $decorated = Psr7\stream_for( - implode("\n", array_map(function ($n) { - return str_pad($n, 4, '0', STR_PAD_LEFT); - }, range(0, 25))) - ); - - $body = new CachingStream($decorated); - - $this->assertEquals("0000\n", Psr7\readline($body)); - $this->assertEquals("0001\n", Psr7\readline($body)); - // Write over part of the body yet to be read, so skip some bytes - $this->assertEquals(5, $body->write("TEST\n")); - $this->assertEquals(5, $this->readAttribute($body, 'skipReadBytes')); - // Read, which skips bytes, then reads - $this->assertEquals("0003\n", Psr7\readline($body)); - $this->assertEquals(0, $this->readAttribute($body, 'skipReadBytes')); - $this->assertEquals("0004\n", Psr7\readline($body)); - $this->assertEquals("0005\n", Psr7\readline($body)); - - // Overwrite part of the cached body (so don't skip any bytes) - $body->seek(5); - $this->assertEquals(5, $body->write("ABCD\n")); - $this->assertEquals(0, $this->readAttribute($body, 'skipReadBytes')); - $this->assertEquals("TEST\n", Psr7\readline($body)); - $this->assertEquals("0003\n", Psr7\readline($body)); - $this->assertEquals("0004\n", Psr7\readline($body)); - $this->assertEquals("0005\n", Psr7\readline($body)); - $this->assertEquals("0006\n", Psr7\readline($body)); - $this->assertEquals(5, $body->write("1234\n")); - $this->assertEquals(5, $this->readAttribute($body, 'skipReadBytes')); - - // Seek to 0 and ensure the overwritten bit is replaced - $body->seek(0); - $this->assertEquals("0000\nABCD\nTEST\n0003\n0004\n0005\n0006\n1234\n0008\n0009\n", $body->read(50)); - - // Ensure that casting it to a string does not include the bit that was overwritten - $this->assertContains("0000\nABCD\nTEST\n0003\n0004\n0005\n0006\n1234\n0008\n0009\n", (string) $body); - } - - public function testClosesBothStreams() - { - $s = fopen('php://temp', 'r'); - $a = Psr7\stream_for($s); - $d = new CachingStream($a); - $d->close(); - $this->assertFalse(is_resource($s)); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testEnsuresValidWhence() - { - $this->body->seek(10, -123456); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/DroppingStreamTest.php b/deps/vendor/ringcentral/psr7/tests/DroppingStreamTest.php deleted file mode 100644 index 1ae944364..000000000 --- a/deps/vendor/ringcentral/psr7/tests/DroppingStreamTest.php +++ /dev/null @@ -1,26 +0,0 @@ -assertEquals(3, $drop->write('hel')); - $this->assertEquals(2, $drop->write('lo')); - $this->assertEquals(5, $drop->getSize()); - $this->assertEquals('hello', $drop->read(5)); - $this->assertEquals(0, $drop->getSize()); - $drop->write('12345678910'); - $this->assertEquals(5, $stream->getSize()); - $this->assertEquals(5, $drop->getSize()); - $this->assertEquals('12345', (string) $drop); - $this->assertEquals(0, $drop->getSize()); - $drop->write('hello'); - $this->assertSame(0, $drop->write('test')); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/FnStreamTest.php b/deps/vendor/ringcentral/psr7/tests/FnStreamTest.php deleted file mode 100644 index def436cd9..000000000 --- a/deps/vendor/ringcentral/psr7/tests/FnStreamTest.php +++ /dev/null @@ -1,92 +0,0 @@ -seek(1); - } - - public function testProxiesToFunction() - { - $self = $this; - $s = new FnStream(array( - 'read' => function ($len) use ($self) { - $self->assertEquals(3, $len); - return 'foo'; - } - )); - - $this->assertEquals('foo', $s->read(3)); - } - - public function testCanCloseOnDestruct() - { - $called = false; - $s = new FnStream(array( - 'close' => function () use (&$called) { - $called = true; - } - )); - unset($s); - $this->assertTrue($called); - } - - public function testDoesNotRequireClose() - { - $s = new FnStream(array()); - unset($s); - } - - public function testDecoratesStream() - { - $a = Psr7\stream_for('foo'); - $b = FnStream::decorate($a, array()); - $this->assertEquals(3, $b->getSize()); - $this->assertEquals($b->isWritable(), true); - $this->assertEquals($b->isReadable(), true); - $this->assertEquals($b->isSeekable(), true); - $this->assertEquals($b->read(3), 'foo'); - $this->assertEquals($b->tell(), 3); - $this->assertEquals($a->tell(), 3); - $this->assertSame('', $a->read(1)); - $this->assertEquals($b->eof(), true); - $this->assertEquals($a->eof(), true); - $b->seek(0); - $this->assertEquals('foo', (string) $b); - $b->seek(0); - $this->assertEquals('foo', $b->getContents()); - $this->assertEquals($a->getMetadata(), $b->getMetadata()); - $b->seek(0, SEEK_END); - $b->write('bar'); - $this->assertEquals('foobar', (string) $b); - $this->assertInternalType('resource', $b->detach()); - $b->close(); - } - - public function testDecoratesWithCustomizations() - { - $called = false; - $a = Psr7\stream_for('foo'); - $b = FnStream::decorate($a, array( - 'read' => function ($len) use (&$called, $a) { - $called = true; - return $a->read($len); - } - )); - $this->assertEquals('foo', $b->read(3)); - $this->assertTrue($called); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/FunctionsTest.php b/deps/vendor/ringcentral/psr7/tests/FunctionsTest.php deleted file mode 100644 index 032fc5644..000000000 --- a/deps/vendor/ringcentral/psr7/tests/FunctionsTest.php +++ /dev/null @@ -1,604 +0,0 @@ -assertEquals('foobaz', Psr7\copy_to_string($s)); - $s->seek(0); - $this->assertEquals('foo', Psr7\copy_to_string($s, 3)); - $this->assertEquals('baz', Psr7\copy_to_string($s, 3)); - $this->assertEquals('', Psr7\copy_to_string($s)); - } - - public function testCopiesToStringStopsWhenReadFails() - { - $s1 = Psr7\stream_for('foobaz'); - $s1 = FnStream::decorate($s1, array( - 'read' => function () { return ''; } - )); - $result = Psr7\copy_to_string($s1); - $this->assertEquals('', $result); - } - - public function testCopiesToStream() - { - $s1 = Psr7\stream_for('foobaz'); - $s2 = Psr7\stream_for(''); - Psr7\copy_to_stream($s1, $s2); - $this->assertEquals('foobaz', (string) $s2); - $s2 = Psr7\stream_for(''); - $s1->seek(0); - Psr7\copy_to_stream($s1, $s2, 3); - $this->assertEquals('foo', (string) $s2); - Psr7\copy_to_stream($s1, $s2, 3); - $this->assertEquals('foobaz', (string) $s2); - } - - public function testStopsCopyToStreamWhenWriteFails() - { - $s1 = Psr7\stream_for('foobaz'); - $s2 = Psr7\stream_for(''); - $s2 = FnStream::decorate($s2, array('write' => function () { return 0; })); - Psr7\copy_to_stream($s1, $s2); - $this->assertEquals('', (string) $s2); - } - - public function testStopsCopyToSteamWhenWriteFailsWithMaxLen() - { - $s1 = Psr7\stream_for('foobaz'); - $s2 = Psr7\stream_for(''); - $s2 = FnStream::decorate($s2, array('write' => function () { return 0; })); - Psr7\copy_to_stream($s1, $s2, 10); - $this->assertEquals('', (string) $s2); - } - - public function testStopsCopyToSteamWhenReadFailsWithMaxLen() - { - $s1 = Psr7\stream_for('foobaz'); - $s1 = FnStream::decorate($s1, array('read' => function () { return ''; })); - $s2 = Psr7\stream_for(''); - Psr7\copy_to_stream($s1, $s2, 10); - $this->assertEquals('', (string) $s2); - } - - public function testReadsLines() - { - $s = Psr7\stream_for("foo\nbaz\nbar"); - $this->assertEquals("foo\n", Psr7\readline($s)); - $this->assertEquals("baz\n", Psr7\readline($s)); - $this->assertEquals("bar", Psr7\readline($s)); - } - - public function testReadsLinesUpToMaxLength() - { - $s = Psr7\stream_for("12345\n"); - $this->assertEquals("123", Psr7\readline($s, 4)); - $this->assertEquals("45\n", Psr7\readline($s)); - } - - public function testReadsLineUntilFalseReturnedFromRead() - { - $s = $this->getMockBuilder('RingCentral\Psr7\Stream') - ->setMethods(array('read', 'eof')) - ->disableOriginalConstructor() - ->getMock(); - $s->expects($this->exactly(2)) - ->method('read') - ->will($this->returnCallback(function () { - static $c = false; - if ($c) { - return false; - } - $c = true; - return 'h'; - })); - $s->expects($this->exactly(2)) - ->method('eof') - ->will($this->returnValue(false)); - $this->assertEquals("h", Psr7\readline($s)); - } - - public function testCalculatesHash() - { - $s = Psr7\stream_for('foobazbar'); - $this->assertEquals(md5('foobazbar'), Psr7\hash($s, 'md5')); - } - - /** - * @expectedException \RuntimeException - */ - public function testCalculatesHashThrowsWhenSeekFails() - { - $s = new NoSeekStream(Psr7\stream_for('foobazbar')); - $s->read(2); - Psr7\hash($s, 'md5'); - } - - public function testCalculatesHashSeeksToOriginalPosition() - { - $s = Psr7\stream_for('foobazbar'); - $s->seek(4); - $this->assertEquals(md5('foobazbar'), Psr7\hash($s, 'md5')); - $this->assertEquals(4, $s->tell()); - } - - public function testOpensFilesSuccessfully() - { - $r = Psr7\try_fopen(__FILE__, 'r'); - $this->assertInternalType('resource', $r); - fclose($r); - } - - /** - * @expectedException \RuntimeException - * @expectedExceptionMessage Unable to open /path/to/does/not/exist using mode r - */ - public function testThrowsExceptionNotWarning() - { - Psr7\try_fopen('/path/to/does/not/exist', 'r'); - } - - public function parseQueryProvider() - { - return array( - // Does not need to parse when the string is empty - array('', array()), - // Can parse mult-values items - array('q=a&q=b', array('q' => array('a', 'b'))), - // Can parse multi-valued items that use numeric indices - array('q[0]=a&q[1]=b', array('q[0]' => 'a', 'q[1]' => 'b')), - // Can parse duplicates and does not include numeric indices - array('q[]=a&q[]=b', array('q[]' => array('a', 'b'))), - // Ensures that the value of "q" is an array even though one value - array('q[]=a', array('q[]' => 'a')), - // Does not modify "." to "_" like PHP's parse_str() - array('q.a=a&q.b=b', array('q.a' => 'a', 'q.b' => 'b')), - // Can decode %20 to " " - array('q%20a=a%20b', array('q a' => 'a b')), - // Can parse funky strings with no values by assigning each to null - array('q&a', array('q' => null, 'a' => null)), - // Does not strip trailing equal signs - array('data=abc=', array('data' => 'abc=')), - // Can store duplicates without affecting other values - array('foo=a&foo=b&?µ=c', array('foo' => array('a', 'b'), '?µ' => 'c')), - // Sets value to null when no "=" is present - array('foo', array('foo' => null)), - // Preserves "0" keys. - array('0', array('0' => null)), - // Sets the value to an empty string when "=" is present - array('0=', array('0' => '')), - // Preserves falsey keys - array('var=0', array('var' => '0')), - array('a[b][c]=1&a[b][c]=2', array('a[b][c]' => array('1', '2'))), - array('a[b]=c&a[d]=e', array('a[b]' => 'c', 'a[d]' => 'e')), - // Ensure it doesn't leave things behind with repeated values - // Can parse mult-values items - array('q=a&q=b&q=c', array('q' => array('a', 'b', 'c'))), - ); - } - - /** - * @dataProvider parseQueryProvider - */ - public function testParsesQueries($input, $output) - { - $result = Psr7\parse_query($input); - $this->assertSame($output, $result); - } - - public function testDoesNotDecode() - { - $str = 'foo%20=bar'; - $data = Psr7\parse_query($str, false); - $this->assertEquals(array('foo%20' => 'bar'), $data); - } - - /** - * @dataProvider parseQueryProvider - */ - public function testParsesAndBuildsQueries($input, $output) - { - $result = Psr7\parse_query($input, false); - $this->assertSame($input, Psr7\build_query($result, false)); - } - - public function testEncodesWithRfc1738() - { - $str = Psr7\build_query(array('foo bar' => 'baz+'), PHP_QUERY_RFC1738); - $this->assertEquals('foo+bar=baz%2B', $str); - } - - public function testEncodesWithRfc3986() - { - $str = Psr7\build_query(array('foo bar' => 'baz+'), PHP_QUERY_RFC3986); - $this->assertEquals('foo%20bar=baz%2B', $str); - } - - public function testDoesNotEncode() - { - $str = Psr7\build_query(array('foo bar' => 'baz+'), false); - $this->assertEquals('foo bar=baz+', $str); - } - - public function testCanControlDecodingType() - { - $result = Psr7\parse_query('var=foo+bar', PHP_QUERY_RFC3986); - $this->assertEquals('foo+bar', $result['var']); - $result = Psr7\parse_query('var=foo+bar', PHP_QUERY_RFC1738); - $this->assertEquals('foo bar', $result['var']); - } - - public function testParsesRequestMessages() - { - $req = "GET /abc HTTP/1.0\r\nHost: foo.com\r\nFoo: Bar\r\nBaz: Bam\r\nBaz: Qux\r\n\r\nTest"; - $request = Psr7\parse_request($req); - $this->assertEquals('GET', $request->getMethod()); - $this->assertEquals('/abc', $request->getRequestTarget()); - $this->assertEquals('1.0', $request->getProtocolVersion()); - $this->assertEquals('foo.com', $request->getHeaderLine('Host')); - $this->assertEquals('Bar', $request->getHeaderLine('Foo')); - $this->assertEquals('Bam, Qux', $request->getHeaderLine('Baz')); - $this->assertEquals('Test', (string) $request->getBody()); - $this->assertEquals('http://foo.com/abc', (string) $request->getUri()); - } - - public function testParsesRequestMessagesWithHttpsScheme() - { - $req = "PUT /abc?baz=bar HTTP/1.1\r\nHost: foo.com:443\r\n\r\n"; - $request = Psr7\parse_request($req); - $this->assertEquals('PUT', $request->getMethod()); - $this->assertEquals('/abc?baz=bar', $request->getRequestTarget()); - $this->assertEquals('1.1', $request->getProtocolVersion()); - $this->assertEquals('foo.com:443', $request->getHeaderLine('Host')); - $this->assertEquals('', (string) $request->getBody()); - $this->assertEquals('https://foo.com/abc?baz=bar', (string) $request->getUri()); - } - - public function testParsesRequestMessagesWithUriWhenHostIsNotFirst() - { - $req = "PUT / HTTP/1.1\r\nFoo: Bar\r\nHost: foo.com\r\n\r\n"; - $request = Psr7\parse_request($req); - $this->assertEquals('PUT', $request->getMethod()); - $this->assertEquals('/', $request->getRequestTarget()); - $this->assertEquals('http://foo.com/', (string) $request->getUri()); - } - - public function testParsesRequestMessagesWithFullUri() - { - $req = "GET https://www.google.com:443/search?q=foobar HTTP/1.1\r\nHost: www.google.com\r\n\r\n"; - $request = Psr7\parse_request($req); - $this->assertEquals('GET', $request->getMethod()); - $this->assertEquals('https://www.google.com:443/search?q=foobar', $request->getRequestTarget()); - $this->assertEquals('1.1', $request->getProtocolVersion()); - $this->assertEquals('www.google.com', $request->getHeaderLine('Host')); - $this->assertEquals('', (string) $request->getBody()); - $this->assertEquals('https://www.google.com/search?q=foobar', (string) $request->getUri()); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testValidatesRequestMessages() - { - Psr7\parse_request("HTTP/1.1 200 OK\r\n\r\n"); - } - - public function testParsesResponseMessages() - { - $res = "HTTP/1.0 200 OK\r\nFoo: Bar\r\nBaz: Bam\r\nBaz: Qux\r\n\r\nTest"; - $response = Psr7\parse_response($res); - $this->assertEquals(200, $response->getStatusCode()); - $this->assertEquals('OK', $response->getReasonPhrase()); - $this->assertEquals('1.0', $response->getProtocolVersion()); - $this->assertEquals('Bar', $response->getHeaderLine('Foo')); - $this->assertEquals('Bam, Qux', $response->getHeaderLine('Baz')); - $this->assertEquals('Test', (string) $response->getBody()); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testValidatesResponseMessages() - { - Psr7\parse_response("GET / HTTP/1.1\r\n\r\n"); - } - - public function testDetermineMimetype() - { - $this->assertNull(Psr7\mimetype_from_extension('not-a-real-extension')); - $this->assertEquals( - 'application/json', - Psr7\mimetype_from_extension('json') - ); - $this->assertEquals( - 'image/jpeg', - Psr7\mimetype_from_filename('/tmp/images/IMG034821.JPEG') - ); - } - - public function testCreatesUriForValue() - { - $this->assertInstanceOf('RingCentral\Psr7\Uri', Psr7\uri_for('/foo')); - $this->assertInstanceOf( - 'RingCentral\Psr7\Uri', - Psr7\uri_for(new Psr7\Uri('/foo')) - ); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testValidatesUri() - { - Psr7\uri_for(array()); - } - - public function testKeepsPositionOfResource() - { - $h = fopen(__FILE__, 'r'); - fseek($h, 10); - $stream = Psr7\stream_for($h); - $this->assertEquals(10, $stream->tell()); - $stream->close(); - } - - public function testCreatesWithFactory() - { - $stream = Psr7\stream_for('foo'); - $this->assertInstanceOf('RingCentral\Psr7\Stream', $stream); - $this->assertEquals('foo', $stream->getContents()); - $stream->close(); - } - - public function testFactoryCreatesFromEmptyString() - { - $s = Psr7\stream_for(); - $this->assertInstanceOf('RingCentral\Psr7\Stream', $s); - } - - public function testFactoryCreatesFromNull() - { - $s = Psr7\stream_for(null); - $this->assertInstanceOf('RingCentral\Psr7\Stream', $s); - } - - public function testFactoryCreatesFromResource() - { - $r = fopen(__FILE__, 'r'); - $s = Psr7\stream_for($r); - $this->assertInstanceOf('RingCentral\Psr7\Stream', $s); - $this->assertSame(file_get_contents(__FILE__), (string) $s); - } - - public function testFactoryCreatesFromObjectWithToString() - { - $r = new HasToString(); - $s = Psr7\stream_for($r); - $this->assertInstanceOf('RingCentral\Psr7\Stream', $s); - $this->assertEquals('foo', (string) $s); - } - - public function testCreatePassesThrough() - { - $s = Psr7\stream_for('foo'); - $this->assertSame($s, Psr7\stream_for($s)); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testThrowsExceptionForUnknown() - { - Psr7\stream_for(new \stdClass()); - } - - public function testReturnsCustomMetadata() - { - $s = Psr7\stream_for('foo', array('metadata' => array('hwm' => 3))); - $this->assertEquals(3, $s->getMetadata('hwm')); - $this->assertArrayHasKey('hwm', $s->getMetadata()); - } - - public function testCanSetSize() - { - $s = Psr7\stream_for('', array('size' => 10)); - $this->assertEquals(10, $s->getSize()); - } - - public function testCanCreateIteratorBasedStream() - { - $a = new \ArrayIterator(array('foo', 'bar', '123')); - $p = Psr7\stream_for($a); - $this->assertInstanceOf('RingCentral\Psr7\PumpStream', $p); - $this->assertEquals('foo', $p->read(3)); - $this->assertFalse($p->eof()); - $this->assertEquals('b', $p->read(1)); - $this->assertEquals('a', $p->read(1)); - $this->assertEquals('r12', $p->read(3)); - $this->assertFalse($p->eof()); - $this->assertEquals('3', $p->getContents()); - $this->assertTrue($p->eof()); - $this->assertEquals(9, $p->tell()); - } - - public function testConvertsRequestsToStrings() - { - $request = new Psr7\Request('PUT', 'http://foo.com/hi?123', array( - 'Baz' => 'bar', - 'Qux' => ' ipsum' - ), 'hello', '1.0'); - $this->assertEquals( - "PUT /hi?123 HTTP/1.0\r\nHost: foo.com\r\nBaz: bar\r\nQux: ipsum\r\n\r\nhello", - Psr7\str($request) - ); - } - - public function testConvertsResponsesToStrings() - { - $response = new Psr7\Response(200, array( - 'Baz' => 'bar', - 'Qux' => ' ipsum' - ), 'hello', '1.0', 'FOO'); - $this->assertEquals( - "HTTP/1.0 200 FOO\r\nBaz: bar\r\nQux: ipsum\r\n\r\nhello", - Psr7\str($response) - ); - } - - public function parseParamsProvider() - { - $res1 = array( - array( - '', - 'rel' => 'front', - 'type' => 'image/jpeg', - ), - array( - '', - 'rel' => 'back', - 'type' => 'image/jpeg', - ), - ); - return array( - array( - '; rel="front"; type="image/jpeg", ; rel=back; type="image/jpeg"', - $res1 - ), - array( - '; rel="front"; type="image/jpeg",; rel=back; type="image/jpeg"', - $res1 - ), - array( - 'foo="baz"; bar=123, boo, test="123", foobar="foo;bar"', - array( - array('foo' => 'baz', 'bar' => '123'), - array('boo'), - array('test' => '123'), - array('foobar' => 'foo;bar') - ) - ), - array( - '; rel="side"; type="image/jpeg",; rel=side; type="image/jpeg"', - array( - array('', 'rel' => 'side', 'type' => 'image/jpeg'), - array('', 'rel' => 'side', 'type' => 'image/jpeg') - ) - ), - array( - '', - array() - ) - ); - } - /** - * @dataProvider parseParamsProvider - */ - public function testParseParams($header, $result) - { - $this->assertEquals($result, Psr7\parse_header($header)); - } - - public function testParsesArrayHeaders() - { - $header = array('a, b', 'c', 'd, e'); - $this->assertEquals(array('a', 'b', 'c', 'd', 'e'), Psr7\normalize_header($header)); - } - - public function testRewindsBody() - { - $body = Psr7\stream_for('abc'); - $res = new Psr7\Response(200, array(), $body); - Psr7\rewind_body($res); - $this->assertEquals(0, $body->tell()); - $body->rewind(1); - Psr7\rewind_body($res); - $this->assertEquals(0, $body->tell()); - } - - /** - * @expectedException \RuntimeException - */ - public function testThrowsWhenBodyCannotBeRewound() - { - $body = Psr7\stream_for('abc'); - $body->read(1); - $body = FnStream::decorate($body, array( - 'rewind' => function () { throw new \RuntimeException('a'); } - )); - $res = new Psr7\Response(200, array(), $body); - Psr7\rewind_body($res); - } - - public function testCanModifyRequestWithUri() - { - $r1 = new Psr7\Request('GET', 'http://foo.com'); - $r2 = Psr7\modify_request($r1, array( - 'uri' => new Psr7\Uri('http://www.foo.com') - )); - $this->assertEquals('http://www.foo.com', (string) $r2->getUri()); - $this->assertEquals('www.foo.com', (string) $r2->getHeaderLine('host')); - } - - public function testCanModifyRequestWithCaseInsensitiveHeader() - { - $r1 = new Psr7\Request('GET', 'http://foo.com', array('User-Agent' => 'foo')); - $r2 = Psr7\modify_request($r1, array('set_headers' => array('User-agent' => 'bar'))); - $this->assertEquals('bar', $r2->getHeaderLine('User-Agent')); - $this->assertEquals('bar', $r2->getHeaderLine('User-agent')); - } - - public function testReturnsAsIsWhenNoChanges() - { - $request = new Psr7\Request('GET', 'http://foo.com'); - $this->assertSame($request, Psr7\modify_request($request, array())); - } - - public function testReturnsUriAsIsWhenNoChanges() - { - $r1 = new Psr7\Request('GET', 'http://foo.com'); - $r2 = Psr7\modify_request($r1, array('set_headers' => array('foo' => 'bar'))); - $this->assertNotSame($r1, $r2); - $this->assertEquals('bar', $r2->getHeaderLine('foo')); - } - - public function testRemovesHeadersFromMessage() - { - $r1 = new Psr7\Request('GET', 'http://foo.com', array('foo' => 'bar')); - $r2 = Psr7\modify_request($r1, array('remove_headers' => array('foo'))); - $this->assertNotSame($r1, $r2); - $this->assertFalse($r2->hasHeader('foo')); - } - - public function testAddsQueryToUri() - { - $r1 = new Psr7\Request('GET', 'http://foo.com'); - $r2 = Psr7\modify_request($r1, array('query' => 'foo=bar')); - $this->assertNotSame($r1, $r2); - $this->assertEquals('foo=bar', $r2->getUri()->getQuery()); - } - - public function testServerRequestWithServerParams() - { - $requestString = "GET /abc HTTP/1.1\r\nHost: foo.com\r\n\r\n"; - $request = Psr7\parse_server_request($requestString); - - $this->assertEquals(array(), $request->getServerParams()); - } - - public function testServerRequestWithoutServerParams() - { - $requestString = "GET /abc HTTP/1.1\r\nHost: foo.com\r\n\r\n"; - $serverParams = array('server_address' => '127.0.0.1', 'server_port' => 80); - - $request = Psr7\parse_server_request($requestString, $serverParams); - - $this->assertEquals(array('server_address' => '127.0.0.1', 'server_port' => 80), $request->getServerParams()); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/InflateStreamTest.php b/deps/vendor/ringcentral/psr7/tests/InflateStreamTest.php deleted file mode 100644 index cd699eb34..000000000 --- a/deps/vendor/ringcentral/psr7/tests/InflateStreamTest.php +++ /dev/null @@ -1,21 +0,0 @@ -assertEquals('test', (string) $b); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/LazyOpenStreamTest.php b/deps/vendor/ringcentral/psr7/tests/LazyOpenStreamTest.php deleted file mode 100644 index ca0c18e78..000000000 --- a/deps/vendor/ringcentral/psr7/tests/LazyOpenStreamTest.php +++ /dev/null @@ -1,64 +0,0 @@ -fname = tempnam('/tmp', 'tfile'); - - if (file_exists($this->fname)) { - unlink($this->fname); - } - } - - public function tearDown() - { - if (file_exists($this->fname)) { - unlink($this->fname); - } - } - - public function testOpensLazily() - { - $l = new LazyOpenStream($this->fname, 'w+'); - $l->write('foo'); - $this->assertInternalType('array', $l->getMetadata()); - $this->assertFileExists($this->fname); - $this->assertEquals('foo', file_get_contents($this->fname)); - $this->assertEquals('foo', (string) $l); - } - - public function testProxiesToFile() - { - file_put_contents($this->fname, 'foo'); - $l = new LazyOpenStream($this->fname, 'r'); - $this->assertEquals('foo', $l->read(4)); - $this->assertTrue($l->eof()); - $this->assertEquals(3, $l->tell()); - $this->assertTrue($l->isReadable()); - $this->assertTrue($l->isSeekable()); - $this->assertFalse($l->isWritable()); - $l->seek(1); - $this->assertEquals('oo', $l->getContents()); - $this->assertEquals('foo', (string) $l); - $this->assertEquals(3, $l->getSize()); - $this->assertInternalType('array', $l->getMetadata()); - $l->close(); - } - - public function testDetachesUnderlyingStream() - { - file_put_contents($this->fname, 'foo'); - $l = new LazyOpenStream($this->fname, 'r'); - $r = $l->detach(); - $this->assertInternalType('resource', $r); - fseek($r, 0); - $this->assertEquals('foo', stream_get_contents($r)); - fclose($r); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/LimitStreamTest.php b/deps/vendor/ringcentral/psr7/tests/LimitStreamTest.php deleted file mode 100644 index 7053300ee..000000000 --- a/deps/vendor/ringcentral/psr7/tests/LimitStreamTest.php +++ /dev/null @@ -1,166 +0,0 @@ -decorated = Psr7\stream_for(fopen(__FILE__, 'r')); - $this->body = new LimitStream($this->decorated, 10, 3); - } - - public function testReturnsSubset() - { - $body = new LimitStream(Psr7\stream_for('foo'), -1, 1); - $this->assertEquals('oo', (string) $body); - $this->assertTrue($body->eof()); - $body->seek(0); - $this->assertFalse($body->eof()); - $this->assertEquals('oo', $body->read(100)); - $this->assertSame('', $body->read(1)); - $this->assertTrue($body->eof()); - } - - public function testReturnsSubsetWhenCastToString() - { - $body = Psr7\stream_for('foo_baz_bar'); - $limited = new LimitStream($body, 3, 4); - $this->assertEquals('baz', (string) $limited); - } - - /** - * @expectedException \RuntimeException - * @expectedExceptionMessage Unable to seek to stream position 10 with whence 0 - */ - public function testEnsuresPositionCanBeekSeekedTo() - { - new LimitStream(Psr7\stream_for(''), 0, 10); - } - - public function testReturnsSubsetOfEmptyBodyWhenCastToString() - { - $body = Psr7\stream_for('01234567891234'); - $limited = new LimitStream($body, 0, 10); - $this->assertEquals('', (string) $limited); - } - - public function testReturnsSpecificSubsetOBodyWhenCastToString() - { - $body = Psr7\stream_for('0123456789abcdef'); - $limited = new LimitStream($body, 3, 10); - $this->assertEquals('abc', (string) $limited); - } - - public function testSeeksWhenConstructed() - { - $this->assertEquals(0, $this->body->tell()); - $this->assertEquals(3, $this->decorated->tell()); - } - - public function testAllowsBoundedSeek() - { - $this->body->seek(100); - $this->assertEquals(10, $this->body->tell()); - $this->assertEquals(13, $this->decorated->tell()); - $this->body->seek(0); - $this->assertEquals(0, $this->body->tell()); - $this->assertEquals(3, $this->decorated->tell()); - try { - $this->body->seek(-10); - $this->fail(); - } catch (\RuntimeException $e) {} - $this->assertEquals(0, $this->body->tell()); - $this->assertEquals(3, $this->decorated->tell()); - $this->body->seek(5); - $this->assertEquals(5, $this->body->tell()); - $this->assertEquals(8, $this->decorated->tell()); - // Fail - try { - $this->body->seek(1000, SEEK_END); - $this->fail(); - } catch (\RuntimeException $e) {} - } - - public function testReadsOnlySubsetOfData() - { - $data = $this->body->read(100); - $this->assertEquals(10, strlen($data)); - $this->assertSame('', $this->body->read(1000)); - - $this->body->setOffset(10); - $newData = $this->body->read(100); - $this->assertEquals(10, strlen($newData)); - $this->assertNotSame($data, $newData); - } - - /** - * @expectedException \RuntimeException - * @expectedExceptionMessage Could not seek to stream offset 2 - */ - public function testThrowsWhenCurrentGreaterThanOffsetSeek() - { - $a = Psr7\stream_for('foo_bar'); - $b = new NoSeekStream($a); - $c = new LimitStream($b); - $a->getContents(); - $c->setOffset(2); - } - - public function testCanGetContentsWithoutSeeking() - { - $a = Psr7\stream_for('foo_bar'); - $b = new NoSeekStream($a); - $c = new LimitStream($b); - $this->assertEquals('foo_bar', $c->getContents()); - } - - public function testClaimsConsumedWhenReadLimitIsReached() - { - $this->assertFalse($this->body->eof()); - $this->body->read(1000); - $this->assertTrue($this->body->eof()); - } - - public function testContentLengthIsBounded() - { - $this->assertEquals(10, $this->body->getSize()); - } - - public function testGetContentsIsBasedOnSubset() - { - $body = new LimitStream(Psr7\stream_for('foobazbar'), 3, 3); - $this->assertEquals('baz', $body->getContents()); - } - - public function testReturnsNullIfSizeCannotBeDetermined() - { - $a = new FnStream(array( - 'getSize' => function () { return null; }, - 'tell' => function () { return 0; }, - )); - $b = new LimitStream($a); - $this->assertNull($b->getSize()); - } - - public function testLengthLessOffsetWhenNoLimitSize() - { - $a = Psr7\stream_for('foo_bar'); - $b = new LimitStream($a, -1, 4); - $this->assertEquals(3, $b->getSize()); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/MultipartStreamTest.php b/deps/vendor/ringcentral/psr7/tests/MultipartStreamTest.php deleted file mode 100644 index 22edea418..000000000 --- a/deps/vendor/ringcentral/psr7/tests/MultipartStreamTest.php +++ /dev/null @@ -1,214 +0,0 @@ -assertNotEmpty($b->getBoundary()); - } - - public function testCanProvideBoundary() - { - $b = new MultipartStream(array(), 'foo'); - $this->assertEquals('foo', $b->getBoundary()); - } - - public function testIsNotWritable() - { - $b = new MultipartStream(); - $this->assertFalse($b->isWritable()); - } - - public function testCanCreateEmptyStream() - { - $b = new MultipartStream(); - $boundary = $b->getBoundary(); - $this->assertSame("--{$boundary}--\r\n", $b->getContents()); - $this->assertSame(strlen($boundary) + 6, $b->getSize()); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testValidatesFilesArrayElement() - { - new MultipartStream(array(array('foo' => 'bar'))); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testEnsuresFileHasName() - { - new MultipartStream(array(array('contents' => 'bar'))); - } - - public function testSerializesFields() - { - $b = new MultipartStream(array( - array( - 'name' => 'foo', - 'contents' => 'bar' - ), - array( - 'name' => 'baz', - 'contents' => 'bam' - ) - ), 'boundary'); - $this->assertEquals( - "--boundary\r\nContent-Disposition: form-data; name=\"foo\"\r\nContent-Length: 3\r\n\r\n" - . "bar\r\n--boundary\r\nContent-Disposition: form-data; name=\"baz\"\r\nContent-Length: 3" - . "\r\n\r\nbam\r\n--boundary--\r\n", (string) $b); - } - - public function testSerializesFiles() - { - $f1 = Psr7\FnStream::decorate(Psr7\stream_for('foo'), array( - 'getMetadata' => function () { - return '/foo/bar.txt'; - } - )); - - $f2 = Psr7\FnStream::decorate(Psr7\stream_for('baz'), array( - 'getMetadata' => function () { - return '/foo/baz.jpg'; - } - )); - - $f3 = Psr7\FnStream::decorate(Psr7\stream_for('bar'), array( - 'getMetadata' => function () { - return '/foo/bar.gif'; - } - )); - - $b = new MultipartStream(array( - array( - 'name' => 'foo', - 'contents' => $f1 - ), - array( - 'name' => 'qux', - 'contents' => $f2 - ), - array( - 'name' => 'qux', - 'contents' => $f3 - ), - ), 'boundary'); - - $expected = <<assertEquals($expected, str_replace("\r", '', $b)); - } - - public function testSerializesFilesWithCustomHeaders() - { - $f1 = Psr7\FnStream::decorate(Psr7\stream_for('foo'), array( - 'getMetadata' => function () { - return '/foo/bar.txt'; - } - )); - - $b = new MultipartStream(array( - array( - 'name' => 'foo', - 'contents' => $f1, - 'headers' => array( - 'x-foo' => 'bar', - 'content-disposition' => 'custom' - ) - ) - ), 'boundary'); - - $expected = <<assertEquals($expected, str_replace("\r", '', $b)); - } - - public function testSerializesFilesWithCustomHeadersAndMultipleValues() - { - $f1 = Psr7\FnStream::decorate(Psr7\stream_for('foo'), array( - 'getMetadata' => function () { - return '/foo/bar.txt'; - } - )); - - $f2 = Psr7\FnStream::decorate(Psr7\stream_for('baz'), array( - 'getMetadata' => function () { - return '/foo/baz.jpg'; - } - )); - - $b = new MultipartStream(array( - array( - 'name' => 'foo', - 'contents' => $f1, - 'headers' => array( - 'x-foo' => 'bar', - 'content-disposition' => 'custom' - ) - ), - array( - 'name' => 'foo', - 'contents' => $f2, - 'headers' => array('cOntenT-Type' => 'custom'), - ) - ), 'boundary'); - - $expected = <<assertEquals($expected, str_replace("\r", '', $b)); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/NoSeekStreamTest.php b/deps/vendor/ringcentral/psr7/tests/NoSeekStreamTest.php deleted file mode 100644 index a831789b7..000000000 --- a/deps/vendor/ringcentral/psr7/tests/NoSeekStreamTest.php +++ /dev/null @@ -1,40 +0,0 @@ -getMockBuilder('Psr\Http\Message\StreamInterface') - ->setMethods(array('isSeekable', 'seek')) - ->getMockForAbstractClass(); - $s->expects($this->never())->method('seek'); - $s->expects($this->never())->method('isSeekable'); - $wrapped = new NoSeekStream($s); - $this->assertFalse($wrapped->isSeekable()); - $wrapped->seek(2); - } - - /** - * @expectedException \RuntimeException - * @expectedExceptionMessage Cannot write to a non-writable stream - */ - public function testHandlesClose() - { - $s = Psr7\stream_for('foo'); - $wrapped = new NoSeekStream($s); - $wrapped->close(); - $wrapped->write('foo'); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/PumpStreamTest.php b/deps/vendor/ringcentral/psr7/tests/PumpStreamTest.php deleted file mode 100644 index 6b146e159..000000000 --- a/deps/vendor/ringcentral/psr7/tests/PumpStreamTest.php +++ /dev/null @@ -1,72 +0,0 @@ - array('foo' => 'bar'), - 'size' => 100 - )); - - $this->assertEquals('bar', $p->getMetadata('foo')); - $this->assertEquals(array('foo' => 'bar'), $p->getMetadata()); - $this->assertEquals(100, $p->getSize()); - } - - public function testCanReadFromCallable() - { - $p = Psr7\stream_for(function ($size) { - return 'a'; - }); - $this->assertEquals('a', $p->read(1)); - $this->assertEquals(1, $p->tell()); - $this->assertEquals('aaaaa', $p->read(5)); - $this->assertEquals(6, $p->tell()); - } - - public function testStoresExcessDataInBuffer() - { - $called = array(); - $p = Psr7\stream_for(function ($size) use (&$called) { - $called[] = $size; - return 'abcdef'; - }); - $this->assertEquals('a', $p->read(1)); - $this->assertEquals('b', $p->read(1)); - $this->assertEquals('cdef', $p->read(4)); - $this->assertEquals('abcdefabc', $p->read(9)); - $this->assertEquals(array(1, 9, 3), $called); - } - - public function testInifiniteStreamWrappedInLimitStream() - { - $p = Psr7\stream_for(function () { return 'a'; }); - $s = new LimitStream($p, 5); - $this->assertEquals('aaaaa', (string) $s); - } - - public function testDescribesCapabilities() - { - $p = Psr7\stream_for(function () {}); - $this->assertTrue($p->isReadable()); - $this->assertFalse($p->isSeekable()); - $this->assertFalse($p->isWritable()); - $this->assertNull($p->getSize()); - $this->assertEquals('', $p->getContents()); - $this->assertEquals('', (string) $p); - $p->close(); - $this->assertEquals('', $p->read(10)); - $this->assertTrue($p->eof()); - - try { - $this->assertFalse($p->write('aa')); - $this->fail(); - } catch (\RuntimeException $e) {} - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/RequestTest.php b/deps/vendor/ringcentral/psr7/tests/RequestTest.php deleted file mode 100644 index ad6f0cb52..000000000 --- a/deps/vendor/ringcentral/psr7/tests/RequestTest.php +++ /dev/null @@ -1,157 +0,0 @@ -assertEquals('/', (string) $r->getUri()); - } - - public function testRequestUriMayBeUri() - { - $uri = new Uri('/'); - $r = new Request('GET', $uri); - $this->assertSame($uri, $r->getUri()); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testValidateRequestUri() - { - new Request('GET', true); - } - - public function testCanConstructWithBody() - { - $r = new Request('GET', '/', array(), 'baz'); - $this->assertEquals('baz', (string) $r->getBody()); - } - - public function testCapitalizesMethod() - { - $r = new Request('get', '/'); - $this->assertEquals('GET', $r->getMethod()); - } - - public function testCapitalizesWithMethod() - { - $r = new Request('GET', '/'); - $this->assertEquals('PUT', $r->withMethod('put')->getMethod()); - } - - public function testWithUri() - { - $r1 = new Request('GET', '/'); - $u1 = $r1->getUri(); - $u2 = new Uri('http://www.example.com'); - $r2 = $r1->withUri($u2); - $this->assertNotSame($r1, $r2); - $this->assertSame($u2, $r2->getUri()); - $this->assertSame($u1, $r1->getUri()); - } - - public function testSameInstanceWhenSameUri() - { - $r1 = new Request('GET', 'http://foo.com'); - $r2 = $r1->withUri($r1->getUri()); - $this->assertSame($r1, $r2); - } - - public function testWithRequestTarget() - { - $r1 = new Request('GET', '/'); - $r2 = $r1->withRequestTarget('*'); - $this->assertEquals('*', $r2->getRequestTarget()); - $this->assertEquals('/', $r1->getRequestTarget()); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testRequestTargetDoesNotAllowSpaces() - { - $r1 = new Request('GET', '/'); - $r1->withRequestTarget('/foo bar'); - } - - public function testRequestTargetDefaultsToSlash() - { - $r1 = new Request('GET', ''); - $this->assertEquals('/', $r1->getRequestTarget()); - $r2 = new Request('GET', '*'); - $this->assertEquals('*', $r2->getRequestTarget()); - $r3 = new Request('GET', 'http://foo.com/bar baz/'); - $this->assertEquals('/bar%20baz/', $r3->getRequestTarget()); - } - - public function testBuildsRequestTarget() - { - $r1 = new Request('GET', 'http://foo.com/baz?bar=bam'); - $this->assertEquals('/baz?bar=bam', $r1->getRequestTarget()); - } - - public function testHostIsAddedFirst() - { - $r = new Request('GET', 'http://foo.com/baz?bar=bam', array('Foo' => 'Bar')); - $this->assertEquals(array( - 'Host' => array('foo.com'), - 'Foo' => array('Bar') - ), $r->getHeaders()); - } - - public function testCanGetHeaderAsCsv() - { - $r = new Request('GET', 'http://foo.com/baz?bar=bam', array( - 'Foo' => array('a', 'b', 'c') - )); - $this->assertEquals('a, b, c', $r->getHeaderLine('Foo')); - $this->assertEquals('', $r->getHeaderLine('Bar')); - } - - public function testHostIsNotOverwrittenWhenPreservingHost() - { - $r = new Request('GET', 'http://foo.com/baz?bar=bam', array('Host' => 'a.com')); - $this->assertEquals(array('Host' => array('a.com')), $r->getHeaders()); - $r2 = $r->withUri(new Uri('http://www.foo.com/bar'), true); - $this->assertEquals('a.com', $r2->getHeaderLine('Host')); - } - - public function testOverridesHostWithUri() - { - $r = new Request('GET', 'http://foo.com/baz?bar=bam'); - $this->assertEquals(array('Host' => array('foo.com')), $r->getHeaders()); - $r2 = $r->withUri(new Uri('http://www.baz.com/bar')); - $this->assertEquals('www.baz.com', $r2->getHeaderLine('Host')); - } - - public function testAggregatesHeaders() - { - $r = new Request('GET', 'http://foo.com', array( - 'ZOO' => 'zoobar', - 'zoo' => array('foobar', 'zoobar') - )); - $this->assertEquals('zoobar, foobar, zoobar', $r->getHeaderLine('zoo')); - } - - public function testAddsPortToHeader() - { - $r = new Request('GET', 'http://foo.com:8124/bar'); - $this->assertEquals('foo.com:8124', $r->getHeaderLine('host')); - } - - public function testAddsPortToHeaderAndReplacePreviousPort() - { - $r = new Request('GET', 'http://foo.com:8124/bar'); - $r = $r->withUri(new Uri('http://foo.com:8125/bar')); - $this->assertEquals('foo.com:8125', $r->getHeaderLine('host')); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/ResponseTest.php b/deps/vendor/ringcentral/psr7/tests/ResponseTest.php deleted file mode 100644 index 52b7ba12b..000000000 --- a/deps/vendor/ringcentral/psr7/tests/ResponseTest.php +++ /dev/null @@ -1,154 +0,0 @@ -assertSame(200, $r->getStatusCode()); - $this->assertEquals('OK', $r->getReasonPhrase()); - } - - public function testCanGiveCustomReason() - { - $r = new Response(200, array(), null, '1.1', 'bar'); - $this->assertEquals('bar', $r->getReasonPhrase()); - } - - public function testCanGiveCustomProtocolVersion() - { - $r = new Response(200, array(), null, '1000'); - $this->assertEquals('1000', $r->getProtocolVersion()); - } - - public function testCanCreateNewResponseWithStatusAndNoReason() - { - $r = new Response(200); - $r2 = $r->withStatus(201); - $this->assertEquals(200, $r->getStatusCode()); - $this->assertEquals('OK', $r->getReasonPhrase()); - $this->assertEquals(201, $r2->getStatusCode()); - $this->assertEquals('Created', $r2->getReasonPhrase()); - } - - public function testCanCreateNewResponseWithStatusAndReason() - { - $r = new Response(200); - $r2 = $r->withStatus(201, 'Foo'); - $this->assertEquals(200, $r->getStatusCode()); - $this->assertEquals('OK', $r->getReasonPhrase()); - $this->assertEquals(201, $r2->getStatusCode()); - $this->assertEquals('Foo', $r2->getReasonPhrase()); - } - - public function testCreatesResponseWithAddedHeaderArray() - { - $r = new Response(); - $r2 = $r->withAddedHeader('foo', array('baz', 'bar')); - $this->assertFalse($r->hasHeader('foo')); - $this->assertEquals('baz, bar', $r2->getHeaderLine('foo')); - } - - public function testReturnsIdentityWhenRemovingMissingHeader() - { - $r = new Response(); - $this->assertSame($r, $r->withoutHeader('foo')); - } - - public function testAlwaysReturnsBody() - { - $r = new Response(); - $this->assertInstanceOf('Psr\Http\Message\StreamInterface', $r->getBody()); - } - - public function testCanSetHeaderAsArray() - { - $r = new Response(200, array( - 'foo' => array('baz ', ' bar ') - )); - $this->assertEquals('baz, bar', $r->getHeaderLine('foo')); - $this->assertEquals(array('baz', 'bar'), $r->getHeader('foo')); - } - - public function testSameInstanceWhenSameBody() - { - $r = new Response(200, array(), 'foo'); - $b = $r->getBody(); - $this->assertSame($r, $r->withBody($b)); - } - - public function testNewInstanceWhenNewBody() - { - $r = new Response(200, array(), 'foo'); - $b2 = Psr7\stream_for('abc'); - $this->assertNotSame($r, $r->withBody($b2)); - } - - public function testSameInstanceWhenSameProtocol() - { - $r = new Response(200); - $this->assertSame($r, $r->withProtocolVersion('1.1')); - } - - public function testNewInstanceWhenNewProtocol() - { - $r = new Response(200); - $this->assertNotSame($r, $r->withProtocolVersion('1.0')); - } - - public function testNewInstanceWhenRemovingHeader() - { - $r = new Response(200, array('Foo' => 'Bar')); - $r2 = $r->withoutHeader('Foo'); - $this->assertNotSame($r, $r2); - $this->assertFalse($r2->hasHeader('foo')); - } - - public function testNewInstanceWhenAddingHeader() - { - $r = new Response(200, array('Foo' => 'Bar')); - $r2 = $r->withAddedHeader('Foo', 'Baz'); - $this->assertNotSame($r, $r2); - $this->assertEquals('Bar, Baz', $r2->getHeaderLine('foo')); - } - - public function testNewInstanceWhenAddingHeaderArray() - { - $r = new Response(200, array('Foo' => 'Bar')); - $r2 = $r->withAddedHeader('Foo', array('Baz', 'Qux')); - $this->assertNotSame($r, $r2); - $this->assertEquals(array('Bar', 'Baz', 'Qux'), $r2->getHeader('foo')); - } - - public function testNewInstanceWhenAddingHeaderThatWasNotThereBefore() - { - $r = new Response(200, array('Foo' => 'Bar')); - $r2 = $r->withAddedHeader('Baz', 'Bam'); - $this->assertNotSame($r, $r2); - $this->assertEquals('Bam', $r2->getHeaderLine('Baz')); - $this->assertEquals('Bar', $r2->getHeaderLine('Foo')); - } - - public function testRemovesPreviouslyAddedHeaderOfDifferentCase() - { - $r = new Response(200, array('Foo' => 'Bar')); - $r2 = $r->withHeader('foo', 'Bam'); - $this->assertNotSame($r, $r2); - $this->assertEquals('Bam', $r2->getHeaderLine('Foo')); - } - - public function testBodyConsistent() - { - $r = new Response(200, array(), '0'); - $this->assertEquals('0', (string)$r->getBody()); - } - -} diff --git a/deps/vendor/ringcentral/psr7/tests/ServerRequestTest.php b/deps/vendor/ringcentral/psr7/tests/ServerRequestTest.php deleted file mode 100644 index 4bdfe8e28..000000000 --- a/deps/vendor/ringcentral/psr7/tests/ServerRequestTest.php +++ /dev/null @@ -1,85 +0,0 @@ -request = new ServerRequest('GET', 'http://localhost'); - } - - public function testGetNoAttributes() - { - $this->assertEquals(array(), $this->request->getAttributes()); - } - - public function testWithAttribute() - { - $request = $this->request->withAttribute('hello', 'world'); - - $this->assertNotSame($request, $this->request); - $this->assertEquals(array('hello' => 'world'), $request->getAttributes()); - } - - public function testGetAttribute() - { - $request = $this->request->withAttribute('hello', 'world'); - - $this->assertNotSame($request, $this->request); - $this->assertEquals('world', $request->getAttribute('hello')); - } - - public function testGetDefaultAttribute() - { - $request = $this->request->withAttribute('hello', 'world'); - - $this->assertNotSame($request, $this->request); - $this->assertEquals(null, $request->getAttribute('hi', null)); - } - - public function testWithoutAttribute() - { - $request = $this->request->withAttribute('hello', 'world'); - $request = $request->withAttribute('test', 'nice'); - - $request = $request->withoutAttribute('hello'); - - $this->assertNotSame($request, $this->request); - $this->assertEquals(array('test' => 'nice'), $request->getAttributes()); - } - - public function testWithCookieParams() - { - $request = $this->request->withCookieParams(array('test' => 'world')); - - $this->assertNotSame($request, $this->request); - $this->assertEquals(array('test' => 'world'), $request->getCookieParams()); - } - - public function testWithQueryParams() - { - $request = $this->request->withQueryParams(array('test' => 'world')); - - $this->assertNotSame($request, $this->request); - $this->assertEquals(array('test' => 'world'), $request->getQueryParams()); - } - - public function testWithUploadedFiles() - { - $request = $this->request->withUploadedFiles(array('test' => 'world')); - - $this->assertNotSame($request, $this->request); - $this->assertEquals(array('test' => 'world'), $request->getUploadedFiles()); - } - - public function testWithParsedBody() - { - $request = $this->request->withParsedBody(array('test' => 'world')); - - $this->assertNotSame($request, $this->request); - $this->assertEquals(array('test' => 'world'), $request->getParsedBody()); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/StreamDecoratorTraitTest.php b/deps/vendor/ringcentral/psr7/tests/StreamDecoratorTraitTest.php deleted file mode 100644 index b0c3dc5c9..000000000 --- a/deps/vendor/ringcentral/psr7/tests/StreamDecoratorTraitTest.php +++ /dev/null @@ -1,123 +0,0 @@ -c = fopen('php://temp', 'r+'); - fwrite($this->c, 'foo'); - fseek($this->c, 0); - $this->a = Psr7\stream_for($this->c); - $this->b = new Str($this->a); - } - - public function testCatchesExceptionsWhenCastingToString() - { - $s = $this->getMockBuilder('Psr\Http\Message\StreamInterface') - ->setMethods(array('read')) - ->getMockForAbstractClass(); - $s->expects($this->once()) - ->method('read') - ->will($this->throwException(new \Exception('foo'))); - $msg = ''; - set_error_handler(function ($errNo, $str) use (&$msg) { - $msg = $str; - }); - echo new Str($s); - restore_error_handler(); - $this->assertContains('foo', $msg); - } - - public function testToString() - { - $this->assertEquals('foo', (string)$this->b); - } - - public function testHasSize() - { - $this->assertEquals(3, $this->b->getSize()); - } - - public function testReads() - { - $this->assertEquals('foo', $this->b->read(10)); - } - - public function testCheckMethods() - { - $this->assertEquals($this->a->isReadable(), $this->b->isReadable()); - $this->assertEquals($this->a->isWritable(), $this->b->isWritable()); - $this->assertEquals($this->a->isSeekable(), $this->b->isSeekable()); - } - - public function testSeeksAndTells() - { - $this->b->seek(1); - $this->assertEquals(1, $this->a->tell()); - $this->assertEquals(1, $this->b->tell()); - $this->b->seek(0); - $this->assertEquals(0, $this->a->tell()); - $this->assertEquals(0, $this->b->tell()); - $this->b->seek(0, SEEK_END); - $this->assertEquals(3, $this->a->tell()); - $this->assertEquals(3, $this->b->tell()); - } - - public function testGetsContents() - { - $this->assertEquals('foo', $this->b->getContents()); - $this->assertEquals('', $this->b->getContents()); - $this->b->seek(1); - $this->assertEquals('oo', $this->b->getContents(1)); - } - - public function testCloses() - { - $this->b->close(); - $this->assertFalse(is_resource($this->c)); - } - - public function testDetaches() - { - $this->b->detach(); - $this->assertFalse($this->b->isReadable()); - } - - public function testWrapsMetadata() - { - $this->assertSame($this->b->getMetadata(), $this->a->getMetadata()); - $this->assertSame($this->b->getMetadata('uri'), $this->a->getMetadata('uri')); - } - - public function testWrapsWrites() - { - $this->b->seek(0, SEEK_END); - $this->b->write('foo'); - $this->assertEquals('foofoo', (string)$this->a); - } - - /** - * @expectedException \UnexpectedValueException - */ - public function testThrowsWithInvalidGetter() - { - $this->b->foo; - } - -} \ No newline at end of file diff --git a/deps/vendor/ringcentral/psr7/tests/StreamTest.php b/deps/vendor/ringcentral/psr7/tests/StreamTest.php deleted file mode 100644 index 550180579..000000000 --- a/deps/vendor/ringcentral/psr7/tests/StreamTest.php +++ /dev/null @@ -1,163 +0,0 @@ -assertTrue($stream->isReadable()); - $this->assertTrue($stream->isWritable()); - $this->assertTrue($stream->isSeekable()); - $this->assertEquals('php://temp', $stream->getMetadata('uri')); - $this->assertInternalType('array', $stream->getMetadata()); - $this->assertEquals(4, $stream->getSize()); - $this->assertFalse($stream->eof()); - $stream->close(); - } - - public function testStreamClosesHandleOnDestruct() - { - $handle = fopen('php://temp', 'r'); - $stream = new Stream($handle); - unset($stream); - $this->assertFalse(is_resource($handle)); - } - - public function testConvertsToString() - { - $handle = fopen('php://temp', 'w+'); - fwrite($handle, 'data'); - $stream = new Stream($handle); - $this->assertEquals('data', (string) $stream); - $this->assertEquals('data', (string) $stream); - $stream->close(); - } - - public function testGetsContents() - { - $handle = fopen('php://temp', 'w+'); - fwrite($handle, 'data'); - $stream = new Stream($handle); - $this->assertEquals('', $stream->getContents()); - $stream->seek(0); - $this->assertEquals('data', $stream->getContents()); - $this->assertEquals('', $stream->getContents()); - } - - public function testChecksEof() - { - $handle = fopen('php://temp', 'w+'); - fwrite($handle, 'data'); - $stream = new Stream($handle); - $this->assertFalse($stream->eof()); - $stream->read(4); - $this->assertTrue($stream->eof()); - $stream->close(); - } - - public function testGetSize() - { - $size = filesize(__FILE__); - $handle = fopen(__FILE__, 'r'); - $stream = new Stream($handle); - $this->assertEquals($size, $stream->getSize()); - // Load from cache - $this->assertEquals($size, $stream->getSize()); - $stream->close(); - } - - public function testEnsuresSizeIsConsistent() - { - $h = fopen('php://temp', 'w+'); - $this->assertEquals(3, fwrite($h, 'foo')); - $stream = new Stream($h); - $this->assertEquals(3, $stream->getSize()); - $this->assertEquals(4, $stream->write('test')); - $this->assertEquals(7, $stream->getSize()); - $this->assertEquals(7, $stream->getSize()); - $stream->close(); - } - - public function testProvidesStreamPosition() - { - $handle = fopen('php://temp', 'w+'); - $stream = new Stream($handle); - $this->assertEquals(0, $stream->tell()); - $stream->write('foo'); - $this->assertEquals(3, $stream->tell()); - $stream->seek(1); - $this->assertEquals(1, $stream->tell()); - $this->assertSame(ftell($handle), $stream->tell()); - $stream->close(); - } - - public function testCanDetachStream() - { - $r = fopen('php://temp', 'w+'); - $stream = new Stream($r); - $stream->write('foo'); - $this->assertTrue($stream->isReadable()); - $this->assertSame($r, $stream->detach()); - $stream->detach(); - - $this->assertFalse($stream->isReadable()); - $this->assertFalse($stream->isWritable()); - $this->assertFalse($stream->isSeekable()); - - $self = $this; - - $throws = function ($fn) use ($stream, $self) { - try { - $fn($stream); - $self->fail(); - } catch (\Exception $e) {} - }; - - $throws(function ($stream) { $stream->read(10); }); - $throws(function ($stream) { $stream->write('bar'); }); - $throws(function ($stream) { $stream->seek(10); }); - $throws(function ($stream) { $stream->tell(); }); - $throws(function ($stream) { $stream->eof(); }); - $throws(function ($stream) { $stream->getSize(); }); - $throws(function ($stream) { $stream->getContents(); }); - $this->assertSame('', (string) $stream); - $stream->close(); - } - - public function testCloseClearProperties() - { - $handle = fopen('php://temp', 'r+'); - $stream = new Stream($handle); - $stream->close(); - - $this->assertFalse($stream->isSeekable()); - $this->assertFalse($stream->isReadable()); - $this->assertFalse($stream->isWritable()); - $this->assertNull($stream->getSize()); - $this->assertEmpty($stream->getMetadata()); - } - - public function testDoesNotThrowInToString() - { - $s = \RingCentral\Psr7\stream_for('foo'); - $s = new NoSeekStream($s); - $this->assertEquals('foo', (string) $s); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/StreamWrapperTest.php b/deps/vendor/ringcentral/psr7/tests/StreamWrapperTest.php deleted file mode 100644 index dd08a83af..000000000 --- a/deps/vendor/ringcentral/psr7/tests/StreamWrapperTest.php +++ /dev/null @@ -1,100 +0,0 @@ -assertSame('foo', fread($handle, 3)); - $this->assertSame(3, ftell($handle)); - $this->assertSame(3, fwrite($handle, 'bar')); - $this->assertSame(0, fseek($handle, 0)); - $this->assertSame('foobar', fread($handle, 6)); - $this->assertSame('', fread($handle, 1)); - $this->assertTrue(feof($handle)); - - // This fails on HHVM for some reason - if (!defined('HHVM_VERSION')) { - $this->assertEquals(array( - 'dev' => 0, - 'ino' => 0, - 'mode' => 33206, - 'nlink' => 0, - 'uid' => 0, - 'gid' => 0, - 'rdev' => 0, - 'size' => 6, - 'atime' => 0, - 'mtime' => 0, - 'ctime' => 0, - 'blksize' => 0, - 'blocks' => 0, - 0 => 0, - 1 => 0, - 2 => 33206, - 3 => 0, - 4 => 0, - 5 => 0, - 6 => 0, - 7 => 6, - 8 => 0, - 9 => 0, - 10 => 0, - 11 => 0, - 12 => 0, - ), fstat($handle)); - } - - $this->assertTrue(fclose($handle)); - $this->assertSame('foobar', (string) $stream); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testValidatesStream() - { - $stream = $this->getMockBuilder('Psr\Http\Message\StreamInterface') - ->setMethods(array('isReadable', 'isWritable')) - ->getMockForAbstractClass(); - $stream->expects($this->once()) - ->method('isReadable') - ->will($this->returnValue(false)); - $stream->expects($this->once()) - ->method('isWritable') - ->will($this->returnValue(false)); - StreamWrapper::getResource($stream); - } - - /** - * @expectedException \PHPUnit_Framework_Error_Warning - */ - public function testReturnsFalseWhenStreamDoesNotExist() - { - fopen('guzzle://foo', 'r'); - } - - public function testCanOpenReadonlyStream() - { - $stream = $this->getMockBuilder('Psr\Http\Message\StreamInterface') - ->setMethods(array('isReadable', 'isWritable')) - ->getMockForAbstractClass(); - $stream->expects($this->once()) - ->method('isReadable') - ->will($this->returnValue(false)); - $stream->expects($this->once()) - ->method('isWritable') - ->will($this->returnValue(true)); - $r = StreamWrapper::getResource($stream); - $this->assertInternalType('resource', $r); - fclose($r); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/UriTest.php b/deps/vendor/ringcentral/psr7/tests/UriTest.php deleted file mode 100644 index b53c97eb4..000000000 --- a/deps/vendor/ringcentral/psr7/tests/UriTest.php +++ /dev/null @@ -1,258 +0,0 @@ -assertEquals( - 'https://michael:test@test.com/path/123?q=abc#test', - (string) $uri - ); - - $this->assertEquals('test', $uri->getFragment()); - $this->assertEquals('test.com', $uri->getHost()); - $this->assertEquals('/path/123', $uri->getPath()); - $this->assertEquals(null, $uri->getPort()); - $this->assertEquals('q=abc', $uri->getQuery()); - $this->assertEquals('https', $uri->getScheme()); - $this->assertEquals('michael:test', $uri->getUserInfo()); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Unable to parse URI - */ - public function testValidatesUriCanBeParsed() - { - // Due to 5.4.7 "Fixed host recognition when scheme is omitted and a leading component separator is present" this does not work in 5.3 - //new Uri('///'); - throw new \InvalidArgumentException('Unable to parse URI'); - } - - public function testCanTransformAndRetrievePartsIndividually() - { - $uri = new Uri(''); - $uri = $uri->withFragment('#test') - ->withHost('example.com') - ->withPath('path/123') - ->withPort(8080) - ->withQuery('?q=abc') - ->withScheme('http') - ->withUserInfo('user', 'pass'); - - // Test getters. - $this->assertEquals('user:pass@example.com:8080', $uri->getAuthority()); - $this->assertEquals('test', $uri->getFragment()); - $this->assertEquals('example.com', $uri->getHost()); - $this->assertEquals('path/123', $uri->getPath()); - $this->assertEquals(8080, $uri->getPort()); - $this->assertEquals('q=abc', $uri->getQuery()); - $this->assertEquals('http', $uri->getScheme()); - $this->assertEquals('user:pass', $uri->getUserInfo()); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testPortMustBeValid() - { - $uri = new Uri(''); - $uri->withPort(100000); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testPathMustBeValid() - { - $uri = new Uri(''); - $uri->withPath(array()); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testQueryMustBeValid() - { - $uri = new Uri(''); - $uri->withQuery(new \stdClass); - } - - public function testAllowsFalseyUrlParts() - { - $url = new Uri('http://a:1/0?0#0'); - $this->assertSame('a', $url->getHost()); - $this->assertEquals(1, $url->getPort()); - $this->assertSame('/0', $url->getPath()); - $this->assertEquals('0', (string) $url->getQuery()); - $this->assertSame('0', $url->getFragment()); - $this->assertEquals('http://a:1/0?0#0', (string) $url); - $url = new Uri(''); - $this->assertSame('', (string) $url); - $url = new Uri('0'); - $this->assertSame('0', (string) $url); - $url = new Uri('/'); - $this->assertSame('/', (string) $url); - } - - /** - * @dataProvider getResolveTestCases - */ - public function testResolvesUris($base, $rel, $expected) - { - $uri = new Uri($base); - $actual = Uri::resolve($uri, $rel); - $this->assertEquals($expected, (string) $actual); - } - - public function getResolveTestCases() - { - return array( - //[self::RFC3986_BASE, 'g:h', 'g:h'], - array(self::RFC3986_BASE, 'g', 'http://a/b/c/g'), - array(self::RFC3986_BASE, './g', 'http://a/b/c/g'), - array(self::RFC3986_BASE, 'g/', 'http://a/b/c/g/'), - array(self::RFC3986_BASE, '/g', 'http://a/g'), - // Due to 5.4.7 "Fixed host recognition when scheme is omitted and a leading component separator is present" this does not work in 5.3 - //array(self::RFC3986_BASE, '//g', 'http://g'), - array(self::RFC3986_BASE, '?y', 'http://a/b/c/d;p?y'), - array(self::RFC3986_BASE, 'g?y', 'http://a/b/c/g?y'), - array(self::RFC3986_BASE, '#s', 'http://a/b/c/d;p?q#s'), - array(self::RFC3986_BASE, 'g#s', 'http://a/b/c/g#s'), - array(self::RFC3986_BASE, 'g?y#s', 'http://a/b/c/g?y#s'), - array(self::RFC3986_BASE, ';x', 'http://a/b/c/;x'), - array(self::RFC3986_BASE, 'g;x', 'http://a/b/c/g;x'), - array(self::RFC3986_BASE, 'g;x?y#s', 'http://a/b/c/g;x?y#s'), - array(self::RFC3986_BASE, '', self::RFC3986_BASE), - array(self::RFC3986_BASE, '.', 'http://a/b/c/'), - array(self::RFC3986_BASE, './', 'http://a/b/c/'), - array(self::RFC3986_BASE, '..', 'http://a/b/'), - array(self::RFC3986_BASE, '../', 'http://a/b/'), - array(self::RFC3986_BASE, '../g', 'http://a/b/g'), - array(self::RFC3986_BASE, '../..', 'http://a/'), - array(self::RFC3986_BASE, '../../', 'http://a/'), - array(self::RFC3986_BASE, '../../g', 'http://a/g'), - array(self::RFC3986_BASE, '../../../g', 'http://a/g'), - array(self::RFC3986_BASE, '../../../../g', 'http://a/g'), - array(self::RFC3986_BASE, '/./g', 'http://a/g'), - array(self::RFC3986_BASE, '/../g', 'http://a/g'), - array(self::RFC3986_BASE, 'g.', 'http://a/b/c/g.'), - array(self::RFC3986_BASE, '.g', 'http://a/b/c/.g'), - array(self::RFC3986_BASE, 'g..', 'http://a/b/c/g..'), - array(self::RFC3986_BASE, '..g', 'http://a/b/c/..g'), - array(self::RFC3986_BASE, './../g', 'http://a/b/g'), - array(self::RFC3986_BASE, 'foo////g', 'http://a/b/c/foo////g'), - array(self::RFC3986_BASE, './g/.', 'http://a/b/c/g/'), - array(self::RFC3986_BASE, 'g/./h', 'http://a/b/c/g/h'), - array(self::RFC3986_BASE, 'g/../h', 'http://a/b/c/h'), - array(self::RFC3986_BASE, 'g;x=1/./y', 'http://a/b/c/g;x=1/y'), - array(self::RFC3986_BASE, 'g;x=1/../y', 'http://a/b/c/y'), - array('http://u@a/b/c/d;p?q', '.', 'http://u@a/b/c/'), - array('http://u:p@a/b/c/d;p?q', '.', 'http://u:p@a/b/c/'), - //[self::RFC3986_BASE, 'http:g', 'http:g'], - ); - } - - public function testAddAndRemoveQueryValues() - { - $uri = new Uri('http://foo.com/bar'); - $uri = Uri::withQueryValue($uri, 'a', 'b'); - $uri = Uri::withQueryValue($uri, 'c', 'd'); - $uri = Uri::withQueryValue($uri, 'e', null); - $this->assertEquals('a=b&c=d&e', $uri->getQuery()); - - $uri = Uri::withoutQueryValue($uri, 'c'); - $uri = Uri::withoutQueryValue($uri, 'e'); - $this->assertEquals('a=b', $uri->getQuery()); - $uri = Uri::withoutQueryValue($uri, 'a'); - $uri = Uri::withoutQueryValue($uri, 'a'); - $this->assertEquals('', $uri->getQuery()); - } - - public function testGetAuthorityReturnsCorrectPort() - { - // HTTPS non-standard port - $uri = new Uri('https://foo.co:99'); - $this->assertEquals('foo.co:99', $uri->getAuthority()); - - // HTTP non-standard port - $uri = new Uri('http://foo.co:99'); - $this->assertEquals('foo.co:99', $uri->getAuthority()); - - // No scheme - $uri = new Uri('foo.co:99'); - $this->assertEquals('foo.co:99', $uri->getAuthority()); - - // No host or port - $uri = new Uri('http:'); - $this->assertEquals('', $uri->getAuthority()); - - // No host or port - $uri = new Uri('http://foo.co'); - $this->assertEquals('foo.co', $uri->getAuthority()); - } - - public function pathTestProvider() - { - return array( - // Percent encode spaces. - array('http://foo.com/baz bar', 'http://foo.com/baz%20bar'), - // Don't encoding something that's already encoded. - array('http://foo.com/baz%20bar', 'http://foo.com/baz%20bar'), - // Percent encode invalid percent encodings - array('http://foo.com/baz%2-bar', 'http://foo.com/baz%252-bar'), - // Don't encode path segments - array('http://foo.com/baz/bar/bam?a', 'http://foo.com/baz/bar/bam?a'), - array('http://foo.com/baz+bar', 'http://foo.com/baz+bar'), - array('http://foo.com/baz:bar', 'http://foo.com/baz:bar'), - array('http://foo.com/baz@bar', 'http://foo.com/baz@bar'), - array('http://foo.com/baz(bar);bam/', 'http://foo.com/baz(bar);bam/'), - array('http://foo.com/a-zA-Z0-9.-_~!$&\'()*+,;=:@', 'http://foo.com/a-zA-Z0-9.-_~!$&\'()*+,;=:@'), - ); - } - - /** - * @dataProvider pathTestProvider - */ - public function testUriEncodesPathProperly($input, $output) - { - $uri = new Uri($input); - $this->assertEquals((string) $uri, $output); - } - - public function testDoesNotAddPortWhenNoPort() - { - // Due to 5.4.7 "Fixed host recognition when scheme is omitted and a leading component separator is present" this does not work in 5.3 - //$uri = new Uri('//bar'); - //$this->assertEquals('bar', (string) $uri); - //$uri = new Uri('//barx'); - //$this->assertEquals('barx', $uri->getHost()); - } - - public function testAllowsForRelativeUri() - { - $uri = new Uri(); - $uri = $uri->withPath('foo'); - $this->assertEquals('foo', $uri->getPath()); - $this->assertEquals('foo', (string) $uri); - } - - public function testAddsSlashForRelativeUriStringWithHost() - { - $uri = new Uri(); - $uri = $uri->withPath('foo')->withHost('bar.com'); - $this->assertEquals('foo', $uri->getPath()); - $this->assertEquals('bar.com/foo', (string) $uri); - } -} diff --git a/deps/vendor/ringcentral/psr7/tests/bootstrap.php b/deps/vendor/ringcentral/psr7/tests/bootstrap.php deleted file mode 100644 index ea6a07914..000000000 --- a/deps/vendor/ringcentral/psr7/tests/bootstrap.php +++ /dev/null @@ -1,13 +0,0 @@ - 'value']` to - `ProcessHelper::run()` to pass environment variables - * deprecated passing a command as a string to `ProcessHelper::run()`, - pass it the command as an array of its arguments instead - * made the `ProcessHelper` class final - * added `WrappableOutputFormatterInterface::formatAndWrap()` (implemented in `OutputFormatter`) - * added `capture_stderr_separately` option to `CommandTester::execute()` - -4.1.0 ------ - - * added option to run suggested command if command is not found and only 1 alternative is available - * added option to modify console output and print multiple modifiable sections - * added support for iterable messages in output `write` and `writeln` methods - -4.0.0 ------ - - * `OutputFormatter` throws an exception when unknown options are used - * removed `QuestionHelper::setInputStream()/getInputStream()` - * removed `Application::getTerminalWidth()/getTerminalHeight()` and - `Application::setTerminalDimensions()/getTerminalDimensions()` - * removed `ConsoleExceptionEvent` - * removed `ConsoleEvents::EXCEPTION` - -3.4.0 ------ - - * added `SHELL_VERBOSITY` env var to control verbosity - * added `CommandLoaderInterface`, `FactoryCommandLoader` and PSR-11 - `ContainerCommandLoader` for commands lazy-loading - * added a case-insensitive command name matching fallback - * added static `Command::$defaultName/getDefaultName()`, allowing for - commands to be registered at compile time in the application command loader. - Setting the `$defaultName` property avoids the need for filling the `command` - attribute on the `console.command` tag when using `AddConsoleCommandPass`. - -3.3.0 ------ - - * added `ExceptionListener` - * added `AddConsoleCommandPass` (originally in FrameworkBundle) - * [BC BREAK] `Input::getOption()` no longer returns the default value for options - with value optional explicitly passed empty - * added console.error event to catch exceptions thrown by other listeners - * deprecated console.exception event in favor of console.error - * added ability to handle `CommandNotFoundException` through the - `console.error` event - * deprecated default validation in `SymfonyQuestionHelper::ask` - -3.2.0 ------- - - * added `setInputs()` method to CommandTester for ease testing of commands expecting inputs - * added `setStream()` and `getStream()` methods to Input (implement StreamableInputInterface) - * added StreamableInputInterface - * added LockableTrait - -3.1.0 ------ - - * added truncate method to FormatterHelper - * added setColumnWidth(s) method to Table - -2.8.3 ------ - - * remove readline support from the question helper as it caused issues - -2.8.0 ------ - - * use readline for user input in the question helper when available to allow - the use of arrow keys - -2.6.0 ------ - - * added a Process helper - * added a DebugFormatter helper - -2.5.0 ------ - - * deprecated the dialog helper (use the question helper instead) - * deprecated TableHelper in favor of Table - * deprecated ProgressHelper in favor of ProgressBar - * added ConsoleLogger - * added a question helper - * added a way to set the process name of a command - * added a way to set a default command instead of `ListCommand` - -2.4.0 ------ - - * added a way to force terminal dimensions - * added a convenient method to detect verbosity level - * [BC BREAK] made descriptors use output instead of returning a string - -2.3.0 ------ - - * added multiselect support to the select dialog helper - * added Table Helper for tabular data rendering - * added support for events in `Application` - * added a way to normalize EOLs in `ApplicationTester::getDisplay()` and `CommandTester::getDisplay()` - * added a way to set the progress bar progress via the `setCurrent` method - * added support for multiple InputOption shortcuts, written as `'-a|-b|-c'` - * added two additional verbosity levels, VERBOSITY_VERY_VERBOSE and VERBOSITY_DEBUG - -2.2.0 ------ - - * added support for colorization on Windows via ConEmu - * add a method to Dialog Helper to ask for a question and hide the response - * added support for interactive selections in console (DialogHelper::select()) - * added support for autocompletion as you type in Dialog Helper - -2.1.0 ------ - - * added ConsoleOutputInterface - * added the possibility to disable a command (Command::isEnabled()) - * added suggestions when a command does not exist - * added a --raw option to the list command - * added support for STDERR in the console output class (errors are now sent - to STDERR) - * made the defaults (helper set, commands, input definition) in Application - more easily customizable - * added support for the shell even if readline is not available - * added support for process isolation in Symfony shell via - `--process-isolation` switch - * added support for `--`, which disables options parsing after that point - (tokens will be parsed as arguments) diff --git a/deps/vendor/symfony/console/LICENSE b/deps/vendor/symfony/console/LICENSE deleted file mode 100644 index 88bf75bb4..000000000 --- a/deps/vendor/symfony/console/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2004-2022 Fabien Potencier - -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/deps/vendor/symfony/console/README.md b/deps/vendor/symfony/console/README.md deleted file mode 100644 index c4c129989..000000000 --- a/deps/vendor/symfony/console/README.md +++ /dev/null @@ -1,36 +0,0 @@ -Console Component -================= - -The Console component eases the creation of beautiful and testable command line -interfaces. - -Sponsor -------- - -The Console component for Symfony 5.4/6.0 is [backed][1] by [Les-Tilleuls.coop][2]. - -Les-Tilleuls.coop is a team of 50+ Symfony experts who can help you design, develop and -fix your projects. We provide a wide range of professional services including development, -consulting, coaching, training and audits. We also are highly skilled in JS, Go and DevOps. -We are a worker cooperative! - -Help Symfony by [sponsoring][3] its development! - -Resources ---------- - - * [Documentation](https://symfony.com/doc/current/components/console.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) - -Credits -------- - -`Resources/bin/hiddeninput.exe` is a third party binary provided within this -component. Find sources and license at https://github.com/Seldaek/hidden-input. - -[1]: https://symfony.com/backers -[2]: https://les-tilleuls.coop -[3]: https://symfony.com/sponsor diff --git a/deps/vendor/symfony/console/Resources/completion.bash b/deps/vendor/symfony/console/Resources/completion.bash deleted file mode 100644 index 64b87ccf7..000000000 --- a/deps/vendor/symfony/console/Resources/completion.bash +++ /dev/null @@ -1,84 +0,0 @@ -# This file is part of the Symfony package. -# -# (c) Fabien Potencier -# -# For the full copyright and license information, please view -# https://symfony.com/doc/current/contributing/code/license.html - -_sf_{{ COMMAND_NAME }}() { - # Use newline as only separator to allow space in completion values - IFS=$'\n' - local sf_cmd="${COMP_WORDS[0]}" - - # for an alias, get the real script behind it - sf_cmd_type=$(type -t $sf_cmd) - if [[ $sf_cmd_type == "alias" ]]; then - sf_cmd=$(alias $sf_cmd | sed -E "s/alias $sf_cmd='(.*)'/\1/") - elif [[ $sf_cmd_type == "file" ]]; then - sf_cmd=$(type -p $sf_cmd) - fi - - if [[ $sf_cmd_type != "function" && ! -x $sf_cmd ]]; then - return 1 - fi - - local cur prev words cword - _get_comp_words_by_ref -n := cur prev words cword - - local completecmd=("$sf_cmd" "_complete" "--no-interaction" "-sbash" "-c$cword" "-S{{ VERSION }}") - for w in ${words[@]}; do - w=$(printf -- '%b' "$w") - # remove quotes from typed values - quote="${w:0:1}" - if [ "$quote" == \' ]; then - w="${w%\'}" - w="${w#\'}" - elif [ "$quote" == \" ]; then - w="${w%\"}" - w="${w#\"}" - fi - # empty values are ignored - if [ ! -z "$w" ]; then - completecmd+=("-i$w") - fi - done - - local sfcomplete - if sfcomplete=$(${completecmd[@]} 2>&1); then - local quote suggestions - quote=${cur:0:1} - - # Use single quotes by default if suggestions contains backslash (FQCN) - if [ "$quote" == '' ] && [[ "$sfcomplete" =~ \\ ]]; then - quote=\' - fi - - if [ "$quote" == \' ]; then - # single quotes: no additional escaping (does not accept ' in values) - suggestions=$(for s in $sfcomplete; do printf $'%q%q%q\n' "$quote" "$s" "$quote"; done) - elif [ "$quote" == \" ]; then - # double quotes: double escaping for \ $ ` " - suggestions=$(for s in $sfcomplete; do - s=${s//\\/\\\\} - s=${s//\$/\\\$} - s=${s//\`/\\\`} - s=${s//\"/\\\"} - printf $'%q%q%q\n' "$quote" "$s" "$quote"; - done) - else - # no quotes: double escaping - suggestions=$(for s in $sfcomplete; do printf $'%q\n' $(printf '%q' "$s"); done) - fi - COMPREPLY=($(IFS=$'\n' compgen -W "$suggestions" -- $(printf -- "%q" "$cur"))) - __ltrim_colon_completions "$cur" - else - if [[ "$sfcomplete" != *"Command \"_complete\" is not defined."* ]]; then - >&2 echo - >&2 echo $sfcomplete - fi - - return 1 - fi -} - -complete -F _sf_{{ COMMAND_NAME }} {{ COMMAND_NAME }} diff --git a/deps/vendor/symfony/console/composer.json b/deps/vendor/symfony/console/composer.json deleted file mode 100644 index 9a565068c..000000000 --- a/deps/vendor/symfony/console/composer.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "symfony/console", - "type": "library", - "description": "Eases the creation of beautiful and testable command line interfaces", - "keywords": ["console", "cli", "command line", "terminal"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "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" - }, - "require-dev": { - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^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", - "psr/log": "^1|^2" - }, - "provide": { - "psr/log-implementation": "1.0|2.0" - }, - "suggest": { - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "", - "psr/log": "For using the console logger" - }, - "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" - }, - "autoload": { - "psr-4": { "Symfony\\Component\\Console\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "minimum-stability": "dev" -} diff --git a/deps/vendor/symfony/deprecation-contracts/.gitignore b/deps/vendor/symfony/deprecation-contracts/.gitignore deleted file mode 100644 index c49a5d8df..000000000 --- a/deps/vendor/symfony/deprecation-contracts/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -vendor/ -composer.lock -phpunit.xml diff --git a/deps/vendor/symfony/deprecation-contracts/CHANGELOG.md b/deps/vendor/symfony/deprecation-contracts/CHANGELOG.md deleted file mode 100644 index 7932e2613..000000000 --- a/deps/vendor/symfony/deprecation-contracts/CHANGELOG.md +++ /dev/null @@ -1,5 +0,0 @@ -CHANGELOG -========= - -The changelog is maintained for all Symfony contracts at the following URL: -https://github.com/symfony/contracts/blob/main/CHANGELOG.md diff --git a/deps/vendor/symfony/deprecation-contracts/LICENSE b/deps/vendor/symfony/deprecation-contracts/LICENSE deleted file mode 100644 index ad85e1737..000000000 --- a/deps/vendor/symfony/deprecation-contracts/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2020-2021 Fabien Potencier - -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/deps/vendor/symfony/deprecation-contracts/README.md b/deps/vendor/symfony/deprecation-contracts/README.md deleted file mode 100644 index 4957933a6..000000000 --- a/deps/vendor/symfony/deprecation-contracts/README.md +++ /dev/null @@ -1,26 +0,0 @@ -Symfony Deprecation Contracts -============================= - -A generic function and convention to trigger deprecation notices. - -This package provides a single global function named `trigger_deprecation()` that triggers silenced deprecation notices. - -By using a custom PHP error handler such as the one provided by the Symfony ErrorHandler component, -the triggered deprecations can be caught and logged for later discovery, both on dev and prod environments. - -The function requires at least 3 arguments: - - the name of the Composer package that is triggering the deprecation - - the version of the package that introduced the deprecation - - the message of the deprecation - - more arguments can be provided: they will be inserted in the message using `printf()` formatting - -Example: -```php -trigger_deprecation('symfony/blockchain', '8.9', 'Using "%s" is deprecated, use "%s" instead.', 'bitcoin', 'fabcoin'); -``` - -This will generate the following message: -`Since symfony/blockchain 8.9: Using "bitcoin" is deprecated, use "fabcoin" instead.` - -While not necessarily recommended, the deprecation notices can be completely ignored by declaring an empty -`function trigger_deprecation() {}` in your application. diff --git a/deps/vendor/symfony/deprecation-contracts/composer.json b/deps/vendor/symfony/deprecation-contracts/composer.json deleted file mode 100644 index cc7cc1237..000000000 --- a/deps/vendor/symfony/deprecation-contracts/composer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "symfony/deprecation-contracts", - "type": "library", - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - } -} diff --git a/deps/vendor/symfony/polyfill-ctype/LICENSE b/deps/vendor/symfony/polyfill-ctype/LICENSE deleted file mode 100644 index 3f853aaf3..000000000 --- a/deps/vendor/symfony/polyfill-ctype/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2018-2019 Fabien Potencier - -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/deps/vendor/symfony/polyfill-ctype/README.md b/deps/vendor/symfony/polyfill-ctype/README.md deleted file mode 100644 index 8add1ab00..000000000 --- a/deps/vendor/symfony/polyfill-ctype/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Symfony Polyfill / Ctype -======================== - -This component provides `ctype_*` functions to users who run php versions without the ctype extension. - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/deps/vendor/symfony/polyfill-ctype/composer.json b/deps/vendor/symfony/polyfill-ctype/composer.json deleted file mode 100644 index ccb8e5703..000000000 --- a/deps/vendor/symfony/polyfill-ctype/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "symfony/polyfill-ctype", - "type": "library", - "description": "Symfony polyfill for ctype functions", - "keywords": ["polyfill", "compatibility", "portable", "ctype"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, - "files": [ "bootstrap.php" ] - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/deps/vendor/symfony/polyfill-intl-grapheme/LICENSE b/deps/vendor/symfony/polyfill-intl-grapheme/LICENSE deleted file mode 100644 index 4cd8bdd30..000000000 --- a/deps/vendor/symfony/polyfill-intl-grapheme/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015-2019 Fabien Potencier - -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/deps/vendor/symfony/polyfill-intl-grapheme/README.md b/deps/vendor/symfony/polyfill-intl-grapheme/README.md deleted file mode 100644 index 77523ea27..000000000 --- a/deps/vendor/symfony/polyfill-intl-grapheme/README.md +++ /dev/null @@ -1,31 +0,0 @@ -Symfony Polyfill / Intl: Grapheme -================================= - -This component provides a partial, native PHP implementation of the -[Grapheme functions](https://php.net/intl.grapheme) from the -[Intl](https://php.net/intl) extension. - -- [`grapheme_extract`](https://php.net/grapheme_extract): Extract a sequence of grapheme - clusters from a text buffer, which must be encoded in UTF-8 -- [`grapheme_stripos`](https://php.net/grapheme_stripos): Find position (in grapheme units) - of first occurrence of a case-insensitive string -- [`grapheme_stristr`](https://php.net/grapheme_stristr): Returns part of haystack string - from the first occurrence of case-insensitive needle to the end of haystack -- [`grapheme_strlen`](https://php.net/grapheme_strlen): Get string length in grapheme units -- [`grapheme_strpos`](https://php.net/grapheme_strpos): Find position (in grapheme units) - of first occurrence of a string -- [`grapheme_strripos`](https://php.net/grapheme_strripos): Find position (in grapheme units) - of last occurrence of a case-insensitive string -- [`grapheme_strrpos`](https://php.net/grapheme_strrpos): Find position (in grapheme units) - of last occurrence of a string -- [`grapheme_strstr`](https://php.net/grapheme_strstr): Returns part of haystack string from - the first occurrence of needle to the end of haystack -- [`grapheme_substr`](https://php.net/grapheme_substr): Return part of a string - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/deps/vendor/symfony/polyfill-intl-grapheme/composer.json b/deps/vendor/symfony/polyfill-intl-grapheme/composer.json deleted file mode 100644 index 02c98ee30..000000000 --- a/deps/vendor/symfony/polyfill-intl-grapheme/composer.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "symfony/polyfill-intl-grapheme", - "type": "library", - "description": "Symfony polyfill for intl's grapheme_* functions", - "keywords": ["polyfill", "shim", "compatibility", "portable", "intl", "grapheme"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Intl\\Grapheme\\": "" }, - "files": [ "bootstrap.php" ] - }, - "suggest": { - "ext-intl": "For best performance" - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/deps/vendor/symfony/polyfill-intl-normalizer/LICENSE b/deps/vendor/symfony/polyfill-intl-normalizer/LICENSE deleted file mode 100644 index 4cd8bdd30..000000000 --- a/deps/vendor/symfony/polyfill-intl-normalizer/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015-2019 Fabien Potencier - -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/deps/vendor/symfony/polyfill-intl-normalizer/README.md b/deps/vendor/symfony/polyfill-intl-normalizer/README.md deleted file mode 100644 index 15060c5f1..000000000 --- a/deps/vendor/symfony/polyfill-intl-normalizer/README.md +++ /dev/null @@ -1,14 +0,0 @@ -Symfony Polyfill / Intl: Normalizer -=================================== - -This component provides a fallback implementation for the -[`Normalizer`](https://php.net/Normalizer) class provided -by the [Intl](https://php.net/intl) extension. - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/deps/vendor/symfony/polyfill-intl-normalizer/composer.json b/deps/vendor/symfony/polyfill-intl-normalizer/composer.json deleted file mode 100644 index 393edf701..000000000 --- a/deps/vendor/symfony/polyfill-intl-normalizer/composer.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "symfony/polyfill-intl-normalizer", - "type": "library", - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "keywords": ["polyfill", "shim", "compatibility", "portable", "intl", "normalizer"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, - "files": [ "bootstrap.php" ], - "classmap": [ "Resources/stubs" ] - }, - "suggest": { - "ext-intl": "For best performance" - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/deps/vendor/symfony/polyfill-mbstring/LICENSE b/deps/vendor/symfony/polyfill-mbstring/LICENSE deleted file mode 100644 index 4cd8bdd30..000000000 --- a/deps/vendor/symfony/polyfill-mbstring/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015-2019 Fabien Potencier - -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/deps/vendor/symfony/polyfill-mbstring/README.md b/deps/vendor/symfony/polyfill-mbstring/README.md deleted file mode 100644 index 4efb599d8..000000000 --- a/deps/vendor/symfony/polyfill-mbstring/README.md +++ /dev/null @@ -1,13 +0,0 @@ -Symfony Polyfill / Mbstring -=========================== - -This component provides a partial, native PHP implementation for the -[Mbstring](https://php.net/mbstring) extension. - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/deps/vendor/symfony/polyfill-mbstring/composer.json b/deps/vendor/symfony/polyfill-mbstring/composer.json deleted file mode 100644 index 1fa21ca16..000000000 --- a/deps/vendor/symfony/polyfill-mbstring/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "symfony/polyfill-mbstring", - "type": "library", - "description": "Symfony polyfill for the Mbstring extension", - "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, - "files": [ "bootstrap.php" ] - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/deps/vendor/symfony/polyfill-php73/LICENSE b/deps/vendor/symfony/polyfill-php73/LICENSE deleted file mode 100644 index 3f853aaf3..000000000 --- a/deps/vendor/symfony/polyfill-php73/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2018-2019 Fabien Potencier - -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/deps/vendor/symfony/polyfill-php73/README.md b/deps/vendor/symfony/polyfill-php73/README.md deleted file mode 100644 index b3ebbce51..000000000 --- a/deps/vendor/symfony/polyfill-php73/README.md +++ /dev/null @@ -1,18 +0,0 @@ -Symfony Polyfill / Php73 -======================== - -This component provides functions added to PHP 7.3 core: - -- [`array_key_first`](https://php.net/array_key_first) -- [`array_key_last`](https://php.net/array_key_last) -- [`hrtime`](https://php.net/function.hrtime) -- [`is_countable`](https://php.net/is_countable) -- [`JsonException`](https://php.net/JsonException) - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/deps/vendor/symfony/polyfill-php73/composer.json b/deps/vendor/symfony/polyfill-php73/composer.json deleted file mode 100644 index a7fe47875..000000000 --- a/deps/vendor/symfony/polyfill-php73/composer.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "symfony/polyfill-php73", - "type": "library", - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "keywords": ["polyfill", "shim", "compatibility", "portable"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Php73\\": "" }, - "files": [ "bootstrap.php" ], - "classmap": [ "Resources/stubs" ] - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/deps/vendor/symfony/polyfill-php80/LICENSE b/deps/vendor/symfony/polyfill-php80/LICENSE deleted file mode 100644 index 5593b1d84..000000000 --- a/deps/vendor/symfony/polyfill-php80/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2020 Fabien Potencier - -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/deps/vendor/symfony/polyfill-php80/README.md b/deps/vendor/symfony/polyfill-php80/README.md deleted file mode 100644 index 10b8ee49a..000000000 --- a/deps/vendor/symfony/polyfill-php80/README.md +++ /dev/null @@ -1,24 +0,0 @@ -Symfony Polyfill / Php80 -======================== - -This component provides features added to PHP 8.0 core: - -- `Stringable` interface -- [`fdiv`](https://php.net/fdiv) -- `ValueError` class -- `UnhandledMatchError` class -- `FILTER_VALIDATE_BOOL` constant -- [`get_debug_type`](https://php.net/get_debug_type) -- [`preg_last_error_msg`](https://php.net/preg_last_error_msg) -- [`str_contains`](https://php.net/str_contains) -- [`str_starts_with`](https://php.net/str_starts_with) -- [`str_ends_with`](https://php.net/str_ends_with) -- [`get_resource_id`](https://php.net/get_resource_id) - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/deps/vendor/symfony/polyfill-php80/composer.json b/deps/vendor/symfony/polyfill-php80/composer.json deleted file mode 100644 index 5fe679db3..000000000 --- a/deps/vendor/symfony/polyfill-php80/composer.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "symfony/polyfill-php80", - "type": "library", - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "keywords": ["polyfill", "shim", "compatibility", "portable"], - "homepage": "https://symfony.com", - "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" - } - ], - "require": { - "php": ">=7.1" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, - "files": [ "bootstrap.php" ], - "classmap": [ "Resources/stubs" ] - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/deps/vendor/symfony/polyfill-php81/LICENSE b/deps/vendor/symfony/polyfill-php81/LICENSE deleted file mode 100644 index efb17f98e..000000000 --- a/deps/vendor/symfony/polyfill-php81/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2021 Fabien Potencier - -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/deps/vendor/symfony/polyfill-php81/Php81.php b/deps/vendor/symfony/polyfill-php81/Php81.php deleted file mode 100644 index f0507b765..000000000 --- a/deps/vendor/symfony/polyfill-php81/Php81.php +++ /dev/null @@ -1,37 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Php81; - -/** - * @author Nicolas Grekas - * - * @internal - */ -final class Php81 -{ - public static function array_is_list(array $array): bool - { - if ([] === $array || $array === array_values($array)) { - return true; - } - - $nextKey = -1; - - foreach ($array as $k => $v) { - if ($k !== ++$nextKey) { - return false; - } - } - - return true; - } -} diff --git a/deps/vendor/symfony/polyfill-php81/README.md b/deps/vendor/symfony/polyfill-php81/README.md deleted file mode 100644 index 7d8dd1907..000000000 --- a/deps/vendor/symfony/polyfill-php81/README.md +++ /dev/null @@ -1,17 +0,0 @@ -Symfony Polyfill / Php81 -======================== - -This component provides features added to PHP 8.1 core: - -- [`array_is_list`](https://php.net/array_is_list) -- [`enum_exists`](https://php.net/enum-exists) -- [`MYSQLI_REFRESH_REPLICA`](https://php.net/mysqli.constants#constantmysqli-refresh-replica) constant -- [`ReturnTypeWillChange`](https://wiki.php.net/rfc/internal_method_return_types) - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/deps/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php b/deps/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php deleted file mode 100644 index f4cad34f6..000000000 --- a/deps/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php +++ /dev/null @@ -1,11 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Php81 as p; - -if (\PHP_VERSION_ID >= 80100) { - return; -} - -if (defined('MYSQLI_REFRESH_SLAVE') && !defined('MYSQLI_REFRESH_REPLICA')) { - define('MYSQLI_REFRESH_REPLICA', 64); -} - -if (!function_exists('array_is_list')) { - function array_is_list(array $array): bool { return p\Php81::array_is_list($array); } -} - -if (!function_exists('enum_exists')) { - function enum_exists(string $enum, bool $autoload = true): bool { return $autoload && class_exists($enum) && false; } -} diff --git a/deps/vendor/symfony/polyfill-php81/composer.json b/deps/vendor/symfony/polyfill-php81/composer.json deleted file mode 100644 index 014da788e..000000000 --- a/deps/vendor/symfony/polyfill-php81/composer.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "symfony/polyfill-php81", - "type": "library", - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "keywords": ["polyfill", "shim", "compatibility", "portable"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Php81\\": "" }, - "files": [ "bootstrap.php" ], - "classmap": [ "Resources/stubs" ] - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/deps/vendor/symfony/process/CHANGELOG.md b/deps/vendor/symfony/process/CHANGELOG.md deleted file mode 100644 index 31b9ee6a2..000000000 --- a/deps/vendor/symfony/process/CHANGELOG.md +++ /dev/null @@ -1,116 +0,0 @@ -CHANGELOG -========= - -5.2.0 ------ - - * added `Process::setOptions()` to set `Process` specific options - * added option `create_new_console` to allow a subprocess to continue - to run after the main script exited, both on Linux and on Windows - -5.1.0 ------ - - * added `Process::getStartTime()` to retrieve the start time of the process as float - -5.0.0 ------ - - * removed `Process::inheritEnvironmentVariables()` - * removed `PhpProcess::setPhpBinary()` - * `Process` must be instantiated with a command array, use `Process::fromShellCommandline()` when the command should be parsed by the shell - * removed `Process::setCommandLine()` - -4.4.0 ------ - - * deprecated `Process::inheritEnvironmentVariables()`: env variables are always inherited. - * added `Process::getLastOutputTime()` method - -4.2.0 ------ - - * added the `Process::fromShellCommandline()` to run commands in a shell wrapper - * deprecated passing a command as string when creating a `Process` instance - * deprecated the `Process::setCommandline()` and the `PhpProcess::setPhpBinary()` methods - * added the `Process::waitUntil()` method to wait for the process only for a - specific output, then continue the normal execution of your application - -4.1.0 ------ - - * added the `Process::isTtySupported()` method that allows to check for TTY support - * made `PhpExecutableFinder` look for the `PHP_BINARY` env var when searching the php binary - * added the `ProcessSignaledException` class to properly catch signaled process errors - -4.0.0 ------ - - * environment variables will always be inherited - * added a second `array $env = []` argument to the `start()`, `run()`, - `mustRun()`, and `restart()` methods of the `Process` class - * added a second `array $env = []` argument to the `start()` method of the - `PhpProcess` class - * the `ProcessUtils::escapeArgument()` method has been removed - * the `areEnvironmentVariablesInherited()`, `getOptions()`, and `setOptions()` - methods of the `Process` class have been removed - * support for passing `proc_open()` options has been removed - * removed the `ProcessBuilder` class, use the `Process` class instead - * removed the `getEnhanceWindowsCompatibility()` and `setEnhanceWindowsCompatibility()` methods of the `Process` class - * passing a not existing working directory to the constructor of the `Symfony\Component\Process\Process` class is not - supported anymore - -3.4.0 ------ - - * deprecated the ProcessBuilder class - * deprecated calling `Process::start()` without setting a valid working directory beforehand (via `setWorkingDirectory()` or constructor) - -3.3.0 ------ - - * added command line arrays in the `Process` class - * added `$env` argument to `Process::start()`, `run()`, `mustRun()` and `restart()` methods - * deprecated the `ProcessUtils::escapeArgument()` method - * deprecated not inheriting environment variables - * deprecated configuring `proc_open()` options - * deprecated configuring enhanced Windows compatibility - * deprecated configuring enhanced sigchild compatibility - -2.5.0 ------ - - * added support for PTY mode - * added the convenience method "mustRun" - * deprecation: Process::setStdin() is deprecated in favor of Process::setInput() - * deprecation: Process::getStdin() is deprecated in favor of Process::getInput() - * deprecation: Process::setInput() and ProcessBuilder::setInput() do not accept non-scalar types - -2.4.0 ------ - - * added the ability to define an idle timeout - -2.3.0 ------ - - * added ProcessUtils::escapeArgument() to fix the bug in escapeshellarg() function on Windows - * added Process::signal() - * added Process::getPid() - * added support for a TTY mode - -2.2.0 ------ - - * added ProcessBuilder::setArguments() to reset the arguments on a builder - * added a way to retrieve the standard and error output incrementally - * added Process:restart() - -2.1.0 ------ - - * added support for non-blocking processes (start(), wait(), isRunning(), stop()) - * enhanced Windows compatibility - * added Process::getExitCodeText() that returns a string representation for - the exit code returned by the process - * added ProcessBuilder diff --git a/deps/vendor/symfony/process/LICENSE b/deps/vendor/symfony/process/LICENSE deleted file mode 100644 index 88bf75bb4..000000000 --- a/deps/vendor/symfony/process/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2004-2022 Fabien Potencier - -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/deps/vendor/symfony/process/README.md b/deps/vendor/symfony/process/README.md deleted file mode 100644 index 8777de4a6..000000000 --- a/deps/vendor/symfony/process/README.md +++ /dev/null @@ -1,28 +0,0 @@ -Process Component -================= - -The Process component executes commands in sub-processes. - -Sponsor -------- - -The Process component for Symfony 5.4/6.0 is [backed][1] by [SensioLabs][2]. - -As the creator of Symfony, SensioLabs supports companies using Symfony, with an -offering encompassing consultancy, expertise, services, training, and technical -assistance to ensure the success of web application development projects. - -Help Symfony by [sponsoring][3] its development! - -Resources ---------- - - * [Documentation](https://symfony.com/doc/current/components/process.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) - -[1]: https://symfony.com/backers -[2]: https://sensiolabs.com -[3]: https://symfony.com/sponsor diff --git a/deps/vendor/symfony/process/composer.json b/deps/vendor/symfony/process/composer.json deleted file mode 100644 index 1669eba57..000000000 --- a/deps/vendor/symfony/process/composer.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "symfony/process", - "type": "library", - "description": "Executes commands in sub-processes", - "keywords": [], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "autoload": { - "psr-4": { "Symfony\\Component\\Process\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "minimum-stability": "dev" -} diff --git a/deps/vendor/symfony/service-contracts/.gitignore b/deps/vendor/symfony/service-contracts/.gitignore deleted file mode 100644 index c49a5d8df..000000000 --- a/deps/vendor/symfony/service-contracts/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -vendor/ -composer.lock -phpunit.xml diff --git a/deps/vendor/symfony/service-contracts/CHANGELOG.md b/deps/vendor/symfony/service-contracts/CHANGELOG.md deleted file mode 100644 index 7932e2613..000000000 --- a/deps/vendor/symfony/service-contracts/CHANGELOG.md +++ /dev/null @@ -1,5 +0,0 @@ -CHANGELOG -========= - -The changelog is maintained for all Symfony contracts at the following URL: -https://github.com/symfony/contracts/blob/main/CHANGELOG.md diff --git a/deps/vendor/symfony/service-contracts/LICENSE b/deps/vendor/symfony/service-contracts/LICENSE deleted file mode 100644 index 235841453..000000000 --- a/deps/vendor/symfony/service-contracts/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2018-2021 Fabien Potencier - -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/deps/vendor/symfony/service-contracts/README.md b/deps/vendor/symfony/service-contracts/README.md deleted file mode 100644 index 41e054a10..000000000 --- a/deps/vendor/symfony/service-contracts/README.md +++ /dev/null @@ -1,9 +0,0 @@ -Symfony Service Contracts -========================= - -A set of abstractions extracted out of the Symfony components. - -Can be used to build on semantics that the Symfony components proved useful - and -that already have battle tested implementations. - -See https://github.com/symfony/contracts/blob/main/README.md for more information. diff --git a/deps/vendor/symfony/service-contracts/composer.json b/deps/vendor/symfony/service-contracts/composer.json deleted file mode 100644 index e680798d7..000000000 --- a/deps/vendor/symfony/service-contracts/composer.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "symfony/service-contracts", - "type": "library", - "description": "Generic abstractions related to writing services", - "keywords": ["abstractions", "contracts", "decoupling", "interfaces", "interoperability", "standards"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "autoload": { - "psr-4": { "Symfony\\Contracts\\Service\\": "" } - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - } -} diff --git a/deps/vendor/symfony/string/CHANGELOG.md b/deps/vendor/symfony/string/CHANGELOG.md deleted file mode 100644 index 53af36400..000000000 --- a/deps/vendor/symfony/string/CHANGELOG.md +++ /dev/null @@ -1,35 +0,0 @@ -CHANGELOG -========= - -5.4 ---- - - * Add `trimSuffix()` and `trimPrefix()` methods - -5.3 ---- - - * Made `AsciiSlugger` fallback to parent locale's symbolsMap - -5.2.0 ------ - - * added a `FrenchInflector` class - -5.1.0 ------ - - * added the `AbstractString::reverse()` method - * made `AbstractString::width()` follow POSIX.1-2001 - * added `LazyString` which provides memoizing stringable objects - * The component is not marked as `@experimental` anymore - * added the `s()` helper method to get either an `UnicodeString` or `ByteString` instance, - depending of the input string UTF-8 compliancy - * added `$cut` parameter to `Symfony\Component\String\AbstractString::truncate()` - * added `AbstractString::containsAny()` - * allow passing a string of custom characters to `ByteString::fromRandom()` - -5.0.0 ------ - - * added the component as experimental diff --git a/deps/vendor/symfony/string/LICENSE b/deps/vendor/symfony/string/LICENSE deleted file mode 100644 index 9c907a46a..000000000 --- a/deps/vendor/symfony/string/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2019-2022 Fabien Potencier - -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/deps/vendor/symfony/string/README.md b/deps/vendor/symfony/string/README.md deleted file mode 100644 index 9c7e1e190..000000000 --- a/deps/vendor/symfony/string/README.md +++ /dev/null @@ -1,14 +0,0 @@ -String Component -================ - -The String component provides an object-oriented API to strings and deals -with bytes, UTF-8 code points and grapheme clusters in a unified way. - -Resources ---------- - - * [Documentation](https://symfony.com/doc/current/components/string.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/deps/vendor/symfony/string/composer.json b/deps/vendor/symfony/string/composer.json deleted file mode 100644 index 2b88fd529..000000000 --- a/deps/vendor/symfony/string/composer.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "symfony/string", - "type": "library", - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "keywords": ["string", "utf8", "utf-8", "grapheme", "i18n", "unicode"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "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" - }, - "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" - }, - "conflict": { - "symfony/translation-contracts": ">=3.0" - }, - "autoload": { - "psr-4": { "Symfony\\Component\\String\\": "" }, - "files": [ "Resources/functions.php" ], - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "minimum-stability": "dev" -} diff --git a/deps/vendor/symfony/yaml/CHANGELOG.md b/deps/vendor/symfony/yaml/CHANGELOG.md deleted file mode 100644 index b9561b2af..000000000 --- a/deps/vendor/symfony/yaml/CHANGELOG.md +++ /dev/null @@ -1,237 +0,0 @@ -CHANGELOG -========= - -5.4 ---- - - * Add new `lint:yaml dirname --exclude=/dirname/foo.yaml --exclude=/dirname/bar.yaml` - option to exclude one or more specific files from multiple file list - * Allow negatable for the parse tags option with `--no-parse-tags` - -5.3 ---- - - * Added `github` format support & autodetection to render errors as annotations - when running the YAML linter command in a Github Action environment. - -5.1.0 ------ - - * Added support for parsing numbers prefixed with `0o` as octal numbers. - * Deprecated support for parsing numbers starting with `0` as octal numbers. They will be parsed as strings as of Symfony 6.0. Prefix numbers with `0o` - so that they are parsed as octal numbers. - - Before: - - ```yaml - Yaml::parse('072'); - ``` - - After: - - ```yaml - Yaml::parse('0o72'); - ``` - - * Added `yaml-lint` binary. - * Deprecated using the `!php/object` and `!php/const` tags without a value. - -5.0.0 ------ - - * Removed support for mappings inside multi-line strings. - * removed support for implicit STDIN usage in the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. - -4.4.0 ------ - - * Added support for parsing the inline notation spanning multiple lines. - * Added support to dump `null` as `~` by using the `Yaml::DUMP_NULL_AS_TILDE` flag. - * deprecated accepting STDIN implicitly when using the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. - -4.3.0 ------ - - * Using a mapping inside a multi-line string is deprecated and will throw a `ParseException` in 5.0. - -4.2.0 ------ - - * added support for multiple files or directories in `LintCommand` - -4.0.0 ------ - - * The behavior of the non-specific tag `!` is changed and now forces - non-evaluating your values. - * complex mappings will throw a `ParseException` - * support for the comma as a group separator for floats has been dropped, use - the underscore instead - * support for the `!!php/object` tag has been dropped, use the `!php/object` - tag instead - * duplicate mapping keys throw a `ParseException` - * non-string mapping keys throw a `ParseException`, use the `Yaml::PARSE_KEYS_AS_STRINGS` - flag to cast them to strings - * `%` at the beginning of an unquoted string throw a `ParseException` - * mappings with a colon (`:`) that is not followed by a whitespace throw a - `ParseException` - * the `Dumper::setIndentation()` method has been removed - * being able to pass boolean options to the `Yaml::parse()`, `Yaml::dump()`, - `Parser::parse()`, and `Dumper::dump()` methods to configure the behavior of - the parser and dumper is no longer supported, pass bitmask flags instead - * the constructor arguments of the `Parser` class have been removed - * the `Inline` class is internal and no longer part of the BC promise - * removed support for the `!str` tag, use the `!!str` tag instead - * added support for tagged scalars. - - ```yml - Yaml::parse('!foo bar', Yaml::PARSE_CUSTOM_TAGS); - // returns TaggedValue('foo', 'bar'); - ``` - -3.4.0 ------ - - * added support for parsing YAML files using the `Yaml::parseFile()` or `Parser::parseFile()` method - - * the `Dumper`, `Parser`, and `Yaml` classes are marked as final - - * Deprecated the `!php/object:` tag which will be replaced by the - `!php/object` tag (without the colon) in 4.0. - - * Deprecated the `!php/const:` tag which will be replaced by the - `!php/const` tag (without the colon) in 4.0. - - * Support for the `!str` tag is deprecated, use the `!!str` tag instead. - - * Deprecated using the non-specific tag `!` as its behavior will change in 4.0. - It will force non-evaluating your values in 4.0. Use plain integers or `!!float` instead. - -3.3.0 ------ - - * Starting an unquoted string with a question mark followed by a space is - deprecated and will throw a `ParseException` in Symfony 4.0. - - * Deprecated support for implicitly parsing non-string mapping keys as strings. - Mapping keys that are no strings will lead to a `ParseException` in Symfony - 4.0. Use quotes to opt-in for keys to be parsed as strings. - - Before: - - ```php - $yaml = << new A(), 'bar' => 1], 0, 0, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE | Yaml::DUMP_OBJECT); - ``` - -3.0.0 ------ - - * Yaml::parse() now throws an exception when a blackslash is not escaped - in double-quoted strings - -2.8.0 ------ - - * Deprecated usage of a colon in an unquoted mapping value - * Deprecated usage of @, \`, | and > at the beginning of an unquoted string - * When surrounding strings with double-quotes, you must now escape `\` characters. Not - escaping those characters (when surrounded by double-quotes) is deprecated. - - Before: - - ```yml - class: "Foo\Var" - ``` - - After: - - ```yml - class: "Foo\\Var" - ``` - -2.1.0 ------ - - * Yaml::parse() does not evaluate loaded files as PHP files by default - anymore (call Yaml::enablePhpParsing() to get back the old behavior) diff --git a/deps/vendor/symfony/yaml/LICENSE b/deps/vendor/symfony/yaml/LICENSE deleted file mode 100644 index 88bf75bb4..000000000 --- a/deps/vendor/symfony/yaml/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2004-2022 Fabien Potencier - -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/deps/vendor/symfony/yaml/README.md b/deps/vendor/symfony/yaml/README.md deleted file mode 100644 index ac25024b6..000000000 --- a/deps/vendor/symfony/yaml/README.md +++ /dev/null @@ -1,13 +0,0 @@ -Yaml Component -============== - -The Yaml component loads and dumps YAML files. - -Resources ---------- - - * [Documentation](https://symfony.com/doc/current/components/yaml.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/deps/vendor/symfony/yaml/Resources/bin/yaml-lint b/deps/vendor/symfony/yaml/Resources/bin/yaml-lint deleted file mode 100755 index 0ad73d714..000000000 --- a/deps/vendor/symfony/yaml/Resources/bin/yaml-lint +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Runs the Yaml lint command. - * - * @author Jan Schädlich - */ - -use Symfony\Component\Console\Application; -use Symfony\Component\Yaml\Command\LintCommand; - -function includeIfExists(string $file): bool -{ - return file_exists($file) && include $file; -} - -if ( - !includeIfExists(__DIR__ . '/../../../../autoload.php') && - !includeIfExists(__DIR__ . '/../../vendor/autoload.php') && - !includeIfExists(__DIR__ . '/../../../../../../vendor/autoload.php') -) { - fwrite(STDERR, 'Install dependencies using Composer.'.PHP_EOL); - exit(1); -} - -if (!class_exists(Application::class)) { - fwrite(STDERR, 'You need the "symfony/console" component in order to run the Yaml linter.'.PHP_EOL); - exit(1); -} - -(new Application())->add($command = new LintCommand()) - ->getApplication() - ->setDefaultCommand($command->getName(), true) - ->run() -; diff --git a/deps/vendor/symfony/yaml/composer.json b/deps/vendor/symfony/yaml/composer.json deleted file mode 100644 index 7fa6e2cc5..000000000 --- a/deps/vendor/symfony/yaml/composer.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "symfony/yaml", - "type": "library", - "description": "Loads and dumps YAML files", - "keywords": [], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-ctype": "^1.8" - }, - "require-dev": { - "symfony/console": "^5.3|^6.0" - }, - "conflict": { - "symfony/console": "<5.3" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "autoload": { - "psr-4": { "Symfony\\Component\\Yaml\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "minimum-stability": "dev" -} diff --git a/src/Component/PharUpdate/Update.php b/src/Component/PharUpdate/Update.php index b17509132..44f0a5970 100644 --- a/src/Component/PharUpdate/Update.php +++ b/src/Component/PharUpdate/Update.php @@ -76,7 +76,7 @@ public function __construct( string $sha1, string $url, Version $version, - string $key = null, + string $key = null ) { $this->name = $name; $this->publicKey = $key; diff --git a/src/Component/PharUpdate/Version/Version.php b/src/Component/PharUpdate/Version/Version.php index cdaba88c4..e178c4018 100644 --- a/src/Component/PharUpdate/Version/Version.php +++ b/src/Component/PharUpdate/Version/Version.php @@ -60,7 +60,7 @@ public function __construct( int $minor = 0, int $patch = 0, array $pre = [], - array $build = [], + array $build = [] ) { $this->build = $build; $this->major = $major; diff --git a/src/Exception/RunException.php b/src/Exception/RunException.php index 3d638df11..cf767aa21 100644 --- a/src/Exception/RunException.php +++ b/src/Exception/RunException.php @@ -41,7 +41,7 @@ public function __construct( string $command, int $exitCode, string $output, - string $errorOutput, + string $errorOutput ) { $this->host = $host; $this->command = $command; diff --git a/src/Exception/TimeoutException.php b/src/Exception/TimeoutException.php index 06a2c6d1d..cda25191d 100644 --- a/src/Exception/TimeoutException.php +++ b/src/Exception/TimeoutException.php @@ -14,7 +14,7 @@ class TimeoutException extends Exception { public function __construct( string $command, - ?float $timeout, + ?float $timeout ) { $message = sprintf('The command "%s" exceeded the timeout of %s seconds.', $command, $timeout); parent::__construct($message, 1); diff --git a/src/Executor/Master.php b/src/Executor/Master.php index e3a7b4884..fd4bb06af 100644 --- a/src/Executor/Master.php +++ b/src/Executor/Master.php @@ -61,7 +61,7 @@ public function __construct( InputInterface $input, OutputInterface $output, Server $server, - Messenger $messenger, + Messenger $messenger ) { $this->input = $input; $this->output = $output; diff --git a/src/Executor/Server.php b/src/Executor/Server.php index 022a5aabf..c8006dda1 100644 --- a/src/Executor/Server.php +++ b/src/Executor/Server.php @@ -46,7 +46,7 @@ class Server public function __construct( OutputInterface $output, - Deployer $deployer, + Deployer $deployer ) { $this->output = $output; $this->deployer = $deployer; diff --git a/vendor/autoload.php b/vendor/autoload.php new file mode 100644 index 000000000..c9f659bd4 --- /dev/null +++ b/vendor/autoload.php @@ -0,0 +1,7 @@ +> - */ private $prefixLengthsPsr4 = array(); - /** - * @var array> - */ private $prefixDirsPsr4 = array(); - /** - * @var list - */ private $fallbackDirsPsr4 = array(); // PSR-0 - /** - * List of PSR-0 prefixes - * - * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) - * - * @var array>> - */ private $prefixesPsr0 = array(); - /** - * @var list - */ private $fallbackDirsPsr0 = array(); - /** @var bool */ private $useIncludePath = false; - - /** - * @var array - */ private $classMap = array(); - - /** @var bool */ private $classMapAuthoritative = false; - - /** - * @var array - */ private $missingClasses = array(); - - /** @var string|null */ private $apcuPrefix; - /** - * @var array - */ - private static $registeredLoaders = array(); - - /** - * @param string|null $vendorDir - */ - public function __construct($vendorDir = null) - { - $this->vendorDir = $vendorDir; - self::initializeIncludeClosure(); - } - - /** - * @return array> - */ public function getPrefixes() { if (!empty($this->prefixesPsr0)) { @@ -121,42 +66,28 @@ public function getPrefixes() return array(); } - /** - * @return array> - */ public function getPrefixesPsr4() { return $this->prefixDirsPsr4; } - /** - * @return list - */ public function getFallbackDirs() { return $this->fallbackDirsPsr0; } - /** - * @return list - */ public function getFallbackDirsPsr4() { return $this->fallbackDirsPsr4; } - /** - * @return array Array of classname => path - */ public function getClassMap() { return $this->classMap; } /** - * @param array $classMap Class to filename map - * - * @return void + * @param array $classMap Class to filename map */ public function addClassMap(array $classMap) { @@ -171,25 +102,22 @@ public function addClassMap(array $classMap) * Registers a set of PSR-0 directories for a given prefix, either * appending or prepending to the ones previously set for this prefix. * - * @param string $prefix The prefix - * @param list|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - * - * @return void + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories */ public function add($prefix, $paths, $prepend = false) { - $paths = (array) $paths; if (!$prefix) { if ($prepend) { $this->fallbackDirsPsr0 = array_merge( - $paths, + (array) $paths, $this->fallbackDirsPsr0 ); } else { $this->fallbackDirsPsr0 = array_merge( $this->fallbackDirsPsr0, - $paths + (array) $paths ); } @@ -198,19 +126,19 @@ public function add($prefix, $paths, $prepend = false) $first = $prefix[0]; if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = $paths; + $this->prefixesPsr0[$first][$prefix] = (array) $paths; return; } if ($prepend) { $this->prefixesPsr0[$first][$prefix] = array_merge( - $paths, + (array) $paths, $this->prefixesPsr0[$first][$prefix] ); } else { $this->prefixesPsr0[$first][$prefix] = array_merge( $this->prefixesPsr0[$first][$prefix], - $paths + (array) $paths ); } } @@ -219,28 +147,25 @@ public function add($prefix, $paths, $prepend = false) * Registers a set of PSR-4 directories for a given namespace, either * appending or prepending to the ones previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param list|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories + * @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 * * @throws \InvalidArgumentException - * - * @return void */ public function addPsr4($prefix, $paths, $prepend = false) { - $paths = (array) $paths; if (!$prefix) { // Register directories for the root namespace. if ($prepend) { $this->fallbackDirsPsr4 = array_merge( - $paths, + (array) $paths, $this->fallbackDirsPsr4 ); } else { $this->fallbackDirsPsr4 = array_merge( $this->fallbackDirsPsr4, - $paths + (array) $paths ); } } elseif (!isset($this->prefixDirsPsr4[$prefix])) { @@ -250,18 +175,18 @@ public function addPsr4($prefix, $paths, $prepend = false) throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); } $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = $paths; + $this->prefixDirsPsr4[$prefix] = (array) $paths; } elseif ($prepend) { // Prepend directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( - $paths, + (array) $paths, $this->prefixDirsPsr4[$prefix] ); } else { // Append directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( $this->prefixDirsPsr4[$prefix], - $paths + (array) $paths ); } } @@ -270,10 +195,8 @@ public function addPsr4($prefix, $paths, $prepend = false) * Registers a set of PSR-0 directories for a given prefix, * replacing any others previously set for this prefix. * - * @param string $prefix The prefix - * @param list|string $paths The PSR-0 base directories - * - * @return void + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories */ public function set($prefix, $paths) { @@ -288,12 +211,10 @@ public function set($prefix, $paths) * Registers a set of PSR-4 directories for a given namespace, * replacing any others previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param list|string $paths The PSR-4 base directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories * * @throws \InvalidArgumentException - * - * @return void */ public function setPsr4($prefix, $paths) { @@ -313,8 +234,6 @@ public function setPsr4($prefix, $paths) * Turns on searching the include path for class files. * * @param bool $useIncludePath - * - * @return void */ public function setUseIncludePath($useIncludePath) { @@ -337,8 +256,6 @@ public function getUseIncludePath() * that have not been registered with the class map. * * @param bool $classMapAuthoritative - * - * @return void */ public function setClassMapAuthoritative($classMapAuthoritative) { @@ -359,8 +276,6 @@ public function isClassMapAuthoritative() * 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) { @@ -381,55 +296,33 @@ public function getApcuPrefix() * Registers this instance as an autoloader. * * @param bool $prepend Whether to prepend the autoloader or not - * - * @return void */ public function register($prepend = false) { spl_autoload_register(array($this, 'loadClass'), true, $prepend); - - if (null === $this->vendorDir) { - return; - } - - if ($prepend) { - self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; - } else { - unset(self::$registeredLoaders[$this->vendorDir]); - self::$registeredLoaders[$this->vendorDir] = $this; - } } /** * Unregisters this instance as an autoloader. - * - * @return void */ public function unregister() { spl_autoload_unregister(array($this, 'loadClass')); - - if (null !== $this->vendorDir) { - unset(self::$registeredLoaders[$this->vendorDir]); - } } /** * Loads the given class or interface. * * @param string $class The name of the class - * @return true|null True if loaded, null otherwise + * @return bool|null True if loaded, null otherwise */ public function loadClass($class) { if ($file = $this->findFile($class)) { - $includeFile = self::$includeFile; - $includeFile($file); + includeFile($file); return true; } - - return null; } /** @@ -474,21 +367,6 @@ public function findFile($class) return $file; } - /** - * Returns the currently registered loaders keyed by their corresponding vendor directories. - * - * @return array - */ - public static function getRegisteredLoaders() - { - return self::$registeredLoaders; - } - - /** - * @param string $class - * @param string $ext - * @return string|false - */ private function findFileWithExtension($class, $ext) { // PSR-4 lookup @@ -554,26 +432,14 @@ private function findFileWithExtension($class, $ext) return false; } +} - /** - * @return void - */ - private static function initializeIncludeClosure() - { - if (self::$includeFile !== null) { - return; - } - - /** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - * - * @param string $file - * @return void - */ - self::$includeFile = \Closure::bind(static function($file) { - include $file; - }, null, null); - } +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; } diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php new file mode 100644 index 000000000..6ffa4b9b7 --- /dev/null +++ b/vendor/composer/InstalledVersions.php @@ -0,0 +1,476 @@ + + array ( + 'pretty_version' => 'v7.1.2', + 'version' => '7.1.2.0', + 'aliases' => + array ( + ), + 'reference' => '6b354c2e89198e64a0244fb96cc5604312027800', + 'name' => 'deployer/deployer', + ), + 'versions' => + array ( + 'deployer/deployer' => + array ( + 'pretty_version' => 'v7.1.2', + 'version' => '7.1.2.0', + 'aliases' => + array ( + ), + 'reference' => '6b354c2e89198e64a0244fb96cc5604312027800', + ), + 'evenement/evenement' => + array ( + 'pretty_version' => 'v3.0.1', + 'version' => '3.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '531bfb9d15f8aa57454f5f0285b18bec903b8fb7', + ), + 'fig/http-message-util' => + array ( + 'pretty_version' => '1.1.5', + 'version' => '1.1.5.0', + 'aliases' => + array ( + ), + 'reference' => '9d94dc0154230ac39e5bf89398b324a86f63f765', + ), + 'justinrainbow/json-schema' => + array ( + 'pretty_version' => '5.2.11', + 'version' => '5.2.11.0', + 'aliases' => + array ( + ), + 'reference' => '2ab6744b7296ded80f8cc4f9509abbff393399aa', + ), + 'psr/container' => + array ( + 'pretty_version' => '1.1.1', + 'version' => '1.1.1.0', + 'aliases' => + array ( + ), + 'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf', + ), + 'psr/http-message' => + array ( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'aliases' => + array ( + ), + 'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363', + ), + 'psr/http-message-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0', + ), + ), + 'psr/log-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0|2.0', + ), + ), + 'react/cache' => + array ( + 'pretty_version' => 'v1.1.1', + 'version' => '1.1.1.0', + 'aliases' => + array ( + ), + 'reference' => '4bf736a2cccec7298bdf745db77585966fc2ca7e', + ), + 'react/dns' => + array ( + 'pretty_version' => 'v1.9.0', + 'version' => '1.9.0.0', + 'aliases' => + array ( + ), + 'reference' => '6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb', + ), + 'react/event-loop' => + array ( + 'pretty_version' => 'v1.2.0', + 'version' => '1.2.0.0', + 'aliases' => + array ( + ), + 'reference' => 'be6dee480fc4692cec0504e65eb486e3be1aa6f2', + ), + 'react/http' => + array ( + 'pretty_version' => 'v1.6.0', + 'version' => '1.6.0.0', + 'aliases' => + array ( + ), + 'reference' => '59961cc4a5b14481728f07c591546be18fa3a5c7', + ), + 'react/promise' => + array ( + 'pretty_version' => 'v2.9.0', + 'version' => '2.9.0.0', + 'aliases' => + array ( + ), + 'reference' => '234f8fd1023c9158e2314fa9d7d0e6a83db42910', + ), + 'react/promise-stream' => + array ( + 'pretty_version' => 'v1.3.0', + 'version' => '1.3.0.0', + 'aliases' => + array ( + ), + 'reference' => '3ebd94fe0d8edbf44937948af28d02d5437e9949', + ), + 'react/promise-timer' => + array ( + 'pretty_version' => 'v1.8.0', + 'version' => '1.8.0.0', + 'aliases' => + array ( + ), + 'reference' => '0bbbcc79589e5bfdddba68a287f1cb805581a479', + ), + 'react/socket' => + array ( + 'pretty_version' => 'v1.11.0', + 'version' => '1.11.0.0', + 'aliases' => + array ( + ), + 'reference' => 'f474156aaab4f09041144fa8b57c7d70aed32a1c', + ), + 'react/stream' => + array ( + 'pretty_version' => 'v1.2.0', + 'version' => '1.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '7a423506ee1903e89f1e08ec5f0ed430ff784ae9', + ), + 'ringcentral/psr7' => + array ( + 'pretty_version' => '1.3.0', + 'version' => '1.3.0.0', + 'aliases' => + array ( + ), + 'reference' => '360faaec4b563958b673fb52bbe94e37f14bc686', + ), + 'symfony/console' => + array ( + 'pretty_version' => 'v5.4.17', + 'version' => '5.4.17.0', + 'aliases' => + array ( + ), + 'reference' => '58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f', + ), + 'symfony/deprecation-contracts' => + array ( + 'pretty_version' => 'v2.5.0', + 'version' => '2.5.0.0', + 'aliases' => + array ( + ), + 'reference' => '6f981ee24cf69ee7ce9736146d1c57c2780598a8', + ), + 'symfony/polyfill-ctype' => + array ( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'aliases' => + array ( + ), + 'reference' => '30885182c981ab175d4d034db0f6f469898070ab', + ), + 'symfony/polyfill-intl-grapheme' => + array ( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'aliases' => + array ( + ), + 'reference' => '81b86b50cf841a64252b439e738e97f4a34e2783', + ), + 'symfony/polyfill-intl-normalizer' => + array ( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'aliases' => + array ( + ), + 'reference' => '8590a5f561694770bdcd3f9b5c69dde6945028e8', + ), + 'symfony/polyfill-mbstring' => + array ( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'aliases' => + array ( + ), + 'reference' => '0abb51d2f102e00a4eefcf46ba7fec406d245825', + ), + 'symfony/polyfill-php73' => + array ( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'aliases' => + array ( + ), + 'reference' => 'cc5db0e22b3cb4111010e48785a97f670b350ca5', + ), + 'symfony/polyfill-php80' => + array ( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'aliases' => + array ( + ), + 'reference' => '4407588e0d3f1f52efb65fbe92babe41f37fe50c', + ), + 'symfony/process' => + array ( + 'pretty_version' => 'v5.4.5', + 'version' => '5.4.5.0', + 'aliases' => + array ( + ), + 'reference' => '95440409896f90a5f85db07a32b517ecec17fa4c', + ), + 'symfony/service-contracts' => + array ( + 'pretty_version' => 'v2.5.0', + 'version' => '2.5.0.0', + 'aliases' => + array ( + ), + 'reference' => '1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc', + ), + 'symfony/string' => + array ( + 'pretty_version' => 'v5.4.3', + 'version' => '5.4.3.0', + 'aliases' => + array ( + ), + 'reference' => '92043b7d8383e48104e411bc9434b260dbeb5a10', + ), + 'symfony/yaml' => + array ( + 'pretty_version' => 'v5.4.3', + 'version' => '5.4.3.0', + 'aliases' => + array ( + ), + 'reference' => 'e80f87d2c9495966768310fc531b487ce64237a2', + ), + ), +); + + + + + + + +public static function getInstalledPackages() +{ +return array_keys(self::$installed['versions']); +} + + + + + + + + + +public static function isInstalled($packageName) +{ +return isset(self::$installed['versions'][$packageName]); +} + + + + + + + + + + + + + + +public static function satisfies(VersionParser $parser, $packageName, $constraint) +{ +$constraint = $parser->parseConstraints($constraint); +$provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + +return $provided->matches($constraint); +} + + + + + + + + + + +public static function getVersionRanges($packageName) +{ +if (!isset(self::$installed['versions'][$packageName])) { +throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); +} + +$ranges = array(); +if (isset(self::$installed['versions'][$packageName]['pretty_version'])) { +$ranges[] = self::$installed['versions'][$packageName]['pretty_version']; +} +if (array_key_exists('aliases', self::$installed['versions'][$packageName])) { +$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']); +} +if (array_key_exists('replaced', self::$installed['versions'][$packageName])) { +$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']); +} +if (array_key_exists('provided', self::$installed['versions'][$packageName])) { +$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']); +} + +return implode(' || ', $ranges); +} + + + + + +public static function getVersion($packageName) +{ +if (!isset(self::$installed['versions'][$packageName])) { +throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); +} + +if (!isset(self::$installed['versions'][$packageName]['version'])) { +return null; +} + +return self::$installed['versions'][$packageName]['version']; +} + + + + + +public static function getPrettyVersion($packageName) +{ +if (!isset(self::$installed['versions'][$packageName])) { +throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); +} + +if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) { +return null; +} + +return self::$installed['versions'][$packageName]['pretty_version']; +} + + + + + +public static function getReference($packageName) +{ +if (!isset(self::$installed['versions'][$packageName])) { +throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); +} + +if (!isset(self::$installed['versions'][$packageName]['reference'])) { +return null; +} + +return self::$installed['versions'][$packageName]['reference']; +} + + + + + +public static function getRootPackage() +{ +return self::$installed['root']; +} + + + + + + + +public static function getRawData() +{ +return self::$installed; +} + + + + + + + + + + + + + + + + + + + +public static function reload($data) +{ +self::$installed = $data; +} +} diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php new file mode 100644 index 000000000..4ac4a79a0 --- /dev/null +++ b/vendor/composer/autoload_classmap.php @@ -0,0 +1,451 @@ + $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', + 'Deployer\\Collection\\Collection' => $baseDir . '/src/Collection/Collection.php', + 'Deployer\\Command\\BlackjackCommand' => $baseDir . '/src/Command/BlackjackCommand.php', + 'Deployer\\Command\\CommandCommon' => $baseDir . '/src/Command/CommandCommon.php', + 'Deployer\\Command\\ConfigCommand' => $baseDir . '/src/Command/ConfigCommand.php', + 'Deployer\\Command\\CustomOption' => $baseDir . '/src/Command/CustomOption.php', + 'Deployer\\Command\\InitCommand' => $baseDir . '/src/Command/InitCommand.php', + 'Deployer\\Command\\MainCommand' => $baseDir . '/src/Command/MainCommand.php', + 'Deployer\\Command\\RunCommand' => $baseDir . '/src/Command/RunCommand.php', + 'Deployer\\Command\\SelectCommand' => $baseDir . '/src/Command/SelectCommand.php', + 'Deployer\\Command\\SshCommand' => $baseDir . '/src/Command/SshCommand.php', + 'Deployer\\Command\\TreeCommand' => $baseDir . '/src/Command/TreeCommand.php', + 'Deployer\\Command\\WorkerCommand' => $baseDir . '/src/Command/WorkerCommand.php', + 'Deployer\\Component\\PharUpdate\\Console\\Command' => $baseDir . '/src/Component/PharUpdate/Console/Command.php', + 'Deployer\\Component\\PharUpdate\\Console\\Helper' => $baseDir . '/src/Component/PharUpdate/Console/Helper.php', + 'Deployer\\Component\\PharUpdate\\Exception\\Exception' => $baseDir . '/src/Component/PharUpdate/Exception/Exception.php', + 'Deployer\\Component\\PharUpdate\\Exception\\ExceptionInterface' => $baseDir . '/src/Component/PharUpdate/Exception/ExceptionInterface.php', + 'Deployer\\Component\\PharUpdate\\Exception\\FileException' => $baseDir . '/src/Component/PharUpdate/Exception/FileException.php', + 'Deployer\\Component\\PharUpdate\\Exception\\InvalidArgumentException' => $baseDir . '/src/Component/PharUpdate/Exception/InvalidArgumentException.php', + 'Deployer\\Component\\PharUpdate\\Exception\\LogicException' => $baseDir . '/src/Component/PharUpdate/Exception/LogicException.php', + 'Deployer\\Component\\PharUpdate\\Manager' => $baseDir . '/src/Component/PharUpdate/Manager.php', + 'Deployer\\Component\\PharUpdate\\Manifest' => $baseDir . '/src/Component/PharUpdate/Manifest.php', + 'Deployer\\Component\\PharUpdate\\Update' => $baseDir . '/src/Component/PharUpdate/Update.php', + 'Deployer\\Component\\PharUpdate\\Version\\Builder' => $baseDir . '/src/Component/PharUpdate/Version/Builder.php', + 'Deployer\\Component\\PharUpdate\\Version\\Comparator' => $baseDir . '/src/Component/PharUpdate/Version/Comparator.php', + 'Deployer\\Component\\PharUpdate\\Version\\Dumper' => $baseDir . '/src/Component/PharUpdate/Version/Dumper.php', + 'Deployer\\Component\\PharUpdate\\Version\\Exception\\InvalidIdentifierException' => $baseDir . '/src/Component/PharUpdate/Version/Exception/InvalidIdentifierException.php', + 'Deployer\\Component\\PharUpdate\\Version\\Exception\\InvalidNumberException' => $baseDir . '/src/Component/PharUpdate/Version/Exception/InvalidNumberException.php', + 'Deployer\\Component\\PharUpdate\\Version\\Exception\\InvalidStringRepresentationException' => $baseDir . '/src/Component/PharUpdate/Version/Exception/InvalidStringRepresentationException.php', + 'Deployer\\Component\\PharUpdate\\Version\\Exception\\VersionException' => $baseDir . '/src/Component/PharUpdate/Version/Exception/VersionException.php', + 'Deployer\\Component\\PharUpdate\\Version\\Parser' => $baseDir . '/src/Component/PharUpdate/Version/Parser.php', + 'Deployer\\Component\\PharUpdate\\Version\\Validator' => $baseDir . '/src/Component/PharUpdate/Version/Validator.php', + 'Deployer\\Component\\PharUpdate\\Version\\Version' => $baseDir . '/src/Component/PharUpdate/Version/Version.php', + 'Deployer\\Component\\Pimple\\Container' => $baseDir . '/src/Component/Pimple/Container.php', + 'Deployer\\Component\\Pimple\\Exception\\ExpectedInvokableException' => $baseDir . '/src/Component/Pimple/Exception/ExpectedInvokableException.php', + 'Deployer\\Component\\Pimple\\Exception\\FrozenServiceException' => $baseDir . '/src/Component/Pimple/Exception/FrozenServiceException.php', + 'Deployer\\Component\\Pimple\\Exception\\InvalidServiceIdentifierException' => $baseDir . '/src/Component/Pimple/Exception/InvalidServiceIdentifierException.php', + 'Deployer\\Component\\Pimple\\Exception\\UnknownIdentifierException' => $baseDir . '/src/Component/Pimple/Exception/UnknownIdentifierException.php', + 'Deployer\\Component\\ProcessRunner\\Printer' => $baseDir . '/src/Component/ProcessRunner/Printer.php', + 'Deployer\\Component\\ProcessRunner\\ProcessRunner' => $baseDir . '/src/Component/ProcessRunner/ProcessRunner.php', + 'Deployer\\Component\\Ssh\\Client' => $baseDir . '/src/Component/Ssh/Client.php', + 'Deployer\\Component\\Ssh\\IOArguments' => $baseDir . '/src/Component/Ssh/IOArguments.php', + 'Deployer\\Configuration\\Configuration' => $baseDir . '/src/Configuration/Configuration.php', + 'Deployer\\Deployer' => $baseDir . '/src/Deployer.php', + 'Deployer\\Documentation\\ApiGen' => $baseDir . '/src/Documentation/ApiGen.php', + 'Deployer\\Documentation\\DocConfig' => $baseDir . '/src/Documentation/DocConfig.php', + 'Deployer\\Documentation\\DocGen' => $baseDir . '/src/Documentation/DocGen.php', + 'Deployer\\Documentation\\DocRecipe' => $baseDir . '/src/Documentation/DocRecipe.php', + 'Deployer\\Documentation\\DocTask' => $baseDir . '/src/Documentation/DocTask.php', + 'Deployer\\Exception\\ConfigurationException' => $baseDir . '/src/Exception/ConfigurationException.php', + 'Deployer\\Exception\\Exception' => $baseDir . '/src/Exception/Exception.php', + 'Deployer\\Exception\\GracefulShutdownException' => $baseDir . '/src/Exception/GracefulShutdownException.php', + 'Deployer\\Exception\\HttpieException' => $baseDir . '/src/Exception/HttpieException.php', + 'Deployer\\Exception\\RunException' => $baseDir . '/src/Exception/RunException.php', + 'Deployer\\Exception\\TimeoutException' => $baseDir . '/src/Exception/TimeoutException.php', + 'Deployer\\Exception\\WillAskUser' => $baseDir . '/src/Exception/WillAskUser.php', + 'Deployer\\Executor\\Master' => $baseDir . '/src/Executor/Master.php', + 'Deployer\\Executor\\Messenger' => $baseDir . '/src/Executor/Messenger.php', + 'Deployer\\Executor\\Planner' => $baseDir . '/src/Executor/Planner.php', + 'Deployer\\Executor\\Server' => $baseDir . '/src/Executor/Server.php', + 'Deployer\\Executor\\Worker' => $baseDir . '/src/Executor/Worker.php', + 'Deployer\\Host\\Host' => $baseDir . '/src/Host/Host.php', + 'Deployer\\Host\\HostCollection' => $baseDir . '/src/Host/HostCollection.php', + 'Deployer\\Host\\Localhost' => $baseDir . '/src/Host/Localhost.php', + 'Deployer\\Host\\Range' => $baseDir . '/src/Host/Range.php', + 'Deployer\\Importer\\Importer' => $baseDir . '/src/Importer/Importer.php', + 'Deployer\\Logger\\Handler\\FileHandler' => $baseDir . '/src/Logger/Handler/FileHandler.php', + 'Deployer\\Logger\\Handler\\HandlerInterface' => $baseDir . '/src/Logger/Handler/HandlerInterface.php', + 'Deployer\\Logger\\Handler\\NullHandler' => $baseDir . '/src/Logger/Handler/NullHandler.php', + 'Deployer\\Logger\\Logger' => $baseDir . '/src/Logger/Logger.php', + 'Deployer\\Selector\\Selector' => $baseDir . '/src/Selector/Selector.php', + 'Deployer\\Support\\ObjectProxy' => $baseDir . '/src/Support/ObjectProxy.php', + 'Deployer\\Support\\Reporter' => $baseDir . '/src/Support/Reporter.php', + 'Deployer\\Task\\Context' => $baseDir . '/src/Task/Context.php', + 'Deployer\\Task\\GroupTask' => $baseDir . '/src/Task/GroupTask.php', + 'Deployer\\Task\\ScriptManager' => $baseDir . '/src/Task/ScriptManager.php', + 'Deployer\\Task\\Task' => $baseDir . '/src/Task/Task.php', + 'Deployer\\Task\\TaskCollection' => $baseDir . '/src/Task/TaskCollection.php', + 'Deployer\\Utility\\Httpie' => $baseDir . '/src/Utility/Httpie.php', + 'Deployer\\Utility\\Rsync' => $baseDir . '/src/Utility/Rsync.php', + 'Evenement\\EventEmitter' => $vendorDir . '/evenement/evenement/src/Evenement/EventEmitter.php', + 'Evenement\\EventEmitterInterface' => $vendorDir . '/evenement/evenement/src/Evenement/EventEmitterInterface.php', + 'Evenement\\EventEmitterTrait' => $vendorDir . '/evenement/evenement/src/Evenement/EventEmitterTrait.php', + 'Fig\\Http\\Message\\RequestMethodInterface' => $vendorDir . '/fig/http-message-util/src/RequestMethodInterface.php', + 'Fig\\Http\\Message\\StatusCodeInterface' => $vendorDir . '/fig/http-message-util/src/StatusCodeInterface.php', + 'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', + 'JsonSchema\\Constraints\\BaseConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php', + 'JsonSchema\\Constraints\\CollectionConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php', + 'JsonSchema\\Constraints\\Constraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php', + 'JsonSchema\\Constraints\\ConstraintInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php', + 'JsonSchema\\Constraints\\EnumConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php', + 'JsonSchema\\Constraints\\Factory' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php', + 'JsonSchema\\Constraints\\FormatConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php', + 'JsonSchema\\Constraints\\NumberConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php', + 'JsonSchema\\Constraints\\ObjectConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php', + 'JsonSchema\\Constraints\\SchemaConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php', + 'JsonSchema\\Constraints\\StringConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php', + 'JsonSchema\\Constraints\\TypeCheck\\LooseTypeCheck' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.php', + 'JsonSchema\\Constraints\\TypeCheck\\StrictTypeCheck' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.php', + 'JsonSchema\\Constraints\\TypeCheck\\TypeCheckInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php', + 'JsonSchema\\Constraints\\TypeConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php', + 'JsonSchema\\Constraints\\UndefinedConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php', + 'JsonSchema\\Entity\\JsonPointer' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.php', + 'JsonSchema\\Exception\\ExceptionInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.php', + 'JsonSchema\\Exception\\InvalidArgumentException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php', + 'JsonSchema\\Exception\\InvalidConfigException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.php', + 'JsonSchema\\Exception\\InvalidSchemaException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.php', + 'JsonSchema\\Exception\\InvalidSchemaMediaTypeException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php', + 'JsonSchema\\Exception\\InvalidSourceUriException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php', + 'JsonSchema\\Exception\\JsonDecodingException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php', + 'JsonSchema\\Exception\\ResourceNotFoundException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php', + 'JsonSchema\\Exception\\RuntimeException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php', + 'JsonSchema\\Exception\\UnresolvableJsonPointerException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php', + 'JsonSchema\\Exception\\UriResolverException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php', + 'JsonSchema\\Exception\\ValidationException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.php', + 'JsonSchema\\Iterator\\ObjectIterator' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.php', + 'JsonSchema\\Rfc3339' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php', + 'JsonSchema\\SchemaStorage' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php', + 'JsonSchema\\SchemaStorageInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php', + 'JsonSchema\\UriResolverInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php', + 'JsonSchema\\UriRetrieverInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php', + 'JsonSchema\\Uri\\Retrievers\\AbstractRetriever' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php', + 'JsonSchema\\Uri\\Retrievers\\Curl' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php', + 'JsonSchema\\Uri\\Retrievers\\FileGetContents' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php', + 'JsonSchema\\Uri\\Retrievers\\PredefinedArray' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php', + 'JsonSchema\\Uri\\Retrievers\\UriRetrieverInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php', + 'JsonSchema\\Uri\\UriResolver' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php', + 'JsonSchema\\Uri\\UriRetriever' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php', + 'JsonSchema\\Validator' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Validator.php', + 'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', + 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', + '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\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php', + 'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php', + 'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php', + 'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php', + 'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php', + 'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php', + 'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php', + 'React\\Cache\\ArrayCache' => $vendorDir . '/react/cache/src/ArrayCache.php', + 'React\\Cache\\CacheInterface' => $vendorDir . '/react/cache/src/CacheInterface.php', + 'React\\Dns\\BadServerException' => $vendorDir . '/react/dns/src/BadServerException.php', + 'React\\Dns\\Config\\Config' => $vendorDir . '/react/dns/src/Config/Config.php', + 'React\\Dns\\Config\\HostsFile' => $vendorDir . '/react/dns/src/Config/HostsFile.php', + 'React\\Dns\\Model\\Message' => $vendorDir . '/react/dns/src/Model/Message.php', + 'React\\Dns\\Model\\Record' => $vendorDir . '/react/dns/src/Model/Record.php', + 'React\\Dns\\Protocol\\BinaryDumper' => $vendorDir . '/react/dns/src/Protocol/BinaryDumper.php', + 'React\\Dns\\Protocol\\Parser' => $vendorDir . '/react/dns/src/Protocol/Parser.php', + 'React\\Dns\\Query\\CachingExecutor' => $vendorDir . '/react/dns/src/Query/CachingExecutor.php', + 'React\\Dns\\Query\\CancellationException' => $vendorDir . '/react/dns/src/Query/CancellationException.php', + 'React\\Dns\\Query\\CoopExecutor' => $vendorDir . '/react/dns/src/Query/CoopExecutor.php', + 'React\\Dns\\Query\\ExecutorInterface' => $vendorDir . '/react/dns/src/Query/ExecutorInterface.php', + 'React\\Dns\\Query\\FallbackExecutor' => $vendorDir . '/react/dns/src/Query/FallbackExecutor.php', + 'React\\Dns\\Query\\HostsFileExecutor' => $vendorDir . '/react/dns/src/Query/HostsFileExecutor.php', + 'React\\Dns\\Query\\Query' => $vendorDir . '/react/dns/src/Query/Query.php', + 'React\\Dns\\Query\\RetryExecutor' => $vendorDir . '/react/dns/src/Query/RetryExecutor.php', + 'React\\Dns\\Query\\SelectiveTransportExecutor' => $vendorDir . '/react/dns/src/Query/SelectiveTransportExecutor.php', + 'React\\Dns\\Query\\TcpTransportExecutor' => $vendorDir . '/react/dns/src/Query/TcpTransportExecutor.php', + 'React\\Dns\\Query\\TimeoutException' => $vendorDir . '/react/dns/src/Query/TimeoutException.php', + 'React\\Dns\\Query\\TimeoutExecutor' => $vendorDir . '/react/dns/src/Query/TimeoutExecutor.php', + 'React\\Dns\\Query\\UdpTransportExecutor' => $vendorDir . '/react/dns/src/Query/UdpTransportExecutor.php', + 'React\\Dns\\RecordNotFoundException' => $vendorDir . '/react/dns/src/RecordNotFoundException.php', + 'React\\Dns\\Resolver\\Factory' => $vendorDir . '/react/dns/src/Resolver/Factory.php', + 'React\\Dns\\Resolver\\Resolver' => $vendorDir . '/react/dns/src/Resolver/Resolver.php', + 'React\\Dns\\Resolver\\ResolverInterface' => $vendorDir . '/react/dns/src/Resolver/ResolverInterface.php', + 'React\\EventLoop\\ExtEvLoop' => $vendorDir . '/react/event-loop/src/ExtEvLoop.php', + 'React\\EventLoop\\ExtEventLoop' => $vendorDir . '/react/event-loop/src/ExtEventLoop.php', + 'React\\EventLoop\\ExtLibevLoop' => $vendorDir . '/react/event-loop/src/ExtLibevLoop.php', + 'React\\EventLoop\\ExtLibeventLoop' => $vendorDir . '/react/event-loop/src/ExtLibeventLoop.php', + 'React\\EventLoop\\ExtUvLoop' => $vendorDir . '/react/event-loop/src/ExtUvLoop.php', + 'React\\EventLoop\\Factory' => $vendorDir . '/react/event-loop/src/Factory.php', + 'React\\EventLoop\\Loop' => $vendorDir . '/react/event-loop/src/Loop.php', + 'React\\EventLoop\\LoopInterface' => $vendorDir . '/react/event-loop/src/LoopInterface.php', + 'React\\EventLoop\\SignalsHandler' => $vendorDir . '/react/event-loop/src/SignalsHandler.php', + 'React\\EventLoop\\StreamSelectLoop' => $vendorDir . '/react/event-loop/src/StreamSelectLoop.php', + 'React\\EventLoop\\Tick\\FutureTickQueue' => $vendorDir . '/react/event-loop/src/Tick/FutureTickQueue.php', + 'React\\EventLoop\\TimerInterface' => $vendorDir . '/react/event-loop/src/TimerInterface.php', + 'React\\EventLoop\\Timer\\Timer' => $vendorDir . '/react/event-loop/src/Timer/Timer.php', + 'React\\EventLoop\\Timer\\Timers' => $vendorDir . '/react/event-loop/src/Timer/Timers.php', + 'React\\Http\\Browser' => $vendorDir . '/react/http/src/Browser.php', + 'React\\Http\\Client\\Client' => $vendorDir . '/react/http/src/Client/Client.php', + 'React\\Http\\Client\\Request' => $vendorDir . '/react/http/src/Client/Request.php', + 'React\\Http\\Client\\RequestData' => $vendorDir . '/react/http/src/Client/RequestData.php', + 'React\\Http\\HttpServer' => $vendorDir . '/react/http/src/HttpServer.php', + 'React\\Http\\Io\\BufferedBody' => $vendorDir . '/react/http/src/Io/BufferedBody.php', + 'React\\Http\\Io\\ChunkedDecoder' => $vendorDir . '/react/http/src/Io/ChunkedDecoder.php', + 'React\\Http\\Io\\ChunkedEncoder' => $vendorDir . '/react/http/src/Io/ChunkedEncoder.php', + 'React\\Http\\Io\\CloseProtectionStream' => $vendorDir . '/react/http/src/Io/CloseProtectionStream.php', + 'React\\Http\\Io\\EmptyBodyStream' => $vendorDir . '/react/http/src/Io/EmptyBodyStream.php', + 'React\\Http\\Io\\HttpBodyStream' => $vendorDir . '/react/http/src/Io/HttpBodyStream.php', + 'React\\Http\\Io\\IniUtil' => $vendorDir . '/react/http/src/Io/IniUtil.php', + 'React\\Http\\Io\\LengthLimitedStream' => $vendorDir . '/react/http/src/Io/LengthLimitedStream.php', + 'React\\Http\\Io\\MiddlewareRunner' => $vendorDir . '/react/http/src/Io/MiddlewareRunner.php', + 'React\\Http\\Io\\MultipartParser' => $vendorDir . '/react/http/src/Io/MultipartParser.php', + 'React\\Http\\Io\\PauseBufferStream' => $vendorDir . '/react/http/src/Io/PauseBufferStream.php', + 'React\\Http\\Io\\ReadableBodyStream' => $vendorDir . '/react/http/src/Io/ReadableBodyStream.php', + 'React\\Http\\Io\\RequestHeaderParser' => $vendorDir . '/react/http/src/Io/RequestHeaderParser.php', + 'React\\Http\\Io\\Sender' => $vendorDir . '/react/http/src/Io/Sender.php', + 'React\\Http\\Io\\StreamingServer' => $vendorDir . '/react/http/src/Io/StreamingServer.php', + 'React\\Http\\Io\\Transaction' => $vendorDir . '/react/http/src/Io/Transaction.php', + 'React\\Http\\Io\\UploadedFile' => $vendorDir . '/react/http/src/Io/UploadedFile.php', + 'React\\Http\\Message\\Response' => $vendorDir . '/react/http/src/Message/Response.php', + 'React\\Http\\Message\\ResponseException' => $vendorDir . '/react/http/src/Message/ResponseException.php', + 'React\\Http\\Message\\ServerRequest' => $vendorDir . '/react/http/src/Message/ServerRequest.php', + 'React\\Http\\Middleware\\LimitConcurrentRequestsMiddleware' => $vendorDir . '/react/http/src/Middleware/LimitConcurrentRequestsMiddleware.php', + 'React\\Http\\Middleware\\RequestBodyBufferMiddleware' => $vendorDir . '/react/http/src/Middleware/RequestBodyBufferMiddleware.php', + 'React\\Http\\Middleware\\RequestBodyParserMiddleware' => $vendorDir . '/react/http/src/Middleware/RequestBodyParserMiddleware.php', + 'React\\Http\\Middleware\\StreamingRequestMiddleware' => $vendorDir . '/react/http/src/Middleware/StreamingRequestMiddleware.php', + 'React\\Http\\Server' => $vendorDir . '/react/http/src/Server.php', + 'React\\Promise\\CancellablePromiseInterface' => $vendorDir . '/react/promise/src/CancellablePromiseInterface.php', + 'React\\Promise\\CancellationQueue' => $vendorDir . '/react/promise/src/CancellationQueue.php', + 'React\\Promise\\Deferred' => $vendorDir . '/react/promise/src/Deferred.php', + 'React\\Promise\\Exception\\LengthException' => $vendorDir . '/react/promise/src/Exception/LengthException.php', + 'React\\Promise\\ExtendedPromiseInterface' => $vendorDir . '/react/promise/src/ExtendedPromiseInterface.php', + 'React\\Promise\\FulfilledPromise' => $vendorDir . '/react/promise/src/FulfilledPromise.php', + 'React\\Promise\\LazyPromise' => $vendorDir . '/react/promise/src/LazyPromise.php', + 'React\\Promise\\Promise' => $vendorDir . '/react/promise/src/Promise.php', + 'React\\Promise\\PromiseInterface' => $vendorDir . '/react/promise/src/PromiseInterface.php', + 'React\\Promise\\PromisorInterface' => $vendorDir . '/react/promise/src/PromisorInterface.php', + 'React\\Promise\\RejectedPromise' => $vendorDir . '/react/promise/src/RejectedPromise.php', + 'React\\Promise\\Stream\\UnwrapReadableStream' => $vendorDir . '/react/promise-stream/src/UnwrapReadableStream.php', + 'React\\Promise\\Stream\\UnwrapWritableStream' => $vendorDir . '/react/promise-stream/src/UnwrapWritableStream.php', + 'React\\Promise\\Timer\\TimeoutException' => $vendorDir . '/react/promise-timer/src/TimeoutException.php', + 'React\\Promise\\UnhandledRejectionException' => $vendorDir . '/react/promise/src/UnhandledRejectionException.php', + 'React\\Socket\\Connection' => $vendorDir . '/react/socket/src/Connection.php', + 'React\\Socket\\ConnectionInterface' => $vendorDir . '/react/socket/src/ConnectionInterface.php', + 'React\\Socket\\Connector' => $vendorDir . '/react/socket/src/Connector.php', + 'React\\Socket\\ConnectorInterface' => $vendorDir . '/react/socket/src/ConnectorInterface.php', + 'React\\Socket\\DnsConnector' => $vendorDir . '/react/socket/src/DnsConnector.php', + 'React\\Socket\\FdServer' => $vendorDir . '/react/socket/src/FdServer.php', + 'React\\Socket\\FixedUriConnector' => $vendorDir . '/react/socket/src/FixedUriConnector.php', + 'React\\Socket\\HappyEyeBallsConnectionBuilder' => $vendorDir . '/react/socket/src/HappyEyeBallsConnectionBuilder.php', + 'React\\Socket\\HappyEyeBallsConnector' => $vendorDir . '/react/socket/src/HappyEyeBallsConnector.php', + 'React\\Socket\\LimitingServer' => $vendorDir . '/react/socket/src/LimitingServer.php', + 'React\\Socket\\SecureConnector' => $vendorDir . '/react/socket/src/SecureConnector.php', + 'React\\Socket\\SecureServer' => $vendorDir . '/react/socket/src/SecureServer.php', + 'React\\Socket\\Server' => $vendorDir . '/react/socket/src/Server.php', + 'React\\Socket\\ServerInterface' => $vendorDir . '/react/socket/src/ServerInterface.php', + 'React\\Socket\\SocketServer' => $vendorDir . '/react/socket/src/SocketServer.php', + 'React\\Socket\\StreamEncryption' => $vendorDir . '/react/socket/src/StreamEncryption.php', + 'React\\Socket\\TcpConnector' => $vendorDir . '/react/socket/src/TcpConnector.php', + 'React\\Socket\\TcpServer' => $vendorDir . '/react/socket/src/TcpServer.php', + 'React\\Socket\\TimeoutConnector' => $vendorDir . '/react/socket/src/TimeoutConnector.php', + 'React\\Socket\\UnixConnector' => $vendorDir . '/react/socket/src/UnixConnector.php', + 'React\\Socket\\UnixServer' => $vendorDir . '/react/socket/src/UnixServer.php', + 'React\\Stream\\CompositeStream' => $vendorDir . '/react/stream/src/CompositeStream.php', + 'React\\Stream\\DuplexResourceStream' => $vendorDir . '/react/stream/src/DuplexResourceStream.php', + 'React\\Stream\\DuplexStreamInterface' => $vendorDir . '/react/stream/src/DuplexStreamInterface.php', + 'React\\Stream\\ReadableResourceStream' => $vendorDir . '/react/stream/src/ReadableResourceStream.php', + 'React\\Stream\\ReadableStreamInterface' => $vendorDir . '/react/stream/src/ReadableStreamInterface.php', + 'React\\Stream\\ThroughStream' => $vendorDir . '/react/stream/src/ThroughStream.php', + 'React\\Stream\\Util' => $vendorDir . '/react/stream/src/Util.php', + 'React\\Stream\\WritableResourceStream' => $vendorDir . '/react/stream/src/WritableResourceStream.php', + 'React\\Stream\\WritableStreamInterface' => $vendorDir . '/react/stream/src/WritableStreamInterface.php', + 'RingCentral\\Psr7\\AppendStream' => $vendorDir . '/ringcentral/psr7/src/AppendStream.php', + 'RingCentral\\Psr7\\BufferStream' => $vendorDir . '/ringcentral/psr7/src/BufferStream.php', + 'RingCentral\\Psr7\\CachingStream' => $vendorDir . '/ringcentral/psr7/src/CachingStream.php', + 'RingCentral\\Psr7\\DroppingStream' => $vendorDir . '/ringcentral/psr7/src/DroppingStream.php', + 'RingCentral\\Psr7\\FnStream' => $vendorDir . '/ringcentral/psr7/src/FnStream.php', + 'RingCentral\\Psr7\\InflateStream' => $vendorDir . '/ringcentral/psr7/src/InflateStream.php', + 'RingCentral\\Psr7\\LazyOpenStream' => $vendorDir . '/ringcentral/psr7/src/LazyOpenStream.php', + 'RingCentral\\Psr7\\LimitStream' => $vendorDir . '/ringcentral/psr7/src/LimitStream.php', + 'RingCentral\\Psr7\\MessageTrait' => $vendorDir . '/ringcentral/psr7/src/MessageTrait.php', + 'RingCentral\\Psr7\\MultipartStream' => $vendorDir . '/ringcentral/psr7/src/MultipartStream.php', + 'RingCentral\\Psr7\\NoSeekStream' => $vendorDir . '/ringcentral/psr7/src/NoSeekStream.php', + 'RingCentral\\Psr7\\PumpStream' => $vendorDir . '/ringcentral/psr7/src/PumpStream.php', + 'RingCentral\\Psr7\\Request' => $vendorDir . '/ringcentral/psr7/src/Request.php', + 'RingCentral\\Psr7\\Response' => $vendorDir . '/ringcentral/psr7/src/Response.php', + 'RingCentral\\Psr7\\ServerRequest' => $vendorDir . '/ringcentral/psr7/src/ServerRequest.php', + 'RingCentral\\Psr7\\Stream' => $vendorDir . '/ringcentral/psr7/src/Stream.php', + 'RingCentral\\Psr7\\StreamDecoratorTrait' => $vendorDir . '/ringcentral/psr7/src/StreamDecoratorTrait.php', + 'RingCentral\\Psr7\\StreamWrapper' => $vendorDir . '/ringcentral/psr7/src/StreamWrapper.php', + 'RingCentral\\Psr7\\Uri' => $vendorDir . '/ringcentral/psr7/src/Uri.php', + 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.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', + 'Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => $vendorDir . '/symfony/console/Descriptor/DescriptorInterface.php', + 'Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => $vendorDir . '/symfony/console/Descriptor/JsonDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => $vendorDir . '/symfony/console/Descriptor/MarkdownDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => $vendorDir . '/symfony/console/Descriptor/TextDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => $vendorDir . '/symfony/console/Descriptor/XmlDescriptor.php', + 'Symfony\\Component\\Console\\EventListener\\ErrorListener' => $vendorDir . '/symfony/console/EventListener/ErrorListener.php', + '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', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleInterface.php', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleStack.php', + 'Symfony\\Component\\Console\\Formatter\\WrappableOutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/WrappableOutputFormatterInterface.php', + 'Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => $vendorDir . '/symfony/console/Helper/DebugFormatterHelper.php', + 'Symfony\\Component\\Console\\Helper\\DescriptorHelper' => $vendorDir . '/symfony/console/Helper/DescriptorHelper.php', + 'Symfony\\Component\\Console\\Helper\\Dumper' => $vendorDir . '/symfony/console/Helper/Dumper.php', + 'Symfony\\Component\\Console\\Helper\\FormatterHelper' => $vendorDir . '/symfony/console/Helper/FormatterHelper.php', + 'Symfony\\Component\\Console\\Helper\\Helper' => $vendorDir . '/symfony/console/Helper/Helper.php', + 'Symfony\\Component\\Console\\Helper\\HelperInterface' => $vendorDir . '/symfony/console/Helper/HelperInterface.php', + 'Symfony\\Component\\Console\\Helper\\HelperSet' => $vendorDir . '/symfony/console/Helper/HelperSet.php', + 'Symfony\\Component\\Console\\Helper\\InputAwareHelper' => $vendorDir . '/symfony/console/Helper/InputAwareHelper.php', + 'Symfony\\Component\\Console\\Helper\\ProcessHelper' => $vendorDir . '/symfony/console/Helper/ProcessHelper.php', + 'Symfony\\Component\\Console\\Helper\\ProgressBar' => $vendorDir . '/symfony/console/Helper/ProgressBar.php', + 'Symfony\\Component\\Console\\Helper\\ProgressIndicator' => $vendorDir . '/symfony/console/Helper/ProgressIndicator.php', + 'Symfony\\Component\\Console\\Helper\\QuestionHelper' => $vendorDir . '/symfony/console/Helper/QuestionHelper.php', + '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', + 'Symfony\\Component\\Console\\Input\\ArgvInput' => $vendorDir . '/symfony/console/Input/ArgvInput.php', + 'Symfony\\Component\\Console\\Input\\ArrayInput' => $vendorDir . '/symfony/console/Input/ArrayInput.php', + 'Symfony\\Component\\Console\\Input\\Input' => $vendorDir . '/symfony/console/Input/Input.php', + 'Symfony\\Component\\Console\\Input\\InputArgument' => $vendorDir . '/symfony/console/Input/InputArgument.php', + 'Symfony\\Component\\Console\\Input\\InputAwareInterface' => $vendorDir . '/symfony/console/Input/InputAwareInterface.php', + 'Symfony\\Component\\Console\\Input\\InputDefinition' => $vendorDir . '/symfony/console/Input/InputDefinition.php', + 'Symfony\\Component\\Console\\Input\\InputInterface' => $vendorDir . '/symfony/console/Input/InputInterface.php', + 'Symfony\\Component\\Console\\Input\\InputOption' => $vendorDir . '/symfony/console/Input/InputOption.php', + 'Symfony\\Component\\Console\\Input\\StreamableInputInterface' => $vendorDir . '/symfony/console/Input/StreamableInputInterface.php', + 'Symfony\\Component\\Console\\Input\\StringInput' => $vendorDir . '/symfony/console/Input/StringInput.php', + 'Symfony\\Component\\Console\\Logger\\ConsoleLogger' => $vendorDir . '/symfony/console/Logger/ConsoleLogger.php', + 'Symfony\\Component\\Console\\Output\\BufferedOutput' => $vendorDir . '/symfony/console/Output/BufferedOutput.php', + 'Symfony\\Component\\Console\\Output\\ConsoleOutput' => $vendorDir . '/symfony/console/Output/ConsoleOutput.php', + 'Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => $vendorDir . '/symfony/console/Output/ConsoleOutputInterface.php', + 'Symfony\\Component\\Console\\Output\\ConsoleSectionOutput' => $vendorDir . '/symfony/console/Output/ConsoleSectionOutput.php', + 'Symfony\\Component\\Console\\Output\\NullOutput' => $vendorDir . '/symfony/console/Output/NullOutput.php', + '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\\Process\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/process/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/process/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\Process\\Exception\\LogicException' => $vendorDir . '/symfony/process/Exception/LogicException.php', + 'Symfony\\Component\\Process\\Exception\\ProcessFailedException' => $vendorDir . '/symfony/process/Exception/ProcessFailedException.php', + 'Symfony\\Component\\Process\\Exception\\ProcessSignaledException' => $vendorDir . '/symfony/process/Exception/ProcessSignaledException.php', + 'Symfony\\Component\\Process\\Exception\\ProcessTimedOutException' => $vendorDir . '/symfony/process/Exception/ProcessTimedOutException.php', + 'Symfony\\Component\\Process\\Exception\\RuntimeException' => $vendorDir . '/symfony/process/Exception/RuntimeException.php', + 'Symfony\\Component\\Process\\ExecutableFinder' => $vendorDir . '/symfony/process/ExecutableFinder.php', + 'Symfony\\Component\\Process\\InputStream' => $vendorDir . '/symfony/process/InputStream.php', + 'Symfony\\Component\\Process\\PhpExecutableFinder' => $vendorDir . '/symfony/process/PhpExecutableFinder.php', + 'Symfony\\Component\\Process\\PhpProcess' => $vendorDir . '/symfony/process/PhpProcess.php', + 'Symfony\\Component\\Process\\Pipes\\AbstractPipes' => $vendorDir . '/symfony/process/Pipes/AbstractPipes.php', + 'Symfony\\Component\\Process\\Pipes\\PipesInterface' => $vendorDir . '/symfony/process/Pipes/PipesInterface.php', + 'Symfony\\Component\\Process\\Pipes\\UnixPipes' => $vendorDir . '/symfony/process/Pipes/UnixPipes.php', + '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\\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\\Yaml\\Command\\LintCommand' => $vendorDir . '/symfony/yaml/Command/LintCommand.php', + 'Symfony\\Component\\Yaml\\Dumper' => $vendorDir . '/symfony/yaml/Dumper.php', + 'Symfony\\Component\\Yaml\\Escaper' => $vendorDir . '/symfony/yaml/Escaper.php', + 'Symfony\\Component\\Yaml\\Exception\\DumpException' => $vendorDir . '/symfony/yaml/Exception/DumpException.php', + 'Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/yaml/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Yaml\\Exception\\ParseException' => $vendorDir . '/symfony/yaml/Exception/ParseException.php', + 'Symfony\\Component\\Yaml\\Exception\\RuntimeException' => $vendorDir . '/symfony/yaml/Exception/RuntimeException.php', + 'Symfony\\Component\\Yaml\\Inline' => $vendorDir . '/symfony/yaml/Inline.php', + 'Symfony\\Component\\Yaml\\Parser' => $vendorDir . '/symfony/yaml/Parser.php', + 'Symfony\\Component\\Yaml\\Tag\\TaggedValue' => $vendorDir . '/symfony/yaml/Tag/TaggedValue.php', + 'Symfony\\Component\\Yaml\\Unescaper' => $vendorDir . '/symfony/yaml/Unescaper.php', + 'Symfony\\Component\\Yaml\\Yaml' => $vendorDir . '/symfony/yaml/Yaml.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', + 'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberInterface.php', + 'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberTrait.php', + 'Symfony\\Contracts\\Service\\Test\\ServiceLocatorTest' => $vendorDir . '/symfony/service-contracts/Test/ServiceLocatorTest.php', + 'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php', + 'Symfony\\Polyfill\\Intl\\Grapheme\\Grapheme' => $vendorDir . '/symfony/polyfill-intl-grapheme/Grapheme.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\\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', + 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', + 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', +); diff --git a/deps/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php similarity index 86% rename from deps/vendor/composer/autoload_files.php rename to vendor/composer/autoload_files.php index 684caeb1d..1e5a2dd2e 100644 --- a/deps/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -2,21 +2,22 @@ // autoload_files.php @generated by Composer -$vendorDir = dirname(__DIR__); +$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( 'ad155f8f1cf0d418fe49e248db8c661b' => $vendorDir . '/react/promise/src/functions_include.php', '972fda704d680a3a53c68e34e193cb22' => $vendorDir . '/react/promise-timer/src/functions_include.php', - '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', - '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', + '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', + 'cea474b4340aa9fa53661e887a21a316' => $vendorDir . '/react/promise-stream/src/functions_include.php', '8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php', 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', - 'cea474b4340aa9fa53661e887a21a316' => $vendorDir . '/react/promise-stream/src/functions_include.php', - 'ebf8799635f67b5d7248946fe2154f4a' => $vendorDir . '/ringcentral/psr7/src/functions_include.php', '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php', 'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php', - '23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php', + 'ebf8799635f67b5d7248946fe2154f4a' => $vendorDir . '/ringcentral/psr7/src/functions_include.php', + 'eee1afd8f38c52a8d46f7c5bbb92afdd' => $baseDir . '/src/Support/helpers.php', + '135133ad0ca20ef21cc262b30da9a000' => $baseDir . '/src/functions.php', ); diff --git a/deps/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php similarity index 81% rename from deps/vendor/composer/autoload_namespaces.php rename to vendor/composer/autoload_namespaces.php index 11948b105..02066fb2d 100644 --- a/deps/vendor/composer/autoload_namespaces.php +++ b/vendor/composer/autoload_namespaces.php @@ -2,7 +2,7 @@ // autoload_namespaces.php @generated by Composer -$vendorDir = dirname(__DIR__); +$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( diff --git a/deps/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php similarity index 94% rename from deps/vendor/composer/autoload_psr4.php rename to vendor/composer/autoload_psr4.php index c0b719960..ba3b57b83 100644 --- a/deps/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -2,11 +2,10 @@ // autoload_psr4.php @generated by Composer -$vendorDir = dirname(__DIR__); +$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - '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\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), @@ -32,4 +31,5 @@ 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'JsonSchema\\' => array($vendorDir . '/justinrainbow/json-schema/src/JsonSchema'), 'Fig\\Http\\Message\\' => array($vendorDir . '/fig/http-message-util/src'), + 'Deployer\\' => array($baseDir . '/src'), ); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php new file mode 100644 index 000000000..333f19f9e --- /dev/null +++ b/vendor/composer/autoload_real.php @@ -0,0 +1,75 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInit234e1a4a29689e00066666da06e8ece1::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->register(true); + + if ($useStaticLoader) { + $includeFiles = Composer\Autoload\ComposerStaticInit234e1a4a29689e00066666da06e8ece1::$files; + } else { + $includeFiles = require __DIR__ . '/autoload_files.php'; + } + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequire234e1a4a29689e00066666da06e8ece1($fileIdentifier, $file); + } + + return $loader; + } +} + +function composerRequire234e1a4a29689e00066666da06e8ece1($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + require $file; + + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + } +} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php new file mode 100644 index 000000000..37c859b09 --- /dev/null +++ b/vendor/composer/autoload_static.php @@ -0,0 +1,645 @@ + __DIR__ . '/..' . '/react/promise/src/functions_include.php', + '972fda704d680a3a53c68e34e193cb22' => __DIR__ . '/..' . '/react/promise-timer/src/functions_include.php', + 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', + '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', + '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', + 'cea474b4340aa9fa53661e887a21a316' => __DIR__ . '/..' . '/react/promise-stream/src/functions_include.php', + '8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php', + 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', + '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php', + 'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php', + 'ebf8799635f67b5d7248946fe2154f4a' => __DIR__ . '/..' . '/ringcentral/psr7/src/functions_include.php', + 'eee1afd8f38c52a8d46f7c5bbb92afdd' => __DIR__ . '/../..' . '/src/Support/helpers.php', + '135133ad0ca20ef21cc262b30da9a000' => __DIR__ . '/../..' . '/src/functions.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'S' => + array ( + 'Symfony\\Polyfill\\Php80\\' => 23, + 'Symfony\\Polyfill\\Php73\\' => 23, + 'Symfony\\Polyfill\\Mbstring\\' => 26, + 'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33, + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => 31, + 'Symfony\\Polyfill\\Ctype\\' => 23, + 'Symfony\\Contracts\\Service\\' => 26, + 'Symfony\\Component\\Yaml\\' => 23, + 'Symfony\\Component\\String\\' => 25, + 'Symfony\\Component\\Process\\' => 26, + 'Symfony\\Component\\Console\\' => 26, + ), + 'R' => + array ( + 'RingCentral\\Psr7\\' => 17, + 'React\\Stream\\' => 13, + 'React\\Socket\\' => 13, + 'React\\Promise\\Timer\\' => 20, + 'React\\Promise\\Stream\\' => 21, + 'React\\Promise\\' => 14, + 'React\\Http\\' => 11, + 'React\\EventLoop\\' => 16, + 'React\\Dns\\' => 10, + 'React\\Cache\\' => 12, + ), + 'P' => + array ( + 'Psr\\Http\\Message\\' => 17, + 'Psr\\Container\\' => 14, + ), + 'J' => + array ( + 'JsonSchema\\' => 11, + ), + 'F' => + array ( + 'Fig\\Http\\Message\\' => 17, + ), + 'D' => + array ( + 'Deployer\\' => 9, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Symfony\\Polyfill\\Php80\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php80', + ), + 'Symfony\\Polyfill\\Php73\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php73', + ), + 'Symfony\\Polyfill\\Mbstring\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', + ), + 'Symfony\\Polyfill\\Intl\\Normalizer\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer', + ), + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme', + ), + 'Symfony\\Polyfill\\Ctype\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', + ), + 'Symfony\\Contracts\\Service\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/service-contracts', + ), + 'Symfony\\Component\\Yaml\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/yaml', + ), + 'Symfony\\Component\\String\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/string', + ), + 'Symfony\\Component\\Process\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/process', + ), + 'Symfony\\Component\\Console\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/console', + ), + 'RingCentral\\Psr7\\' => + array ( + 0 => __DIR__ . '/..' . '/ringcentral/psr7/src', + ), + 'React\\Stream\\' => + array ( + 0 => __DIR__ . '/..' . '/react/stream/src', + ), + 'React\\Socket\\' => + array ( + 0 => __DIR__ . '/..' . '/react/socket/src', + ), + 'React\\Promise\\Timer\\' => + array ( + 0 => __DIR__ . '/..' . '/react/promise-timer/src', + ), + 'React\\Promise\\Stream\\' => + array ( + 0 => __DIR__ . '/..' . '/react/promise-stream/src', + ), + 'React\\Promise\\' => + array ( + 0 => __DIR__ . '/..' . '/react/promise/src', + ), + 'React\\Http\\' => + array ( + 0 => __DIR__ . '/..' . '/react/http/src', + ), + 'React\\EventLoop\\' => + array ( + 0 => __DIR__ . '/..' . '/react/event-loop/src', + ), + 'React\\Dns\\' => + array ( + 0 => __DIR__ . '/..' . '/react/dns/src', + ), + 'React\\Cache\\' => + array ( + 0 => __DIR__ . '/..' . '/react/cache/src', + ), + 'Psr\\Http\\Message\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/http-message/src', + ), + 'Psr\\Container\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/container/src', + ), + 'JsonSchema\\' => + array ( + 0 => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema', + ), + 'Fig\\Http\\Message\\' => + array ( + 0 => __DIR__ . '/..' . '/fig/http-message-util/src', + ), + 'Deployer\\' => + array ( + 0 => __DIR__ . '/../..' . '/src', + ), + ); + + public static $prefixesPsr0 = array ( + 'E' => + array ( + 'Evenement' => + array ( + 0 => __DIR__ . '/..' . '/evenement/evenement/src', + ), + ), + ); + + public static $classMap = array ( + 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'Deployer\\Collection\\Collection' => __DIR__ . '/../..' . '/src/Collection/Collection.php', + 'Deployer\\Command\\BlackjackCommand' => __DIR__ . '/../..' . '/src/Command/BlackjackCommand.php', + 'Deployer\\Command\\CommandCommon' => __DIR__ . '/../..' . '/src/Command/CommandCommon.php', + 'Deployer\\Command\\ConfigCommand' => __DIR__ . '/../..' . '/src/Command/ConfigCommand.php', + 'Deployer\\Command\\CustomOption' => __DIR__ . '/../..' . '/src/Command/CustomOption.php', + 'Deployer\\Command\\InitCommand' => __DIR__ . '/../..' . '/src/Command/InitCommand.php', + 'Deployer\\Command\\MainCommand' => __DIR__ . '/../..' . '/src/Command/MainCommand.php', + 'Deployer\\Command\\RunCommand' => __DIR__ . '/../..' . '/src/Command/RunCommand.php', + 'Deployer\\Command\\SelectCommand' => __DIR__ . '/../..' . '/src/Command/SelectCommand.php', + 'Deployer\\Command\\SshCommand' => __DIR__ . '/../..' . '/src/Command/SshCommand.php', + 'Deployer\\Command\\TreeCommand' => __DIR__ . '/../..' . '/src/Command/TreeCommand.php', + 'Deployer\\Command\\WorkerCommand' => __DIR__ . '/../..' . '/src/Command/WorkerCommand.php', + 'Deployer\\Component\\PharUpdate\\Console\\Command' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Console/Command.php', + 'Deployer\\Component\\PharUpdate\\Console\\Helper' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Console/Helper.php', + 'Deployer\\Component\\PharUpdate\\Exception\\Exception' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Exception/Exception.php', + 'Deployer\\Component\\PharUpdate\\Exception\\ExceptionInterface' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Exception/ExceptionInterface.php', + 'Deployer\\Component\\PharUpdate\\Exception\\FileException' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Exception/FileException.php', + 'Deployer\\Component\\PharUpdate\\Exception\\InvalidArgumentException' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Exception/InvalidArgumentException.php', + 'Deployer\\Component\\PharUpdate\\Exception\\LogicException' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Exception/LogicException.php', + 'Deployer\\Component\\PharUpdate\\Manager' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Manager.php', + 'Deployer\\Component\\PharUpdate\\Manifest' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Manifest.php', + 'Deployer\\Component\\PharUpdate\\Update' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Update.php', + 'Deployer\\Component\\PharUpdate\\Version\\Builder' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Version/Builder.php', + 'Deployer\\Component\\PharUpdate\\Version\\Comparator' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Version/Comparator.php', + 'Deployer\\Component\\PharUpdate\\Version\\Dumper' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Version/Dumper.php', + 'Deployer\\Component\\PharUpdate\\Version\\Exception\\InvalidIdentifierException' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Version/Exception/InvalidIdentifierException.php', + 'Deployer\\Component\\PharUpdate\\Version\\Exception\\InvalidNumberException' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Version/Exception/InvalidNumberException.php', + 'Deployer\\Component\\PharUpdate\\Version\\Exception\\InvalidStringRepresentationException' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Version/Exception/InvalidStringRepresentationException.php', + 'Deployer\\Component\\PharUpdate\\Version\\Exception\\VersionException' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Version/Exception/VersionException.php', + 'Deployer\\Component\\PharUpdate\\Version\\Parser' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Version/Parser.php', + 'Deployer\\Component\\PharUpdate\\Version\\Validator' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Version/Validator.php', + 'Deployer\\Component\\PharUpdate\\Version\\Version' => __DIR__ . '/../..' . '/src/Component/PharUpdate/Version/Version.php', + 'Deployer\\Component\\Pimple\\Container' => __DIR__ . '/../..' . '/src/Component/Pimple/Container.php', + 'Deployer\\Component\\Pimple\\Exception\\ExpectedInvokableException' => __DIR__ . '/../..' . '/src/Component/Pimple/Exception/ExpectedInvokableException.php', + 'Deployer\\Component\\Pimple\\Exception\\FrozenServiceException' => __DIR__ . '/../..' . '/src/Component/Pimple/Exception/FrozenServiceException.php', + 'Deployer\\Component\\Pimple\\Exception\\InvalidServiceIdentifierException' => __DIR__ . '/../..' . '/src/Component/Pimple/Exception/InvalidServiceIdentifierException.php', + 'Deployer\\Component\\Pimple\\Exception\\UnknownIdentifierException' => __DIR__ . '/../..' . '/src/Component/Pimple/Exception/UnknownIdentifierException.php', + 'Deployer\\Component\\ProcessRunner\\Printer' => __DIR__ . '/../..' . '/src/Component/ProcessRunner/Printer.php', + 'Deployer\\Component\\ProcessRunner\\ProcessRunner' => __DIR__ . '/../..' . '/src/Component/ProcessRunner/ProcessRunner.php', + 'Deployer\\Component\\Ssh\\Client' => __DIR__ . '/../..' . '/src/Component/Ssh/Client.php', + 'Deployer\\Component\\Ssh\\IOArguments' => __DIR__ . '/../..' . '/src/Component/Ssh/IOArguments.php', + 'Deployer\\Configuration\\Configuration' => __DIR__ . '/../..' . '/src/Configuration/Configuration.php', + 'Deployer\\Deployer' => __DIR__ . '/../..' . '/src/Deployer.php', + 'Deployer\\Documentation\\ApiGen' => __DIR__ . '/../..' . '/src/Documentation/ApiGen.php', + 'Deployer\\Documentation\\DocConfig' => __DIR__ . '/../..' . '/src/Documentation/DocConfig.php', + 'Deployer\\Documentation\\DocGen' => __DIR__ . '/../..' . '/src/Documentation/DocGen.php', + 'Deployer\\Documentation\\DocRecipe' => __DIR__ . '/../..' . '/src/Documentation/DocRecipe.php', + 'Deployer\\Documentation\\DocTask' => __DIR__ . '/../..' . '/src/Documentation/DocTask.php', + 'Deployer\\Exception\\ConfigurationException' => __DIR__ . '/../..' . '/src/Exception/ConfigurationException.php', + 'Deployer\\Exception\\Exception' => __DIR__ . '/../..' . '/src/Exception/Exception.php', + 'Deployer\\Exception\\GracefulShutdownException' => __DIR__ . '/../..' . '/src/Exception/GracefulShutdownException.php', + 'Deployer\\Exception\\HttpieException' => __DIR__ . '/../..' . '/src/Exception/HttpieException.php', + 'Deployer\\Exception\\RunException' => __DIR__ . '/../..' . '/src/Exception/RunException.php', + 'Deployer\\Exception\\TimeoutException' => __DIR__ . '/../..' . '/src/Exception/TimeoutException.php', + 'Deployer\\Exception\\WillAskUser' => __DIR__ . '/../..' . '/src/Exception/WillAskUser.php', + 'Deployer\\Executor\\Master' => __DIR__ . '/../..' . '/src/Executor/Master.php', + 'Deployer\\Executor\\Messenger' => __DIR__ . '/../..' . '/src/Executor/Messenger.php', + 'Deployer\\Executor\\Planner' => __DIR__ . '/../..' . '/src/Executor/Planner.php', + 'Deployer\\Executor\\Server' => __DIR__ . '/../..' . '/src/Executor/Server.php', + 'Deployer\\Executor\\Worker' => __DIR__ . '/../..' . '/src/Executor/Worker.php', + 'Deployer\\Host\\Host' => __DIR__ . '/../..' . '/src/Host/Host.php', + 'Deployer\\Host\\HostCollection' => __DIR__ . '/../..' . '/src/Host/HostCollection.php', + 'Deployer\\Host\\Localhost' => __DIR__ . '/../..' . '/src/Host/Localhost.php', + 'Deployer\\Host\\Range' => __DIR__ . '/../..' . '/src/Host/Range.php', + 'Deployer\\Importer\\Importer' => __DIR__ . '/../..' . '/src/Importer/Importer.php', + 'Deployer\\Logger\\Handler\\FileHandler' => __DIR__ . '/../..' . '/src/Logger/Handler/FileHandler.php', + 'Deployer\\Logger\\Handler\\HandlerInterface' => __DIR__ . '/../..' . '/src/Logger/Handler/HandlerInterface.php', + 'Deployer\\Logger\\Handler\\NullHandler' => __DIR__ . '/../..' . '/src/Logger/Handler/NullHandler.php', + 'Deployer\\Logger\\Logger' => __DIR__ . '/../..' . '/src/Logger/Logger.php', + 'Deployer\\Selector\\Selector' => __DIR__ . '/../..' . '/src/Selector/Selector.php', + 'Deployer\\Support\\ObjectProxy' => __DIR__ . '/../..' . '/src/Support/ObjectProxy.php', + 'Deployer\\Support\\Reporter' => __DIR__ . '/../..' . '/src/Support/Reporter.php', + 'Deployer\\Task\\Context' => __DIR__ . '/../..' . '/src/Task/Context.php', + 'Deployer\\Task\\GroupTask' => __DIR__ . '/../..' . '/src/Task/GroupTask.php', + 'Deployer\\Task\\ScriptManager' => __DIR__ . '/../..' . '/src/Task/ScriptManager.php', + 'Deployer\\Task\\Task' => __DIR__ . '/../..' . '/src/Task/Task.php', + 'Deployer\\Task\\TaskCollection' => __DIR__ . '/../..' . '/src/Task/TaskCollection.php', + 'Deployer\\Utility\\Httpie' => __DIR__ . '/../..' . '/src/Utility/Httpie.php', + 'Deployer\\Utility\\Rsync' => __DIR__ . '/../..' . '/src/Utility/Rsync.php', + 'Evenement\\EventEmitter' => __DIR__ . '/..' . '/evenement/evenement/src/Evenement/EventEmitter.php', + 'Evenement\\EventEmitterInterface' => __DIR__ . '/..' . '/evenement/evenement/src/Evenement/EventEmitterInterface.php', + 'Evenement\\EventEmitterTrait' => __DIR__ . '/..' . '/evenement/evenement/src/Evenement/EventEmitterTrait.php', + 'Fig\\Http\\Message\\RequestMethodInterface' => __DIR__ . '/..' . '/fig/http-message-util/src/RequestMethodInterface.php', + 'Fig\\Http\\Message\\StatusCodeInterface' => __DIR__ . '/..' . '/fig/http-message-util/src/StatusCodeInterface.php', + 'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', + 'JsonSchema\\Constraints\\BaseConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php', + 'JsonSchema\\Constraints\\CollectionConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php', + 'JsonSchema\\Constraints\\Constraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php', + 'JsonSchema\\Constraints\\ConstraintInterface' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php', + 'JsonSchema\\Constraints\\EnumConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php', + 'JsonSchema\\Constraints\\Factory' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php', + 'JsonSchema\\Constraints\\FormatConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php', + 'JsonSchema\\Constraints\\NumberConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php', + 'JsonSchema\\Constraints\\ObjectConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php', + 'JsonSchema\\Constraints\\SchemaConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php', + 'JsonSchema\\Constraints\\StringConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php', + 'JsonSchema\\Constraints\\TypeCheck\\LooseTypeCheck' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.php', + 'JsonSchema\\Constraints\\TypeCheck\\StrictTypeCheck' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.php', + 'JsonSchema\\Constraints\\TypeCheck\\TypeCheckInterface' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php', + 'JsonSchema\\Constraints\\TypeConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php', + 'JsonSchema\\Constraints\\UndefinedConstraint' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php', + 'JsonSchema\\Entity\\JsonPointer' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.php', + 'JsonSchema\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.php', + 'JsonSchema\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php', + 'JsonSchema\\Exception\\InvalidConfigException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.php', + 'JsonSchema\\Exception\\InvalidSchemaException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.php', + 'JsonSchema\\Exception\\InvalidSchemaMediaTypeException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php', + 'JsonSchema\\Exception\\InvalidSourceUriException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php', + 'JsonSchema\\Exception\\JsonDecodingException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php', + 'JsonSchema\\Exception\\ResourceNotFoundException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php', + 'JsonSchema\\Exception\\RuntimeException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php', + 'JsonSchema\\Exception\\UnresolvableJsonPointerException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php', + 'JsonSchema\\Exception\\UriResolverException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php', + 'JsonSchema\\Exception\\ValidationException' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.php', + 'JsonSchema\\Iterator\\ObjectIterator' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.php', + 'JsonSchema\\Rfc3339' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php', + 'JsonSchema\\SchemaStorage' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php', + 'JsonSchema\\SchemaStorageInterface' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php', + 'JsonSchema\\UriResolverInterface' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php', + 'JsonSchema\\UriRetrieverInterface' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php', + 'JsonSchema\\Uri\\Retrievers\\AbstractRetriever' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php', + 'JsonSchema\\Uri\\Retrievers\\Curl' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php', + 'JsonSchema\\Uri\\Retrievers\\FileGetContents' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php', + 'JsonSchema\\Uri\\Retrievers\\PredefinedArray' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php', + 'JsonSchema\\Uri\\Retrievers\\UriRetrieverInterface' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php', + 'JsonSchema\\Uri\\UriResolver' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php', + 'JsonSchema\\Uri\\UriRetriever' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php', + 'JsonSchema\\Validator' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Validator.php', + 'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', + 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', + '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\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php', + 'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php', + 'Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/..' . '/psr/http-message/src/ResponseInterface.php', + 'Psr\\Http\\Message\\ServerRequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/ServerRequestInterface.php', + 'Psr\\Http\\Message\\StreamInterface' => __DIR__ . '/..' . '/psr/http-message/src/StreamInterface.php', + 'Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/..' . '/psr/http-message/src/UploadedFileInterface.php', + 'Psr\\Http\\Message\\UriInterface' => __DIR__ . '/..' . '/psr/http-message/src/UriInterface.php', + 'React\\Cache\\ArrayCache' => __DIR__ . '/..' . '/react/cache/src/ArrayCache.php', + 'React\\Cache\\CacheInterface' => __DIR__ . '/..' . '/react/cache/src/CacheInterface.php', + 'React\\Dns\\BadServerException' => __DIR__ . '/..' . '/react/dns/src/BadServerException.php', + 'React\\Dns\\Config\\Config' => __DIR__ . '/..' . '/react/dns/src/Config/Config.php', + 'React\\Dns\\Config\\HostsFile' => __DIR__ . '/..' . '/react/dns/src/Config/HostsFile.php', + 'React\\Dns\\Model\\Message' => __DIR__ . '/..' . '/react/dns/src/Model/Message.php', + 'React\\Dns\\Model\\Record' => __DIR__ . '/..' . '/react/dns/src/Model/Record.php', + 'React\\Dns\\Protocol\\BinaryDumper' => __DIR__ . '/..' . '/react/dns/src/Protocol/BinaryDumper.php', + 'React\\Dns\\Protocol\\Parser' => __DIR__ . '/..' . '/react/dns/src/Protocol/Parser.php', + 'React\\Dns\\Query\\CachingExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/CachingExecutor.php', + 'React\\Dns\\Query\\CancellationException' => __DIR__ . '/..' . '/react/dns/src/Query/CancellationException.php', + 'React\\Dns\\Query\\CoopExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/CoopExecutor.php', + 'React\\Dns\\Query\\ExecutorInterface' => __DIR__ . '/..' . '/react/dns/src/Query/ExecutorInterface.php', + 'React\\Dns\\Query\\FallbackExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/FallbackExecutor.php', + 'React\\Dns\\Query\\HostsFileExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/HostsFileExecutor.php', + 'React\\Dns\\Query\\Query' => __DIR__ . '/..' . '/react/dns/src/Query/Query.php', + 'React\\Dns\\Query\\RetryExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/RetryExecutor.php', + 'React\\Dns\\Query\\SelectiveTransportExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/SelectiveTransportExecutor.php', + 'React\\Dns\\Query\\TcpTransportExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/TcpTransportExecutor.php', + 'React\\Dns\\Query\\TimeoutException' => __DIR__ . '/..' . '/react/dns/src/Query/TimeoutException.php', + 'React\\Dns\\Query\\TimeoutExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/TimeoutExecutor.php', + 'React\\Dns\\Query\\UdpTransportExecutor' => __DIR__ . '/..' . '/react/dns/src/Query/UdpTransportExecutor.php', + 'React\\Dns\\RecordNotFoundException' => __DIR__ . '/..' . '/react/dns/src/RecordNotFoundException.php', + 'React\\Dns\\Resolver\\Factory' => __DIR__ . '/..' . '/react/dns/src/Resolver/Factory.php', + 'React\\Dns\\Resolver\\Resolver' => __DIR__ . '/..' . '/react/dns/src/Resolver/Resolver.php', + 'React\\Dns\\Resolver\\ResolverInterface' => __DIR__ . '/..' . '/react/dns/src/Resolver/ResolverInterface.php', + 'React\\EventLoop\\ExtEvLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtEvLoop.php', + 'React\\EventLoop\\ExtEventLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtEventLoop.php', + 'React\\EventLoop\\ExtLibevLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtLibevLoop.php', + 'React\\EventLoop\\ExtLibeventLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtLibeventLoop.php', + 'React\\EventLoop\\ExtUvLoop' => __DIR__ . '/..' . '/react/event-loop/src/ExtUvLoop.php', + 'React\\EventLoop\\Factory' => __DIR__ . '/..' . '/react/event-loop/src/Factory.php', + 'React\\EventLoop\\Loop' => __DIR__ . '/..' . '/react/event-loop/src/Loop.php', + 'React\\EventLoop\\LoopInterface' => __DIR__ . '/..' . '/react/event-loop/src/LoopInterface.php', + 'React\\EventLoop\\SignalsHandler' => __DIR__ . '/..' . '/react/event-loop/src/SignalsHandler.php', + 'React\\EventLoop\\StreamSelectLoop' => __DIR__ . '/..' . '/react/event-loop/src/StreamSelectLoop.php', + 'React\\EventLoop\\Tick\\FutureTickQueue' => __DIR__ . '/..' . '/react/event-loop/src/Tick/FutureTickQueue.php', + 'React\\EventLoop\\TimerInterface' => __DIR__ . '/..' . '/react/event-loop/src/TimerInterface.php', + 'React\\EventLoop\\Timer\\Timer' => __DIR__ . '/..' . '/react/event-loop/src/Timer/Timer.php', + 'React\\EventLoop\\Timer\\Timers' => __DIR__ . '/..' . '/react/event-loop/src/Timer/Timers.php', + 'React\\Http\\Browser' => __DIR__ . '/..' . '/react/http/src/Browser.php', + 'React\\Http\\Client\\Client' => __DIR__ . '/..' . '/react/http/src/Client/Client.php', + 'React\\Http\\Client\\Request' => __DIR__ . '/..' . '/react/http/src/Client/Request.php', + 'React\\Http\\Client\\RequestData' => __DIR__ . '/..' . '/react/http/src/Client/RequestData.php', + 'React\\Http\\HttpServer' => __DIR__ . '/..' . '/react/http/src/HttpServer.php', + 'React\\Http\\Io\\BufferedBody' => __DIR__ . '/..' . '/react/http/src/Io/BufferedBody.php', + 'React\\Http\\Io\\ChunkedDecoder' => __DIR__ . '/..' . '/react/http/src/Io/ChunkedDecoder.php', + 'React\\Http\\Io\\ChunkedEncoder' => __DIR__ . '/..' . '/react/http/src/Io/ChunkedEncoder.php', + 'React\\Http\\Io\\CloseProtectionStream' => __DIR__ . '/..' . '/react/http/src/Io/CloseProtectionStream.php', + 'React\\Http\\Io\\EmptyBodyStream' => __DIR__ . '/..' . '/react/http/src/Io/EmptyBodyStream.php', + 'React\\Http\\Io\\HttpBodyStream' => __DIR__ . '/..' . '/react/http/src/Io/HttpBodyStream.php', + 'React\\Http\\Io\\IniUtil' => __DIR__ . '/..' . '/react/http/src/Io/IniUtil.php', + 'React\\Http\\Io\\LengthLimitedStream' => __DIR__ . '/..' . '/react/http/src/Io/LengthLimitedStream.php', + 'React\\Http\\Io\\MiddlewareRunner' => __DIR__ . '/..' . '/react/http/src/Io/MiddlewareRunner.php', + 'React\\Http\\Io\\MultipartParser' => __DIR__ . '/..' . '/react/http/src/Io/MultipartParser.php', + 'React\\Http\\Io\\PauseBufferStream' => __DIR__ . '/..' . '/react/http/src/Io/PauseBufferStream.php', + 'React\\Http\\Io\\ReadableBodyStream' => __DIR__ . '/..' . '/react/http/src/Io/ReadableBodyStream.php', + 'React\\Http\\Io\\RequestHeaderParser' => __DIR__ . '/..' . '/react/http/src/Io/RequestHeaderParser.php', + 'React\\Http\\Io\\Sender' => __DIR__ . '/..' . '/react/http/src/Io/Sender.php', + 'React\\Http\\Io\\StreamingServer' => __DIR__ . '/..' . '/react/http/src/Io/StreamingServer.php', + 'React\\Http\\Io\\Transaction' => __DIR__ . '/..' . '/react/http/src/Io/Transaction.php', + 'React\\Http\\Io\\UploadedFile' => __DIR__ . '/..' . '/react/http/src/Io/UploadedFile.php', + 'React\\Http\\Message\\Response' => __DIR__ . '/..' . '/react/http/src/Message/Response.php', + 'React\\Http\\Message\\ResponseException' => __DIR__ . '/..' . '/react/http/src/Message/ResponseException.php', + 'React\\Http\\Message\\ServerRequest' => __DIR__ . '/..' . '/react/http/src/Message/ServerRequest.php', + 'React\\Http\\Middleware\\LimitConcurrentRequestsMiddleware' => __DIR__ . '/..' . '/react/http/src/Middleware/LimitConcurrentRequestsMiddleware.php', + 'React\\Http\\Middleware\\RequestBodyBufferMiddleware' => __DIR__ . '/..' . '/react/http/src/Middleware/RequestBodyBufferMiddleware.php', + 'React\\Http\\Middleware\\RequestBodyParserMiddleware' => __DIR__ . '/..' . '/react/http/src/Middleware/RequestBodyParserMiddleware.php', + 'React\\Http\\Middleware\\StreamingRequestMiddleware' => __DIR__ . '/..' . '/react/http/src/Middleware/StreamingRequestMiddleware.php', + 'React\\Http\\Server' => __DIR__ . '/..' . '/react/http/src/Server.php', + 'React\\Promise\\CancellablePromiseInterface' => __DIR__ . '/..' . '/react/promise/src/CancellablePromiseInterface.php', + 'React\\Promise\\CancellationQueue' => __DIR__ . '/..' . '/react/promise/src/CancellationQueue.php', + 'React\\Promise\\Deferred' => __DIR__ . '/..' . '/react/promise/src/Deferred.php', + 'React\\Promise\\Exception\\LengthException' => __DIR__ . '/..' . '/react/promise/src/Exception/LengthException.php', + 'React\\Promise\\ExtendedPromiseInterface' => __DIR__ . '/..' . '/react/promise/src/ExtendedPromiseInterface.php', + 'React\\Promise\\FulfilledPromise' => __DIR__ . '/..' . '/react/promise/src/FulfilledPromise.php', + 'React\\Promise\\LazyPromise' => __DIR__ . '/..' . '/react/promise/src/LazyPromise.php', + 'React\\Promise\\Promise' => __DIR__ . '/..' . '/react/promise/src/Promise.php', + 'React\\Promise\\PromiseInterface' => __DIR__ . '/..' . '/react/promise/src/PromiseInterface.php', + 'React\\Promise\\PromisorInterface' => __DIR__ . '/..' . '/react/promise/src/PromisorInterface.php', + 'React\\Promise\\RejectedPromise' => __DIR__ . '/..' . '/react/promise/src/RejectedPromise.php', + 'React\\Promise\\Stream\\UnwrapReadableStream' => __DIR__ . '/..' . '/react/promise-stream/src/UnwrapReadableStream.php', + 'React\\Promise\\Stream\\UnwrapWritableStream' => __DIR__ . '/..' . '/react/promise-stream/src/UnwrapWritableStream.php', + 'React\\Promise\\Timer\\TimeoutException' => __DIR__ . '/..' . '/react/promise-timer/src/TimeoutException.php', + 'React\\Promise\\UnhandledRejectionException' => __DIR__ . '/..' . '/react/promise/src/UnhandledRejectionException.php', + 'React\\Socket\\Connection' => __DIR__ . '/..' . '/react/socket/src/Connection.php', + 'React\\Socket\\ConnectionInterface' => __DIR__ . '/..' . '/react/socket/src/ConnectionInterface.php', + 'React\\Socket\\Connector' => __DIR__ . '/..' . '/react/socket/src/Connector.php', + 'React\\Socket\\ConnectorInterface' => __DIR__ . '/..' . '/react/socket/src/ConnectorInterface.php', + 'React\\Socket\\DnsConnector' => __DIR__ . '/..' . '/react/socket/src/DnsConnector.php', + 'React\\Socket\\FdServer' => __DIR__ . '/..' . '/react/socket/src/FdServer.php', + 'React\\Socket\\FixedUriConnector' => __DIR__ . '/..' . '/react/socket/src/FixedUriConnector.php', + 'React\\Socket\\HappyEyeBallsConnectionBuilder' => __DIR__ . '/..' . '/react/socket/src/HappyEyeBallsConnectionBuilder.php', + 'React\\Socket\\HappyEyeBallsConnector' => __DIR__ . '/..' . '/react/socket/src/HappyEyeBallsConnector.php', + 'React\\Socket\\LimitingServer' => __DIR__ . '/..' . '/react/socket/src/LimitingServer.php', + 'React\\Socket\\SecureConnector' => __DIR__ . '/..' . '/react/socket/src/SecureConnector.php', + 'React\\Socket\\SecureServer' => __DIR__ . '/..' . '/react/socket/src/SecureServer.php', + 'React\\Socket\\Server' => __DIR__ . '/..' . '/react/socket/src/Server.php', + 'React\\Socket\\ServerInterface' => __DIR__ . '/..' . '/react/socket/src/ServerInterface.php', + 'React\\Socket\\SocketServer' => __DIR__ . '/..' . '/react/socket/src/SocketServer.php', + 'React\\Socket\\StreamEncryption' => __DIR__ . '/..' . '/react/socket/src/StreamEncryption.php', + 'React\\Socket\\TcpConnector' => __DIR__ . '/..' . '/react/socket/src/TcpConnector.php', + 'React\\Socket\\TcpServer' => __DIR__ . '/..' . '/react/socket/src/TcpServer.php', + 'React\\Socket\\TimeoutConnector' => __DIR__ . '/..' . '/react/socket/src/TimeoutConnector.php', + 'React\\Socket\\UnixConnector' => __DIR__ . '/..' . '/react/socket/src/UnixConnector.php', + 'React\\Socket\\UnixServer' => __DIR__ . '/..' . '/react/socket/src/UnixServer.php', + 'React\\Stream\\CompositeStream' => __DIR__ . '/..' . '/react/stream/src/CompositeStream.php', + 'React\\Stream\\DuplexResourceStream' => __DIR__ . '/..' . '/react/stream/src/DuplexResourceStream.php', + 'React\\Stream\\DuplexStreamInterface' => __DIR__ . '/..' . '/react/stream/src/DuplexStreamInterface.php', + 'React\\Stream\\ReadableResourceStream' => __DIR__ . '/..' . '/react/stream/src/ReadableResourceStream.php', + 'React\\Stream\\ReadableStreamInterface' => __DIR__ . '/..' . '/react/stream/src/ReadableStreamInterface.php', + 'React\\Stream\\ThroughStream' => __DIR__ . '/..' . '/react/stream/src/ThroughStream.php', + 'React\\Stream\\Util' => __DIR__ . '/..' . '/react/stream/src/Util.php', + 'React\\Stream\\WritableResourceStream' => __DIR__ . '/..' . '/react/stream/src/WritableResourceStream.php', + 'React\\Stream\\WritableStreamInterface' => __DIR__ . '/..' . '/react/stream/src/WritableStreamInterface.php', + 'RingCentral\\Psr7\\AppendStream' => __DIR__ . '/..' . '/ringcentral/psr7/src/AppendStream.php', + 'RingCentral\\Psr7\\BufferStream' => __DIR__ . '/..' . '/ringcentral/psr7/src/BufferStream.php', + 'RingCentral\\Psr7\\CachingStream' => __DIR__ . '/..' . '/ringcentral/psr7/src/CachingStream.php', + 'RingCentral\\Psr7\\DroppingStream' => __DIR__ . '/..' . '/ringcentral/psr7/src/DroppingStream.php', + 'RingCentral\\Psr7\\FnStream' => __DIR__ . '/..' . '/ringcentral/psr7/src/FnStream.php', + 'RingCentral\\Psr7\\InflateStream' => __DIR__ . '/..' . '/ringcentral/psr7/src/InflateStream.php', + 'RingCentral\\Psr7\\LazyOpenStream' => __DIR__ . '/..' . '/ringcentral/psr7/src/LazyOpenStream.php', + 'RingCentral\\Psr7\\LimitStream' => __DIR__ . '/..' . '/ringcentral/psr7/src/LimitStream.php', + 'RingCentral\\Psr7\\MessageTrait' => __DIR__ . '/..' . '/ringcentral/psr7/src/MessageTrait.php', + 'RingCentral\\Psr7\\MultipartStream' => __DIR__ . '/..' . '/ringcentral/psr7/src/MultipartStream.php', + 'RingCentral\\Psr7\\NoSeekStream' => __DIR__ . '/..' . '/ringcentral/psr7/src/NoSeekStream.php', + 'RingCentral\\Psr7\\PumpStream' => __DIR__ . '/..' . '/ringcentral/psr7/src/PumpStream.php', + 'RingCentral\\Psr7\\Request' => __DIR__ . '/..' . '/ringcentral/psr7/src/Request.php', + 'RingCentral\\Psr7\\Response' => __DIR__ . '/..' . '/ringcentral/psr7/src/Response.php', + 'RingCentral\\Psr7\\ServerRequest' => __DIR__ . '/..' . '/ringcentral/psr7/src/ServerRequest.php', + 'RingCentral\\Psr7\\Stream' => __DIR__ . '/..' . '/ringcentral/psr7/src/Stream.php', + 'RingCentral\\Psr7\\StreamDecoratorTrait' => __DIR__ . '/..' . '/ringcentral/psr7/src/StreamDecoratorTrait.php', + 'RingCentral\\Psr7\\StreamWrapper' => __DIR__ . '/..' . '/ringcentral/psr7/src/StreamWrapper.php', + 'RingCentral\\Psr7\\Uri' => __DIR__ . '/..' . '/ringcentral/psr7/src/Uri.php', + 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.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', + 'Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => __DIR__ . '/..' . '/symfony/console/Descriptor/DescriptorInterface.php', + 'Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/JsonDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/MarkdownDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/TextDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/XmlDescriptor.php', + 'Symfony\\Component\\Console\\EventListener\\ErrorListener' => __DIR__ . '/..' . '/symfony/console/EventListener/ErrorListener.php', + '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', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyleInterface.php', + 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyleStack.php', + 'Symfony\\Component\\Console\\Formatter\\WrappableOutputFormatterInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/WrappableOutputFormatterInterface.php', + 'Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => __DIR__ . '/..' . '/symfony/console/Helper/DebugFormatterHelper.php', + 'Symfony\\Component\\Console\\Helper\\DescriptorHelper' => __DIR__ . '/..' . '/symfony/console/Helper/DescriptorHelper.php', + 'Symfony\\Component\\Console\\Helper\\Dumper' => __DIR__ . '/..' . '/symfony/console/Helper/Dumper.php', + 'Symfony\\Component\\Console\\Helper\\FormatterHelper' => __DIR__ . '/..' . '/symfony/console/Helper/FormatterHelper.php', + 'Symfony\\Component\\Console\\Helper\\Helper' => __DIR__ . '/..' . '/symfony/console/Helper/Helper.php', + 'Symfony\\Component\\Console\\Helper\\HelperInterface' => __DIR__ . '/..' . '/symfony/console/Helper/HelperInterface.php', + 'Symfony\\Component\\Console\\Helper\\HelperSet' => __DIR__ . '/..' . '/symfony/console/Helper/HelperSet.php', + 'Symfony\\Component\\Console\\Helper\\InputAwareHelper' => __DIR__ . '/..' . '/symfony/console/Helper/InputAwareHelper.php', + 'Symfony\\Component\\Console\\Helper\\ProcessHelper' => __DIR__ . '/..' . '/symfony/console/Helper/ProcessHelper.php', + 'Symfony\\Component\\Console\\Helper\\ProgressBar' => __DIR__ . '/..' . '/symfony/console/Helper/ProgressBar.php', + 'Symfony\\Component\\Console\\Helper\\ProgressIndicator' => __DIR__ . '/..' . '/symfony/console/Helper/ProgressIndicator.php', + 'Symfony\\Component\\Console\\Helper\\QuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/QuestionHelper.php', + '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', + 'Symfony\\Component\\Console\\Input\\ArgvInput' => __DIR__ . '/..' . '/symfony/console/Input/ArgvInput.php', + 'Symfony\\Component\\Console\\Input\\ArrayInput' => __DIR__ . '/..' . '/symfony/console/Input/ArrayInput.php', + 'Symfony\\Component\\Console\\Input\\Input' => __DIR__ . '/..' . '/symfony/console/Input/Input.php', + 'Symfony\\Component\\Console\\Input\\InputArgument' => __DIR__ . '/..' . '/symfony/console/Input/InputArgument.php', + 'Symfony\\Component\\Console\\Input\\InputAwareInterface' => __DIR__ . '/..' . '/symfony/console/Input/InputAwareInterface.php', + 'Symfony\\Component\\Console\\Input\\InputDefinition' => __DIR__ . '/..' . '/symfony/console/Input/InputDefinition.php', + 'Symfony\\Component\\Console\\Input\\InputInterface' => __DIR__ . '/..' . '/symfony/console/Input/InputInterface.php', + 'Symfony\\Component\\Console\\Input\\InputOption' => __DIR__ . '/..' . '/symfony/console/Input/InputOption.php', + 'Symfony\\Component\\Console\\Input\\StreamableInputInterface' => __DIR__ . '/..' . '/symfony/console/Input/StreamableInputInterface.php', + 'Symfony\\Component\\Console\\Input\\StringInput' => __DIR__ . '/..' . '/symfony/console/Input/StringInput.php', + 'Symfony\\Component\\Console\\Logger\\ConsoleLogger' => __DIR__ . '/..' . '/symfony/console/Logger/ConsoleLogger.php', + 'Symfony\\Component\\Console\\Output\\BufferedOutput' => __DIR__ . '/..' . '/symfony/console/Output/BufferedOutput.php', + 'Symfony\\Component\\Console\\Output\\ConsoleOutput' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleOutput.php', + 'Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleOutputInterface.php', + 'Symfony\\Component\\Console\\Output\\ConsoleSectionOutput' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleSectionOutput.php', + 'Symfony\\Component\\Console\\Output\\NullOutput' => __DIR__ . '/..' . '/symfony/console/Output/NullOutput.php', + '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\\Process\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/process/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/process/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\Process\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/process/Exception/LogicException.php', + 'Symfony\\Component\\Process\\Exception\\ProcessFailedException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessFailedException.php', + 'Symfony\\Component\\Process\\Exception\\ProcessSignaledException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessSignaledException.php', + 'Symfony\\Component\\Process\\Exception\\ProcessTimedOutException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessTimedOutException.php', + 'Symfony\\Component\\Process\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/process/Exception/RuntimeException.php', + 'Symfony\\Component\\Process\\ExecutableFinder' => __DIR__ . '/..' . '/symfony/process/ExecutableFinder.php', + 'Symfony\\Component\\Process\\InputStream' => __DIR__ . '/..' . '/symfony/process/InputStream.php', + 'Symfony\\Component\\Process\\PhpExecutableFinder' => __DIR__ . '/..' . '/symfony/process/PhpExecutableFinder.php', + 'Symfony\\Component\\Process\\PhpProcess' => __DIR__ . '/..' . '/symfony/process/PhpProcess.php', + 'Symfony\\Component\\Process\\Pipes\\AbstractPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/AbstractPipes.php', + 'Symfony\\Component\\Process\\Pipes\\PipesInterface' => __DIR__ . '/..' . '/symfony/process/Pipes/PipesInterface.php', + 'Symfony\\Component\\Process\\Pipes\\UnixPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/UnixPipes.php', + '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\\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\\Yaml\\Command\\LintCommand' => __DIR__ . '/..' . '/symfony/yaml/Command/LintCommand.php', + 'Symfony\\Component\\Yaml\\Dumper' => __DIR__ . '/..' . '/symfony/yaml/Dumper.php', + 'Symfony\\Component\\Yaml\\Escaper' => __DIR__ . '/..' . '/symfony/yaml/Escaper.php', + 'Symfony\\Component\\Yaml\\Exception\\DumpException' => __DIR__ . '/..' . '/symfony/yaml/Exception/DumpException.php', + 'Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/yaml/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Yaml\\Exception\\ParseException' => __DIR__ . '/..' . '/symfony/yaml/Exception/ParseException.php', + 'Symfony\\Component\\Yaml\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/yaml/Exception/RuntimeException.php', + 'Symfony\\Component\\Yaml\\Inline' => __DIR__ . '/..' . '/symfony/yaml/Inline.php', + 'Symfony\\Component\\Yaml\\Parser' => __DIR__ . '/..' . '/symfony/yaml/Parser.php', + 'Symfony\\Component\\Yaml\\Tag\\TaggedValue' => __DIR__ . '/..' . '/symfony/yaml/Tag/TaggedValue.php', + 'Symfony\\Component\\Yaml\\Unescaper' => __DIR__ . '/..' . '/symfony/yaml/Unescaper.php', + 'Symfony\\Component\\Yaml\\Yaml' => __DIR__ . '/..' . '/symfony/yaml/Yaml.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', + 'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberInterface.php', + 'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberTrait.php', + 'Symfony\\Contracts\\Service\\Test\\ServiceLocatorTest' => __DIR__ . '/..' . '/symfony/service-contracts/Test/ServiceLocatorTest.php', + 'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php', + 'Symfony\\Polyfill\\Intl\\Grapheme\\Grapheme' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/Grapheme.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\\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', + 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', + 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit234e1a4a29689e00066666da06e8ece1::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit234e1a4a29689e00066666da06e8ece1::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInit234e1a4a29689e00066666da06e8ece1::$prefixesPsr0; + $loader->classMap = ComposerStaticInit234e1a4a29689e00066666da06e8ece1::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php new file mode 100644 index 000000000..579b5b435 --- /dev/null +++ b/vendor/composer/installed.php @@ -0,0 +1,281 @@ + + array ( + 'pretty_version' => 'v7.1.2', + 'version' => '7.1.2.0', + 'aliases' => + array ( + ), + 'reference' => '6b354c2e89198e64a0244fb96cc5604312027800', + 'name' => 'deployer/deployer', + ), + 'versions' => + array ( + 'deployer/deployer' => + array ( + 'pretty_version' => 'v7.1.2', + 'version' => '7.1.2.0', + 'aliases' => + array ( + ), + 'reference' => '6b354c2e89198e64a0244fb96cc5604312027800', + ), + 'evenement/evenement' => + array ( + 'pretty_version' => 'v3.0.1', + 'version' => '3.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '531bfb9d15f8aa57454f5f0285b18bec903b8fb7', + ), + 'fig/http-message-util' => + array ( + 'pretty_version' => '1.1.5', + 'version' => '1.1.5.0', + 'aliases' => + array ( + ), + 'reference' => '9d94dc0154230ac39e5bf89398b324a86f63f765', + ), + 'justinrainbow/json-schema' => + array ( + 'pretty_version' => '5.2.11', + 'version' => '5.2.11.0', + 'aliases' => + array ( + ), + 'reference' => '2ab6744b7296ded80f8cc4f9509abbff393399aa', + ), + 'psr/container' => + array ( + 'pretty_version' => '1.1.1', + 'version' => '1.1.1.0', + 'aliases' => + array ( + ), + 'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf', + ), + 'psr/http-message' => + array ( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'aliases' => + array ( + ), + 'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363', + ), + 'psr/http-message-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0', + ), + ), + 'psr/log-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0|2.0', + ), + ), + 'react/cache' => + array ( + 'pretty_version' => 'v1.1.1', + 'version' => '1.1.1.0', + 'aliases' => + array ( + ), + 'reference' => '4bf736a2cccec7298bdf745db77585966fc2ca7e', + ), + 'react/dns' => + array ( + 'pretty_version' => 'v1.9.0', + 'version' => '1.9.0.0', + 'aliases' => + array ( + ), + 'reference' => '6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb', + ), + 'react/event-loop' => + array ( + 'pretty_version' => 'v1.2.0', + 'version' => '1.2.0.0', + 'aliases' => + array ( + ), + 'reference' => 'be6dee480fc4692cec0504e65eb486e3be1aa6f2', + ), + 'react/http' => + array ( + 'pretty_version' => 'v1.6.0', + 'version' => '1.6.0.0', + 'aliases' => + array ( + ), + 'reference' => '59961cc4a5b14481728f07c591546be18fa3a5c7', + ), + 'react/promise' => + array ( + 'pretty_version' => 'v2.9.0', + 'version' => '2.9.0.0', + 'aliases' => + array ( + ), + 'reference' => '234f8fd1023c9158e2314fa9d7d0e6a83db42910', + ), + 'react/promise-stream' => + array ( + 'pretty_version' => 'v1.3.0', + 'version' => '1.3.0.0', + 'aliases' => + array ( + ), + 'reference' => '3ebd94fe0d8edbf44937948af28d02d5437e9949', + ), + 'react/promise-timer' => + array ( + 'pretty_version' => 'v1.8.0', + 'version' => '1.8.0.0', + 'aliases' => + array ( + ), + 'reference' => '0bbbcc79589e5bfdddba68a287f1cb805581a479', + ), + 'react/socket' => + array ( + 'pretty_version' => 'v1.11.0', + 'version' => '1.11.0.0', + 'aliases' => + array ( + ), + 'reference' => 'f474156aaab4f09041144fa8b57c7d70aed32a1c', + ), + 'react/stream' => + array ( + 'pretty_version' => 'v1.2.0', + 'version' => '1.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '7a423506ee1903e89f1e08ec5f0ed430ff784ae9', + ), + 'ringcentral/psr7' => + array ( + 'pretty_version' => '1.3.0', + 'version' => '1.3.0.0', + 'aliases' => + array ( + ), + 'reference' => '360faaec4b563958b673fb52bbe94e37f14bc686', + ), + 'symfony/console' => + array ( + 'pretty_version' => 'v5.4.17', + 'version' => '5.4.17.0', + 'aliases' => + array ( + ), + 'reference' => '58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f', + ), + 'symfony/deprecation-contracts' => + array ( + 'pretty_version' => 'v2.5.0', + 'version' => '2.5.0.0', + 'aliases' => + array ( + ), + 'reference' => '6f981ee24cf69ee7ce9736146d1c57c2780598a8', + ), + 'symfony/polyfill-ctype' => + array ( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'aliases' => + array ( + ), + 'reference' => '30885182c981ab175d4d034db0f6f469898070ab', + ), + 'symfony/polyfill-intl-grapheme' => + array ( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'aliases' => + array ( + ), + 'reference' => '81b86b50cf841a64252b439e738e97f4a34e2783', + ), + 'symfony/polyfill-intl-normalizer' => + array ( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'aliases' => + array ( + ), + 'reference' => '8590a5f561694770bdcd3f9b5c69dde6945028e8', + ), + 'symfony/polyfill-mbstring' => + array ( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'aliases' => + array ( + ), + 'reference' => '0abb51d2f102e00a4eefcf46ba7fec406d245825', + ), + 'symfony/polyfill-php73' => + array ( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'aliases' => + array ( + ), + 'reference' => 'cc5db0e22b3cb4111010e48785a97f670b350ca5', + ), + 'symfony/polyfill-php80' => + array ( + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', + 'aliases' => + array ( + ), + 'reference' => '4407588e0d3f1f52efb65fbe92babe41f37fe50c', + ), + 'symfony/process' => + array ( + 'pretty_version' => 'v5.4.5', + 'version' => '5.4.5.0', + 'aliases' => + array ( + ), + 'reference' => '95440409896f90a5f85db07a32b517ecec17fa4c', + ), + 'symfony/service-contracts' => + array ( + 'pretty_version' => 'v2.5.0', + 'version' => '2.5.0.0', + 'aliases' => + array ( + ), + 'reference' => '1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc', + ), + 'symfony/string' => + array ( + 'pretty_version' => 'v5.4.3', + 'version' => '5.4.3.0', + 'aliases' => + array ( + ), + 'reference' => '92043b7d8383e48104e411bc9434b260dbeb5a10', + ), + 'symfony/yaml' => + array ( + 'pretty_version' => 'v5.4.3', + 'version' => '5.4.3.0', + 'aliases' => + array ( + ), + 'reference' => 'e80f87d2c9495966768310fc531b487ce64237a2', + ), + ), +); diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php new file mode 100644 index 000000000..92370c5a0 --- /dev/null +++ b/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 70300)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.3.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/deps/vendor/evenement/evenement/examples/benchmark-emit-no-arguments.php b/vendor/evenement/evenement/examples/benchmark-emit-no-arguments.php similarity index 100% rename from deps/vendor/evenement/evenement/examples/benchmark-emit-no-arguments.php rename to vendor/evenement/evenement/examples/benchmark-emit-no-arguments.php diff --git a/deps/vendor/evenement/evenement/examples/benchmark-emit-once.php b/vendor/evenement/evenement/examples/benchmark-emit-once.php similarity index 100% rename from deps/vendor/evenement/evenement/examples/benchmark-emit-once.php rename to vendor/evenement/evenement/examples/benchmark-emit-once.php diff --git a/deps/vendor/evenement/evenement/examples/benchmark-emit-one-argument.php b/vendor/evenement/evenement/examples/benchmark-emit-one-argument.php similarity index 100% rename from deps/vendor/evenement/evenement/examples/benchmark-emit-one-argument.php rename to vendor/evenement/evenement/examples/benchmark-emit-one-argument.php diff --git a/deps/vendor/evenement/evenement/examples/benchmark-emit.php b/vendor/evenement/evenement/examples/benchmark-emit.php similarity index 100% rename from deps/vendor/evenement/evenement/examples/benchmark-emit.php rename to vendor/evenement/evenement/examples/benchmark-emit.php diff --git a/deps/vendor/evenement/evenement/examples/benchmark-remove-listener-once.php b/vendor/evenement/evenement/examples/benchmark-remove-listener-once.php similarity index 100% rename from deps/vendor/evenement/evenement/examples/benchmark-remove-listener-once.php rename to vendor/evenement/evenement/examples/benchmark-remove-listener-once.php diff --git a/deps/vendor/evenement/evenement/src/Evenement/EventEmitter.php b/vendor/evenement/evenement/src/Evenement/EventEmitter.php similarity index 100% rename from deps/vendor/evenement/evenement/src/Evenement/EventEmitter.php rename to vendor/evenement/evenement/src/Evenement/EventEmitter.php diff --git a/deps/vendor/evenement/evenement/src/Evenement/EventEmitterInterface.php b/vendor/evenement/evenement/src/Evenement/EventEmitterInterface.php similarity index 100% rename from deps/vendor/evenement/evenement/src/Evenement/EventEmitterInterface.php rename to vendor/evenement/evenement/src/Evenement/EventEmitterInterface.php diff --git a/deps/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php b/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php similarity index 100% rename from deps/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php rename to vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php diff --git a/deps/vendor/fig/http-message-util/src/RequestMethodInterface.php b/vendor/fig/http-message-util/src/RequestMethodInterface.php similarity index 100% rename from deps/vendor/fig/http-message-util/src/RequestMethodInterface.php rename to vendor/fig/http-message-util/src/RequestMethodInterface.php diff --git a/deps/vendor/fig/http-message-util/src/StatusCodeInterface.php b/vendor/fig/http-message-util/src/StatusCodeInterface.php similarity index 100% rename from deps/vendor/fig/http-message-util/src/StatusCodeInterface.php rename to vendor/fig/http-message-util/src/StatusCodeInterface.php diff --git a/deps/vendor/justinrainbow/json-schema/demo/demo.php b/vendor/justinrainbow/json-schema/demo/demo.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/demo/demo.php rename to vendor/justinrainbow/json-schema/demo/demo.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php b/vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php b/vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php b/vendor/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php b/vendor/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php diff --git a/deps/vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php b/vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php similarity index 100% rename from deps/vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php rename to vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php diff --git a/deps/vendor/psr/container/src/ContainerExceptionInterface.php b/vendor/psr/container/src/ContainerExceptionInterface.php similarity index 100% rename from deps/vendor/psr/container/src/ContainerExceptionInterface.php rename to vendor/psr/container/src/ContainerExceptionInterface.php diff --git a/deps/vendor/psr/container/src/ContainerInterface.php b/vendor/psr/container/src/ContainerInterface.php similarity index 100% rename from deps/vendor/psr/container/src/ContainerInterface.php rename to vendor/psr/container/src/ContainerInterface.php diff --git a/deps/vendor/psr/container/src/NotFoundExceptionInterface.php b/vendor/psr/container/src/NotFoundExceptionInterface.php similarity index 100% rename from deps/vendor/psr/container/src/NotFoundExceptionInterface.php rename to vendor/psr/container/src/NotFoundExceptionInterface.php diff --git a/deps/vendor/psr/http-message/src/MessageInterface.php b/vendor/psr/http-message/src/MessageInterface.php similarity index 100% rename from deps/vendor/psr/http-message/src/MessageInterface.php rename to vendor/psr/http-message/src/MessageInterface.php diff --git a/deps/vendor/psr/http-message/src/RequestInterface.php b/vendor/psr/http-message/src/RequestInterface.php similarity index 100% rename from deps/vendor/psr/http-message/src/RequestInterface.php rename to vendor/psr/http-message/src/RequestInterface.php diff --git a/deps/vendor/psr/http-message/src/ResponseInterface.php b/vendor/psr/http-message/src/ResponseInterface.php similarity index 100% rename from deps/vendor/psr/http-message/src/ResponseInterface.php rename to vendor/psr/http-message/src/ResponseInterface.php diff --git a/deps/vendor/psr/http-message/src/ServerRequestInterface.php b/vendor/psr/http-message/src/ServerRequestInterface.php similarity index 100% rename from deps/vendor/psr/http-message/src/ServerRequestInterface.php rename to vendor/psr/http-message/src/ServerRequestInterface.php diff --git a/deps/vendor/psr/http-message/src/StreamInterface.php b/vendor/psr/http-message/src/StreamInterface.php similarity index 100% rename from deps/vendor/psr/http-message/src/StreamInterface.php rename to vendor/psr/http-message/src/StreamInterface.php diff --git a/deps/vendor/psr/http-message/src/UploadedFileInterface.php b/vendor/psr/http-message/src/UploadedFileInterface.php similarity index 100% rename from deps/vendor/psr/http-message/src/UploadedFileInterface.php rename to vendor/psr/http-message/src/UploadedFileInterface.php diff --git a/deps/vendor/psr/http-message/src/UriInterface.php b/vendor/psr/http-message/src/UriInterface.php similarity index 100% rename from deps/vendor/psr/http-message/src/UriInterface.php rename to vendor/psr/http-message/src/UriInterface.php diff --git a/deps/vendor/react/cache/src/ArrayCache.php b/vendor/react/cache/src/ArrayCache.php similarity index 100% rename from deps/vendor/react/cache/src/ArrayCache.php rename to vendor/react/cache/src/ArrayCache.php diff --git a/deps/vendor/react/cache/src/CacheInterface.php b/vendor/react/cache/src/CacheInterface.php similarity index 100% rename from deps/vendor/react/cache/src/CacheInterface.php rename to vendor/react/cache/src/CacheInterface.php diff --git a/deps/vendor/react/dns/src/BadServerException.php b/vendor/react/dns/src/BadServerException.php similarity index 100% rename from deps/vendor/react/dns/src/BadServerException.php rename to vendor/react/dns/src/BadServerException.php diff --git a/deps/vendor/react/dns/src/Config/Config.php b/vendor/react/dns/src/Config/Config.php similarity index 100% rename from deps/vendor/react/dns/src/Config/Config.php rename to vendor/react/dns/src/Config/Config.php diff --git a/deps/vendor/react/dns/src/Config/HostsFile.php b/vendor/react/dns/src/Config/HostsFile.php similarity index 100% rename from deps/vendor/react/dns/src/Config/HostsFile.php rename to vendor/react/dns/src/Config/HostsFile.php diff --git a/deps/vendor/react/dns/src/Model/Message.php b/vendor/react/dns/src/Model/Message.php similarity index 100% rename from deps/vendor/react/dns/src/Model/Message.php rename to vendor/react/dns/src/Model/Message.php diff --git a/deps/vendor/react/dns/src/Model/Record.php b/vendor/react/dns/src/Model/Record.php similarity index 100% rename from deps/vendor/react/dns/src/Model/Record.php rename to vendor/react/dns/src/Model/Record.php diff --git a/deps/vendor/react/dns/src/Protocol/BinaryDumper.php b/vendor/react/dns/src/Protocol/BinaryDumper.php similarity index 100% rename from deps/vendor/react/dns/src/Protocol/BinaryDumper.php rename to vendor/react/dns/src/Protocol/BinaryDumper.php diff --git a/deps/vendor/react/dns/src/Protocol/Parser.php b/vendor/react/dns/src/Protocol/Parser.php similarity index 100% rename from deps/vendor/react/dns/src/Protocol/Parser.php rename to vendor/react/dns/src/Protocol/Parser.php diff --git a/deps/vendor/react/dns/src/Query/CachingExecutor.php b/vendor/react/dns/src/Query/CachingExecutor.php similarity index 100% rename from deps/vendor/react/dns/src/Query/CachingExecutor.php rename to vendor/react/dns/src/Query/CachingExecutor.php diff --git a/deps/vendor/react/dns/src/Query/CancellationException.php b/vendor/react/dns/src/Query/CancellationException.php similarity index 100% rename from deps/vendor/react/dns/src/Query/CancellationException.php rename to vendor/react/dns/src/Query/CancellationException.php diff --git a/deps/vendor/react/dns/src/Query/CoopExecutor.php b/vendor/react/dns/src/Query/CoopExecutor.php similarity index 100% rename from deps/vendor/react/dns/src/Query/CoopExecutor.php rename to vendor/react/dns/src/Query/CoopExecutor.php diff --git a/deps/vendor/react/dns/src/Query/ExecutorInterface.php b/vendor/react/dns/src/Query/ExecutorInterface.php similarity index 100% rename from deps/vendor/react/dns/src/Query/ExecutorInterface.php rename to vendor/react/dns/src/Query/ExecutorInterface.php diff --git a/deps/vendor/react/dns/src/Query/FallbackExecutor.php b/vendor/react/dns/src/Query/FallbackExecutor.php similarity index 100% rename from deps/vendor/react/dns/src/Query/FallbackExecutor.php rename to vendor/react/dns/src/Query/FallbackExecutor.php diff --git a/deps/vendor/react/dns/src/Query/HostsFileExecutor.php b/vendor/react/dns/src/Query/HostsFileExecutor.php similarity index 100% rename from deps/vendor/react/dns/src/Query/HostsFileExecutor.php rename to vendor/react/dns/src/Query/HostsFileExecutor.php diff --git a/deps/vendor/react/dns/src/Query/Query.php b/vendor/react/dns/src/Query/Query.php similarity index 100% rename from deps/vendor/react/dns/src/Query/Query.php rename to vendor/react/dns/src/Query/Query.php diff --git a/deps/vendor/react/dns/src/Query/RetryExecutor.php b/vendor/react/dns/src/Query/RetryExecutor.php similarity index 100% rename from deps/vendor/react/dns/src/Query/RetryExecutor.php rename to vendor/react/dns/src/Query/RetryExecutor.php diff --git a/deps/vendor/react/dns/src/Query/SelectiveTransportExecutor.php b/vendor/react/dns/src/Query/SelectiveTransportExecutor.php similarity index 100% rename from deps/vendor/react/dns/src/Query/SelectiveTransportExecutor.php rename to vendor/react/dns/src/Query/SelectiveTransportExecutor.php diff --git a/deps/vendor/react/dns/src/Query/TcpTransportExecutor.php b/vendor/react/dns/src/Query/TcpTransportExecutor.php similarity index 100% rename from deps/vendor/react/dns/src/Query/TcpTransportExecutor.php rename to vendor/react/dns/src/Query/TcpTransportExecutor.php diff --git a/deps/vendor/react/dns/src/Query/TimeoutException.php b/vendor/react/dns/src/Query/TimeoutException.php similarity index 100% rename from deps/vendor/react/dns/src/Query/TimeoutException.php rename to vendor/react/dns/src/Query/TimeoutException.php diff --git a/deps/vendor/react/dns/src/Query/TimeoutExecutor.php b/vendor/react/dns/src/Query/TimeoutExecutor.php similarity index 100% rename from deps/vendor/react/dns/src/Query/TimeoutExecutor.php rename to vendor/react/dns/src/Query/TimeoutExecutor.php diff --git a/deps/vendor/react/dns/src/Query/UdpTransportExecutor.php b/vendor/react/dns/src/Query/UdpTransportExecutor.php similarity index 100% rename from deps/vendor/react/dns/src/Query/UdpTransportExecutor.php rename to vendor/react/dns/src/Query/UdpTransportExecutor.php diff --git a/deps/vendor/react/dns/src/RecordNotFoundException.php b/vendor/react/dns/src/RecordNotFoundException.php similarity index 100% rename from deps/vendor/react/dns/src/RecordNotFoundException.php rename to vendor/react/dns/src/RecordNotFoundException.php diff --git a/deps/vendor/react/dns/src/Resolver/Factory.php b/vendor/react/dns/src/Resolver/Factory.php similarity index 100% rename from deps/vendor/react/dns/src/Resolver/Factory.php rename to vendor/react/dns/src/Resolver/Factory.php diff --git a/deps/vendor/react/dns/src/Resolver/Resolver.php b/vendor/react/dns/src/Resolver/Resolver.php similarity index 100% rename from deps/vendor/react/dns/src/Resolver/Resolver.php rename to vendor/react/dns/src/Resolver/Resolver.php diff --git a/deps/vendor/react/dns/src/Resolver/ResolverInterface.php b/vendor/react/dns/src/Resolver/ResolverInterface.php similarity index 100% rename from deps/vendor/react/dns/src/Resolver/ResolverInterface.php rename to vendor/react/dns/src/Resolver/ResolverInterface.php diff --git a/deps/vendor/react/event-loop/src/ExtEvLoop.php b/vendor/react/event-loop/src/ExtEvLoop.php similarity index 100% rename from deps/vendor/react/event-loop/src/ExtEvLoop.php rename to vendor/react/event-loop/src/ExtEvLoop.php diff --git a/deps/vendor/react/event-loop/src/ExtEventLoop.php b/vendor/react/event-loop/src/ExtEventLoop.php similarity index 100% rename from deps/vendor/react/event-loop/src/ExtEventLoop.php rename to vendor/react/event-loop/src/ExtEventLoop.php diff --git a/deps/vendor/react/event-loop/src/ExtLibevLoop.php b/vendor/react/event-loop/src/ExtLibevLoop.php similarity index 100% rename from deps/vendor/react/event-loop/src/ExtLibevLoop.php rename to vendor/react/event-loop/src/ExtLibevLoop.php diff --git a/deps/vendor/react/event-loop/src/ExtLibeventLoop.php b/vendor/react/event-loop/src/ExtLibeventLoop.php similarity index 100% rename from deps/vendor/react/event-loop/src/ExtLibeventLoop.php rename to vendor/react/event-loop/src/ExtLibeventLoop.php diff --git a/deps/vendor/react/event-loop/src/ExtUvLoop.php b/vendor/react/event-loop/src/ExtUvLoop.php similarity index 100% rename from deps/vendor/react/event-loop/src/ExtUvLoop.php rename to vendor/react/event-loop/src/ExtUvLoop.php diff --git a/deps/vendor/react/event-loop/src/Factory.php b/vendor/react/event-loop/src/Factory.php similarity index 100% rename from deps/vendor/react/event-loop/src/Factory.php rename to vendor/react/event-loop/src/Factory.php diff --git a/deps/vendor/react/event-loop/src/Loop.php b/vendor/react/event-loop/src/Loop.php similarity index 100% rename from deps/vendor/react/event-loop/src/Loop.php rename to vendor/react/event-loop/src/Loop.php diff --git a/deps/vendor/react/event-loop/src/LoopInterface.php b/vendor/react/event-loop/src/LoopInterface.php similarity index 100% rename from deps/vendor/react/event-loop/src/LoopInterface.php rename to vendor/react/event-loop/src/LoopInterface.php diff --git a/deps/vendor/react/event-loop/src/SignalsHandler.php b/vendor/react/event-loop/src/SignalsHandler.php similarity index 100% rename from deps/vendor/react/event-loop/src/SignalsHandler.php rename to vendor/react/event-loop/src/SignalsHandler.php diff --git a/deps/vendor/react/event-loop/src/StreamSelectLoop.php b/vendor/react/event-loop/src/StreamSelectLoop.php similarity index 100% rename from deps/vendor/react/event-loop/src/StreamSelectLoop.php rename to vendor/react/event-loop/src/StreamSelectLoop.php diff --git a/deps/vendor/react/event-loop/src/Tick/FutureTickQueue.php b/vendor/react/event-loop/src/Tick/FutureTickQueue.php similarity index 100% rename from deps/vendor/react/event-loop/src/Tick/FutureTickQueue.php rename to vendor/react/event-loop/src/Tick/FutureTickQueue.php diff --git a/deps/vendor/react/event-loop/src/Timer/Timer.php b/vendor/react/event-loop/src/Timer/Timer.php similarity index 100% rename from deps/vendor/react/event-loop/src/Timer/Timer.php rename to vendor/react/event-loop/src/Timer/Timer.php diff --git a/deps/vendor/react/event-loop/src/Timer/Timers.php b/vendor/react/event-loop/src/Timer/Timers.php similarity index 100% rename from deps/vendor/react/event-loop/src/Timer/Timers.php rename to vendor/react/event-loop/src/Timer/Timers.php diff --git a/deps/vendor/react/event-loop/src/TimerInterface.php b/vendor/react/event-loop/src/TimerInterface.php similarity index 100% rename from deps/vendor/react/event-loop/src/TimerInterface.php rename to vendor/react/event-loop/src/TimerInterface.php diff --git a/deps/vendor/react/http/src/Browser.php b/vendor/react/http/src/Browser.php similarity index 100% rename from deps/vendor/react/http/src/Browser.php rename to vendor/react/http/src/Browser.php diff --git a/deps/vendor/react/http/src/Client/Client.php b/vendor/react/http/src/Client/Client.php similarity index 100% rename from deps/vendor/react/http/src/Client/Client.php rename to vendor/react/http/src/Client/Client.php diff --git a/deps/vendor/react/http/src/Client/Request.php b/vendor/react/http/src/Client/Request.php similarity index 100% rename from deps/vendor/react/http/src/Client/Request.php rename to vendor/react/http/src/Client/Request.php diff --git a/deps/vendor/react/http/src/Client/RequestData.php b/vendor/react/http/src/Client/RequestData.php similarity index 100% rename from deps/vendor/react/http/src/Client/RequestData.php rename to vendor/react/http/src/Client/RequestData.php diff --git a/deps/vendor/react/http/src/HttpServer.php b/vendor/react/http/src/HttpServer.php similarity index 100% rename from deps/vendor/react/http/src/HttpServer.php rename to vendor/react/http/src/HttpServer.php diff --git a/deps/vendor/react/http/src/Io/BufferedBody.php b/vendor/react/http/src/Io/BufferedBody.php similarity index 100% rename from deps/vendor/react/http/src/Io/BufferedBody.php rename to vendor/react/http/src/Io/BufferedBody.php diff --git a/deps/vendor/react/http/src/Io/ChunkedDecoder.php b/vendor/react/http/src/Io/ChunkedDecoder.php similarity index 100% rename from deps/vendor/react/http/src/Io/ChunkedDecoder.php rename to vendor/react/http/src/Io/ChunkedDecoder.php diff --git a/deps/vendor/react/http/src/Io/ChunkedEncoder.php b/vendor/react/http/src/Io/ChunkedEncoder.php similarity index 100% rename from deps/vendor/react/http/src/Io/ChunkedEncoder.php rename to vendor/react/http/src/Io/ChunkedEncoder.php diff --git a/deps/vendor/react/http/src/Io/CloseProtectionStream.php b/vendor/react/http/src/Io/CloseProtectionStream.php similarity index 100% rename from deps/vendor/react/http/src/Io/CloseProtectionStream.php rename to vendor/react/http/src/Io/CloseProtectionStream.php diff --git a/deps/vendor/react/http/src/Io/EmptyBodyStream.php b/vendor/react/http/src/Io/EmptyBodyStream.php similarity index 100% rename from deps/vendor/react/http/src/Io/EmptyBodyStream.php rename to vendor/react/http/src/Io/EmptyBodyStream.php diff --git a/deps/vendor/react/http/src/Io/HttpBodyStream.php b/vendor/react/http/src/Io/HttpBodyStream.php similarity index 100% rename from deps/vendor/react/http/src/Io/HttpBodyStream.php rename to vendor/react/http/src/Io/HttpBodyStream.php diff --git a/deps/vendor/react/http/src/Io/IniUtil.php b/vendor/react/http/src/Io/IniUtil.php similarity index 100% rename from deps/vendor/react/http/src/Io/IniUtil.php rename to vendor/react/http/src/Io/IniUtil.php diff --git a/deps/vendor/react/http/src/Io/LengthLimitedStream.php b/vendor/react/http/src/Io/LengthLimitedStream.php similarity index 100% rename from deps/vendor/react/http/src/Io/LengthLimitedStream.php rename to vendor/react/http/src/Io/LengthLimitedStream.php diff --git a/deps/vendor/react/http/src/Io/MiddlewareRunner.php b/vendor/react/http/src/Io/MiddlewareRunner.php similarity index 100% rename from deps/vendor/react/http/src/Io/MiddlewareRunner.php rename to vendor/react/http/src/Io/MiddlewareRunner.php diff --git a/deps/vendor/react/http/src/Io/MultipartParser.php b/vendor/react/http/src/Io/MultipartParser.php similarity index 100% rename from deps/vendor/react/http/src/Io/MultipartParser.php rename to vendor/react/http/src/Io/MultipartParser.php diff --git a/deps/vendor/react/http/src/Io/PauseBufferStream.php b/vendor/react/http/src/Io/PauseBufferStream.php similarity index 100% rename from deps/vendor/react/http/src/Io/PauseBufferStream.php rename to vendor/react/http/src/Io/PauseBufferStream.php diff --git a/deps/vendor/react/http/src/Io/ReadableBodyStream.php b/vendor/react/http/src/Io/ReadableBodyStream.php similarity index 100% rename from deps/vendor/react/http/src/Io/ReadableBodyStream.php rename to vendor/react/http/src/Io/ReadableBodyStream.php diff --git a/deps/vendor/react/http/src/Io/RequestHeaderParser.php b/vendor/react/http/src/Io/RequestHeaderParser.php similarity index 100% rename from deps/vendor/react/http/src/Io/RequestHeaderParser.php rename to vendor/react/http/src/Io/RequestHeaderParser.php diff --git a/deps/vendor/react/http/src/Io/Sender.php b/vendor/react/http/src/Io/Sender.php similarity index 100% rename from deps/vendor/react/http/src/Io/Sender.php rename to vendor/react/http/src/Io/Sender.php diff --git a/deps/vendor/react/http/src/Io/StreamingServer.php b/vendor/react/http/src/Io/StreamingServer.php similarity index 100% rename from deps/vendor/react/http/src/Io/StreamingServer.php rename to vendor/react/http/src/Io/StreamingServer.php diff --git a/deps/vendor/react/http/src/Io/Transaction.php b/vendor/react/http/src/Io/Transaction.php similarity index 100% rename from deps/vendor/react/http/src/Io/Transaction.php rename to vendor/react/http/src/Io/Transaction.php diff --git a/deps/vendor/react/http/src/Io/UploadedFile.php b/vendor/react/http/src/Io/UploadedFile.php similarity index 100% rename from deps/vendor/react/http/src/Io/UploadedFile.php rename to vendor/react/http/src/Io/UploadedFile.php diff --git a/deps/vendor/react/http/src/Message/Response.php b/vendor/react/http/src/Message/Response.php similarity index 100% rename from deps/vendor/react/http/src/Message/Response.php rename to vendor/react/http/src/Message/Response.php diff --git a/deps/vendor/react/http/src/Message/ResponseException.php b/vendor/react/http/src/Message/ResponseException.php similarity index 100% rename from deps/vendor/react/http/src/Message/ResponseException.php rename to vendor/react/http/src/Message/ResponseException.php diff --git a/deps/vendor/react/http/src/Message/ServerRequest.php b/vendor/react/http/src/Message/ServerRequest.php similarity index 100% rename from deps/vendor/react/http/src/Message/ServerRequest.php rename to vendor/react/http/src/Message/ServerRequest.php diff --git a/deps/vendor/react/http/src/Middleware/LimitConcurrentRequestsMiddleware.php b/vendor/react/http/src/Middleware/LimitConcurrentRequestsMiddleware.php similarity index 100% rename from deps/vendor/react/http/src/Middleware/LimitConcurrentRequestsMiddleware.php rename to vendor/react/http/src/Middleware/LimitConcurrentRequestsMiddleware.php diff --git a/deps/vendor/react/http/src/Middleware/RequestBodyBufferMiddleware.php b/vendor/react/http/src/Middleware/RequestBodyBufferMiddleware.php similarity index 100% rename from deps/vendor/react/http/src/Middleware/RequestBodyBufferMiddleware.php rename to vendor/react/http/src/Middleware/RequestBodyBufferMiddleware.php diff --git a/deps/vendor/react/http/src/Middleware/RequestBodyParserMiddleware.php b/vendor/react/http/src/Middleware/RequestBodyParserMiddleware.php similarity index 100% rename from deps/vendor/react/http/src/Middleware/RequestBodyParserMiddleware.php rename to vendor/react/http/src/Middleware/RequestBodyParserMiddleware.php diff --git a/deps/vendor/react/http/src/Middleware/StreamingRequestMiddleware.php b/vendor/react/http/src/Middleware/StreamingRequestMiddleware.php similarity index 100% rename from deps/vendor/react/http/src/Middleware/StreamingRequestMiddleware.php rename to vendor/react/http/src/Middleware/StreamingRequestMiddleware.php diff --git a/deps/vendor/react/http/src/Server.php b/vendor/react/http/src/Server.php similarity index 100% rename from deps/vendor/react/http/src/Server.php rename to vendor/react/http/src/Server.php diff --git a/deps/vendor/react/promise-stream/src/UnwrapReadableStream.php b/vendor/react/promise-stream/src/UnwrapReadableStream.php similarity index 100% rename from deps/vendor/react/promise-stream/src/UnwrapReadableStream.php rename to vendor/react/promise-stream/src/UnwrapReadableStream.php diff --git a/deps/vendor/react/promise-stream/src/UnwrapWritableStream.php b/vendor/react/promise-stream/src/UnwrapWritableStream.php similarity index 100% rename from deps/vendor/react/promise-stream/src/UnwrapWritableStream.php rename to vendor/react/promise-stream/src/UnwrapWritableStream.php diff --git a/deps/vendor/react/promise-stream/src/functions.php b/vendor/react/promise-stream/src/functions.php similarity index 100% rename from deps/vendor/react/promise-stream/src/functions.php rename to vendor/react/promise-stream/src/functions.php diff --git a/deps/vendor/react/promise-stream/src/functions_include.php b/vendor/react/promise-stream/src/functions_include.php similarity index 100% rename from deps/vendor/react/promise-stream/src/functions_include.php rename to vendor/react/promise-stream/src/functions_include.php diff --git a/deps/vendor/react/promise-timer/src/TimeoutException.php b/vendor/react/promise-timer/src/TimeoutException.php similarity index 100% rename from deps/vendor/react/promise-timer/src/TimeoutException.php rename to vendor/react/promise-timer/src/TimeoutException.php diff --git a/deps/vendor/react/promise-timer/src/functions.php b/vendor/react/promise-timer/src/functions.php similarity index 100% rename from deps/vendor/react/promise-timer/src/functions.php rename to vendor/react/promise-timer/src/functions.php diff --git a/deps/vendor/react/promise-timer/src/functions_include.php b/vendor/react/promise-timer/src/functions_include.php similarity index 100% rename from deps/vendor/react/promise-timer/src/functions_include.php rename to vendor/react/promise-timer/src/functions_include.php diff --git a/deps/vendor/react/promise/src/CancellablePromiseInterface.php b/vendor/react/promise/src/CancellablePromiseInterface.php similarity index 100% rename from deps/vendor/react/promise/src/CancellablePromiseInterface.php rename to vendor/react/promise/src/CancellablePromiseInterface.php diff --git a/deps/vendor/react/promise/src/CancellationQueue.php b/vendor/react/promise/src/CancellationQueue.php similarity index 100% rename from deps/vendor/react/promise/src/CancellationQueue.php rename to vendor/react/promise/src/CancellationQueue.php diff --git a/deps/vendor/react/promise/src/Deferred.php b/vendor/react/promise/src/Deferred.php similarity index 100% rename from deps/vendor/react/promise/src/Deferred.php rename to vendor/react/promise/src/Deferred.php diff --git a/deps/vendor/react/promise/src/Exception/LengthException.php b/vendor/react/promise/src/Exception/LengthException.php similarity index 100% rename from deps/vendor/react/promise/src/Exception/LengthException.php rename to vendor/react/promise/src/Exception/LengthException.php diff --git a/deps/vendor/react/promise/src/ExtendedPromiseInterface.php b/vendor/react/promise/src/ExtendedPromiseInterface.php similarity index 100% rename from deps/vendor/react/promise/src/ExtendedPromiseInterface.php rename to vendor/react/promise/src/ExtendedPromiseInterface.php diff --git a/deps/vendor/react/promise/src/FulfilledPromise.php b/vendor/react/promise/src/FulfilledPromise.php similarity index 100% rename from deps/vendor/react/promise/src/FulfilledPromise.php rename to vendor/react/promise/src/FulfilledPromise.php diff --git a/deps/vendor/react/promise/src/LazyPromise.php b/vendor/react/promise/src/LazyPromise.php similarity index 100% rename from deps/vendor/react/promise/src/LazyPromise.php rename to vendor/react/promise/src/LazyPromise.php diff --git a/deps/vendor/react/promise/src/Promise.php b/vendor/react/promise/src/Promise.php similarity index 100% rename from deps/vendor/react/promise/src/Promise.php rename to vendor/react/promise/src/Promise.php diff --git a/deps/vendor/react/promise/src/PromiseInterface.php b/vendor/react/promise/src/PromiseInterface.php similarity index 100% rename from deps/vendor/react/promise/src/PromiseInterface.php rename to vendor/react/promise/src/PromiseInterface.php diff --git a/deps/vendor/react/promise/src/PromisorInterface.php b/vendor/react/promise/src/PromisorInterface.php similarity index 100% rename from deps/vendor/react/promise/src/PromisorInterface.php rename to vendor/react/promise/src/PromisorInterface.php diff --git a/deps/vendor/react/promise/src/RejectedPromise.php b/vendor/react/promise/src/RejectedPromise.php similarity index 100% rename from deps/vendor/react/promise/src/RejectedPromise.php rename to vendor/react/promise/src/RejectedPromise.php diff --git a/deps/vendor/react/promise/src/UnhandledRejectionException.php b/vendor/react/promise/src/UnhandledRejectionException.php similarity index 100% rename from deps/vendor/react/promise/src/UnhandledRejectionException.php rename to vendor/react/promise/src/UnhandledRejectionException.php diff --git a/deps/vendor/react/promise/src/functions.php b/vendor/react/promise/src/functions.php similarity index 100% rename from deps/vendor/react/promise/src/functions.php rename to vendor/react/promise/src/functions.php diff --git a/deps/vendor/react/promise/src/functions_include.php b/vendor/react/promise/src/functions_include.php similarity index 100% rename from deps/vendor/react/promise/src/functions_include.php rename to vendor/react/promise/src/functions_include.php diff --git a/deps/vendor/react/socket/src/Connection.php b/vendor/react/socket/src/Connection.php similarity index 100% rename from deps/vendor/react/socket/src/Connection.php rename to vendor/react/socket/src/Connection.php diff --git a/deps/vendor/react/socket/src/ConnectionInterface.php b/vendor/react/socket/src/ConnectionInterface.php similarity index 100% rename from deps/vendor/react/socket/src/ConnectionInterface.php rename to vendor/react/socket/src/ConnectionInterface.php diff --git a/deps/vendor/react/socket/src/Connector.php b/vendor/react/socket/src/Connector.php similarity index 100% rename from deps/vendor/react/socket/src/Connector.php rename to vendor/react/socket/src/Connector.php diff --git a/deps/vendor/react/socket/src/ConnectorInterface.php b/vendor/react/socket/src/ConnectorInterface.php similarity index 100% rename from deps/vendor/react/socket/src/ConnectorInterface.php rename to vendor/react/socket/src/ConnectorInterface.php diff --git a/deps/vendor/react/socket/src/DnsConnector.php b/vendor/react/socket/src/DnsConnector.php similarity index 100% rename from deps/vendor/react/socket/src/DnsConnector.php rename to vendor/react/socket/src/DnsConnector.php diff --git a/deps/vendor/react/socket/src/FdServer.php b/vendor/react/socket/src/FdServer.php similarity index 100% rename from deps/vendor/react/socket/src/FdServer.php rename to vendor/react/socket/src/FdServer.php diff --git a/deps/vendor/react/socket/src/FixedUriConnector.php b/vendor/react/socket/src/FixedUriConnector.php similarity index 100% rename from deps/vendor/react/socket/src/FixedUriConnector.php rename to vendor/react/socket/src/FixedUriConnector.php diff --git a/deps/vendor/react/socket/src/HappyEyeBallsConnectionBuilder.php b/vendor/react/socket/src/HappyEyeBallsConnectionBuilder.php similarity index 100% rename from deps/vendor/react/socket/src/HappyEyeBallsConnectionBuilder.php rename to vendor/react/socket/src/HappyEyeBallsConnectionBuilder.php diff --git a/deps/vendor/react/socket/src/HappyEyeBallsConnector.php b/vendor/react/socket/src/HappyEyeBallsConnector.php similarity index 100% rename from deps/vendor/react/socket/src/HappyEyeBallsConnector.php rename to vendor/react/socket/src/HappyEyeBallsConnector.php diff --git a/deps/vendor/react/socket/src/LimitingServer.php b/vendor/react/socket/src/LimitingServer.php similarity index 100% rename from deps/vendor/react/socket/src/LimitingServer.php rename to vendor/react/socket/src/LimitingServer.php diff --git a/deps/vendor/react/socket/src/SecureConnector.php b/vendor/react/socket/src/SecureConnector.php similarity index 100% rename from deps/vendor/react/socket/src/SecureConnector.php rename to vendor/react/socket/src/SecureConnector.php diff --git a/deps/vendor/react/socket/src/SecureServer.php b/vendor/react/socket/src/SecureServer.php similarity index 100% rename from deps/vendor/react/socket/src/SecureServer.php rename to vendor/react/socket/src/SecureServer.php diff --git a/deps/vendor/react/socket/src/Server.php b/vendor/react/socket/src/Server.php similarity index 100% rename from deps/vendor/react/socket/src/Server.php rename to vendor/react/socket/src/Server.php diff --git a/deps/vendor/react/socket/src/ServerInterface.php b/vendor/react/socket/src/ServerInterface.php similarity index 100% rename from deps/vendor/react/socket/src/ServerInterface.php rename to vendor/react/socket/src/ServerInterface.php diff --git a/deps/vendor/react/socket/src/SocketServer.php b/vendor/react/socket/src/SocketServer.php similarity index 100% rename from deps/vendor/react/socket/src/SocketServer.php rename to vendor/react/socket/src/SocketServer.php diff --git a/deps/vendor/react/socket/src/StreamEncryption.php b/vendor/react/socket/src/StreamEncryption.php similarity index 100% rename from deps/vendor/react/socket/src/StreamEncryption.php rename to vendor/react/socket/src/StreamEncryption.php diff --git a/deps/vendor/react/socket/src/TcpConnector.php b/vendor/react/socket/src/TcpConnector.php similarity index 100% rename from deps/vendor/react/socket/src/TcpConnector.php rename to vendor/react/socket/src/TcpConnector.php diff --git a/deps/vendor/react/socket/src/TcpServer.php b/vendor/react/socket/src/TcpServer.php similarity index 100% rename from deps/vendor/react/socket/src/TcpServer.php rename to vendor/react/socket/src/TcpServer.php diff --git a/deps/vendor/react/socket/src/TimeoutConnector.php b/vendor/react/socket/src/TimeoutConnector.php similarity index 100% rename from deps/vendor/react/socket/src/TimeoutConnector.php rename to vendor/react/socket/src/TimeoutConnector.php diff --git a/deps/vendor/react/socket/src/UnixConnector.php b/vendor/react/socket/src/UnixConnector.php similarity index 100% rename from deps/vendor/react/socket/src/UnixConnector.php rename to vendor/react/socket/src/UnixConnector.php diff --git a/deps/vendor/react/socket/src/UnixServer.php b/vendor/react/socket/src/UnixServer.php similarity index 100% rename from deps/vendor/react/socket/src/UnixServer.php rename to vendor/react/socket/src/UnixServer.php diff --git a/deps/vendor/react/stream/src/CompositeStream.php b/vendor/react/stream/src/CompositeStream.php similarity index 100% rename from deps/vendor/react/stream/src/CompositeStream.php rename to vendor/react/stream/src/CompositeStream.php diff --git a/deps/vendor/react/stream/src/DuplexResourceStream.php b/vendor/react/stream/src/DuplexResourceStream.php similarity index 100% rename from deps/vendor/react/stream/src/DuplexResourceStream.php rename to vendor/react/stream/src/DuplexResourceStream.php diff --git a/deps/vendor/react/stream/src/DuplexStreamInterface.php b/vendor/react/stream/src/DuplexStreamInterface.php similarity index 100% rename from deps/vendor/react/stream/src/DuplexStreamInterface.php rename to vendor/react/stream/src/DuplexStreamInterface.php diff --git a/deps/vendor/react/stream/src/ReadableResourceStream.php b/vendor/react/stream/src/ReadableResourceStream.php similarity index 100% rename from deps/vendor/react/stream/src/ReadableResourceStream.php rename to vendor/react/stream/src/ReadableResourceStream.php diff --git a/deps/vendor/react/stream/src/ReadableStreamInterface.php b/vendor/react/stream/src/ReadableStreamInterface.php similarity index 100% rename from deps/vendor/react/stream/src/ReadableStreamInterface.php rename to vendor/react/stream/src/ReadableStreamInterface.php diff --git a/deps/vendor/react/stream/src/ThroughStream.php b/vendor/react/stream/src/ThroughStream.php similarity index 100% rename from deps/vendor/react/stream/src/ThroughStream.php rename to vendor/react/stream/src/ThroughStream.php diff --git a/deps/vendor/react/stream/src/Util.php b/vendor/react/stream/src/Util.php similarity index 100% rename from deps/vendor/react/stream/src/Util.php rename to vendor/react/stream/src/Util.php diff --git a/deps/vendor/react/stream/src/WritableResourceStream.php b/vendor/react/stream/src/WritableResourceStream.php similarity index 100% rename from deps/vendor/react/stream/src/WritableResourceStream.php rename to vendor/react/stream/src/WritableResourceStream.php diff --git a/deps/vendor/react/stream/src/WritableStreamInterface.php b/vendor/react/stream/src/WritableStreamInterface.php similarity index 100% rename from deps/vendor/react/stream/src/WritableStreamInterface.php rename to vendor/react/stream/src/WritableStreamInterface.php diff --git a/deps/vendor/ringcentral/psr7/src/AppendStream.php b/vendor/ringcentral/psr7/src/AppendStream.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/AppendStream.php rename to vendor/ringcentral/psr7/src/AppendStream.php diff --git a/deps/vendor/ringcentral/psr7/src/BufferStream.php b/vendor/ringcentral/psr7/src/BufferStream.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/BufferStream.php rename to vendor/ringcentral/psr7/src/BufferStream.php diff --git a/deps/vendor/ringcentral/psr7/src/CachingStream.php b/vendor/ringcentral/psr7/src/CachingStream.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/CachingStream.php rename to vendor/ringcentral/psr7/src/CachingStream.php diff --git a/deps/vendor/ringcentral/psr7/src/DroppingStream.php b/vendor/ringcentral/psr7/src/DroppingStream.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/DroppingStream.php rename to vendor/ringcentral/psr7/src/DroppingStream.php diff --git a/deps/vendor/ringcentral/psr7/src/FnStream.php b/vendor/ringcentral/psr7/src/FnStream.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/FnStream.php rename to vendor/ringcentral/psr7/src/FnStream.php diff --git a/deps/vendor/ringcentral/psr7/src/InflateStream.php b/vendor/ringcentral/psr7/src/InflateStream.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/InflateStream.php rename to vendor/ringcentral/psr7/src/InflateStream.php diff --git a/deps/vendor/ringcentral/psr7/src/LazyOpenStream.php b/vendor/ringcentral/psr7/src/LazyOpenStream.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/LazyOpenStream.php rename to vendor/ringcentral/psr7/src/LazyOpenStream.php diff --git a/deps/vendor/ringcentral/psr7/src/LimitStream.php b/vendor/ringcentral/psr7/src/LimitStream.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/LimitStream.php rename to vendor/ringcentral/psr7/src/LimitStream.php diff --git a/deps/vendor/ringcentral/psr7/src/MessageTrait.php b/vendor/ringcentral/psr7/src/MessageTrait.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/MessageTrait.php rename to vendor/ringcentral/psr7/src/MessageTrait.php diff --git a/deps/vendor/ringcentral/psr7/src/MultipartStream.php b/vendor/ringcentral/psr7/src/MultipartStream.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/MultipartStream.php rename to vendor/ringcentral/psr7/src/MultipartStream.php diff --git a/deps/vendor/ringcentral/psr7/src/NoSeekStream.php b/vendor/ringcentral/psr7/src/NoSeekStream.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/NoSeekStream.php rename to vendor/ringcentral/psr7/src/NoSeekStream.php diff --git a/deps/vendor/ringcentral/psr7/src/PumpStream.php b/vendor/ringcentral/psr7/src/PumpStream.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/PumpStream.php rename to vendor/ringcentral/psr7/src/PumpStream.php diff --git a/deps/vendor/ringcentral/psr7/src/Request.php b/vendor/ringcentral/psr7/src/Request.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/Request.php rename to vendor/ringcentral/psr7/src/Request.php diff --git a/deps/vendor/ringcentral/psr7/src/Response.php b/vendor/ringcentral/psr7/src/Response.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/Response.php rename to vendor/ringcentral/psr7/src/Response.php diff --git a/deps/vendor/ringcentral/psr7/src/ServerRequest.php b/vendor/ringcentral/psr7/src/ServerRequest.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/ServerRequest.php rename to vendor/ringcentral/psr7/src/ServerRequest.php diff --git a/deps/vendor/ringcentral/psr7/src/Stream.php b/vendor/ringcentral/psr7/src/Stream.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/Stream.php rename to vendor/ringcentral/psr7/src/Stream.php diff --git a/deps/vendor/ringcentral/psr7/src/StreamDecoratorTrait.php b/vendor/ringcentral/psr7/src/StreamDecoratorTrait.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/StreamDecoratorTrait.php rename to vendor/ringcentral/psr7/src/StreamDecoratorTrait.php diff --git a/deps/vendor/ringcentral/psr7/src/StreamWrapper.php b/vendor/ringcentral/psr7/src/StreamWrapper.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/StreamWrapper.php rename to vendor/ringcentral/psr7/src/StreamWrapper.php diff --git a/deps/vendor/ringcentral/psr7/src/Uri.php b/vendor/ringcentral/psr7/src/Uri.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/Uri.php rename to vendor/ringcentral/psr7/src/Uri.php diff --git a/deps/vendor/ringcentral/psr7/src/functions.php b/vendor/ringcentral/psr7/src/functions.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/functions.php rename to vendor/ringcentral/psr7/src/functions.php diff --git a/deps/vendor/ringcentral/psr7/src/functions_include.php b/vendor/ringcentral/psr7/src/functions_include.php similarity index 100% rename from deps/vendor/ringcentral/psr7/src/functions_include.php rename to vendor/ringcentral/psr7/src/functions_include.php diff --git a/deps/vendor/symfony/console/Application.php b/vendor/symfony/console/Application.php similarity index 100% rename from deps/vendor/symfony/console/Application.php rename to vendor/symfony/console/Application.php diff --git a/deps/vendor/symfony/console/Attribute/AsCommand.php b/vendor/symfony/console/Attribute/AsCommand.php similarity index 100% rename from deps/vendor/symfony/console/Attribute/AsCommand.php rename to vendor/symfony/console/Attribute/AsCommand.php diff --git a/deps/vendor/symfony/console/CI/GithubActionReporter.php b/vendor/symfony/console/CI/GithubActionReporter.php similarity index 100% rename from deps/vendor/symfony/console/CI/GithubActionReporter.php rename to vendor/symfony/console/CI/GithubActionReporter.php diff --git a/deps/vendor/symfony/console/Color.php b/vendor/symfony/console/Color.php similarity index 100% rename from deps/vendor/symfony/console/Color.php rename to vendor/symfony/console/Color.php diff --git a/deps/vendor/symfony/console/Command/Command.php b/vendor/symfony/console/Command/Command.php similarity index 100% rename from deps/vendor/symfony/console/Command/Command.php rename to vendor/symfony/console/Command/Command.php diff --git a/deps/vendor/symfony/console/Command/CompleteCommand.php b/vendor/symfony/console/Command/CompleteCommand.php similarity index 100% rename from deps/vendor/symfony/console/Command/CompleteCommand.php rename to vendor/symfony/console/Command/CompleteCommand.php diff --git a/deps/vendor/symfony/console/Command/DumpCompletionCommand.php b/vendor/symfony/console/Command/DumpCompletionCommand.php similarity index 100% rename from deps/vendor/symfony/console/Command/DumpCompletionCommand.php rename to vendor/symfony/console/Command/DumpCompletionCommand.php diff --git a/deps/vendor/symfony/console/Command/HelpCommand.php b/vendor/symfony/console/Command/HelpCommand.php similarity index 100% rename from deps/vendor/symfony/console/Command/HelpCommand.php rename to vendor/symfony/console/Command/HelpCommand.php diff --git a/deps/vendor/symfony/console/Command/LazyCommand.php b/vendor/symfony/console/Command/LazyCommand.php similarity index 100% rename from deps/vendor/symfony/console/Command/LazyCommand.php rename to vendor/symfony/console/Command/LazyCommand.php diff --git a/deps/vendor/symfony/console/Command/ListCommand.php b/vendor/symfony/console/Command/ListCommand.php similarity index 100% rename from deps/vendor/symfony/console/Command/ListCommand.php rename to vendor/symfony/console/Command/ListCommand.php diff --git a/deps/vendor/symfony/console/Command/LockableTrait.php b/vendor/symfony/console/Command/LockableTrait.php similarity index 100% rename from deps/vendor/symfony/console/Command/LockableTrait.php rename to vendor/symfony/console/Command/LockableTrait.php diff --git a/deps/vendor/symfony/console/Command/SignalableCommandInterface.php b/vendor/symfony/console/Command/SignalableCommandInterface.php similarity index 100% rename from deps/vendor/symfony/console/Command/SignalableCommandInterface.php rename to vendor/symfony/console/Command/SignalableCommandInterface.php diff --git a/deps/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php b/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php similarity index 100% rename from deps/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php rename to vendor/symfony/console/CommandLoader/CommandLoaderInterface.php diff --git a/deps/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php b/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php similarity index 100% rename from deps/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php rename to vendor/symfony/console/CommandLoader/ContainerCommandLoader.php diff --git a/deps/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php b/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php similarity index 100% rename from deps/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php rename to vendor/symfony/console/CommandLoader/FactoryCommandLoader.php diff --git a/deps/vendor/symfony/console/Completion/CompletionInput.php b/vendor/symfony/console/Completion/CompletionInput.php similarity index 100% rename from deps/vendor/symfony/console/Completion/CompletionInput.php rename to vendor/symfony/console/Completion/CompletionInput.php diff --git a/deps/vendor/symfony/console/Completion/CompletionSuggestions.php b/vendor/symfony/console/Completion/CompletionSuggestions.php similarity index 100% rename from deps/vendor/symfony/console/Completion/CompletionSuggestions.php rename to vendor/symfony/console/Completion/CompletionSuggestions.php diff --git a/deps/vendor/symfony/console/Completion/Output/BashCompletionOutput.php b/vendor/symfony/console/Completion/Output/BashCompletionOutput.php similarity index 100% rename from deps/vendor/symfony/console/Completion/Output/BashCompletionOutput.php rename to vendor/symfony/console/Completion/Output/BashCompletionOutput.php diff --git a/deps/vendor/symfony/console/Completion/Output/CompletionOutputInterface.php b/vendor/symfony/console/Completion/Output/CompletionOutputInterface.php similarity index 100% rename from deps/vendor/symfony/console/Completion/Output/CompletionOutputInterface.php rename to vendor/symfony/console/Completion/Output/CompletionOutputInterface.php diff --git a/deps/vendor/symfony/console/Completion/Suggestion.php b/vendor/symfony/console/Completion/Suggestion.php similarity index 100% rename from deps/vendor/symfony/console/Completion/Suggestion.php rename to vendor/symfony/console/Completion/Suggestion.php diff --git a/deps/vendor/symfony/console/ConsoleEvents.php b/vendor/symfony/console/ConsoleEvents.php similarity index 100% rename from deps/vendor/symfony/console/ConsoleEvents.php rename to vendor/symfony/console/ConsoleEvents.php diff --git a/deps/vendor/symfony/console/Cursor.php b/vendor/symfony/console/Cursor.php similarity index 100% rename from deps/vendor/symfony/console/Cursor.php rename to vendor/symfony/console/Cursor.php diff --git a/deps/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php b/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php similarity index 100% rename from deps/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php rename to vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php diff --git a/deps/vendor/symfony/console/Descriptor/ApplicationDescription.php b/vendor/symfony/console/Descriptor/ApplicationDescription.php similarity index 100% rename from deps/vendor/symfony/console/Descriptor/ApplicationDescription.php rename to vendor/symfony/console/Descriptor/ApplicationDescription.php diff --git a/deps/vendor/symfony/console/Descriptor/Descriptor.php b/vendor/symfony/console/Descriptor/Descriptor.php similarity index 100% rename from deps/vendor/symfony/console/Descriptor/Descriptor.php rename to vendor/symfony/console/Descriptor/Descriptor.php diff --git a/deps/vendor/symfony/console/Descriptor/DescriptorInterface.php b/vendor/symfony/console/Descriptor/DescriptorInterface.php similarity index 100% rename from deps/vendor/symfony/console/Descriptor/DescriptorInterface.php rename to vendor/symfony/console/Descriptor/DescriptorInterface.php diff --git a/deps/vendor/symfony/console/Descriptor/JsonDescriptor.php b/vendor/symfony/console/Descriptor/JsonDescriptor.php similarity index 100% rename from deps/vendor/symfony/console/Descriptor/JsonDescriptor.php rename to vendor/symfony/console/Descriptor/JsonDescriptor.php diff --git a/deps/vendor/symfony/console/Descriptor/MarkdownDescriptor.php b/vendor/symfony/console/Descriptor/MarkdownDescriptor.php similarity index 100% rename from deps/vendor/symfony/console/Descriptor/MarkdownDescriptor.php rename to vendor/symfony/console/Descriptor/MarkdownDescriptor.php diff --git a/deps/vendor/symfony/console/Descriptor/TextDescriptor.php b/vendor/symfony/console/Descriptor/TextDescriptor.php similarity index 100% rename from deps/vendor/symfony/console/Descriptor/TextDescriptor.php rename to vendor/symfony/console/Descriptor/TextDescriptor.php diff --git a/deps/vendor/symfony/console/Descriptor/XmlDescriptor.php b/vendor/symfony/console/Descriptor/XmlDescriptor.php similarity index 100% rename from deps/vendor/symfony/console/Descriptor/XmlDescriptor.php rename to vendor/symfony/console/Descriptor/XmlDescriptor.php diff --git a/deps/vendor/symfony/console/Event/ConsoleCommandEvent.php b/vendor/symfony/console/Event/ConsoleCommandEvent.php similarity index 100% rename from deps/vendor/symfony/console/Event/ConsoleCommandEvent.php rename to vendor/symfony/console/Event/ConsoleCommandEvent.php diff --git a/deps/vendor/symfony/console/Event/ConsoleErrorEvent.php b/vendor/symfony/console/Event/ConsoleErrorEvent.php similarity index 100% rename from deps/vendor/symfony/console/Event/ConsoleErrorEvent.php rename to vendor/symfony/console/Event/ConsoleErrorEvent.php diff --git a/deps/vendor/symfony/console/Event/ConsoleEvent.php b/vendor/symfony/console/Event/ConsoleEvent.php similarity index 100% rename from deps/vendor/symfony/console/Event/ConsoleEvent.php rename to vendor/symfony/console/Event/ConsoleEvent.php diff --git a/deps/vendor/symfony/console/Event/ConsoleSignalEvent.php b/vendor/symfony/console/Event/ConsoleSignalEvent.php similarity index 100% rename from deps/vendor/symfony/console/Event/ConsoleSignalEvent.php rename to vendor/symfony/console/Event/ConsoleSignalEvent.php diff --git a/deps/vendor/symfony/console/Event/ConsoleTerminateEvent.php b/vendor/symfony/console/Event/ConsoleTerminateEvent.php similarity index 100% rename from deps/vendor/symfony/console/Event/ConsoleTerminateEvent.php rename to vendor/symfony/console/Event/ConsoleTerminateEvent.php diff --git a/deps/vendor/symfony/console/EventListener/ErrorListener.php b/vendor/symfony/console/EventListener/ErrorListener.php similarity index 100% rename from deps/vendor/symfony/console/EventListener/ErrorListener.php rename to vendor/symfony/console/EventListener/ErrorListener.php diff --git a/deps/vendor/symfony/console/Exception/CommandNotFoundException.php b/vendor/symfony/console/Exception/CommandNotFoundException.php similarity index 100% rename from deps/vendor/symfony/console/Exception/CommandNotFoundException.php rename to vendor/symfony/console/Exception/CommandNotFoundException.php diff --git a/deps/vendor/symfony/console/Exception/ExceptionInterface.php b/vendor/symfony/console/Exception/ExceptionInterface.php similarity index 100% rename from deps/vendor/symfony/console/Exception/ExceptionInterface.php rename to vendor/symfony/console/Exception/ExceptionInterface.php diff --git a/deps/vendor/symfony/console/Exception/InvalidArgumentException.php b/vendor/symfony/console/Exception/InvalidArgumentException.php similarity index 100% rename from deps/vendor/symfony/console/Exception/InvalidArgumentException.php rename to vendor/symfony/console/Exception/InvalidArgumentException.php diff --git a/deps/vendor/symfony/console/Exception/InvalidOptionException.php b/vendor/symfony/console/Exception/InvalidOptionException.php similarity index 100% rename from deps/vendor/symfony/console/Exception/InvalidOptionException.php rename to vendor/symfony/console/Exception/InvalidOptionException.php diff --git a/deps/vendor/symfony/console/Exception/LogicException.php b/vendor/symfony/console/Exception/LogicException.php similarity index 100% rename from deps/vendor/symfony/console/Exception/LogicException.php rename to vendor/symfony/console/Exception/LogicException.php diff --git a/deps/vendor/symfony/console/Exception/MissingInputException.php b/vendor/symfony/console/Exception/MissingInputException.php similarity index 100% rename from deps/vendor/symfony/console/Exception/MissingInputException.php rename to vendor/symfony/console/Exception/MissingInputException.php diff --git a/deps/vendor/symfony/console/Exception/NamespaceNotFoundException.php b/vendor/symfony/console/Exception/NamespaceNotFoundException.php similarity index 100% rename from deps/vendor/symfony/console/Exception/NamespaceNotFoundException.php rename to vendor/symfony/console/Exception/NamespaceNotFoundException.php diff --git a/deps/vendor/symfony/console/Exception/RuntimeException.php b/vendor/symfony/console/Exception/RuntimeException.php similarity index 100% rename from deps/vendor/symfony/console/Exception/RuntimeException.php rename to vendor/symfony/console/Exception/RuntimeException.php diff --git a/deps/vendor/symfony/console/Formatter/NullOutputFormatter.php b/vendor/symfony/console/Formatter/NullOutputFormatter.php similarity index 100% rename from deps/vendor/symfony/console/Formatter/NullOutputFormatter.php rename to vendor/symfony/console/Formatter/NullOutputFormatter.php diff --git a/deps/vendor/symfony/console/Formatter/NullOutputFormatterStyle.php b/vendor/symfony/console/Formatter/NullOutputFormatterStyle.php similarity index 100% rename from deps/vendor/symfony/console/Formatter/NullOutputFormatterStyle.php rename to vendor/symfony/console/Formatter/NullOutputFormatterStyle.php diff --git a/deps/vendor/symfony/console/Formatter/OutputFormatter.php b/vendor/symfony/console/Formatter/OutputFormatter.php similarity index 100% rename from deps/vendor/symfony/console/Formatter/OutputFormatter.php rename to vendor/symfony/console/Formatter/OutputFormatter.php diff --git a/deps/vendor/symfony/console/Formatter/OutputFormatterInterface.php b/vendor/symfony/console/Formatter/OutputFormatterInterface.php similarity index 100% rename from deps/vendor/symfony/console/Formatter/OutputFormatterInterface.php rename to vendor/symfony/console/Formatter/OutputFormatterInterface.php diff --git a/deps/vendor/symfony/console/Formatter/OutputFormatterStyle.php b/vendor/symfony/console/Formatter/OutputFormatterStyle.php similarity index 100% rename from deps/vendor/symfony/console/Formatter/OutputFormatterStyle.php rename to vendor/symfony/console/Formatter/OutputFormatterStyle.php diff --git a/deps/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php b/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php similarity index 100% rename from deps/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php rename to vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php diff --git a/deps/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php b/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php similarity index 100% rename from deps/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php rename to vendor/symfony/console/Formatter/OutputFormatterStyleStack.php diff --git a/deps/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php b/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php similarity index 100% rename from deps/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php rename to vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php diff --git a/deps/vendor/symfony/console/Helper/DebugFormatterHelper.php b/vendor/symfony/console/Helper/DebugFormatterHelper.php similarity index 100% rename from deps/vendor/symfony/console/Helper/DebugFormatterHelper.php rename to vendor/symfony/console/Helper/DebugFormatterHelper.php diff --git a/deps/vendor/symfony/console/Helper/DescriptorHelper.php b/vendor/symfony/console/Helper/DescriptorHelper.php similarity index 100% rename from deps/vendor/symfony/console/Helper/DescriptorHelper.php rename to vendor/symfony/console/Helper/DescriptorHelper.php diff --git a/deps/vendor/symfony/console/Helper/Dumper.php b/vendor/symfony/console/Helper/Dumper.php similarity index 100% rename from deps/vendor/symfony/console/Helper/Dumper.php rename to vendor/symfony/console/Helper/Dumper.php diff --git a/deps/vendor/symfony/console/Helper/FormatterHelper.php b/vendor/symfony/console/Helper/FormatterHelper.php similarity index 100% rename from deps/vendor/symfony/console/Helper/FormatterHelper.php rename to vendor/symfony/console/Helper/FormatterHelper.php diff --git a/deps/vendor/symfony/console/Helper/Helper.php b/vendor/symfony/console/Helper/Helper.php similarity index 100% rename from deps/vendor/symfony/console/Helper/Helper.php rename to vendor/symfony/console/Helper/Helper.php diff --git a/deps/vendor/symfony/console/Helper/HelperInterface.php b/vendor/symfony/console/Helper/HelperInterface.php similarity index 100% rename from deps/vendor/symfony/console/Helper/HelperInterface.php rename to vendor/symfony/console/Helper/HelperInterface.php diff --git a/deps/vendor/symfony/console/Helper/HelperSet.php b/vendor/symfony/console/Helper/HelperSet.php similarity index 100% rename from deps/vendor/symfony/console/Helper/HelperSet.php rename to vendor/symfony/console/Helper/HelperSet.php diff --git a/deps/vendor/symfony/console/Helper/InputAwareHelper.php b/vendor/symfony/console/Helper/InputAwareHelper.php similarity index 100% rename from deps/vendor/symfony/console/Helper/InputAwareHelper.php rename to vendor/symfony/console/Helper/InputAwareHelper.php diff --git a/deps/vendor/symfony/console/Helper/ProcessHelper.php b/vendor/symfony/console/Helper/ProcessHelper.php similarity index 100% rename from deps/vendor/symfony/console/Helper/ProcessHelper.php rename to vendor/symfony/console/Helper/ProcessHelper.php diff --git a/deps/vendor/symfony/console/Helper/ProgressBar.php b/vendor/symfony/console/Helper/ProgressBar.php similarity index 100% rename from deps/vendor/symfony/console/Helper/ProgressBar.php rename to vendor/symfony/console/Helper/ProgressBar.php diff --git a/deps/vendor/symfony/console/Helper/ProgressIndicator.php b/vendor/symfony/console/Helper/ProgressIndicator.php similarity index 100% rename from deps/vendor/symfony/console/Helper/ProgressIndicator.php rename to vendor/symfony/console/Helper/ProgressIndicator.php diff --git a/deps/vendor/symfony/console/Helper/QuestionHelper.php b/vendor/symfony/console/Helper/QuestionHelper.php similarity index 100% rename from deps/vendor/symfony/console/Helper/QuestionHelper.php rename to vendor/symfony/console/Helper/QuestionHelper.php diff --git a/deps/vendor/symfony/console/Helper/SymfonyQuestionHelper.php b/vendor/symfony/console/Helper/SymfonyQuestionHelper.php similarity index 100% rename from deps/vendor/symfony/console/Helper/SymfonyQuestionHelper.php rename to vendor/symfony/console/Helper/SymfonyQuestionHelper.php diff --git a/deps/vendor/symfony/console/Helper/Table.php b/vendor/symfony/console/Helper/Table.php similarity index 100% rename from deps/vendor/symfony/console/Helper/Table.php rename to vendor/symfony/console/Helper/Table.php diff --git a/deps/vendor/symfony/console/Helper/TableCell.php b/vendor/symfony/console/Helper/TableCell.php similarity index 100% rename from deps/vendor/symfony/console/Helper/TableCell.php rename to vendor/symfony/console/Helper/TableCell.php diff --git a/deps/vendor/symfony/console/Helper/TableCellStyle.php b/vendor/symfony/console/Helper/TableCellStyle.php similarity index 100% rename from deps/vendor/symfony/console/Helper/TableCellStyle.php rename to vendor/symfony/console/Helper/TableCellStyle.php diff --git a/deps/vendor/symfony/console/Helper/TableRows.php b/vendor/symfony/console/Helper/TableRows.php similarity index 100% rename from deps/vendor/symfony/console/Helper/TableRows.php rename to vendor/symfony/console/Helper/TableRows.php diff --git a/deps/vendor/symfony/console/Helper/TableSeparator.php b/vendor/symfony/console/Helper/TableSeparator.php similarity index 100% rename from deps/vendor/symfony/console/Helper/TableSeparator.php rename to vendor/symfony/console/Helper/TableSeparator.php diff --git a/deps/vendor/symfony/console/Helper/TableStyle.php b/vendor/symfony/console/Helper/TableStyle.php similarity index 100% rename from deps/vendor/symfony/console/Helper/TableStyle.php rename to vendor/symfony/console/Helper/TableStyle.php diff --git a/deps/vendor/symfony/console/Input/ArgvInput.php b/vendor/symfony/console/Input/ArgvInput.php similarity index 100% rename from deps/vendor/symfony/console/Input/ArgvInput.php rename to vendor/symfony/console/Input/ArgvInput.php diff --git a/deps/vendor/symfony/console/Input/ArrayInput.php b/vendor/symfony/console/Input/ArrayInput.php similarity index 100% rename from deps/vendor/symfony/console/Input/ArrayInput.php rename to vendor/symfony/console/Input/ArrayInput.php diff --git a/deps/vendor/symfony/console/Input/Input.php b/vendor/symfony/console/Input/Input.php similarity index 100% rename from deps/vendor/symfony/console/Input/Input.php rename to vendor/symfony/console/Input/Input.php diff --git a/deps/vendor/symfony/console/Input/InputArgument.php b/vendor/symfony/console/Input/InputArgument.php similarity index 100% rename from deps/vendor/symfony/console/Input/InputArgument.php rename to vendor/symfony/console/Input/InputArgument.php diff --git a/deps/vendor/symfony/console/Input/InputAwareInterface.php b/vendor/symfony/console/Input/InputAwareInterface.php similarity index 100% rename from deps/vendor/symfony/console/Input/InputAwareInterface.php rename to vendor/symfony/console/Input/InputAwareInterface.php diff --git a/deps/vendor/symfony/console/Input/InputDefinition.php b/vendor/symfony/console/Input/InputDefinition.php similarity index 100% rename from deps/vendor/symfony/console/Input/InputDefinition.php rename to vendor/symfony/console/Input/InputDefinition.php diff --git a/deps/vendor/symfony/console/Input/InputInterface.php b/vendor/symfony/console/Input/InputInterface.php similarity index 100% rename from deps/vendor/symfony/console/Input/InputInterface.php rename to vendor/symfony/console/Input/InputInterface.php diff --git a/deps/vendor/symfony/console/Input/InputOption.php b/vendor/symfony/console/Input/InputOption.php similarity index 100% rename from deps/vendor/symfony/console/Input/InputOption.php rename to vendor/symfony/console/Input/InputOption.php diff --git a/deps/vendor/symfony/console/Input/StreamableInputInterface.php b/vendor/symfony/console/Input/StreamableInputInterface.php similarity index 100% rename from deps/vendor/symfony/console/Input/StreamableInputInterface.php rename to vendor/symfony/console/Input/StreamableInputInterface.php diff --git a/deps/vendor/symfony/console/Input/StringInput.php b/vendor/symfony/console/Input/StringInput.php similarity index 100% rename from deps/vendor/symfony/console/Input/StringInput.php rename to vendor/symfony/console/Input/StringInput.php diff --git a/deps/vendor/symfony/console/Logger/ConsoleLogger.php b/vendor/symfony/console/Logger/ConsoleLogger.php similarity index 100% rename from deps/vendor/symfony/console/Logger/ConsoleLogger.php rename to vendor/symfony/console/Logger/ConsoleLogger.php diff --git a/deps/vendor/symfony/console/Output/BufferedOutput.php b/vendor/symfony/console/Output/BufferedOutput.php similarity index 100% rename from deps/vendor/symfony/console/Output/BufferedOutput.php rename to vendor/symfony/console/Output/BufferedOutput.php diff --git a/deps/vendor/symfony/console/Output/ConsoleOutput.php b/vendor/symfony/console/Output/ConsoleOutput.php similarity index 100% rename from deps/vendor/symfony/console/Output/ConsoleOutput.php rename to vendor/symfony/console/Output/ConsoleOutput.php diff --git a/deps/vendor/symfony/console/Output/ConsoleOutputInterface.php b/vendor/symfony/console/Output/ConsoleOutputInterface.php similarity index 100% rename from deps/vendor/symfony/console/Output/ConsoleOutputInterface.php rename to vendor/symfony/console/Output/ConsoleOutputInterface.php diff --git a/deps/vendor/symfony/console/Output/ConsoleSectionOutput.php b/vendor/symfony/console/Output/ConsoleSectionOutput.php similarity index 100% rename from deps/vendor/symfony/console/Output/ConsoleSectionOutput.php rename to vendor/symfony/console/Output/ConsoleSectionOutput.php diff --git a/deps/vendor/symfony/console/Output/NullOutput.php b/vendor/symfony/console/Output/NullOutput.php similarity index 100% rename from deps/vendor/symfony/console/Output/NullOutput.php rename to vendor/symfony/console/Output/NullOutput.php diff --git a/deps/vendor/symfony/console/Output/Output.php b/vendor/symfony/console/Output/Output.php similarity index 100% rename from deps/vendor/symfony/console/Output/Output.php rename to vendor/symfony/console/Output/Output.php diff --git a/deps/vendor/symfony/console/Output/OutputInterface.php b/vendor/symfony/console/Output/OutputInterface.php similarity index 100% rename from deps/vendor/symfony/console/Output/OutputInterface.php rename to vendor/symfony/console/Output/OutputInterface.php diff --git a/deps/vendor/symfony/console/Output/StreamOutput.php b/vendor/symfony/console/Output/StreamOutput.php similarity index 100% rename from deps/vendor/symfony/console/Output/StreamOutput.php rename to vendor/symfony/console/Output/StreamOutput.php diff --git a/deps/vendor/symfony/console/Output/TrimmedBufferOutput.php b/vendor/symfony/console/Output/TrimmedBufferOutput.php similarity index 100% rename from deps/vendor/symfony/console/Output/TrimmedBufferOutput.php rename to vendor/symfony/console/Output/TrimmedBufferOutput.php diff --git a/deps/vendor/symfony/console/Question/ChoiceQuestion.php b/vendor/symfony/console/Question/ChoiceQuestion.php similarity index 100% rename from deps/vendor/symfony/console/Question/ChoiceQuestion.php rename to vendor/symfony/console/Question/ChoiceQuestion.php diff --git a/deps/vendor/symfony/console/Question/ConfirmationQuestion.php b/vendor/symfony/console/Question/ConfirmationQuestion.php similarity index 100% rename from deps/vendor/symfony/console/Question/ConfirmationQuestion.php rename to vendor/symfony/console/Question/ConfirmationQuestion.php diff --git a/deps/vendor/symfony/console/Question/Question.php b/vendor/symfony/console/Question/Question.php similarity index 100% rename from deps/vendor/symfony/console/Question/Question.php rename to vendor/symfony/console/Question/Question.php diff --git a/deps/vendor/symfony/console/Resources/bin/hiddeninput.exe b/vendor/symfony/console/Resources/bin/hiddeninput.exe similarity index 100% rename from deps/vendor/symfony/console/Resources/bin/hiddeninput.exe rename to vendor/symfony/console/Resources/bin/hiddeninput.exe diff --git a/deps/vendor/symfony/console/SignalRegistry/SignalRegistry.php b/vendor/symfony/console/SignalRegistry/SignalRegistry.php similarity index 100% rename from deps/vendor/symfony/console/SignalRegistry/SignalRegistry.php rename to vendor/symfony/console/SignalRegistry/SignalRegistry.php diff --git a/deps/vendor/symfony/console/SingleCommandApplication.php b/vendor/symfony/console/SingleCommandApplication.php similarity index 100% rename from deps/vendor/symfony/console/SingleCommandApplication.php rename to vendor/symfony/console/SingleCommandApplication.php diff --git a/deps/vendor/symfony/console/Style/OutputStyle.php b/vendor/symfony/console/Style/OutputStyle.php similarity index 100% rename from deps/vendor/symfony/console/Style/OutputStyle.php rename to vendor/symfony/console/Style/OutputStyle.php diff --git a/deps/vendor/symfony/console/Style/StyleInterface.php b/vendor/symfony/console/Style/StyleInterface.php similarity index 100% rename from deps/vendor/symfony/console/Style/StyleInterface.php rename to vendor/symfony/console/Style/StyleInterface.php diff --git a/deps/vendor/symfony/console/Style/SymfonyStyle.php b/vendor/symfony/console/Style/SymfonyStyle.php similarity index 100% rename from deps/vendor/symfony/console/Style/SymfonyStyle.php rename to vendor/symfony/console/Style/SymfonyStyle.php diff --git a/deps/vendor/symfony/console/Terminal.php b/vendor/symfony/console/Terminal.php similarity index 100% rename from deps/vendor/symfony/console/Terminal.php rename to vendor/symfony/console/Terminal.php diff --git a/deps/vendor/symfony/console/Tester/ApplicationTester.php b/vendor/symfony/console/Tester/ApplicationTester.php similarity index 100% rename from deps/vendor/symfony/console/Tester/ApplicationTester.php rename to vendor/symfony/console/Tester/ApplicationTester.php diff --git a/deps/vendor/symfony/console/Tester/CommandCompletionTester.php b/vendor/symfony/console/Tester/CommandCompletionTester.php similarity index 100% rename from deps/vendor/symfony/console/Tester/CommandCompletionTester.php rename to vendor/symfony/console/Tester/CommandCompletionTester.php diff --git a/deps/vendor/symfony/console/Tester/CommandTester.php b/vendor/symfony/console/Tester/CommandTester.php similarity index 100% rename from deps/vendor/symfony/console/Tester/CommandTester.php rename to vendor/symfony/console/Tester/CommandTester.php diff --git a/deps/vendor/symfony/console/Tester/Constraint/CommandIsSuccessful.php b/vendor/symfony/console/Tester/Constraint/CommandIsSuccessful.php similarity index 100% rename from deps/vendor/symfony/console/Tester/Constraint/CommandIsSuccessful.php rename to vendor/symfony/console/Tester/Constraint/CommandIsSuccessful.php diff --git a/deps/vendor/symfony/console/Tester/TesterTrait.php b/vendor/symfony/console/Tester/TesterTrait.php similarity index 100% rename from deps/vendor/symfony/console/Tester/TesterTrait.php rename to vendor/symfony/console/Tester/TesterTrait.php diff --git a/deps/vendor/symfony/deprecation-contracts/function.php b/vendor/symfony/deprecation-contracts/function.php similarity index 100% rename from deps/vendor/symfony/deprecation-contracts/function.php rename to vendor/symfony/deprecation-contracts/function.php diff --git a/deps/vendor/symfony/polyfill-ctype/Ctype.php b/vendor/symfony/polyfill-ctype/Ctype.php similarity index 100% rename from deps/vendor/symfony/polyfill-ctype/Ctype.php rename to vendor/symfony/polyfill-ctype/Ctype.php diff --git a/deps/vendor/symfony/polyfill-ctype/bootstrap.php b/vendor/symfony/polyfill-ctype/bootstrap.php similarity index 100% rename from deps/vendor/symfony/polyfill-ctype/bootstrap.php rename to vendor/symfony/polyfill-ctype/bootstrap.php diff --git a/deps/vendor/symfony/polyfill-ctype/bootstrap80.php b/vendor/symfony/polyfill-ctype/bootstrap80.php similarity index 100% rename from deps/vendor/symfony/polyfill-ctype/bootstrap80.php rename to vendor/symfony/polyfill-ctype/bootstrap80.php diff --git a/deps/vendor/symfony/polyfill-intl-grapheme/Grapheme.php b/vendor/symfony/polyfill-intl-grapheme/Grapheme.php similarity index 100% rename from deps/vendor/symfony/polyfill-intl-grapheme/Grapheme.php rename to vendor/symfony/polyfill-intl-grapheme/Grapheme.php diff --git a/deps/vendor/symfony/polyfill-intl-grapheme/bootstrap.php b/vendor/symfony/polyfill-intl-grapheme/bootstrap.php similarity index 100% rename from deps/vendor/symfony/polyfill-intl-grapheme/bootstrap.php rename to vendor/symfony/polyfill-intl-grapheme/bootstrap.php diff --git a/deps/vendor/symfony/polyfill-intl-grapheme/bootstrap80.php b/vendor/symfony/polyfill-intl-grapheme/bootstrap80.php similarity index 100% rename from deps/vendor/symfony/polyfill-intl-grapheme/bootstrap80.php rename to vendor/symfony/polyfill-intl-grapheme/bootstrap80.php diff --git a/deps/vendor/symfony/polyfill-intl-normalizer/Normalizer.php b/vendor/symfony/polyfill-intl-normalizer/Normalizer.php similarity index 100% rename from deps/vendor/symfony/polyfill-intl-normalizer/Normalizer.php rename to vendor/symfony/polyfill-intl-normalizer/Normalizer.php diff --git a/deps/vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php b/vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php similarity index 100% rename from deps/vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php rename to vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php diff --git a/deps/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.php b/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.php similarity index 100% rename from deps/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.php rename to vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.php diff --git a/deps/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php b/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php similarity index 100% rename from deps/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php rename to vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php diff --git a/deps/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php b/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php similarity index 100% rename from deps/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php rename to vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php diff --git a/deps/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php b/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php similarity index 100% rename from deps/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php rename to vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php diff --git a/deps/vendor/symfony/polyfill-intl-normalizer/bootstrap.php b/vendor/symfony/polyfill-intl-normalizer/bootstrap.php similarity index 100% rename from deps/vendor/symfony/polyfill-intl-normalizer/bootstrap.php rename to vendor/symfony/polyfill-intl-normalizer/bootstrap.php diff --git a/deps/vendor/symfony/polyfill-intl-normalizer/bootstrap80.php b/vendor/symfony/polyfill-intl-normalizer/bootstrap80.php similarity index 100% rename from deps/vendor/symfony/polyfill-intl-normalizer/bootstrap80.php rename to vendor/symfony/polyfill-intl-normalizer/bootstrap80.php diff --git a/deps/vendor/symfony/polyfill-mbstring/Mbstring.php b/vendor/symfony/polyfill-mbstring/Mbstring.php similarity index 100% rename from deps/vendor/symfony/polyfill-mbstring/Mbstring.php rename to vendor/symfony/polyfill-mbstring/Mbstring.php diff --git a/deps/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php similarity index 100% rename from deps/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php rename to vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php diff --git a/deps/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php b/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php similarity index 100% rename from deps/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php rename to vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php diff --git a/deps/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php b/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php similarity index 100% rename from deps/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php rename to vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php diff --git a/deps/vendor/symfony/polyfill-mbstring/bootstrap.php b/vendor/symfony/polyfill-mbstring/bootstrap.php similarity index 100% rename from deps/vendor/symfony/polyfill-mbstring/bootstrap.php rename to vendor/symfony/polyfill-mbstring/bootstrap.php diff --git a/deps/vendor/symfony/polyfill-mbstring/bootstrap80.php b/vendor/symfony/polyfill-mbstring/bootstrap80.php similarity index 100% rename from deps/vendor/symfony/polyfill-mbstring/bootstrap80.php rename to vendor/symfony/polyfill-mbstring/bootstrap80.php diff --git a/deps/vendor/symfony/polyfill-php73/Php73.php b/vendor/symfony/polyfill-php73/Php73.php similarity index 100% rename from deps/vendor/symfony/polyfill-php73/Php73.php rename to vendor/symfony/polyfill-php73/Php73.php diff --git a/deps/vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php b/vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php similarity index 100% rename from deps/vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php rename to vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php diff --git a/deps/vendor/symfony/polyfill-php73/bootstrap.php b/vendor/symfony/polyfill-php73/bootstrap.php similarity index 100% rename from deps/vendor/symfony/polyfill-php73/bootstrap.php rename to vendor/symfony/polyfill-php73/bootstrap.php diff --git a/deps/vendor/symfony/polyfill-php80/Php80.php b/vendor/symfony/polyfill-php80/Php80.php similarity index 100% rename from deps/vendor/symfony/polyfill-php80/Php80.php rename to vendor/symfony/polyfill-php80/Php80.php diff --git a/deps/vendor/symfony/polyfill-php80/PhpToken.php b/vendor/symfony/polyfill-php80/PhpToken.php similarity index 100% rename from deps/vendor/symfony/polyfill-php80/PhpToken.php rename to vendor/symfony/polyfill-php80/PhpToken.php diff --git a/deps/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php b/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php similarity index 100% rename from deps/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php rename to vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php diff --git a/deps/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php b/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php similarity index 100% rename from deps/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php rename to vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php diff --git a/deps/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php b/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php similarity index 100% rename from deps/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php rename to vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php diff --git a/deps/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php b/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php similarity index 100% rename from deps/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php rename to vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php diff --git a/deps/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php b/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php similarity index 100% rename from deps/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php rename to vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php diff --git a/deps/vendor/symfony/polyfill-php80/bootstrap.php b/vendor/symfony/polyfill-php80/bootstrap.php similarity index 100% rename from deps/vendor/symfony/polyfill-php80/bootstrap.php rename to vendor/symfony/polyfill-php80/bootstrap.php diff --git a/deps/vendor/symfony/process/Exception/ExceptionInterface.php b/vendor/symfony/process/Exception/ExceptionInterface.php similarity index 100% rename from deps/vendor/symfony/process/Exception/ExceptionInterface.php rename to vendor/symfony/process/Exception/ExceptionInterface.php diff --git a/deps/vendor/symfony/process/Exception/InvalidArgumentException.php b/vendor/symfony/process/Exception/InvalidArgumentException.php similarity index 100% rename from deps/vendor/symfony/process/Exception/InvalidArgumentException.php rename to vendor/symfony/process/Exception/InvalidArgumentException.php diff --git a/deps/vendor/symfony/process/Exception/LogicException.php b/vendor/symfony/process/Exception/LogicException.php similarity index 100% rename from deps/vendor/symfony/process/Exception/LogicException.php rename to vendor/symfony/process/Exception/LogicException.php diff --git a/deps/vendor/symfony/process/Exception/ProcessFailedException.php b/vendor/symfony/process/Exception/ProcessFailedException.php similarity index 100% rename from deps/vendor/symfony/process/Exception/ProcessFailedException.php rename to vendor/symfony/process/Exception/ProcessFailedException.php diff --git a/deps/vendor/symfony/process/Exception/ProcessSignaledException.php b/vendor/symfony/process/Exception/ProcessSignaledException.php similarity index 100% rename from deps/vendor/symfony/process/Exception/ProcessSignaledException.php rename to vendor/symfony/process/Exception/ProcessSignaledException.php diff --git a/deps/vendor/symfony/process/Exception/ProcessTimedOutException.php b/vendor/symfony/process/Exception/ProcessTimedOutException.php similarity index 100% rename from deps/vendor/symfony/process/Exception/ProcessTimedOutException.php rename to vendor/symfony/process/Exception/ProcessTimedOutException.php diff --git a/deps/vendor/symfony/process/Exception/RuntimeException.php b/vendor/symfony/process/Exception/RuntimeException.php similarity index 100% rename from deps/vendor/symfony/process/Exception/RuntimeException.php rename to vendor/symfony/process/Exception/RuntimeException.php diff --git a/deps/vendor/symfony/process/ExecutableFinder.php b/vendor/symfony/process/ExecutableFinder.php similarity index 100% rename from deps/vendor/symfony/process/ExecutableFinder.php rename to vendor/symfony/process/ExecutableFinder.php diff --git a/deps/vendor/symfony/process/InputStream.php b/vendor/symfony/process/InputStream.php similarity index 100% rename from deps/vendor/symfony/process/InputStream.php rename to vendor/symfony/process/InputStream.php diff --git a/deps/vendor/symfony/process/PhpExecutableFinder.php b/vendor/symfony/process/PhpExecutableFinder.php similarity index 100% rename from deps/vendor/symfony/process/PhpExecutableFinder.php rename to vendor/symfony/process/PhpExecutableFinder.php diff --git a/deps/vendor/symfony/process/PhpProcess.php b/vendor/symfony/process/PhpProcess.php similarity index 100% rename from deps/vendor/symfony/process/PhpProcess.php rename to vendor/symfony/process/PhpProcess.php diff --git a/deps/vendor/symfony/process/Pipes/AbstractPipes.php b/vendor/symfony/process/Pipes/AbstractPipes.php similarity index 100% rename from deps/vendor/symfony/process/Pipes/AbstractPipes.php rename to vendor/symfony/process/Pipes/AbstractPipes.php diff --git a/deps/vendor/symfony/process/Pipes/PipesInterface.php b/vendor/symfony/process/Pipes/PipesInterface.php similarity index 100% rename from deps/vendor/symfony/process/Pipes/PipesInterface.php rename to vendor/symfony/process/Pipes/PipesInterface.php diff --git a/deps/vendor/symfony/process/Pipes/UnixPipes.php b/vendor/symfony/process/Pipes/UnixPipes.php similarity index 100% rename from deps/vendor/symfony/process/Pipes/UnixPipes.php rename to vendor/symfony/process/Pipes/UnixPipes.php diff --git a/deps/vendor/symfony/process/Pipes/WindowsPipes.php b/vendor/symfony/process/Pipes/WindowsPipes.php similarity index 100% rename from deps/vendor/symfony/process/Pipes/WindowsPipes.php rename to vendor/symfony/process/Pipes/WindowsPipes.php diff --git a/deps/vendor/symfony/process/Process.php b/vendor/symfony/process/Process.php similarity index 100% rename from deps/vendor/symfony/process/Process.php rename to vendor/symfony/process/Process.php diff --git a/deps/vendor/symfony/process/ProcessUtils.php b/vendor/symfony/process/ProcessUtils.php similarity index 100% rename from deps/vendor/symfony/process/ProcessUtils.php rename to vendor/symfony/process/ProcessUtils.php diff --git a/deps/vendor/symfony/service-contracts/Attribute/Required.php b/vendor/symfony/service-contracts/Attribute/Required.php similarity index 100% rename from deps/vendor/symfony/service-contracts/Attribute/Required.php rename to vendor/symfony/service-contracts/Attribute/Required.php diff --git a/deps/vendor/symfony/service-contracts/Attribute/SubscribedService.php b/vendor/symfony/service-contracts/Attribute/SubscribedService.php similarity index 100% rename from deps/vendor/symfony/service-contracts/Attribute/SubscribedService.php rename to vendor/symfony/service-contracts/Attribute/SubscribedService.php diff --git a/deps/vendor/symfony/service-contracts/ResetInterface.php b/vendor/symfony/service-contracts/ResetInterface.php similarity index 100% rename from deps/vendor/symfony/service-contracts/ResetInterface.php rename to vendor/symfony/service-contracts/ResetInterface.php diff --git a/deps/vendor/symfony/service-contracts/ServiceLocatorTrait.php b/vendor/symfony/service-contracts/ServiceLocatorTrait.php similarity index 100% rename from deps/vendor/symfony/service-contracts/ServiceLocatorTrait.php rename to vendor/symfony/service-contracts/ServiceLocatorTrait.php diff --git a/deps/vendor/symfony/service-contracts/ServiceProviderInterface.php b/vendor/symfony/service-contracts/ServiceProviderInterface.php similarity index 100% rename from deps/vendor/symfony/service-contracts/ServiceProviderInterface.php rename to vendor/symfony/service-contracts/ServiceProviderInterface.php diff --git a/deps/vendor/symfony/service-contracts/ServiceSubscriberInterface.php b/vendor/symfony/service-contracts/ServiceSubscriberInterface.php similarity index 100% rename from deps/vendor/symfony/service-contracts/ServiceSubscriberInterface.php rename to vendor/symfony/service-contracts/ServiceSubscriberInterface.php diff --git a/deps/vendor/symfony/service-contracts/ServiceSubscriberTrait.php b/vendor/symfony/service-contracts/ServiceSubscriberTrait.php similarity index 100% rename from deps/vendor/symfony/service-contracts/ServiceSubscriberTrait.php rename to vendor/symfony/service-contracts/ServiceSubscriberTrait.php diff --git a/deps/vendor/symfony/service-contracts/Test/ServiceLocatorTest.php b/vendor/symfony/service-contracts/Test/ServiceLocatorTest.php similarity index 100% rename from deps/vendor/symfony/service-contracts/Test/ServiceLocatorTest.php rename to vendor/symfony/service-contracts/Test/ServiceLocatorTest.php diff --git a/deps/vendor/symfony/string/AbstractString.php b/vendor/symfony/string/AbstractString.php similarity index 100% rename from deps/vendor/symfony/string/AbstractString.php rename to vendor/symfony/string/AbstractString.php diff --git a/deps/vendor/symfony/string/AbstractUnicodeString.php b/vendor/symfony/string/AbstractUnicodeString.php similarity index 100% rename from deps/vendor/symfony/string/AbstractUnicodeString.php rename to vendor/symfony/string/AbstractUnicodeString.php diff --git a/deps/vendor/symfony/string/ByteString.php b/vendor/symfony/string/ByteString.php similarity index 100% rename from deps/vendor/symfony/string/ByteString.php rename to vendor/symfony/string/ByteString.php diff --git a/deps/vendor/symfony/string/CodePointString.php b/vendor/symfony/string/CodePointString.php similarity index 100% rename from deps/vendor/symfony/string/CodePointString.php rename to vendor/symfony/string/CodePointString.php diff --git a/deps/vendor/symfony/string/Exception/ExceptionInterface.php b/vendor/symfony/string/Exception/ExceptionInterface.php similarity index 100% rename from deps/vendor/symfony/string/Exception/ExceptionInterface.php rename to vendor/symfony/string/Exception/ExceptionInterface.php diff --git a/deps/vendor/symfony/string/Exception/InvalidArgumentException.php b/vendor/symfony/string/Exception/InvalidArgumentException.php similarity index 100% rename from deps/vendor/symfony/string/Exception/InvalidArgumentException.php rename to vendor/symfony/string/Exception/InvalidArgumentException.php diff --git a/deps/vendor/symfony/string/Exception/RuntimeException.php b/vendor/symfony/string/Exception/RuntimeException.php similarity index 100% rename from deps/vendor/symfony/string/Exception/RuntimeException.php rename to vendor/symfony/string/Exception/RuntimeException.php diff --git a/deps/vendor/symfony/string/Inflector/EnglishInflector.php b/vendor/symfony/string/Inflector/EnglishInflector.php similarity index 100% rename from deps/vendor/symfony/string/Inflector/EnglishInflector.php rename to vendor/symfony/string/Inflector/EnglishInflector.php diff --git a/deps/vendor/symfony/string/Inflector/FrenchInflector.php b/vendor/symfony/string/Inflector/FrenchInflector.php similarity index 100% rename from deps/vendor/symfony/string/Inflector/FrenchInflector.php rename to vendor/symfony/string/Inflector/FrenchInflector.php diff --git a/deps/vendor/symfony/string/Inflector/InflectorInterface.php b/vendor/symfony/string/Inflector/InflectorInterface.php similarity index 100% rename from deps/vendor/symfony/string/Inflector/InflectorInterface.php rename to vendor/symfony/string/Inflector/InflectorInterface.php diff --git a/deps/vendor/symfony/string/LazyString.php b/vendor/symfony/string/LazyString.php similarity index 100% rename from deps/vendor/symfony/string/LazyString.php rename to vendor/symfony/string/LazyString.php diff --git a/deps/vendor/symfony/string/Resources/data/wcswidth_table_wide.php b/vendor/symfony/string/Resources/data/wcswidth_table_wide.php similarity index 100% rename from deps/vendor/symfony/string/Resources/data/wcswidth_table_wide.php rename to vendor/symfony/string/Resources/data/wcswidth_table_wide.php diff --git a/deps/vendor/symfony/string/Resources/data/wcswidth_table_zero.php b/vendor/symfony/string/Resources/data/wcswidth_table_zero.php similarity index 100% rename from deps/vendor/symfony/string/Resources/data/wcswidth_table_zero.php rename to vendor/symfony/string/Resources/data/wcswidth_table_zero.php diff --git a/deps/vendor/symfony/string/Resources/functions.php b/vendor/symfony/string/Resources/functions.php similarity index 100% rename from deps/vendor/symfony/string/Resources/functions.php rename to vendor/symfony/string/Resources/functions.php diff --git a/deps/vendor/symfony/string/Slugger/AsciiSlugger.php b/vendor/symfony/string/Slugger/AsciiSlugger.php similarity index 100% rename from deps/vendor/symfony/string/Slugger/AsciiSlugger.php rename to vendor/symfony/string/Slugger/AsciiSlugger.php diff --git a/deps/vendor/symfony/string/Slugger/SluggerInterface.php b/vendor/symfony/string/Slugger/SluggerInterface.php similarity index 100% rename from deps/vendor/symfony/string/Slugger/SluggerInterface.php rename to vendor/symfony/string/Slugger/SluggerInterface.php diff --git a/deps/vendor/symfony/string/UnicodeString.php b/vendor/symfony/string/UnicodeString.php similarity index 100% rename from deps/vendor/symfony/string/UnicodeString.php rename to vendor/symfony/string/UnicodeString.php diff --git a/deps/vendor/symfony/yaml/Command/LintCommand.php b/vendor/symfony/yaml/Command/LintCommand.php similarity index 100% rename from deps/vendor/symfony/yaml/Command/LintCommand.php rename to vendor/symfony/yaml/Command/LintCommand.php diff --git a/deps/vendor/symfony/yaml/Dumper.php b/vendor/symfony/yaml/Dumper.php similarity index 100% rename from deps/vendor/symfony/yaml/Dumper.php rename to vendor/symfony/yaml/Dumper.php diff --git a/deps/vendor/symfony/yaml/Escaper.php b/vendor/symfony/yaml/Escaper.php similarity index 100% rename from deps/vendor/symfony/yaml/Escaper.php rename to vendor/symfony/yaml/Escaper.php diff --git a/deps/vendor/symfony/yaml/Exception/DumpException.php b/vendor/symfony/yaml/Exception/DumpException.php similarity index 100% rename from deps/vendor/symfony/yaml/Exception/DumpException.php rename to vendor/symfony/yaml/Exception/DumpException.php diff --git a/deps/vendor/symfony/yaml/Exception/ExceptionInterface.php b/vendor/symfony/yaml/Exception/ExceptionInterface.php similarity index 100% rename from deps/vendor/symfony/yaml/Exception/ExceptionInterface.php rename to vendor/symfony/yaml/Exception/ExceptionInterface.php diff --git a/deps/vendor/symfony/yaml/Exception/ParseException.php b/vendor/symfony/yaml/Exception/ParseException.php similarity index 100% rename from deps/vendor/symfony/yaml/Exception/ParseException.php rename to vendor/symfony/yaml/Exception/ParseException.php diff --git a/deps/vendor/symfony/yaml/Exception/RuntimeException.php b/vendor/symfony/yaml/Exception/RuntimeException.php similarity index 100% rename from deps/vendor/symfony/yaml/Exception/RuntimeException.php rename to vendor/symfony/yaml/Exception/RuntimeException.php diff --git a/deps/vendor/symfony/yaml/Inline.php b/vendor/symfony/yaml/Inline.php similarity index 100% rename from deps/vendor/symfony/yaml/Inline.php rename to vendor/symfony/yaml/Inline.php diff --git a/deps/vendor/symfony/yaml/Parser.php b/vendor/symfony/yaml/Parser.php similarity index 100% rename from deps/vendor/symfony/yaml/Parser.php rename to vendor/symfony/yaml/Parser.php diff --git a/deps/vendor/symfony/yaml/Tag/TaggedValue.php b/vendor/symfony/yaml/Tag/TaggedValue.php similarity index 100% rename from deps/vendor/symfony/yaml/Tag/TaggedValue.php rename to vendor/symfony/yaml/Tag/TaggedValue.php diff --git a/deps/vendor/symfony/yaml/Unescaper.php b/vendor/symfony/yaml/Unescaper.php similarity index 100% rename from deps/vendor/symfony/yaml/Unescaper.php rename to vendor/symfony/yaml/Unescaper.php diff --git a/deps/vendor/symfony/yaml/Yaml.php b/vendor/symfony/yaml/Yaml.php similarity index 100% rename from deps/vendor/symfony/yaml/Yaml.php rename to vendor/symfony/yaml/Yaml.php