From 8a6a0c73823ed4e345380d179a0bb04ac3322957 Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 15 Nov 2021 14:21:18 +0100 Subject: [PATCH] Add laminas/laminas-diactoros --- .gitignore | 3 + composer.json | 3 +- composer.lock | 101 +- index.php | 2 + .../laminas-diactoros/.laminas-ci.json | 8 + vendor/laminas/laminas-diactoros/COPYRIGHT.md | 1 + vendor/laminas/laminas-diactoros/LICENSE.md | 26 + vendor/laminas/laminas-diactoros/README.md | 30 + .../laminas/laminas-diactoros/composer.json | 95 + .../laminas/laminas-diactoros/composer.lock | 4179 +++++++++++++++++ .../laminas-diactoros/psalm-baseline.xml | 1362 ++++++ .../laminas/laminas-diactoros/psalm.xml.dist | 29 + .../src/AbstractSerializer.php | 148 + .../laminas-diactoros/src/CallbackStream.php | 180 + .../laminas-diactoros/src/ConfigProvider.php | 45 + .../Exception/DeserializationException.php | 46 + .../src/Exception/ExceptionInterface.php | 14 + .../Exception/InvalidArgumentException.php | 9 + .../InvalidStreamPointerPositionException.php | 19 + .../src/Exception/RuntimeException.php | 9 + .../src/Exception/SerializationException.php | 20 + .../Exception/UnreadableStreamException.php | 30 + .../UnrecognizedProtocolVersionException.php | 17 + .../Exception/UnrewindableStreamException.php | 15 + .../Exception/UnseekableStreamException.php | 30 + .../Exception/UntellableStreamException.php | 25 + .../Exception/UnwritableStreamException.php | 30 + .../UploadedFileAlreadyMovedException.php | 19 + .../Exception/UploadedFileErrorException.php | 38 + .../laminas-diactoros/src/HeaderSecurity.php | 168 + .../laminas-diactoros/src/MessageTrait.php | 416 ++ .../laminas/laminas-diactoros/src/Module.php | 15 + .../laminas-diactoros/src/PhpInputStream.php | 88 + .../laminas-diactoros/src/RelativeStream.php | 177 + .../laminas/laminas-diactoros/src/Request.php | 70 + .../src/Request/ArraySerializer.php | 77 + .../src/Request/Serializer.php | 136 + .../laminas-diactoros/src/RequestFactory.php | 19 + .../laminas-diactoros/src/RequestTrait.php | 314 ++ .../laminas-diactoros/src/Response.php | 196 + .../src/Response/ArraySerializer.php | 79 + .../src/Response/EmptyResponse.php | 37 + .../src/Response/HtmlResponse.php | 74 + .../src/Response/InjectContentTypeTrait.php | 30 + .../src/Response/JsonResponse.php | 178 + .../src/Response/RedirectResponse.php | 47 + .../src/Response/Serializer.php | 99 + .../src/Response/TextResponse.php | 74 + .../src/Response/XmlResponse.php | 76 + .../laminas-diactoros/src/ResponseFactory.php | 20 + .../laminas-diactoros/src/ServerRequest.php | 250 + .../src/ServerRequestFactory.php | 94 + .../laminas/laminas-diactoros/src/Stream.php | 377 ++ .../laminas-diactoros/src/StreamFactory.php | 45 + .../laminas-diactoros/src/UploadedFile.php | 262 ++ .../src/UploadedFileFactory.php | 31 + vendor/laminas/laminas-diactoros/src/Uri.php | 692 +++ .../laminas-diactoros/src/UriFactory.php | 19 + .../functions/create_uploaded_file.legacy.php | 15 + .../src/functions/create_uploaded_file.php | 34 + .../marshal_headers_from_sapi.legacy.php | 15 + .../functions/marshal_headers_from_sapi.php | 69 + .../marshal_method_from_sapi.legacy.php | 15 + .../functions/marshal_method_from_sapi.php | 13 + ...shal_protocol_version_from_sapi.legacy.php | 15 + .../marshal_protocol_version_from_sapi.php | 28 + .../marshal_uri_from_sapi.legacy.php | 15 + .../src/functions/marshal_uri_from_sapi.php | 218 + .../src/functions/normalize_server.legacy.php | 15 + .../src/functions/normalize_server.php | 47 + .../normalize_uploaded_files.legacy.php | 17 + .../functions/normalize_uploaded_files.php | 124 + .../functions/parse_cookie_header.legacy.php | 15 + .../src/functions/parse_cookie_header.php | 38 + 74 files changed, 11384 insertions(+), 2 deletions(-) create mode 100644 vendor/laminas/laminas-diactoros/.laminas-ci.json create mode 100644 vendor/laminas/laminas-diactoros/COPYRIGHT.md create mode 100644 vendor/laminas/laminas-diactoros/LICENSE.md create mode 100644 vendor/laminas/laminas-diactoros/README.md create mode 100644 vendor/laminas/laminas-diactoros/composer.json create mode 100644 vendor/laminas/laminas-diactoros/composer.lock create mode 100644 vendor/laminas/laminas-diactoros/psalm-baseline.xml create mode 100644 vendor/laminas/laminas-diactoros/psalm.xml.dist create mode 100644 vendor/laminas/laminas-diactoros/src/AbstractSerializer.php create mode 100644 vendor/laminas/laminas-diactoros/src/CallbackStream.php create mode 100644 vendor/laminas/laminas-diactoros/src/ConfigProvider.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/DeserializationException.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/ExceptionInterface.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/InvalidArgumentException.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/InvalidStreamPointerPositionException.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/RuntimeException.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/SerializationException.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/UnreadableStreamException.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/UnrecognizedProtocolVersionException.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/UnrewindableStreamException.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/UnseekableStreamException.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/UntellableStreamException.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/UnwritableStreamException.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/UploadedFileAlreadyMovedException.php create mode 100644 vendor/laminas/laminas-diactoros/src/Exception/UploadedFileErrorException.php create mode 100644 vendor/laminas/laminas-diactoros/src/HeaderSecurity.php create mode 100644 vendor/laminas/laminas-diactoros/src/MessageTrait.php create mode 100644 vendor/laminas/laminas-diactoros/src/Module.php create mode 100644 vendor/laminas/laminas-diactoros/src/PhpInputStream.php create mode 100644 vendor/laminas/laminas-diactoros/src/RelativeStream.php create mode 100644 vendor/laminas/laminas-diactoros/src/Request.php create mode 100644 vendor/laminas/laminas-diactoros/src/Request/ArraySerializer.php create mode 100644 vendor/laminas/laminas-diactoros/src/Request/Serializer.php create mode 100644 vendor/laminas/laminas-diactoros/src/RequestFactory.php create mode 100644 vendor/laminas/laminas-diactoros/src/RequestTrait.php create mode 100644 vendor/laminas/laminas-diactoros/src/Response.php create mode 100644 vendor/laminas/laminas-diactoros/src/Response/ArraySerializer.php create mode 100644 vendor/laminas/laminas-diactoros/src/Response/EmptyResponse.php create mode 100644 vendor/laminas/laminas-diactoros/src/Response/HtmlResponse.php create mode 100644 vendor/laminas/laminas-diactoros/src/Response/InjectContentTypeTrait.php create mode 100644 vendor/laminas/laminas-diactoros/src/Response/JsonResponse.php create mode 100644 vendor/laminas/laminas-diactoros/src/Response/RedirectResponse.php create mode 100644 vendor/laminas/laminas-diactoros/src/Response/Serializer.php create mode 100644 vendor/laminas/laminas-diactoros/src/Response/TextResponse.php create mode 100644 vendor/laminas/laminas-diactoros/src/Response/XmlResponse.php create mode 100644 vendor/laminas/laminas-diactoros/src/ResponseFactory.php create mode 100644 vendor/laminas/laminas-diactoros/src/ServerRequest.php create mode 100644 vendor/laminas/laminas-diactoros/src/ServerRequestFactory.php create mode 100644 vendor/laminas/laminas-diactoros/src/Stream.php create mode 100644 vendor/laminas/laminas-diactoros/src/StreamFactory.php create mode 100644 vendor/laminas/laminas-diactoros/src/UploadedFile.php create mode 100644 vendor/laminas/laminas-diactoros/src/UploadedFileFactory.php create mode 100644 vendor/laminas/laminas-diactoros/src/Uri.php create mode 100644 vendor/laminas/laminas-diactoros/src/UriFactory.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/create_uploaded_file.legacy.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/create_uploaded_file.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/marshal_headers_from_sapi.legacy.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/marshal_headers_from_sapi.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/marshal_method_from_sapi.legacy.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/marshal_method_from_sapi.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/marshal_protocol_version_from_sapi.legacy.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/marshal_protocol_version_from_sapi.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/marshal_uri_from_sapi.legacy.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/marshal_uri_from_sapi.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/normalize_server.legacy.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/normalize_server.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/normalize_uploaded_files.legacy.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/normalize_uploaded_files.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/parse_cookie_header.legacy.php create mode 100644 vendor/laminas/laminas-diactoros/src/functions/parse_cookie_header.php diff --git a/.gitignore b/.gitignore index d1dda443..2cd96aa2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ /vendor/* !/vendor/embed +!/vendor/embed/embed +!/vendor/laminas +!/vendor/laminas/laminas-diactoros /.vscode /includes/config/config.php diff --git a/composer.json b/composer.json index 47994e93..b7ae47ed 100644 --- a/composer.json +++ b/composer.json @@ -3,6 +3,7 @@ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1" }, "require": { - "embed/embed": "^4.3" + "embed/embed": "^4.3", + "laminas/laminas-diactoros": "^2.8" } } diff --git a/composer.lock b/composer.lock index dfe13e12..b5b738ab 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ccddc20719e54ec597c104abcbd1ab07", + "content-hash": "72ca4d25f90c6bffc18b886e1ef67acb", "packages": [ { "name": "composer/ca-bundle", @@ -157,6 +157,105 @@ }, "time": "2021-10-10T17:10:44+00:00" }, + { + "name": "laminas/laminas-diactoros", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-diactoros.git", + "reference": "0c26ef1d95b6d7e6e3943a243ba3dc0797227199" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/0c26ef1d95b6d7e6e3943a243ba3dc0797227199", + "reference": "0c26ef1d95b6d7e6e3943a243ba3dc0797227199", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0 || ~8.1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "conflict": { + "phpspec/prophecy": "<1.9.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.8.0", + "laminas/laminas-coding-standard": "~1.0.0", + "php-http/psr7-integration-tests": "^1.1", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.1", + "psalm/plugin-phpunit": "^0.14.0", + "vimeo/psalm": "^4.3" + }, + "type": "library", + "extra": { + "laminas": { + "config-provider": "Laminas\\Diactoros\\ConfigProvider", + "module": "Laminas\\Diactoros" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php", + "src/functions/create_uploaded_file.legacy.php", + "src/functions/marshal_headers_from_sapi.legacy.php", + "src/functions/marshal_method_from_sapi.legacy.php", + "src/functions/marshal_protocol_version_from_sapi.legacy.php", + "src/functions/marshal_uri_from_sapi.legacy.php", + "src/functions/normalize_server.legacy.php", + "src/functions/normalize_uploaded_files.legacy.php", + "src/functions/parse_cookie_header.legacy.php" + ], + "psr-4": { + "Laminas\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://laminas.dev", + "keywords": [ + "http", + "laminas", + "psr", + "psr-17", + "psr-7" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-diactoros/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-diactoros/issues", + "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", + "source": "https://github.com/laminas/laminas-diactoros" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-22T03:54:36+00:00" + }, { "name": "ml/iri", "version": "1.1.4", diff --git a/index.php b/index.php index 0aa42f93..803dec68 100644 --- a/index.php +++ b/index.php @@ -9,6 +9,8 @@ /** * Include */ + +require 'vendor/autoload.php'; require 'includes/functions/auto-include.php'; autoInclude(__DIR__ . '/includes/classes'); diff --git a/vendor/laminas/laminas-diactoros/.laminas-ci.json b/vendor/laminas/laminas-diactoros/.laminas-ci.json new file mode 100644 index 00000000..e50b00a1 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/.laminas-ci.json @@ -0,0 +1,8 @@ +{ + "extensions": [ + "gd" + ], + "ignore_php_platform_requirements": { + "8.1": true + } +} diff --git a/vendor/laminas/laminas-diactoros/COPYRIGHT.md b/vendor/laminas/laminas-diactoros/COPYRIGHT.md new file mode 100644 index 00000000..0a8cccc0 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/COPYRIGHT.md @@ -0,0 +1 @@ +Copyright (c) 2020 Laminas Project a Series of LF Projects, LLC. (https://getlaminas.org/) diff --git a/vendor/laminas/laminas-diactoros/LICENSE.md b/vendor/laminas/laminas-diactoros/LICENSE.md new file mode 100644 index 00000000..10b40f14 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/LICENSE.md @@ -0,0 +1,26 @@ +Copyright (c) 2020 Laminas Project a Series of LF Projects, LLC. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +- Neither the name of Laminas Foundation nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/laminas/laminas-diactoros/README.md b/vendor/laminas/laminas-diactoros/README.md new file mode 100644 index 00000000..9d34c9de --- /dev/null +++ b/vendor/laminas/laminas-diactoros/README.md @@ -0,0 +1,30 @@ +# laminas-diactoros + +[![Build Status](https://github.com/laminas/laminas-diactoros/workflows/Continuous%20Integration/badge.svg)](https://github.com/laminas/laminas-diactoros/actions/workflows/continuous-integration.yml) + +> Diactoros (pronunciation: `/dɪʌktɒrɒs/`): an epithet for Hermes, meaning literally, "the messenger." + +This package supercedes and replaces [phly/http](https://github.com/phly/http). + +`laminas-diactoros` is a PHP package containing implementations of the +[PSR-7 HTTP message interfaces](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-7-http-message.md) +and [PSR-17 HTTP message factory interfaces](https://www.php-fig.org/psr/psr-17). + +- File issues at https://github.com/laminas/laminas-diactoros/issues +- Issue patches to https://github.com/laminas/laminas-diactoros/pulls + +## Documentation + +Documentation is available at: + +- https://docs.laminas.dev/laminas-diactoros/ + +Source files for documentation are [in the docs/ tree](docs/). + +----- + +## Contributing and Support + +- If you need support with the project, read [the support documentation](https://github.com/laminas/.github/blob/main/SUPPORT.md). +- If you wish to contribute to the project, read the [contributing guidelines](https://github.com/laminas/.github/blob/main/CONTRIBUTING.md) as well as the [Code of Conduct](https://github.com/laminas/.github/blob/main/CODE_OF_CONDUCT.md). +- For reporting security issues, please review our [security policy](https://github.com/laminas/.github/blob/main/SECURITY.md). diff --git a/vendor/laminas/laminas-diactoros/composer.json b/vendor/laminas/laminas-diactoros/composer.json new file mode 100644 index 00000000..99b4b8c7 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/composer.json @@ -0,0 +1,95 @@ +{ + "name": "laminas/laminas-diactoros", + "description": "PSR HTTP Message implementations", + "license": "BSD-3-Clause", + "keywords": [ + "laminas", + "http", + "psr", + "psr-7", + "psr-17" + ], + "homepage": "https://laminas.dev", + "support": { + "docs": "https://docs.laminas.dev/laminas-diactoros/", + "issues": "https://github.com/laminas/laminas-diactoros/issues", + "source": "https://github.com/laminas/laminas-diactoros", + "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", + "chat": "https://laminas.dev/chat", + "forum": "https://discourse.laminas.dev" + }, + "config": { + "sort-packages": true + }, + "extra": { + "laminas": { + "config-provider": "Laminas\\Diactoros\\ConfigProvider", + "module": "Laminas\\Diactoros" + } + }, + "require": { + "php": "^7.3 || ~8.0.0 || ~8.1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.8.0", + "laminas/laminas-coding-standard": "~1.0.0", + "php-http/psr7-integration-tests": "^1.1", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.1", + "psalm/plugin-phpunit": "^0.14.0", + "vimeo/psalm": "^4.3" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "conflict": { + "phpspec/prophecy": "<1.9.0", + "zendframework/zend-diactoros": "*" + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php", + "src/functions/create_uploaded_file.legacy.php", + "src/functions/marshal_headers_from_sapi.legacy.php", + "src/functions/marshal_method_from_sapi.legacy.php", + "src/functions/marshal_protocol_version_from_sapi.legacy.php", + "src/functions/marshal_uri_from_sapi.legacy.php", + "src/functions/normalize_server.legacy.php", + "src/functions/normalize_uploaded_files.legacy.php", + "src/functions/parse_cookie_header.legacy.php" + ], + "psr-4": { + "Laminas\\Diactoros\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "LaminasTest\\Diactoros\\": "test/" + } + }, + "scripts": { + "check": [ + "@cs-check", + "@test" + ], + "cs-check": "phpcs", + "cs-fix": "phpcbf", + "test": "phpunit --colors=always", + "test-coverage": "phpunit --colors=always --coverage-clover clover.xml", + "static-analysis": "psalm --shepherd --stats" + } +} diff --git a/vendor/laminas/laminas-diactoros/composer.lock b/vendor/laminas/laminas-diactoros/composer.lock new file mode 100644 index 00000000..22491b5c --- /dev/null +++ b/vendor/laminas/laminas-diactoros/composer.lock @@ -0,0 +1,4179 @@ +{ + "_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": "9efeef15f9861d48857dd22552aee390", + "packages": [ + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6cccbddfcfc742eb02158d6137ca5687d92cee32", + "reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", + "psalm/plugin-phpunit": "^0.15.1", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.6" + }, + "type": "library", + "extra": { + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "support": { + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "source": "https://github.com/laminas/laminas-zendframework-bridge" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-02-25T21:54:58+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "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 interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+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" + } + ], + "packages-dev": [ + { + "name": "amphp/amp", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/amphp/amp.git", + "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/amp/zipball/efca2b32a7580087adb8aabbff6be1dc1bb924a9", + "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9", + "shasum": "" + }, + "require": { + "php": ">=7" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1", + "ext-json": "*", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^6.0.9 | ^7", + "psalm/phar": "^3.11@dev", + "react/promise": "^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Amp\\": "lib" + }, + "files": [ + "lib/functions.php", + "lib/Internal/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A non-blocking concurrency framework for PHP applications.", + "homepage": "http://amphp.org/amp", + "keywords": [ + "async", + "asynchronous", + "awaitable", + "concurrency", + "event", + "event-loop", + "future", + "non-blocking", + "promise" + ], + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/amp/issues", + "source": "https://github.com/amphp/amp/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-01-10T17:06:37+00:00" + }, + { + "name": "amphp/byte-stream", + "version": "v1.8.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/byte-stream.git", + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", + "shasum": "" + }, + "require": { + "amphp/amp": "^2", + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.4", + "friendsofphp/php-cs-fixer": "^2.3", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^6 || ^7 || ^8", + "psalm/phar": "^3.11.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Amp\\ByteStream\\": "lib" + }, + "files": [ + "lib/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A stream abstraction to make working with non-blocking I/O simple.", + "homepage": "http://amphp.org/byte-stream", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "non-blocking", + "stream" + ], + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/byte-stream/issues", + "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-03-30T17:13:30+00:00" + }, + { + "name": "composer/package-versions-deprecated", + "version": "1.11.99.1", + "source": { + "type": "git", + "url": "https://github.com/composer/package-versions-deprecated.git", + "reference": "7413f0b55a051e89485c5cb9f765fe24bb02a7b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/7413f0b55a051e89485c5cb9f765fe24bb02a7b6", + "reference": "7413f0b55a051e89485c5cb9f765fe24bb02a7b6", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7 || ^8" + }, + "replace": { + "ocramius/package-versions": "1.11.99" + }, + "require-dev": { + "composer/composer": "^1.9.3 || ^2.0@dev", + "ext-zip": "^1.13", + "phpunit/phpunit": "^6.5 || ^7" + }, + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "support": { + "issues": "https://github.com/composer/package-versions-deprecated/issues", + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.1" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2020-11-11T10:22:58+00:00" + }, + { + "name": "composer/semver", + "version": "3.2.4", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/a02fdf930a3c1c3ed3a49b5f63859c0c20e10464", + "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.54", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.2.4" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2020-11-13T08:59:24+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", + "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/2.0.1" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2021-05-05T19:37:51+00:00" + }, + { + "name": "dnoegel/php-xdg-base-dir", + "version": "v0.1.1", + "source": { + "type": "git", + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "support": { + "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", + "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" + }, + "time": "2019-12-04T15:06:13+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "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.0" + }, + "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": "2020-11-10T18:47:58+00:00" + }, + { + "name": "felixfbecker/advanced-json-rpc", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", + "reference": "06f0b06043c7438959dbdeed8bb3f699a19be22e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/06f0b06043c7438959dbdeed8bb3f699a19be22e", + "reference": "06f0b06043c7438959dbdeed8bb3f699a19be22e", + "shasum": "" + }, + "require": { + "netresearch/jsonmapper": "^1.0 || ^2.0", + "php": "^7.1 || ^8.0", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "AdvancedJsonRpc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "A more advanced JSONRPC implementation", + "support": { + "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", + "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.0" + }, + "time": "2021-01-10T17:48:47+00:00" + }, + { + "name": "felixfbecker/language-server-protocol", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-language-server-protocol.git", + "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/9d846d1f5cf101deee7a61c8ba7caa0a975cd730", + "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpstan/phpstan": "*", + "squizlabs/php_codesniffer": "^3.1", + "vimeo/psalm": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "LanguageServerProtocol\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "PHP classes for the Language Server Protocol", + "keywords": [ + "language", + "microsoft", + "php", + "server" + ], + "support": { + "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/1.5.1" + }, + "time": "2021-02-22T14:02:09+00:00" + }, + { + "name": "http-interop/http-factory-tests", + "version": "0.8.0", + "source": { + "type": "git", + "url": "https://github.com/http-interop/http-factory-tests.git", + "reference": "7384d93cd4841647b16b3c9bfd56c0367a40fce1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/http-interop/http-factory-tests/zipball/7384d93cd4841647b16b3c9bfd56c0367a40fce1", + "reference": "7384d93cd4841647b16b3c9bfd56c0367a40fce1", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0", + "psr/http-factory": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Http\\Factory\\": "test/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Unit tests for HTTP factories", + "keywords": [ + "factory", + "http", + "psr-17", + "psr-7", + "test" + ], + "support": { + "issues": "https://github.com/http-interop/http-factory-tests/issues", + "source": "https://github.com/http-interop/http-factory-tests/tree/0.8.0" + }, + "time": "2020-11-02T14:43:36+00:00" + }, + { + "name": "laminas/laminas-coding-standard", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-coding-standard.git", + "reference": "08880ce2fbfe62d471cd3cb766a91da630b32539" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-coding-standard/zipball/08880ce2fbfe62d471cd3cb766a91da630b32539", + "reference": "08880ce2fbfe62d471cd3cb766a91da630b32539", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "replace": { + "zendframework/zend-coding-standard": "self.version" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas coding standard", + "homepage": "https://laminas.dev", + "keywords": [ + "Coding Standard", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-coding-standard/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-coding-standard/issues", + "rss": "https://github.com/laminas/laminas-coding-standard/releases.atom", + "source": "https://github.com/laminas/laminas-coding-standard" + }, + "time": "2019-12-31T16:28:26+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "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.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" + }, + { + "name": "netresearch/jsonmapper", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/cweiske/jsonmapper.git", + "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/e0f1e33a71587aca81be5cffbb9746510e1fe04e", + "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.35 || ~5.7 || ~6.4 || ~7.0", + "squizlabs/php_codesniffer": "~3.5" + }, + "type": "library", + "autoload": { + "psr-0": { + "JsonMapper": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@cweiske.de", + "homepage": "http://github.com/cweiske/jsonmapper/", + "role": "Developer" + } + ], + "description": "Map nested JSON structures onto PHP classes", + "support": { + "email": "cweiske@cweiske.de", + "issues": "https://github.com/cweiske/jsonmapper/issues", + "source": "https://github.com/cweiske/jsonmapper/tree/master" + }, + "time": "2020-04-16T18:48:43+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.10.5", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f", + "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f", + "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.10.5" + }, + "time": "2021-05-03T19:11:20+00:00" + }, + { + "name": "openlss/lib-array2xml", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/nullivex/lib-array2xml.git", + "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", + "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "LSS": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Bryan Tong", + "email": "bryan@nullivex.com", + "homepage": "https://www.nullivex.com" + }, + { + "name": "Tony Butler", + "email": "spudz76@gmail.com", + "homepage": "https://www.nullivex.com" + } + ], + "description": "Array2XML conversion library credit to lalit.org", + "homepage": "https://www.nullivex.com", + "keywords": [ + "array", + "array conversion", + "xml", + "xml conversion" + ], + "support": { + "issues": "https://github.com/nullivex/lib-array2xml/issues", + "source": "https://github.com/nullivex/lib-array2xml/tree/master" + }, + "time": "2019-03-29T20:06:56+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "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/master" + }, + "time": "2020-06-27T14:33:11+00:00" + }, + { + "name": "phar-io/version", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "bae7c545bef187884426f042434e561ab1ddb182" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "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.1.0" + }, + "time": "2021-02-23T14:00:09+00:00" + }, + { + "name": "php-http/psr7-integration-tests", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/psr7-integration-tests.git", + "reference": "dbc81e59655c3d927ba62b2cd38be9af334590fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/psr7-integration-tests/zipball/dbc81e59655c3d927ba62b2cd38be9af334590fc", + "reference": "dbc81e59655c3d927ba62b2cd38be9af334590fc", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpunit/phpunit": "^8.0 || ^9.3", + "psr/http-message": "^1.0" + }, + "require-dev": { + "guzzlehttp/psr7": "^1.4", + "laminas/laminas-diactoros": "^2.1", + "nyholm/psr7": "^1.0", + "ringcentral/psr7": "^1.2", + "slim/psr7": "dev-master" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Psr7Test\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + } + ], + "description": "Test suite for PSR7", + "homepage": "http://php-http.org", + "keywords": [ + "psr-7", + "test" + ], + "support": { + "issues": "https://github.com/php-http/psr7-integration-tests/issues", + "source": "https://github.com/php-http/psr7-integration-tests/tree/1.1.1" + }, + "time": "2020-11-02T14:08:03+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.2.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "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" + }, + "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/master" + }, + "time": "2020-09-03T19:13:55+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "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.4.0" + }, + "time": "2020-09-17T18:55:26+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.13.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11.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/1.13.0" + }, + "time": "2021-03-17T13:42:18+00:00" + }, + { + "name": "phpspec/prophecy-phpunit", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy-phpunit.git", + "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/2d7a9df55f257d2cba9b1d0c0963a54960657177", + "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8", + "phpspec/prophecy": "^1.3", + "phpunit/phpunit": "^9.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\PhpUnit\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + } + ], + "description": "Integrating the Prophecy mocking library in PHPUnit test cases", + "homepage": "http://phpspec.net", + "keywords": [ + "phpunit", + "prophecy" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy-phpunit/issues", + "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.0.1" + }, + "time": "2020-07-09T08:33:42+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "f6293e1b30a2354e8428e004689671b83871edde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", + "reference": "f6293e1b30a2354e8428e004689671b83871edde", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.10.2", + "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.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-03-28T07:26:59+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "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.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:57:25+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.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "c73c6737305e779771147af66c96ca6a7ed8a741" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c73c6737305e779771147af66c96ca6a7ed8a741", + "reference": "c73c6737305e779771147af66c96ca6a7ed8a741", + "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.1", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.3", + "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": "^2.3", + "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": { + "classmap": [ + "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" + ] + }, + "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.4" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-03-23T07:16:29+00:00" + }, + { + "name": "psalm/plugin-phpunit", + "version": "0.14.0", + "source": { + "type": "git", + "url": "https://github.com/psalm/psalm-plugin-phpunit.git", + "reference": "f5147be764449ff5a11bded483b622e1e868f8ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/f5147be764449ff5a11bded483b622e1e868f8ab", + "reference": "f5147be764449ff5a11bded483b622e1e868f8ab", + "shasum": "" + }, + "require": { + "composer/package-versions-deprecated": "^1.10", + "composer/semver": "^1.4 || ^2.0 || ^3.0", + "ext-simplexml": "*", + "php": "^7.1 || ^8.0", + "vimeo/psalm": "dev-master || dev-4.x || ^4.0" + }, + "conflict": { + "phpunit/phpunit": "<7.5" + }, + "require-dev": { + "codeception/codeception": "^4.0.3", + "php": "^7.3 || ^8.0", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.0", + "squizlabs/php_codesniffer": "^3.3.1", + "weirdan/codeception-psalm-module": "^0.11.0", + "weirdan/prophecy-shim": "^1.0 || ^2.0" + }, + "type": "psalm-plugin", + "extra": { + "psalm": { + "pluginClass": "Psalm\\PhpUnitPlugin\\Plugin" + } + }, + "autoload": { + "psr-4": { + "Psalm\\PhpUnitPlugin\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Brown", + "email": "github@muglug.com" + } + ], + "description": "Psalm plugin for PHPUnit", + "support": { + "issues": "https://github.com/psalm/psalm-plugin-phpunit/issues", + "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.14.0" + }, + "time": "2020-12-08T22:25:25+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/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.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "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": "http://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.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:24:23+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "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.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:55:19+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" + } + ], + "abandoned": true, + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "2.3.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-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/2.3.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:18:59+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": "squizlabs/php_codesniffer", + "version": "2.9.2", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "2acf168de78487db620ab4bc524135a13cfe6745" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745", + "reference": "2acf168de78487db620ab4bc524135a13cfe6745", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "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": "http://www.squizlabs.com/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": "2018-11-07T22:31:41+00:00" + }, + { + "name": "symfony/console", + "version": "v5.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "864568fdc0208b3eba3638b6000b69d2386e6768" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/864568fdc0208b3eba3638b6000b69d2386e6768", + "reference": "864568fdc0208b3eba3638b6000b69d2386e6768", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" + }, + "conflict": { + "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" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.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.2.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-11T15:45:21+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "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.22.1" + }, + "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-01-07T16:49:33+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for 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.22.1" + }, + "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-01-22T09:19:47+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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.22.1" + }, + "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-01-22T09:19:47+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" + }, + "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-01-22T09:19:47+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", + "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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.22.1" + }, + "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-01-07T16:49:33+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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.22.1" + }, + "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-01-07T16:49:33+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-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.4.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-04-01T10:43:52+00:00" + }, + { + "name": "symfony/string", + "version": "v5.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db", + "reference": "01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db", + "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" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "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.2.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-10T14:56:10+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "75a63c33a8577608444246075ea0af0d052e452a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "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/master" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2020-07-12T23:59:07+00:00" + }, + { + "name": "vimeo/psalm", + "version": "4.7.2", + "source": { + "type": "git", + "url": "https://github.com/vimeo/psalm.git", + "reference": "83a0325c0a95c0ab531d6b90c877068b464377b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/83a0325c0a95c0ab531d6b90c877068b464377b5", + "reference": "83a0325c0a95c0ab531d6b90c877068b464377b5", + "shasum": "" + }, + "require": { + "amphp/amp": "^2.4.2", + "amphp/byte-stream": "^1.5", + "composer/package-versions-deprecated": "^1.8.0", + "composer/semver": "^1.4 || ^2.0 || ^3.0", + "composer/xdebug-handler": "^1.1 || ^2.0", + "dnoegel/php-xdg-base-dir": "^0.1.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-tokenizer": "*", + "felixfbecker/advanced-json-rpc": "^3.0.3", + "felixfbecker/language-server-protocol": "^1.5", + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "nikic/php-parser": "^4.10.1", + "openlss/lib-array2xml": "^1.0", + "php": "^7.1|^8", + "sebastian/diff": "^3.0 || ^4.0", + "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0", + "webmozart/path-util": "^2.3" + }, + "provide": { + "psalm/psalm": "self.version" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "brianium/paratest": "^4.0||^6.0", + "ext-curl": "*", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpdocumentor/reflection-docblock": "^5", + "phpmyadmin/sql-parser": "5.1.0||dev-master", + "phpspec/prophecy": ">=1.9.0", + "phpunit/phpunit": "^9.0", + "psalm/plugin-phpunit": "^0.13", + "slevomat/coding-standard": "^6.3.11", + "squizlabs/php_codesniffer": "^3.5", + "symfony/process": "^4.3", + "weirdan/phpunit-appveyor-reporter": "^1.0.0", + "weirdan/prophecy-shim": "^1.0 || ^2.0" + }, + "suggest": { + "ext-igbinary": "^2.0.5" + }, + "bin": [ + "psalm", + "psalm-language-server", + "psalm-plugin", + "psalm-refactor", + "psalter" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev", + "dev-3.x": "3.x-dev", + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psalm\\": "src/Psalm/" + }, + "files": [ + "src/functions.php", + "src/spl_object_id.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Brown" + } + ], + "description": "A static analysis tool for finding errors in PHP applications", + "keywords": [ + "code", + "inspection", + "php" + ], + "support": { + "issues": "https://github.com/vimeo/psalm/issues", + "source": "https://github.com/vimeo/psalm/tree/4.7.2" + }, + "time": "2021-05-01T20:56:25+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" + }, + { + "name": "webmozart/path-util", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/path-util.git", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "webmozart/assert": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\PathUtil\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", + "support": { + "issues": "https://github.com/webmozart/path-util/issues", + "source": "https://github.com/webmozart/path-util/tree/2.3.0" + }, + "time": "2015-12-17T08:42:14+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "platform-dev": { + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-libxml": "*" + }, + "plugin-api-version": "2.1.0" +} diff --git a/vendor/laminas/laminas-diactoros/psalm-baseline.xml b/vendor/laminas/laminas-diactoros/psalm-baseline.xml new file mode 100644 index 00000000..1c9bade4 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/psalm-baseline.xml @@ -0,0 +1,1362 @@ + + + + + $contents + + + + + $previous->getCode() + $previous->getCode() + + + + + $code + + + $code + + + + + $code + + + $code + + + + + is_string($version) + + + $stream + + + $header + $header + + + $value + + + $headerNames + $headers + $new->headers + + + $header + $header + + + $new->headerNames + $new->headers + + + + + $maxLength + + + $maxLength + + + $this->resource + + + PhpInputStream + + + + + $this->decoratedStream->getSize() + + + + + + $headers + $method + $protocolVersion + $requestTarget + $uri + self::getValueFromKey($serializedRequest, 'body') + + + $headers + $method + $protocolVersion + $requestTarget + $uri + + + Request + + + + + + $body + $headers + $method + $requestTarget + $version + + + $request->getHeaders() + + + Request + + + + + is_string($method) + + + RequestInterface + RequestInterface + RequestInterface + + + $requestTarget + + + $this->uri->getPort() + $uri->getPort() + + + $uri === null + + + + + ! is_numeric($code) + gettype($code) + is_float($code) + is_string($reasonPhrase) + + + static::MAX_STATUS_CODE_VALUE + static::MIN_STATUS_CODE_VALUE + + + (int) $code + + + is_scalar($code) + + + + + $headers + $protocolVersion + $reasonPhrase + $statusCode + self::getValueFromKey($serializedResponse, 'body') + + + $headers + $protocolVersion + $reasonPhrase + $statusCode + + + + + new static(204, $headers) + + + + + is_string($html) + + + + + $carry + $item + + + $item + + + $hasContentType + + + + + json_encode + + + + + ! is_string($uri) && ! $uri instanceof UriInterface + + + + + $body + $headers + $reasonPhrase + $status + $version + + + $response->getHeaders() + + + (int) $status + + + + + is_string($text) + + + + + is_string($xml) + + + + + ! is_array($data) && ! is_object($data) && null !== $data + + + $attribute + $attribute + + + + + $headers['cookie'] + + + is_callable(self::$apacheRequestHeaders) + + + + + + $e + + + ?int + bool + + + $stats['size'] + + + $resource + + + $resource + + + $resource + $this->resource + $this->resource + $this->resource + + + $stream + + + is_resource($resource) + + + \GdImage + + + + + $file + + + + + ! is_string($targetPath) + + + $this->file + + + + + $stream + + + $size + + + + + ! is_numeric($port) + is_float($port) + is_object($port) + is_string($fragment) + is_string($host) + is_string($path) + is_string($query) + is_string($scheme) + is_string($user) + null !== $password && ! is_string($password) + + + $key + $key + $matches[0] + $port + $value + + + $this->port + + + (int) $port + + + gettype($port) + + + + + func_get_args() + + + + + $spec['error'] + $spec['name'] ?? null + $spec['tmp_name'] + $spec['type'] ?? null + + + + + func_get_args() + + + + + $headers[$name] + $headers[$name] + $value + + + + + func_get_args() + + + + + string + + + $server['REQUEST_METHOD'] ?? 'GET' + + + + + func_get_args() + + + + + $server['SERVER_PROTOCOL'] + + + + + func_get_args() + + + + + $default + $host + $https + + + function ($host) { + function (string $name, array $headers, $default = null) { + + + $getHeaderFromArray('x-forwarded-proto', $headers, '') + $host + $host + $host + $host + $port + $requestUri + $server['QUERY_STRING'] + + + $host + $iisUrlRewritten + $origPathInfo + $unencodedUrl + $value + + + array + string + + + $server['SERVER_ADDR'] + + + $defaults + $origPathInfo + $unencodedUrl + + + strrpos($host, ':') + + + + + func_get_args() + + + + + $apacheRequestHeaders['Authorization'] + $apacheRequestHeaders['authorization'] + + + $apacheRequestHeaders + $server['HTTP_AUTHORIZATION'] + $server['HTTP_AUTHORIZATION'] + + + + + func_get_args() + + + + + $normalized + + + UploadedFileInterface[] + + + $normalized[$key] + $value + $value + + + + array + + + + + + $cookieHeader + + + func_get_args() + + + + + function () { + + + $callback + $expected + + + $callback + + + $ret + $ret + + + array + + + + + $assertion + $expected + $value + $value + $value + + + assertValues + getFilterValues + testAssertValidRaisesExceptionForInvalidValue + testFiltersValuesPerRfc7230 + testValidatesValuesPerRfc7230 + validateValues + + + $value + $value + + + + + $stream + + + $stream->getSize() + + + + + $value + $value + $value + $value + $value + $value + $version + + + [ $value ] + [ $value ] + [ $value ] + + + + + $message + $test + + + assertStreamContents + getFileContents + testCanReadStreamIteratively + testCastingToStringReturnsFullContentsRegardlesOfPriorReads + testGetContentsReturnCacheWhenReachedEof + testGetContentsReturnsRemainingContentsOfStream + testMultipleCastsToStringReturnSameContentsEvenIfReadsOccur + testStreamIsNeverWritable + + + $contents + $message + + + $content + $contents + + + + + assertSame + + + testCanReadContentFromNotSeekableResource + testClose + testDetach + testGetContents + testGetContentsRaisesExceptionWhenPointerIsBehindOffset + testGetMetadata + testGetSize + testIsReadable + testIsSeekable + testIsWritable + testRead + testReadRaisesExceptionWhenPointerIsBehindOffset + testRewind + testSeek + testTell + testToString + testWrite + testWriteRaisesExceptionWhenPointerIsBehindOffset + + + + + testDeserializeFromArray + testMissingBodyParamInSerializedRequestThrowsException + testSerializeToArray + + + + + function () use ($payload) { + + + $exceptionMessage + $expectations + $expectations + $line + $line + $line + $message + $requestTarget + $requestTarget + $text + + + $exceptionMessage + $message + $text + + + $payload[$i++] + + + $expect + $expect + $i + $method + $method + + + array + array + array + array + array + + + $i + $line + $line + $line + + + + + 'UNLOCK' => ['UNLOCK'] + + + ['TOTALLY INVALID'] + + + $body + $contains + $expected + $headers + $hostKey + $method + $method + $method + $request + $requestTarget + $uri + $value + + + customRequestMethods + headersWithInjectionVectors + hostHeaderKeys + invalidHeaderTypes + invalidMethod + invalidRequestBody + invalidRequestMethod + invalidRequestUri + requestsWithUri + testAllowsCustomRequestMethodsThatFollowSpec + testCanProvideARequestTarget + testConstructorCanAcceptAllMessageParts + testConstructorRaisesExceptionForHeadersWithCRLFVectors + testConstructorRaisesExceptionForInvalidBody + testConstructorRaisesExceptionForInvalidHeaders + testConstructorRaisesExceptionForInvalidMethod + testConstructorRaisesExceptionForInvalidStream + testConstructorRaisesExceptionForInvalidUri + testDefaultStreamIsWritable + testGetHeadersContainsHostHeaderIfUriWithHostIsDeleted + testGetHeadersContainsHostHeaderIfUriWithHostIsPresent + testGetHeadersContainsNoHostHeaderIfNoUriPresent + testGetHeadersContainsNoHostHeaderIfUriDoesNotContainHost + testGetHostHeaderLineReturnsEmptyStringIfNoUriPresent + testGetHostHeaderLineReturnsEmptyStringIfUriDoesNotContainHost + testGetHostHeaderLineReturnsUriHostWhenPresent + testGetHostHeaderReturnsEmptyArrayIfNoUriPresent + testGetHostHeaderReturnsEmptyArrayIfUriDoesNotContainHost + testGetHostHeaderReturnsUriHostWhenHostHeaderDeleted + testGetHostHeaderReturnsUriHostWhenPresent + testHostHeaderNotSetFromUriOnCreationIfHostHeaderSpecified + testHostHeaderSetFromUriOnCreationIfNoHostHeaderSpecified + testHostHeaderUpdatesToUriHostAndPortWhenPreserveHostDisabledAndNonStandardPort + testMethodIsGetByDefault + testMethodMutatorReturnsCloneWithChangedMethod + testNotPassingPreserveHostFlagWhenUpdatingUriWithoutHostDoesNotUpdateHostHeader + testPassingPreserveHostFlagWhenUpdatingUriDoesNotUpdateHostHeader + testRequestTargetCannotContainWhitespace + testRequestTargetDoesNotCacheBetweenInstances + testRequestTargetIsSlashWhenNoUriPresent + testRequestTargetIsSlashWhenUriHasNoPathOrQuery + testReturnsRequestTargetWhenUriIsPresent + testReturnsUnpopulatedUriByDefault + testSettingNewUriResetsRequestTarget + testWithInvalidMethod + testWithUriAndNoPreserveHostWillOverwriteHostHeaderRegardlessOfOriginalCase + testWithUriReturnsNewInstanceWithNewUri + validRequestTargets + + + $body + $contains + $headers + $hostKey + $hostKey + $method + $method + $method + $requestTarget + $uri + + + getRequestTarget + + + + + createResponse + createSerializedResponse + testDeserializeFromArray + testMissingBodyParamInSerializedRequestThrowsException + testSerializeToArray + + + $response + $response + $serializedRequest + $serializedResponse + + + $serializedRequest['body'] + + + $response + $response + $serializedRequest + $serializedResponse + + + + + testConstructor + testHeaderConstructor + + + + + $body + + + invalidHtmlContent + testAllowsStreamsForResponseBody + testConstructorAcceptsHtmlString + testConstructorAllowsPassingHeaders + testConstructorAllowsPassingStatus + testConstructorRewindsBodyStream + testRaisesExceptionforNonStringNonStreamBodyContent + + + $body + + + + + $value + $value + + + scalarValuesForJSON + testCanProvideAlternateContentTypeViaHeadersPassedToConstructor + testCanProvideStatusCodeToConstructor + testConstructorAcceptsDataAndCreatesJsonEncodedMessageBody + testConstructorRewindsBodyStream + testEncodingOptionsGetter + testJsonErrorHandlingOfBadEmbeddedData + testJsonErrorHandlingOfResources + testModifyingThePayloadDoesntMutateResponseInstance + testPayloadGetter + testScalarValuePassedToConstructorJsonEncodesDirectly + testUsesSaneDefaultJsonEncodingFlags + testWithEncodingOptions + testWithPayload + valuesToJsonEncode + + + + + $uri + + + invalidUris + testConstructorAcceptsStringUriAndProduces302ResponseWithLocationHeader + testConstructorAcceptsUriInstanceAndProduces302ResponseWithLocationHeader + testConstructorAllowsSpecifyingAlternateStatusCode + testConstructorAllowsSpecifyingHeaders + testConstructorRaisesExceptionOnInvalidUri + + + $uri + + + + + $exceptionMessage + $message + $text + + + headersWithContinuationLines + messagesWithInvalidHeaders + testCanDeserializeBasicResponse + testCanDeserializeResponseWithHeaderContinuations + testCanDeserializeResponseWithMultipleHeadersOfSameName + testCanDeserializeResponseWithoutBody + testCanDeserializeResponseWithoutHeadersButContainingBody + testCanDeserializeResponseWithoutHeadersOrBody + testDeserializationRaisesExceptionForInvalidStatusLine + testDeserializationRaisesExceptionForMalformedHeaders + testDeserializeCorrectlyCastsStatusCodeToInteger + testFromStreamThrowsExceptionWhenStreamIsNotReadable + testFromStreamThrowsExceptionWhenStreamIsNotSeekable + testOmitsReasonPhraseFromStatusLineIfEmpty + testSerializesBasicResponse + testSerializesMultipleHeadersCorrectly + testSerializesResponseWithoutBodyCorrectly + + + $exceptionMessage + $message + $text + + + + + $body + + + invalidContent + testAllowsStreamsForResponseBody + testConstructorAcceptsBodyAsString + testConstructorAllowsPassingHeaders + testConstructorAllowsPassingStatus + testConstructorRewindsBodyStream + testRaisesExceptionforNonStringNonStreamBodyContent + + + $body + + + + + $body + + + invalidContent + testAllowsStreamsForResponseBody + testConstructorAcceptsBodyAsString + testConstructorAllowsPassingHeaders + testConstructorAllowsPassingStatus + testConstructorRewindsBodyStream + testRaisesExceptionforNonStringNonStreamBodyContent + + + $body + + + + + [ 'TOTALLY INVALID' ] + + + $body + $code + $code + $code + $contains + $headers + $invalidReasonPhrase + $reasonPhrase + $value + + + headersWithInjectionVectors + ianaCodesReasonPhrasesProvider + invalidHeaderTypes + invalidReasonPhrases + invalidResponseBody + invalidStatusCodes + testCanSetCustomReasonPhrase + testCannotSetInvalidStatusCode + testConstructorCanAcceptAllMessageParts + testConstructorRaisesExceptionForHeadersWithCRLFVectors + testConstructorRaisesExceptionForInvalidBody + testConstructorRaisesExceptionForInvalidHeaders + testConstructorRaisesExceptionForInvalidStream + testCreateWithValidStatusCodes + testReasonPhraseCanBeEmpty + testReasonPhraseDefaultsAgainstIana + testReasonPhraseDefaultsToStandards + testStatusCodeIs200ByDefault + testStatusCodeMutatorReturnsCloneWithChanges + testWithStatusRaisesAnExceptionForNonStringReasonPhrases + validStatusCodes + + + $body + $code + $code + $code + $contains + $headers + $invalidReasonPhrase + + + $responseCode + + + $response + + + assertIsInt + + + $value + + + + + $normalizedFiles['fooFiles'] + + + $expected + $protocol + + + cookieHeaderValues + marshalProtocolVersionProvider + testCanCreateServerRequestViaFromGlobalsMethod + testCookieHeaderVariations + testCreateFromGlobalsShouldNotPreserveKeysWhenCreatedWithAnEmptyValue + testCreateFromGlobalsShouldPreserveKeysWhenCreatedWithAZeroValue + testFromGlobalsUsesCookieHeaderInsteadOfCookieSuperGlobal + testFromGlobalsUsesCookieSuperGlobalWhenCookieHeaderIsNotSet + testMarshalHostAndPortReturnsEmptyValuesIfNoHostHeaderAndNoServerName + testMarshalHostAndPortReturnsServerAddrForHostIfPresentAndHostIsIpv6Address + testMarshalHostAndPortReturnsServerNameForHostIfServerAddrPresentButHostIsNotIpv6Address + testMarshalHostAndPortReturnsServerNameForHostWhenPresent + testMarshalHostAndPortReturnsServerPortForPortWhenPresentWithServerName + testMarshalHostAndPortUsesHostHeaderWhenPresent + testMarshalHostAndPortWillDetectPortInHostHeaderWhenPresent + testMarshalHostAndPortWillDetectPortInIpv6StyleHost + testMarshalInvalidHeadersStrippedFromServerArray + testMarshalProtocolReturnsDefaultValueIfHeaderIsNotPresent + testMarshalProtocolVersionReturnsHttpVersions + testMarshalProtocolVersionRisesExceptionIfVersionIsNotRecognized + testMarshalRequestUriFallsBackToRoot + testMarshalRequestUriPrefersRequestUriServerParamWhenXOriginalUrlButNoXRewriteUrlPresent + testMarshalRequestUriStripsSchemeHostAndPortInformationWhenPresent + testMarshalRequestUriUsesIISUnencodedUrlValueIfPresentAndUrlWasRewritten + testMarshalRequestUriUsesOrigPathInfoIfPresent + testMarshalUriDetectsHttpsSchemeFromServerValue + testMarshalUriDetectsHttpsSchemeFromXForwardedProtoValue + testMarshalUriInjectsFragmentFromServer + testMarshalUriInjectsQueryStringFromServer + testMarshalUriStripsQueryStringFromRequestUri + testMarshalUriUsesHttpSchemeIfHttpsServerValueEqualsOff + testMarshalsExpectedHeadersFromServerArray + testMarshalsVariablesPrefixedByApacheFromServerArray + testNormalizeFilesReturnsOnlyActualFilesWhenOriginalFilesContainsNestedAssociativeArrays + testNormalizeServerReturnsArrayUnalteredIfApacheHeadersDoNotContainAuthorization + testNormalizeServerUsesLowerCaseAuthorizationHeaderFromApacheWhenPresent + testNormalizeServerUsesMixedCaseAuthorizationHeaderFromApacheWhenPresent + testReturnsServerValueUnchangedIfHttpAuthorizationHeaderIsPresent + testServerRequestFactoryHasAWritableEmptyBody + + + $data + + + $data + $param + + + array + iterable + + + + + $parsedBody + + + $methodReturned + $parameterMethod + $request + + + provideMethods + testAllowsRemovingAttributeWithNullValue + testAllowsRemovingNonExistentAttribute + testAttributeMutatorReturnsCloneWithChanges + testAttributesAreEmptyByDefault + testCookieParamsAreAnEmptyArrayAtInitialization + testCookiesAreEmptyByDefault + testCookiesMutatorReturnsCloneWithChanges + testNestedUploadedFiles + testParsedBodyIsEmptyByDefault + testParsedBodyIsNullAtInitialization + testParsedBodyMutatorReturnsCloneWithChanges + testQueryParamsAreAnEmptyArrayAtInitialization + testQueryParamsAreEmptyByDefault + testQueryParamsMutatorReturnsCloneWithChanges + testRemovingAttributeReturnsCloneWithoutAttribute + testServerParamsAreEmptyByDefault + testSingleAttributesWhenEmptyByDefault + testTryToAddInvalidUploadedFiles + testUploadedFilesAreEmptyByDefault + testUsesProvidedConstructorArguments + + + $parameterMethod + + + $new + + + getAttribute + withoutAttribute + + + + + setMethods + + + [' THIS WILL NOT WORK '] + + + $fileShouldExist + $fileShouldExist + $flag + $flag + $mode + $mode + $resource + + + $tmpnam + + + findNonExistentTempName + getResourceFor67 + invalidResources + provideDataForIsReadable + provideDataForIsWritable + testAttachWithInvalidStringResourceRaisesException + testAttachWithNonStringNonResourceRaisesException + testAttachWithResourceAttachesResource + testAttachWithStringRepresentingResourceCreatesAndAttachesResource + testCanInstantiateWithGDResource + testCanInstantiateWithStreamIdentifier + testCanInstantiteWithStreamResource + testCanReadContentFromNotSeekableResource + testCloseClosesResource + testCloseDoesNothingAfterDetach + testCloseUnsetsResource + testDetachReturnsResource + testEofReportsFalseWhenNotAtEndOfStream + testEofReportsTrueWhenAtEndOfStream + testEofReportsTrueWhenStreamIsDetached + testGetContentsRisesExceptionIfStreamIsNotReadable + testGetContentsShouldGetFullStreamContents + testGetContentsShouldReturnStreamContentsFromCurrentPointer + testGetMetadataReturnsAllMetadataWhenNoKeyPresent + testGetMetadataReturnsDataForSpecifiedKey + testGetMetadataReturnsNullIfNoDataExistsForKey + testGetSizeReturnsStreamSize + testIsReadableReturnsCorrectFlagForMode + testIsReadableReturnsFalseIfStreamIsNotReadable + testIsReadableReturnsFalseWhenStreamIsDetached + testIsSeekableReturnsFalseForDetachedStreams + testIsSeekableReturnsTrueForReadableStreams + testIsWritableReturnsCorrectFlagForMode + testIsWritableReturnsFalseIfStreamIsNotWritable + testIsWritableReturnsFalseWhenStreamIsDetached + testIsWritableReturnsTrueForWritableMemoryStream + testPassingInvalidStreamResourceToConstructorRaisesException + testRaisesExceptionOnAttachForNonStreamResources + testRaisesExceptionOnConstructionForNonStreamResources + testReadRaisesExceptionWhenStreamIsDetached + testReadReturnsEmptyStringWhenAtEndOfFile + testRewindResetsToStartOfStream + testSeekAdvancesToGivenOffsetOfStream + testSeekRaisesExceptionWhenStreamIsDetached + testSizeReportsNullForPhpInputStreams + testSizeReportsNullWhenNoResourcePresent + testStringSerializationReturnsEmptyStringWhenStreamIsNotReadable + testTellRaisesExceptionIfResourceIsDetached + testTellReportsCurrentPositionInResource + testToStringRetrievesFullContentsOfStream + testWriteRaisesExceptionWhenStreamIsDetached + testWriteRaisesExceptionWhenStreamIsNotWritable + + + $mode + $mode + $resource + $resource + $resource + $this->tmpnam + $this->tmpnam + $this->tmpnam + $this->tmpnam + + + $resource + $resource + $test + + + + + push + reset + + + + + $stream + $stream + $stream + $stream + $stream + + + $path + $status + $status + $status + $status + $streamOrFile + + + $tmpFile + + + errorConstantsAndMessages + invalidErrorStatuses + invalidMovePaths + invalidStreams + nonOkErrorStatus + testCannotRetrieveStreamAfterMove + testConstructorDoesNotRaiseExceptionForInvalidStreamWhenErrorStatusPresent + testGetStreamRaisesExceptionWhenErrorStatusPresent + testGetStreamRaisesExceptionWithAppropriateMessageWhenUploadErrorDetected + testGetStreamReturnsOriginalStreamObject + testGetStreamReturnsStreamForFile + testGetStreamReturnsWrappedPhpStream + testMoveCannotBeCalledMoreThanOnce + testMoveRaisesExceptionForInvalidPath + testMoveToCreatesStreamIfOnlyAFilenameWasProvided + testMoveToRaisesExceptionWhenErrorStatusPresent + testMoveToRaisesExceptionWithAppropriateMessageWhenUploadErrorDetected + testMovesFileToDesignatedPath + testRaisesExceptionOnInvalidErrorStatus + testRaisesExceptionOnInvalidStreamOrFile + testValidClientFilename + testValidClientMediaType + testValidNullClientFilename + testValidSize + + + $path + $status + $status + $status + $status + $streamOrFile + + + $this->tmpfile + + + + + '3001' + 1 + + + $credential + $expected + $expected + $expected + $expected + $method + $method + $path + $port + $port + $port + $query + $query + $query + $result + $result + $scheme + $scheme + $scheme + $url + $url + $url + $user + $value + $value + + + authorityInfo + invalidPaths + invalidPorts + invalidQueryStrings + invalidSchemes + invalidStringComponentValues + mutations + queryStringsForEncoding + standardSchemePortCombinations + testAuthorityIsPrefixedByDoubleSlashIfPresent + testAuthorityOmitsPortForStandardSchemePortCombinations + testCanEmitOriginFormUrl + testCanSerializeToString + testConstructWithUnsupportedSchemeRaisesAnException + testConstructorRaisesExceptionForSeriouslyMalformedURI + testConstructorSetsAllProperties + testESchemeStripsOffDelimiter + testEmptyPathOnOriginFormRemainsAnEmptyPath + testEncodeFragmentPrefixIfPresent + testFragmentIsNotDoubleEncoded + testFragmentIsProperlyEncoded + testHostIsLowercase + testHostIsLowercaseWhenIsSetViwWithHost + testMutatingSchemeStripsOffDelimiter + testMutatingWithUnsupportedSchemeRaisesAnException + testMutationResetsUriStringPropertyInClone + testPassingInvalidValueToWithMethodRaisesException + testPathDoesNotBecomeDoubleEncoded + testPathIsNotPrefixedWithSlashIfSetWithoutOne + testPathIsProperlyEncoded + testPathNotSlashPrefixedIsEmittedWithSlashDelimiterWhenUriIsCastToString + testProperlyTrimsLeadingSlashesToPreventXSS + testQueryIsNotDoubleEncoded + testQueryIsProperlyEncoded + testReservedCharsInPathUnencoded + testRetrievingAuthorityReturnsExpectedValues + testSettingEmptyPathOnAbsoluteUriReturnsAnEmptyPath + testStringRepresentationOfAbsoluteUriWithNoPathSetsAnEmptyPath + testStringRepresentationOfOriginFormWithNoPathRetainsEmptyPath + testStripsQueryPrefixIfPresent + testUriDistinguishZeroFromEmptyString + testUriDoesNotAppendColonToHostIfPortIsEmpty + testUtf8Path + testUtf8Query + testUtf8Uri + testWithFragmentReturnsNewInstanceWithProvidedFragment + testWithFragmentReturnsSameInstanceWithProvidedFragmentSameAsBefore + testWithHostReturnsNewInstanceWithProvidedHost + testWithHostReturnsSameInstanceWithProvidedHostIsSameAsBefore + testWithPathRaisesExceptionForInvalidPaths + testWithPathReturnsNewInstanceWithProvidedPath + testWithPathReturnsSameInstanceWithProvidedPathSameAsBefore + testWithPortRaisesExceptionForInvalidPorts + testWithPortReturnsNewInstanceWithProvidedPort + testWithPortReturnsSameInstanceWithProvidedPortIsSameAsBefore + testWithQueryRaisesExceptionForInvalidQueryStrings + testWithQueryReturnsNewInstanceWithProvidedQuery + testWithSchemeReturnsNewInstanceWithNewScheme + testWithSchemeReturnsSameInstanceWithSameScheme + testWithUserInfoEncodesUsernameAndPassword + testWithUserInfoReturnsNewInstanceWithProvidedUser + testWithUserInfoReturnsNewInstanceWithProvidedUserAndPassword + testWithUserInfoReturnsSameInstanceIfUserAndPasswordAreSameAsBefore + testWithUserInfoThrowExceptionIfPasswordIsNotString + userInfoProvider + utf8PathsDataProvider + utf8QueryStringsDataProvider + validPorts + + + $credential + $expected + $path + $port + $port + $port + $query + $query + $scheme + $scheme + $test + $url + $url + $url + $user + + + $test + + + $port + $scheme + + + + + array + array + + + + + testCreatesUploadedFileFromFlatFileSpecification + testTraversesDenormalizedNestedTreeOfIndicesToExtractUploadedFiles + testTraversesNestedFileSpecificationContainingNumericIndicesToExtractUploadedFiles + testTraversesNestedFileSpecificationToExtractUploadedFile + + + $normalised['my-form']['details']['avatars'] + $normalised['slide-shows'][0]['slides'] + + + $normalised['my-form']['details']['avatar'] + $normalised['my-form']['details']['avatars'] + $normalised['my-form']['details']['avatars'] + $normalised['my-form']['details']['avatars'] + $normalised['my-form']['details']['avatars'] + $normalised['slide-shows'][0]['slides'] + $normalised['slide-shows'][0]['slides'] + $normalised['slide-shows'][0]['slides'] + + + getClientFilename + getClientFilename + getClientFilename + getClientFilename + getClientFilename + getClientFilename + + + $normalised['my-form'] + $normalised['my-form'] + $normalised['my-form'] + $normalised['my-form'] + $normalised['my-form'] + $normalised['slide-shows'] + $normalised['slide-shows'] + $normalised['slide-shows'] + + + diff --git a/vendor/laminas/laminas-diactoros/psalm.xml.dist b/vendor/laminas/laminas-diactoros/psalm.xml.dist new file mode 100644 index 00000000..87b4eb29 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/psalm.xml.dist @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/laminas/laminas-diactoros/src/AbstractSerializer.php b/vendor/laminas/laminas-diactoros/src/AbstractSerializer.php new file mode 100644 index 00000000..de21b19e --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/AbstractSerializer.php @@ -0,0 +1,148 @@ +eof()) { + $char = $stream->read(1); + + if ($crFound && $char === self::LF) { + $crFound = false; + break; + } + + // CR NOT followed by LF + if ($crFound && $char !== self::LF) { + throw Exception\DeserializationException::forUnexpectedCarriageReturn(); + } + + // LF in isolation + if (! $crFound && $char === self::LF) { + throw Exception\DeserializationException::forUnexpectedLineFeed(); + } + + // CR found; do not append + if ($char === self::CR) { + $crFound = true; + continue; + } + + // Any other character: append + $line .= $char; + } + + // CR found at end of stream + if ($crFound) { + throw Exception\DeserializationException::forUnexpectedEndOfHeaders(); + } + + return $line; + } + + /** + * Split the stream into headers and body content. + * + * Returns an array containing two elements + * + * - The first is an array of headers + * - The second is a StreamInterface containing the body content + * + * @throws Exception\DeserializationException For invalid headers. + */ + protected static function splitStream(StreamInterface $stream) : array + { + $headers = []; + $currentHeader = false; + + while ($line = self::getLine($stream)) { + if (preg_match(';^(?P[!#$%&\'*+.^_`\|~0-9a-zA-Z-]+):(?P.*)$;', $line, $matches)) { + $currentHeader = $matches['name']; + if (! isset($headers[$currentHeader])) { + $headers[$currentHeader] = []; + } + $headers[$currentHeader][] = ltrim($matches['value']); + continue; + } + + if (! $currentHeader) { + throw Exception\DeserializationException::forInvalidHeader(); + } + + if (! preg_match('#^[ \t]#', $line)) { + throw Exception\DeserializationException::forInvalidHeaderContinuation(); + } + + // Append continuation to last header value found + $value = array_pop($headers[$currentHeader]); + $headers[$currentHeader][] = $value . ltrim($line); + } + + // use RelativeStream to avoid copying initial stream into memory + return [$headers, new RelativeStream($stream, $stream->tell())]; + } + + /** + * Serialize headers to string values. + * + * @psalm-param array $headers + */ + protected static function serializeHeaders(array $headers) : string + { + $lines = []; + foreach ($headers as $header => $values) { + $normalized = self::filterHeader($header); + foreach ($values as $value) { + $lines[] = sprintf('%s: %s', $normalized, $value); + } + } + + return implode("\r\n", $lines); + } + + /** + * Filter a header name to wordcase + * + * @param string $header + */ + protected static function filterHeader($header) : string + { + $filtered = str_replace('-', ' ', $header); + $filtered = ucwords($filtered); + return str_replace(' ', '-', $filtered); + } +} diff --git a/vendor/laminas/laminas-diactoros/src/CallbackStream.php b/vendor/laminas/laminas-diactoros/src/CallbackStream.php new file mode 100644 index 00000000..e872672f --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/CallbackStream.php @@ -0,0 +1,180 @@ +attach($callback); + } + + /** + * {@inheritdoc} + */ + public function __toString() : string + { + return $this->getContents(); + } + + /** + * {@inheritdoc} + */ + public function close() : void + { + $this->callback = null; + } + + /** + * {@inheritdoc} + */ + public function detach() : ?callable + { + $callback = $this->callback; + $this->callback = null; + return $callback; + } + + /** + * Attach a new callback to the instance. + */ + public function attach(callable $callback) : void + { + $this->callback = $callback; + } + + /** + * {@inheritdoc} + */ + public function getSize() : ?int + { + return null; + } + + /** + * {@inheritdoc} + */ + public function tell() : int + { + throw Exception\UntellableStreamException::forCallbackStream(); + } + + /** + * {@inheritdoc} + */ + public function eof() : bool + { + return empty($this->callback); + } + + /** + * {@inheritdoc} + */ + public function isSeekable() : bool + { + return false; + } + + /** + * {@inheritdoc} + * @param int $offset + * @param int $whence + * @return void + */ + public function seek($offset, $whence = SEEK_SET) + { + throw Exception\UnseekableStreamException::forCallbackStream(); + } + + /** + * {@inheritdoc} + */ + public function rewind() : void + { + throw Exception\UnrewindableStreamException::forCallbackStream(); + } + + /** + * {@inheritdoc} + */ + public function isWritable() : bool + { + return false; + } + + /** + * {@inheritdoc} + */ + public function write($string) : void + { + throw Exception\UnwritableStreamException::forCallbackStream(); + } + + /** + * {@inheritdoc} + */ + public function isReadable() : bool + { + return false; + } + + /** + * {@inheritdoc} + */ + public function read($length) : string + { + throw Exception\UnreadableStreamException::forCallbackStream(); + } + + /** + * {@inheritdoc} + */ + public function getContents() : string + { + $callback = $this->detach(); + $contents = $callback ? $callback() : ''; + return (string) $contents; + } + + /** + * {@inheritdoc} + */ + public function getMetadata($key = null) + { + $metadata = [ + 'eof' => $this->eof(), + 'stream_type' => 'callback', + 'seekable' => false + ]; + + if (null === $key) { + return $metadata; + } + + if (! array_key_exists($key, $metadata)) { + return null; + } + + return $metadata[$key]; + } +} diff --git a/vendor/laminas/laminas-diactoros/src/ConfigProvider.php b/vendor/laminas/laminas-diactoros/src/ConfigProvider.php new file mode 100644 index 00000000..32510d1f --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/ConfigProvider.php @@ -0,0 +1,45 @@ + $this->getDependencies(), + ]; + } + + /** + * Returns the container dependencies. + * Maps factory interfaces to factories. + */ + public function getDependencies() : array + { + return [ + 'invokables' => [ + RequestFactoryInterface::class => RequestFactory::class, + ResponseFactoryInterface::class => ResponseFactory::class, + StreamFactoryInterface::class => StreamFactory::class, + ServerRequestFactoryInterface::class => ServerRequestFactory::class, + UploadedFileFactoryInterface::class => UploadedFileFactory::class, + UriFactoryInterface::class => UriFactory::class + ], + ]; + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Exception/DeserializationException.php b/vendor/laminas/laminas-diactoros/src/Exception/DeserializationException.php new file mode 100644 index 00000000..61f5c7c6 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Exception/DeserializationException.php @@ -0,0 +1,46 @@ +getCode(), $previous); + } + + public static function forResponseFromArray(Throwable $previous) : self + { + return new self('Cannot deserialize response', $previous->getCode(), $previous); + } + + public static function forUnexpectedCarriageReturn() : self + { + throw new self('Unexpected carriage return detected'); + } + + public static function forUnexpectedEndOfHeaders() : self + { + throw new self('Unexpected end of headers'); + } + + public static function forUnexpectedLineFeed() : self + { + throw new self('Unexpected line feed detected'); + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Exception/ExceptionInterface.php b/vendor/laminas/laminas-diactoros/src/Exception/ExceptionInterface.php new file mode 100644 index 00000000..e9c38304 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Exception/ExceptionInterface.php @@ -0,0 +1,14 @@ + 254 + ) { + continue; + } + + $string .= $value[$i]; + } + + return $string; + } + + /** + * Validate a header value. + * + * Per RFC 7230, only VISIBLE ASCII characters, spaces, and horizontal + * tabs are allowed in values; header continuations MUST consist of + * a single CRLF sequence followed by a space or horizontal tab. + * + * @param string|int|float $value + * @see http://en.wikipedia.org/wiki/HTTP_response_splitting + */ + public static function isValid($value) : bool + { + $value = (string) $value; + + // Look for: + // \n not preceded by \r, OR + // \r not followed by \n, OR + // \r\n not followed by space or horizontal tab; these are all CRLF attacks + if (preg_match("#(?:(?:(? array of values. + * + * @var array + * + * @psalm-var array> + */ + protected $headers = []; + + /** + * Map of normalized header name to original name used to register header. + * + * @var array + * + * @psalm-var array + */ + protected $headerNames = []; + + /** + * @var string + */ + private $protocol = '1.1'; + + /** + * @var StreamInterface + */ + private $stream; + + /** + * Retrieves the HTTP protocol version as a string. + * + * The string MUST contain only the HTTP version number (e.g., "1.1", "1.0"). + * + * @return string HTTP protocol version. + */ + public function getProtocolVersion() : string + { + return $this->protocol; + } + + /** + * Return an instance with the specified HTTP protocol version. + * + * The version string MUST contain only the HTTP version number (e.g., + * "1.1", "1.0"). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new protocol version. + * + * @param string $version HTTP protocol version + * @return static + */ + public function withProtocolVersion($version) : MessageInterface + { + $this->validateProtocolVersion($version); + $new = clone $this; + $new->protocol = $version; + return $new; + } + + /** + * Retrieves all message headers. + * + * The keys represent the header name as it will be sent over the wire, and + * each value is an array of strings associated with the header. + * + * // Represent the headers as a string + * foreach ($message->getHeaders() as $name => $values) { + * echo $name . ": " . implode(", ", $values); + * } + * + * // Emit headers iteratively: + * foreach ($message->getHeaders() as $name => $values) { + * foreach ($values as $value) { + * header(sprintf('%s: %s', $name, $value), false); + * } + * } + * + * @return array Returns an associative array of the message's headers. Each + * key MUST be a header name, and each value MUST be an array of strings. + * + * @psalm-return array> + */ + public function getHeaders() : array + { + return $this->headers; + } + + /** + * Checks if a header exists by the given case-insensitive name. + * + * @param string $header Case-insensitive header name. + * @return bool Returns true if any header names match the given header + * name using a case-insensitive string comparison. Returns false if + * no matching header name is found in the message. + */ + public function hasHeader($header) : bool + { + return isset($this->headerNames[strtolower($header)]); + } + + /** + * Retrieves a message header value by the given case-insensitive name. + * + * This method returns an array of all the header values of the given + * case-insensitive header name. + * + * If the header does not appear in the message, this method MUST return an + * empty array. + * + * @param string $header Case-insensitive header field name. + * @return string[] An array of string values as provided for the given + * header. If the header does not appear in the message, this method MUST + * return an empty array. + */ + public function getHeader($header) : array + { + if (! $this->hasHeader($header)) { + return []; + } + + $header = $this->headerNames[strtolower($header)]; + + return $this->headers[$header]; + } + + /** + * Retrieves a comma-separated string of the values for a single header. + * + * This method returns all of the header values of the given + * case-insensitive header name as a string concatenated together using + * a comma. + * + * NOTE: Not all header values may be appropriately represented using + * comma concatenation. For such headers, use getHeader() instead + * and supply your own delimiter when concatenating. + * + * If the header does not appear in the message, this method MUST return + * an empty string. + * + * @param string $name Case-insensitive header field name. + * @return string A string of values as provided for the given header + * concatenated together using a comma. If the header does not appear in + * the message, this method MUST return an empty string. + */ + public function getHeaderLine($name) : string + { + $value = $this->getHeader($name); + if (empty($value)) { + return ''; + } + + return implode(',', $value); + } + + /** + * Return an instance with the provided header, replacing any existing + * values of any headers with the same case-insensitive name. + * + * While header names are case-insensitive, the casing of the header will + * be preserved by this function, and returned from getHeaders(). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new and/or updated header and value. + * + * @param string $header Case-insensitive header field name. + * @param string|string[] $value Header value(s). + * @return static + * @throws Exception\InvalidArgumentException for invalid header names or values. + */ + public function withHeader($header, $value) : MessageInterface + { + $this->assertHeader($header); + + $normalized = strtolower($header); + + $new = clone $this; + if ($new->hasHeader($header)) { + unset($new->headers[$new->headerNames[$normalized]]); + } + + $value = $this->filterHeaderValue($value); + + $new->headerNames[$normalized] = $header; + $new->headers[$header] = $value; + + return $new; + } + + /** + * Return an instance with the specified header appended with the + * given value. + * + * Existing values for the specified header will be maintained. The new + * value(s) will be appended to the existing list. If the header did not + * exist previously, it will be added. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new header and/or value. + * + * @param string $header Case-insensitive header field name to add. + * @param string|string[] $value Header value(s). + * @return static + * @throws Exception\InvalidArgumentException for invalid header names or values. + */ + public function withAddedHeader($header, $value) : MessageInterface + { + $this->assertHeader($header); + + if (! $this->hasHeader($header)) { + return $this->withHeader($header, $value); + } + + $header = $this->headerNames[strtolower($header)]; + + $new = clone $this; + $value = $this->filterHeaderValue($value); + $new->headers[$header] = array_merge($this->headers[$header], $value); + return $new; + } + + /** + * Return an instance without the specified header. + * + * Header resolution MUST be done without case-sensitivity. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that removes + * the named header. + * + * @param string $header Case-insensitive header field name to remove. + * @return static + */ + public function withoutHeader($header) : MessageInterface + { + if (! $this->hasHeader($header)) { + return clone $this; + } + + $normalized = strtolower($header); + $original = $this->headerNames[$normalized]; + + $new = clone $this; + unset($new->headers[$original], $new->headerNames[$normalized]); + return $new; + } + + /** + * Gets the body of the message. + * + * @return StreamInterface Returns the body as a stream. + */ + public function getBody() : StreamInterface + { + return $this->stream; + } + + /** + * Return an instance with the specified message body. + * + * The body MUST be a StreamInterface object. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return a new instance that has the + * new body stream. + * + * @param StreamInterface $body Body. + * @return static + * @throws Exception\InvalidArgumentException When the body is not valid. + */ + public function withBody(StreamInterface $body) : MessageInterface + { + $new = clone $this; + $new->stream = $body; + return $new; + } + + private function getStream($stream, string $modeIfNotInstance) : StreamInterface + { + if ($stream instanceof StreamInterface) { + return $stream; + } + + if (! is_string($stream) && ! is_resource($stream)) { + throw new Exception\InvalidArgumentException( + 'Stream must be a string stream resource identifier, ' + . 'an actual stream resource, ' + . 'or a Psr\Http\Message\StreamInterface implementation' + ); + } + + return new Stream($stream, $modeIfNotInstance); + } + + /** + * Filter a set of headers to ensure they are in the correct internal format. + * + * Used by message constructors to allow setting all initial headers at once. + * + * @param array $originalHeaders Headers to filter. + */ + private function setHeaders(array $originalHeaders) : void + { + $headerNames = $headers = []; + + foreach ($originalHeaders as $header => $value) { + $value = $this->filterHeaderValue($value); + + $this->assertHeader($header); + + $headerNames[strtolower($header)] = $header; + $headers[$header] = $value; + } + + $this->headerNames = $headerNames; + $this->headers = $headers; + } + + /** + * Validate the HTTP protocol version + * + * @param string $version + * @throws Exception\InvalidArgumentException on invalid HTTP protocol version + */ + private function validateProtocolVersion($version) : void + { + if (empty($version)) { + throw new Exception\InvalidArgumentException( + 'HTTP protocol version can not be empty' + ); + } + if (! is_string($version)) { + throw new Exception\InvalidArgumentException(sprintf( + 'Unsupported HTTP protocol version; must be a string, received %s', + (is_object($version) ? get_class($version) : gettype($version)) + )); + } + + // HTTP/1 uses a "." numbering scheme to indicate + // versions of the protocol, while HTTP/2 does not. + if (! preg_match('#^(1\.[01]|2(\.0)?)$#', $version)) { + throw new Exception\InvalidArgumentException(sprintf( + 'Unsupported HTTP protocol version "%s" provided', + $version + )); + } + } + + /** + * @param mixed $values + * @return string[] + */ + private function filterHeaderValue($values) : array + { + if (! is_array($values)) { + $values = [$values]; + } + + if ([] === $values) { + throw new Exception\InvalidArgumentException( + 'Invalid header value: must be a string or array of strings; ' + . 'cannot be an empty array' + ); + } + + return array_map(function ($value) { + HeaderSecurity::assertValid($value); + + return (string) $value; + }, array_values($values)); + } + + /** + * Ensure header name and values are valid. + * + * @param string $name + * + * @throws Exception\InvalidArgumentException + */ + private function assertHeader($name) : void + { + HeaderSecurity::assertValidName($name); + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Module.php b/vendor/laminas/laminas-diactoros/src/Module.php new file mode 100644 index 00000000..2d588404 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Module.php @@ -0,0 +1,15 @@ + (new ConfigProvider())->getDependencies(), + ]; + } +} diff --git a/vendor/laminas/laminas-diactoros/src/PhpInputStream.php b/vendor/laminas/laminas-diactoros/src/PhpInputStream.php new file mode 100644 index 00000000..876f91f4 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/PhpInputStream.php @@ -0,0 +1,88 @@ +reachedEof) { + return $this->cache; + } + + $this->getContents(); + return $this->cache; + } + + /** + * {@inheritdoc} + */ + public function isWritable() : bool + { + return false; + } + + /** + * {@inheritdoc} + */ + public function read($length) : string + { + $content = parent::read($length); + if (! $this->reachedEof) { + $this->cache .= $content; + } + + if ($this->eof()) { + $this->reachedEof = true; + } + + return $content; + } + + /** + * {@inheritdoc} + */ + public function getContents($maxLength = -1) : string + { + if ($this->reachedEof) { + return $this->cache; + } + + $contents = stream_get_contents($this->resource, $maxLength); + $this->cache .= $contents; + + if ($maxLength === -1 || $this->eof()) { + $this->reachedEof = true; + } + + return $contents; + } +} diff --git a/vendor/laminas/laminas-diactoros/src/RelativeStream.php b/vendor/laminas/laminas-diactoros/src/RelativeStream.php new file mode 100644 index 00000000..993a266d --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/RelativeStream.php @@ -0,0 +1,177 @@ +decoratedStream = $decoratedStream; + $this->offset = (int) $offset; + } + + /** + * {@inheritdoc} + */ + public function __toString() : string + { + if ($this->isSeekable()) { + $this->seek(0); + } + return $this->getContents(); + } + + /** + * {@inheritdoc} + */ + public function close() : void + { + $this->decoratedStream->close(); + } + + /** + * {@inheritdoc} + */ + public function detach() + { + return $this->decoratedStream->detach(); + } + + /** + * {@inheritdoc} + */ + public function getSize() : int + { + return $this->decoratedStream->getSize() - $this->offset; + } + + /** + * {@inheritdoc} + */ + public function tell() : int + { + return $this->decoratedStream->tell() - $this->offset; + } + + /** + * {@inheritdoc} + */ + public function eof() : bool + { + return $this->decoratedStream->eof(); + } + + /** + * {@inheritdoc} + */ + public function isSeekable() : bool + { + return $this->decoratedStream->isSeekable(); + } + + /** + * {@inheritdoc} + */ + public function seek($offset, $whence = SEEK_SET) : void + { + if ($whence == SEEK_SET) { + $this->decoratedStream->seek($offset + $this->offset, $whence); + return; + } + $this->decoratedStream->seek($offset, $whence); + } + + /** + * {@inheritdoc} + */ + public function rewind() : void + { + $this->seek(0); + } + + /** + * {@inheritdoc} + */ + public function isWritable() : bool + { + return $this->decoratedStream->isWritable(); + } + + /** + * {@inheritdoc} + */ + public function write($string) : int + { + if ($this->tell() < 0) { + throw new Exception\InvalidStreamPointerPositionException(); + } + return $this->decoratedStream->write($string); + } + + /** + * {@inheritdoc} + */ + public function isReadable() : bool + { + return $this->decoratedStream->isReadable(); + } + + /** + * {@inheritdoc} + */ + public function read($length) : string + { + if ($this->tell() < 0) { + throw new Exception\InvalidStreamPointerPositionException(); + } + return $this->decoratedStream->read($length); + } + + /** + * {@inheritdoc} + */ + public function getContents() : string + { + if ($this->tell() < 0) { + throw new Exception\InvalidStreamPointerPositionException(); + } + return $this->decoratedStream->getContents(); + } + + /** + * {@inheritdoc} + */ + public function getMetadata($key = null) + { + return $this->decoratedStream->getMetadata($key); + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Request.php b/vendor/laminas/laminas-diactoros/src/Request.php new file mode 100644 index 00000000..ddf753b2 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Request.php @@ -0,0 +1,70 @@ +initialize($uri, $method, $body, $headers); + } + + /** + * {@inheritdoc} + */ + public function getHeaders() : array + { + $headers = $this->headers; + if (! $this->hasHeader('host') + && $this->uri->getHost() + ) { + $headers['Host'] = [$this->getHostFromUri()]; + } + + return $headers; + } + + /** + * {@inheritdoc} + */ + public function getHeader($header) : array + { + if (! $this->hasHeader($header)) { + if (strtolower($header) === 'host' + && $this->uri->getHost() + ) { + return [$this->getHostFromUri()]; + } + + return []; + } + + $header = $this->headerNames[strtolower($header)]; + + return $this->headers[$header]; + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Request/ArraySerializer.php b/vendor/laminas/laminas-diactoros/src/Request/ArraySerializer.php new file mode 100644 index 00000000..92cfff34 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Request/ArraySerializer.php @@ -0,0 +1,77 @@ + $request->getMethod(), + 'request_target' => $request->getRequestTarget(), + 'uri' => (string) $request->getUri(), + 'protocol_version' => $request->getProtocolVersion(), + 'headers' => $request->getHeaders(), + 'body' => (string) $request->getBody(), + ]; + } + + /** + * Deserialize a request array to a request instance. + * + * @throws Exception\DeserializationException when cannot deserialize response + */ + public static function fromArray(array $serializedRequest) : Request + { + try { + $uri = self::getValueFromKey($serializedRequest, 'uri'); + $method = self::getValueFromKey($serializedRequest, 'method'); + $body = new Stream('php://memory', 'wb+'); + $body->write(self::getValueFromKey($serializedRequest, 'body')); + $headers = self::getValueFromKey($serializedRequest, 'headers'); + $requestTarget = self::getValueFromKey($serializedRequest, 'request_target'); + $protocolVersion = self::getValueFromKey($serializedRequest, 'protocol_version'); + + return (new Request($uri, $method, $body, $headers)) + ->withRequestTarget($requestTarget) + ->withProtocolVersion($protocolVersion); + } catch (Throwable $exception) { + throw Exception\DeserializationException::forRequestFromArray($exception); + } + } + + /** + * @return mixed + * @throws Exception\DeserializationException + */ + private static function getValueFromKey(array $data, string $key, string $message = null) + { + if (isset($data[$key])) { + return $data[$key]; + } + if ($message === null) { + $message = sprintf('Missing "%s" key in serialized request', $key); + } + throw new Exception\DeserializationException($message); + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Request/Serializer.php b/vendor/laminas/laminas-diactoros/src/Request/Serializer.php new file mode 100644 index 00000000..3033be23 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Request/Serializer.php @@ -0,0 +1,136 @@ +write($message); + return self::fromStream($stream); + } + + /** + * Deserialize a request stream to a request instance. + * + * @throws Exception\InvalidArgumentException if the message stream is not + * readable or seekable. + * @throws Exception\SerializationException if an invalid request line is detected. + */ + public static function fromStream(StreamInterface $stream) : Request + { + if (! $stream->isReadable() || ! $stream->isSeekable()) { + throw new Exception\InvalidArgumentException('Message stream must be both readable and seekable'); + } + + $stream->rewind(); + + [$method, $requestTarget, $version] = self::getRequestLine($stream); + $uri = self::createUriFromRequestTarget($requestTarget); + + [$headers, $body] = self::splitStream($stream); + + return (new Request($uri, $method, $body, $headers)) + ->withProtocolVersion($version) + ->withRequestTarget($requestTarget); + } + + /** + * Serialize a request message to a string. + */ + public static function toString(RequestInterface $request) : string + { + $httpMethod = $request->getMethod(); + $headers = self::serializeHeaders($request->getHeaders()); + $body = (string) $request->getBody(); + $format = '%s %s HTTP/%s%s%s'; + + if (! empty($headers)) { + $headers = "\r\n" . $headers; + } + if (! empty($body)) { + $headers .= "\r\n\r\n"; + } + + return sprintf( + $format, + $httpMethod, + $request->getRequestTarget(), + $request->getProtocolVersion(), + $headers, + $body + ); + } + + /** + * Retrieve the components of the request line. + * + * Retrieves the first line of the stream and parses it, raising an + * exception if it does not follow specifications; if valid, returns a list + * with the method, target, and version, in that order. + * + * @throws Exception\SerializationException + */ + private static function getRequestLine(StreamInterface $stream) : array + { + $requestLine = self::getLine($stream); + + if (! preg_match( + '#^(?P[!\#$%&\'*+.^_`|~a-zA-Z0-9-]+) (?P[^\s]+) HTTP/(?P[1-9]\d*\.\d+)$#', + $requestLine, + $matches + )) { + throw Exception\SerializationException::forInvalidRequestLine(); + } + + return [$matches['method'], $matches['target'], $matches['version']]; + } + + /** + * Create and return a Uri instance based on the provided request target. + * + * If the request target is of authority or asterisk form, an empty Uri + * instance is returned; otherwise, the value is used to create and return + * a new Uri instance. + */ + private static function createUriFromRequestTarget(string $requestTarget) : Uri + { + if (preg_match('#^https?://#', $requestTarget)) { + return new Uri($requestTarget); + } + + if (preg_match('#^(\*|[^/])#', $requestTarget)) { + return new Uri(); + } + + return new Uri($requestTarget); + } +} diff --git a/vendor/laminas/laminas-diactoros/src/RequestFactory.php b/vendor/laminas/laminas-diactoros/src/RequestFactory.php new file mode 100644 index 00000000..9a6d9a64 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/RequestFactory.php @@ -0,0 +1,19 @@ +setMethod($method); + } + + $this->uri = $this->createUri($uri); + $this->stream = $this->getStream($body, 'wb+'); + + $this->setHeaders($headers); + + // per PSR-7: attempt to set the Host header from a provided URI if no + // Host header is provided + if (! $this->hasHeader('Host') && $this->uri->getHost()) { + $this->headerNames['host'] = 'Host'; + $this->headers['Host'] = [$this->getHostFromUri()]; + } + } + + /** + * Create and return a URI instance. + * + * If `$uri` is a already a `UriInterface` instance, returns it. + * + * If `$uri` is a string, passes it to the `Uri` constructor to return an + * instance. + * + * If `$uri is null, creates and returns an empty `Uri` instance. + * + * Otherwise, it raises an exception. + * + * @param null|string|UriInterface $uri + * @throws Exception\InvalidArgumentException + */ + private function createUri($uri) : UriInterface + { + if ($uri instanceof UriInterface) { + return $uri; + } + if (is_string($uri)) { + return new Uri($uri); + } + if ($uri === null) { + return new Uri(); + } + throw new Exception\InvalidArgumentException( + 'Invalid URI provided; must be null, a string, or a Psr\Http\Message\UriInterface instance' + ); + } + + /** + * Retrieves the message's request target. + * + * Retrieves the message's request-target either as it will appear (for + * clients), as it appeared at request (for servers), or as it was + * specified for the instance (see withRequestTarget()). + * + * In most cases, this will be the origin-form of the composed URI, + * unless a value was provided to the concrete implementation (see + * withRequestTarget() below). + * + * If no URI is available, and no request-target has been specifically + * provided, this method MUST return the string "/". + */ + public function getRequestTarget() : string + { + if (null !== $this->requestTarget) { + return $this->requestTarget; + } + + $target = $this->uri->getPath(); + if ($this->uri->getQuery()) { + $target .= '?' . $this->uri->getQuery(); + } + + if (empty($target)) { + $target = '/'; + } + + return $target; + } + + /** + * Create a new instance with a specific request-target. + * + * If the request needs a non-origin-form request-target — e.g., for + * specifying an absolute-form, authority-form, or asterisk-form — + * this method may be used to create an instance with the specified + * request-target, verbatim. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return a new instance that has the + * changed request target. + * + * @link http://tools.ietf.org/html/rfc7230#section-2.7 (for the various + * request-target forms allowed in request messages) + * @param string $requestTarget + * @throws Exception\InvalidArgumentException if the request target is invalid. + */ + public function withRequestTarget($requestTarget) : RequestInterface + { + if (preg_match('#\s#', $requestTarget)) { + throw new Exception\InvalidArgumentException( + 'Invalid request target provided; cannot contain whitespace' + ); + } + + $new = clone $this; + $new->requestTarget = $requestTarget; + return $new; + } + + /** + * Retrieves the HTTP method of the request. + * + * @return string Returns the request method. + */ + public function getMethod() : string + { + return $this->method; + } + + /** + * Return an instance with the provided HTTP method. + * + * While HTTP method names are typically all uppercase characters, HTTP + * method names are case-sensitive and thus implementations SHOULD NOT + * modify the given string. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * changed request method. + * + * @param string $method Case-insensitive method. + * @throws Exception\InvalidArgumentException for invalid HTTP methods. + */ + public function withMethod($method) : RequestInterface + { + $new = clone $this; + $new->setMethod($method); + return $new; + } + + /** + * Retrieves the URI instance. + * + * This method MUST return a UriInterface instance. + * + * @link http://tools.ietf.org/html/rfc3986#section-4.3 + * @return UriInterface Returns a UriInterface instance + * representing the URI of the request, if any. + */ + public function getUri() : UriInterface + { + return $this->uri; + } + + /** + * Returns an instance with the provided URI. + * + * This method will update the Host header of the returned request by + * default if the URI contains a host component. If the URI does not + * contain a host component, any pre-existing Host header will be carried + * over to the returned request. + * + * You can opt-in to preserving the original state of the Host header by + * setting `$preserveHost` to `true`. When `$preserveHost` is set to + * `true`, the returned request will not update the Host header of the + * returned message -- even if the message contains no Host header. This + * means that a call to `getHeader('Host')` on the original request MUST + * equal the return value of a call to `getHeader('Host')` on the returned + * request. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new UriInterface instance. + * + * @link http://tools.ietf.org/html/rfc3986#section-4.3 + * @param UriInterface $uri New request URI to use. + * @param bool $preserveHost Preserve the original state of the Host header. + */ + public function withUri(UriInterface $uri, $preserveHost = false) : RequestInterface + { + $new = clone $this; + $new->uri = $uri; + + if ($preserveHost && $this->hasHeader('Host')) { + return $new; + } + + if (! $uri->getHost()) { + return $new; + } + + $host = $uri->getHost(); + if ($uri->getPort()) { + $host .= ':' . $uri->getPort(); + } + + $new->headerNames['host'] = 'Host'; + + // Remove an existing host header if present, regardless of current + // de-normalization of the header name. + // @see https://github.com/zendframework/zend-diactoros/issues/91 + foreach (array_keys($new->headers) as $header) { + if (strtolower($header) === 'host') { + unset($new->headers[$header]); + } + } + + $new->headers['Host'] = [$host]; + + return $new; + } + + /** + * Set and validate the HTTP method + * + * @param string $method + * @throws Exception\InvalidArgumentException on invalid HTTP method. + */ + private function setMethod($method) : void + { + if (! is_string($method)) { + throw new Exception\InvalidArgumentException(sprintf( + 'Unsupported HTTP method; must be a string, received %s', + is_object($method) ? get_class($method) : gettype($method) + )); + } + + if (! preg_match('/^[!#$%&\'*+.^_`\|~0-9a-z-]+$/i', $method)) { + throw new Exception\InvalidArgumentException(sprintf( + 'Unsupported HTTP method "%s" provided', + $method + )); + } + $this->method = $method; + } + + /** + * Retrieve the host from the URI instance + */ + private function getHostFromUri() : string + { + $host = $this->uri->getHost(); + $host .= $this->uri->getPort() ? ':' . $this->uri->getPort() : ''; + return $host; + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Response.php b/vendor/laminas/laminas-diactoros/src/Response.php new file mode 100644 index 00000000..4afd6c0e --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Response.php @@ -0,0 +1,196 @@ + + */ + private $phrases = [ + // INFORMATIONAL CODES + 100 => 'Continue', + 101 => 'Switching Protocols', + 102 => 'Processing', + 103 => 'Early Hints', + // SUCCESS CODES + 200 => 'OK', + 201 => 'Created', + 202 => 'Accepted', + 203 => 'Non-Authoritative Information', + 204 => 'No Content', + 205 => 'Reset Content', + 206 => 'Partial Content', + 207 => 'Multi-Status', + 208 => 'Already Reported', + 226 => 'IM Used', + // REDIRECTION CODES + 300 => 'Multiple Choices', + 301 => 'Moved Permanently', + 302 => 'Found', + 303 => 'See Other', + 304 => 'Not Modified', + 305 => 'Use Proxy', + 306 => 'Switch Proxy', // Deprecated to 306 => '(Unused)' + 307 => 'Temporary Redirect', + 308 => 'Permanent Redirect', + // CLIENT ERROR + 400 => 'Bad Request', + 401 => 'Unauthorized', + 402 => 'Payment Required', + 403 => 'Forbidden', + 404 => 'Not Found', + 405 => 'Method Not Allowed', + 406 => 'Not Acceptable', + 407 => 'Proxy Authentication Required', + 408 => 'Request Timeout', + 409 => 'Conflict', + 410 => 'Gone', + 411 => 'Length Required', + 412 => 'Precondition Failed', + 413 => 'Payload Too Large', + 414 => 'URI Too Long', + 415 => 'Unsupported Media Type', + 416 => 'Range Not Satisfiable', + 417 => 'Expectation Failed', + 418 => 'I\'m a teapot', + 421 => 'Misdirected Request', + 422 => 'Unprocessable Entity', + 423 => 'Locked', + 424 => 'Failed Dependency', + 425 => 'Too Early', + 426 => 'Upgrade Required', + 428 => 'Precondition Required', + 429 => 'Too Many Requests', + 431 => 'Request Header Fields Too Large', + 444 => 'Connection Closed Without Response', + 451 => 'Unavailable For Legal Reasons', + // SERVER ERROR + 499 => 'Client Closed Request', + 500 => 'Internal Server Error', + 501 => 'Not Implemented', + 502 => 'Bad Gateway', + 503 => 'Service Unavailable', + 504 => 'Gateway Timeout', + 505 => 'HTTP Version Not Supported', + 506 => 'Variant Also Negotiates', + 507 => 'Insufficient Storage', + 508 => 'Loop Detected', + 510 => 'Not Extended', + 511 => 'Network Authentication Required', + 599 => 'Network Connect Timeout Error', + ]; + + /** + * @var string + */ + private $reasonPhrase; + + /** + * @var int + */ + private $statusCode; + + /** + * @param string|resource|StreamInterface $body Stream identifier and/or actual stream resource + * @param int $status Status code for the response, if any. + * @param array $headers Headers for the response, if any. + * @throws Exception\InvalidArgumentException on any invalid element. + */ + public function __construct($body = 'php://memory', int $status = 200, array $headers = []) + { + $this->setStatusCode($status); + $this->stream = $this->getStream($body, 'wb+'); + $this->setHeaders($headers); + } + + /** + * {@inheritdoc} + */ + public function getStatusCode() : int + { + return $this->statusCode; + } + + /** + * {@inheritdoc} + */ + public function getReasonPhrase() : string + { + return $this->reasonPhrase; + } + + /** + * {@inheritdoc} + */ + public function withStatus($code, $reasonPhrase = '') : Response + { + $new = clone $this; + $new->setStatusCode($code, $reasonPhrase); + return $new; + } + + /** + * Set a valid status code. + * + * @param int $code + * @param string $reasonPhrase + * @throws Exception\InvalidArgumentException on an invalid status code. + */ + private function setStatusCode($code, $reasonPhrase = '') : void + { + if (! is_numeric($code) + || is_float($code) + || $code < static::MIN_STATUS_CODE_VALUE + || $code > static::MAX_STATUS_CODE_VALUE + ) { + throw new Exception\InvalidArgumentException(sprintf( + 'Invalid status code "%s"; must be an integer between %d and %d, inclusive', + is_scalar($code) ? $code : gettype($code), + static::MIN_STATUS_CODE_VALUE, + static::MAX_STATUS_CODE_VALUE + )); + } + + if (! is_string($reasonPhrase)) { + throw new Exception\InvalidArgumentException(sprintf( + 'Unsupported response reason phrase; must be a string, received %s', + is_object($reasonPhrase) ? get_class($reasonPhrase) : gettype($reasonPhrase) + )); + } + + if ($reasonPhrase === '' && isset($this->phrases[$code])) { + $reasonPhrase = $this->phrases[$code]; + } + + $this->reasonPhrase = $reasonPhrase; + $this->statusCode = (int) $code; + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Response/ArraySerializer.php b/vendor/laminas/laminas-diactoros/src/Response/ArraySerializer.php new file mode 100644 index 00000000..462458dc --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Response/ArraySerializer.php @@ -0,0 +1,79 @@ + $response->getStatusCode(), + 'reason_phrase' => $response->getReasonPhrase(), + 'protocol_version' => $response->getProtocolVersion(), + 'headers' => $response->getHeaders(), + 'body' => (string) $response->getBody(), + ]; + } + + /** + * Deserialize a response array to a response instance. + * + * @throws Exception\DeserializationException when cannot deserialize response + */ + public static function fromArray(array $serializedResponse) : Response + { + try { + $body = new Stream('php://memory', 'wb+'); + $body->write(self::getValueFromKey($serializedResponse, 'body')); + + $statusCode = self::getValueFromKey($serializedResponse, 'status_code'); + $headers = self::getValueFromKey($serializedResponse, 'headers'); + $protocolVersion = self::getValueFromKey($serializedResponse, 'protocol_version'); + $reasonPhrase = self::getValueFromKey($serializedResponse, 'reason_phrase'); + + return (new Response($body, $statusCode, $headers)) + ->withProtocolVersion($protocolVersion) + ->withStatus($statusCode, $reasonPhrase); + } catch (Throwable $exception) { + throw Exception\DeserializationException::forResponseFromArray($exception); + } + } + + /** + * @param array $data + * @param string $key + * @param string $message + * @return mixed + * @throws Exception\DeserializationException + */ + private static function getValueFromKey(array $data, string $key, string $message = null) + { + if (isset($data[$key])) { + return $data[$key]; + } + if ($message === null) { + $message = sprintf('Missing "%s" key in serialized response', $key); + } + throw new Exception\DeserializationException($message); + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Response/EmptyResponse.php b/vendor/laminas/laminas-diactoros/src/Response/EmptyResponse.php new file mode 100644 index 00000000..7f082ba3 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Response/EmptyResponse.php @@ -0,0 +1,37 @@ +createBody($html), + $status, + $this->injectContentType('text/html; charset=utf-8', $headers) + ); + } + + /** + * Create the message body. + * + * @param string|StreamInterface $html + * @throws Exception\InvalidArgumentException if $html is neither a string or stream. + */ + private function createBody($html) : StreamInterface + { + if ($html instanceof StreamInterface) { + return $html; + } + + if (! is_string($html)) { + throw new Exception\InvalidArgumentException(sprintf( + 'Invalid content (%s) provided to %s', + (is_object($html) ? get_class($html) : gettype($html)), + __CLASS__ + )); + } + + $body = new Stream('php://temp', 'wb+'); + $body->write($html); + $body->rewind(); + return $body; + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Response/InjectContentTypeTrait.php b/vendor/laminas/laminas-diactoros/src/Response/InjectContentTypeTrait.php new file mode 100644 index 00000000..0a955866 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Response/InjectContentTypeTrait.php @@ -0,0 +1,30 @@ + + * JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT | JSON_UNESCAPED_SLASHES + * + * + * @const int + */ + const DEFAULT_JSON_FLAGS = 79; + + /** + * @var mixed + */ + private $payload; + + /** + * @var int + */ + private $encodingOptions; + + /** + * Create a JSON response with the given data. + * + * Default JSON encoding is performed with the following options, which + * produces RFC4627-compliant JSON, capable of embedding into HTML. + * + * - JSON_HEX_TAG + * - JSON_HEX_APOS + * - JSON_HEX_AMP + * - JSON_HEX_QUOT + * - JSON_UNESCAPED_SLASHES + * + * @param mixed $data Data to convert to JSON. + * @param int $status Integer status code for the response; 200 by default. + * @param array $headers Array of headers to use at initialization. + * @param int $encodingOptions JSON encoding options to use. + * @throws Exception\InvalidArgumentException if unable to encode the $data to JSON. + */ + public function __construct( + $data, + int $status = 200, + array $headers = [], + int $encodingOptions = self::DEFAULT_JSON_FLAGS + ) { + $this->setPayload($data); + $this->encodingOptions = $encodingOptions; + + $json = $this->jsonEncode($data, $this->encodingOptions); + $body = $this->createBodyFromJson($json); + + $headers = $this->injectContentType('application/json', $headers); + + parent::__construct($body, $status, $headers); + } + + /** + * @return mixed + */ + public function getPayload() + { + return $this->payload; + } + + /** + * @param mixed $data + */ + public function withPayload($data) : JsonResponse + { + $new = clone $this; + $new->setPayload($data); + return $this->updateBodyFor($new); + } + + public function getEncodingOptions() : int + { + return $this->encodingOptions; + } + + public function withEncodingOptions(int $encodingOptions) : JsonResponse + { + $new = clone $this; + $new->encodingOptions = $encodingOptions; + return $this->updateBodyFor($new); + } + + private function createBodyFromJson(string $json) : Stream + { + $body = new Stream('php://temp', 'wb+'); + $body->write($json); + $body->rewind(); + + return $body; + } + + /** + * Encode the provided data to JSON. + * + * @param mixed $data + * @throws Exception\InvalidArgumentException if unable to encode the $data to JSON. + */ + private function jsonEncode($data, int $encodingOptions) : string + { + if (is_resource($data)) { + throw new Exception\InvalidArgumentException('Cannot JSON encode resources'); + } + + // Clear json_last_error() + json_encode(null); + + $json = json_encode($data, $encodingOptions); + + if (JSON_ERROR_NONE !== json_last_error()) { + throw new Exception\InvalidArgumentException(sprintf( + 'Unable to encode data to JSON in %s: %s', + __CLASS__, + json_last_error_msg() + )); + } + + return $json; + } + + /** + * @param mixed $data + */ + private function setPayload($data) : void + { + if (is_object($data)) { + $data = clone $data; + } + + $this->payload = $data; + } + + /** + * Update the response body for the given instance. + * + * @param self $toUpdate Instance to update. + * @return JsonResponse Returns a new instance with an updated body. + */ + private function updateBodyFor(JsonResponse $toUpdate) : JsonResponse + { + $json = $this->jsonEncode($toUpdate->payload, $toUpdate->encodingOptions); + $body = $this->createBodyFromJson($json); + return $toUpdate->withBody($body); + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Response/RedirectResponse.php b/vendor/laminas/laminas-diactoros/src/Response/RedirectResponse.php new file mode 100644 index 00000000..ef7150e9 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Response/RedirectResponse.php @@ -0,0 +1,47 @@ +write($message); + return static::fromStream($stream); + } + + /** + * Parse a response from a stream. + * + * @throws Exception\InvalidArgumentException when the stream is not readable. + * @throws Exception\SerializationException when errors occur parsing the message. + */ + public static function fromStream(StreamInterface $stream) : Response + { + if (! $stream->isReadable() || ! $stream->isSeekable()) { + throw new Exception\InvalidArgumentException('Message stream must be both readable and seekable'); + } + + $stream->rewind(); + + [$version, $status, $reasonPhrase] = self::getStatusLine($stream); + [$headers, $body] = self::splitStream($stream); + + return (new Response($body, $status, $headers)) + ->withProtocolVersion($version) + ->withStatus((int) $status, $reasonPhrase); + } + + /** + * Create a string representation of a response. + */ + public static function toString(ResponseInterface $response) : string + { + $reasonPhrase = $response->getReasonPhrase(); + $headers = self::serializeHeaders($response->getHeaders()); + $body = (string) $response->getBody(); + $format = 'HTTP/%s %d%s%s%s'; + + if (! empty($headers)) { + $headers = "\r\n" . $headers; + } + + $headers .= "\r\n\r\n"; + + return sprintf( + $format, + $response->getProtocolVersion(), + $response->getStatusCode(), + ($reasonPhrase ? ' ' . $reasonPhrase : ''), + $headers, + $body + ); + } + + /** + * Retrieve the status line for the message. + * + * @return array Array with three elements: 0 => version, 1 => status, 2 => reason + * @throws Exception\SerializationException if line is malformed + */ + private static function getStatusLine(StreamInterface $stream) : array + { + $line = self::getLine($stream); + + if (! preg_match( + '#^HTTP/(?P[1-9]\d*\.\d) (?P[1-5]\d{2})(\s+(?P.+))?$#', + $line, + $matches + )) { + throw Exception\SerializationException::forInvalidStatusLine(); + } + + return [$matches['version'], (int) $matches['status'], isset($matches['reason']) ? $matches['reason'] : '']; + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Response/TextResponse.php b/vendor/laminas/laminas-diactoros/src/Response/TextResponse.php new file mode 100644 index 00000000..c2120a4c --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Response/TextResponse.php @@ -0,0 +1,74 @@ +createBody($text), + $status, + $this->injectContentType('text/plain; charset=utf-8', $headers) + ); + } + + /** + * Create the message body. + * + * @param string|StreamInterface $text + * @throws Exception\InvalidArgumentException if $text is neither a string or stream. + */ + private function createBody($text) : StreamInterface + { + if ($text instanceof StreamInterface) { + return $text; + } + + if (! is_string($text)) { + throw new Exception\InvalidArgumentException(sprintf( + 'Invalid content (%s) provided to %s', + (is_object($text) ? get_class($text) : gettype($text)), + __CLASS__ + )); + } + + $body = new Stream('php://temp', 'wb+'); + $body->write($text); + $body->rewind(); + return $body; + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Response/XmlResponse.php b/vendor/laminas/laminas-diactoros/src/Response/XmlResponse.php new file mode 100644 index 00000000..0c445598 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Response/XmlResponse.php @@ -0,0 +1,76 @@ +createBody($xml), + $status, + $this->injectContentType('application/xml; charset=utf-8', $headers) + ); + } + + /** + * Create the message body. + * + * @param string|StreamInterface $xml + * @throws Exception\InvalidArgumentException if $xml is neither a string or stream. + */ + private function createBody($xml) : StreamInterface + { + if ($xml instanceof StreamInterface) { + return $xml; + } + + if (! is_string($xml)) { + throw new Exception\InvalidArgumentException(sprintf( + 'Invalid content (%s) provided to %s', + (is_object($xml) ? get_class($xml) : gettype($xml)), + __CLASS__ + )); + } + + $body = new Stream('php://temp', 'wb+'); + $body->write($xml); + $body->rewind(); + return $body; + } +} diff --git a/vendor/laminas/laminas-diactoros/src/ResponseFactory.php b/vendor/laminas/laminas-diactoros/src/ResponseFactory.php new file mode 100644 index 00000000..2c0060f7 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/ResponseFactory.php @@ -0,0 +1,20 @@ +withStatus($code, $reasonPhrase); + } +} diff --git a/vendor/laminas/laminas-diactoros/src/ServerRequest.php b/vendor/laminas/laminas-diactoros/src/ServerRequest.php new file mode 100644 index 00000000..502a8d93 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/ServerRequest.php @@ -0,0 +1,250 @@ +validateUploadedFiles($uploadedFiles); + + if ($body === 'php://input') { + $body = new PhpInputStream(); + } + + $this->initialize($uri, $method, $body, $headers); + $this->serverParams = $serverParams; + $this->uploadedFiles = $uploadedFiles; + $this->cookieParams = $cookies; + $this->queryParams = $queryParams; + $this->parsedBody = $parsedBody; + $this->protocol = $protocol; + } + + /** + * {@inheritdoc} + */ + public function getServerParams() : array + { + return $this->serverParams; + } + + /** + * {@inheritdoc} + */ + public function getUploadedFiles() : array + { + return $this->uploadedFiles; + } + + /** + * {@inheritdoc} + */ + public function withUploadedFiles(array $uploadedFiles) : ServerRequest + { + $this->validateUploadedFiles($uploadedFiles); + $new = clone $this; + $new->uploadedFiles = $uploadedFiles; + return $new; + } + + /** + * {@inheritdoc} + */ + public function getCookieParams() : array + { + return $this->cookieParams; + } + + /** + * {@inheritdoc} + */ + public function withCookieParams(array $cookies) : ServerRequest + { + $new = clone $this; + $new->cookieParams = $cookies; + return $new; + } + + /** + * {@inheritdoc} + */ + public function getQueryParams() : array + { + return $this->queryParams; + } + + /** + * {@inheritdoc} + */ + public function withQueryParams(array $query) : ServerRequest + { + $new = clone $this; + $new->queryParams = $query; + return $new; + } + + /** + * {@inheritdoc} + */ + public function getParsedBody() + { + return $this->parsedBody; + } + + /** + * {@inheritdoc} + */ + public function withParsedBody($data) : ServerRequest + { + if (! is_array($data) && ! is_object($data) && null !== $data) { + throw new Exception\InvalidArgumentException(sprintf( + '%s expects a null, array, or object argument; received %s', + __METHOD__, + gettype($data) + )); + } + + $new = clone $this; + $new->parsedBody = $data; + return $new; + } + + /** + * {@inheritdoc} + */ + public function getAttributes() : array + { + return $this->attributes; + } + + /** + * {@inheritdoc} + */ + public function getAttribute($attribute, $default = null) + { + if (! array_key_exists($attribute, $this->attributes)) { + return $default; + } + + return $this->attributes[$attribute]; + } + + /** + * {@inheritdoc} + */ + public function withAttribute($attribute, $value) : ServerRequest + { + $new = clone $this; + $new->attributes[$attribute] = $value; + return $new; + } + + /** + * {@inheritdoc} + */ + public function withoutAttribute($attribute) : ServerRequest + { + $new = clone $this; + unset($new->attributes[$attribute]); + return $new; + } + + /** + * Recursively validate the structure in an uploaded files array. + * + * @throws Exception\InvalidArgumentException if any leaf is not an UploadedFileInterface instance. + */ + private function validateUploadedFiles(array $uploadedFiles) : void + { + foreach ($uploadedFiles as $file) { + if (is_array($file)) { + $this->validateUploadedFiles($file); + continue; + } + + if (! $file instanceof UploadedFileInterface) { + throw new Exception\InvalidArgumentException('Invalid leaf in uploaded files structure'); + } + } + } +} diff --git a/vendor/laminas/laminas-diactoros/src/ServerRequestFactory.php b/vendor/laminas/laminas-diactoros/src/ServerRequestFactory.php new file mode 100644 index 00000000..3cde0e0c --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/ServerRequestFactory.php @@ -0,0 +1,94 @@ +setStream($stream, $mode); + } + + /** + * {@inheritdoc} + */ + public function __toString() : string + { + if (! $this->isReadable()) { + return ''; + } + + try { + if ($this->isSeekable()) { + $this->rewind(); + } + + return $this->getContents(); + } catch (RuntimeException $e) { + return ''; + } + } + + /** + * {@inheritdoc} + */ + public function close() : void + { + if (! $this->resource) { + return; + } + + $resource = $this->detach(); + fclose($resource); + } + + /** + * {@inheritdoc} + */ + public function detach() + { + $resource = $this->resource; + $this->resource = null; + return $resource; + } + + /** + * Attach a new stream/resource to the instance. + * + * @param string|resource $resource + * @param string $mode + * @throws Exception\InvalidArgumentException for stream identifier that cannot be + * cast to a resource + * @throws Exception\InvalidArgumentException for non-resource stream + */ + public function attach($resource, string $mode = 'r') : void + { + $this->setStream($resource, $mode); + } + + /** + * {@inheritdoc} + */ + public function getSize() : ?int + { + if (null === $this->resource) { + return null; + } + + $stats = fstat($this->resource); + if ($stats !== false) { + return $stats['size']; + } + + return null; + } + + /** + * {@inheritdoc} + */ + public function tell() : int + { + if (! $this->resource) { + throw Exception\UntellableStreamException::dueToMissingResource(); + } + + $result = ftell($this->resource); + if (! is_int($result)) { + throw Exception\UntellableStreamException::dueToPhpError(); + } + + return $result; + } + + /** + * {@inheritdoc} + */ + public function eof() : bool + { + if (! $this->resource) { + return true; + } + + return feof($this->resource); + } + + /** + * {@inheritdoc} + */ + public function isSeekable() : bool + { + if (! $this->resource) { + return false; + } + + $meta = stream_get_meta_data($this->resource); + return $meta['seekable']; + } + + /** + * {@inheritdoc} + */ + public function seek($offset, $whence = SEEK_SET) : void + { + if (! $this->resource) { + throw Exception\UnseekableStreamException::dueToMissingResource(); + } + + if (! $this->isSeekable()) { + throw Exception\UnseekableStreamException::dueToConfiguration(); + } + + $result = fseek($this->resource, $offset, $whence); + + if (0 !== $result) { + throw Exception\UnseekableStreamException::dueToPhpError(); + } + } + + /** + * {@inheritdoc} + */ + public function rewind() : void + { + $this->seek(0); + } + + /** + * {@inheritdoc} + */ + public function isWritable() : bool + { + if (! $this->resource) { + return false; + } + + $meta = stream_get_meta_data($this->resource); + $mode = $meta['mode']; + + return ( + strstr($mode, 'x') + || strstr($mode, 'w') + || strstr($mode, 'c') + || strstr($mode, 'a') + || strstr($mode, '+') + ); + } + + /** + * {@inheritdoc} + */ + public function write($string) : int + { + if (! $this->resource) { + throw Exception\UnwritableStreamException::dueToMissingResource(); + } + + if (! $this->isWritable()) { + throw Exception\UnwritableStreamException::dueToConfiguration(); + } + + $result = fwrite($this->resource, $string); + + if (false === $result) { + throw Exception\UnwritableStreamException::dueToPhpError(); + } + + return $result; + } + + /** + * {@inheritdoc} + */ + public function isReadable() : bool + { + if (! $this->resource) { + return false; + } + + $meta = stream_get_meta_data($this->resource); + $mode = $meta['mode']; + + return (strstr($mode, 'r') || strstr($mode, '+')); + } + + /** + * {@inheritdoc} + */ + public function read($length) : string + { + if (! $this->resource) { + throw Exception\UnreadableStreamException::dueToMissingResource(); + } + + if (! $this->isReadable()) { + throw Exception\UnreadableStreamException::dueToConfiguration(); + } + + $result = fread($this->resource, $length); + + if (false === $result) { + throw Exception\UnreadableStreamException::dueToPhpError(); + } + + return $result; + } + + /** + * {@inheritdoc} + */ + public function getContents() : string + { + if (! $this->isReadable()) { + throw Exception\UnreadableStreamException::dueToConfiguration(); + } + + $result = stream_get_contents($this->resource); + if (false === $result) { + throw Exception\UnreadableStreamException::dueToPhpError(); + } + return $result; + } + + /** + * {@inheritdoc} + */ + public function getMetadata($key = null) + { + if (null === $key) { + return stream_get_meta_data($this->resource); + } + + $metadata = stream_get_meta_data($this->resource); + if (! array_key_exists($key, $metadata)) { + return null; + } + + return $metadata[$key]; + } + + /** + * Set the internal stream resource. + * + * @param string|resource $stream String stream target or stream resource. + * @param string $mode Resource mode for stream target. + * @throws Exception\InvalidArgumentException for invalid streams or resources. + */ + private function setStream($stream, string $mode = 'r') : void + { + $error = null; + $resource = $stream; + + if (is_string($stream)) { + set_error_handler(function ($e) use (&$error) { + if ($e !== E_WARNING) { + return; + } + + $error = $e; + }); + $resource = fopen($stream, $mode); + restore_error_handler(); + } + + if ($error) { + throw new Exception\RuntimeException('Invalid stream reference provided'); + } + + if (! $this->isValidStreamResourceType($resource)) { + throw new Exception\InvalidArgumentException( + 'Invalid stream provided; must be a string stream identifier or stream resource' + ); + } + + if ($stream !== $resource) { + $this->stream = $stream; + } + + $this->resource = $resource; + } + + /** + * Determine if a resource is one of the resource types allowed to instantiate a Stream + * + * @param resource $resource Stream resource. + */ + private function isValidStreamResourceType($resource): bool + { + if (is_resource($resource)) { + return in_array(get_resource_type($resource), self::ALLOWED_STREAM_RESOURCE_TYPES, true); + } + + if (PHP_VERSION_ID >= 80000 && $resource instanceof \GdImage) { + return true; + } + + return false; + } +} diff --git a/vendor/laminas/laminas-diactoros/src/StreamFactory.php b/vendor/laminas/laminas-diactoros/src/StreamFactory.php new file mode 100644 index 00000000..9105ff2e --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/StreamFactory.php @@ -0,0 +1,45 @@ +createStreamFromResource($resource); + } + + /** + * {@inheritDoc} + */ + public function createStreamFromFile(string $file, string $mode = 'r') : StreamInterface + { + return new Stream($file, $mode); + } + + /** + * {@inheritDoc} + */ + public function createStreamFromResource($resource) : StreamInterface + { + return new Stream($resource); + } +} diff --git a/vendor/laminas/laminas-diactoros/src/UploadedFile.php b/vendor/laminas/laminas-diactoros/src/UploadedFile.php new file mode 100644 index 00000000..fe857f4f --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/UploadedFile.php @@ -0,0 +1,262 @@ + 'There is no error, the file uploaded with success', + UPLOAD_ERR_INI_SIZE => 'The uploaded file exceeds the upload_max_filesize directive in php.ini', + UPLOAD_ERR_FORM_SIZE => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was ' + . 'specified in the HTML form', + UPLOAD_ERR_PARTIAL => 'The uploaded file was only partially uploaded', + UPLOAD_ERR_NO_FILE => 'No file was uploaded', + UPLOAD_ERR_NO_TMP_DIR => 'Missing a temporary folder', + UPLOAD_ERR_CANT_WRITE => 'Failed to write file to disk', + UPLOAD_ERR_EXTENSION => 'A PHP extension stopped the file upload.', + ]; + + /** + * @var string|null + */ + private $clientFilename; + + /** + * @var string|null + */ + private $clientMediaType; + + /** + * @var int + */ + private $error; + + /** + * @var null|string + */ + private $file; + + /** + * @var bool + */ + private $moved = false; + + /** + * @var int + */ + private $size; + + /** + * @var null|StreamInterface + */ + private $stream; + + /** + * @param string|resource|StreamInterface $streamOrFile + * @param int $size + * @param int $errorStatus + * @param string|null $clientFilename + * @param string|null $clientMediaType + * @throws Exception\InvalidArgumentException + */ + public function __construct( + $streamOrFile, + int $size, + int $errorStatus, + string $clientFilename = null, + string $clientMediaType = null + ) { + if ($errorStatus === UPLOAD_ERR_OK) { + if (is_string($streamOrFile)) { + $this->file = $streamOrFile; + } + if (is_resource($streamOrFile)) { + $this->stream = new Stream($streamOrFile); + } + + if (! $this->file && ! $this->stream) { + if (! $streamOrFile instanceof StreamInterface) { + throw new Exception\InvalidArgumentException('Invalid stream or file provided for UploadedFile'); + } + $this->stream = $streamOrFile; + } + } + + $this->size = $size; + + if (0 > $errorStatus || 8 < $errorStatus) { + throw new Exception\InvalidArgumentException( + 'Invalid error status for UploadedFile; must be an UPLOAD_ERR_* constant' + ); + } + $this->error = $errorStatus; + + $this->clientFilename = $clientFilename; + $this->clientMediaType = $clientMediaType; + } + + /** + * {@inheritdoc} + * @throws Exception\UploadedFileAlreadyMovedException if the upload was + * not successful. + */ + public function getStream() : StreamInterface + { + if ($this->error !== UPLOAD_ERR_OK) { + throw Exception\UploadedFileErrorException::dueToStreamUploadError( + self::ERROR_MESSAGES[$this->error] + ); + } + + if ($this->moved) { + throw new Exception\UploadedFileAlreadyMovedException(); + } + + if ($this->stream instanceof StreamInterface) { + return $this->stream; + } + + $this->stream = new Stream($this->file); + return $this->stream; + } + + /** + * {@inheritdoc} + * + * @see http://php.net/is_uploaded_file + * @see http://php.net/move_uploaded_file + * @param string $targetPath Path to which to move the uploaded file. + * @throws Exception\UploadedFileErrorException if the upload was not successful. + * @throws Exception\InvalidArgumentException if the $path specified is invalid. + * @throws Exception\UploadedFileErrorException on any error during the + * move operation, or on the second or subsequent call to the method. + */ + public function moveTo($targetPath) : void + { + if ($this->moved) { + throw new Exception\UploadedFileAlreadyMovedException('Cannot move file; already moved!'); + } + + if ($this->error !== UPLOAD_ERR_OK) { + throw Exception\UploadedFileErrorException::dueToStreamUploadError( + self::ERROR_MESSAGES[$this->error] + ); + } + + if (! is_string($targetPath) || empty($targetPath)) { + throw new Exception\InvalidArgumentException( + 'Invalid path provided for move operation; must be a non-empty string' + ); + } + + $targetDirectory = dirname($targetPath); + if (! is_dir($targetDirectory) || ! is_writable($targetDirectory)) { + throw Exception\UploadedFileErrorException::dueToUnwritableTarget($targetDirectory); + } + + $sapi = PHP_SAPI; + switch (true) { + case (empty($sapi) || 0 === strpos($sapi, 'cli') || 0 === strpos($sapi, 'phpdbg') || ! $this->file): + // Non-SAPI environment, or no filename present + $this->writeFile($targetPath); + break; + default: + // SAPI environment, with file present + if (false === move_uploaded_file($this->file, $targetPath)) { + throw Exception\UploadedFileErrorException::forUnmovableFile(); + } + break; + } + + $this->moved = true; + } + + /** + * {@inheritdoc} + * + * @return int|null The file size in bytes or null if unknown. + */ + public function getSize() : ?int + { + return $this->size; + } + + /** + * {@inheritdoc} + * + * @see http://php.net/manual/en/features.file-upload.errors.php + * @return int One of PHP's UPLOAD_ERR_XXX constants. + */ + public function getError() : int + { + return $this->error; + } + + /** + * {@inheritdoc} + * + * @return string|null The filename sent by the client or null if none + * was provided. + */ + public function getClientFilename() : ?string + { + return $this->clientFilename; + } + + /** + * {@inheritdoc} + */ + public function getClientMediaType() : ?string + { + return $this->clientMediaType; + } + + /** + * Write internal stream to given path + * + * @param string $path + */ + private function writeFile(string $path) : void + { + $handle = fopen($path, 'wb+'); + if (false === $handle) { + throw Exception\UploadedFileErrorException::dueToUnwritablePath(); + } + + $stream = $this->getStream(); + $stream->rewind(); + while (! $stream->eof()) { + fwrite($handle, $stream->read(4096)); + } + + fclose($handle); + } +} diff --git a/vendor/laminas/laminas-diactoros/src/UploadedFileFactory.php b/vendor/laminas/laminas-diactoros/src/UploadedFileFactory.php new file mode 100644 index 00000000..073c3ee3 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/UploadedFileFactory.php @@ -0,0 +1,31 @@ +getSize(); + } + + return new UploadedFile($stream, $size, $error, $clientFilename, $clientMediaType); + } +} diff --git a/vendor/laminas/laminas-diactoros/src/Uri.php b/vendor/laminas/laminas-diactoros/src/Uri.php new file mode 100644 index 00000000..8fb1ed29 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/Uri.php @@ -0,0 +1,692 @@ + 80, + 'https' => 443, + ]; + + /** + * @var string + */ + private $scheme = ''; + + /** + * @var string + */ + private $userInfo = ''; + + /** + * @var string + */ + private $host = ''; + + /** + * @var int|null + */ + private $port; + + /** + * @var string + */ + private $path = ''; + + /** + * @var string + */ + private $query = ''; + + /** + * @var string + */ + private $fragment = ''; + + /** + * generated uri string cache + * @var string|null + */ + private $uriString; + + public function __construct(string $uri = '') + { + if ('' === $uri) { + return; + } + + $this->parseUri($uri); + } + + /** + * Operations to perform on clone. + * + * Since cloning usually is for purposes of mutation, we reset the + * $uriString property so it will be re-calculated. + */ + public function __clone() + { + $this->uriString = null; + } + + /** + * {@inheritdoc} + */ + public function __toString() : string + { + if (null !== $this->uriString) { + return $this->uriString; + } + + $this->uriString = static::createUriString( + $this->scheme, + $this->getAuthority(), + $this->getPath(), // Absolute URIs should use a "/" for an empty path + $this->query, + $this->fragment + ); + + return $this->uriString; + } + + /** + * {@inheritdoc} + */ + public function getScheme() : string + { + return $this->scheme; + } + + /** + * {@inheritdoc} + */ + public function getAuthority() : string + { + if ('' === $this->host) { + return ''; + } + + $authority = $this->host; + if ('' !== $this->userInfo) { + $authority = $this->userInfo . '@' . $authority; + } + + if ($this->isNonStandardPort($this->scheme, $this->host, $this->port)) { + $authority .= ':' . $this->port; + } + + return $authority; + } + + /** + * Retrieve the user-info part of the URI. + * + * This value is percent-encoded, per RFC 3986 Section 3.2.1. + * + * {@inheritdoc} + */ + public function getUserInfo() : string + { + return $this->userInfo; + } + + /** + * {@inheritdoc} + */ + public function getHost() : string + { + return $this->host; + } + + /** + * {@inheritdoc} + */ + public function getPort() : ?int + { + return $this->isNonStandardPort($this->scheme, $this->host, $this->port) + ? $this->port + : null; + } + + /** + * {@inheritdoc} + */ + public function getPath() : string + { + return $this->path; + } + + /** + * {@inheritdoc} + */ + public function getQuery() : string + { + return $this->query; + } + + /** + * {@inheritdoc} + */ + public function getFragment() : string + { + return $this->fragment; + } + + /** + * {@inheritdoc} + */ + public function withScheme($scheme) : UriInterface + { + if (! is_string($scheme)) { + throw new Exception\InvalidArgumentException(sprintf( + '%s expects a string argument; received %s', + __METHOD__, + is_object($scheme) ? get_class($scheme) : gettype($scheme) + )); + } + + $scheme = $this->filterScheme($scheme); + + if ($scheme === $this->scheme) { + // Do nothing if no change was made. + return $this; + } + + $new = clone $this; + $new->scheme = $scheme; + + return $new; + } + + /** + * Create and return a new instance containing the provided user credentials. + * + * The value will be percent-encoded in the new instance, but with measures + * taken to prevent double-encoding. + * + * {@inheritdoc} + */ + public function withUserInfo($user, $password = null) : UriInterface + { + if (! is_string($user)) { + throw new Exception\InvalidArgumentException(sprintf( + '%s expects a string user argument; received %s', + __METHOD__, + is_object($user) ? get_class($user) : gettype($user) + )); + } + if (null !== $password && ! is_string($password)) { + throw new Exception\InvalidArgumentException(sprintf( + '%s expects a string or null password argument; received %s', + __METHOD__, + is_object($password) ? get_class($password) : gettype($password) + )); + } + + $info = $this->filterUserInfoPart($user); + if (null !== $password) { + $info .= ':' . $this->filterUserInfoPart($password); + } + + if ($info === $this->userInfo) { + // Do nothing if no change was made. + return $this; + } + + $new = clone $this; + $new->userInfo = $info; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function withHost($host) : UriInterface + { + if (! is_string($host)) { + throw new Exception\InvalidArgumentException(sprintf( + '%s expects a string argument; received %s', + __METHOD__, + is_object($host) ? get_class($host) : gettype($host) + )); + } + + if ($host === $this->host) { + // Do nothing if no change was made. + return $this; + } + + $new = clone $this; + $new->host = strtolower($host); + + return $new; + } + + /** + * {@inheritdoc} + */ + public function withPort($port) : UriInterface + { + if ($port !== null) { + if (! is_numeric($port) || is_float($port)) { + throw new Exception\InvalidArgumentException(sprintf( + 'Invalid port "%s" specified; must be an integer, an integer string, or null', + is_object($port) ? get_class($port) : gettype($port) + )); + } + + $port = (int) $port; + } + + if ($port === $this->port) { + // Do nothing if no change was made. + return $this; + } + + if ($port !== null && ($port < 1 || $port > 65535)) { + throw new Exception\InvalidArgumentException(sprintf( + 'Invalid port "%d" specified; must be a valid TCP/UDP port', + $port + )); + } + + $new = clone $this; + $new->port = $port; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function withPath($path) : UriInterface + { + if (! is_string($path)) { + throw new Exception\InvalidArgumentException( + 'Invalid path provided; must be a string' + ); + } + + if (strpos($path, '?') !== false) { + throw new Exception\InvalidArgumentException( + 'Invalid path provided; must not contain a query string' + ); + } + + if (strpos($path, '#') !== false) { + throw new Exception\InvalidArgumentException( + 'Invalid path provided; must not contain a URI fragment' + ); + } + + $path = $this->filterPath($path); + + if ($path === $this->path) { + // Do nothing if no change was made. + return $this; + } + + $new = clone $this; + $new->path = $path; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function withQuery($query) : UriInterface + { + if (! is_string($query)) { + throw new Exception\InvalidArgumentException( + 'Query string must be a string' + ); + } + + if (strpos($query, '#') !== false) { + throw new Exception\InvalidArgumentException( + 'Query string must not include a URI fragment' + ); + } + + $query = $this->filterQuery($query); + + if ($query === $this->query) { + // Do nothing if no change was made. + return $this; + } + + $new = clone $this; + $new->query = $query; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function withFragment($fragment) : UriInterface + { + if (! is_string($fragment)) { + throw new Exception\InvalidArgumentException(sprintf( + '%s expects a string argument; received %s', + __METHOD__, + is_object($fragment) ? get_class($fragment) : gettype($fragment) + )); + } + + $fragment = $this->filterFragment($fragment); + + if ($fragment === $this->fragment) { + // Do nothing if no change was made. + return $this; + } + + $new = clone $this; + $new->fragment = $fragment; + + return $new; + } + + /** + * Parse a URI into its parts, and set the properties + */ + private function parseUri(string $uri) : void + { + $parts = parse_url($uri); + + if (false === $parts) { + throw new Exception\InvalidArgumentException( + 'The source URI string appears to be malformed' + ); + } + + $this->scheme = isset($parts['scheme']) ? $this->filterScheme($parts['scheme']) : ''; + $this->userInfo = isset($parts['user']) ? $this->filterUserInfoPart($parts['user']) : ''; + $this->host = isset($parts['host']) ? strtolower($parts['host']) : ''; + $this->port = isset($parts['port']) ? $parts['port'] : null; + $this->path = isset($parts['path']) ? $this->filterPath($parts['path']) : ''; + $this->query = isset($parts['query']) ? $this->filterQuery($parts['query']) : ''; + $this->fragment = isset($parts['fragment']) ? $this->filterFragment($parts['fragment']) : ''; + + if (isset($parts['pass'])) { + $this->userInfo .= ':' . $parts['pass']; + } + } + + /** + * Create a URI string from its various parts + */ + private static function createUriString( + string $scheme, + string $authority, + string $path, + string $query, + string $fragment + ) : string { + $uri = ''; + + if ('' !== $scheme) { + $uri .= sprintf('%s:', $scheme); + } + + if ('' !== $authority) { + $uri .= '//' . $authority; + } + + if ('' !== $path && '/' !== substr($path, 0, 1)) { + $path = '/' . $path; + } + + $uri .= $path; + + + if ('' !== $query) { + $uri .= sprintf('?%s', $query); + } + + if ('' !== $fragment) { + $uri .= sprintf('#%s', $fragment); + } + + return $uri; + } + + /** + * Is a given port non-standard for the current scheme? + */ + private function isNonStandardPort(string $scheme, string $host, ?int $port) : bool + { + if ('' === $scheme) { + return '' === $host || null !== $port; + } + + if ('' === $host || null === $port) { + return false; + } + + return ! isset($this->allowedSchemes[$scheme]) || $port !== $this->allowedSchemes[$scheme]; + } + + /** + * Filters the scheme to ensure it is a valid scheme. + * + * @param string $scheme Scheme name. + * @return string Filtered scheme. + */ + private function filterScheme(string $scheme) : string + { + $scheme = strtolower($scheme); + $scheme = preg_replace('#:(//)?$#', '', $scheme); + + if ('' === $scheme) { + return ''; + } + + if (! isset($this->allowedSchemes[$scheme])) { + throw new Exception\InvalidArgumentException(sprintf( + 'Unsupported scheme "%s"; must be any empty string or in the set (%s)', + $scheme, + implode(', ', array_keys($this->allowedSchemes)) + )); + } + + return $scheme; + } + + /** + * Filters a part of user info in a URI to ensure it is properly encoded. + * + * @param string $part + * @return string + */ + private function filterUserInfoPart(string $part) : string + { + $part = $this->filterInvalidUtf8($part); + + // Note the addition of `%` to initial charset; this allows `|` portion + // to match and thus prevent double-encoding. + return preg_replace_callback( + '/(?:[^%' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . ']+|%(?![A-Fa-f0-9]{2}))/u', + [$this, 'urlEncodeChar'], + $part + ); + } + + /** + * Filters the path of a URI to ensure it is properly encoded. + */ + private function filterPath(string $path) : string + { + $path = $this->filterInvalidUtf8($path); + + $path = preg_replace_callback( + '/(?:[^' . self::CHAR_UNRESERVED . ')(:@&=\+\$,\/;%]+|%(?![A-Fa-f0-9]{2}))/u', + [$this, 'urlEncodeChar'], + $path + ); + + if ('' === $path) { + // No path + return $path; + } + + if ($path[0] !== '/') { + // Relative path + return $path; + } + + // Ensure only one leading slash, to prevent XSS attempts. + return '/' . ltrim($path, '/'); + } + + /** + * Encode invalid UTF-8 characters in given string. All other characters are unchanged. + */ + private function filterInvalidUtf8(string $string) : string + { + // check if given string contains only valid UTF-8 characters + if (preg_match('//u', $string)) { + return $string; + } + + $letters = str_split($string); + foreach ($letters as $i => $letter) { + if (! preg_match('//u', $letter)) { + $letters[$i] = $this->urlEncodeChar([$letter]); + } + } + + return implode('', $letters); + } + + /** + * Filter a query string to ensure it is propertly encoded. + * + * Ensures that the values in the query string are properly urlencoded. + */ + private function filterQuery(string $query) : string + { + if ('' !== $query && strpos($query, '?') === 0) { + $query = substr($query, 1); + } + + $parts = explode('&', $query); + foreach ($parts as $index => $part) { + [$key, $value] = $this->splitQueryValue($part); + if ($value === null) { + $parts[$index] = $this->filterQueryOrFragment($key); + continue; + } + $parts[$index] = sprintf( + '%s=%s', + $this->filterQueryOrFragment($key), + $this->filterQueryOrFragment($value) + ); + } + + return implode('&', $parts); + } + + /** + * Split a query value into a key/value tuple. + * + * @param string $value + * @return array A value with exactly two elements, key and value + */ + private function splitQueryValue(string $value) : array + { + $data = explode('=', $value, 2); + if (! isset($data[1])) { + $data[] = null; + } + return $data; + } + + /** + * Filter a fragment value to ensure it is properly encoded. + */ + private function filterFragment(string $fragment) : string + { + if ('' !== $fragment && strpos($fragment, '#') === 0) { + $fragment = '%23' . substr($fragment, 1); + } + + return $this->filterQueryOrFragment($fragment); + } + + /** + * Filter a query string key or value, or a fragment. + */ + private function filterQueryOrFragment(string $value) : string + { + $value = $this->filterInvalidUtf8($value); + + return preg_replace_callback( + '/(?:[^' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . '%:@\/\?]+|%(?![A-Fa-f0-9]{2}))/u', + [$this, 'urlEncodeChar'], + $value + ); + } + + /** + * URL encode a character returned by a regex. + */ + private function urlEncodeChar(array $matches) : string + { + return rawurlencode($matches[0]); + } +} diff --git a/vendor/laminas/laminas-diactoros/src/UriFactory.php b/vendor/laminas/laminas-diactoros/src/UriFactory.php new file mode 100644 index 00000000..ed53827b --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/UriFactory.php @@ -0,0 +1,19 @@ + true, + 'CONTENT_LENGTH' => true, + 'CONTENT_MD5' => true, + ]; + return isset($contentHeaders[$key]); + } + : static function (string $key): bool { + return strpos($key, 'CONTENT_') === 0; + }; + + $headers = []; + foreach ($server as $key => $value) { + if (! is_string($key)) { + continue; + } + + if ($value === '') { + continue; + } + + // Apache prefixes environment variables with REDIRECT_ + // if they are added by rewrite rules + if (strpos($key, 'REDIRECT_') === 0) { + $key = substr($key, 9); + + // We will not overwrite existing variables with the + // prefixed versions, though + if (array_key_exists($key, $server)) { + continue; + } + } + + if (strpos($key, 'HTTP_') === 0) { + $name = strtr(strtolower(substr($key, 5)), '_', '-'); + $headers[$name] = $value; + continue; + } + + if ($contentHeaderLookup($key)) { + $name = strtr(strtolower($key), '_', '-'); + $headers[$name] = $value; + continue; + } + } + + return $headers; +} diff --git a/vendor/laminas/laminas-diactoros/src/functions/marshal_method_from_sapi.legacy.php b/vendor/laminas/laminas-diactoros/src/functions/marshal_method_from_sapi.legacy.php new file mode 100644 index 00000000..7db5e0e8 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/functions/marshal_method_from_sapi.legacy.php @@ -0,0 +1,15 @@ +[1-9]\d*(?:\.\d)?)$#', $server['SERVER_PROTOCOL'], $matches)) { + throw Exception\UnrecognizedProtocolVersionException::forVersion( + (string) $server['SERVER_PROTOCOL'] + ); + } + + return $matches['version']; +} diff --git a/vendor/laminas/laminas-diactoros/src/functions/marshal_uri_from_sapi.legacy.php b/vendor/laminas/laminas-diactoros/src/functions/marshal_uri_from_sapi.legacy.php new file mode 100644 index 00000000..f121f23f --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/functions/marshal_uri_from_sapi.legacy.php @@ -0,0 +1,15 @@ +withScheme($scheme); + + // Set the host + [$host, $port] = $marshalHostAndPort($headers, $server); + if (! empty($host)) { + $uri = $uri->withHost($host); + if (! empty($port)) { + $uri = $uri->withPort($port); + } + } + + // URI path + $path = $marshalRequestPath($server); + + // Strip query string + $path = explode('?', $path, 2)[0]; + + // URI query + $query = ''; + if (isset($server['QUERY_STRING'])) { + $query = ltrim($server['QUERY_STRING'], '?'); + } + + // URI fragment + $fragment = ''; + if (strpos($path, '#') !== false) { + [$path, $fragment] = explode('#', $path, 2); + } + + return $uri + ->withPath($path) + ->withFragment($fragment) + ->withQuery($query); +} diff --git a/vendor/laminas/laminas-diactoros/src/functions/normalize_server.legacy.php b/vendor/laminas/laminas-diactoros/src/functions/normalize_server.legacy.php new file mode 100644 index 00000000..a4287f20 --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/functions/normalize_server.legacy.php @@ -0,0 +1,15 @@ + $value) { + if (is_array($value)) { + // Traverse + $normalized[$key] = $recursiveNormalize( + $tmpNameTree[$key], + $sizeTree[$key], + $errorTree[$key], + $nameTree[$key] ?? null, + $typeTree[$key] ?? null + ); + continue; + } + $normalized[$key] = createUploadedFile([ + 'tmp_name' => $tmpNameTree[$key], + 'size' => $sizeTree[$key], + 'error' => $errorTree[$key], + 'name' => $nameTree[$key] ?? null, + 'type' => $typeTree[$key] ?? null, + ]); + } + return $normalized; + }; + + /** + * Normalize an array of file specifications. + * + * Loops through all nested files (as determined by receiving an array to the + * `tmp_name` key of a `$_FILES` specification) and returns a normalized array + * of UploadedFile instances. + * + * This function normalizes a `$_FILES` array representing a nested set of + * uploaded files as produced by the php-fpm SAPI, CGI SAPI, or mod_php + * SAPI. + * + * @param array $files + * @return UploadedFile[] + */ + $normalizeUploadedFileSpecification = function (array $files = []) use (&$recursiveNormalize) : array { + if (! isset($files['tmp_name']) || ! is_array($files['tmp_name']) + || ! isset($files['size']) || ! is_array($files['size']) + || ! isset($files['error']) || ! is_array($files['error']) + ) { + throw new Exception\InvalidArgumentException(sprintf( + '$files provided to %s MUST contain each of the keys "tmp_name",' + . ' "size", and "error", with each represented as an array;' + . ' one or more were missing or non-array values', + __FUNCTION__ + )); + } + + return $recursiveNormalize( + $files['tmp_name'], + $files['size'], + $files['error'], + $files['name'] ?? null, + $files['type'] ?? null + ); + }; + + $normalized = []; + foreach ($files as $key => $value) { + if ($value instanceof UploadedFileInterface) { + $normalized[$key] = $value; + continue; + } + + if (is_array($value) && isset($value['tmp_name']) && is_array($value['tmp_name'])) { + $normalized[$key] = $normalizeUploadedFileSpecification($value); + continue; + } + + if (is_array($value) && isset($value['tmp_name'])) { + $normalized[$key] = createUploadedFile($value); + continue; + } + + if (is_array($value)) { + $normalized[$key] = normalizeUploadedFiles($value); + continue; + } + + throw new Exception\InvalidArgumentException('Invalid value in files specification'); + } + return $normalized; +} diff --git a/vendor/laminas/laminas-diactoros/src/functions/parse_cookie_header.legacy.php b/vendor/laminas/laminas-diactoros/src/functions/parse_cookie_header.legacy.php new file mode 100644 index 00000000..1297d36a --- /dev/null +++ b/vendor/laminas/laminas-diactoros/src/functions/parse_cookie_header.legacy.php @@ -0,0 +1,15 @@ +[!#$%&\'*+-.0-9A-Z^_`a-z|~]+) + = + (?P"?) + (?P[\x21\x23-\x2b\x2d-\x3a\x3c-\x5b\x5d-\x7e]*) + (?P=DQUOTE) + (?=\\n?[ \t]*$|;[ ]) + )x', $cookieHeader, $matches, PREG_SET_ORDER); + + $cookies = []; + + foreach ($matches as $match) { + $cookies[$match['name']] = urldecode($match['value']); + } + + return $cookies; +}