},
{
"name": "laminas/laminas-diactoros",
- "version": "2.11.0",
+ "version": "2.11.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-diactoros.git",
- "reference": "d1bc565b23c2040fafde398a8a5db083c47928c0"
+ "reference": "25b11d422c2e5dad868f68619888763b30f91e2d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/d1bc565b23c2040fafde398a8a5db083c47928c0",
- "reference": "d1bc565b23c2040fafde398a8a5db083c47928c0",
+ "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/25b11d422c2e5dad868f68619888763b30f91e2d",
+ "reference": "25b11d422c2e5dad868f68619888763b30f91e2d",
"shasum": ""
},
"require": {
"type": "community_bridge"
}
],
- "time": "2022-05-17T10:57:52+00:00"
+ "time": "2022-06-28T21:07:29+00:00"
},
{
"name": "laminas/laminas-httphandlerrunner",
},
{
"name": "symfony/deprecation-contracts",
- "version": "v3.1.0",
+ "version": "v3.1.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.0"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1"
},
"funding": [
{
'Laminas\\Diactoros\\Exception\\DeserializationException' => $vendorDir . '/laminas/laminas-diactoros/src/Exception/DeserializationException.php',
'Laminas\\Diactoros\\Exception\\ExceptionInterface' => $vendorDir . '/laminas/laminas-diactoros/src/Exception/ExceptionInterface.php',
'Laminas\\Diactoros\\Exception\\InvalidArgumentException' => $vendorDir . '/laminas/laminas-diactoros/src/Exception/InvalidArgumentException.php',
+ 'Laminas\\Diactoros\\Exception\\InvalidForwardedHeaderNameException' => $vendorDir . '/laminas/laminas-diactoros/src/Exception/InvalidForwardedHeaderNameException.php',
+ 'Laminas\\Diactoros\\Exception\\InvalidProxyAddressException' => $vendorDir . '/laminas/laminas-diactoros/src/Exception/InvalidProxyAddressException.php',
'Laminas\\Diactoros\\Exception\\InvalidStreamPointerPositionException' => $vendorDir . '/laminas/laminas-diactoros/src/Exception/InvalidStreamPointerPositionException.php',
'Laminas\\Diactoros\\Exception\\RuntimeException' => $vendorDir . '/laminas/laminas-diactoros/src/Exception/RuntimeException.php',
'Laminas\\Diactoros\\Exception\\SerializationException' => $vendorDir . '/laminas/laminas-diactoros/src/Exception/SerializationException.php',
'Laminas\\Diactoros\\Response\\XmlResponse' => $vendorDir . '/laminas/laminas-diactoros/src/Response/XmlResponse.php',
'Laminas\\Diactoros\\ServerRequest' => $vendorDir . '/laminas/laminas-diactoros/src/ServerRequest.php',
'Laminas\\Diactoros\\ServerRequestFactory' => $vendorDir . '/laminas/laminas-diactoros/src/ServerRequestFactory.php',
+ 'Laminas\\Diactoros\\ServerRequestFilter\\DoNotFilter' => $vendorDir . '/laminas/laminas-diactoros/src/ServerRequestFilter/DoNotFilter.php',
+ 'Laminas\\Diactoros\\ServerRequestFilter\\FilterServerRequestInterface' => $vendorDir . '/laminas/laminas-diactoros/src/ServerRequestFilter/FilterServerRequestInterface.php',
+ 'Laminas\\Diactoros\\ServerRequestFilter\\FilterUsingXForwardedHeaders' => $vendorDir . '/laminas/laminas-diactoros/src/ServerRequestFilter/FilterUsingXForwardedHeaders.php',
+ 'Laminas\\Diactoros\\ServerRequestFilter\\IPRange' => $vendorDir . '/laminas/laminas-diactoros/src/ServerRequestFilter/IPRange.php',
'Laminas\\Diactoros\\Stream' => $vendorDir . '/laminas/laminas-diactoros/src/Stream.php',
'Laminas\\Diactoros\\StreamFactory' => $vendorDir . '/laminas/laminas-diactoros/src/StreamFactory.php',
'Laminas\\Diactoros\\UploadedFile' => $vendorDir . '/laminas/laminas-diactoros/src/UploadedFile.php',
'Laminas\\Diactoros\\Exception\\DeserializationException' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/Exception/DeserializationException.php',
'Laminas\\Diactoros\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/Exception/ExceptionInterface.php',
'Laminas\\Diactoros\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/Exception/InvalidArgumentException.php',
+ 'Laminas\\Diactoros\\Exception\\InvalidForwardedHeaderNameException' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/Exception/InvalidForwardedHeaderNameException.php',
+ 'Laminas\\Diactoros\\Exception\\InvalidProxyAddressException' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/Exception/InvalidProxyAddressException.php',
'Laminas\\Diactoros\\Exception\\InvalidStreamPointerPositionException' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/Exception/InvalidStreamPointerPositionException.php',
'Laminas\\Diactoros\\Exception\\RuntimeException' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/Exception/RuntimeException.php',
'Laminas\\Diactoros\\Exception\\SerializationException' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/Exception/SerializationException.php',
'Laminas\\Diactoros\\Response\\XmlResponse' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/Response/XmlResponse.php',
'Laminas\\Diactoros\\ServerRequest' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/ServerRequest.php',
'Laminas\\Diactoros\\ServerRequestFactory' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/ServerRequestFactory.php',
+ 'Laminas\\Diactoros\\ServerRequestFilter\\DoNotFilter' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/ServerRequestFilter/DoNotFilter.php',
+ 'Laminas\\Diactoros\\ServerRequestFilter\\FilterServerRequestInterface' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/ServerRequestFilter/FilterServerRequestInterface.php',
+ 'Laminas\\Diactoros\\ServerRequestFilter\\FilterUsingXForwardedHeaders' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/ServerRequestFilter/FilterUsingXForwardedHeaders.php',
+ 'Laminas\\Diactoros\\ServerRequestFilter\\IPRange' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/ServerRequestFilter/IPRange.php',
'Laminas\\Diactoros\\Stream' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/Stream.php',
'Laminas\\Diactoros\\StreamFactory' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/StreamFactory.php',
'Laminas\\Diactoros\\UploadedFile' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/UploadedFile.php',
},
{
"name": "laminas/laminas-diactoros",
- "version": "2.11.0",
- "version_normalized": "2.11.0.0",
+ "version": "2.11.1",
+ "version_normalized": "2.11.1.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-diactoros.git",
- "reference": "d1bc565b23c2040fafde398a8a5db083c47928c0"
+ "reference": "25b11d422c2e5dad868f68619888763b30f91e2d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/d1bc565b23c2040fafde398a8a5db083c47928c0",
- "reference": "d1bc565b23c2040fafde398a8a5db083c47928c0",
+ "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/25b11d422c2e5dad868f68619888763b30f91e2d",
+ "reference": "25b11d422c2e5dad868f68619888763b30f91e2d",
"shasum": ""
},
"require": {
"psalm/plugin-phpunit": "^0.14.0",
"vimeo/psalm": "^4.3"
},
- "time": "2022-05-17T10:57:52+00:00",
+ "time": "2022-06-28T21:07:29+00:00",
"type": "library",
"extra": {
"laminas": {
},
{
"name": "symfony/deprecation-contracts",
- "version": "v3.1.0",
- "version_normalized": "3.1.0.0",
+ "version": "v3.1.1",
+ "version_normalized": "3.1.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.0"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1"
},
"funding": [
{
'dev_requirement' => false,
),
'laminas/laminas-diactoros' => array(
- 'pretty_version' => '2.11.0',
- 'version' => '2.11.0.0',
- 'reference' => 'd1bc565b23c2040fafde398a8a5db083c47928c0',
+ 'pretty_version' => '2.11.1',
+ 'version' => '2.11.1.0',
+ 'reference' => '25b11d422c2e5dad868f68619888763b30f91e2d',
'type' => 'library',
'install_path' => __DIR__ . '/../laminas/laminas-diactoros',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/deprecation-contracts' => array(
- 'pretty_version' => 'v3.1.0',
- 'version' => '3.1.0.0',
+ 'pretty_version' => 'v3.1.1',
+ 'version' => '3.1.1.0',
'reference' => '07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
},
{
"name": "composer/pcre",
- "version": "1.0.1",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
- "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560"
+ "reference": "c8e9d27cfc5ed22643c19c160455b473ffd8aabe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560",
- "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/c8e9d27cfc5ed22643c19c160455b473ffd8aabe",
+ "reference": "c8e9d27cfc5ed22643c19c160455b473ffd8aabe",
"shasum": ""
},
"require": {
- "php": "^5.3.2 || ^7.0 || ^8.0"
+ "php": "^7.2 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^1.3",
"phpstan/phpstan-strict-rules": "^1.1",
- "symfony/phpunit-bridge": "^4.2 || ^5"
+ "symfony/phpunit-bridge": "^5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.x-dev"
+ "dev-main": "2.x-dev"
}
},
"autoload": {
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
- "source": "https://github.com/composer/pcre/tree/1.0.1"
+ "source": "https://github.com/composer/pcre/tree/2.0.0"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2022-01-21T20:24:37+00:00"
+ "time": "2022-02-25T20:05:29+00:00"
},
{
"name": "composer/semver",
- "version": "3.2.9",
+ "version": "3.3.2",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
- "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649"
+ "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/a951f614bd64dcd26137bc9b7b2637ddcfc57649",
- "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649",
+ "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9",
+ "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9",
"shasum": ""
},
"require": {
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/3.2.9"
+ "source": "https://github.com/composer/semver/tree/3.3.2"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2022-02-04T13:58:43+00:00"
+ "time": "2022-04-01T19:23:25+00:00"
},
{
"name": "composer/xdebug-handler",
- "version": "3.0.1",
+ "version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/composer/xdebug-handler.git",
- "reference": "12f1b79476638a5615ed00ea6adbb269cec96fd8"
+ "reference": "ced299686f41dce890debac69273b47ffe98a40c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/12f1b79476638a5615ed00ea6adbb269cec96fd8",
- "reference": "12f1b79476638a5615ed00ea6adbb269cec96fd8",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c",
+ "reference": "ced299686f41dce890debac69273b47ffe98a40c",
"shasum": ""
},
"require": {
- "composer/pcre": "^1",
+ "composer/pcre": "^1 || ^2 || ^3",
"php": "^7.2.5 || ^8.0",
"psr/log": "^1 || ^2 || ^3"
},
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/xdebug-handler/issues",
- "source": "https://github.com/composer/xdebug-handler/tree/3.0.1"
+ "source": "https://github.com/composer/xdebug-handler/tree/3.0.3"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2022-01-04T18:29:42+00:00"
+ "time": "2022-02-25T21:32:43+00:00"
},
{
"name": "dnoegel/php-xdg-base-dir",
},
{
"name": "doctrine/instantiator",
- "version": "1.4.0",
+ "version": "1.4.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
+ "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
+ "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^8.0",
+ "doctrine/coding-standard": "^9",
"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"
+ "phpbench/phpbench": "^0.16 || ^1",
+ "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.22"
},
"type": "library",
"autoload": {
],
"support": {
"issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
+ "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2020-11-10T18:47:58+00:00"
+ "time": "2022-03-03T08:28:38+00:00"
},
{
"name": "felixfbecker/advanced-json-rpc",
},
{
"name": "felixfbecker/language-server-protocol",
- "version": "1.5.1",
+ "version": "v1.5.2",
"source": {
"type": "git",
"url": "https://github.com/felixfbecker/php-language-server-protocol.git",
- "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730"
+ "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/9d846d1f5cf101deee7a61c8ba7caa0a975cd730",
- "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730",
+ "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842",
+ "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842",
"shasum": ""
},
"require": {
],
"support": {
"issues": "https://github.com/felixfbecker/php-language-server-protocol/issues",
- "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/1.5.1"
+ "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2"
},
- "time": "2021-02-22T14:02:09+00:00"
+ "time": "2022-03-02T22:36:06+00:00"
},
{
"name": "http-interop/http-factory-tests",
},
{
"name": "myclabs/deep-copy",
- "version": "1.10.2",
+ "version": "1.11.0",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
+ "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
+ "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3,<3.2.2"
+ },
"require-dev": {
- "doctrine/collections": "^1.0",
- "doctrine/common": "^2.6",
- "phpunit/phpunit": "^7.1"
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
},
"type": "library",
"autoload": {
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2020-11-13T09:40:50+00:00"
+ "time": "2022-03-03T13:19:32+00:00"
},
{
"name": "netresearch/jsonmapper",
},
{
"name": "nikic/php-parser",
- "version": "v4.13.2",
+ "version": "v4.14.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
+ "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
- "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1",
+ "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1",
"shasum": ""
},
"require": {
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0"
},
- "time": "2021-11-30T19:35:32+00:00"
+ "time": "2022-05-31T20:59:12+00:00"
},
{
"name": "openlss/lib-array2xml",
},
{
"name": "phpdocumentor/type-resolver",
- "version": "1.6.0",
+ "version": "1.6.1",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706"
+ "reference": "77a32518733312af16a44300404e945338981de3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706",
- "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
+ "reference": "77a32518733312af16a44300404e945338981de3",
"shasum": ""
},
"require": {
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0"
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
},
- "time": "2022-01-04T19:58:01+00:00"
+ "time": "2022-03-15T21:29:03+00:00"
},
{
"name": "phpspec/prophecy",
},
{
"name": "phpunit/php-code-coverage",
- "version": "9.2.11",
+ "version": "9.2.15",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "665a1ac0a763c51afc30d6d130dac0813092b17f"
+ "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/665a1ac0a763c51afc30d6d130dac0813092b17f",
- "reference": "665a1ac0a763c51afc30d6d130dac0813092b17f",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
+ "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
"shasum": ""
},
"require": {
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.11"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
},
"funding": [
{
"type": "github"
}
],
- "time": "2022-02-18T12:46:09+00:00"
+ "time": "2022-03-07T09:28:20+00:00"
},
{
"name": "phpunit/php-file-iterator",
},
{
"name": "phpunit/phpunit",
- "version": "9.5.14",
+ "version": "9.5.21",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "1883687169c017d6ae37c58883ca3994cfc34189"
+ "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1883687169c017d6ae37c58883ca3994cfc34189",
- "reference": "1883687169c017d6ae37c58883ca3994cfc34189",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0e32b76be457de00e83213528f6bb37e2a38fcb1",
+ "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1",
"shasum": ""
},
"require": {
"phar-io/version": "^3.0.2",
"php": ">=7.3",
"phpspec/prophecy": "^1.12.1",
- "phpunit/php-code-coverage": "^9.2.7",
+ "phpunit/php-code-coverage": "^9.2.13",
"phpunit/php-file-iterator": "^3.0.5",
"phpunit/php-invoker": "^3.1.1",
"phpunit/php-text-template": "^2.0.3",
"sebastian/global-state": "^5.0.1",
"sebastian/object-enumerator": "^4.0.3",
"sebastian/resource-operations": "^3.0.3",
- "sebastian/type": "^2.3.4",
+ "sebastian/type": "^3.0",
"sebastian/version": "^3.0.2"
},
"require-dev": {
- "ext-pdo": "*",
"phpspec/prophecy-phpunit": "^2.0.1"
},
"suggest": {
],
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.14"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.21"
},
"funding": [
{
"type": "github"
}
],
- "time": "2022-02-18T12:54:07+00:00"
+ "time": "2022-06-19T12:14:25+00:00"
},
{
"name": "psalm/plugin-phpunit",
},
{
"name": "sebastian/environment",
- "version": "5.1.3",
+ "version": "5.1.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
+ "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
- "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7",
+ "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7",
"shasum": ""
},
"require": {
],
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4"
},
"funding": [
{
"type": "github"
}
],
- "time": "2020-09-28T05:52:38+00:00"
+ "time": "2022-04-03T09:37:03+00:00"
},
{
"name": "sebastian/exporter",
},
{
"name": "sebastian/type",
- "version": "2.3.4",
+ "version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
- "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914"
+ "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914",
- "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
+ "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^9.5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.3-dev"
+ "dev-master": "3.0-dev"
}
},
"autoload": {
"homepage": "https://github.com/sebastianbergmann/type",
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/2.3.4"
+ "source": "https://github.com/sebastianbergmann/type/tree/3.0.0"
},
"funding": [
{
"type": "github"
}
],
- "time": "2021-06-15T12:49:02+00:00"
+ "time": "2022-03-15T09:54:48+00:00"
},
{
"name": "sebastian/version",
},
{
"name": "symfony/console",
- "version": "v5.4.3",
+ "version": "v5.4.9",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8"
+ "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/a2a86ec353d825c75856c6fd14fac416a7bdb6b8",
- "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8",
+ "url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb",
+ "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb",
"shasum": ""
},
"require": {
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v5.4.3"
+ "source": "https://github.com/symfony/console/tree/v5.4.9"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2022-01-26T16:28:35+00:00"
+ "time": "2022-05-18T06:17:34+00:00"
},
{
"name": "symfony/deprecation-contracts",
- "version": "v2.5.0",
+ "version": "v2.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8"
+ "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8",
- "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
+ "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
"shasum": ""
},
"require": {
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2021-07-12T14:48:14+00:00"
+ "time": "2022-01-02T09:53:40+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.24.0",
+ "version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "30885182c981ab175d4d034db0f6f469898070ab"
+ "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
- "reference": "30885182c981ab175d4d034db0f6f469898070ab",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
+ "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
"shasum": ""
},
"require": {
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Ctype\\": ""
- },
"files": [
"bootstrap.php"
- ]
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2021-10-20T20:35:02+00:00"
+ "time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.24.0",
+ "version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
+ "reference": "433d05519ce6990bf3530fba6957499d327395c2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
- "reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2",
+ "reference": "433d05519ce6990bf3530fba6957499d327395c2",
"shasum": ""
},
"require": {
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2021-11-23T21:10:46+00:00"
+ "time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.24.0",
+ "version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
+ "reference": "219aa369ceff116e673852dce47c3a41794c14bd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
- "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd",
+ "reference": "219aa369ceff116e673852dce47c3a41794c14bd",
"shasum": ""
},
"require": {
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2021-02-19T12:13:01+00:00"
+ "time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.24.0",
+ "version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
+ "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
- "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
+ "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
"shasum": ""
},
"require": {
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2021-11-30T18:21:41+00:00"
+ "time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-php73",
- "version": "v1.24.0",
+ "version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5"
+ "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5",
- "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85",
+ "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85",
"shasum": ""
},
"require": {
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0"
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2021-06-05T21:20:04+00:00"
+ "time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.24.0",
+ "version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9"
+ "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9",
- "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace",
+ "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace",
"shasum": ""
},
"require": {
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2021-09-13T13:58:33+00:00"
+ "time": "2022-05-10T07:21:04+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v2.5.0",
+ "version": "v2.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc"
+ "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
- "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
+ "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/container": "^1.1",
- "symfony/deprecation-contracts": "^2.1"
+ "symfony/deprecation-contracts": "^2.1|^3"
},
"conflict": {
"ext-psr": "<1.1|>=2"
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v2.5.0"
+ "source": "https://github.com/symfony/service-contracts/tree/v2.5.1"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2021-11-04T16:48:04+00:00"
+ "time": "2022-03-13T20:07:29+00:00"
},
{
"name": "symfony/string",
- "version": "v5.4.3",
+ "version": "v5.4.9",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10"
+ "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10",
- "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10",
+ "url": "https://api.github.com/repos/symfony/string/zipball/985e6a9703ef5ce32ba617c9c7d97873bb7b2a99",
+ "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99",
"shasum": ""
},
"require": {
},
"type": "library",
"autoload": {
- "psr-4": {
- "Symfony\\Component\\String\\": ""
- },
"files": [
"Resources/functions.php"
],
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
"exclude-from-classmap": [
"/Tests/"
]
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v5.4.3"
+ "source": "https://github.com/symfony/string/tree/v5.4.9"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2022-01-02T09:53:40+00:00"
+ "time": "2022-04-19T10:40:37+00:00"
},
{
"name": "theseer/tokenizer",
},
{
"name": "vimeo/psalm",
- "version": "4.21.0",
+ "version": "4.23.0",
"source": {
"type": "git",
"url": "https://github.com/vimeo/psalm.git",
- "reference": "d8bec4c7aaee111a532daec32fb09de5687053d1"
+ "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vimeo/psalm/zipball/d8bec4c7aaee111a532daec32fb09de5687053d1",
- "reference": "d8bec4c7aaee111a532daec32fb09de5687053d1",
+ "url": "https://api.github.com/repos/vimeo/psalm/zipball/f1fe6ff483bf325c803df9f510d09a03fd796f88",
+ "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88",
"shasum": ""
},
"require": {
"php": "^7.1|^8",
"sebastian/diff": "^3.0 || ^4.0",
"symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0",
+ "symfony/polyfill-php80": "^1.25",
"webmozart/path-util": "^2.3"
},
"provide": {
],
"support": {
"issues": "https://github.com/vimeo/psalm/issues",
- "source": "https://github.com/vimeo/psalm/tree/4.21.0"
+ "source": "https://github.com/vimeo/psalm/tree/4.23.0"
},
- "time": "2022-02-18T04:34:15+00:00"
+ "time": "2022-04-28T17:35:49+00:00"
},
{
"name": "webmozart/assert",
- "version": "1.10.0",
+ "version": "1.11.0",
"source": {
"type": "git",
"url": "https://github.com/webmozarts/assert.git",
- "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
- "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
"shasum": ""
},
"require": {
- "php": "^7.2 || ^8.0",
- "symfony/polyfill-ctype": "^1.8"
+ "ext-ctype": "*",
+ "php": "^7.2 || ^8.0"
},
"conflict": {
"phpstan/phpstan": "<0.12.20",
],
"support": {
"issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.10.0"
+ "source": "https://github.com/webmozarts/assert/tree/1.11.0"
},
- "time": "2021-03-09T10:59:23+00:00"
+ "time": "2022-06-03T18:03:27+00:00"
},
{
"name": "webmozart/path-util",
<?xml version="1.0" encoding="UTF-8"?>
-<files psalm-version="4.21.0@d8bec4c7aaee111a532daec32fb09de5687053d1">
+<files psalm-version="4.23.0@f1fe6ff483bf325c803df9f510d09a03fd796f88">
<file src="src/CallbackStream.php">
<ImplementedReturnTypeMismatch occurrences="1">
<code>null|callable</code>
</ParamNameMismatch>
</file>
<file src="src/ServerRequestFactory.php">
+ <LessSpecificReturnStatement occurrences="1"/>
<MixedArgument occurrences="1">
<code>$headers['cookie']</code>
</MixedArgument>
+ <MixedAssignment occurrences="3">
+ <code>$iisUrlRewritten</code>
+ <code>$requestUri</code>
+ <code>$unencodedUrl</code>
+ </MixedAssignment>
+ <MixedInferredReturnType occurrences="1">
+ <code>array{string, int|null}</code>
+ </MixedInferredReturnType>
+ <MixedReturnStatement occurrences="1">
+ <code>$defaults</code>
+ </MixedReturnStatement>
+ <MoreSpecificReturnType occurrences="1">
+ <code>ServerRequest</code>
+ </MoreSpecificReturnType>
<RedundantConditionGivenDocblockType occurrences="1">
<code>is_callable(self::$apacheRequestHeaders)</code>
</RedundantConditionGivenDocblockType>
</file>
+ <file src="src/ServerRequestFilter/FilterUsingXForwardedHeaders.php">
+ <ImpureMethodCall occurrences="7">
+ <code>getHeaderLine</code>
+ <code>getServerParams</code>
+ <code>getUri</code>
+ <code>withHost</code>
+ <code>withPort</code>
+ <code>withScheme</code>
+ <code>withUri</code>
+ </ImpureMethodCall>
+ <LessSpecificReturnStatement occurrences="1">
+ <code>$proxyCIDRList</code>
+ </LessSpecificReturnStatement>
+ <MoreSpecificReturnType occurrences="1">
+ <code>list<non-empty-string></code>
+ </MoreSpecificReturnType>
+ </file>
<file src="src/Stream.php">
<InvalidArgument occurrences="1"/>
<MixedInferredReturnType occurrences="1">
</projectFiles>
<issueHandlers>
+ <DeprecatedFunction>
+ <errorLevel type="suppress">
+ <referencedFunction name="laminas\diactoros\marshalurifromsapi"/>
+ </errorLevel>
+ </DeprecatedFunction>
+
+ <InternalClass>
+ <errorLevel type="suppress">
+ <referencedClass name="Laminas\Diactoros\ServerRequestFilter\IPRange"/>
+ </errorLevel>
+ </InternalClass>
+
<InternalMethod>
<errorLevel type="suppress">
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::method"/>
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::willReturn"/>
<referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::with"/>
+ <referencedMethod name="Laminas\Diactoros\ServerRequestFilter\IPRange::matches"/>
+ <referencedMethod name="Laminas\Diactoros\ServerRequestFilter\IPRange::matchesIPv4"/>
+ <referencedMethod name="Laminas\Diactoros\ServerRequestFilter\IPRange::matchesIPv6"/>
</errorLevel>
</InternalMethod>
class ConfigProvider
{
+ public const CONFIG_KEY = 'laminas-diactoros';
+ public const X_FORWARDED = 'x-forwarded-request-filter';
+ public const X_FORWARDED_TRUSTED_PROXIES = 'trusted-proxies';
+ public const X_FORWARDED_TRUSTED_HEADERS = 'trusted-headers';
+
/**
* Retrieve configuration for laminas-diactoros.
*
{
return [
'dependencies' => $this->getDependencies(),
+ self::CONFIG_KEY => $this->getComponentConfig(),
];
}
*/
public function getDependencies() : array
{
+ // @codingStandardsIgnoreStart
return [
'invokables' => [
RequestFactoryInterface::class => RequestFactory::class,
UriFactoryInterface::class => UriFactory::class
],
];
+ // @codingStandardsIgnoreEnd
+ }
+
+ public function getComponentConfig(): array
+ {
+ return [
+ self::X_FORWARDED => [
+ self::X_FORWARDED_TRUSTED_PROXIES => '',
+ self::X_FORWARDED_TRUSTED_HEADERS => [],
+ ],
+ ];
}
}
--- /dev/null
+<?php
+
+declare(strict_types=1);
+
+namespace Laminas\Diactoros\Exception;
+
+use Laminas\Diactoros\ServerRequestFilter\FilterUsingXForwardedHeaders;
+
+class InvalidForwardedHeaderNameException extends RuntimeException implements ExceptionInterface
+{
+ /** @param mixed $name */
+ public static function forHeader($name): self
+ {
+ if (! is_string($name)) {
+ $name = sprintf('(value of type %s)', is_object($name) ? get_class($name) : gettype($name));
+ }
+
+ return new self(sprintf(
+ 'Invalid X-Forwarded-* header name "%s" provided to %s',
+ $name,
+ FilterUsingXForwardedHeaders::class
+ ));
+ }
+}
--- /dev/null
+<?php
+
+declare(strict_types=1);
+
+namespace Laminas\Diactoros\Exception;
+
+class InvalidProxyAddressException extends RuntimeException implements ExceptionInterface
+{
+ /** @param mixed $proxy */
+ public static function forInvalidProxyArgument($proxy): self
+ {
+ $type = is_object($proxy) ? get_class($proxy) : gettype($proxy);
+ return new self(sprintf(
+ 'Invalid proxy of type "%s" provided;'
+ . ' must be a valid IPv4 or IPv6 address, optionally with a subnet mask provided'
+ . ' or an array of such values',
+ $type,
+ ));
+ }
+
+ public static function forAddress(string $address): self
+ {
+ return new self(sprintf(
+ 'Invalid proxy address "%s" provided;'
+ . ' must be a valid IPv4 or IPv6 address, optionally with a subnet mask provided',
+ $address,
+ ));
+ }
+}
namespace Laminas\Diactoros;
+use Laminas\Diactoros\ServerRequestFilter\FilterServerRequestInterface;
+use Laminas\Diactoros\ServerRequestFilter\FilterUsingXForwardedHeaders;
use Psr\Http\Message\ServerRequestFactoryInterface;
use Psr\Http\Message\ServerRequestInterface;
* @param array $body $_POST superglobal
* @param array $cookies $_COOKIE superglobal
* @param array $files $_FILES superglobal
+ * @param null|FilterServerRequestInterface $requestFilter If present, the
+ * generated request will be passed to this instance and the result
+ * returned by this method. When not present, a default instance of
+ * FilterUsingXForwardedHeaders is created, using the `trustReservedSubnets()`
+ * constructor.
* @return ServerRequest
*/
public static function fromGlobals(
array $query = null,
array $body = null,
array $cookies = null,
- array $files = null
+ array $files = null,
+ ?FilterServerRequestInterface $requestFilter = null
) : ServerRequest {
+ $requestFilter = $requestFilter ?: FilterUsingXForwardedHeaders::trustReservedSubnets();
+
$server = normalizeServer(
$server ?: $_SERVER,
is_callable(self::$apacheRequestHeaders) ? self::$apacheRequestHeaders : null
$cookies = parseCookieHeader($headers['cookie']);
}
- return new ServerRequest(
+ return $requestFilter(new ServerRequest(
$server,
$files,
- marshalUriFromSapi($server, $headers),
+ self::marshalUriFromSapi($server),
marshalMethodFromSapi($server),
'php://input',
$headers,
$query ?: $_GET,
$body ?: $_POST,
marshalProtocolVersionFromSapi($server)
- );
+ ));
}
/**
'php://temp'
);
}
+
+ /**
+ * Marshal a Uri instance based on the values present in the $_SERVER array and headers.
+ *
+ * @param array $server SAPI parameters
+ */
+ private static function marshalUriFromSapi(array $server) : Uri
+ {
+ $uri = new Uri('');
+
+ // URI scheme
+ $https = false;
+ if (array_key_exists('HTTPS', $server)) {
+ $https = self::marshalHttpsValue($server['HTTPS']);
+ } elseif (array_key_exists('https', $server)) {
+ $https = self::marshalHttpsValue($server['https']);
+ }
+
+ $uri = $uri->withScheme($https ? 'https' : 'http');
+
+ // Set the host
+ [$host, $port] = self::marshalHostAndPort($server);
+ if (! empty($host)) {
+ $uri = $uri->withHost($host);
+ if (! empty($port)) {
+ $uri = $uri->withPort($port);
+ }
+ }
+
+ // URI path
+ $path = self::marshalRequestPath($server);
+
+ // Strip query string
+ $path = explode('?', $path, 2)[0];
+
+ // URI query
+ $query = '';
+ if (isset($server['QUERY_STRING'])) {
+ $query = ltrim((string) $server['QUERY_STRING'], '?');
+ }
+
+ // URI fragment
+ $fragment = '';
+ if (strpos($path, '#') !== false) {
+ [$path, $fragment] = explode('#', $path, 2);
+ }
+
+ return $uri
+ ->withPath($path)
+ ->withFragment($fragment)
+ ->withQuery($query);
+ }
+
+ /**
+ * Marshal the host and port from the PHP environment.
+ *
+ * @return array{string, int|null} Array of two items, host and port,
+ * in that order (can be passed to a list() operation).
+ */
+ private static function marshalHostAndPort(array $server) : array
+ {
+ static $defaults = ['', null];
+
+ if (! isset($server['SERVER_NAME'])) {
+ return $defaults;
+ }
+
+ $host = (string) $server['SERVER_NAME'];
+ $port = isset($server['SERVER_PORT']) ? (int) $server['SERVER_PORT'] : null;
+
+ if (! isset($server['SERVER_ADDR'])
+ || ! preg_match('/^\[[0-9a-fA-F\:]+\]$/', $host)
+ ) {
+ return [$host, $port];
+ }
+
+ // Misinterpreted IPv6-Address
+ // Reported for Safari on Windows
+ return self::marshalIpv6HostAndPort($server, $port);
+ }
+
+ /**
+ * @return array{string, int|null} Array of two items, host and port,
+ * in that order (can be passed to a list() operation).
+ */
+ private static function marshalIpv6HostAndPort(array $server, ?int $port) : array
+ {
+ $host = '[' . (string) $server['SERVER_ADDR'] . ']';
+ $port = $port ?: 80;
+ $portSeparatorPos = strrpos($host, ':');
+
+ if (false === $portSeparatorPos) {
+ return [$host, $port];
+ }
+
+ if ($port . ']' === substr($host, $portSeparatorPos + 1)) {
+ // The last digit of the IPv6-Address has been taken as port
+ // Unset the port so the default port can be used
+ $port = null;
+ }
+ return [$host, $port];
+ }
+
+ /**
+ * Detect the path for the request
+ *
+ * Looks at a variety of criteria in order to attempt to autodetect the base
+ * request path, including:
+ *
+ * - IIS7 UrlRewrite environment
+ * - REQUEST_URI
+ * - ORIG_PATH_INFO
+ */
+ private static function marshalRequestPath(array $server) : string
+ {
+ // IIS7 with URL Rewrite: make sure we get the unencoded url
+ // (double slash problem).
+ $iisUrlRewritten = $server['IIS_WasUrlRewritten'] ?? null;
+ $unencodedUrl = $server['UNENCODED_URL'] ?? '';
+ if ('1' === $iisUrlRewritten && is_string($unencodedUrl) && '' !== $unencodedUrl) {
+ return $unencodedUrl;
+ }
+
+ $requestUri = $server['REQUEST_URI'] ?? null;
+
+ if (is_string($requestUri)) {
+ return preg_replace('#^[^/:]+://[^/]+#', '', $requestUri);
+ }
+
+ $origPathInfo = $server['ORIG_PATH_INFO'] ?? '';
+ if (! is_string($origPathInfo) || '' === $origPathInfo) {
+ return '/';
+ }
+
+ return $origPathInfo;
+ }
+
+ /**
+ * @param mixed $https
+ */
+ private static function marshalHttpsValue($https) : bool
+ {
+ if (is_bool($https)) {
+ return $https;
+ }
+
+ if (! is_string($https)) {
+ throw new Exception\InvalidArgumentException(sprintf(
+ 'SAPI HTTPS value MUST be a string or boolean; received %s',
+ gettype($https)
+ ));
+ }
+
+ return 'on' === strtolower($https);
+ }
}
--- /dev/null
+<?php
+
+declare(strict_types=1);
+
+namespace Laminas\Diactoros\ServerRequestFilter;
+
+use Psr\Http\Message\ServerRequestInterface;
+
+final class DoNotFilter implements FilterServerRequestInterface
+{
+ public function __invoke(ServerRequestInterface $request): ServerRequestInterface
+ {
+ return $request;
+ }
+}
--- /dev/null
+<?php
+
+declare(strict_types=1);
+
+namespace Laminas\Diactoros\ServerRequestFilter;
+
+use Psr\Http\Message\ServerRequestInterface;
+
+/**
+ * Filter/initialize a server request.
+ *
+ * Implementations of this interface will take an incoming request, and
+ * decide if additional modifications are necessary. As examples:
+ *
+ * - Injecting a unique request identifier header.
+ * - Using the X-Forwarded-* headers to rewrite the URI to reflect the original request.
+ * - Using the Forwarded header to rewrite the URI to reflect the original request.
+ *
+ * This functionality is consumed by the ServerRequestFactory using the request
+ * instance it generates, just prior to returning a request.
+ */
+interface FilterServerRequestInterface
+{
+ /**
+ * Determine if a request needs further modification, and if so, return a
+ * new instance reflecting those modifications.
+ */
+ public function __invoke(ServerRequestInterface $request): ServerRequestInterface;
+}
--- /dev/null
+<?php
+
+declare(strict_types=1);
+
+namespace Laminas\Diactoros\ServerRequestFilter;
+
+use Laminas\Diactoros\Exception\InvalidForwardedHeaderNameException;
+use Laminas\Diactoros\Exception\InvalidProxyAddressException;
+use Psr\Http\Message\ServerRequestInterface;
+
+/**
+ * Modify the URI to reflect the X-Forwarded-* headers.
+ *
+ * If the request comes from a trusted proxy, this filter will analyze the
+ * various X-Forwarded-* headers, if any, and if they are marked as trusted,
+ * in order to return a new request that composes a URI instance that reflects
+ * those headers.
+ *
+ * @psalm-immutable
+*/
+final class FilterUsingXForwardedHeaders implements FilterServerRequestInterface
+{
+ public const HEADER_HOST = 'X-FORWARDED-HOST';
+ public const HEADER_PORT = 'X-FORWARDED-PORT';
+ public const HEADER_PROTO = 'X-FORWARDED-PROTO';
+
+ private const X_FORWARDED_HEADERS = [
+ self::HEADER_HOST,
+ self::HEADER_PORT,
+ self::HEADER_PROTO,
+ ];
+
+ /**
+ * @var list<FilterUsingXForwardedHeaders::HEADER_*>
+ */
+ private $trustedHeaders;
+
+ /** @var list<non-empty-string> */
+ private $trustedProxies;
+
+ /**
+ * Only allow construction via named constructors
+ *
+ * @param list<non-empty-string> $trustedProxies
+ * @param list<FilterUsingXForwardedHeaders::HEADER_*> $trustedHeaders
+ */
+ private function __construct(
+ array $trustedProxies = [],
+ array $trustedHeaders = []
+ ) {
+ $this->trustedProxies = $trustedProxies;
+ $this->trustedHeaders = $trustedHeaders;
+ }
+
+ public function __invoke(ServerRequestInterface $request): ServerRequestInterface
+ {
+ $remoteAddress = $request->getServerParams()['REMOTE_ADDR'] ?? '';
+
+ if ('' === $remoteAddress || ! is_string($remoteAddress)) {
+ // Should we trigger a warning here?
+ return $request;
+ }
+
+ if (! $this->isFromTrustedProxy($remoteAddress)) {
+ // Do nothing
+ return $request;
+ }
+
+ // Update the URI based on the trusted headers
+ $uri = $originalUri = $request->getUri();
+ foreach ($this->trustedHeaders as $headerName) {
+ $header = $request->getHeaderLine($headerName);
+ if ('' === $header || false !== strpos($header, ',')) {
+ // Reject empty headers and/or headers with multiple values
+ continue;
+ }
+
+ switch ($headerName) {
+ case self::HEADER_HOST:
+ $uri = $uri->withHost($header);
+ break;
+ case self::HEADER_PORT:
+ $uri = $uri->withPort((int) $header);
+ break;
+ case self::HEADER_PROTO:
+ $uri = $uri->withScheme($header);
+ break;
+ }
+ }
+
+ if ($uri !== $originalUri) {
+ return $request->withUri($uri);
+ }
+
+ return $request;
+ }
+
+ /**
+ * Indicate which proxies and which X-Forwarded headers to trust.
+ *
+ * @param list<non-empty-string> $proxyCIDRList Each element may
+ * be an IP address or a subnet specified using CIDR notation; both IPv4
+ * and IPv6 are supported. The special string "*" will be translated to
+ * two entries, "0.0.0.0/0" and "::/0". An empty list indicates no
+ * proxies are trusted.
+ * @param list<FilterUsingXForwardedHeaders::HEADER_*> $trustedHeaders If
+ * the list is empty, all X-Forwarded headers are trusted.
+ * @throws InvalidProxyAddressException
+ * @throws InvalidForwardedHeaderNameException
+ */
+ public static function trustProxies(
+ array $proxyCIDRList,
+ array $trustedHeaders = self::X_FORWARDED_HEADERS
+ ): self {
+ $proxyCIDRList = self::normalizeProxiesList($proxyCIDRList);
+ self::validateTrustedHeaders($trustedHeaders);
+
+ return new self($proxyCIDRList, $trustedHeaders);
+ }
+
+ /**
+ * Trust any X-FORWARDED-* headers from any address.
+ *
+ * This is functionally equivalent to calling `trustProxies(['*'])`.
+ *
+ * WARNING: Only do this if you know for certain that your application
+ * sits behind a trusted proxy that cannot be spoofed. This should only
+ * be the case if your server is not publicly addressable, and all requests
+ * are routed via a reverse proxy (e.g., a load balancer, a server such as
+ * Caddy, when using Traefik, etc.).
+ */
+ public static function trustAny(): self
+ {
+ return self::trustProxies(['*']);
+ }
+
+ /**
+ * Trust X-Forwarded headers from reserved subnetworks.
+ *
+ * This is functionally equivalent to calling `trustProxies()` where the
+ * `$proxcyCIDRList` argument is a list with the following:
+ *
+ * - 10.0.0.0/8
+ * - 127.0.0.0/8
+ * - 172.16.0.0/12
+ * - 192.168.0.0/16
+ * - ::1/128 (IPv6 localhost)
+ * - fc00::/7 (IPv6 private networks)
+ * - fe80::/10 (IPv6 local-link addresses)
+ *
+ * @param list<FilterUsingXForwardedHeaders::HEADER_*> $trustedHeaders If
+ * the list is empty, all X-Forwarded headers are trusted.
+ * @throws InvalidForwardedHeaderNameException
+ */
+ public static function trustReservedSubnets(array $trustedHeaders = self::X_FORWARDED_HEADERS): self
+ {
+ return self::trustProxies([
+ '10.0.0.0/8',
+ '127.0.0.0/8',
+ '172.16.0.0/12',
+ '192.168.0.0/16',
+ '::1/128', // ipv6 localhost
+ 'fc00::/7', // ipv6 private networks
+ 'fe80::/10', // ipv6 local-link addresses
+ ], $trustedHeaders);
+ }
+
+ private function isFromTrustedProxy(string $remoteAddress): bool
+ {
+ foreach ($this->trustedProxies as $proxy) {
+ if (IPRange::matches($remoteAddress, $proxy)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /** @throws InvalidForwardedHeaderNameException */
+ private static function validateTrustedHeaders(array $headers): void
+ {
+ foreach ($headers as $header) {
+ if (! in_array($header, self::X_FORWARDED_HEADERS, true)) {
+ throw InvalidForwardedHeaderNameException::forHeader($header);
+ }
+ }
+ }
+
+ /**
+ * @param list<non-empty-string> $proxyCIDRList
+ * @return list<non-empty-string>
+ * @throws InvalidProxyAddressException
+ */
+ private static function normalizeProxiesList(array $proxyCIDRList): array
+ {
+ $foundWildcard = false;
+
+ foreach ($proxyCIDRList as $index => $cidr) {
+ if ($cidr === '*') {
+ unset($proxyCIDRList[$index]);
+ $foundWildcard = true;
+ continue;
+ }
+
+ if (! self::validateProxyCIDR($cidr)) {
+ throw InvalidProxyAddressException::forAddress($cidr);
+ }
+ }
+
+ if ($foundWildcard) {
+ $proxyCIDRList[] = '0.0.0.0/0';
+ $proxyCIDRList[] = '::/0';
+ }
+
+ return $proxyCIDRList;
+ }
+
+ /**
+ * @param mixed $cidr
+ */
+ private static function validateProxyCIDR($cidr): bool
+ {
+ if (! is_string($cidr) || '' === $cidr) {
+ return false;
+ }
+
+ $address = $cidr;
+ $mask = null;
+ if (false !== strpos($cidr, '/')) {
+ [$address, $mask] = explode('/', $cidr, 2);
+ $mask = (int) $mask;
+ }
+
+ if (false !== strpos($address, ':')) {
+ // is IPV6
+ return filter_var($address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)
+ && (
+ $mask === null
+ || (
+ $mask <= 128
+ && $mask >= 0
+ )
+ );
+ }
+
+ // is IPV4
+ return filter_var($address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)
+ && (
+ $mask === null
+ || (
+ $mask <= 32
+ && $mask >= 0
+ )
+ );
+ }
+}
--- /dev/null
+<?php
+
+declare(strict_types=1);
+
+namespace Laminas\Diactoros\ServerRequestFilter;
+
+/** @internal */
+final class IPRange
+{
+ /**
+ * Disable instantiation
+ */
+ private function __construct()
+ {
+ }
+
+ /** @psalm-pure */
+ public static function matches(string $ip, string $cidr): bool
+ {
+ if (false !== strpos($ip, ':')) {
+ return self::matchesIPv6($ip, $cidr);
+ }
+
+ return self::matchesIPv4($ip, $cidr);
+ }
+
+ /** @psalm-pure */
+ public static function matchesIPv4(string $ip, string $cidr): bool
+ {
+ $mask = 32;
+ $subnet = $cidr;
+
+ if (false !== strpos($cidr, '/')) {
+ [$subnet, $mask] = explode('/', $cidr, 2);
+ $mask = (int) $mask;
+ }
+
+ if ($mask < 0 || $mask > 32) {
+ return false;
+ }
+
+ $ip = ip2long($ip);
+ $subnet = ip2long($subnet);
+ if (false === $ip || false === $subnet) {
+ // Invalid data
+ return false;
+ }
+
+ return 0 === substr_compare(
+ sprintf("%032b", $ip),
+ sprintf("%032b", $subnet),
+ 0,
+ $mask
+ );
+ }
+
+ /** @psalm-pure */
+ public static function matchesIPv6(string $ip, string $cidr): bool
+ {
+ $mask = 128;
+ $subnet = $cidr;
+
+ if (false !== strpos($cidr, '/')) {
+ [$subnet, $mask] = explode('/', $cidr, 2);
+ $mask = (int) $mask;
+ }
+
+ if ($mask < 0 || $mask > 128) {
+ return false;
+ }
+
+ $ip = inet_pton($ip);
+ $subnet = inet_pton($subnet);
+
+ if (false == $ip || false == $subnet) {
+ // Invalid data
+ return false;
+ }
+
+ // mask 0: if it's a valid IP, it's valid
+ if ($mask === 0) {
+ return (bool) unpack('n*', $ip);
+ }
+
+ // @see http://stackoverflow.com/questions/7951061/matching-ipv6-address-to-a-cidr-subnet, MW answer
+ $binMask = str_repeat("f", intval($mask / 4));
+ switch ($mask % 4) {
+ case 0:
+ break;
+ case 1:
+ $binMask .= "8";
+ break;
+ case 2:
+ $binMask .= "c";
+ break;
+ case 3:
+ $binMask .= "e";
+ break;
+ }
+
+ $binMask = str_pad($binMask, 32, '0');
+ $binMask = pack("H*", $binMask);
+
+ return ($ip & $binMask) === $subnet;
+ }
+}
*
* @param array $server SAPI parameters
* @param array $headers HTTP request headers
+ * @deprecated This function is deprecated as of 2.11.1, and will be removed in
+ * 3.0.0. As of 2.11.1, it is no longer used internally.
*/
function marshalUriFromSapi(array $server, array $headers) : Uri
{