diff --git a/.env.example b/.env.example index c4915ff..f2c8418 100644 --- a/.env.example +++ b/.env.example @@ -3,7 +3,7 @@ BUILD_ROOT_PATH=/app/ PROJECT_NAME=dhii_containers PHP_BUILD_VERSION=7.4 -PHP_TEST_VERSION=8.2 +PHP_TEST_VERSION=8.1 XDEBUG_VERSION=3.2.2 -HOST_IP_ADDRESS=127.0.0.1 +HOST_IP_ADDRESS=host-gateway diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7b588a2..8215f1e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,11 +17,10 @@ jobs: strategy: matrix: php-versions: - - '7.4' - - '8.0' - '8.1' - '8.2' - '8.3' + - '8.4' name: PHP ${{ matrix.php-versions }} steps: - uses: actions/checkout@v2 diff --git a/.gitignore b/.gitignore index 1138a36..f532795 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ /.idea/misc.xml .phpunit.result.cache /.env +/.phpunit.cache diff --git a/.idea/codeception.xml b/.idea/codeception.xml deleted file mode 100644 index 330f2dd..0000000 --- a/.idea/codeception.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/containers.iml b/.idea/containers.iml index b54113e..139310b 100644 --- a/.idea/containers.iml +++ b/.idea/containers.iml @@ -2,8 +2,12 @@ + + + + @@ -12,9 +16,7 @@ - - @@ -22,9 +24,7 @@ - - @@ -40,7 +40,6 @@ - @@ -73,8 +72,27 @@ + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml index d0fd0fe..87a3a22 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -1,5 +1,10 @@ + + + + + @@ -13,6 +18,7 @@ + @@ -22,9 +28,7 @@ - - @@ -32,9 +36,7 @@ - - @@ -50,7 +52,6 @@ - @@ -92,6 +93,25 @@ + + + + + + + + + + + + + + + + + + + @@ -105,9 +125,9 @@ - + - + @@ -122,14 +142,14 @@ - - /usr/local/etc/php/conf.d/docker-php-ext-pcntl.ini, /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini + + /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini, /usr/local/etc/php/conf.d/docker-php-ext-pcntl.ini, /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini /usr/local/etc/php/php.ini - + @@ -140,6 +160,7 @@ + @@ -158,7 +179,6 @@ - @@ -174,8 +194,8 @@ - - /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini + + /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini, /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini /usr/local/etc/php/php.ini @@ -188,6 +208,7 @@ + @@ -220,7 +241,7 @@ - + diff --git a/.idea/phpspec.xml b/.idea/phpspec.xml index ec7e1d4..33107fd 100644 --- a/.idea/phpspec.xml +++ b/.idea/phpspec.xml @@ -5,9 +5,6 @@ - - \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 929e569..d177784 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). ## [[*next-version*]] - YYYY-MM-DD +### Changed +- **Dropped support for PHP < 8.1** (#32). +- Added type declarations throughout the codebase (#32). +- `TaggingServiceProvider` now silently skips non-documentable values (#32). + +### Fixed +- Type inconsistencies reported by Psalm (#32), ## [0.2.0-alpha1] - 2024-09-22 ### Added diff --git a/composer.json b/composer.json index 2903cd0..76dbaa2 100644 --- a/composer.json +++ b/composer.json @@ -16,14 +16,14 @@ "minimum-stability": "dev", "prefer-stable": false, "require": { - "php": "^7.4 | ^8.0", + "php": "^8.1", "dhii/collections-interface": "^0.4.0-alpha2", "container-interop/service-provider": "^0.4" }, "require-dev": { - "slevomat/coding-standard": "^6.0", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "^5.0", + "slevomat/coding-standard": "^8.0", + "phpunit/phpunit": "^10.0", + "vimeo/psalm": "^6.0", "gmazzap/andrew": "^1.1", "psr/container": "^2.0", "psr/simple-cache": "^1.0", diff --git a/composer.lock b/composer.lock index 36c875e..fefae8f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4a0a03723e92b74d821d53755e41aa82", + "content-hash": "d5b4094391e0af3120929d7bb92bb7d9", "packages": [ { "name": "container-interop/service-provider", @@ -64,11 +64,654 @@ "slevomat/coding-standard": "^6.0", "vimeo/psalm": "^4.6.2 | ^5.0" }, + "type": "library", + "autoload": { + "psr-4": { + "Dhii\\Collection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dhii Team", + "email": "development@dhii.co" + }, + { + "name": "Anton Ukhanev", + "email": "xedin.unknown@gmail.com" + } + ], + "description": "A highly ISP-compliant collection of interfaces that represent maps and lists.", + "support": { + "issues": "https://github.com/Dhii/collections-interface/issues", + "source": "https://github.com/Dhii/collections-interface/tree/0.4.x" + }, + "time": "2024-09-21T21:40:54+00:00" + }, + { + "name": "psr/container", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "707984727bd5b2b670e59559d3ed2500240cf875" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/707984727bd5b2b670e59559d3ed2500240cf875", + "reference": "707984727bd5b2b670e59559d3ed2500240cf875", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container" + }, + "time": "2023-09-22T11:11:30+00:00" + } + ], + "packages-dev": [ + { + "name": "amphp/amp", + "version": "3.x-dev", + "source": { + "type": "git", + "url": "https://github.com/amphp/amp.git", + "reference": "8f0b0d7d1ac826dd7f009ed9c1e7aa1d30f5dcdc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/amp/zipball/8f0b0d7d1ac826dd7f009ed9c1e7aa1d30f5dcdc", + "reference": "8f0b0d7d1ac826dd7f009ed9c1e7aa1d30f5dcdc", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "6.15.1" + }, + "default-branch": true, + "type": "library", + "autoload": { + "files": [ + "src/functions.php", + "src/Future/functions.php", + "src/Internal/functions.php" + ], + "psr-4": { + "Amp\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + } + ], + "description": "A non-blocking concurrency framework for PHP applications.", + "homepage": "https://amphp.org/amp", + "keywords": [ + "async", + "asynchronous", + "awaitable", + "concurrency", + "event", + "event-loop", + "future", + "non-blocking", + "promise" + ], + "support": { + "issues": "https://github.com/amphp/amp/issues", + "source": "https://github.com/amphp/amp/tree/3.x" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2026-02-25T04:08:38+00:00" + }, + { + "name": "amphp/byte-stream", + "version": "2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/amphp/byte-stream.git", + "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/55a6bd071aec26fa2a3e002618c20c35e3df1b46", + "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/parser": "^1.1", + "amphp/pipeline": "^1", + "amphp/serialization": "^1", + "amphp/sync": "^2", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2.3" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "5.22.1" + }, + "default-branch": true, + "type": "library", + "autoload": { + "files": [ + "src/functions.php", + "src/Internal/functions.php" + ], + "psr-4": { + "Amp\\ByteStream\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A stream abstraction to make working with non-blocking I/O simple.", + "homepage": "https://amphp.org/byte-stream", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "non-blocking", + "stream" + ], + "support": { + "issues": "https://github.com/amphp/byte-stream/issues", + "source": "https://github.com/amphp/byte-stream/tree/v2.1.2" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2025-03-16T17:10:27+00:00" + }, + { + "name": "amphp/cache", + "version": "2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/amphp/cache.git", + "reference": "e6d0bf9d8c28e1099ace3e4918d8e760e4028441" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/cache/zipball/e6d0bf9d8c28e1099ace3e4918d8e760e4028441", + "reference": "e6d0bf9d8c28e1099ace3e4918d8e760e4028441", + "shasum": "" + }, + "require": { + "amphp/amp": "^3.1", + "amphp/serialization": "^1", + "amphp/sync": "^2", + "php": ">=8.1", + "revolt/event-loop": "^1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.4" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Amp\\Cache\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + } + ], + "description": "A fiber-aware cache API based on Amp and Revolt.", + "homepage": "https://amphp.org/cache", + "support": { + "issues": "https://github.com/amphp/cache/issues", + "source": "https://github.com/amphp/cache/tree/2.x" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2025-01-26T18:16:13+00:00" + }, + { + "name": "amphp/dns", + "version": "2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/amphp/dns.git", + "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/dns/zipball/78eb3db5fc69bf2fc0cb503c4fcba667bc223c71", + "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/cache": "^2", + "amphp/parser": "^1", + "amphp/process": "^2", + "daverandom/libdns": "^2.0.2", + "ext-filter": "*", + "ext-json": "*", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "5.20" + }, + "default-branch": true, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Amp\\Dns\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Wright", + "email": "addr@daverandom.com" + }, + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + } + ], + "description": "Async DNS resolution for Amp.", + "homepage": "https://github.com/amphp/dns", + "keywords": [ + "amp", + "amphp", + "async", + "client", + "dns", + "resolve" + ], + "support": { + "issues": "https://github.com/amphp/dns/issues", + "source": "https://github.com/amphp/dns/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2025-01-19T15:43:40+00:00" + }, + { + "name": "amphp/parallel", + "version": "2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/amphp/parallel.git", + "reference": "296b521137a54d3a02425b464e5aee4c93db2c60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/parallel/zipball/296b521137a54d3a02425b464e5aee4c93db2c60", + "reference": "296b521137a54d3a02425b464e5aee4c93db2c60", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/cache": "^2", + "amphp/parser": "^1", + "amphp/pipeline": "^1", + "amphp/process": "^2", + "amphp/serialization": "^1", + "amphp/socket": "^2", + "amphp/sync": "^2", + "php": ">=8.1", + "revolt/event-loop": "^1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.18" + }, + "default-branch": true, + "type": "library", + "autoload": { + "files": [ + "src/Context/functions.php", + "src/Context/Internal/functions.php", + "src/Ipc/functions.php", + "src/Worker/functions.php" + ], + "psr-4": { + "Amp\\Parallel\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Stephen Coakley", + "email": "me@stephencoakley.com" + } + ], + "description": "Parallel processing component for Amp.", + "homepage": "https://github.com/amphp/parallel", + "keywords": [ + "async", + "asynchronous", + "concurrent", + "multi-processing", + "multi-threading" + ], + "support": { + "issues": "https://github.com/amphp/parallel/issues", + "source": "https://github.com/amphp/parallel/tree/2.x" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2025-11-15T06:23:42+00:00" + }, + { + "name": "amphp/parser", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/amphp/parser.git", + "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/parser/zipball/3cf1f8b32a0171d4b1bed93d25617637a77cded7", + "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7", + "shasum": "" + }, + "require": { + "php": ">=7.4" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.4" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Amp\\Parser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A generator parser to make streaming parsers simple.", + "homepage": "https://github.com/amphp/parser", + "keywords": [ + "async", + "non-blocking", + "parser", + "stream" + ], + "support": { + "issues": "https://github.com/amphp/parser/issues", + "source": "https://github.com/amphp/parser/tree/v1.1.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-03-21T19:16:53+00:00" + }, + { + "name": "amphp/pipeline", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/amphp/pipeline.git", + "reference": "6ebb05d8b6878b0988391fe064fe61ac0f4e0e8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/pipeline/zipball/6ebb05d8b6878b0988391fe064fe61ac0f4e0e8f", + "reference": "6ebb05d8b6878b0988391fe064fe61ac0f4e0e8f", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "php": ">=8.1", + "revolt/event-loop": "^1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "6.15.1" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Amp\\Pipeline\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Asynchronous iterators and operators.", + "homepage": "https://amphp.org/pipeline", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "iterator", + "non-blocking" + ], + "support": { + "issues": "https://github.com/amphp/pipeline/issues", + "source": "https://github.com/amphp/pipeline/tree/1.x" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2026-02-28T19:35:26+00:00" + }, + { + "name": "amphp/process", + "version": "2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/amphp/process.git", + "reference": "52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/process/zipball/52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d", + "reference": "52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/sync": "^2", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.4" + }, "default-branch": true, "type": "library", "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "Dhii\\Collection\\": "src" + "Amp\\Process\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -77,48 +720,64 @@ ], "authors": [ { - "name": "Dhii Team", - "email": "development@dhii.co" + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" }, { - "name": "Anton Ukhanev", - "email": "xedin.unknown@gmail.com" + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" } ], - "description": "A highly ISP-compliant collection of interfaces that represent maps and lists.", + "description": "A fiber-aware process manager based on Amp and Revolt.", + "homepage": "https://amphp.org/process", "support": { - "issues": "https://github.com/Dhii/collections-interface/issues", - "source": "https://github.com/Dhii/collections-interface/tree/0.4.x" + "issues": "https://github.com/amphp/process/issues", + "source": "https://github.com/amphp/process/tree/v2.0.3" }, - "time": "2024-09-21T21:40:54+00:00" + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-04-19T03:13:44+00:00" }, { - "name": "psr/container", - "version": "dev-master", + "name": "amphp/serialization", + "version": "1.x-dev", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "707984727bd5b2b670e59559d3ed2500240cf875" + "url": "https://github.com/amphp/serialization.git", + "reference": "21116dcd1221e0d1817e02a6e2b0c52a9a317327" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/707984727bd5b2b670e59559d3ed2500240cf875", - "reference": "707984727bd5b2b670e59559d3ed2500240cf875", + "url": "https://api.github.com/repos/amphp/serialization/zipball/21116dcd1221e0d1817e02a6e2b0c52a9a317327", + "reference": "21116dcd1221e0d1817e02a6e2b0c52a9a317327", "shasum": "" }, "require": { - "php": ">=7.4.0" + "php": ">=7.4" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "ext-json": "*", + "ext-zlib": "*", + "phpunit/phpunit": "^9", + "psalm/phar": "5.4" }, "default-branch": true, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "Psr\\Container\\": "src/" + "Amp\\Serialization\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -127,66 +786,76 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Serialization tools for IPC and data storage in PHP.", + "homepage": "https://github.com/amphp/serialization", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "async", + "asynchronous", + "serialization", + "serialize" ], "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container" + "issues": "https://github.com/amphp/serialization/issues", + "source": "https://github.com/amphp/serialization/tree/1.x" }, - "time": "2023-09-22T11:11:30+00:00" - } - ], - "packages-dev": [ + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2023-08-29T20:22:27+00:00" + }, { - "name": "amphp/amp", + "name": "amphp/socket", "version": "2.x-dev", "source": { "type": "git", - "url": "https://github.com/amphp/amp.git", - "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" + "url": "https://github.com/amphp/socket.git", + "reference": "93ed36129dc54453803bb15282dfd1680c347836" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", - "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "url": "https://api.github.com/repos/amphp/socket/zipball/93ed36129dc54453803bb15282dfd1680c347836", + "reference": "93ed36129dc54453803bb15282dfd1680c347836", "shasum": "" }, "require": { - "php": ">=7.1" + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/dns": "^2", + "ext-openssl": "*", + "kelunik/certificate": "^1.1", + "league/uri": "^7", + "league/uri-interfaces": "^7", + "php": ">=8.1", + "revolt/event-loop": "^1" }, "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1", - "ext-json": "*", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^7 | ^8 | ^9", - "react/promise": "^2", - "vimeo/psalm": "^3.12" + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "amphp/process": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "5.20" }, + "default-branch": true, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, "autoload": { "files": [ - "lib/functions.php", - "lib/Internal/functions.php" + "src/functions.php", + "src/Internal/functions.php", + "src/SocketAddress/functions.php" ], "psr-4": { - "Amp\\": "lib" + "Amp\\Socket\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -196,38 +865,31 @@ "authors": [ { "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" + "email": "rdlowrey@gmail.com" }, { "name": "Aaron Piotrowski", "email": "aaron@trowski.com" }, - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, { "name": "Niklas Keller", "email": "me@kelunik.com" } ], - "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "https://amphp.org/amp", + "description": "Non-blocking socket connection / server implementations based on Amp and Revolt.", + "homepage": "https://github.com/amphp/socket", "keywords": [ + "amp", "async", - "asynchronous", - "awaitable", - "concurrency", - "event", - "event-loop", - "future", + "encryption", "non-blocking", - "promise" + "sockets", + "tcp", + "tls" ], "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/2.x" + "issues": "https://github.com/amphp/socket/issues", + "source": "https://github.com/amphp/socket/tree/2.x" }, "funding": [ { @@ -235,41 +897,43 @@ "type": "github" } ], - "time": "2024-03-21T18:52:26+00:00" + "time": "2026-02-12T21:15:57+00:00" }, { - "name": "amphp/byte-stream", - "version": "1.x-dev", + "name": "amphp/sync", + "version": "2.x-dev", "source": { "type": "git", - "url": "https://github.com/amphp/byte-stream.git", - "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" + "url": "https://github.com/amphp/sync.git", + "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", - "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", + "url": "https://api.github.com/repos/amphp/sync/zipball/217097b785130d77cfcc58ff583cf26cd1770bf1", + "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1", "shasum": "" }, "require": { - "amphp/amp": "^2", - "php": ">=7.1" + "amphp/amp": "^3", + "amphp/pipeline": "^1", + "amphp/serialization": "^1", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" }, "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1.4", - "friendsofphp/php-cs-fixer": "^2.3", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^6 || ^7 || ^8", - "psalm/phar": "^3.11.4" + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "5.23" }, + "default-branch": true, "type": "library", "autoload": { "files": [ - "lib/functions.php" + "src/functions.php" ], "psr-4": { - "Amp\\ByteStream\\": "lib" + "Amp\\Sync\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -284,21 +948,24 @@ { "name": "Niklas Keller", "email": "me@kelunik.com" + }, + { + "name": "Stephen Coakley", + "email": "me@stephencoakley.com" } ], - "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "https://amphp.org/byte-stream", + "description": "Non-blocking synchronization primitives for PHP based on Amp and Revolt.", + "homepage": "https://github.com/amphp/sync", "keywords": [ - "amp", - "amphp", "async", - "io", - "non-blocking", - "stream" + "asynchronous", + "mutex", + "semaphore", + "synchronization" ], "support": { - "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/windows-test-failures" + "issues": "https://github.com/amphp/sync/issues", + "source": "https://github.com/amphp/sync/tree/v2.3.0" }, "funding": [ { @@ -306,7 +973,7 @@ "type": "github" } ], - "time": "2024-04-13T18:00:56+00:00" + "time": "2024-08-03T19:31:26+00:00" }, { "name": "composer/pcre", @@ -314,12 +981,12 @@ "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" + "reference": "cc69ce9877ca31cb8fb3e87cb89792f2c139f87b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "url": "https://api.github.com/repos/composer/pcre/zipball/cc69ce9877ca31cb8fb3e87cb89792f2c139f87b", + "reference": "cc69ce9877ca31cb8fb3e87cb89792f2c139f87b", "shasum": "" }, "require": { @@ -329,20 +996,21 @@ "phpstan/phpstan": "<1.11.10" }, "require-dev": { - "phpstan/phpstan": "^1.11.10", - "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", "phpunit/phpunit": "^8 || ^9" }, "default-branch": true, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - }, "phpstan": { "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-main": "3.x-dev" } }, "autoload": { @@ -370,7 +1038,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.1" + "source": "https://github.com/composer/pcre/tree/main" }, "funding": [ { @@ -380,13 +1048,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-08-27T18:44:43+00:00" + "time": "2025-12-03T10:22:10+00:00" }, { "name": "composer/semver", @@ -394,12 +1058,12 @@ "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + "reference": "38ccbbfd0098b205e4d947f18e3f1f321803b067" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "url": "https://api.github.com/repos/composer/semver/zipball/38ccbbfd0098b205e4d947f18e3f1f321803b067", + "reference": "38ccbbfd0098b205e4d947f18e3f1f321803b067", "shasum": "" }, "require": { @@ -442,7 +1106,7 @@ "homepage": "http://robbast.nl" } ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", + "description": "Version comparison library that offers utilities, version constraint parsing and validation.", "keywords": [ "semantic", "semver", @@ -452,7 +1116,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" + "source": "https://github.com/composer/semver/tree/main" }, "funding": [ { @@ -462,13 +1126,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-09-19T14:15:21+00:00" + "time": "2025-12-03T10:22:06+00:00" }, { "name": "composer/xdebug-handler", @@ -497,76 +1157,175 @@ "type": "library", "autoload": { "psr-4": { - "Composer\\XdebugHandler\\": "src" + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-05-06T16:37:16+00:00" + }, + { + "name": "danog/advanced-json-rpc", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/danog/php-advanced-json-rpc.git", + "reference": "ae703ea7b4811797a10590b6078de05b3b33dd91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danog/php-advanced-json-rpc/zipball/ae703ea7b4811797a10590b6078de05b3b33dd91", + "reference": "ae703ea7b4811797a10590b6078de05b3b33dd91", + "shasum": "" + }, + "require": { + "netresearch/jsonmapper": "^5", + "php": ">=8.1", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0 || ^6" + }, + "replace": { + "felixfbecker/php-advanced-json-rpc": "^3" + }, + "require-dev": { + "phpunit/phpunit": "^9" + }, + "type": "library", + "autoload": { + "psr-4": { + "AdvancedJsonRpc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" + } + ], + "description": "A more advanced JSONRPC implementation", + "support": { + "issues": "https://github.com/danog/php-advanced-json-rpc/issues", + "source": "https://github.com/danog/php-advanced-json-rpc/tree/v3.2.3" + }, + "time": "2026-01-12T21:07:10+00:00" + }, + { + "name": "daverandom/libdns", + "version": "2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/DaveRandom/LibDNS.git", + "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DaveRandom/LibDNS/zipball/b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", + "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "Required for IDN support" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "LibDNS\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", + "description": "DNS protocol implementation written in pure PHP", "keywords": [ - "Xdebug", - "performance" + "dns" ], "support": { - "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.5" + "issues": "https://github.com/DaveRandom/LibDNS/issues", + "source": "https://github.com/DaveRandom/LibDNS/tree/2.x" }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-05-06T16:37:16+00:00" + "time": "2024-04-12T12:12:48+00:00" }, { "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v0.7.2", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" + "url": "https://github.com/PHPCSStandards/composer-installer.git", + "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", + "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/845eb62303d2ca9b289ef216356568ccc075ffd1", + "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" + "composer-plugin-api": "^2.2", + "php": ">=5.4", + "squizlabs/php_codesniffer": "^3.1.0 || ^4.0" }, "require-dev": { - "composer/composer": "*", - "php-parallel-lint/php-parallel-lint": "^1.3.1", - "phpcompatibility/php-compatibility": "^9.0" + "composer/composer": "^2.2", + "ext-json": "*", + "ext-zip": "*", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpcompatibility/php-compatibility": "^9.0 || ^10.0.0@dev", + "yoast/phpunit-polyfills": "^1.0" }, "type": "composer-plugin", "extra": { - "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" }, "autoload": { "psr-4": { - "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -576,17 +1335,16 @@ "authors": [ { "name": "Franck Nijhof", - "email": "franck.nijhof@dealerdirect.com", - "homepage": "http://www.frenck.nl", - "role": "Developer / IT Manager" + "email": "opensource@frenck.dev", + "homepage": "https://frenck.dev", + "role": "Open source developer" }, { "name": "Contributors", - "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" + "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" } ], "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "homepage": "http://www.dealerdirect.com", "keywords": [ "PHPCodeSniffer", "PHP_CodeSniffer", @@ -606,10 +1364,29 @@ "tests" ], "support": { - "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", - "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" + "issues": "https://github.com/PHPCSStandards/composer-installer/issues", + "security": "https://github.com/PHPCSStandards/composer-installer/security/policy", + "source": "https://github.com/PHPCSStandards/composer-installer" }, - "time": "2022-02-04T12:51:07+00:00" + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" + } + ], + "time": "2025-11-11T04:32:07+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -649,119 +1426,52 @@ "time": "2019-12-04T15:06:13+00:00" }, { - "name": "doctrine/instantiator", - "version": "1.5.x-dev", + "name": "doctrine/deprecations", + "version": "1.2.x-dev", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "12be2483e1f0e850b353e26869e4e6c038459501" + "url": "https://github.com/doctrine/deprecations.git", + "reference": "a2d13f1c09db71b0688cbdbcd17e569ec489c44b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/12be2483e1f0e850b353e26869e4e6c038459501", - "reference": "12be2483e1f0e850b353e26869e4e6c038459501", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/a2d13f1c09db71b0688cbdbcd17e569ec489c44b", + "reference": "a2d13f1c09db71b0688cbdbcd17e569ec489c44b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^12", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", - "vimeo/psalm": "^4.30 || ^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/1.5.x" - }, - "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": "2023-12-09T14:16:53+00:00" - }, - { - "name": "felixfbecker/advanced-json-rpc", - "version": "v3.2.1", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "shasum": "" - }, - "require": { - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "php": "^7.1 || ^8.0", - "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" + "conflict": { + "phpunit/phpunit": "<=7.5 || >=14" }, "require-dev": { - "phpunit/phpunit": "^7.0 || ^8.0" + "doctrine/coding-standard": "^9 || ^12 || ^14", + "phpstan/phpstan": "1.4.10 || 2.1.30", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", + "psr/log": "^1 || ^2 || ^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, "type": "library", "autoload": { "psr-4": { - "AdvancedJsonRpc\\": "lib/" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } + "MIT" ], - "description": "A more advanced JSONRPC implementation", + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", "support": { - "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", - "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.2.x" }, - "time": "2021-06-11T22:34:44+00:00" + "time": "2026-02-07T07:33:44+00:00" }, { "name": "felixfbecker/language-server-protocol", @@ -816,22 +1526,22 @@ ], "support": { "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/master" + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.3" }, "time": "2024-04-30T00:40:11+00:00" }, { "name": "fidry/cpu-core-counter", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", "shasum": "" }, "require": { @@ -841,10 +1551,10 @@ "fidry/makefile": "^0.2.0", "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^8.5.31 || ^9.5.26", "webmozarts/strict-phpunit": "^7.5" }, @@ -871,7 +1581,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" }, "funding": [ { @@ -879,7 +1589,7 @@ "type": "github" } ], - "time": "2024-08-06T10:04:20+00:00" + "time": "2025-08-14T07:29:31+00:00" }, { "name": "gmazzap/andrew", @@ -936,18 +1646,261 @@ }, "time": "2016-09-15T17:29:10+00:00" }, + { + "name": "kelunik/certificate", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/kelunik/certificate.git", + "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kelunik/certificate/zipball/7e00d498c264d5eb4f78c69f41c8bd6719c0199e", + "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "php": ">=7.0" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^6 | 7 | ^8 | ^9" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Kelunik\\Certificate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Access certificate details and transform between different formats.", + "keywords": [ + "DER", + "certificate", + "certificates", + "openssl", + "pem", + "x509" + ], + "support": { + "issues": "https://github.com/kelunik/certificate/issues", + "source": "https://github.com/kelunik/certificate/tree/v1.1.3" + }, + "time": "2023-02-03T21:26:53+00:00" + }, + { + "name": "league/uri", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "cf23cfb5eef8f1f4dde9dc658eda45644a01eb10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/cf23cfb5eef8f1f4dde9dc658eda45644a01eb10", + "reference": "cf23cfb5eef8f1f4dde9dc658eda45644a01eb10", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.8.1", + "php": "^8.1", + "psr/http-factory": "^1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "ext-uri": "to use the PHP native URI class", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "URN", + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc2141", + "rfc3986", + "rfc3987", + "rfc6570", + "rfc8141", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/master" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-15T20:31:30+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "b5fcab24ed6e23c3501d0c6a9f66024786404c9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/b5fcab24ed6e23c3501d0c6a9f66024786404c9c", + "reference": "b5fcab24ed6e23c3501d0c6a9f66024786404c9c", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/master" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-15T20:31:30+00:00" + }, { "name": "myclabs/deep-copy", "version": "1.x-dev", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + "reference": "5ee4e978b7fec6dbd844282126a5a32daa2044c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/5ee4e978b7fec6dbd844282126a5a32daa2044c6", + "reference": "5ee4e978b7fec6dbd844282126a5a32daa2044c6", "shasum": "" }, "require": { @@ -987,7 +1940,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.x" }, "funding": [ { @@ -995,20 +1948,20 @@ "type": "tidelift" } ], - "time": "2024-06-12T14:39:25+00:00" + "time": "2025-12-30T16:10:21+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.5.0", + "version": "v5.0.1", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5" + "reference": "980674efdda65913492d29a8fd51c82270dd37bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5", - "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/980674efdda65913492d29a8fd51c82270dd37bb", + "reference": "980674efdda65913492d29a8fd51c82270dd37bb", "shasum": "" }, "require": { @@ -1044,39 +1997,42 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v5.0.1" }, - "time": "2024-09-08T10:13:13+00:00" + "time": "2026-02-22T16:28:03+00:00" }, { "name": "nikic/php-parser", - "version": "4.x-dev", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "6de6ede1cb2fdff2837c5c92bc13263b5cb42d9e" + "reference": "50f0d9c9d0e3cff1163c959c50aaaaa4a7115f08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6de6ede1cb2fdff2837c5c92bc13263b5cb42d9e", - "reference": "6de6ede1cb2fdff2837c5c92bc13263b5cb42d9e", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/50f0d9c9d0e3cff1163c959c50aaaaa4a7115f08", + "reference": "50f0d9c9d0e3cff1163c959c50aaaaa4a7115f08", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.1" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, + "default-branch": true, "bin": [ "bin/php-parse" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -1100,9 +2056,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/4.x" + "source": "https://github.com/nikic/PHP-Parser/tree/master" }, - "time": "2024-09-21T13:58:16+00:00" + "time": "2026-02-26T13:20:22+00:00" }, { "name": "phar-io/manifest", @@ -1110,12 +2066,12 @@ "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" + "reference": "c581d4941e196459bf76c945a8ca922963a66708" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/c581d4941e196459bf76c945a8ca922963a66708", + "reference": "c581d4941e196459bf76c945a8ca922963a66708", "shasum": "" }, "require": { @@ -1162,7 +2118,7 @@ "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.4" + "source": "https://github.com/phar-io/manifest/tree/master" }, "funding": [ { @@ -1170,7 +2126,7 @@ "type": "github" } ], - "time": "2024-03-03T12:33:53+00:00" + "time": "2025-11-27T15:23:09+00:00" }, { "name": "phar-io/version", @@ -1278,29 +2234,38 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "version": "6.x-dev", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/7bae67520aa9f5ecc506d646810bd40d9da54582", + "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.1", "ext-filter": "*", - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "phpdocumentor/type-resolver": "^2.0", + "phpstan/phpdoc-parser": "^2.0", + "webmozart/assert": "^1.9.1 || ^2" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26", + "shipmonk/dead-code-detector": "^0.5.1" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -1323,47 +2288,51 @@ }, { "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "email": "opensource@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.x" }, - "time": "2021-10-19T17:43:47+00:00" + "time": "2026-03-18T20:49:53+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.2", + "version": "2.x-dev", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d" + "reference": "b2abba83bb2d04969e64b5b87e1406048488058f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d", - "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b2abba83bb2d04969e64b5b87e1406048488058f", + "reference": "b2abba83bb2d04969e64b5b87e1406048488058f", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.0", "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^2.0" }, "require-dev": { "ext-tokenizer": "*", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" + "psalm/phar": "^4" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" + "dev-1.x": "1.x-dev", + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -1384,45 +2353,40 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/2.x" }, - "time": "2022-10-14T12:47:21+00:00" + "time": "2026-01-22T20:53:16+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "0.4.9", + "version": "2.3.x-dev", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531" + "reference": "4d4ad14907af751b3f924d6083492c2f22a76c00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/98a088b17966bdf6ee25c8a4b634df313d8aa531", - "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/4d4ad14907af751b3f924d6083492c2f22a76c00", + "reference": "4d4ad14907af751b3f924d6083492c2f22a76c00", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { - "consistence/coding-standard": "^3.5", - "ergebnis/composer-normalize": "^2.0.2", - "jakub-onderka/php-parallel-lint": "^0.9.2", - "phing/phing": "^2.16.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.26", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^6.3", - "slevomat/coding-standard": "^4.7.2", - "symfony/process": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.4-dev" - } + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" }, + "default-branch": true, + "type": "library", "autoload": { "psr-4": { "PHPStan\\PhpDocParser\\": [ @@ -1437,41 +2401,41 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/master" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.x" }, - "time": "2020-08-03T20:32:43+00:00" + "time": "2026-02-26T12:23:26+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.x-dev", + "version": "10.1.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" + "reference": "11775ba4125a1e8ab6ab9c21e0607d9a484744dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", - "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/11775ba4125a1e8ab6ab9c21e0607d9a484744dd", + "reference": "11775ba4125a1e8ab6ab9c21e0607d9a484744dd", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-text-template": "^2.0.4", - "sebastian/code-unit-reverse-lookup": "^2.0.3", - "sebastian/complexity": "^2.0.3", - "sebastian/environment": "^5.1.5", - "sebastian/lines-of-code": "^1.0.4", - "sebastian/version": "^3.0.2", + "nikic/php-parser": "^4.19.1 || ^5.4.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.6" + "phpunit/phpunit": "^10.5.40" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -1480,7 +2444,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "9.2.x-dev" + "dev-main": "10.1.x-dev" } }, "autoload": { @@ -1509,40 +2473,52 @@ "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.32" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" } ], - "time": "2024-08-22T04:23:01+00:00" + "time": "2025-12-19T18:25:59+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.x-dev", + "version": "4.1.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "38b24367e1b340aa78b96d7cab042942d917bb84" + "reference": "97ecb4b0a29cf3befdf5bef6d7c5872a5f7129b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/38b24367e1b340aa78b96d7cab042942d917bb84", - "reference": "38b24367e1b340aa78b96d7cab042942d917bb84", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/97ecb4b0a29cf3befdf5bef6d7c5872a5f7129b4", + "reference": "97ecb4b0a29cf3befdf5bef6d7c5872a5f7129b4", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.1-dev" } }, "autoload": { @@ -1569,36 +2545,49 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" } ], - "time": "2022-02-11T16:23:04+00:00" + "time": "2025-09-26T11:51:04+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "4.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "d1ddfa07b25ece41c8e5ee3f3bdd4fd969b0b395" }, "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/d1ddfa07b25ece41c8e5ee3f3bdd4fd969b0b395", + "reference": "d1ddfa07b25ece41c8e5ee3f3bdd4fd969b0b395", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "suggest": { "ext-pcntl": "*" @@ -1606,7 +2595,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -1632,40 +2621,53 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-invoker", + "type": "tidelift" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2025-09-26T11:55:50+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "3.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "33ec41b1b3bc7b06f3e5443183d5be875a6a613c" }, "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/33ec41b1b3bc7b06f3e5443183d5be875a6a613c", + "reference": "33ec41b1b3bc7b06f3e5443183d5be875a6a613c", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -1691,40 +2693,53 @@ ], "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" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-text-template", + "type": "tidelift" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2025-09-26T12:00:11+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "6.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "fb4639c8b216b81813c588d0adf1fe88ec66239e" }, "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/fb4639c8b216b81813c588d0adf1fe88ec66239e", + "reference": "fb4639c8b216b81813c588d0adf1fe88ec66239e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -1750,62 +2765,73 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-timer", + "type": "tidelift" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2025-09-26T12:05:28+00:00" }, { "name": "phpunit/phpunit", - "version": "9.6.x-dev", + "version": "10.5.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa" + "reference": "51b1715e0d2781a6c7be69b011e4f1b42112ffc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", - "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/51b1715e0d2781a6c7be69b011e4f1b42112ffc8", + "reference": "51b1715e0d2781a6c7be69b011e4f1b42112ffc8", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.5.0 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", + "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.32", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.4", - "phpunit/php-timer": "^5.0.3", - "sebastian/cli-parser": "^1.0.2", - "sebastian/code-unit": "^1.0.8", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.6", - "sebastian/environment": "^5.1.5", - "sebastian/exporter": "^4.0.6", - "sebastian/global-state": "^5.0.7", - "sebastian/object-enumerator": "^4.0.4", - "sebastian/resource-operations": "^3.0.4", - "sebastian/type": "^3.2.1", - "sebastian/version": "^3.0.2" + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.5", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.4", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.1", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" }, "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" @@ -1813,7 +2839,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.6-dev" + "dev-main": "10.5-dev" } }, "autoload": { @@ -1845,23 +2871,15 @@ "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" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5" }, "funding": [ { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" + "url": "https://phpunit.de/sponsoring.html", + "type": "other" } ], - "time": "2024-09-19T10:50:18+00:00" + "time": "2026-03-07T17:10:43+00:00" }, { "name": "psr/cache", @@ -1912,32 +2930,142 @@ }, "time": "2016-08-06T20:24:11+00:00" }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, { "name": "psr/log", - "version": "1.1.4", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1958,9 +3086,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { "name": "psr/simple-cache", @@ -2013,30 +3141,103 @@ }, "time": "2017-10-23T01:57:42+00:00" }, + { + "name": "revolt/event-loop", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/revoltphp/event-loop.git", + "reference": "41f9c458c096aaf0ccc2cdc8e8f6f42dee3c8322" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/41f9c458c096aaf0ccc2cdc8e8f6f42dee3c8322", + "reference": "41f9c458c096aaf0ccc2cdc8e8f6f42dee3c8322", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-json": "*", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.15" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Revolt\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "ceesjank@gmail.com" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Rock-solid event loop for concurrent PHP applications.", + "keywords": [ + "async", + "asynchronous", + "concurrency", + "event", + "event-loop", + "non-blocking", + "scheduler" + ], + "support": { + "issues": "https://github.com/revoltphp/event-loop/issues", + "source": "https://github.com/revoltphp/event-loop/tree/main" + }, + "time": "2025-11-27T07:04:11+00:00" + }, { "name": "sebastian/cli-parser", - "version": "1.0.x-dev", + "version": "2.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + "reference": "079406160fa9290d5a7f585602e0fe5b5f003756" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/079406160fa9290d5a7f585602e0fe5b5f003756", + "reference": "079406160fa9290d5a7f585602e0fe5b5f003756", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -2059,40 +3260,53 @@ "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.2" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser", + "type": "tidelift" } ], - "time": "2024-03-02T06:27:43+00:00" + "time": "2025-12-20T08:57:34+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "2.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "807b5e65ab7b7b16e1928d924c7973aa451fa295" }, "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/807b5e65ab7b7b16e1928d924c7973aa451fa295", + "reference": "807b5e65ab7b7b16e1928d924c7973aa451fa295", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -2115,7 +3329,8 @@ "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" + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0" }, "funding": [ { @@ -2123,32 +3338,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2025-01-01T09:30:48+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "3.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "9f7c12369107fdb7a91016bf88f27d39872a88ea" }, "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/9f7c12369107fdb7a91016bf88f27d39872a88ea", + "reference": "9f7c12369107fdb7a91016bf88f27d39872a88ea", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2170,7 +3385,8 @@ "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" + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0" }, "funding": [ { @@ -2178,34 +3394,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2025-01-01T09:31:34+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.x-dev", + "version": "5.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "b247957a1c8dc81a671770f74b479c0a78a818f1" + "reference": "8d8209833d5f3f3eb8da4401a975302c58da4e64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b247957a1c8dc81a671770f74b479c0a78a818f1", - "reference": "b247957a1c8dc81a671770f74b479c0a78a818f1", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/8d8209833d5f3f3eb8da4401a975302c58da4e64", + "reference": "8d8209833d5f3f3eb8da4401a975302c58da4e64", "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.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -2244,41 +3462,54 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2022-09-14T12:46:14+00:00" + "time": "2026-01-24T09:31:40+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.x-dev", + "version": "3.2.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + "reference": "72cbad467aed5fc740e4e4c00218f4f4a6ad4297" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/72cbad467aed5fc740e4e4c00218f4f4a6ad4297", + "reference": "72cbad467aed5fc740e4e4c00218f4f4a6ad4297", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.2-dev" } }, "autoload": { @@ -2301,41 +3532,54 @@ "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" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/complexity", + "type": "tidelift" } ], - "time": "2023-12-22T06:19:30+00:00" + "time": "2025-09-26T09:25:14+00:00" }, { "name": "sebastian/diff", - "version": "4.0.x-dev", + "version": "5.1.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + "reference": "74776e712e4b0c27d7e421b88af13875adb5999b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74776e712e4b0c27d7e421b88af13875adb5999b", + "reference": "74776e712e4b0c27d7e421b88af13875adb5999b", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^10.5", + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -2367,35 +3611,48 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/diff", + "type": "tidelift" } ], - "time": "2024-03-02T06:30:58+00:00" + "time": "2025-09-26T09:34:04+00:00" }, { "name": "sebastian/environment", - "version": "5.1.x-dev", + "version": "6.1.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + "reference": "dd79e32fa7fb850456bbea2e8b984b0768dbce7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/dd79e32fa7fb850456bbea2e8b984b0768dbce7a", + "reference": "dd79e32fa7fb850456bbea2e8b984b0768dbce7a", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "suggest": { "ext-posix": "*" @@ -2403,7 +3660,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -2422,7 +3679,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", @@ -2430,42 +3687,55 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" } ], - "time": "2023-02-03T06:03:51+00:00" + "time": "2025-09-26T09:48:52+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.x-dev", + "version": "5.1.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + "reference": "674f8e4778fa027ec7b098e09ec6637b723bfbc2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/674f8e4778fa027ec7b098e09ec6637b723bfbc2", + "reference": "674f8e4778fa027ec7b098e09ec6637b723bfbc2", "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.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -2507,46 +3777,56 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-03-02T06:33:00+00:00" + "time": "2025-09-26T11:20:41+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.x-dev", + "version": "6.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + "reference": "71ab95cd8df46b8413ae5a6d82ccfde4b607c743" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/71ab95cd8df46b8413ae5a6d82ccfde4b607c743", + "reference": "71ab95cd8df46b8413ae5a6d82ccfde4b607c743", "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.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -2565,47 +3845,60 @@ } ], "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.7" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state", + "type": "tidelift" } ], - "time": "2024-03-02T06:35:11+00:00" + "time": "2025-09-26T11:27:56+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.x-dev", + "version": "2.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + "reference": "f3a9f1083457e342c2f9a0b577c511d9c20be488" }, "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/f3a9f1083457e342c2f9a0b577c511d9c20be488", + "reference": "f3a9f1083457e342c2f9a0b577c511d9c20be488", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -2628,42 +3921,55 @@ "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" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/lines-of-code", + "type": "tidelift" } ], - "time": "2023-12-22T06:20:34+00:00" + "time": "2025-09-26T11:34:22+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "5.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "ded04261fddbfb6755b7176685fd7975b874a128" }, "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/ded04261fddbfb6755b7176685fd7975b874a128", + "reference": "ded04261fddbfb6755b7176685fd7975b874a128", "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.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -2685,40 +3991,53 @@ "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" + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/object-enumerator", + "type": "tidelift" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2025-09-26T11:40:22+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "3.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "e16b906e486daae949005a62576318be23e31670" }, "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/e16b906e486daae949005a62576318be23e31670", + "reference": "e16b906e486daae949005a62576318be23e31670", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2740,40 +4059,53 @@ "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" + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/object-reflector", + "type": "tidelift" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2025-09-26T11:45:14+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.x-dev", + "version": "5.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + "reference": "2b64fcfd962e68d303f86608aca2cf882adbca74" }, "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/2b64fcfd962e68d303f86608aca2cf882adbca74", + "reference": "2b64fcfd962e68d303f86608aca2cf882adbca74", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -2803,95 +4135,53 @@ "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" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - } - ], - "time": "2023-02-03T06:07:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25", - "reference": "ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "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": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/main" - }, - "funding": [ + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" } ], - "time": "2024-03-14T18:47:08+00:00" + "time": "2025-09-26T12:13:15+00:00" }, { "name": "sebastian/type", - "version": "3.2.x-dev", + "version": "4.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + "reference": "68153740a6f11fc82a96e260ef47041967ee1c58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/68153740a6f11fc82a96e260ef47041967ee1c58", + "reference": "68153740a6f11fc82a96e260ef47041967ee1c58", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -2914,37 +4204,50 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2" + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/4.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" } ], - "time": "2023-02-03T06:13:03+00:00" + "time": "2025-09-26T12:18:14+00:00" }, { "name": "sebastian/version", - "version": "3.0.x-dev", + "version": "4.0.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "reference": "c8104a729707d949f2132fad0a41c42b7cac080f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c8104a729707d949f2132fad0a41c42b7cac080f", + "reference": "c8104a729707d949f2132fad0a41c42b7cac080f", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -2967,54 +4270,68 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/4.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/version", + "type": "tidelift" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2025-09-26T12:27:17+00:00" }, { "name": "slevomat/coding-standard", - "version": "6.4.1", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "696dcca217d0c9da2c40d02731526c1e25b65346" + "reference": "8426a689f225da6852db17c0d805b7791db9df6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/696dcca217d0c9da2c40d02731526c1e25b65346", - "reference": "696dcca217d0c9da2c40d02731526c1e25b65346", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/8426a689f225da6852db17c0d805b7791db9df6b", + "reference": "8426a689f225da6852db17c0d805b7791db9df6b", "shasum": "" }, "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", - "php": "^7.1 || ^8.0", - "phpstan/phpdoc-parser": "0.4.5 - 0.4.9", - "squizlabs/php_codesniffer": "^3.5.6" + "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.2.0", + "php": "^7.4 || ^8.0", + "phpstan/phpdoc-parser": "^2.3.2", + "squizlabs/php_codesniffer": "^4.0.1" }, "require-dev": { - "phing/phing": "2.16.3", - "php-parallel-lint/php-parallel-lint": "1.2.0", - "phpstan/phpstan": "0.12.48", - "phpstan/phpstan-deprecation-rules": "0.12.5", - "phpstan/phpstan-phpunit": "0.12.16", - "phpstan/phpstan-strict-rules": "0.12.5", - "phpunit/phpunit": "7.5.20|8.5.5|9.4.0" + "phing/phing": "3.0.1|3.1.2", + "php-parallel-lint/php-parallel-lint": "1.4.0", + "phpstan/phpstan": "2.1.40", + "phpstan/phpstan-deprecation-rules": "2.0.4", + "phpstan/phpstan-phpunit": "2.0.16", + "phpstan/phpstan-strict-rules": "2.0.10", + "phpunit/phpunit": "9.6.34|10.5.63|11.4.4|11.5.50|12.5.14" }, + "default-branch": true, "type": "phpcodesniffer-standard", "extra": { "branch-alias": { - "dev-master": "6.x-dev" + "dev-master": "8.x-dev" } }, "autoload": { "psr-4": { - "SlevomatCodingStandard\\": "SlevomatCodingStandard" + "SlevomatCodingStandard\\": "SlevomatCodingStandard/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3022,9 +4339,13 @@ "MIT" ], "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", + "keywords": [ + "dev", + "phpcs" + ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/6.4.1" + "source": "https://github.com/slevomat/coding-standard/tree/master" }, "funding": [ { @@ -3036,33 +4357,38 @@ "type": "tidelift" } ], - "time": "2020-10-05T12:39:37+00:00" + "time": "2026-03-15T10:50:11+00:00" }, { "name": "spatie/array-to-xml", - "version": "v2.x-dev", + "version": "dev-main", "source": { "type": "git", "url": "https://github.com/spatie/array-to-xml.git", - "reference": "ea4881f7b6f33fe1d685efad3d419a519dca9d95" + "reference": "47e78cfb1986ad4a7e118f6f930dbc3748d6e36e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/ea4881f7b6f33fe1d685efad3d419a519dca9d95", - "reference": "ea4881f7b6f33fe1d685efad3d419a519dca9d95", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/47e78cfb1986ad4a7e118f6f930dbc3748d6e36e", + "reference": "47e78cfb1986ad4a7e118f6f930dbc3748d6e36e", "shasum": "" }, "require": { "ext-dom": "*", - "php": "^7.4|^8.0" + "php": "^8.0" }, "require-dev": { - "mockery/mockery": "^1.2", - "pestphp/pest": "^1.21", - "phpunit/phpunit": "^9.0", - "spatie/pest-plugin-snapshots": "^1.1" + "mockery/mockery": "^1.6", + "pestphp/pest": "^1.23 || ^2.0 || ^3.0 || ^4.0", + "spatie/pest-plugin-snapshots": "^1.1 || ^2.0" }, + "default-branch": true, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, "autoload": { "psr-4": { "Spatie\\ArrayToXml\\": "src" @@ -3088,7 +4414,7 @@ "xml" ], "support": { - "source": "https://github.com/spatie/array-to-xml/tree/v2" + "source": "https://github.com/spatie/array-to-xml/tree/main" }, "funding": [ { @@ -3100,30 +4426,34 @@ "type": "github" } ], - "time": "2023-04-25T11:18:36+00:00" + "time": "2026-01-12T19:48:06+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "dev-master", + "version": "4.x-dev", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "92c8ef54357ea09d93f8efa043d7c9c0a71ae094" + "reference": "9dfea15a05f25a3e64e21f61ab6bf4b88209a05e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/92c8ef54357ea09d93f8efa043d7c9c0a71ae094", - "reference": "92c8ef54357ea09d93f8efa043d7c9c0a71ae094", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/9dfea15a05f25a3e64e21f61ab6bf4b88209a05e", + "reference": "9dfea15a05f25a3e64e21f61ab6bf4b88209a05e", "shasum": "" }, "require": { "ext-simplexml": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": ">=5.4.0" + "php": ">=7.2.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" + "phpunit/phpunit": "^8.4.0 || ^9.3.4 || ^10.5.32 || 11.3.3 - 11.5.28 || ^11.5.31" + }, + "suggest": { + "ext-iconv": "For accurate character length calculation when the checked files contain multi-byte characters.", + "ext-pcntl": "For parallel processing support via the --parallel CLI option." }, "default-branch": true, "bin": [ @@ -3131,11 +4461,6 @@ "bin/phpcs" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" @@ -3154,7 +4479,7 @@ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "description": "PHP_CodeSniffer tokenizes PHP files and detects violations of a defined set of coding standards.", "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", @@ -3179,58 +4504,57 @@ { "url": "https://opencollective.com/php_codesniffer", "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" } ], - "time": "2024-09-18T16:46:38+00:00" + "time": "2026-03-21T01:27:33+00:00" }, { "name": "symfony/console", - "version": "5.4.x-dev", + "version": "6.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "5b5a0aa66e3296e303e22490f90f521551835a83" + "reference": "49257c96304c508223815ee965c251e7c79e614e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5b5a0aa66e3296e303e22490f90f521551835a83", - "reference": "5b5a0aa66e3296e303e22490f90f521551835a83", + "url": "https://api.github.com/repos/symfony/console/zipball/49257c96304c508223815ee965c251e7c79e614e", + "reference": "49257c96304c508223815ee965c251e7c79e614e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -3264,7 +4588,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/5.4" + "source": "https://github.com/symfony/console/tree/6.4" }, "funding": [ { @@ -3275,38 +4599,43 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-20T07:56:40+00:00" + "time": "2026-03-06T13:31:08+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "2.5.x-dev", + "version": "dev-main", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "d36279a5a4bc7f3ca2c412839f10d7c0aa2c1a02" + "reference": "bbd66f9d55454b9b7a66a9cebe77523806a3288a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/d36279a5a4bc7f3ca2c412839f10d7c0aa2c1a02", - "reference": "d36279a5a4bc7f3ca2c412839f10d7c0aa2c1a02", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/bbd66f9d55454b9b7a66a9cebe77523806a3288a", + "reference": "bbd66f9d55454b9b7a66a9cebe77523806a3288a", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, + "default-branch": true, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" } }, "autoload": { @@ -3331,7 +4660,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/2.5" + "source": "https://github.com/symfony/deprecation-contracts/tree/main" }, "funding": [ { @@ -3342,35 +4671,38 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-04-18T08:26:06+00:00" + "time": "2026-01-05T13:30:16+00:00" }, { "name": "symfony/filesystem", - "version": "5.4.x-dev", + "version": "6.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "76c3818964e9d32be3862c9318ae3ba9aa280ddc" + "reference": "01ffe0411b842f93c571e5c391f289c3fdd498c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/76c3818964e9d32be3862c9318ae3ba9aa280ddc", - "reference": "76c3818964e9d32be3862c9318ae3ba9aa280ddc", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/01ffe0411b842f93c571e5c391f289c3fdd498c3", + "reference": "01ffe0411b842f93c571e5c391f289c3fdd498c3", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^5.4|^6.4" + "symfony/process": "^5.4|^6.4|^7.0" }, "type": "library", "autoload": { @@ -3398,7 +4730,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/5.4" + "source": "https://github.com/symfony/filesystem/tree/6.4" }, "funding": [ { @@ -3409,12 +4741,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-16T14:52:48+00:00" + "time": "2026-02-24T17:51:06+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3443,8 +4779,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3478,7 +4814,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -3489,6 +4825,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -3502,12 +4842,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { @@ -3520,8 +4860,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3557,7 +4897,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -3568,12 +4908,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-normalizer", @@ -3599,8 +4943,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3639,7 +4983,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -3650,6 +4994,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -3663,15 +5011,16 @@ "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2369cb908b33d7b7518cce042615de430142497f" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2369cb908b33d7b7518cce042615de430142497f", - "reference": "2369cb908b33d7b7518cce042615de430142497f", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { + "ext-iconv": "*", "php": ">=7.2" }, "provide": { @@ -3684,8 +5033,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3720,7 +5069,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/1.x" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -3731,25 +5080,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-10T14:38:51+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { - "name": "symfony/polyfill-php73", + "name": "symfony/polyfill-php84", "version": "1.x-dev", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "4acd8b3205f17b5811d5e036e89690fe8baad365" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", - "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/4acd8b3205f17b5811d5e036e89690fe8baad365", + "reference": "4acd8b3205f17b5811d5e036e89690fe8baad365", "shasum": "" }, "require": { @@ -3759,8 +5112,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3768,7 +5121,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Polyfill\\Php84\\": "" }, "classmap": [ "Resources/stubs" @@ -3788,7 +5141,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3797,7 +5150,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php84/tree/1.x" }, "funding": [ { @@ -3808,47 +5161,56 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-08-20T10:44:59+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "1.x-dev", + "name": "symfony/service-contracts", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "d714f7788dd07a4a93cd0d6cc63fbf487ba67014" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d714f7788dd07a4a93cd0d6cc63fbf487ba67014", + "reference": "d714f7788dd07a4a93cd0d6cc63fbf487ba67014", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "default-branch": true, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Contracts\\Service\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Test/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3856,10 +5218,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3869,16 +5227,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + "source": "https://github.com/symfony/service-contracts/tree/main" }, "funding": [ { @@ -3890,103 +5250,45 @@ "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v1.1.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/191afdcb5804db960d26d8566b7e9a2843cab3a0", - "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "suggest": { - "psr/container": "", - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "url": "https://github.com/nicolas-grekas", + "type": "github" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v1.1.2" - }, - "time": "2019-05-28T07:50:59+00:00" + "time": "2026-03-15T18:28:19+00:00" }, { "name": "symfony/string", - "version": "5.4.x-dev", + "version": "6.4.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "832caa16b6d9aac6bf11747315225f5aba384c24" + "reference": "2adaf4106f2ef4c67271971bde6d3fe0a6936432" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/832caa16b6d9aac6bf11747315225f5aba384c24", - "reference": "832caa16b6d9aac6bf11747315225f5aba384c24", + "url": "https://api.github.com/repos/symfony/string/zipball/2adaf4106f2ef4c67271971bde6d3fe0a6936432", + "reference": "2adaf4106f2ef4c67271971bde6d3fe0a6936432", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -4025,7 +5327,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/5.4" + "source": "https://github.com/symfony/string/tree/6.4" }, "funding": [ { @@ -4036,25 +5338,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-20T07:56:40+00:00" + "time": "2026-02-08T20:44:54+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -4083,7 +5389,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.3" + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { @@ -4091,28 +5397,30 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-11-17T20:03:58+00:00" }, { "name": "vimeo/psalm", - "version": "5.x-dev", + "version": "6.x-dev", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0" + "reference": "f1f5de594dc76faf8784e02d3dc4716c91c6f6ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/d747f6500b38ac4f7dfc5edbcae6e4b637d7add0", - "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/f1f5de594dc76faf8784e02d3dc4716c91c6f6ac", + "reference": "f1f5de594dc76faf8784e02d3dc4716c91c6f6ac", "shasum": "" }, "require": { - "amphp/amp": "^2.4.2", - "amphp/byte-stream": "^1.5", + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/parallel": "^2.3", "composer-runtime-api": "^2", "composer/semver": "^1.4 || ^2.0 || ^3.0", "composer/xdebug-handler": "^2.0 || ^3.0", + "danog/advanced-json-rpc": "^3.1", "dnoegel/php-xdg-base-dir": "^0.1.1", "ext-ctype": "*", "ext-dom": "*", @@ -4121,27 +5429,26 @@ "ext-mbstring": "*", "ext-simplexml": "*", "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.1", - "felixfbecker/language-server-protocol": "^1.5.2", + "felixfbecker/language-server-protocol": "^1.5.3", "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.17", - "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", - "sebastian/diff": "^4.0 || ^5.0 || ^6.0", + "netresearch/jsonmapper": "^5.0", + "nikic/php-parser": "^5.0.0", + "php": "~8.1.31 || ~8.2.27 || ~8.3.16 || ~8.4.3 || ~8.5.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.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" - }, - "conflict": { - "nikic/php-parser": "4.17.0" + "symfony/console": "^6.0 || ^7.0 || ^8.0", + "symfony/filesystem": "~6.3.12 || ~6.4.3 || ^7.0.3 || ^8.0", + "symfony/polyfill-php84": "^1.31.0" }, "provide": { "psalm/psalm": "self.version" }, "require-dev": { - "amphp/phpunit-util": "^2.0", + "amphp/phpunit-util": "^3", "bamarni/composer-bin-plugin": "^1.4", "brianium/paratest": "^6.9", + "danog/class-finder": "^0.4.8", + "dg/bypass-finals": "^1.5", "ext-curl": "*", "mockery/mockery": "^1.5", "nunomaduro/mock-final-classes": "^1.1", @@ -4149,10 +5456,10 @@ "phpstan/phpdoc-parser": "^1.6", "phpunit/phpunit": "^9.6", "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18", + "psalm/plugin-phpunit": "^0.19", "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.6", - "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0" + "symfony/process": "^6.0 || ^7.0 || ^8.0" }, "suggest": { "ext-curl": "In order to send data to shepherd", @@ -4164,16 +5471,19 @@ "psalm-language-server", "psalm-plugin", "psalm-refactor", + "psalm-review", "psalter" ], "type": "project", "extra": { "branch-alias": { - "dev-master": "5.x-dev", - "dev-4.x": "4.x-dev", - "dev-3.x": "3.x-dev", + "dev-1.x": "1.x-dev", "dev-2.x": "2.x-dev", - "dev-1.x": "1.x-dev" + "dev-3.x": "3.x-dev", + "dev-4.x": "4.x-dev", + "dev-5.x": "5.x-dev", + "dev-6.x": "6.x-dev", + "dev-master": "7.x-dev" } }, "autoload": { @@ -4188,6 +5498,10 @@ "authors": [ { "name": "Matthew Brown" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" } ], "description": "A static analysis tool for finding errors in PHP applications", @@ -4202,32 +5516,32 @@ "issues": "https://github.com/vimeo/psalm/issues", "source": "https://github.com/vimeo/psalm" }, - "time": "2024-09-08T18:53:08+00:00" + "time": "2026-03-19T10:56:09+00:00" }, { "name": "webmozart/assert", - "version": "1.11.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/9be6926d8b485f55b9229203f962b51ed377ba68", + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68", "shasum": "" }, "require": { "ext-ctype": "*", + "ext-date": "*", + "ext-filter": "*", "php": "^7.2 || ^8.0" }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" }, "type": "library", "extra": { @@ -4258,9 +5572,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "source": "https://github.com/webmozarts/assert/tree/1.12.1" }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2025-10-29T15:56:20+00:00" }, { "name": "wildwolf/psr-cache-common", @@ -4367,12 +5681,12 @@ ], "aliases": [], "minimum-stability": "dev", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.4 | ^8.0" + "php": "^8.1" }, - "platform-dev": [], - "plugin-api-version": "2.6.0" + "platform-dev": {}, + "plugin-api-version": "2.9.0" } diff --git a/docker/Dockerfile b/docker/Dockerfile index 3962986..86532d3 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -9,6 +9,7 @@ ARG BUILD_ROOT_PATH RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" RUN apt-get update RUN apt-get install -y zip unzip curl git +RUN git config --global --add safe.directory "${BUILD_ROOT_PATH}" RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" RUN php composer-setup.php --install-dir=/usr/bin --filename=composer RUN php -r "unlink('composer-setup.php');" diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 70cc8d1..0bf3008 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -7,7 +7,7 @@ - + @@ -17,8 +17,8 @@ - - + + @@ -30,6 +30,7 @@ + diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 78e56c6..0116e6a 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -3,13 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" colors="true" bootstrap="tests/bootstrap.php" - xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" + xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd" > - - - src - - @@ -25,4 +20,9 @@ tests/system + + + src + + diff --git a/psalm-baseline.xml b/psalm-baseline.xml deleted file mode 100644 index eeb1f9d..0000000 --- a/psalm-baseline.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - extensions]]> - factories]]> - - - - - - - - - - - - $c->get($serviceName)]]> - - - - - - - - - - diff --git a/psalm.xml.dist b/psalm.xml.dist index 898390b..bb595ca 100644 --- a/psalm.xml.dist +++ b/psalm.xml.dist @@ -19,7 +19,6 @@ throwExceptionOnError="false" hideExternalErrors="true" allowFileIncludes="true" - errorBaseline="psalm-baseline.xml" > @@ -136,7 +135,6 @@ - @@ -146,5 +144,11 @@ + + + + + + diff --git a/src/AliasingContainer.php b/src/AliasingContainer.php index eab1ce6..6f54ee4 100644 --- a/src/AliasingContainer.php +++ b/src/AliasingContainer.php @@ -22,16 +22,15 @@ class AliasingContainer implements ContainerInterface /** * @since [*next-version*] * - * @var PsrContainerInterface */ - protected $inner; + protected PsrContainerInterface $inner; /** * @since [*next-version*] * * @var array */ - protected $aliases; + protected array $aliases; /** * Constructor. @@ -50,7 +49,8 @@ public function __construct(PsrContainerInterface $inner, array $aliases) /** * @inheritdoc */ - public function get(string $key) + #[\Override] + public function get(string $key): mixed { return $this->inner->get($this->getInnerKey($key)); } @@ -58,6 +58,7 @@ public function get(string $key) /** * @inheritdoc */ + #[\Override] public function has(string $key): bool { return $this->inner->has($this->getInnerKey($key)); diff --git a/src/CachingContainer.php b/src/CachingContainer.php index c4a61ee..f72b5ef 100644 --- a/src/CachingContainer.php +++ b/src/CachingContainer.php @@ -22,10 +22,9 @@ class CachingContainer implements ContainerInterface use StringTranslatingTrait; /** @var array */ - protected $cache; + protected array $cache; - /** @var PsrContainerInterface */ - protected $container; + protected PsrContainerInterface $container; /** * @param PsrContainerInterface $container The container to cache entries from. @@ -39,7 +38,8 @@ public function __construct(PsrContainerInterface $container) /** * {@inheritDoc} */ - public function get(string $key) + #[\Override] + public function get(string $key): mixed { /** * @psalm-suppress InvalidCatch @@ -70,6 +70,7 @@ public function get(string $key) /** * {@inheritDoc} */ + #[\Override] public function has(string $key): bool { /** @@ -109,9 +110,8 @@ public function has(string $key): bool * @return mixed The cached value. * * @throws Exception If problem caching. - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint */ - protected function getCached(string $key, callable $generator) + protected function getCached(string $key, callable $generator): mixed { if (!array_key_exists($key, $this->cache)) { $value = $this->invokeGenerator($generator); @@ -143,9 +143,8 @@ protected function hasCached(string $key): bool * @return mixed The generated result. * * @throws Exception If problem generating. - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint */ - protected function invokeGenerator(callable $generator) + protected function invokeGenerator(callable $generator): mixed { $result = $generator(); return $result; diff --git a/src/CompositeCachingServiceProvider.php b/src/CompositeCachingServiceProvider.php index 14b6feb..a8aa319 100644 --- a/src/CompositeCachingServiceProvider.php +++ b/src/CompositeCachingServiceProvider.php @@ -15,17 +15,17 @@ class CompositeCachingServiceProvider implements ServiceProviderInterface /** * @var iterable */ - protected $providers; + protected iterable $providers; /** * @var ?iterable */ - protected $factories; + protected ?iterable $factories; /** * @var ?iterable */ - protected $extensions; + protected ?iterable $extensions; /** * @param iterable $providers @@ -43,7 +43,8 @@ public function __construct(iterable $providers) * @psalm-suppress InvalidNullableReturnType * It isn't actually going to return null ever, because $factories will be filled during indexing. */ - public function getFactories() + #[\Override] + public function getFactories(): array { if (!is_array($this->factories)) { $this->indexProviderDefinitions($this->providers); @@ -62,7 +63,8 @@ public function getFactories() * @psalm-suppress InvalidNullableReturnType * It isn't actually going to return null ever, because $factories will be filled during indexing. */ - public function getExtensions() + #[\Override] + public function getExtensions(): array { if (!is_array($this->extensions)) { $this->indexProviderDefinitions($this->providers); diff --git a/src/CompositeContainer.php b/src/CompositeContainer.php index 89a2aa5..ef8cfc1 100644 --- a/src/CompositeContainer.php +++ b/src/CompositeContainer.php @@ -19,7 +19,7 @@ class CompositeContainer implements ContainerInterface /** * @var iterable */ - protected $containers; + protected iterable $containers; /** * @param iterable $containers The list of containers. @@ -32,7 +32,8 @@ public function __construct(iterable $containers) /** * {@inheritDoc} */ - public function get(string $key) + #[\Override] + public function get(string $key): mixed { foreach ($this->containers as $index => $container) { /** @@ -69,6 +70,7 @@ public function get(string $key) /** * {@inheritDoc} */ + #[\Override] public function has(string $key): bool { foreach ($this->containers as $index => $container) { diff --git a/src/DataStructureBasedFactory.php b/src/DataStructureBasedFactory.php index d1b785f..f7e7796 100644 --- a/src/DataStructureBasedFactory.php +++ b/src/DataStructureBasedFactory.php @@ -12,10 +12,7 @@ */ class DataStructureBasedFactory implements DataStructureBasedFactoryInterface { - /** - * @var WritableMapFactoryInterface - */ - protected $containerFactory; + protected WritableMapFactoryInterface $containerFactory; public function __construct(WritableMapFactoryInterface $containerFactory) { $this->containerFactory = $containerFactory; @@ -24,6 +21,7 @@ public function __construct(WritableMapFactoryInterface $containerFactory) /** * @inheritDoc */ + #[\Override] public function createContainerFromArray(array $structure): WritableMapInterface { $map = []; diff --git a/src/DataStructureBasedFactoryInterface.php b/src/DataStructureBasedFactoryInterface.php index 05afa4b..da14249 100644 --- a/src/DataStructureBasedFactoryInterface.php +++ b/src/DataStructureBasedFactoryInterface.php @@ -22,5 +22,6 @@ interface DataStructureBasedFactoryInterface extends WritableMapFactoryInterface * * @throws Exception If problem creating. */ + #[\Override] public function createContainerFromArray(array $structure): WritableMapInterface; } diff --git a/src/DelegatingContainer.php b/src/DelegatingContainer.php index 0b36cd0..c7871b9 100644 --- a/src/DelegatingContainer.php +++ b/src/DelegatingContainer.php @@ -16,21 +16,15 @@ class DelegatingContainer implements ContainerInterface { use StringTranslatingTrait; - /** - * @var ServiceProviderInterface - */ - protected $provider; + protected ServiceProviderInterface $provider; - /** - * @var PsrContainerInterface|null - */ - protected $parent; + protected ?PsrContainerInterface $parent; /** * Keys represent the list of service names accessed recursively, in order of access * @var array */ - protected $stack = []; + protected array $stack = []; /** */ @@ -43,7 +37,8 @@ public function __construct(ServiceProviderInterface $provider, PsrContainerInte /** * {@inheritDoc} */ - public function get(string $id) + #[\Override] + public function get(string $id): mixed { if (array_key_exists($id, $this->stack)) { $trace = implode(' -> ', array_keys($this->stack)) . ' -> ' . $id; @@ -67,6 +62,7 @@ public function get(string $id) /** * {@inheritDoc} */ + #[\Override] public function has(string $id): bool { $services = $this->provider->getFactories(); @@ -86,7 +82,7 @@ public function has(string $id): bool * @throws NotFoundException If no factory corresponds to the given $key. * @throws ContainerException If an error occurred while creating the service. */ - protected function createService(string $key) + protected function createService(string $key): mixed { $provider = $this->provider; $services = $provider->getFactories(); @@ -140,9 +136,8 @@ protected function createService(string $key) * @return mixed The service created by the factory. * * @throws UnexpectedValueException If factory could not be invoked. - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint */ - protected function invokeFactory(callable $factory) + protected function invokeFactory(callable $factory): mixed { if (!is_callable($factory)) { throw new UnexpectedValueException( @@ -167,9 +162,8 @@ protected function invokeFactory(callable $factory) * @return mixed The extended service. * * @throws UnexpectedValueException If extension cannot be invoked. - * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint */ - protected function invokeExtension(callable $extension, $service) + protected function invokeExtension(callable $extension, mixed $service): mixed { if (!is_callable($extension)) { throw new UnexpectedValueException( diff --git a/src/DeprefixingContainer.php b/src/DeprefixingContainer.php index cd41b11..28ee631 100644 --- a/src/DeprefixingContainer.php +++ b/src/DeprefixingContainer.php @@ -19,23 +19,20 @@ class DeprefixingContainer implements ContainerInterface /** * @since [*next-version*] * - * @var PsrContainerInterface */ - protected $inner; + protected PsrContainerInterface $inner; /** * @since [*next-version*] * - * @var string */ - protected $prefix; + protected string $prefix; /** * @since [*next-version*] * - * @var bool */ - protected $strict; + protected bool $strict; /** * Constructor. @@ -57,7 +54,8 @@ public function __construct(PsrContainerInterface $container, string $prefix, bo /** * @inheritdoc */ - public function get(string $key) + #[\Override] + public function get(string $key): mixed { /** * @psalm-suppress InvalidCatch @@ -78,6 +76,7 @@ public function get(string $key) /** * @inheritdoc */ + #[\Override] public function has(string $key): bool { $realKey = $this->getInnerKey($key); diff --git a/src/Dictionary.php b/src/Dictionary.php index ad7525e..dba4611 100644 --- a/src/Dictionary.php +++ b/src/Dictionary.php @@ -23,7 +23,7 @@ class Dictionary implements use StringTranslatingTrait; /** @var array */ - protected $data; + protected array $data; /** * @param array $data The key-value map of data. @@ -36,7 +36,8 @@ public function __construct(array $data) /** * {@inheritDoc} */ - public function get(string $key) + #[\Override] + public function get(string $key): mixed { if (!array_key_exists($key, $this->data)) { throw new NotFoundException( @@ -52,6 +53,7 @@ public function get(string $key) /** * {@inheritDoc} */ + #[\Override] public function has(string $key): bool { $isHas = array_key_exists($key, $this->data); @@ -62,6 +64,7 @@ public function has(string $key): bool /** * {@inheritDoc} */ + #[\Override] public function getIterator(): Traversable { return new ArrayIterator($this->data); @@ -73,6 +76,7 @@ public function getIterator(): Traversable * Psalm complains that the declared return type is more specific than inferred. * This is not true, as it promises to return the interface. */ + #[\Override] public function withMappings(array $mappings): WritableContainerInterface { $dictionary = $this->cloneMe(); @@ -91,6 +95,7 @@ public function withMappings(array $mappings): WritableContainerInterface * Psalm complains that the declared return type is more specific than inferred. * This is not true, as it promises to return the interface. */ + #[\Override] public function withAddedMappings(array $mappings): WritableContainerInterface { $dictionary = $this->cloneMe(); @@ -109,6 +114,7 @@ public function withAddedMappings(array $mappings): WritableContainerInterface * Psalm complains that the declared return type is more specific than inferred. * This is not true, as it promises to return the interface. */ + #[\Override] public function withoutKeys(array $keys): WritableContainerInterface { $dictionary = $this->cloneMe(); diff --git a/src/DictionaryFactory.php b/src/DictionaryFactory.php index 211200e..7a4696a 100644 --- a/src/DictionaryFactory.php +++ b/src/DictionaryFactory.php @@ -15,6 +15,7 @@ class DictionaryFactory implements WritableMapFactoryInterface /** * @inheritDoc */ + #[\Override] public function createContainerFromArray(array $data): WritableMapInterface { return new Dictionary($data); diff --git a/src/Exception/ContainerException.php b/src/Exception/ContainerException.php index 0f5dc65..034c7bc 100644 --- a/src/Exception/ContainerException.php +++ b/src/Exception/ContainerException.php @@ -16,18 +16,21 @@ */ class ContainerException extends Exception implements ContainerExceptionInterface { - /** - * @var ContainerInterface|null - */ - protected $container; + protected ?ContainerInterface $container = null; /** * @param string $message The exception message. * @param int $code The exception code. * @param Throwable|null $previous The inner exception, if any. */ - public function __construct(string $message = "", int $code = 0, Throwable $previous = null) - { + public function __construct( + string $message = "", + int $code = 0, + Throwable $previous = null, + ?ContainerInterface $container = null + ) { parent::__construct($message, $code, $previous); + // TODO: Implement getter + $this->container = $container; } } diff --git a/src/FlashContainer.php b/src/FlashContainer.php index 6e7bf68..7b2e767 100644 --- a/src/FlashContainer.php +++ b/src/FlashContainer.php @@ -23,12 +23,10 @@ class FlashContainer implements MutableContainerInterface, ClearableContainerInterface { - /** @var MutableContainerInterface */ - protected $data; - /** @var string */ - protected $dataKey; + protected MutableContainerInterface $data; + protected string $dataKey; /** @var array */ - protected $flashData = []; + protected array $flashData = []; /** * @param MutableContainerInterface $data The storage. @@ -58,6 +56,7 @@ public function init(): void /** * @inheritDoc */ + #[\Override] public function has(string $key): bool { return array_key_exists($key, $this->flashData); @@ -68,7 +67,8 @@ public function has(string $key): bool * * Retrieves the value for the specified key from memory. */ - public function get(string $key) + #[\Override] + public function get(string $key): mixed { if (!array_key_exists($key, $this->flashData)) { throw new NotFoundException(sprintf('Flash data not found for key "%1$s"', $key)); @@ -82,6 +82,7 @@ public function get(string $key) * * Assigns the given value to the specified key in memory, and persists this change in storage. */ + #[\Override] public function set(string $key, $value): void { $this->flashData[$key] = $value; @@ -93,6 +94,7 @@ public function set(string $key, $value): void * * Removes the specified key from memory, and persists this change in storage. */ + #[\Override] public function unset(string $key): void { if (!array_key_exists($key, $this->flashData)) { @@ -108,6 +110,7 @@ public function unset(string $key): void * * Clears all of this instance's data from memory. */ + #[\Override] public function clear(): void { $this->flashData = []; diff --git a/src/HierarchyContainer.php b/src/HierarchyContainer.php index 8f59fb4..f16151a 100644 --- a/src/HierarchyContainer.php +++ b/src/HierarchyContainer.php @@ -43,7 +43,7 @@ class HierarchyContainer implements ContainerInterface * * @var mixed[] */ - protected $data; + protected array $data; /** * Constructor. @@ -60,7 +60,8 @@ public function __construct(array $data) /** * @inheritDoc */ - public function get(string $key) + #[\Override] + public function get(string $key): mixed { if (!array_key_exists($key, $this->data)) { throw new NotFoundException("Key '{$key}' does not exist", 0, null); @@ -82,6 +83,7 @@ public function get(string $key) /** * @inheritDoc */ + #[\Override] public function has(string $key): bool { return array_key_exists($key, $this->data); diff --git a/src/MappingContainer.php b/src/MappingContainer.php index 61ceada..51b4e12 100644 --- a/src/MappingContainer.php +++ b/src/MappingContainer.php @@ -39,8 +39,7 @@ class MappingContainer implements ContainerInterface /** @var callable */ protected $callback; - /** @var PsrContainerInterface */ - protected $inner; + protected PsrContainerInterface $inner; /** * @param PsrContainerInterface $inner The container instance to decorate. @@ -58,7 +57,8 @@ public function __construct(PsrContainerInterface $inner, callable $callback) /** * @inheritdoc */ - public function get($key) + #[\Override] + public function get(string $key): mixed { return ($this->callback)($this->inner->get($key), $key, $this); } @@ -66,6 +66,7 @@ public function get($key) /** * @inheritdoc */ + #[\Override] public function has(string $key): bool { return $this->inner->has($key); diff --git a/src/MaskingContainer.php b/src/MaskingContainer.php index 0995f91..2117d4c 100644 --- a/src/MaskingContainer.php +++ b/src/MaskingContainer.php @@ -18,20 +18,14 @@ class MaskingContainer implements ContainerInterface { use StringTranslatingTrait; - /** - * @var PsrContainerInterface - */ - protected $inner; + protected PsrContainerInterface $inner; /** * @var bool[] */ - protected $mask; + protected array $mask; - /** - * @var bool - */ - protected $defMask; + protected bool $defMask; /** * Constructor. @@ -53,7 +47,8 @@ public function __construct(PsrContainerInterface $inner, bool $defaultMask, arr /** * @inheritdoc */ - public function get(string $key) + #[\Override] + public function get(string $key): mixed { if (!$this->isExposed($key)) { throw new NotFoundException( @@ -69,6 +64,7 @@ public function get(string $key) /** * @inheritdoc */ + #[\Override] public function has(string $key): bool { return $this->isExposed($key) && $this->inner->has($key); diff --git a/src/NoOpContainer.php b/src/NoOpContainer.php index ad41c05..f061d70 100644 --- a/src/NoOpContainer.php +++ b/src/NoOpContainer.php @@ -29,7 +29,8 @@ class NoOpContainer implements /** * @inheritDoc */ - public function get(string $id) + #[\Override] + public function get(string $id): mixed { throw new NotFoundException('NoOp container cannot have values'); } @@ -37,6 +38,7 @@ public function get(string $id) /** * @inheritDoc */ + #[\Override] public function has(string $id): bool { return false; @@ -45,6 +47,7 @@ public function has(string $id): bool /** * @inheritDoc */ + #[\Override] public function set(string $key, $value): void { // Do nothing @@ -53,6 +56,7 @@ public function set(string $key, $value): void /** * @inheritDoc */ + #[\Override] public function unset(string $key): void { throw new ContainerException('NoOp container cannot have values'); @@ -61,6 +65,7 @@ public function unset(string $key): void /** * @inheritDoc */ + #[\Override] public function clear(): void { // Do nothing @@ -69,6 +74,7 @@ public function clear(): void /** * @inheritDoc */ + #[\Override] public function withMappings(array $mappings): WritableContainerInterface { return clone $this; @@ -77,6 +83,7 @@ public function withMappings(array $mappings): WritableContainerInterface /** * @inheritDoc */ + #[\Override] public function withAddedMappings(array $mappings): WritableContainerInterface { return clone $this; @@ -85,6 +92,7 @@ public function withAddedMappings(array $mappings): WritableContainerInterface /** * @inheritDoc */ + #[\Override] public function withoutKeys(array $keys): WritableContainerInterface { return clone $this; @@ -93,6 +101,7 @@ public function withoutKeys(array $keys): WritableContainerInterface /** * @inheritDoc */ + #[\Override] public function getIterator(): Traversable { return new ArrayIterator([]); diff --git a/src/PathContainer.php b/src/PathContainer.php index 94138d9..70efeb6 100644 --- a/src/PathContainer.php +++ b/src/PathContainer.php @@ -49,11 +49,10 @@ */ class PathContainer implements ContainerInterface { - /** @var PsrContainerInterface */ - protected $inner; + protected PsrContainerInterface $inner; /** @var non-empty-string */ - protected $delimiter; + protected string $delimiter; /** * @param PsrContainerInterface $inner The container instance to decorate. @@ -68,7 +67,8 @@ public function __construct(PsrContainerInterface $inner, string $delimiter = '/ /** * @inheritDoc */ - public function get(string $key) + #[\Override] + public function get(string $key): mixed { $tKey = (strpos($key, $this->delimiter) === 0) ? substr($key, strlen($this->delimiter)) @@ -108,6 +108,7 @@ public function get(string $key) /** * @inheritDoc */ + #[\Override] public function has(string $key): bool { /** diff --git a/src/PrefixingContainer.php b/src/PrefixingContainer.php index 1766ec7..1c1c423 100644 --- a/src/PrefixingContainer.php +++ b/src/PrefixingContainer.php @@ -18,14 +18,11 @@ */ class PrefixingContainer implements ContainerInterface { - /** @var PsrContainerInterface */ - protected $inner; + protected PsrContainerInterface $inner; - /** @var string */ - protected $prefix; + protected string $prefix; - /** @var bool */ - protected $strict; + protected bool $strict; /** * @param PsrContainerInterface $container The container whose keys to prefix. @@ -43,7 +40,8 @@ public function __construct(PsrContainerInterface $container, string $prefix, bo /** * @inheritdoc */ - public function get(string $key) + #[\Override] + public function get(string $key): mixed { if (!$this->isPrefixed($key) && $this->strict) { throw new NotFoundException(sprintf('Key "%s" does not exist', $key)); @@ -68,6 +66,7 @@ public function get(string $key) /** * @inheritdoc */ + #[\Override] public function has(string $key): bool { if (!$this->isPrefixed($key) && $this->strict) { diff --git a/src/ProxyContainer.php b/src/ProxyContainer.php index b65e5b7..dbf3483 100644 --- a/src/ProxyContainer.php +++ b/src/ProxyContainer.php @@ -18,10 +18,7 @@ class ProxyContainer implements BaseContainerInterface { use StringTranslatingTrait; - /** - * @var ?BaseContainerInterface - */ - protected $innerContainer; + protected ?BaseContainerInterface $innerContainer; /** * @param BaseContainerInterface|null $innerContainer The inner container, if any. @@ -35,7 +32,8 @@ public function __construct(BaseContainerInterface $innerContainer = null) /** * @inheritDoc */ - public function get(string $key) + #[\Override] + public function get(string $key): mixed { if (!($this->innerContainer instanceof BaseContainerInterface)) { throw new ContainerException($this->__('Inner container not set')); @@ -47,6 +45,7 @@ public function get(string $key) /** * @inheritDoc */ + #[\Override] public function has(string $key): bool { if (!($this->innerContainer instanceof BaseContainerInterface)) { diff --git a/src/SegmentingContainer.php b/src/SegmentingContainer.php index 15639e9..52c1b67 100644 --- a/src/SegmentingContainer.php +++ b/src/SegmentingContainer.php @@ -54,20 +54,11 @@ */ class SegmentingContainer implements ContainerInterface { - /** - * @var PsrContainerInterface - */ - protected $inner; + protected PsrContainerInterface $inner; - /** - * @var string - */ - protected $root; + protected string $root; - /** - * @var string - */ - protected $delimiter; + protected string $delimiter; /** * Constructor. @@ -87,7 +78,8 @@ public function __construct(PsrContainerInterface $inner, string $delimiter = '/ /** * @inheritdoc */ - public function get(string $key) + #[\Override] + public function get(string $key): mixed { $tKey = ltrim($key, $this->delimiter); $tRoot = rtrim($this->root, $this->delimiter); @@ -107,6 +99,7 @@ public function get(string $key) /** * @inheritdoc */ + #[\Override] public function has(string $key): bool { return $this->inner->has($key); diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index 4ef6ec7..2ee6011 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -35,7 +35,8 @@ public function __construct(array $factories, array $extensions) /** * {@inheritDoc} */ - public function getFactories() + #[\Override] + public function getFactories(): array { return $this->factories; } @@ -43,7 +44,8 @@ public function getFactories() /** * {@inheritDoc} */ - public function getExtensions() + #[\Override] + public function getExtensions(): array { return $this->extensions; } diff --git a/src/SimpleCacheContainer.php b/src/SimpleCacheContainer.php index 392ad51..c994758 100644 --- a/src/SimpleCacheContainer.php +++ b/src/SimpleCacheContainer.php @@ -15,14 +15,8 @@ class SimpleCacheContainer implements MutableContainerInterface, ClearableContainerInterface { - /** - * @var CacheInterface - */ - protected $storage; - /** - * @var int - */ - protected $ttl; + protected CacheInterface $storage; + protected int $ttl; public function __construct(CacheInterface $storage, int $ttl) { @@ -33,7 +27,8 @@ public function __construct(CacheInterface $storage, int $ttl) /** * @inheritDoc */ - public function get(string $id) + #[\Override] + public function get(string $id): mixed { $storage = $this->storage; @@ -53,6 +48,7 @@ public function get(string $id) /** * @inheritDoc */ + #[\Override] public function has(string $id): bool { $storage = $this->storage; @@ -69,6 +65,7 @@ public function has(string $id): bool /** * @inheritDoc */ + #[\Override] public function set(string $key, $value): void { $storage = $this->storage; @@ -88,6 +85,7 @@ public function set(string $key, $value): void /** * @inheritDoc */ + #[\Override] public function unset(string $key): void { $storage = $this->storage; @@ -102,6 +100,7 @@ public function unset(string $key): void /** * @inheritDoc */ + #[\Override] public function clear(): void { $storage = $this->storage; diff --git a/src/TaggingServiceProvider.php b/src/TaggingServiceProvider.php index f091162..89c0aa0 100644 --- a/src/TaggingServiceProvider.php +++ b/src/TaggingServiceProvider.php @@ -4,6 +4,7 @@ namespace Dhii\Container; +use Closure; use Interop\Container\ServiceProviderInterface; use Psr\Container\ContainerInterface; use ReflectionException; @@ -45,6 +46,7 @@ public function __construct(ServiceProviderInterface $inner) /** * @inheritDoc */ + #[\Override] public function getFactories() { return $this->factories; @@ -53,6 +55,7 @@ public function getFactories() /** * @inheritDoc */ + #[\Override] public function getExtensions() { return $this->extensions; @@ -68,11 +71,12 @@ protected function indexTags(): void $tags = []; foreach ($this->factories as $serviceName => $factory) { - if (is_string($factory)) { + // String and array callables may not have tags + if (is_string($factory) || is_array($factory)) { continue; } - $reflection = is_object($factory) && get_class($factory) === 'Closure' + $reflection = get_class($factory) === Closure::class ? new ReflectionFunction($factory) : new ReflectionObject($factory); $docBlock = $reflection->getDocComment(); @@ -84,7 +88,7 @@ protected function indexTags(): void $factoryTags = $this->getTagsFromDocBlock($docBlock); foreach ($factoryTags as $tag) { - if (!isset($tags[$tag]) || !is_array($tags[$tag])) { + if (!isset($tags[$tag])) { $tags[$tag] = []; } $tags[$tag][] = $serviceName; @@ -96,7 +100,7 @@ protected function indexTags(): void $this->extensions[$tag] = function (ContainerInterface $c, array $prev) use ($taggedServiceNames): array { return array_merge( $prev, - array_map(fn (string $serviceName) => $c->get($serviceName), $taggedServiceNames) + array_map(fn (string $serviceName): mixed => $c->get($serviceName), $taggedServiceNames) ); }; } diff --git a/src/Util/StringTranslatingTrait.php b/src/Util/StringTranslatingTrait.php index f2d2776..01a4c6e 100644 --- a/src/Util/StringTranslatingTrait.php +++ b/src/Util/StringTranslatingTrait.php @@ -41,10 +41,11 @@ protected function __(string $string, array $args = array(), $context = null): s * @since [*next-version*] * * @param string $string The string to translate. - * @param string $context The context to translate the string in. + * @param ?string $context The context to translate the string in. * * @return string The translated string. * phpcs:disable PSR2.Methods.MethodDeclaration.Underscore + * @psalm-suppress PossiblyUnusedParam This implementation doesn't use context, and that's OK. */ protected function _translate(string $string, string $context = null): string { diff --git a/tests/functional/CachingContainerTest.php b/tests/functional/CachingContainerTest.php index 1119299..cc3ac93 100644 --- a/tests/functional/CachingContainerTest.php +++ b/tests/functional/CachingContainerTest.php @@ -80,7 +80,10 @@ public function testHas() $container = $this->createContainer([ $key1 => uniqid('value'), ]); - $container->method('has')->withConsecutive([$key1], [$key2])->willReturnOnConsecutiveCalls(true, false); + $container->method('has')->with(...$this->consecutive([$key1], [$key2])) + ->willReturnCallback(function ($key) use ($key1) { + return $key === $key1; + }); $subject = $this->createSubject([$container]); } diff --git a/tests/functional/DataStructureBasedFactoryTest.php b/tests/functional/DataStructureBasedFactoryTest.php index 91545f1..ae52047 100644 --- a/tests/functional/DataStructureBasedFactoryTest.php +++ b/tests/functional/DataStructureBasedFactoryTest.php @@ -16,7 +16,7 @@ class DataStructureBasedFactoryTest extends TestCase public function createInstance(WritableMapFactoryInterface $mapFactory): TestSubject { $mock = $this->getMockBuilder(TestSubject::class) - ->setMethods(null) + ->onlyMethods([]) ->setConstructorArgs([$mapFactory]) ->getMock(); @@ -40,7 +40,7 @@ public function createConfiguredInstance(): TestSubject public function createWritableMapFactory(): DictionaryFactory { $mock = $this->getMockBuilder(DictionaryFactory::class) - ->setMethods(null) + ->onlyMethods([]) ->getMock(); return $mock; diff --git a/tests/functional/DeprefixingContainerTest.php b/tests/functional/DeprefixingContainerTest.php index cf8dcfb..cc26661 100644 --- a/tests/functional/DeprefixingContainerTest.php +++ b/tests/functional/DeprefixingContainerTest.php @@ -4,6 +4,7 @@ use Dhii\Container\DeprefixingContainer; use Dhii\Container\Exception\NotFoundException; +use Dhii\Container\TestHelpers\ComponentMockeryTrait; use Dhii\Container\TestHelpers\ContainerMock; use Exception; use PHPUnit\Framework\TestCase; @@ -11,6 +12,7 @@ class DeprefixingContainerTest extends TestCase { + use ComponentMockeryTrait; /** * Tests that the subject is able to delegate retrieval to the inner container with a prefixed key. * @@ -48,8 +50,8 @@ public function testGetNonStrict() $inner = ContainerMock::create($this); $inner->method('get') - ->withConsecutive([$prefix . $serviceKey], [$serviceKey]) - ->willReturnCallback(function () use ($serviceVal) { + ->with(...$this->consecutive([$prefix . $serviceKey], [$serviceKey])) + ->willReturnCallback(function ($key) use ($serviceKey, $prefix, $serviceVal) { static $count = 1; // Throw the first time @@ -128,7 +130,7 @@ public function testHasNonStrict() $inner = ContainerMock::create($this); $inner->method('has') - ->withConsecutive([$prefix . $serviceKey], [$serviceKey]) + ->with(...$this->consecutive([$prefix . $serviceKey], [$serviceKey])) ->willReturnCallback(function () { static $count = 1; diff --git a/tests/functional/FlashContainerTest.php b/tests/functional/FlashContainerTest.php index 6a9a277..d3fb0fc 100644 --- a/tests/functional/FlashContainerTest.php +++ b/tests/functional/FlashContainerTest.php @@ -34,8 +34,8 @@ protected function createSubject(MutableContainerInterface $storage, string $key protected function createStorage(array $data): MutableContainerInterface { $mock = $this->getMockBuilder(MutableContainerInterface::class) - ->setMethods(['has', 'get', 'set', 'unset']) - ->getMockForAbstractClass(); + ->onlyMethods(['has', 'get', 'set', 'unset']) + ->getMock(); $mock->method('has') ->with($this->isType('string')) diff --git a/tests/functional/SegmentingContainerTest.php b/tests/functional/SegmentingContainerTest.php index 0e21246..fcfb917 100644 --- a/tests/functional/SegmentingContainerTest.php +++ b/tests/functional/SegmentingContainerTest.php @@ -3,6 +3,7 @@ namespace Dhii\Container\FuncTest; use Dhii\Container\SegmentingContainer; +use Dhii\Container\TestHelpers\ComponentMockeryTrait; use Dhii\Container\TestHelpers\ContainerMock; use Exception; use PHPUnit\Framework\TestCase; @@ -11,6 +12,7 @@ class SegmentingContainerTest extends TestCase { + use ComponentMockeryTrait; /** * Tests that the subject correctly returns intermediate containers when fetching non-existent keys. * @@ -59,8 +61,10 @@ public function testGetDeep() $inner = ContainerMock::create($this); // Container only returns true for full path $inner->method('has') - ->withConsecutive([$key1], [$key2], [$key3]) - ->willReturnOnConsecutiveCalls(false, false, true); + ->with(...$this->consecutive([$key1], [$key2], [$key3])) + ->willReturnCallback(function ($key) use ($key1, $key2, $key3) { + return $key === $key3; + }); // Container returns value for full path $inner->method('get')->with($key3)->willReturn($value); } @@ -103,8 +107,10 @@ public function testGetPath() $inner = ContainerMock::create($this); // Container only returns true for full path $inner->method('has') - ->withConsecutive([$key1], [$key2]) - ->willReturnOnConsecutiveCalls(false, true); + ->with(...$this->consecutive([$key1], [$key2])) + ->willReturnCallback(function ($key) use ($key1, $key2) { + return $key === $key2; + }); // Container returns value for full path $inner->method('get')->with($key2)->willReturn($value); } diff --git a/tests/functional/TaggingServiceProviderTest.php b/tests/functional/TaggingServiceProviderTest.php index ea54013..e4ce024 100644 --- a/tests/functional/TaggingServiceProviderTest.php +++ b/tests/functional/TaggingServiceProviderTest.php @@ -6,6 +6,7 @@ use Dhii\Container\DelegatingContainer; use Dhii\Container\ServiceProvider; use Dhii\Container\TaggingServiceProvider; +use Dhii\Container\TestHelpers\MethodClass; use Exception; use PHPUnit\Framework\TestCase; @@ -60,4 +61,74 @@ public function __invoke(): string $result = $container->get('serviceD'); $this->assertEquals('ABCD', $result); } + + /** + * Tests that tag detection is silently skilled for array and string callables, which cannot have reflections. + * + * @throws Exception If problem testing. + */ + public function testArrayAndStringCallables() + { + $instance = new MethodClass(); + + $factories = [ + 'serviceW' => + /** + * This docblock isn't applied to anything + * + * @tag my_tag + */ + 'uniqid', + 'serviceX' => + /** + * This docblock isn't applied to anything + * + * @tag my_tag + */ + [$instance, 'instanceMethod'], + 'serviceY' => + /** + * This docblock isn't applied to anything + * + * @tag my_tag + */ + [MethodClass::class, 'staticMethod'], + 'serviceZ' => + /** + * This docblock isn't applied to anything + * + * @tag my_tag + */ + sprintf('%1$s::%2$s', MethodClass::class, 'staticMethod'), + 'serviceA' => + /** + * @tag my_tag + */ + fn (): string => 'A', + 'serviceB' => + /** @tag my_tag */ + function (): string { + return 'B'; + }, + 'serviceC' => + /** + * @tag my_tag + */ + new class () { + public function __invoke(): string + { + return 'C'; + } + }, + 'serviceD' => fn (ContainerInterface $c): string => + implode('', array_merge($c->get('my_tag'), ['D'])), + ]; + $extensions = []; + $inner = new ServiceProvider($factories, $extensions); + $subject = new TaggingServiceProvider($inner); + $container = new DelegatingContainer($subject, null); + + $result = $container->get('serviceD'); + $this->assertEquals('ABCD', $result); + } } diff --git a/tests/helpers/ContainerMock.php b/tests/helpers/ContainerMock.php index 20dfbca..72d9c47 100644 --- a/tests/helpers/ContainerMock.php +++ b/tests/helpers/ContainerMock.php @@ -14,6 +14,8 @@ */ class ContainerMock extends AbstractMockHelper implements ContainerInterface { + use ComponentMockeryTrait; + /** * Index of current expectation. * @@ -104,9 +106,10 @@ public function expectGet(array $expectations) $args = array_map(function ($key) { return [$key]; }, $keys); + $args = array_pad($args, 2, []); // Must be 2 or more for `consecutive()` $this->mock->method('get') - ->withConsecutive(...$args) + ->with(...$this->consecutive(...$args)) ->willReturnCallback(function ($arg) use ($keys, $values) { static $idx = -1; $idx++; @@ -132,7 +135,7 @@ public function expectGet(array $expectations) }); $this->mock->method('has') - ->withConsecutive(...$args) + ->with(...$this->consecutive(...$args)) ->willReturnCallback(function ($arg) use ($keys, $values) { static $idx = -1; $idx++; diff --git a/tests/helpers/MethodClass.php b/tests/helpers/MethodClass.php new file mode 100644 index 0000000..31bcedc --- /dev/null +++ b/tests/helpers/MethodClass.php @@ -0,0 +1,24 @@ +getMockBuilder(TestSubject::class) - ->setMethods(null) + ->onlyMethods([]) ->getMock(); return $mock;