diff --git a/composer.json b/composer.json index ee66da6..e39707c 100644 --- a/composer.json +++ b/composer.json @@ -9,13 +9,14 @@ "require": { "php": "~8.1.0 || ~8.2.0 || ~8.3.0", "ext-apcu": "^5.1.10", - "laminas/laminas-cache": "^3.12.0" + "laminas/laminas-cache": "^4.0" }, "provide": { - "laminas/laminas-cache-storage-implementation": "1.0" + "laminas/laminas-cache-storage-implementation": "2.0" }, "require-dev": { - "laminas/laminas-cache-storage-adapter-test": "^2.0", + "laminas/laminas-cache": "4.0.x-dev || ^4.0", + "laminas/laminas-cache-storage-adapter-test": "3.0.x-dev || ^3.0", "laminas/laminas-coding-standard": "~2.5.0", "psalm/plugin-phpunit": "^0.19.0", "vimeo/psalm": "^5.18" diff --git a/composer.lock b/composer.lock index 64a8df9..463e156 100644 --- a/composer.lock +++ b/composer.lock @@ -4,35 +4,83 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f5645ad6391fb0456fed53e34130db4c", + "content-hash": "0384c9bcd564e0c197fff1ddeac4c000", "packages": [ + { + "name": "brick/varexporter", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/brick/varexporter.git", + "reference": "2fd038f7c9d12d468130c6e1b3ce06e4160a7dbb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/varexporter/zipball/2fd038f7c9d12d468130c6e1b3ce06e4160a7dbb", + "reference": "2fd038f7c9d12d468130c6e1b3ce06e4160a7dbb", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.0", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^8.5 || ^9.0", + "vimeo/psalm": "5.15.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\VarExporter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A powerful alternative to var_export(), which can export closures and objects without __set_state()", + "keywords": [ + "var_export" + ], + "support": { + "issues": "https://github.com/brick/varexporter/issues", + "source": "https://github.com/brick/varexporter/tree/0.4.0" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2023-09-01T21:10:07+00:00" + }, { "name": "laminas/laminas-cache", - "version": "3.12.0", + "version": "4.0.x-dev", "source": { "type": "git", "url": "https://github.com/laminas/laminas-cache.git", - "reference": "66cf9a209163cadc65d93483667b995c5ead1563" + "reference": "512dc92dead683f7713e6e40162fe40e619dd2ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-cache/zipball/66cf9a209163cadc65d93483667b995c5ead1563", - "reference": "66cf9a209163cadc65d93483667b995c5ead1563", + "url": "https://api.github.com/repos/laminas/laminas-cache/zipball/512dc92dead683f7713e6e40162fe40e619dd2ad", + "reference": "512dc92dead683f7713e6e40162fe40e619dd2ad", "shasum": "" }, "require": { - "laminas/laminas-cache-storage-implementation": "1.0", "laminas/laminas-eventmanager": "^3.4", - "laminas/laminas-servicemanager": "^3.21", + "laminas/laminas-servicemanager": "^4.1", "laminas/laminas-stdlib": "^3.6", "php": "~8.1.0 || ~8.2.0 || ~8.3.0", - "psr/cache": "^1.0", + "psr/cache": "^2.0 || ^3.0", "psr/clock": "^1.0", - "psr/simple-cache": "^1.0", + "psr/simple-cache": "^2.0 || ^3.0", "webmozart/assert": "^1.9" }, "conflict": { - "stella-maris/clock": "<0.1.7", + "laminas/laminas-serializer": "<3.0", "symfony/console": "<5.1" }, "provide": { @@ -40,20 +88,13 @@ "psr/simple-cache-implementation": "1.0" }, "require-dev": { - "laminas/laminas-cache-storage-adapter-apcu": "^2.4", - "laminas/laminas-cache-storage-adapter-blackhole": "^2.3", - "laminas/laminas-cache-storage-adapter-filesystem": "^2.3", - "laminas/laminas-cache-storage-adapter-memory": "^2.2", - "laminas/laminas-cache-storage-adapter-test": "^2.4", "laminas/laminas-cli": "^1.7", "laminas/laminas-coding-standard": "~2.5.0", "laminas/laminas-config-aggregator": "^1.13", - "laminas/laminas-feed": "^2.20", - "laminas/laminas-serializer": "^2.14", - "phpbench/phpbench": "^1.2.7", + "laminas/laminas-serializer": "^3.0", "phpunit/phpunit": "^9.5.27", - "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.4" + "psalm/plugin-phpunit": "^0.19.0", + "vimeo/psalm": "^5.24" }, "suggest": { "laminas/laminas-cache-storage-adapter-apcu": "APCu implementation", @@ -67,6 +108,7 @@ "laminas/laminas-cli": "The laminas-cli binary can be used to consume commands provided by this component", "laminas/laminas-serializer": "Laminas\\Serializer component" }, + "default-branch": true, "type": "library", "extra": { "laminas": { @@ -105,7 +147,7 @@ "type": "community_bridge" } ], - "time": "2023-11-06T18:52:54+00:00" + "time": "2024-06-15T21:40:37+00:00" }, { "name": "laminas/laminas-eventmanager", @@ -177,59 +219,58 @@ }, { "name": "laminas/laminas-servicemanager", - "version": "3.22.1", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-servicemanager.git", - "reference": "de98d297d4743956a0558a6d71616979ff779328" + "reference": "ae01570ecdf4559aef2f15d4e79e8c36874f7416" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/de98d297d4743956a0558a6d71616979ff779328", - "reference": "de98d297d4743956a0558a6d71616979ff779328", + "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/ae01570ecdf4559aef2f15d4e79e8c36874f7416", + "reference": "ae01570ecdf4559aef2f15d4e79e8c36874f7416", "shasum": "" }, "require": { + "brick/varexporter": "^0.3.8 || ^0.4.0", "laminas/laminas-stdlib": "^3.17", "php": "~8.1.0 || ~8.2.0 || ~8.3.0", - "psr/container": "^1.0" + "psr/container": "^1.1 || ^2.0" }, "conflict": { - "ext-psr": "*", "laminas/laminas-code": "<4.10.0", - "zendframework/zend-code": "<3.3.1", - "zendframework/zend-servicemanager": "*" + "zendframework/zend-code": "<3.3.1" }, "provide": { - "psr/container-implementation": "^1.0" - }, - "replace": { - "container-interop/container-interop": "^1.2.0" + "psr/container-implementation": "^1.0 || ^2.0" }, "require-dev": { + "boesing/psalm-plugin-stringf": "^1.4", "composer/package-versions-deprecated": "^1.11.99.5", - "friendsofphp/proxy-manager-lts": "^1.0.14", - "laminas/laminas-code": "^4.10.0", + "friendsofphp/proxy-manager-lts": "^1", + "laminas/laminas-cli": "^1.8", "laminas/laminas-coding-standard": "~2.5.0", - "laminas/laminas-container-config-test": "^0.8", - "mikey179/vfsstream": "^1.6.11", - "phpbench/phpbench": "^1.2.9", + "laminas/laminas-container-config-test": "^1.0", + "lctrs/psalm-psr-container-plugin": "^1.9", + "mikey179/vfsstream": "^1.6.11@alpha", + "phpbench/phpbench": "^1.2.7", "phpunit/phpunit": "^10.4", "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.8.0" + "symfony/console": "^6.0", + "vimeo/psalm": "^5.22" }, "suggest": { - "friendsofphp/proxy-manager-lts": "ProxyManager ^2.1.1 to handle lazy initialization of services" + "friendsofphp/proxy-manager-lts": "To handle lazy initialization of services", + "laminas/laminas-cli": "To consume CLI commands provided by this component" }, - "bin": [ - "bin/generate-deps-for-config-factory", - "bin/generate-factory-for-class" - ], "type": "library", + "extra": { + "laminas": { + "config-provider": "Laminas\\ServiceManager\\ConfigProvider", + "module": "Laminas\\ServiceManager" + } + }, "autoload": { - "files": [ - "src/autoload.php" - ], "psr-4": { "Laminas\\ServiceManager\\": "src/" } @@ -251,11 +292,9 @@ ], "support": { "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-servicemanager/", "forum": "https://discourse.laminas.dev", "issues": "https://github.com/laminas/laminas-servicemanager/issues", - "rss": "https://github.com/laminas/laminas-servicemanager/releases.atom", - "source": "https://github.com/laminas/laminas-servicemanager" + "source": "https://github.com/laminas/laminas-servicemanager/tree/4.1.0" }, "funding": [ { @@ -263,20 +302,20 @@ "type": "community_bridge" } ], - "time": "2023-10-24T11:19:47+00:00" + "time": "2024-04-03T20:39:36+00:00" }, { "name": "laminas/laminas-stdlib", - "version": "3.18.0", + "version": "3.19.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf" + "reference": "6a192dd0882b514e45506f533b833b623b78fff3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf", - "reference": "e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/6a192dd0882b514e45506f533b833b623b78fff3", + "reference": "6a192dd0882b514e45506f533b833b623b78fff3", "shasum": "" }, "require": { @@ -287,10 +326,10 @@ }, "require-dev": { "laminas/laminas-coding-standard": "^2.5", - "phpbench/phpbench": "^1.2.14", - "phpunit/phpunit": "^10.3.3", + "phpbench/phpbench": "^1.2.15", + "phpunit/phpunit": "^10.5.8", "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.15.0" + "vimeo/psalm": "^5.20.0" }, "type": "library", "autoload": { @@ -322,24 +361,80 @@ "type": "community_bridge" } ], - "time": "2023-09-19T10:15:21+00:00" + "time": "2024-01-19T12:39:49+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.19.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.1" + }, + "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.19.1" + }, + "time": "2024-03-17T08:10:35+00:00" }, { "name": "psr/cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { @@ -359,7 +454,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for caching libraries", @@ -369,9 +464,9 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { "name": "psr/clock", @@ -423,22 +518,27 @@ }, { "name": "psr/container", - "version": "1.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -465,31 +565,31 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/simple-cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -504,7 +604,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interfaces for simple caching", @@ -516,9 +616,9 @@ "simple-cache" ], "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" }, - "time": "2017-10-23T01:57:42+00:00" + "time": "2021-10-29T13:26:27+00:00" }, { "name": "webmozart/assert", @@ -582,16 +682,16 @@ "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.2", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", "shasum": "" }, "require": { @@ -603,8 +703,8 @@ "ext-json": "*", "jetbrains/phpstorm-stubs": "^2019.3", "phpunit/phpunit": "^7 | ^8 | ^9", - "psalm/phar": "^3.11@dev", - "react/promise": "^2" + "react/promise": "^2", + "vimeo/psalm": "^3.12" }, "type": "library", "extra": { @@ -659,7 +759,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.2" + "source": "https://github.com/amphp/amp/tree/v2.6.4" }, "funding": [ { @@ -667,20 +767,20 @@ "type": "github" } ], - "time": "2022-02-20T17:52:18+00:00" + "time": "2024-03-21T18:52:26+00:00" }, { "name": "amphp/byte-stream", - "version": "v1.8.1", + "version": "v1.8.2", "source": { "type": "git", "url": "https://github.com/amphp/byte-stream.git", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", "shasum": "" }, "require": { @@ -696,11 +796,6 @@ "psalm/phar": "^3.11.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { "files": [ "lib/functions.php" @@ -724,7 +819,7 @@ } ], "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "http://amphp.org/byte-stream", + "homepage": "https://amphp.org/byte-stream", "keywords": [ "amp", "amphp", @@ -734,9 +829,8 @@ "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" + "source": "https://github.com/amphp/byte-stream/tree/v1.8.2" }, "funding": [ { @@ -744,7 +838,7 @@ "type": "github" } ], - "time": "2021-03-30T17:13:30+00:00" + "time": "2024-04-13T18:00:56+00:00" }, { "name": "composer/package-versions-deprecated", @@ -821,16 +915,16 @@ }, { "name": "composer/pcre", - "version": "3.1.1", + "version": "3.1.4", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" + "reference": "04229f163664973f68f38f6f73d917799168ef24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24", + "reference": "04229f163664973f68f38f6f73d917799168ef24", "shasum": "" }, "require": { @@ -872,7 +966,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.1" + "source": "https://github.com/composer/pcre/tree/3.1.4" }, "funding": [ { @@ -888,7 +982,7 @@ "type": "tidelift" } ], - "time": "2023-10-11T07:11:09+00:00" + "time": "2024-05-27T13:40:54+00:00" }, { "name": "composer/semver", @@ -973,16 +1067,16 @@ }, { "name": "composer/xdebug-handler", - "version": "3.0.3", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { @@ -993,7 +1087,7 @@ "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -1017,9 +1111,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, "funding": [ { @@ -1035,7 +1129,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { "name": "dealerdirect/phpcodesniffer-composer-installer", @@ -1149,76 +1243,6 @@ }, "time": "2019-12-04T15:06:13+00:00" }, - { - "name": "doctrine/instantiator", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "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/2.0.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": "2022-12-30T00:23:10+00:00" - }, { "name": "felixfbecker/advanced-json-rpc", "version": "v3.2.1", @@ -1322,16 +1346,16 @@ }, { "name": "fidry/cpu-core-counter", - "version": "1.0.0", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "85193c0b0cb5c47894b5eaec906e946f054e7077" + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/85193c0b0cb5c47894b5eaec906e946f054e7077", - "reference": "85193c0b0cb5c47894b5eaec906e946f054e7077", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", "shasum": "" }, "require": { @@ -1371,7 +1395,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.0.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" }, "funding": [ { @@ -1379,37 +1403,38 @@ "type": "github" } ], - "time": "2023-09-17T21:38:23+00:00" + "time": "2024-02-07T09:43:46+00:00" }, { "name": "laminas/laminas-cache-storage-adapter-test", - "version": "2.5.0", + "version": "3.0.x-dev", "source": { "type": "git", "url": "https://github.com/laminas/laminas-cache-storage-adapter-test.git", - "reference": "6574ff7e5ebf8f5685084942e7664123822c60fe" + "reference": "6baccb9466991855ad913150ef9963cd5b3b6e06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-test/zipball/6574ff7e5ebf8f5685084942e7664123822c60fe", - "reference": "6574ff7e5ebf8f5685084942e7664123822c60fe", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-test/zipball/6baccb9466991855ad913150ef9963cd5b3b6e06", + "reference": "6baccb9466991855ad913150ef9963cd5b3b6e06", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.2", - "laminas/laminas-cache": "^3.1", - "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", - "phpunit/phpunit": "^9.5.20", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + "laminas/laminas-cache": "^4.0", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", + "phpunit/phpunit": "^10.5", + "psr/cache": "^2.0 || ^3.0", + "psr/container": "^2.0", + "psr/simple-cache": "^2.0 || ^3.0" }, "require-dev": { - "laminas/laminas-cache-storage-adapter-apcu": "^2.2", - "laminas/laminas-cache-storage-adapter-memory": "^2.0", + "composer-plugin-api": "^2", + "laminas/laminas-cache": "4.0.x-dev || ^4.0", "laminas/laminas-coding-standard": "~2.5.0", - "psalm/plugin-phpunit": "^0.18.4", + "psalm/plugin-phpunit": "^0.19.0", "vimeo/psalm": "^5.15.0" }, + "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -1438,7 +1463,7 @@ "type": "community_bridge" } ], - "time": "2023-11-03T14:51:13+00:00" + "time": "2024-06-15T20:19:15+00:00" }, { "name": "laminas/laminas-coding-standard", @@ -1498,16 +1523,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", "shasum": "" }, "require": { @@ -1515,11 +1540,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -1545,7 +1571,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" }, "funding": [ { @@ -1553,20 +1579,20 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" + "time": "2024-06-12T14:39:25+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.2.0", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "f60565f8c0566a31acf06884cdaa591867ecc956" + "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956", - "reference": "f60565f8c0566a31acf06884cdaa591867ecc956", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/132c75c7dd83e45353ebb9c6c9f591952995bbf0", + "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0", "shasum": "" }, "require": { @@ -1577,7 +1603,7 @@ "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", "squizlabs/php_codesniffer": "~3.5" }, "type": "library", @@ -1602,82 +1628,27 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0" - }, - "time": "2023-04-09T17:37:40+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.18.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999", - "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999", - "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.18.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1" }, - "time": "2023-12-10T21:03:43+00:00" + "time": "2024-01-31T06:18:54+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -1718,9 +1689,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -1984,16 +1961,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.30", + "version": "10.1.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089" + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca2bd87d2f9215904682a9cb9bb37dda98e76089", - "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", "shasum": "" }, "require": { @@ -2001,18 +1978,18 @@ "ext-libxml": "*", "ext-xmlwriter": "*", "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.1" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -2021,7 +1998,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "10.1-dev" } }, "autoload": { @@ -2050,7 +2027,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.30" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14" }, "funding": [ { @@ -2058,32 +2035,32 @@ "type": "github" } ], - "time": "2023-12-22T06:47:57+00:00" + "time": "2024-03-12T15:33:41+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -2110,7 +2087,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, "funding": [ { @@ -2118,28 +2096,28 @@ "type": "github" } ], - "time": "2021-12-02T12:48:52+00:00" + "time": "2023-08-31T06:24:48+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-pcntl": "*" @@ -2147,7 +2125,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -2173,7 +2151,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, "funding": [ { @@ -2181,32 +2159,32 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2232,7 +2210,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, "funding": [ { @@ -2240,32 +2219,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2023-08-31T14:07:24+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -2291,7 +2270,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, "funding": [ { @@ -2299,24 +2278,23 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { "name": "phpunit/phpunit", - "version": "9.6.15", + "version": "10.5.21", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1" + "reference": "ac837816fa52078f7a5e17ed774f256a72a51af6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/05017b80304e0eb3f31d90194a563fd53a6021f1", - "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ac837816fa52078f7a5e17ed774f256a72a51af6", + "reference": "ac837816fa52078f7a5e17ed774f256a72a51af6", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -2326,27 +2304,26 @@ "myclabs/deep-copy": "^1.10.1", "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "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.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.5", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.1", + "sebastian/global-state": "^6.0.1", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" }, "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -2354,7 +2331,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.6-dev" + "dev-main": "10.5-dev" } }, "autoload": { @@ -2386,7 +2363,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.15" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.21" }, "funding": [ { @@ -2402,7 +2379,7 @@ "type": "tidelift" } ], - "time": "2023-12-01T16:55:19+00:00" + "time": "2024-06-15T09:13:15+00:00" }, { "name": "psalm/plugin-phpunit", @@ -2516,28 +2493,28 @@ }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -2560,7 +2537,8 @@ "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" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" }, "funding": [ { @@ -2568,32 +2546,32 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -2616,7 +2594,7 @@ "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" + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ { @@ -2624,32 +2602,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2671,7 +2649,7 @@ "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" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -2679,34 +2657,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.8", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "reference": "2db5010a484d53ebf536087a70b4a5423c102372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -2745,7 +2725,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" }, "funding": [ { @@ -2753,33 +2734,33 @@ "type": "github" } ], - "time": "2022-09-14T12:41:17+00:00" + "time": "2023-08-14T13:18:12+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.3", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.2-dev" } }, "autoload": { @@ -2802,7 +2783,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, "funding": [ { @@ -2810,33 +2792,33 @@ "type": "github" } ], - "time": "2023-12-22T06:19:30+00:00" + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "4.0.5", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -2868,7 +2850,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -2876,27 +2859,27 @@ "type": "github" } ], - "time": "2023-05-07T05:35:17+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "sebastian/environment", - "version": "5.1.5", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -2904,7 +2887,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -2923,7 +2906,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -2931,7 +2914,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { @@ -2939,34 +2923,34 @@ "type": "github" } ], - "time": "2023-02-03T06:03:51+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.5", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -3008,7 +2992,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" }, "funding": [ { @@ -3016,38 +3001,35 @@ "type": "github" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2024-03-02T07:17:12+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.6", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bde739e7565280bda77be70044ac1047bc007e34" + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", - "reference": "bde739e7565280bda77be70044ac1047bc007e34", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -3066,13 +3048,14 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://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.6" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { @@ -3080,33 +3063,33 @@ "type": "github" } ], - "time": "2023-08-02T09:26:13+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.4", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -3129,7 +3112,8 @@ "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.4" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { @@ -3137,34 +3121,34 @@ "type": "github" } ], - "time": "2023-12-22T06:20:34+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -3186,7 +3170,7 @@ "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" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -3194,32 +3178,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -3241,7 +3225,7 @@ "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" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -3249,32 +3233,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.5", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -3304,62 +3288,7 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+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" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" }, "funding": [ { @@ -3367,32 +3296,32 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2023-02-03T07:05:40+00:00" }, { "name": "sebastian/type", - "version": "3.2.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -3415,7 +3344,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -3423,29 +3352,29 @@ "type": "github" } ], - "time": "2023-02-03T06:13:03+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { "name": "sebastian/version", - "version": "3.0.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -3468,7 +3397,7 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { @@ -3476,7 +3405,7 @@ "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { "name": "slevomat/coding-standard", @@ -3541,16 +3470,16 @@ }, { "name": "spatie/array-to-xml", - "version": "3.2.2", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/spatie/array-to-xml.git", - "reference": "96be97e664c87613121d073ea39af4c74e57a7f8" + "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/96be97e664c87613121d073ea39af4c74e57a7f8", - "reference": "96be97e664c87613121d073ea39af4c74e57a7f8", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f56b220fe2db1ade4c88098d83413ebdfc3bf876", + "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876", "shasum": "" }, "require": { @@ -3563,6 +3492,11 @@ "spatie/pest-plugin-snapshots": "^1.1" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, "autoload": { "psr-4": { "Spatie\\ArrayToXml\\": "src" @@ -3588,7 +3522,7 @@ "xml" ], "support": { - "source": "https://github.com/spatie/array-to-xml/tree/3.2.2" + "source": "https://github.com/spatie/array-to-xml/tree/3.3.0" }, "funding": [ { @@ -3600,20 +3534,20 @@ "type": "github" } ], - "time": "2023-11-14T14:08:51+00:00" + "time": "2024-05-01T10:20:27+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.8.1", + "version": "3.10.1", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "14f5fff1e64118595db5408e946f3a22c75807f7" + "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/14f5fff1e64118595db5408e946f3a22c75807f7", - "reference": "14f5fff1e64118595db5408e946f3a22c75807f7", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/8f90f7a53ce271935282967f53d0894f8f1ff877", + "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877", "shasum": "" }, "require": { @@ -3680,20 +3614,20 @@ "type": "open_collective" } ], - "time": "2024-01-11T20:47:48+00:00" + "time": "2024-05-22T21:24:41+00:00" }, { "name": "symfony/console", - "version": "v6.4.2", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625" + "reference": "be5854cee0e8c7b110f00d695d11debdfa1a2a91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0254811a143e6bc6c8deea08b589a7e68a37f625", - "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625", + "url": "https://api.github.com/repos/symfony/console/zipball/be5854cee0e8c7b110f00d695d11debdfa1a2a91", + "reference": "be5854cee0e8c7b110f00d695d11debdfa1a2a91", "shasum": "" }, "require": { @@ -3758,7 +3692,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.2" + "source": "https://github.com/symfony/console/tree/v6.4.8" }, "funding": [ { @@ -3774,20 +3708,20 @@ "type": "tidelift" } ], - "time": "2023-12-10T16:15:48+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.4.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "shasum": "" }, "require": { @@ -3796,7 +3730,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -3825,7 +3759,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" }, "funding": [ { @@ -3841,20 +3775,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/filesystem", - "version": "v6.4.0", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "952a8cb588c3bc6ce76f6023000fb932f16a6e59" + "reference": "4d37529150e7081c51b3c5d5718c55a04a9503f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/952a8cb588c3bc6ce76f6023000fb932f16a6e59", - "reference": "952a8cb588c3bc6ce76f6023000fb932f16a6e59", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/4d37529150e7081c51b3c5d5718c55a04a9503f3", + "reference": "4d37529150e7081c51b3c5d5718c55a04a9503f3", "shasum": "" }, "require": { @@ -3862,6 +3796,9 @@ "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, + "require-dev": { + "symfony/process": "^5.4|^6.4|^7.0" + }, "type": "library", "autoload": { "psr-4": { @@ -3888,7 +3825,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.0" + "source": "https://github.com/symfony/filesystem/tree/v6.4.8" }, "funding": [ { @@ -3904,20 +3841,20 @@ "type": "tidelift" } ], - "time": "2023-07-26T17:27:13+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -3931,9 +3868,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3970,7 +3904,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -3986,20 +3920,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", "shasum": "" }, "require": { @@ -4010,9 +3944,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4051,7 +3982,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" }, "funding": [ { @@ -4067,20 +3998,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", "shasum": "" }, "require": { @@ -4091,9 +4022,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4135,7 +4063,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" }, "funding": [ { @@ -4151,20 +4079,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -4178,9 +4106,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4218,7 +4143,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -4234,25 +4159,26 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.4.1", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", - "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^1.1|^2.0" + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -4260,7 +4186,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -4300,7 +4226,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" }, "funding": [ { @@ -4316,20 +4242,20 @@ "type": "tidelift" } ], - "time": "2023-12-26T14:02:43+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/string", - "version": "v6.4.2", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc" + "reference": "a147c0f826c4a1f3afb763ab8e009e37c877a44d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/7cb80bc10bfcdf6b5492741c0b9357dac66940bc", - "reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc", + "url": "https://api.github.com/repos/symfony/string/zipball/a147c0f826c4a1f3afb763ab8e009e37c877a44d", + "reference": "a147c0f826c4a1f3afb763ab8e009e37c877a44d", "shasum": "" }, "require": { @@ -4386,7 +4312,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.2" + "source": "https://github.com/symfony/string/tree/v6.4.8" }, "funding": [ { @@ -4402,20 +4328,20 @@ "type": "tidelift" } ], - "time": "2023-12-10T16:15:48+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.2", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -4444,7 +4370,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.2" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -4452,20 +4378,20 @@ "type": "github" } ], - "time": "2023-11-20T00:12:19+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "vimeo/psalm", - "version": "5.19.0", + "version": "5.24.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "06b71be009a6bd6d81b9811855d6629b9fe90e1b" + "reference": "462c80e31c34e58cc4f750c656be3927e80e550e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/06b71be009a6bd6d81b9811855d6629b9fe90e1b", - "reference": "06b71be009a6bd6d81b9811855d6629b9fe90e1b", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/462c80e31c34e58cc4f750c656be3927e80e550e", + "reference": "462c80e31c34e58cc4f750c656be3927e80e550e", "shasum": "" }, "require": { @@ -4488,7 +4414,7 @@ "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", "nikic/php-parser": "^4.16", "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", - "sebastian/diff": "^4.0 || ^5.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0", "spatie/array-to-xml": "^2.17.0 || ^3.0", "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0", "symfony/filesystem": "^5.4 || ^6.0 || ^7.0" @@ -4562,7 +4488,7 @@ "issues": "https://github.com/vimeo/psalm/issues", "source": "https://github.com/vimeo/psalm" }, - "time": "2024-01-09T21:02:43+00:00" + "time": "2024-05-01T19:32:08+00:00" }, { "name": "webimpress/coding-standard", @@ -4622,7 +4548,10 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "laminas/laminas-cache": 20, + "laminas/laminas-cache-storage-adapter-test": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 8110c9d..fc956ff 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,16 +1,13 @@ - - - - ./test - - - - - ./src - - + + + + ./test + + + + + ./src + + diff --git a/psalm-baseline.xml b/psalm-baseline.xml index f9677c1..825713d 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1,100 +1,38 @@ - + - - $event - - - $metadata - $metadata - $normalizedKey - - - $internalKey - $internalKey - $key - $normalizedKeyValuePairs - $normalizedKeys - $normalizedKeys - $normalizedKeys + + - - - - $bool - $casToken - $internalKeyValuePairs[$internalKey] - $internalKeyValuePairs[$internalKey] - $metadata - $metadata - $normalizedKey - $normalizedKey - $normalizedKey - $normalizedKey - $params - $result - $result[substr($internalKey, $prefixL)] - totalSpace]]> - $value - $value - $value + + + + + + + + - - ApcuOptions - int|float - int|float - - - getParams - - - $normalizedKey - $normalizedKey - $normalizedKey - - - - - options]]> - totalSpace]]> - totalSpace]]> - - - $options - $options - - - Apcu - - - (int) $value - (int) $value - (string) $namespace - (string) $prefix - - - $key - + + + - $container - $name + + - (int) $mode + - setNamespaceSeparator + - - (string) $namespaceSeparator - diff --git a/src/Apcu.php b/src/Apcu.php index 18f8363..2b31479 100644 --- a/src/Apcu.php +++ b/src/Apcu.php @@ -6,6 +6,8 @@ use APCUIterator as BaseApcuIterator; use Laminas\Cache\Exception; +use Laminas\Cache\Storage\AbstractMetadataCapableAdapter; +use Laminas\Cache\Storage\Adapter\Apcu\Metadata; use Laminas\Cache\Storage\AvailableSpaceCapableInterface; use Laminas\Cache\Storage\Capabilities; use Laminas\Cache\Storage\ClearByNamespaceInterface; @@ -13,22 +15,23 @@ use Laminas\Cache\Storage\FlushableInterface; use Laminas\Cache\Storage\IterableInterface; use Laminas\Cache\Storage\TotalSpaceCapableInterface; -use stdClass; -use Traversable; +use Webmozart\Assert\Assert; use function apcu_add; use function apcu_cas; use function apcu_clear_cache; -use function apcu_dec; use function apcu_delete; use function apcu_exists; use function apcu_fetch; -use function apcu_inc; use function apcu_sma_info; use function apcu_store; use function array_filter; +use function array_key_exists; use function array_keys; +use function array_map; +use function assert; use function ceil; +use function get_debug_type; use function gettype; use function implode; use function ini_get; @@ -46,9 +49,20 @@ use const PHP_SAPI; /** + * @template-extends AbstractMetadataCapableAdapter * @implements IterableInterface + * @psalm-type APCUMetadataArrayShape = array{ + * key: non-empty-string, + * access_time: non-negative-int, + * creation_time: non-negative-int, + * mtime: non-negative-int, + * deletion_time: non-negative-int, + * mem_size: non-negative-int, + * num_hits: non-negative-int, + * ttl: non-negative-int + * } */ -final class Apcu extends AbstractAdapter implements +final class Apcu extends AbstractMetadataCapableAdapter implements AvailableSpaceCapableInterface, ClearByNamespaceInterface, ClearByPrefixInterface, @@ -58,39 +72,28 @@ final class Apcu extends AbstractAdapter implements { /** * Buffered total space in bytes - * - * @var null|int|float */ - private $totalSpace; + private null|int $totalSpace; /** - * Constructor - * - * @param null|array|Traversable|ApcuOptions $options - * @throws Exception\ExceptionInterface + * @param iterable|ApcuOptions|null $options */ - public function __construct($options = null) + public function __construct(iterable|ApcuOptions|null $options = null) { - if (! ini_get('apc.enabled') || (PHP_SAPI === 'cli' && ! ini_get('apc.enable_cli'))) { + if (ini_get('apc.enabled') !== '1' || (PHP_SAPI === 'cli' && ini_get('apc.enable_cli') !== '1')) { throw new Exception\ExtensionNotLoadedException( "ext/apcu is disabled - see 'apc.enabled' and 'apc.enable_cli'" ); } parent::__construct($options); + $this->totalSpace = null; } - /* options */ - /** - * Set options. - * - * @see getOptions() - * - * @param array|Traversable|ApcuOptions $options - * @return Apcu + * {@inheritDoc} */ - public function setOptions($options) + public function setOptions(iterable|AdapterOptions|null $options): self { if (! $options instanceof ApcuOptions) { $options = new ApcuOptions($options); @@ -101,58 +104,46 @@ public function setOptions($options) } /** - * Get options. - * - * @see setOptions() - * - * @return ApcuOptions + * {@inheritDoc} */ - public function getOptions() + public function getOptions(): ApcuOptions { - if (! $this->options) { + if ($this->options === null) { $this->setOptions(new ApcuOptions()); } + + assert($this->options instanceof ApcuOptions); return $this->options; } - /* TotalSpaceCapableInterface */ - /** - * Get total space in bytes - * - * @return int|float + * {@inheritDoc} */ - public function getTotalSpace() + public function getTotalSpace(): int { if ($this->totalSpace === null) { - $smaInfo = apcu_sma_info(true); - $this->totalSpace = $smaInfo['num_seg'] * $smaInfo['seg_size']; + $smaInfo = apcu_sma_info(true); + $this->assertSmaInfo($smaInfo); + $this->totalSpace = (int) ceil($smaInfo['num_seg'] * $smaInfo['seg_size']); } return $this->totalSpace; } - /* AvailableSpaceCapableInterface */ - /** - * Get available space in bytes - * - * @return int|float + * {@inheritDoc} */ - public function getAvailableSpace() + public function getAvailableSpace(): int { $smaInfo = apcu_sma_info(true); - return $smaInfo['avail_mem']; + $this->assertSmaInfo($smaInfo); + return (int) ceil($smaInfo['avail_mem']); } - /* IterableInterface */ - /** - * Get the storage iterator - * - * @return ApcuIterator + * {@inheritDoc} */ - public function getIterator(): Traversable + public function getIterator(): ApcuIterator { $options = $this->getOptions(); $namespace = $options->getNamespace(); @@ -167,29 +158,22 @@ public function getIterator(): Traversable return new ApcuIterator($this, $baseIt, $prefix); } - /* FlushableInterface */ - /** - * Flush the whole storage - * - * @return bool + * {@inheritDoc} */ - public function flush() + public function flush(): bool { return apcu_clear_cache(); } - /* ClearByNamespaceInterface */ - /** - * Remove items by given namespace - * - * @param string $namespace - * @return bool + * {@inheritDoc} */ - public function clearByNamespace($namespace) + public function clearByNamespace(string $namespace): bool { - $namespace = (string) $namespace; + /** + * @psalm-suppress TypeDoesNotContainType Psalm type does not prevent users from passing empty strings. + */ if ($namespace === '') { throw new Exception\InvalidArgumentException('No namespace given'); } @@ -200,17 +184,14 @@ public function clearByNamespace($namespace) return apcu_delete(new BaseApcuIterator($pattern, 0, 1, APC_LIST_ACTIVE)); } - /* ClearByPrefixInterface */ - /** - * Remove items matching given prefix - * - * @param string $prefix - * @return bool + * {@inheritDoc} */ - public function clearByPrefix($prefix) + public function clearByPrefix(string $prefix): bool { - $prefix = (string) $prefix; + /** + * @psalm-suppress TypeDoesNotContainType Psalm type does not prevent users from passing empty strings. + */ if ($prefix === '') { throw new Exception\InvalidArgumentException('No prefix given'); } @@ -225,43 +206,43 @@ public function clearByPrefix($prefix) /* reading */ /** - * Internal method to get an item. - * - * @param string $normalizedKey - * @param bool $success - * @param mixed $casToken - * @return mixed Data on success, null on failure - * @throws Exception\ExceptionInterface + * {@inheritDoc} */ - protected function internalGetItem(&$normalizedKey, &$success = null, &$casToken = null) - { + protected function internalGetItem( + string $normalizedKey, + bool|null &$success = null, + mixed &$casToken = null + ): mixed { $options = $this->getOptions(); $namespace = $options->getNamespace(); $prefix = $namespace === '' ? '' : $namespace . $options->getNamespaceSeparator(); $internalKey = $prefix . $normalizedKey; - $result = apcu_fetch($internalKey, $success); - if (! $success) { + /** + * At least for APCu 5.1.23, `apcu_fetch` does not return `false` as `$success` for missing keys + * Moving to `apcu_exists` for now. + */ + $success = apcu_exists($internalKey); + if ($success === false) { return null; } + $result = apcu_fetch($internalKey); $casToken = $result; return $result; } /** - * Internal method to get multiple items. - * - * @param array $normalizedKeys - * @return array Associative array of keys and values - * @throws Exception\ExceptionInterface + * {@inheritDoc} */ - protected function internalGetItems(array &$normalizedKeys) + protected function internalGetItems(array $normalizedKeys): array { $options = $this->getOptions(); $namespace = $options->getNamespace(); if ($namespace === '') { - return apcu_fetch($normalizedKeys); + $result = apcu_fetch(array_map(fn (string|int $key) => (string) $key, $normalizedKeys)); + $this->assertValidKeyValuePairs($result); + return $result; } $prefix = $namespace . $options->getNamespaceSeparator(); @@ -279,17 +260,17 @@ protected function internalGetItems(array &$normalizedKeys) $result[substr($internalKey, $prefixL)] = $value; } + if ($result !== []) { + $this->assertValidKeyValuePairs($result); + } + return $result; } /** - * Internal method to test if an item exists. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface + * {@inheritDoc} */ - protected function internalHasItem(&$normalizedKey) + protected function internalHasItem(string $normalizedKey): bool { $options = $this->getOptions(); $namespace = $options->getNamespace(); @@ -298,19 +279,24 @@ protected function internalHasItem(&$normalizedKey) } /** - * Internal method to test multiple items. - * - * @param array $normalizedKeys - * @return array Array of found keys - * @throws Exception\ExceptionInterface + * {@inheritDoc} */ - protected function internalHasItems(array &$normalizedKeys) + protected function internalHasItems(array $normalizedKeys): array { $options = $this->getOptions(); $namespace = $options->getNamespace(); if ($namespace === '') { - // array_filter with no callback will remove entries equal to FALSE - return array_keys(array_filter(apcu_exists($normalizedKeys))); + return array_keys( + array_filter( + apcu_exists( + array_map( + fn(string|int $key) => (string) $key, + $normalizedKeys + ), + ), + fn(bool $value) => $value === true + ) + ); } $prefix = $namespace . $options->getNamespaceSeparator(); @@ -319,26 +305,26 @@ protected function internalHasItems(array &$normalizedKeys) $internalKeys[] = $prefix . $normalizedKey; } - $exists = apcu_exists($internalKeys); - $result = []; + $result = apcu_exists($internalKeys); + $existingKeys = []; + $prefixL = strlen($prefix); - foreach ($exists as $internalKey => $bool) { - if ($bool === true) { - $result[] = substr($internalKey, $prefixL); + foreach ($result as $internalKey => $exists) { + if ($exists !== true) { + continue; } + + $existingKeys[] = substr($internalKey, $prefixL); } - return $result; + Assert::allStringNotEmpty($existingKeys); + return $existingKeys; } /** - * Get metadata of an item. - * - * @param string $normalizedKey - * @return array|bool Metadata on success, false on failure - * @throws Exception\ExceptionInterface + * {@inheritDoc} */ - protected function internalGetMetadata(&$normalizedKey) + protected function internalGetMetadata(string $normalizedKey): Metadata|null { $options = $this->getOptions(); $namespace = $options->getNamespace(); @@ -350,33 +336,37 @@ protected function internalGetMetadata(&$normalizedKey) $it = new BaseApcuIterator($regexp, $format, 100, APC_LIST_ACTIVE); if (! $it->valid()) { - return false; + return null; } $metadata = $it->current(); if (! $metadata) { - return false; + return null; } - $this->normalizeMetadata($metadata); - return $metadata; + $this->assertMetadata($metadata); + + return new Metadata( + $metadata['key'], + $metadata['access_time'], + $metadata['creation_time'], + $metadata['mtime'], + $metadata['deletion_time'], + $metadata['mem_size'], + $metadata['num_hits'], + $metadata['ttl'], + ); } /** - * Get metadata of multiple items - * - * @param array $normalizedKeys - * @return array Associative array of keys and metadata - * @triggers getMetadatas.pre(PreEvent) - * @triggers getMetadatas.post(PostEvent) - * @triggers getMetadatas.exception(ExceptionEvent) + * {@inheritDoc} */ - protected function internalGetMetadatas(array &$normalizedKeys) + protected function internalGetMetadatas(array $normalizedKeys): array { $keysRegExp = []; foreach ($normalizedKeys as $normalizedKey) { - $keysRegExp[] = preg_quote($normalizedKey, '/'); + $keysRegExp[] = preg_quote((string) $normalizedKey, '/'); } $options = $this->getOptions(); @@ -395,24 +385,28 @@ protected function internalGetMetadatas(array &$normalizedKeys) $it = new BaseApcuIterator($pattern, $format, 100, APC_LIST_ACTIVE); $result = []; foreach ($it as $internalKey => $metadata) { - $this->normalizeMetadata($metadata); - $result[substr($internalKey, $prefixL)] = $metadata; + $this->assertMetadata($metadata); + $keyWithoutPrefix = substr($internalKey, $prefixL); + Assert::stringNotEmpty($keyWithoutPrefix); + $result[$keyWithoutPrefix] = new Metadata( + $metadata['key'], + $metadata['access_time'], + $metadata['creation_time'], + $metadata['mtime'], + $metadata['deletion_time'], + $metadata['mem_size'], + $metadata['num_hits'], + $metadata['ttl'], + ); } return $result; } - /* writing */ - /** - * Internal method to store an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface + * {@inheritDoc} */ - protected function internalSetItem(&$normalizedKey, &$value) + protected function internalSetItem(string $normalizedKey, mixed $value): bool { $options = $this->getOptions(); $namespace = $options->getNamespace(); @@ -431,13 +425,9 @@ protected function internalSetItem(&$normalizedKey, &$value) } /** - * Internal method to store multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface + * {@inheritDoc} */ - protected function internalSetItems(array &$normalizedKeyValuePairs) + protected function internalSetItems(array $normalizedKeyValuePairs): array { $options = $this->getOptions(); $namespace = $options->getNamespace(); @@ -455,24 +445,17 @@ protected function internalSetItems(array &$normalizedKeyValuePairs) $failedKeys = apcu_store($internalKeyValuePairs, null, (int) ceil($options->getTtl())); $failedKeys = array_keys($failedKeys); - // remove prefix $prefixL = strlen($prefix); - foreach ($failedKeys as $key) { - $key = substr($key, $prefixL); - } - + Assert::allStringNotEmpty($failedKeys); + $failedKeys = array_map(fn (string $key): string => substr($key, $prefixL), $failedKeys); + Assert::allStringNotEmpty($failedKeys); return $failedKeys; } /** - * Add an item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface + * {@inheritDoc} */ - protected function internalAddItem(&$normalizedKey, &$value) + protected function internalAddItem(string $normalizedKey, mixed $value): bool { $options = $this->getOptions(); $namespace = $options->getNamespace(); @@ -485,7 +468,7 @@ protected function internalAddItem(&$normalizedKey, &$value) return false; } - $type = is_object($value) ? $value::class : gettype($value); + $type = get_debug_type($value); throw new Exception\RuntimeException( "apcu_add('{$internalKey}', <{$type}>, {$ttl}) failed" ); @@ -495,18 +478,17 @@ protected function internalAddItem(&$normalizedKey, &$value) } /** - * Internal method to add multiple items. - * - * @param array $normalizedKeyValuePairs - * @return array Array of not stored keys - * @throws Exception\ExceptionInterface + * {@inheritDoc} */ - protected function internalAddItems(array &$normalizedKeyValuePairs) + protected function internalAddItems(array $normalizedKeyValuePairs): array { $options = $this->getOptions(); $namespace = $options->getNamespace(); if ($namespace === '') { - return array_keys(apcu_add($normalizedKeyValuePairs, null, (int) ceil($options->getTtl()))); + /** @psalm-suppress InvalidScalarArgument Integer keys are supported by APCu as well. */ + $result = array_keys(apcu_add($normalizedKeyValuePairs, null, (int) ceil($options->getTtl()))); + Assert::allStringNotEmpty($result); + return $result; } $prefix = $namespace . $options->getNamespaceSeparator(); @@ -520,23 +502,16 @@ protected function internalAddItems(array &$normalizedKeyValuePairs) $failedKeys = array_keys($failedKeys); // remove prefix - $prefixL = strlen($prefix); - foreach ($failedKeys as &$key) { - $key = substr($key, $prefixL); - } - + $prefixL = strlen($prefix); + $failedKeys = array_map(fn (string $key): string => substr($key, $prefixL), $failedKeys); + Assert::allStringNotEmpty($failedKeys); return $failedKeys; } /** - * Internal method to replace an existing item. - * - * @param string $normalizedKey - * @param mixed $value - * @return bool - * @throws Exception\ExceptionInterface + * {@inheritDoc} */ - protected function internalReplaceItem(&$normalizedKey, &$value) + protected function internalReplaceItem(string $normalizedKey, mixed $value): bool { $options = $this->getOptions(); $ttl = (int) ceil($options->getTtl()); @@ -549,7 +524,8 @@ protected function internalReplaceItem(&$normalizedKey, &$value) } if (! apcu_store($internalKey, $value, $ttl)) { - $type = is_object($value) ? $value::class : gettype($value); + $type = get_debug_type($value); + throw new Exception\RuntimeException( "apcu_store('{$internalKey}', <{$type}>, {$ttl}) failed" ); @@ -559,17 +535,9 @@ protected function internalReplaceItem(&$normalizedKey, &$value) } /** - * Internal method to set an item only if token matches - * - * @see getItem() - * @see setItem() - * - * @param mixed $token - * @param string $normalizedKey - * @param mixed $value - * @return bool + * {@inheritDoc} */ - protected function internalCheckAndSetItem(&$token, &$normalizedKey, &$value) + protected function internalCheckAndSetItem(mixed $token, string $normalizedKey, mixed $value): bool { if (is_int($token) && is_int($value)) { return apcu_cas($normalizedKey, $token, $value); @@ -579,13 +547,9 @@ protected function internalCheckAndSetItem(&$token, &$normalizedKey, &$value) } /** - * Internal method to remove an item. - * - * @param string $normalizedKey - * @return bool - * @throws Exception\ExceptionInterface + * {@inheritDoc} */ - protected function internalRemoveItem(&$normalizedKey) + protected function internalRemoveItem(string $normalizedKey): bool { $options = $this->getOptions(); $namespace = $options->getNamespace(); @@ -594,18 +558,16 @@ protected function internalRemoveItem(&$normalizedKey) } /** - * Internal method to remove multiple items. - * - * @param array $normalizedKeys - * @return array Array of not removed keys - * @throws Exception\ExceptionInterface + * {@inheritDoc} */ - protected function internalRemoveItems(array &$normalizedKeys) + protected function internalRemoveItems(array $normalizedKeys): array { $options = $this->getOptions(); $namespace = $options->getNamespace(); if ($namespace === '') { - return apcu_delete($normalizedKeys); + $result = apcu_delete(array_map(fn (string|int $key) => (string) $key, $normalizedKeys)); + Assert::allStringNotEmpty($result); + return $result; } $prefix = $namespace . $options->getNamespaceSeparator(); @@ -617,157 +579,80 @@ protected function internalRemoveItems(array &$normalizedKeys) $failedKeys = apcu_delete($internalKeys); // remove prefix - $prefixL = strlen($prefix); - foreach ($failedKeys as &$key) { - $key = substr($key, $prefixL); - } - + $prefixL = strlen($prefix); + $failedKeys = array_map(fn (string $key): string => substr($key, $prefixL), $failedKeys); + Assert::allStringNotEmpty($failedKeys); return $failedKeys; } /** - * Internal method to increment an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface + * {@inheritDoc} */ - protected function internalIncrementItem(&$normalizedKey, &$value) + protected function internalGetCapabilities(): Capabilities { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = $namespace === '' ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - $value = (int) $value; - $newValue = apcu_inc($internalKey, $value); - - // initial value - if ($newValue === false) { - $ttl = (int) ceil($options->getTtl()); - $newValue = $value; - if (! apcu_add($internalKey, $newValue, $ttl)) { - throw new Exception\RuntimeException( - "apcu_add('{$internalKey}', {$newValue}, {$ttl}) failed" - ); - } - } - - return $newValue; + return $this->capabilities ??= new Capabilities( + maxKeyLength: 5182, + ttlSupported: true, + namespaceIsPrefix: true, + supportedDataTypes: [ + 'NULL' => true, + 'boolean' => true, + 'integer' => true, + 'double' => true, + 'string' => true, + 'array' => true, + 'object' => 'object', + 'resource' => false, + ], + ttlPrecision: 1, + usesRequestTime: (bool) ini_get('apc.use_request_time'), + ); } /** - * Internal method to decrement an item. - * - * @param string $normalizedKey - * @param int $value - * @return int|bool The new value on success, false on failure - * @throws Exception\ExceptionInterface + * @psalm-assert APCUMetadataArrayShape $metadata */ - protected function internalDecrementItem(&$normalizedKey, &$value) + private function assertMetadata(mixed $metadata): void { - $options = $this->getOptions(); - $namespace = $options->getNamespace(); - $prefix = $namespace === '' ? '' : $namespace . $options->getNamespaceSeparator(); - $internalKey = $prefix . $normalizedKey; - $value = (int) $value; - $newValue = apcu_dec($internalKey, $value); - - // initial value - if ($newValue === false) { - $ttl = (int) ceil($options->getTtl()); - $newValue = -$value; - if (! apcu_add($internalKey, $newValue, $ttl)) { - throw new Exception\RuntimeException( - "apcu_add('{$internalKey}', {$newValue}, {$ttl}) failed" - ); - } - } - - return $newValue; + Assert::isMap($metadata); + Assert::keyExists($metadata, 'key'); + assert(array_key_exists('key', $metadata), 'Provide existence to psalm.'); + Assert::keyExists($metadata, 'access_time'); + assert(array_key_exists('access_time', $metadata), 'Provide existence to psalm.'); + Assert::keyExists($metadata, 'creation_time'); + assert(array_key_exists('creation_time', $metadata), 'Provide existence to psalm.'); + Assert::keyExists($metadata, 'mtime'); + assert(array_key_exists('mtime', $metadata), 'Provide existence to psalm.'); + Assert::keyExists($metadata, 'deletion_time'); + assert(array_key_exists('deletion_time', $metadata), 'Provide existence to psalm.'); + Assert::keyExists($metadata, 'mem_size'); + assert(array_key_exists('mem_size', $metadata), 'Provide existence to psalm.'); + Assert::keyExists($metadata, 'num_hits'); + assert(array_key_exists('num_hits', $metadata), 'Provide existence to psalm.'); + Assert::keyExists($metadata, 'ttl'); + assert(array_key_exists('ttl', $metadata), 'Provide existence to psalm.'); + + Assert::stringNotEmpty($metadata['key']); + Assert::natural($metadata['access_time']); + Assert::natural($metadata['creation_time']); + Assert::natural($metadata['mtime']); + Assert::natural($metadata['deletion_time']); + Assert::natural($metadata['mem_size']); + Assert::natural($metadata['num_hits']); + Assert::natural($metadata['ttl']); } - /* status */ - - /** - * Internal method to get capabilities of this adapter - * - * @return Capabilities - */ - protected function internalGetCapabilities() - { - if ($this->capabilities === null) { - $marker = new stdClass(); - $capabilities = new Capabilities( - $this, - $marker, - [ - 'supportedDatatypes' => [ - 'NULL' => true, - 'boolean' => true, - 'integer' => true, - 'double' => true, - 'string' => true, - 'array' => true, - 'object' => 'object', - 'resource' => false, - ], - 'supportedMetadata' => [ - 'internal_key', - 'atime', - 'ctime', - 'mtime', - 'rtime', - 'size', - 'hits', - 'ttl', - ], - 'minTtl' => 1, - 'maxTtl' => 0, - 'staticTtl' => true, - 'ttlPrecision' => 1, - 'useRequestTime' => (bool) ini_get('apc.use_request_time'), - 'maxKeyLength' => 5182, - 'namespaceIsPrefix' => true, - 'namespaceSeparator' => $this->getOptions()->getNamespaceSeparator(), - ] - ); - - // update namespace separator on change option - $this->getEventManager()->attach('option', static function ($event) use ($capabilities, $marker): void { - $params = $event->getParams(); - - if (isset($params['namespace_separator'])) { - $capabilities->setNamespaceSeparator($marker, $params['namespace_separator']); - } - }); - - $this->capabilities = $capabilities; - $this->capabilityMarker = $marker; - } - - return $this->capabilities; - } - - /* internal */ - /** - * Normalize metadata to work with APC - * - * @param array $metadata - * @return void + * @psalm-assert array{num_seg:int,seg_size:float,avail_mem:float} $smaInfo */ - protected function normalizeMetadata(array &$metadata) + private function assertSmaInfo(bool|array $smaInfo): void { - $metadata = [ - 'internal_key' => $metadata['key'], - 'atime' => $metadata['access_time'], - 'ctime' => $metadata['creation_time'], - 'mtime' => $metadata['mtime'], - 'rtime' => $metadata['deletion_time'], - 'size' => $metadata['mem_size'], - 'hits' => $metadata['num_hits'], - 'ttl' => $metadata['ttl'], - ]; + Assert::isMap($smaInfo); + Assert::keyExists($smaInfo, 'num_seg'); + Assert::integer($smaInfo['num_seg']); + Assert::keyExists($smaInfo, 'seg_size'); + Assert::float($smaInfo['seg_size']); + Assert::keyExists($smaInfo, 'avail_mem'); + Assert::float($smaInfo['avail_mem']); } } diff --git a/src/Apcu/Metadata.php b/src/Apcu/Metadata.php new file mode 100644 index 0000000..8060181 --- /dev/null +++ b/src/Apcu/Metadata.php @@ -0,0 +1,33 @@ + $ttl + */ + public function __construct( + public readonly string $internalKey, + public readonly int $atime, + public readonly int $ctime, + public readonly int $mtime, + public readonly int $rtime, + public readonly int $size, + public readonly int $hits, + public readonly int $ttl, + ) { + } +} diff --git a/src/ApcuIterator.php b/src/ApcuIterator.php index 46f0d53..971ad10 100644 --- a/src/ApcuIterator.php +++ b/src/ApcuIterator.php @@ -7,7 +7,6 @@ use APCUIterator as BaseApcuIterator; use Laminas\Cache\Storage\Adapter\Apcu; use Laminas\Cache\Storage\IteratorInterface; -use ReturnTypeWillChange; use function strlen; use function substr; @@ -46,16 +45,16 @@ public function __construct(Apcu $storage, BaseApcuIterator $baseIterator, strin $this->prefixLength = strlen($prefix); } + /** + * {@inheritDoc} + */ public function getStorage(): Apcu { return $this->storage; } /** - * Get iterator mode - * - * @return int Value of IteratorInterface::CURRENT_AS_* - * @psalm-return IteratorInterface::CURRENT_AS_* + * {@inheritDoc} */ public function getMode(): int { @@ -63,28 +62,18 @@ public function getMode(): int } /** - * Set iterator mode - * - * @param int $mode - * @psalm-suppress MoreSpecificImplementedParamType - * @psalm-param IteratorInterface::CURRENT_AS_* $mode - * @return ApcuIterator Provides a fluent interface + * {@inheritDoc} */ - public function setMode($mode) + public function setMode(int $mode): self { $this->mode = (int) $mode; return $this; } - /* Iterator */ - /** - * Get current key, value or metadata. - * - * @return mixed + * {@inheritDoc} */ - #[ReturnTypeWillChange] - public function current() + public function current(): mixed { if ($this->mode === IteratorInterface::CURRENT_AS_SELF) { return $this; @@ -96,13 +85,12 @@ public function current() return $this->storage->getItem($key); } - if ($this->mode === IteratorInterface::CURRENT_AS_METADATA) { - return $this->storage->getMetadata($key); - } - return $key; } + /** + * {@inheritDoc} + */ public function key(): string { $key = $this->baseIterator->key(); @@ -112,7 +100,7 @@ public function key(): string } /** - * Move forward to next element + * {@inheritDoc} */ public function next(): void { @@ -120,7 +108,7 @@ public function next(): void } /** - * Checks if current position is valid + * {@inheritDoc} */ public function valid(): bool { @@ -128,7 +116,7 @@ public function valid(): bool } /** - * Rewind the Iterator to the first element. + * {@inheritDoc} */ public function rewind(): void { diff --git a/src/ApcuOptions.php b/src/ApcuOptions.php index 9e69334..3f6877b 100644 --- a/src/ApcuOptions.php +++ b/src/ApcuOptions.php @@ -7,35 +7,18 @@ /** * These are options specific to the APCu adapter */ -class ApcuOptions extends AdapterOptions +final class ApcuOptions extends AdapterOptions { - /** - * Namespace separator - * - * @var string - */ - protected $namespaceSeparator = ':'; + protected string $namespaceSeparator = ':'; - /** - * Set namespace separator - * - * @param string $namespaceSeparator - * @return ApcuOptions Provides a fluent interface - */ - public function setNamespaceSeparator($namespaceSeparator) + public function setNamespaceSeparator(string $namespaceSeparator): self { - $namespaceSeparator = (string) $namespaceSeparator; $this->triggerOptionEvent('namespace_separator', $namespaceSeparator); $this->namespaceSeparator = $namespaceSeparator; return $this; } - /** - * Get namespace separator - * - * @return string - */ - public function getNamespaceSeparator() + public function getNamespaceSeparator(): string { return $this->namespaceSeparator; } diff --git a/test/integration/Psr/CacheItemPool/ApcuIntegrationTest.php b/test/integration/Psr/CacheItemPool/ApcuIntegrationTest.php index d42b290..af94781 100644 --- a/test/integration/Psr/CacheItemPool/ApcuIntegrationTest.php +++ b/test/integration/Psr/CacheItemPool/ApcuIntegrationTest.php @@ -14,9 +14,6 @@ final class ApcuIntegrationTest extends AbstractCacheItemPoolIntegrationTest { - /** - * Restore 'apc.use_request_time' - */ private string $iniUseRequestTime; public function testApcUseRequestTimeThrowsException(): void diff --git a/test/integration/Psr/SimpleCache/ApcuIntegrationTest.php b/test/integration/Psr/SimpleCache/ApcuIntegrationTest.php index 9cae1e1..d304763 100644 --- a/test/integration/Psr/SimpleCache/ApcuIntegrationTest.php +++ b/test/integration/Psr/SimpleCache/ApcuIntegrationTest.php @@ -13,12 +13,7 @@ class ApcuIntegrationTest extends AbstractSimpleCacheIntegrationTest { - /** - * Restore 'apc.use_request_time' - * - * @var string - */ - protected $iniUseRequestTime; + protected string $iniUseRequestTime; protected function setUp(): void { diff --git a/test/unit/Apcu/AdapterPluginManagerDelegatorFactoryTest.php b/test/unit/Apcu/AdapterPluginManagerDelegatorFactoryTest.php index 5fb2579..696c3a7 100644 --- a/test/unit/Apcu/AdapterPluginManagerDelegatorFactoryTest.php +++ b/test/unit/Apcu/AdapterPluginManagerDelegatorFactoryTest.php @@ -12,7 +12,7 @@ final class AdapterPluginManagerDelegatorFactoryTest extends TestCase { use PluginManagerDelegatorFactoryTestTrait; - public function getCommonAdapterNamesProvider(): iterable + public static function getCommonAdapterNamesProvider(): iterable { return [ 'lowercase' => ['apcu'], diff --git a/test/unit/ApcuTest.php b/test/unit/ApcuTest.php index e3462b3..4c2e9b1 100644 --- a/test/unit/ApcuTest.php +++ b/test/unit/ApcuTest.php @@ -7,9 +7,9 @@ use Laminas\Cache\Storage\Adapter\Apcu; use Laminas\Cache\Storage\Adapter\ApcuOptions; -use function apcu_clear_cache; use function ini_get; use function ini_set; +use function sprintf; /** @template-extends AbstractCommonAdapterTest */ final class ApcuTest extends AbstractCommonAdapterTest @@ -25,16 +25,29 @@ public function setUp(): void $this->iniUseRequestTime = (string) ini_get('apc.use_request_time'); ini_set('apc.use_request_time', '0'); - $this->options = new ApcuOptions(); - $this->storage = new Apcu(); - $this->storage->setOptions($this->options); + $this->options = new ApcuOptions(['namespace' => '']); + $this->storage = new Apcu($this->options); + $this->storage->flush(); parent::setUp(); } + public function testGetMetadata(): void + { + $options = $this->storage->getOptions(); + $options->setNamespace('prefix'); + $this->storage->setItem('foo', 'bar'); + $metadata = $this->storage->getMetadata('foo'); + self::assertNotNull($metadata); + self::assertSame( + sprintf('%s%sfoo', $options->getNamespace(), $options->getNamespaceSeparator()), + $metadata->internalKey, + ); + } + public function tearDown(): void { - apcu_clear_cache(); + $this->storage->flush(); // reset ini configurations ini_set('apc.use_request_time', $this->iniUseRequestTime);