diff --git a/.github/workflows/docs-build.yml b/.github/workflows/docs-build.yml index f47870d1..6f50aaa3 100644 --- a/.github/workflows/docs-build.yml +++ b/.github/workflows/docs-build.yml @@ -3,8 +3,10 @@ name: docs-build on: release: types: [published] - repository_dispatch: - types: docs-build + workflow_dispatch: + +permissions: + contents: write jobs: build-deploy: @@ -13,5 +15,5 @@ jobs: - name: Build Docs uses: laminas/documentation-theme/github-actions/docs@master env: - DOCS_DEPLOY_KEY: ${{ secrets.DOCS_DEPLOY_KEY }} - "GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }} + DEPLOY_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index f6f6e633..2aa275f5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,9 @@ /.phpcs-cache -/.phpunit.result.cache +/.phpunit.cache /clover.xml /coveralls-upload.json /docs/html/ /laminas-mkdoc-theme.tgz /laminas-mkdoc-theme/ /phpunit.xml -/vendor/ +/vendor/ \ No newline at end of file diff --git a/.laminas-ci.json b/.laminas-ci.json index 10c5335c..c89d5e43 100644 --- a/.laminas-ci.json +++ b/.laminas-ci.json @@ -3,8 +3,5 @@ { "name": "PHPUnit on PHP 8.1 with lowest dependencies" } - ], - "ignore_php_platform_requirements": { - "8.2": true - } -} \ No newline at end of file + ] +} diff --git a/composer.json b/composer.json index 83f07d91..3dfffb5c 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "config": { "sort-packages": true, "platform": { - "php": "8.0.99" + "php": "8.2.99" }, "allow-plugins": { "composer/package-versions-deprecated": true, @@ -28,16 +28,15 @@ "extra": { }, "require": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0", - "laminas/laminas-code": "^3.5.1 || ^4.0.0", - "laminas/laminas-stdlib": "^3.3.1", - "laminas/laminas-zendframework-bridge": "^1.2.0" + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", + "laminas/laminas-code": "^4.7.1", + "laminas/laminas-stdlib": "^3.3.1" }, "require-dev": { - "laminas/laminas-coding-standard": "~1.0.0", - "phpunit/phpunit": "^9.5.5", - "psalm/plugin-phpunit": "^0.15.1", - "vimeo/psalm": "^4.6.4" + "laminas/laminas-coding-standard": "~3.1.0", + "phpunit/phpunit": "^11.5.50 || ^12.5.8", + "psalm/plugin-phpunit": "^0.19.0", + "vimeo/psalm": "^6.14.3" }, "autoload": { "psr-4": { @@ -64,7 +63,7 @@ "test": "phpunit --colors=always", "test-coverage": "phpunit --colors=always --coverage-clover clover.xml" }, - "replace": { - "zendframework/zend-server": "^2.8.1" + "conflict": { + "zendframework/zend-server": "*" } } diff --git a/composer.lock b/composer.lock index a00798d3..41c93258 100644 --- a/composer.lock +++ b/composer.lock @@ -4,39 +4,33 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0dd3b282e82d622183eb03e20831fb4e", + "content-hash": "a436872a3f5eef91d4ca7ac390e24dee", "packages": [ { "name": "laminas/laminas-code", - "version": "3.5.1", + "version": "4.17.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "b549b70c0bb6e935d497f84f750c82653326ac77" + "reference": "40d61e2899ec17c5d08bbc0a2d586b3ca17ab9bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/b549b70c0bb6e935d497f84f750c82653326ac77", - "reference": "b549b70c0bb6e935d497f84f750c82653326ac77", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/40d61e2899ec17c5d08bbc0a2d586b3ca17ab9bd", + "reference": "40d61e2899ec17c5d08bbc0a2d586b3ca17ab9bd", "shasum": "" }, "require": { - "laminas/laminas-eventmanager": "^3.3", - "laminas/laminas-zendframework-bridge": "^1.1", - "php": "^7.3 || ~8.0.0" - }, - "conflict": { - "phpspec/prophecy": "<1.9.0" - }, - "replace": { - "zendframework/zend-code": "^3.4.1" + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { - "doctrine/annotations": "^1.10.4", + "doctrine/annotations": "^2.0.1", "ext-phar": "*", - "laminas/laminas-coding-standard": "^1.0.0", - "laminas/laminas-stdlib": "^3.3.0", - "phpunit/phpunit": "^9.4.2" + "laminas/laminas-coding-standard": "^3.0.0", + "laminas/laminas-stdlib": "^3.18.0", + "phpunit/phpunit": "^10.5.58", + "psalm/plugin-phpunit": "^0.19.0", + "vimeo/psalm": "^5.15.0" }, "suggest": { "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", @@ -56,7 +50,8 @@ "homepage": "https://laminas.dev", "keywords": [ "code", - "laminas" + "laminas", + "laminasframework" ], "support": { "chat": "https://laminas.dev/chat", @@ -72,100 +67,34 @@ "type": "community_bridge" } ], - "time": "2020-11-30T20:16:31+00:00" - }, - { - "name": "laminas/laminas-eventmanager", - "version": "3.4.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-eventmanager.git", - "reference": "a93fd278c97b2d41ebbce5ba048a24e3e6f580ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/a93fd278c97b2d41ebbce5ba048a24e3e6f580ba", - "reference": "a93fd278c97b2d41ebbce5ba048a24e3e6f580ba", - "shasum": "" - }, - "require": { - "php": "^7.3 || ~8.0.0 || ~8.1.0" - }, - "conflict": { - "zendframework/zend-eventmanager": "*" - }, - "require-dev": { - "container-interop/container-interop": "^1.1", - "laminas/laminas-coding-standard": "~2.2.1", - "laminas/laminas-stdlib": "^3.6", - "phpbench/phpbench": "^1.1", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5.5" - }, - "suggest": { - "container-interop/container-interop": "^1.1, to use the lazy listeners feature", - "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\EventManager\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Trigger and listen to events within a PHP application", - "homepage": "https://laminas.dev", - "keywords": [ - "event", - "eventmanager", - "events", - "laminas" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-eventmanager/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-eventmanager/issues", - "rss": "https://github.com/laminas/laminas-eventmanager/releases.atom", - "source": "https://github.com/laminas/laminas-eventmanager" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2021-09-07T22:35:32+00:00" + "time": "2025-11-01T09:38:14+00:00" }, { "name": "laminas/laminas-stdlib", - "version": "3.7.1", + "version": "3.21.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "bcd869e2fe88d567800057c1434f2380354fe325" + "reference": "b1c81514cfe158aadf724c42b34d3d0a8164c096" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/bcd869e2fe88d567800057c1434f2380354fe325", - "reference": "bcd869e2fe88d567800057c1434f2380354fe325", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/b1c81514cfe158aadf724c42b34d3d0a8164c096", + "reference": "b1c81514cfe158aadf724c42b34d3d0a8164c096", "shasum": "" }, "require": { - "php": "^7.3 || ~8.0.0 || ~8.1.0" + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "conflict": { "zendframework/zend-stdlib": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.3.0", - "phpbench/phpbench": "^1.0", - "phpunit/phpunit": "^9.3.7", - "psalm/plugin-phpunit": "^0.16.0", - "vimeo/psalm": "^4.7" + "laminas/laminas-coding-standard": "^3.1.0", + "phpbench/phpbench": "^1.4.1", + "phpunit/phpunit": "^11.5.42", + "psalm/plugin-phpunit": "^0.19.5", + "vimeo/psalm": "^6.13.1" }, "type": "library", "autoload": { @@ -197,111 +126,42 @@ "type": "community_bridge" } ], - "time": "2022-01-21T15:50:46+00:00" - }, - { - "name": "laminas/laminas-zendframework-bridge", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "88bf037259869891afce6504cacc4f8a07b24d0f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/88bf037259869891afce6504cacc4f8a07b24d0f", - "reference": "88bf037259869891afce6504cacc4f8a07b24d0f", - "shasum": "" - }, - "require": { - "php": "^7.3 || ~8.0.0 || ~8.1.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "psalm/plugin-phpunit": "^0.15.1", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.6" - }, - "type": "library", - "extra": { - "laminas": { - "module": "Laminas\\ZendFrameworkBridge" - } - }, - "autoload": { - "files": [ - "src/autoload.php" - ], - "psr-4": { - "Laminas\\ZendFrameworkBridge\\": "src//" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Alias legacy ZF class names to Laminas Project equivalents.", - "keywords": [ - "ZendFramework", - "autoloading", - "laminas", - "zf" - ], - "support": { - "forum": "https://discourse.laminas.dev/", - "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", - "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", - "source": "https://github.com/laminas/laminas-zendframework-bridge" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2021-12-21T14:34:37+00:00" + "time": "2025-10-11T18:13:12+00:00" } ], "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.2", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" + "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "url": "https://api.github.com/repos/amphp/amp/zipball/fa0ab33a6f47a82929c38d03ca47ebb71086a93f", + "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" }, "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", - "psalm/phar": "^3.11@dev", - "react/promise": "^2" + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "5.23.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, "autoload": { "files": [ - "lib/functions.php", - "lib/Internal/functions.php" + "src/functions.php", + "src/Future/functions.php", + "src/Internal/functions.php" ], "psr-4": { - "Amp\\": "lib" + "Amp\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -309,10 +169,6 @@ "MIT" ], "authors": [ - { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - }, { "name": "Aaron Piotrowski", "email": "aaron@trowski.com" @@ -324,6 +180,10 @@ { "name": "Niklas Keller", "email": "me@kelunik.com" + }, + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" } ], "description": "A non-blocking concurrency framework for PHP applications.", @@ -340,9 +200,8 @@ "promise" ], "support": { - "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.2" + "source": "https://github.com/amphp/amp/tree/v3.1.1" }, "funding": [ { @@ -350,46 +209,45 @@ "type": "github" } ], - "time": "2022-02-20T17:52:18+00:00" + "time": "2025-08-27T21:42:00+00:00" }, { "name": "amphp/byte-stream", - "version": "v1.8.1", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/amphp/byte-stream.git", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" + "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/55a6bd071aec26fa2a3e002618c20c35e3df1b46", + "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46", "shasum": "" }, "require": { - "amphp/amp": "^2", - "php": ">=7.1" + "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": "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.22.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { "files": [ - "lib/functions.php" + "src/functions.php", + "src/Internal/functions.php" ], "psr-4": { - "Amp\\ByteStream\\": "lib" + "Amp\\ByteStream\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -407,7 +265,7 @@ } ], "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "http://amphp.org/byte-stream", + "homepage": "https://amphp.org/byte-stream", "keywords": [ "amp", "amphp", @@ -417,9 +275,8 @@ "stream" ], "support": { - "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" + "source": "https://github.com/amphp/byte-stream/tree/v2.1.2" }, "funding": [ { @@ -427,44 +284,39 @@ "type": "github" } ], - "time": "2021-03-30T17:13:30+00:00" + "time": "2025-03-16T17:10:27+00:00" }, { - "name": "composer/package-versions-deprecated", - "version": "1.11.99.5", + "name": "amphp/cache", + "version": "v2.0.1", "source": { "type": "git", - "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" + "url": "https://github.com/amphp/cache.git", + "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", - "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", + "url": "https://api.github.com/repos/amphp/cache/zipball/46912e387e6aa94933b61ea1ead9cf7540b7797c", + "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c", "shasum": "" }, "require": { - "composer-plugin-api": "^1.1.0 || ^2.0", - "php": "^7 || ^8" - }, - "replace": { - "ocramius/package-versions": "1.11.99" + "amphp/amp": "^3", + "amphp/serialization": "^1", + "amphp/sync": "^2", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" }, "require-dev": { - "composer/composer": "^1.9.3 || ^2.0@dev", - "ext-zip": "^1.13", - "phpunit/phpunit": "^6.5 || ^7" - }, - "type": "composer-plugin", - "extra": { - "class": "PackageVersions\\Installer", - "branch-alias": { - "dev-master": "1.x-dev" - } + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.4" }, + "type": "library", "autoload": { "psr-4": { - "PackageVersions\\": "src/PackageVersions" + "Amp\\Cache\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -473,66 +325,71 @@ ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" + "name": "Niklas Keller", + "email": "me@kelunik.com" }, { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" } ], - "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "description": "A fiber-aware cache API based on Amp and Revolt.", + "homepage": "https://amphp.org/cache", "support": { - "issues": "https://github.com/composer/package-versions-deprecated/issues", - "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" + "issues": "https://github.com/amphp/cache/issues", + "source": "https://github.com/amphp/cache/tree/v2.0.1" }, "funding": [ { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", + "url": "https://github.com/amphp", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2022-01-17T14:14:24+00:00" + "time": "2024-04-19T03:38:06+00:00" }, { - "name": "composer/pcre", - "version": "1.0.1", + "name": "amphp/dns", + "version": "v2.4.0", "source": { "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" + "url": "https://github.com/amphp/dns.git", + "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "url": "https://api.github.com/repos/amphp/dns/zipball/78eb3db5fc69bf2fc0cb503c4fcba667bc223c71", + "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "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": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5" + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "5.20" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "Composer\\Pcre\\": "src" + "Amp\\Dns\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -541,68 +398,91 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "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": "PCRE wrapping library that offers type-safe preg_* replacements.", + "description": "Async DNS resolution for Amp.", + "homepage": "https://github.com/amphp/dns", "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" + "amp", + "amphp", + "async", + "client", + "dns", + "resolve" ], "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/1.0.1" + "issues": "https://github.com/amphp/dns/issues", + "source": "https://github.com/amphp/dns/tree/v2.4.0" }, "funding": [ { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", + "url": "https://github.com/amphp", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2022-01-21T20:24:37+00:00" + "time": "2025-01-19T15:43:40+00:00" }, { - "name": "composer/semver", - "version": "3.2.9", + "name": "amphp/parallel", + "version": "v2.3.3", "source": { "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649" + "url": "https://github.com/amphp/parallel.git", + "reference": "296b521137a54d3a02425b464e5aee4c93db2c60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/a951f614bd64dcd26137bc9b7b2637ddcfc57649", - "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649", + "url": "https://api.github.com/repos/amphp/parallel/zipball/296b521137a54d3a02425b464e5aee4c93db2c60", + "reference": "296b521137a54d3a02425b464e5aee4c93db2c60", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "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": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.18" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, "autoload": { + "files": [ + "src/Context/functions.php", + "src/Context/Internal/functions.php", + "src/Ipc/functions.php", + "src/Worker/functions.php" + ], "psr-4": { - "Composer\\Semver\\": "src" + "Amp\\Parallel\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -611,77 +491,65 @@ ], "authors": [ { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" }, { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Niklas Keller", + "email": "me@kelunik.com" }, { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" + "name": "Stephen Coakley", + "email": "me@stephencoakley.com" } ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", + "description": "Parallel processing component for Amp.", + "homepage": "https://github.com/amphp/parallel", "keywords": [ - "semantic", - "semver", - "validation", - "versioning" + "async", + "asynchronous", + "concurrent", + "multi-processing", + "multi-threading" ], "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.9" + "issues": "https://github.com/amphp/parallel/issues", + "source": "https://github.com/amphp/parallel/tree/v2.3.3" }, "funding": [ { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", + "url": "https://github.com/amphp", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2022-02-04T13:58:43+00:00" + "time": "2025-11-15T06:23:42+00:00" }, { - "name": "composer/xdebug-handler", - "version": "3.0.2", + "name": "amphp/parser", + "version": "v1.1.1", "source": { "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "b11b961ef6b11e380e81a20b27c8cad54eeefe61" + "url": "https://github.com/amphp/parser.git", + "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/b11b961ef6b11e380e81a20b27c8cad54eeefe61", - "reference": "b11b961ef6b11e380e81a20b27c8cad54eeefe61", + "url": "https://api.github.com/repos/amphp/parser/zipball/3cf1f8b32a0171d4b1bed93d25617637a77cded7", + "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7", "shasum": "" }, "require": { - "composer/pcre": "^1", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" + "php": ">=7.4" }, "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.4" }, "type": "library", "autoload": { "psr-4": { - "Composer\\XdebugHandler\\": "src" + "Amp\\Parser\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -690,35 +558,799 @@ ], "authors": [ { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" } ], - "description": "Restarts a process without Xdebug.", + "description": "A generator parser to make streaming parsers simple.", + "homepage": "https://github.com/amphp/parser", "keywords": [ - "Xdebug", - "performance" + "async", + "non-blocking", + "parser", + "stream" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "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": "v1.2.3", + "source": { + "type": "git", + "url": "https://github.com/amphp/pipeline.git", + "reference": "7b52598c2e9105ebcddf247fc523161581930367" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/pipeline/zipball/7b52598c2e9105ebcddf247fc523161581930367", + "reference": "7b52598c2e9105ebcddf247fc523161581930367", + "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": "^5.18" + }, + "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/v1.2.3" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2025-03-16T16:33:53+00:00" + }, + { + "name": "amphp/process", + "version": "v2.0.3", + "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" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Amp\\Process\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A fiber-aware process manager based on Amp and Revolt.", + "homepage": "https://amphp.org/process", + "support": { + "issues": "https://github.com/amphp/process/issues", + "source": "https://github.com/amphp/process/tree/v2.0.3" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-04-19T03:13:44+00:00" + }, + { + "name": "amphp/serialization", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/serialization.git", + "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/serialization/zipball/693e77b2fb0b266c3c7d622317f881de44ae94a1", + "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "phpunit/phpunit": "^9 || ^8 || ^7" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Amp\\Serialization\\": "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": "Serialization tools for IPC and data storage in PHP.", + "homepage": "https://github.com/amphp/serialization", + "keywords": [ + "async", + "asynchronous", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/amphp/serialization/issues", + "source": "https://github.com/amphp/serialization/tree/master" + }, + "time": "2020-03-25T21:39:07+00:00" + }, + { + "name": "amphp/socket", + "version": "v2.3.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/socket.git", + "reference": "58e0422221825b79681b72c50c47a930be7bf1e1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/socket/zipball/58e0422221825b79681b72c50c47a930be7bf1e1", + "reference": "58e0422221825b79681b72c50c47a930be7bf1e1", + "shasum": "" + }, + "require": { + "amphp/amp": "^3", + "amphp/byte-stream": "^2", + "amphp/dns": "^2", + "ext-openssl": "*", + "kelunik/certificate": "^1.1", + "league/uri": "^6.5 | ^7", + "league/uri-interfaces": "^2.3 | ^7", + "php": ">=8.1", + "revolt/event-loop": "^1 || ^0.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "amphp/phpunit-util": "^3", + "amphp/process": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "5.20" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php", + "src/Internal/functions.php", + "src/SocketAddress/functions.php" + ], + "psr-4": { + "Amp\\Socket\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Lowrey", + "email": "rdlowrey@gmail.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Non-blocking socket connection / server implementations based on Amp and Revolt.", + "homepage": "https://github.com/amphp/socket", + "keywords": [ + "amp", + "async", + "encryption", + "non-blocking", + "sockets", + "tcp", + "tls" + ], + "support": { + "issues": "https://github.com/amphp/socket/issues", + "source": "https://github.com/amphp/socket/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-04-21T14:33:03+00:00" + }, + { + "name": "amphp/sync", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/sync.git", + "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/sync/zipball/217097b785130d77cfcc58ff583cf26cd1770bf1", + "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1", + "shasum": "" + }, + "require": { + "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": "^2", + "amphp/phpunit-util": "^3", + "phpunit/phpunit": "^9", + "psalm/phar": "5.23" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Amp\\Sync\\": "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": "Non-blocking synchronization primitives for PHP based on Amp and Revolt.", + "homepage": "https://github.com/amphp/sync", + "keywords": [ + "async", + "asynchronous", + "mutex", + "semaphore", + "synchronization" + ], + "support": { + "issues": "https://github.com/amphp/sync/issues", + "source": "https://github.com/amphp/sync/tree/v2.3.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-08-03T19:31:26+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" + }, + "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-11-12T16:29:46+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.4" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + } + ], + "time": "2025-08-20T19:15:30+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", + "shasum": "" + }, + "require": { + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.2" + "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": "v2.1.0", + "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" + ], + "description": "DNS protocol implementation written in pure PHP", + "keywords": [ + "dns" + ], + "support": { + "issues": "https://github.com/DaveRandom/LibDNS/issues", + "source": "https://github.com/DaveRandom/LibDNS/tree/v2.1.0" + }, + "time": "2024-04-12T12:12:48+00:00" + }, + { + "name": "dealerdirect/phpcodesniffer-composer-installer", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/composer-installer.git", + "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/845eb62303d2ca9b289ef216356568ccc075ffd1", + "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.2", + "php": ">=5.4", + "squizlabs/php_codesniffer": "^3.1.0 || ^4.0" + }, + "require-dev": { + "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": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + }, + "autoload": { + "psr-4": { + "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Franck Nijhof", + "email": "opensource@frenck.dev", + "homepage": "https://frenck.dev", + "role": "Open source developer" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer Standards Composer Installer Plugin", + "keywords": [ + "PHPCodeSniffer", + "PHP_CodeSniffer", + "code quality", + "codesniffer", + "composer", + "installer", + "phpcbf", + "phpcs", + "plugin", + "qa", + "quality", + "standard", + "standards", + "style guide", + "stylecheck", + "tests" + ], + "support": { + "issues": "https://github.com/PHPCSStandards/composer-installer/issues", + "security": "https://github.com/PHPCSStandards/composer-installer/security/policy", + "source": "https://github.com/PHPCSStandards/composer-installer" }, "funding": [ { - "url": "https://packagist.com", - "type": "custom" + "url": "https://github.com/PHPCSStandards", + "type": "github" }, { - "url": "https://github.com/composer", + "url": "https://github.com/jrfnl", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" } ], - "time": "2022-02-24T20:53:32+00:00" + "time": "2025-11-11T04:32:07+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -758,35 +1390,141 @@ "time": "2019-12-04T15:06:13+00:00" }, { - "name": "doctrine/instantiator", - "version": "1.4.0", + "name": "doctrine/deprecations", + "version": "1.1.5", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "url": "https://github.com/doctrine/deprecations.git", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "psr/log": "^1 || ^2 || ^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "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/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + }, + "time": "2025-04-07T20:06:18+00:00" + }, + { + "name": "felixfbecker/language-server-protocol", + "version": "v1.5.3", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-language-server-protocol.git", + "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/a9e113dbc7d849e35b8776da39edaf4313b7b6c9", + "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpstan/phpstan": "*", + "squizlabs/php_codesniffer": "^3.1", + "vimeo/psalm": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "LanguageServerProtocol\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "PHP classes for the Language Server Protocol", + "keywords": [ + "language", + "microsoft", + "php", + "server" + ], + "support": { + "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.3" + }, + "time": "2024-04-30T00:40:11+00:00" + }, + { + "name": "fidry/cpu-core-counter", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "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" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "Fidry\\CpuCoreCounter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -795,201 +1533,346 @@ ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "description": "Tiny utility to get the number of CPU cores.", "keywords": [ - "constructor", - "instantiate" + "CPU", + "core" ], "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" + "url": "https://github.com/theofidry", + "type": "github" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2025-08-14T07:29:31+00:00" }, { - "name": "felixfbecker/advanced-json-rpc", - "version": "v3.2.1", + "name": "kelunik/certificate", + "version": "v1.1.3", "source": { "type": "git", - "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" + "url": "https://github.com/kelunik/certificate.git", + "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "url": "https://api.github.com/repos/kelunik/certificate/zipball/7e00d498c264d5eb4f78c69f41c8bd6719c0199e", + "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e", "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" + "ext-openssl": "*", + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^7.0 || ^8.0" + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^6 | 7 | ^8 | ^9" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, "autoload": { "psr-4": { - "AdvancedJsonRpc\\": "lib/" + "Kelunik\\Certificate\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "ISC" + "MIT" ], "authors": [ { - "name": "Felix Becker", - "email": "felix.b@outlook.com" + "name": "Niklas Keller", + "email": "me@kelunik.com" } ], - "description": "A more advanced JSONRPC implementation", + "description": "Access certificate details and transform between different formats.", + "keywords": [ + "DER", + "certificate", + "certificates", + "openssl", + "pem", + "x509" + ], "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/kelunik/certificate/issues", + "source": "https://github.com/kelunik/certificate/tree/v1.1.3" }, - "time": "2021-06-11T22:34:44+00:00" + "time": "2023-02-03T21:26:53+00:00" }, { - "name": "felixfbecker/language-server-protocol", - "version": "1.5.1", + "name": "laminas/laminas-coding-standard", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730" + "url": "https://github.com/laminas/laminas-coding-standard.git", + "reference": "d4412caba9ed16c93cdcf301759f5ee71f9d9aea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/9d846d1f5cf101deee7a61c8ba7caa0a975cd730", - "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730", + "url": "https://api.github.com/repos/laminas/laminas-coding-standard/zipball/d4412caba9ed16c93cdcf301759f5ee71f9d9aea", + "reference": "d4412caba9ed16c93cdcf301759f5ee71f9d9aea", "shasum": "" }, "require": { - "php": ">=7.1" + "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.0", + "php": "^7.4 || ^8.0", + "slevomat/coding-standard": "^8.15.0", + "squizlabs/php_codesniffer": "^3.10", + "webimpress/coding-standard": "^1.3" }, - "require-dev": { - "phpstan/phpstan": "*", - "squizlabs/php_codesniffer": "^3.1", - "vimeo/psalm": "^4.0" + "type": "phpcodesniffer-standard", + "autoload": { + "psr-4": { + "LaminasCodingStandard\\": "src/LaminasCodingStandard/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas Coding Standard", + "homepage": "https://laminas.dev", + "keywords": [ + "Coding Standard", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-coding-standard/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-coding-standard/issues", + "rss": "https://github.com/laminas/laminas-coding-standard/releases.atom", + "source": "https://github.com/laminas/laminas-coding-standard" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2025-05-13T08:37:04+00:00" + }, + { + "name": "league/uri", + "version": "7.8.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "4436c6ec8d458e4244448b069cc572d088230b76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76", + "reference": "4436c6ec8d458e4244448b069cc572d088230b76", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.8", + "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" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "7.x-dev" } }, "autoload": { "psr-4": { - "LanguageServerProtocol\\": "src/" + "League\\Uri\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "ISC" + "MIT" ], "authors": [ { - "name": "Felix Becker", - "email": "felix.b@outlook.com" + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" } ], - "description": "PHP classes for the Language Server Protocol", + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", "keywords": [ - "language", - "microsoft", - "php", - "server" + "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": { - "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/1.5.1" + "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/7.8.0" }, - "time": "2021-02-22T14:02:09+00:00" + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-01-14T17:24:56+00:00" }, { - "name": "laminas/laminas-coding-standard", - "version": "1.0.0", + "name": "league/uri-interfaces", + "version": "7.8.0", "source": { "type": "git", - "url": "https://github.com/laminas/laminas-coding-standard.git", - "reference": "08880ce2fbfe62d471cd3cb766a91da630b32539" + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-coding-standard/zipball/08880ce2fbfe62d471cd3cb766a91da630b32539", - "reference": "08880ce2fbfe62d471cd3cb766a91da630b32539", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4", + "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4", "shasum": "" }, "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "squizlabs/php_codesniffer": "^2.7" + "ext-filter": "*", + "php": "^8.1", + "psr/http-message": "^1.1 || ^2.0" }, - "replace": { - "zendframework/zend-coding-standard": "self.version" + "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" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "Laminas coding standard", - "homepage": "https://laminas.dev", + "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": [ - "Coding Standard", - "laminas" + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" ], "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-coding-standard/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-coding-standard/issues", - "rss": "https://github.com/laminas/laminas-coding-standard/releases.atom", - "source": "https://github.com/laminas/laminas-coding-standard" + "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/7.8.0" }, - "time": "2019-12-31T16:28:26+00:00" + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-01-15T06:54:53+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.13.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { @@ -1014,7 +1897,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, "funding": [ { @@ -1022,20 +1905,20 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2025-08-01T08:46:24+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.0.0", + "version": "v5.0.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + "reference": "8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c", + "reference": "8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c", "shasum": "" }, "require": { @@ -1046,7 +1929,7 @@ "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", "squizlabs/php_codesniffer": "~3.5" }, "type": "library", @@ -1071,31 +1954,33 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v5.0.0" }, - "time": "2020-12-01T19:48:11+00:00" + "time": "2024-09-08T10:20:00+00:00" }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -1103,7 +1988,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -1127,79 +2012,27 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" - }, - "time": "2021-11-30T19:35:32+00:00" - }, - { - "name": "openlss/lib-array2xml", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/nullivex/lib-array2xml.git", - "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", - "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "autoload": { - "psr-0": { - "LSS": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Bryan Tong", - "email": "bryan@nullivex.com", - "homepage": "https://www.nullivex.com" - }, - { - "name": "Tony Butler", - "email": "spudz76@gmail.com", - "homepage": "https://www.nullivex.com" - } - ], - "description": "Array2XML conversion library credit to lalit.org", - "homepage": "https://www.nullivex.com", - "keywords": [ - "array", - "array conversion", - "xml", - "xml conversion" - ], - "support": { - "issues": "https://github.com/nullivex/lib-array2xml/issues", - "source": "https://github.com/nullivex/lib-array2xml/tree/master" - }, - "time": "2019-03-29T20:06:56+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -1240,9 +2073,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -1350,28 +2189,36 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "reference": "2f5cbed597cb261d1ea458f3da3a9ad32e670b1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/2f5cbed597cb261d1ea458f3da3a9ad32e670b1e", + "reference": "2f5cbed597cb261d1ea458f3da3a9ad32e670b1e", "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" }, "type": "library", "extra": { @@ -1395,42 +2242,50 @@ }, { "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.0.1" }, - "time": "2021-10-19T17:43:47+00:00" + "time": "2026-01-20T15:30:42+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" + "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/327a05bbee54120d4786a0dc67aad30226ad4cf9", + "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "doctrine/deprecations": "^1.0", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^2.0" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^4" }, "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" + "dev-1.x": "1.x-dev", + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -1451,117 +2306,97 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/2.0.0" }, - "time": "2022-01-04T19:58:01+00:00" + "time": "2026-01-06T21:53:42+00:00" }, { - "name": "phpspec/prophecy", - "version": "v1.15.0", + "name": "phpstan/phpdoc-parser", + "version": "2.3.2", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "php": "^7.4 || ^8.0" }, "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "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" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { "psr-4": { - "Prophecy\\": "src/Prophecy" + "PHPStan\\PhpDocParser\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2" }, - "time": "2021-12-08T12:19:24+00:00" + "time": "2026-01-25T14:56:51+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.13", + "version": "11.0.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "deac8540cb7bd40b2b8cfa679b76202834fd04e8" + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/deac8540cb7bd40b2b8cfa679b76202834fd04e8", - "reference": "deac8540cb7bd40b2b8cfa679b76202834fd04e8", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" + "nikic/php-parser": "^5.7.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.1", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.3.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.5.46" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "11.0.x-dev" } }, "autoload": { @@ -1589,40 +2424,53 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.13" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12" }, "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": "2022-02-23T17:02:38+00:00" + "time": "2025-12-24T07:01:01+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903", + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -1649,36 +2497,49 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.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": "2021-12-02T12:48:52+00:00" + "time": "2026-02-02T13:52:54+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" }, "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/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcntl": "*" @@ -1686,7 +2547,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -1712,7 +2573,8 @@ ], "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/5.0.1" }, "funding": [ { @@ -1720,32 +2582,32 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2024-07-03T05:07:44+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" }, "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/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -1771,7 +2633,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" }, "funding": [ { @@ -1779,32 +2642,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2024-07-03T05:08:43+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" }, "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/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -1830,7 +2693,8 @@ ], "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/7.0.1" }, "funding": [ { @@ -1838,59 +2702,53 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2024-07-03T05:09:35+00:00" }, { "name": "phpunit/phpunit", - "version": "9.5.16", + "version": "11.5.51", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "5ff8c545a50226c569310a35f4fa89d79f1ddfdc" + "reference": "ad14159f92910b0f0e3928c13e9b2077529de091" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5ff8c545a50226c569310a35f4fa89d79f1ddfdc", - "reference": "5ff8c545a50226c569310a35f4fa89d79f1ddfdc", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ad14159f92910b0f0e3928c13e9b2077529de091", + "reference": "ad14159f92910b0f0e3928c13e9b2077529de091", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.12", + "phpunit/php-file-iterator": "^5.1.1", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.3", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.1", + "sebastian/exporter": "^6.3.2", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/recursion-context": "^6.0.3", + "sebastian/type": "^5.1.3", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -1898,7 +2756,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-main": "11.5-dev" } }, "autoload": { @@ -1929,7 +2787,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.16" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.51" }, "funding": [ { @@ -1939,51 +2798,214 @@ { "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/phpunit", + "type": "tidelift" } ], - "time": "2022-02-23T17:10:58+00:00" + "time": "2026-02-05T07:59:30+00:00" }, { "name": "psalm/plugin-phpunit", - "version": "0.15.2", + "version": "0.19.5", "source": { "type": "git", "url": "https://github.com/psalm/psalm-plugin-phpunit.git", - "reference": "31d15bbc0169a3c454e495e03fd8a6ccb663661b" + "reference": "143f9d5e049fffcdbc0da3fbb99f6149f9d3e2dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/31d15bbc0169a3c454e495e03fd8a6ccb663661b", - "reference": "31d15bbc0169a3c454e495e03fd8a6ccb663661b", + "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/143f9d5e049fffcdbc0da3fbb99f6149f9d3e2dc", + "reference": "143f9d5e049fffcdbc0da3fbb99f6149f9d3e2dc", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.10", - "composer/semver": "^1.4 || ^2.0 || ^3.0", "ext-simplexml": "*", - "php": "^7.1 || ^8.0", - "vimeo/psalm": "dev-master || dev-4.x || ^4.0" + "php": ">=8.1", + "vimeo/psalm": "dev-master || ^6.10.0" }, "conflict": { - "phpunit/phpunit": "<7.5" + "phpspec/prophecy": "<1.20.0", + "phpspec/prophecy-phpunit": "<2.3.0", + "phpunit/phpunit": "<8.5.1" }, "require-dev": { - "codeception/codeception": "^4.0.3", "php": "^7.3 || ^8.0", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.0", + "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0", "squizlabs/php_codesniffer": "^3.3.1", - "weirdan/codeception-psalm-module": "^0.11.0", "weirdan/prophecy-shim": "^1.0 || ^2.0" }, - "type": "psalm-plugin", + "type": "psalm-plugin", + "extra": { + "psalm": { + "pluginClass": "Psalm\\PhpUnitPlugin\\Plugin" + } + }, + "autoload": { + "psr-4": { + "Psalm\\PhpUnitPlugin\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Brown", + "email": "github@muglug.com" + } + ], + "description": "Psalm plugin for PHPUnit", + "support": { + "issues": "https://github.com/psalm/psalm-plugin-phpunit/issues", + "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.19.5" + }, + "time": "2025-03-31T18:49:55+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+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": "2.0", + "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" + }, + "type": "library", "extra": { - "psalm": { - "pluginClass": "Psalm\\PhpUnitPlugin\\Plugin" + "branch-alias": { + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Psalm\\PhpUnitPlugin\\": "src" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1992,38 +3014,51 @@ ], "authors": [ { - "name": "Matt Brown", - "email": "github@muglug.com" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Psalm plugin for PHPUnit", + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], "support": { - "issues": "https://github.com/psalm/psalm-plugin-phpunit/issues", - "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.15.2" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2021-05-29T19:11:38+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { - "name": "psr/container", - "version": "1.1.1", + "name": "psr/log", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": ">=8.0.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, "autoload": { "psr-4": { - "Psr\\Container\\": "src/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2036,47 +3071,50 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "log", + "psr", + "psr-3" ], "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2021-03-05T17:36:06+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { - "name": "psr/log", - "version": "1.1.4", + "name": "revolt/event-loop", + "version": "v1.0.8", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "url": "https://github.com/revoltphp/event-loop.git", + "reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/b6fc06dce8e9b523c9946138fa5e62181934f91c", + "reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.1" + }, + "require-dev": { + "ext-json": "*", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.15" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-main": "1.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Revolt\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2085,46 +3123,62 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "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": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "Rock-solid event loop for concurrent PHP applications.", "keywords": [ - "log", - "psr", - "psr-3" + "async", + "asynchronous", + "concurrency", + "event", + "event-loop", + "non-blocking", + "scheduler" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "issues": "https://github.com/revoltphp/event-loop/issues", + "source": "https://github.com/revoltphp/event-loop/tree/v1.0.8" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2025-08-27T21:33:23+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2147,7 +3201,8 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" }, "funding": [ { @@ -2155,32 +3210,32 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-07-03T04:41:36+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" }, "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/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2203,7 +3258,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/3.0.3" }, "funding": [ { @@ -2211,32 +3267,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2025-03-19T07:56:08+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" }, "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/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -2258,7 +3314,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/4.0.1" }, "funding": [ { @@ -2266,34 +3323,39 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2024-07-03T04:45:54+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "6.3.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -2332,41 +3394,54 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3" }, "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": "2020-10-26T15:49:45+00:00" + "time": "2026-01-24T09:26:40+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -2389,7 +3464,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" }, "funding": [ { @@ -2397,33 +3473,33 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2024-07-03T04:49:50+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3", + "phpunit/phpunit": "^11.0", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -2455,7 +3531,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" }, "funding": [ { @@ -2463,27 +3540,27 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2024-07-03T04:53:05+00:00" }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "7.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.3" }, "suggest": { "ext-posix": "*" @@ -2491,7 +3568,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "7.2-dev" } }, "autoload": { @@ -2510,7 +3587,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", @@ -2518,42 +3595,55 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.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": "2020-09-28T05:52:38+00:00" + "time": "2025-05-21T11:55:47+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "6.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -2595,46 +3685,56 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/6.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/exporter", + "type": "tidelift" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2025-09-24T06:12:51+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -2653,13 +3753,14 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" }, "funding": [ { @@ -2667,33 +3768,33 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2024-07-03T04:57:36+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2716,7 +3817,8 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" }, "funding": [ { @@ -2724,34 +3826,34 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2024-07-03T04:58:38+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" }, "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/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -2773,7 +3875,8 @@ "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/6.0.1" }, "funding": [ { @@ -2781,32 +3884,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2024-07-03T05:00:13+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" }, "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/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -2828,7 +3931,8 @@ "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/4.0.1" }, "funding": [ { @@ -2836,32 +3940,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2024-07-03T05:01:32+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -2888,43 +3992,56 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "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.4" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" }, "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/recursion-context", + "type": "tidelift" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2025-08-13T04:42:22+00:00" }, { - "name": "sebastian/resource-operations", - "version": "3.0.3", + "name": "sebastian/type", + "version": "5.1.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -2939,47 +4056,58 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" }, "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": "2020-09-28T06:45:17+00:00" + "time": "2025-08-09T06:55:48+00:00" }, { - "name": "sebastian/type", - "version": "2.3.4", + "name": "sebastian/version", + "version": "5.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "php": ">=8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -2998,11 +4126,12 @@ "role": "lead" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" }, "funding": [ { @@ -3010,192 +4139,315 @@ "type": "github" } ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2024-10-09T05:16:32+00:00" }, { - "name": "sebastian/version", - "version": "3.0.2", + "name": "slevomat/coding-standard", + "version": "8.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/slevomat/coding-standard.git", + "reference": "1dd80bf3b93692bedb21a6623c496887fad05fec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/1dd80bf3b93692bedb21a6623c496887fad05fec", + "reference": "1dd80bf3b93692bedb21a6623c496887fad05fec", + "shasum": "" + }, + "require": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.1.2", + "php": "^7.4 || ^8.0", + "phpstan/phpdoc-parser": "^2.3.0", + "squizlabs/php_codesniffer": "^3.13.4" + }, + "require-dev": { + "phing/phing": "3.0.1|3.1.0", + "php-parallel-lint/php-parallel-lint": "1.4.0", + "phpstan/phpstan": "2.1.24", + "phpstan/phpstan-deprecation-rules": "2.0.3", + "phpstan/phpstan-phpunit": "2.0.7", + "phpstan/phpstan-strict-rules": "2.0.6", + "phpunit/phpunit": "9.6.8|10.5.48|11.4.4|11.5.36|12.3.10" + }, + "type": "phpcodesniffer-standard", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "psr-4": { + "SlevomatCodingStandard\\": "SlevomatCodingStandard/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", + "keywords": [ + "dev", + "phpcs" + ], + "support": { + "issues": "https://github.com/slevomat/coding-standard/issues", + "source": "https://github.com/slevomat/coding-standard/tree/8.22.1" + }, + "funding": [ + { + "url": "https://github.com/kukulich", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", + "type": "tidelift" + } + ], + "time": "2025-09-13T08:53:30+00:00" + }, + { + "name": "spatie/array-to-xml", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/spatie/array-to-xml.git", + "reference": "88b2f3852a922dd73177a68938f8eb2ec70c7224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/88b2f3852a922dd73177a68938f8eb2ec70c7224", + "reference": "88b2f3852a922dd73177a68938f8eb2ec70c7224", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-dom": "*", + "php": "^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.2", + "pestphp/pest": "^1.21", + "spatie/pest-plugin-snapshots": "^1.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "3.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Spatie\\ArrayToXml\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://freek.dev", + "role": "Developer" + } + ], + "description": "Convert an array to xml", + "homepage": "https://github.com/spatie/array-to-xml", + "keywords": [ + "array", + "convert", + "xml" + ], + "support": { + "source": "https://github.com/spatie/array-to-xml/tree/3.4.4" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-12-15T09:00:41+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.13.5", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4", + "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, + "bin": [ + "bin/phpcbf", + "bin/phpcs" + ], + "type": "library", "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Greg Sherwood", + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards", + "static analysis" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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": "2020-09-28T06:39:44+00:00" + "time": "2025-11-04T16:30:35+00:00" }, { - "name": "squizlabs/php_codesniffer", - "version": "2.9.2", + "name": "staabm/side-effects-detector", + "version": "1.0.5", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "2acf168de78487db620ab4bc524135a13cfe6745" + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745", - "reference": "2acf168de78487db620ab4bc524135a13cfe6745", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", "shasum": "" }, "require": { - "ext-simplexml": "*", "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.1.2" + "php": "^7.4 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" }, - "bin": [ - "scripts/phpcs", - "scripts/phpcbf" - ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, "autoload": { "classmap": [ - "CodeSniffer.php", - "CodeSniffer/CLI.php", - "CodeSniffer/Exception.php", - "CodeSniffer/File.php", - "CodeSniffer/Fixer.php", - "CodeSniffer/Report.php", - "CodeSniffer/Reporting.php", - "CodeSniffer/Sniff.php", - "CodeSniffer/Tokens.php", - "CodeSniffer/Reports/", - "CodeSniffer/Tokenizers/", - "CodeSniffer/DocGenerators/", - "CodeSniffer/Standards/AbstractPatternSniff.php", - "CodeSniffer/Standards/AbstractScopeSniff.php", - "CodeSniffer/Standards/AbstractVariableSniff.php", - "CodeSniffer/Standards/IncorrectPatternException.php", - "CodeSniffer/Standards/Generic/Sniffs/", - "CodeSniffer/Standards/MySource/Sniffs/", - "CodeSniffer/Standards/PEAR/Sniffs/", - "CodeSniffer/Standards/PSR1/Sniffs/", - "CodeSniffer/Standards/PSR2/Sniffs/", - "CodeSniffer/Standards/Squiz/Sniffs/", - "CodeSniffer/Standards/Zend/Sniffs/" + "lib/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } + "MIT" ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", + "description": "A static analysis tool to detect side effects in PHP code", "keywords": [ - "phpcs", - "standards" + "static analysis" ], "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" }, - "time": "2018-11-07T22:31:41+00:00" + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" }, { "name": "symfony/console", - "version": "v5.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8" + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a2a86ec353d825c75856c6fd14fac416a7bdb6b8", - "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8", + "url": "https://api.github.com/repos/symfony/console/zipball/41e38717ac1dd7a46b6bda7d6a82af2d98a78894", + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.2", + "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": "^7.2|^8.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": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.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": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -3224,12 +4476,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.3" + "source": "https://github.com/symfony/console/tree/v7.4.4" }, "funding": [ { @@ -3240,38 +4492,42 @@ "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": "2022-01-26T16:28:35+00:00" + "time": "2026-01-13T11:36:38+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "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.6-dev" } }, "autoload": { @@ -3296,7 +4552,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -3312,48 +4568,38 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.24.0", + "name": "symfony/filesystem", + "version": "v7.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "url": "https://github.com/symfony/filesystem.git", + "reference": "d551b38811096d0be9c4691d406991b47c0c630a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d551b38811096d0be9c4691d406991b47c0c630a", + "reference": "d551b38811096d0be9c4691d406991b47c0c630a", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" }, - "suggest": { - "ext-ctype": "For best performance" + "require-dev": { + "symfony/process": "^6.4|^7.0|^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3361,24 +4607,18 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for ctype functions", + "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" + "source": "https://github.com/symfony/filesystem/tree/v7.4.0" }, "funding": [ { @@ -3389,41 +4629,45 @@ "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": "2021-10-20T20:35:02+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.24.0", + "name": "symfony/polyfill-ctype", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" }, "suggest": { - "ext-intl": "For best performance" + "ext-ctype": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3431,7 +4675,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -3440,26 +4684,24 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", + "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "grapheme", - "intl", + "ctype", "polyfill", - "portable", - "shim" + "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -3470,41 +4712,42 @@ "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": "2021-11-23T21:10:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.24.0", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3512,11 +4755,8 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3532,18 +4772,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", + "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "grapheme", "intl", - "normalizer", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -3554,44 +4794,42 @@ "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": "2021-02-19T12:13:01+00:00" + "time": "2025-06-27T09:58:17+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.24.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" + "php": ">=7.2" }, "suggest": { - "ext-mbstring": "For best performance" + "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3599,8 +4837,11 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3616,17 +4857,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", + "intl", + "normalizer", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -3637,38 +4879,46 @@ "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": "2021-11-30T18:21:41+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.24.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3676,11 +4926,8 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3696,16 +4943,17 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "mbstring", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -3716,38 +4964,39 @@ "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": "2021-06-05T21:20:04+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.24.0", + "name": "symfony/polyfill-php84", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3755,7 +5004,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Polyfill\\Php84\\": "" }, "classmap": [ "Resources/stubs" @@ -3766,10 +5015,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3779,7 +5024,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3788,7 +5033,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" }, "funding": [ { @@ -3799,52 +5044,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": "2021-09-13T13:58:33+00:00" + "time": "2025-06-24T13:30:11+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3871,7 +5120,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -3882,43 +5131,48 @@ "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": "2021-11-04T16:48:04+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/string", - "version": "v5.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10" + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10", - "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10", + "url": "https://api.github.com/repos/symfony/string/zipball/1c4b10461bf2ec27537b5f36105337262f5f5d6f", + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-grapheme": "~1.33", "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/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -3957,7 +5211,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.3" + "source": "https://github.com/symfony/string/tree/v7.4.4" }, "funding": [ { @@ -3968,25 +5222,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": "2022-01-02T09:53:40+00:00" + "time": "2026-01-12T10:54:30+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -4015,7 +5273,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.1" + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { @@ -4023,28 +5281,30 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2025-11-17T20:03:58+00:00" }, { "name": "vimeo/psalm", - "version": "4.21.0", + "version": "6.15.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "d8bec4c7aaee111a532daec32fb09de5687053d1" + "reference": "204d06619833a297b402cbc66be7f2df74437db4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/d8bec4c7aaee111a532daec32fb09de5687053d1", - "reference": "d8bec4c7aaee111a532daec32fb09de5687053d1", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/204d06619833a297b402cbc66be7f2df74437db4", + "reference": "204d06619833a297b402cbc66be7f2df74437db4", "shasum": "" }, "require": { - "amphp/amp": "^2.4.2", - "amphp/byte-stream": "^1.5", - "composer/package-versions-deprecated": "^1.8.0", + "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": "^1.1 || ^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": "*", @@ -4053,33 +5313,37 @@ "ext-mbstring": "*", "ext-simplexml": "*", "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.0.3", - "felixfbecker/language-server-protocol": "^1.5", - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.13", - "openlss/lib-array2xml": "^1.0", - "php": "^7.1|^8", - "sebastian/diff": "^3.0 || ^4.0", - "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0", - "webmozart/path-util": "^2.3" + "felixfbecker/language-server-protocol": "^1.5.3", + "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.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", + "spatie/array-to-xml": "^2.17.0 || ^3.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": { - "bamarni/composer-bin-plugin": "^1.2", - "brianium/paratest": "^4.0||^6.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", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpdocumentor/reflection-docblock": "^5", - "phpmyadmin/sql-parser": "5.1.0||dev-master", - "phpspec/prophecy": ">=1.9.0", - "phpunit/phpunit": "^9.0", - "psalm/plugin-phpunit": "^0.16", - "slevomat/coding-standard": "^7.0", - "squizlabs/php_codesniffer": "^3.5", - "symfony/process": "^4.3 || ^5.0 || ^6.0", - "weirdan/prophecy-shim": "^1.0 || ^2.0" + "phpstan/phpdoc-parser": "^1.6", + "phpunit/phpunit": "^9.6", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.19", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.6", + "symfony/process": "^6.0 || ^7.0 || ^8.0" }, "suggest": { "ext-curl": "In order to send data to shepherd", @@ -4090,22 +5354,22 @@ "psalm-language-server", "psalm-plugin", "psalm-refactor", + "psalm-review", "psalter" ], - "type": "library", + "type": "project", "extra": { "branch-alias": { - "dev-master": "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": { - "files": [ - "src/functions.php", - "src/spl_object_id.php" - ], "psr-4": { "Psalm\\": "src/Psalm/" } @@ -4117,109 +5381,115 @@ "authors": [ { "name": "Matthew Brown" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" } ], "description": "A static analysis tool for finding errors in PHP applications", "keywords": [ "code", "inspection", - "php" + "php", + "static analysis" ], "support": { + "docs": "https://psalm.dev/docs", "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.21.0" + "source": "https://github.com/vimeo/psalm" }, - "time": "2022-02-18T04:34:15+00:00" + "time": "2026-01-30T13:53:17+00:00" }, { - "name": "webmozart/assert", - "version": "1.10.0", + "name": "webimpress/coding-standard", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "url": "https://github.com/webimpress/coding-standard.git", + "reference": "6f6a1a90bd9e18fc8bee0660dd1d1ce68cf9fc53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webimpress/coding-standard/zipball/6f6a1a90bd9e18fc8bee0660dd1d1ce68cf9fc53", + "reference": "6f6a1a90bd9e18fc8bee0660dd1d1ce68cf9fc53", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" + "php": "^7.3 || ^8.0", + "squizlabs/php_codesniffer": "^3.10.3" }, "require-dev": { - "phpunit/phpunit": "^8.5.13" + "phpunit/phpunit": "^9.6.15" }, - "type": "library", + "type": "phpcodesniffer-standard", "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } + "dev-master": "1.2.x-dev", + "dev-develop": "1.3.x-dev" }, "autoload": { "psr-4": { - "Webmozart\\Assert\\": "src/" + "WebimpressCodingStandard\\": "src/WebimpressCodingStandard/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } + "BSD-2-Clause" ], - "description": "Assertions to validate method input/output with nice error messages.", + "description": "Webimpress Coding Standard", "keywords": [ - "assert", - "check", - "validate" + "Coding Standard", + "PSR-2", + "phpcs", + "psr-12", + "webimpress" ], "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "issues": "https://github.com/webimpress/coding-standard/issues", + "source": "https://github.com/webimpress/coding-standard/tree/1.4.0" }, - "time": "2021-03-09T10:59:23+00:00" + "funding": [ + { + "url": "https://github.com/michalbundyra", + "type": "github" + } + ], + "time": "2024-10-16T06:55:17+00:00" }, { - "name": "webmozart/path-util", - "version": "2.3.0", + "name": "webmozart/assert", + "version": "2.1.2", "source": { "type": "git", - "url": "https://github.com/webmozart/path-util.git", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" + "url": "https://github.com/webmozarts/assert.git", + "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", + "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", "shasum": "" }, "require": { - "php": ">=5.3.3", - "webmozart/assert": "~1.0" + "ext-ctype": "*", + "ext-date": "*", + "ext-filter": "*", + "php": "^8.2" }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-feature/2-0": "2.0-dev" } }, "autoload": { "psr-4": { - "Webmozart\\PathUtil\\": "src/" + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4230,28 +5500,36 @@ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" + }, + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com" } ], - "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], "support": { - "issues": "https://github.com/webmozart/path-util/issues", - "source": "https://github.com/webmozart/path-util/tree/2.3.0" + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/2.1.2" }, - "abandoned": "symfony/filesystem", - "time": "2015-12-17T08:42:14+00:00" + "time": "2026-01-13T14:02:24+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, - "platform-dev": [], + "platform-dev": {}, "platform-overrides": { - "php": "8.0.99" + "php": "8.2.99" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.9.0" } diff --git a/phpcs.xml b/phpcs.xml index 79556cb6..f8fcacb7 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -1,6 +1,12 @@ - - + + + + + src @@ -9,4 +15,14 @@ /test/TestAsset/ReflectionTestClass.php + + test/ReflectionTest.php + + + + + src/Client.php + src/Server.php + diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 3ec6becf..5de8ef79 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,16 +1,27 @@ + colors="true" + cacheDirectory=".phpunit.cache" + displayDetailsOnIncompleteTests="true" + displayDetailsOnSkippedTests="true" + displayDetailsOnTestsThatTriggerDeprecations="true" + displayDetailsOnTestsThatTriggerErrors="true" + displayDetailsOnTestsThatTriggerNotices="true" + displayDetailsOnTestsThatTriggerWarnings="true" + failOnWarning="true" + failOnDeprecation="true" + failOnNotice="true" +> ./test - + ./src - + diff --git a/psalm-baseline.xml b/psalm-baseline.xml index f0b8be48..55d64917 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1,531 +1,683 @@ - + - - $class + + - - AbstractServer + + - - _fixType - _fixType + + + - - Definition + + - - new $class + + - - $method - $method - $reflection->getDeclaringClass()->getName() - $reflection->getName() - $reflection->getName() + + + - - $invokeArgs - - - $method - $name + + + - - $method - $name + + + - - $class + + - - call_user_func_array($function, $params) + + - - new $class + + + + + + + + + + + + + + + + - - \Laminas\Server\Server - \Laminas\Server\Server - - - ! is_string($filename) - ! is_string($filename) + + + + + + + - - $dispatchArray + + - - $dispatchArray + + + + + + + + + + + + + + + + - - $method instanceof Method\Definition - null === $name + + - - false + + methods)]]> + methods)]]> - - Method\Definition + + - - $method + + + + + + + + - - $key + + - - $method - $method - $methods[$key] + + + + - - Method\Definition - Method\Definition - null|\Laminas\Server\Method\Definition - - - toArray + + - - $this->methods[$method] - current($this->methods) - next($this->methods) + + methods[$method]]]> + methods)]]> + methods)]]> + methods)]]> + methods)]]> + + methods)]]> + + + + - - is_object($class) + + - - $class - - - $key + + - - $value + + + class]]> + - - $class - $function - $method - $type + + + + + - - (string) $function - - - ! is_object($object) - $callback instanceof Callback - $prototype instanceof Prototype + + - - $prototype + + - - $key + + - - $prototype - $prototype - $signatures[] - $value + + + + + - - toArray + + - - $callback - $name + + + - - (string) $methodHelp - (string) $name - + + + - - $key + + - - $value + + - - $name + + - - (bool) $flag - (string) $description - (string) $name - (string) $type - - - ! is_string($index) && ! is_numeric($index) + + - - $index - $parameter + + + - - $key + + - - $index - $parameter - $parameter - $types[] - $value + + + + + + - - null|\Laminas\Server\Method\Parameter - - - getType + + - - $this->parameters[$index] + + parameters[$index]]]> - - (string) $parameter - - - ! is_string($function) + + + + + - - $this->class - $this->name + + class]]> + name]]> - - ! is_string($namespace) - is_string($string) + + - - $paramDesc - $returnDesc - $sigParams - $sigParamsDepth - - - $param - $returnDesc - $tmp - $type - array_shift($signature) - isset($this->paramDesc[$key]) ? $this->paramDesc[$key] : null + + + + + + + + + + + + + - - $this->sigParams[$level] - - - $name - $param - $paramDesc[] - $paramTypesTmp[] - $paramTypes[] - $returnDesc - $return[] - $root - $serializable[] - $tmp - $type - $type - $value - $value - $value + + + + + + + + + + + + + - - getEndPoints + + + - - $serializable - $this->prototypes - Prototype[] - string[] + + prototypes]]> + - - isset($this->paramDesc[$key]) ? $this->paramDesc[$key] : null + + + paramDesc[$key] ?? null]]> + - - $class - $namespace + + + + + + - - $this - - - getDescription - getDescription - getTypes - getTypes - + + + + + getDescription()]]> + docComment]]> + + + + - - $childEndPoints + + + + + - - $child - $childEndPoints - $endPoints[] - $value + + + + + - - getEndPoints - getValue - hasChildren - hasChildren + + + + + - - null - - - new static($value, $this) + + + + + - - $param instanceof ReflectionParameter - - - \Laminas\Server\Reflection\ReflectionReturnValue - string - - - getType - - - $this->return - $this->return->getType() - - - $this->return - - - $this->return - $this->return - + + return]]> + return]]> + return]]> + - - $this->name - - - ! is_string($namespace) - - - $namespace + + $this->config, + 'methods' => $this->methods, + 'namespace' => $this->namespace, + 'name' => $this->name, + ]]]> + + + + + + name]]> + + + config]]> + methods]]> + name]]> + namespace]]> + + + - - null - + + + + + + - - ReflectionFunction - ReflectionFunction + + + - - $this->class - - - $docComment - $this->classReflection->getName() + + + + + + class]]> + classReflection->getName()]]> + name]]> - - $docCommentList[] - $interfaceReflection - $interfaceReflectionList - $this->class + + class)]]> + + + class]]> + class]]> + name]]> - - getDocComment - getMethod - hasMethod - - - $docComment - - - $this->classReflection + + classReflection]]> - - $docCommentList + + - - ReflectionMethod + + + + + fetchRecursiveDocBlockFromParent($parentReflectionClass, $methodName)]]> + + + + + + + - - ! is_string($description) && (null !== $description) - ! is_string($type) && (null !== $type) + + + - - - $description - $type + + $this->position, + 'type' => $this->type, + 'description' => $this->description, + 'name' => $this->name, + 'functionName' => $this->functionName, + ]]]> + + + + + + functionName]]> + name]]> + + + __serialize()]]> + + + description]]> + functionName]]> + name]]> + position]]> + type]]> + + + getDeclaringClass() + ? [$r->getDeclaringClass()->getName(), $r->getDeclaringFunction()->getName()] + : $r->getDeclaringFunction()->getName()]]> + + + + - - getName + + - - $position + + - - (int) $index - - - ! is_string($description) && (null !== $description) - ! is_string($type) && (null !== $type) + + + - - $description - $type + + + - - $argv - + + + + + + + + + + - - $this->createMock(Server::class) - $this->createMock(Server::class) - $this->createMock(Server::class) - $this->createMock(Server::class) - - - Cache::class - - - $cacheFile + + createMock(Server::class)]]> + createMock(Server::class)]]> + createMock(Server::class)]]> + createMock(Server::class)]]> + + + - - $actual[] - $data - $data - $data - $data - $method + + + + + + + - - getName + + - - null - + + + + + + cacheFile]]> + cacheFile]]> + cacheFile]]> + cacheFile]]> + cacheFile]]> + cacheFile]]> + cacheFile]]> + cacheFile]]> + + + + + + + + + cacheFile]]> + - - $test['invokeArguments'] - $test['invokeArguments'] - $test['methodHelp'] - $test['methodHelp'] - $test['name'] - $test['name'] - $test['prototypes'] - $test['prototypes'] + + + + + + + + + + + + + - - $test - $test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - 1 - 1 - 1 + + + + - - $c - $endPoint - $endPointsArray[] - $types[] + + + - - getValue - getValue - - - var_export($types, 1) + + - - var_export($endPointsArray, 1) - var_export($test, 1) + + + - - $child1grand1 - $child1grand2 - $child2grand1 - $child2grand2great1 - $child2grand2great2 + + + + + + - - - '\Laminas\Server\Reflection' - + + + + + + + + + + + + system]]> + - - 1 + + - - $params + + - - var_export($param, 1) + + - - $var1 - $var1 - - - $params + + + + + + + + system]]> + + + + + + + + + + + - - '\Laminas\Server\Reflection\ReflectionParameter' - + + + + + - - testMethod - + + + + + + + + - - 'string' - 'string' - - - false - false - + + + + + + + + + + + + + + + + + + + + + + + + + - - string|struct|false + + diff --git a/psalm.xml.dist b/psalm.xml.dist index debf6323..ad86ddd9 100644 --- a/psalm.xml.dist +++ b/psalm.xml.dist @@ -5,6 +5,8 @@ xmlns="https://getpsalm.org/schema/config" xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" errorBaseline="psalm-baseline.xml" + findUnusedBaselineEntry="true" + findUnusedCode="true" > @@ -15,19 +17,6 @@ - - - - - - - - - - - - - diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..060b1d1a --- /dev/null +++ b/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "local>laminas/.github:renovate-config" + ] +} diff --git a/src/AbstractServer.php b/src/AbstractServer.php index 5961e812..4187616f 100644 --- a/src/AbstractServer.php +++ b/src/AbstractServer.php @@ -2,34 +2,31 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server; +use Override; use ReflectionClass; +use function call_user_func_array; +use function is_object; + /** * Abstract Server implementation */ abstract class AbstractServer implements Server { - /** - * @var bool Flag; whether or not overwriting existing methods is allowed - */ + /** @var bool Flag; whether or not overwriting existing methods is allowed */ protected $overwriteExistingMethods = false; - /** - * @var Definition - */ + /** @var Definition */ protected $table; /** * Constructor * * Setup server description - * */ public function __construct() { @@ -44,6 +41,7 @@ public function __construct() * * @return Definition */ + #[Override] public function getFunctions() { return $this->table; @@ -52,19 +50,24 @@ public function getFunctions() /** * Build callback for method signature * - * @param Reflection\AbstractFunction $reflection * @return Method\Callback */ protected function buildCallback(Reflection\AbstractFunction $reflection) { $callback = new Method\Callback(); if ($reflection instanceof Reflection\ReflectionMethod) { + /** @var string $declaringClass */ + $declaringClass = $reflection->getDeclaringClass()->getName(); + /** @var string $methodName */ + $methodName = $reflection->getName(); $callback->setType($reflection->isStatic() ? 'static' : 'instance') - ->setClass($reflection->getDeclaringClass()->getName()) - ->setMethod($reflection->getName()); + ->setClass($declaringClass) + ->setMethod($methodName); } elseif ($reflection instanceof Reflection\ReflectionFunction) { + /** @var string $functionName */ + $functionName = $reflection->getName(); $callback->setType('function') - ->setFunction($reflection->getName()); + ->setFunction($functionName); } return $callback; } @@ -74,7 +77,7 @@ protected function buildCallback(Reflection\AbstractFunction $reflection) * * @deprecated Since 2.7.0; method will be removed in 3.0, use * buildCallback() instead. - * @param Reflection\AbstractFunction $reflection + * * @return Method\Callback */ // @codingStandardsIgnoreStart @@ -87,16 +90,15 @@ protected function _buildCallback(Reflection\AbstractFunction $reflection) /** * Build a method signature * - * @param Reflection\AbstractFunction $reflection * @param null|string|object $class * @return Method\Definition - * @throws Exception\RuntimeException on duplicate entry + * @throws Exception\RuntimeException On duplicate entry. */ final protected function buildSignature(Reflection\AbstractFunction $reflection, $class = null) { - $ns = $reflection->getNamespace(); - $name = $reflection->getName(); - $method = empty($ns) ? $name : $ns . '.' . $name; + $ns = $reflection->getNamespace(); + $name = $reflection->getName(); + $method = empty($ns) ? $name : $ns . '.' . $name; if (! $this->overwriteExistingMethods && $this->table->hasMethod($method)) { throw new Exception\RuntimeException('Duplicate method registered: ' . $method); @@ -136,7 +138,7 @@ final protected function buildSignature(Reflection\AbstractFunction $reflection, * * @deprecated Since 2.7.0; method will be removed in 3.0, use * buildSignature() instead. - * @param Reflection\AbstractFunction $reflection + * * @param null|string|object $class * @return Method\Definition * @throws Exception\RuntimeException on duplicate entry @@ -153,8 +155,7 @@ protected function _buildSignature(Reflection\AbstractFunction $reflection, $cla * * @deprecated Since 2.7.0; method will be renamed to remove underscore * prefix in 3.0. - * @param Method\Definition $invokable - * @param array $params + * * @return mixed */ // @codingStandardsIgnoreStart @@ -164,7 +165,7 @@ protected function _dispatch(Method\Definition $invokable, array $params) $callback = $invokable->getCallback(); $type = $callback->getType(); - if ('function' == $type) { + if ('function' === $type) { $function = $callback->getFunction(); return call_user_func_array($function, $params); } @@ -172,7 +173,7 @@ protected function _dispatch(Method\Definition $invokable, array $params) $class = $callback->getClass(); $method = $callback->getMethod(); - if ('static' == $type) { + if ('static' === $type) { return call_user_func_array([$class, $method], $params); } @@ -183,7 +184,7 @@ protected function _dispatch(Method\Definition $invokable, array $params) $reflection = new ReflectionClass($class); $object = $reflection->newInstanceArgs($invokeArgs); } else { - $object = new $class; + $object = new $class(); } } return call_user_func_array([$object, $method], $params); diff --git a/src/Cache.php b/src/Cache.php index 85432568..6030889a 100644 --- a/src/Cache.php +++ b/src/Cache.php @@ -2,22 +2,36 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server; +use Laminas\Server\Server; use Laminas\Stdlib\ErrorHandler; +use function array_keys; +use function dirname; +use function file_exists; +use function file_get_contents; +use function file_put_contents; +use function in_array; +use function is_readable; +use function is_string; +use function is_writable; +use function serialize; +use function unlink; +use function unserialize; + +use const E_NOTICE; + /** * \Laminas\Server\Cache: cache server definitions + * + * @final This class should not be extended */ class Cache { - /** - * @var array Methods to skip when caching server - */ + /** @var array Methods to skip when caching server */ protected static $skipMethods = []; /** @@ -30,7 +44,6 @@ class Cache * on success. * * @param string $filename - * @param \Laminas\Server\Server $server * @return bool */ public static function save($filename, Server $server) @@ -79,7 +92,6 @@ public static function save($filename, Server $server) * * * @param string $filename - * @param \Laminas\Server\Server $server * @return bool */ public static function get($filename, Server $server) diff --git a/src/Client.php b/src/Client.php index d1ff252c..b69fd475 100644 --- a/src/Client.php +++ b/src/Client.php @@ -2,14 +2,13 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server; /** * Client Interface + * * @deprecated Since 2.9.0; Client is replaced by ClientInterface and will be removed in 3.0. */ interface Client diff --git a/src/ClientInterface.php b/src/ClientInterface.php index 93bae1bf..75a1f43b 100644 --- a/src/ClientInterface.php +++ b/src/ClientInterface.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server; diff --git a/src/Definition.php b/src/Definition.php index 2484e3c2..99327d94 100644 --- a/src/Definition.php +++ b/src/Definition.php @@ -2,29 +2,37 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server; use Countable; use Iterator; +use Laminas\Server\Exception\InvalidArgumentException; +use Override; use ReturnTypeWillChange; +use function array_key_exists; +use function count; +use function current; +use function is_array; +use function is_numeric; +use function key; +use function next; +use function reset; +use function sprintf; + /** * Server methods metadata + * + * @final This class should not be extended */ class Definition implements Countable, Iterator { - /** - * @var array Array of \Laminas\Server\Method\Definition objects - */ + /** @var array Array of \Laminas\Server\Method\Definition objects */ protected $methods = []; - /** - * @var bool Whether or not overwriting existing methods is allowed - */ + /** @var bool Whether or not overwriting existing methods is allowed */ protected $overwriteExistingMethods = false; /** @@ -43,7 +51,7 @@ public function __construct($methods = null) * Set flag indicating whether or not overwriting existing methods is allowed * * @param mixed $flag - * @return \Laminas\Server\Definition + * @return Definition */ public function setOverwriteExistingMethods($flag) { @@ -56,15 +64,15 @@ public function setOverwriteExistingMethods($flag) * * @param array|\Laminas\Server\Method\Definition $method * @param null|string $name - * @return \Laminas\Server\Definition - * @throws \Laminas\Server\Exception\InvalidArgumentException if duplicate or invalid method provided + * @return Definition + * @throws InvalidArgumentException If duplicate or invalid method provided. */ public function addMethod($method, $name = null) { if (is_array($method)) { $method = new Method\Definition($method); } elseif (! $method instanceof Method\Definition) { - throw new Exception\InvalidArgumentException('Invalid method provided'); + throw new InvalidArgumentException('Invalid method provided'); } if (is_numeric($name)) { @@ -76,11 +84,11 @@ public function addMethod($method, $name = null) $name = $method->getName(); } if (null === $name) { - throw new Exception\InvalidArgumentException('No method name provided'); + throw new InvalidArgumentException('No method name provided'); } if (! $this->overwriteExistingMethods && array_key_exists($name, $this->methods)) { - throw new Exception\InvalidArgumentException(sprintf('Method by name of "%s" already exists', $name)); + throw new InvalidArgumentException(sprintf('Method by name of "%s" already exists', $name)); } $this->methods[$name] = $method; return $this; @@ -90,7 +98,7 @@ public function addMethod($method, $name = null) * Add multiple methods * * @param array $methods Array of \Laminas\Server\Method\Definition objects or arrays - * @return \Laminas\Server\Definition + * @return Definition */ public function addMethods(array $methods) { @@ -104,7 +112,7 @@ public function addMethods(array $methods) * Set all methods at once (overwrite) * * @param array $methods Array of \Laminas\Server\Method\Definition objects or arrays - * @return \Laminas\Server\Definition + * @return Definition */ public function setMethods(array $methods) { @@ -128,7 +136,7 @@ public function hasMethod($method) * Get a given method definition * * @param string $method - * @return null|\Laminas\Server\Method\Definition + * @return null|false|\Laminas\Server\Method\Definition */ public function getMethod($method) { @@ -152,7 +160,7 @@ public function getMethods() * Remove a method definition * * @param string $method - * @return \Laminas\Server\Definition + * @return Definition */ public function removeMethod($method) { @@ -165,7 +173,7 @@ public function removeMethod($method) /** * Clear all method definitions * - * @return \Laminas\Server\Definition + * @return Definition */ public function clearMethods() { @@ -184,6 +192,7 @@ public function toArray() foreach ($this->getMethods() as $key => $method) { $methods[$key] = $method->toArray(); } + return $methods; } @@ -192,6 +201,7 @@ public function toArray() * * @return int */ + #[Override] #[ReturnTypeWillChange] public function count() { @@ -203,6 +213,7 @@ public function count() * * @return Method\Definition */ + #[Override] #[ReturnTypeWillChange] public function current() { @@ -214,6 +225,7 @@ public function current() * * @return int|string */ + #[Override] #[ReturnTypeWillChange] public function key() { @@ -225,6 +237,7 @@ public function key() * * @return Method\Definition */ + #[Override] #[ReturnTypeWillChange] public function next() { @@ -236,6 +249,7 @@ public function next() * * @return void */ + #[Override] #[ReturnTypeWillChange] public function rewind() { @@ -247,6 +261,7 @@ public function rewind() * * @return bool */ + #[Override] #[ReturnTypeWillChange] public function valid() { diff --git a/src/Exception/BadMethodCallException.php b/src/Exception/BadMethodCallException.php index 18959d2f..c8f42f70 100644 --- a/src/Exception/BadMethodCallException.php +++ b/src/Exception/BadMethodCallException.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Exception; diff --git a/src/Exception/ExceptionInterface.php b/src/Exception/ExceptionInterface.php index de0a26e3..66479616 100644 --- a/src/Exception/ExceptionInterface.php +++ b/src/Exception/ExceptionInterface.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Exception; diff --git a/src/Exception/InvalidArgumentException.php b/src/Exception/InvalidArgumentException.php index 1247fa23..b5b6ad75 100644 --- a/src/Exception/InvalidArgumentException.php +++ b/src/Exception/InvalidArgumentException.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Exception; diff --git a/src/Exception/RuntimeException.php b/src/Exception/RuntimeException.php index cfd354ab..efd5f226 100644 --- a/src/Exception/RuntimeException.php +++ b/src/Exception/RuntimeException.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Exception; diff --git a/src/Method/Callback.php b/src/Method/Callback.php index 06dad2c5..ac6ec729 100644 --- a/src/Method/Callback.php +++ b/src/Method/Callback.php @@ -2,42 +2,39 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Method; use Laminas\Server; +use function in_array; +use function is_array; +use function is_object; +use function method_exists; +use function sprintf; +use function ucfirst; + /** * Method callback metadata + * + * @final This class should not be extended */ class Callback { - /** - * @var string Class name for class method callback - */ + /** @var string Class name for class method callback */ protected $class; - /** - * @var string|callable Function name or callable for function callback - */ + /** @var string|callable Function name or callable for function callback */ protected $function; - /** - * @var string Method name for class method callback - */ + /** @var string Method name for class method callback */ protected $method; - /** - * @var string Callback type - */ + /** @var string Callback type */ protected $type; - /** - * @var array Valid callback types - */ + /** @var array Valid callback types */ protected $types = ['function', 'static', 'instance']; /** @@ -55,8 +52,7 @@ public function __construct($options = null) /** * Set object state from array of options * - * @param array $options - * @return \Laminas\Server\Method\Callback + * @return Callback */ public function setOptions(array $options) { @@ -73,12 +69,12 @@ public function setOptions(array $options) * Set callback class * * @param string $class - * @return \Laminas\Server\Method\Callback + * @return Callback */ public function setClass($class) { if (is_object($class)) { - $class = get_class($class); + $class = $class::class; } $this->class = $class; return $this; @@ -98,7 +94,7 @@ public function getClass() * Set callback function * * @param string|callable $function - * @return \Laminas\Server\Method\Callback + * @return Callback */ public function setFunction($function) { @@ -121,7 +117,7 @@ public function getFunction() * Set callback class method * * @param string $method - * @return \Laminas\Server\Method\Callback + * @return Callback */ public function setMethod($method) { @@ -143,7 +139,7 @@ public function getMethod() * Set callback type * * @param string $type - * @return \Laminas\Server\Method\Callback + * @return Callback * @throws Server\Exception\InvalidArgumentException */ public function setType($type) @@ -176,11 +172,11 @@ public function getType() */ public function toArray() { - $type = $this->getType(); + $type = $this->getType(); $array = [ 'type' => $type, ]; - if ('function' == $type) { + if ('function' === $type) { $array['function'] = $this->getFunction(); } else { $array['class'] = $this->getClass(); diff --git a/src/Method/Definition.php b/src/Method/Definition.php index fa431982..9439f6ff 100644 --- a/src/Method/Definition.php +++ b/src/Method/Definition.php @@ -2,47 +2,43 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Method; use Laminas\Server; +use Laminas\Server\Method\Callback; +use Laminas\Server\Method\Prototype; + +use function is_array; +use function is_object; +use function method_exists; +use function sprintf; +use function ucfirst; /** * Method definition metadata + * + * @final This class should not be extended */ class Definition { - /** - * @var \Laminas\Server\Method\Callback - */ + /** @var Callback */ protected $callback; - /** - * @var array - */ + /** @var array */ protected $invokeArguments = []; - /** - * @var string - */ + /** @var string */ protected $methodHelp = ''; - /** - * @var string - */ + /** @var string */ protected $name; - /** - * @var null|object - */ + /** @var null|object */ protected $object; - /** - * @var array Array of \Laminas\Server\Method\Prototype objects - */ + /** @var array Array of \Laminas\Server\Method\Prototype objects */ protected $prototypes = []; /** @@ -60,8 +56,7 @@ public function __construct($options = null) /** * Set object state from options * - * @param array $options - * @return \Laminas\Server\Method\Definition + * @return Definition */ public function setOptions(array $options) { @@ -78,7 +73,7 @@ public function setOptions(array $options) * Set method name * * @param string $name - * @return \Laminas\Server\Method\Definition + * @return Definition */ public function setName($name) { @@ -99,9 +94,9 @@ public function getName() /** * Set method callback * - * @param array|\Laminas\Server\Method\Callback $callback + * @param array|Callback $callback * @throws Server\Exception\InvalidArgumentException - * @return \Laminas\Server\Method\Definition + * @return Definition */ public function setCallback($callback) { @@ -117,7 +112,7 @@ public function setCallback($callback) /** * Get method callback * - * @return \Laminas\Server\Method\Callback + * @return Callback */ public function getCallback() { @@ -127,9 +122,9 @@ public function getCallback() /** * Add prototype to method definition * - * @param array|\Laminas\Server\Method\Prototype $prototype + * @param array|Prototype $prototype * @throws Server\Exception\InvalidArgumentException - * @return \Laminas\Server\Method\Definition + * @return Definition */ public function addPrototype($prototype) { @@ -146,7 +141,7 @@ public function addPrototype($prototype) * Add multiple prototypes at once * * @param array $prototypes Array of \Laminas\Server\Method\Prototype objects or arrays - * @return \Laminas\Server\Method\Definition + * @return Definition */ public function addPrototypes(array $prototypes) { @@ -160,7 +155,7 @@ public function addPrototypes(array $prototypes) * Set all prototypes at once (overwrites) * * @param array $prototypes Array of \Laminas\Server\Method\Prototype objects or arrays - * @return \Laminas\Server\Method\Definition + * @return Definition */ public function setPrototypes(array $prototypes) { @@ -183,7 +178,7 @@ public function getPrototypes() * Set method help * * @param string $methodHelp - * @return \Laminas\Server\Method\Definition + * @return Definition */ public function setMethodHelp($methodHelp) { @@ -206,7 +201,7 @@ public function getMethodHelp() * * @param object $object * @throws Server\Exception\InvalidArgumentException - * @return \Laminas\Server\Method\Definition + * @return Definition */ public function setObject($object) { @@ -233,8 +228,7 @@ public function getObject() /** * Set invoke arguments * - * @param array $invokeArguments - * @return \Laminas\Server\Method\Definition + * @return Definition */ public function setInvokeArguments(array $invokeArguments) { diff --git a/src/Method/Parameter.php b/src/Method/Parameter.php index cfd2125c..8a4975ff 100644 --- a/src/Method/Parameter.php +++ b/src/Method/Parameter.php @@ -2,14 +2,18 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Method; +use function is_array; +use function method_exists; +use function ucfirst; + /** * Method parameter metadata + * + * @final This class should not be extended */ class Parameter { @@ -63,8 +67,7 @@ public function __construct($options = null) /** * Set object state from array of options * - * @param array $options - * @return \Laminas\Server\Method\Parameter + * @return Parameter */ public function setOptions(array $options) { @@ -81,7 +84,7 @@ public function setOptions(array $options) * Set default value * * @param mixed $defaultValue - * @return \Laminas\Server\Method\Parameter + * @return Parameter */ public function setDefaultValue($defaultValue) { @@ -103,7 +106,7 @@ public function getDefaultValue() * Set description * * @param mixed $description - * @return \Laminas\Server\Method\Parameter + * @return Parameter */ public function setDescription($description) { @@ -125,7 +128,7 @@ public function getDescription() * Set name * * @param mixed $name - * @return \Laminas\Server\Method\Parameter + * @return Parameter */ public function setName($name) { @@ -147,7 +150,7 @@ public function getName() * Set optional flag * * @param mixed $flag - * @return \Laminas\Server\Method\Parameter + * @return Parameter */ public function setOptional($flag) { @@ -169,7 +172,7 @@ public function isOptional() * Set parameter type * * @param mixed $type - * @return \Laminas\Server\Method\Parameter + * @return Parameter */ public function setType($type) { diff --git a/src/Method/Prototype.php b/src/Method/Prototype.php index ac7e7916..c8f796de 100644 --- a/src/Method/Prototype.php +++ b/src/Method/Prototype.php @@ -2,30 +2,34 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Method; +use Laminas\Server\Method\Parameter; + +use function array_key_exists; +use function count; +use function is_array; +use function is_numeric; +use function is_string; +use function method_exists; +use function ucfirst; + /** * Method prototype metadata + * + * @final This class should not be extended */ class Prototype { - /** - * @var string Return type - */ + /** @var string Return type */ protected $returnType = 'void'; - /** - * @var array Map parameter names to parameter index - */ + /** @var array Map parameter names to parameter index */ protected $parameterNameMap = []; - /** - * @var array Method parameters - */ + /** @var array Method parameters */ protected $parameters = []; /** @@ -44,7 +48,7 @@ public function __construct($options = null) * Set return value * * @param string $returnType - * @return \Laminas\Server\Method\Prototype + * @return Prototype */ public function setReturnType($returnType) { @@ -66,16 +70,16 @@ public function getReturnType() * Add a parameter * * @param string|Parameter $parameter - * @return \Laminas\Server\Method\Prototype + * @return Prototype */ public function addParameter($parameter) { if ($parameter instanceof Parameter) { - $this->parameters[] = $parameter; - $name = $parameter->getName(); + $this->parameters[] = $parameter; + $name = $parameter->getName(); $this->parameterNameMap[$name] = count($this->parameters) - 1; } else { - $parameter = new Parameter([ + $parameter = new Parameter([ 'type' => $parameter, ]); $this->parameters[] = $parameter; @@ -86,8 +90,7 @@ public function addParameter($parameter) /** * Add parameters * - * @param array $parameters - * @return \Laminas\Server\Method\Prototype + * @return Prototype */ public function addParameters(array $parameters) { @@ -100,8 +103,7 @@ public function addParameters(array $parameters) /** * Set parameters * - * @param array $parameters - * @return \Laminas\Server\Method\Prototype + * @return Prototype */ public function setParameters(array $parameters) { @@ -139,12 +141,12 @@ public function getParameterObjects() * Retrieve a single parameter by name or index * * @param string|int $index - * @return null|\Laminas\Server\Method\Parameter + * @return null|Parameter */ public function getParameter($index) { if (! is_string($index) && ! is_numeric($index)) { - return; + return null; } if (array_key_exists($index, $this->parameterNameMap)) { $index = $this->parameterNameMap[$index]; @@ -152,14 +154,13 @@ public function getParameter($index) if (array_key_exists($index, $this->parameters)) { return $this->parameters[$index]; } - return; + return null; } /** * Set object state from array * - * @param array $options - * @return \Laminas\Server\Method\Prototype + * @return Prototype */ public function setOptions(array $options) { diff --git a/src/Reflection.php b/src/Reflection.php index 1e26967f..3b8aba3a 100644 --- a/src/Reflection.php +++ b/src/Reflection.php @@ -2,17 +2,27 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server; +use Laminas\Server\Reflection\Exception\InvalidArgumentException; use Laminas\Server\Reflection\ReflectionClass; use Laminas\Server\Reflection\ReflectionFunction; +use ReflectionObject; + +use function class_exists; +use function function_exists; +use function in_array; +use function is_array; +use function is_object; +use function is_string; +use function sprintf; /** * Reflection for determining method signatures to use with server classes + * + * @final This class should not be extended */ class Reflection { @@ -30,21 +40,21 @@ class Reflection * @param string $namespace Optional namespace with which to prefix the * method name (used for the signature key). Primarily to avoid collisions, * also for XmlRpc namespacing - * @return \Laminas\Server\Reflection\ReflectionClass - * @throws \Laminas\Server\Reflection\Exception\InvalidArgumentException + * @return ReflectionClass + * @throws InvalidArgumentException */ public static function reflectClass($class, $argv = false, $namespace = '') { if (is_object($class)) { - $reflection = new \ReflectionObject($class); + $reflection = new ReflectionObject($class); } elseif (class_exists($class)) { $reflection = new \ReflectionClass($class); } else { - throw new Reflection\Exception\InvalidArgumentException('Invalid class or object passed to attachClass()'); + throw new InvalidArgumentException('Invalid class or object passed to attachClass()'); } if ($argv && ! is_array($argv)) { - throw new Reflection\Exception\InvalidArgumentException('Invalid argv argument passed to reflectClass'); + throw new InvalidArgumentException('Invalid argv argument passed to reflectClass'); } return new ReflectionClass($reflection, $namespace, $argv); @@ -64,13 +74,13 @@ public static function reflectClass($class, $argv = false, $namespace = '') * @param string $namespace Optional namespace with which to prefix the * function name (used for the signature key). Primarily to avoid * collisions, also for XmlRpc namespacing - * @return \Laminas\Server\Reflection\ReflectionFunction - * @throws \Laminas\Server\Reflection\Exception\InvalidArgumentException + * @return ReflectionFunction + * @throws InvalidArgumentException */ public static function reflectFunction($function, $argv = false, $namespace = '') { if (! is_string($function) || ! function_exists($function)) { - throw new Reflection\Exception\InvalidArgumentException(sprintf( + throw new InvalidArgumentException(sprintf( 'Invalid function "%s" passed to reflectFunction', $function )); @@ -80,7 +90,7 @@ public static function reflectFunction($function, $argv = false, $namespace = '' $argv = in_array($argv, [false, null], true) ? [] : $argv; if (! is_array($argv)) { - throw new Reflection\Exception\InvalidArgumentException('Invalid argv argument passed to reflectFunction'); + throw new InvalidArgumentException('Invalid argv argument passed to reflectFunction'); } return new ReflectionFunction(new \ReflectionFunction($function), $namespace, $argv); diff --git a/src/Reflection/AbstractFunction.php b/src/Reflection/AbstractFunction.php index ba785fad..730d10b3 100644 --- a/src/Reflection/AbstractFunction.php +++ b/src/Reflection/AbstractFunction.php @@ -2,12 +2,13 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Reflection; +use Deprecated; +use Laminas\Code\Reflection\DocBlock\Tag\ParamTag; +use Laminas\Code\Reflection\DocBlock\Tag\ReturnTag; use Laminas\Code\Reflection\DocBlockReflection; use ReflectionClass as PhpReflectionClass; use ReflectionFunction as PhpReflectionFunction; @@ -16,6 +17,18 @@ use ReflectionNamedType; use ReflectionParameter as PhpReflectionParameter; +use function array_merge; +use function array_shift; +use function array_unshift; +use function call_user_func_array; +use function count; +use function get_object_vars; +use function is_array; +use function is_string; +use function method_exists; +use function preg_match; +use function property_exists; + /** * Function/Method Reflection * @@ -28,13 +41,12 @@ */ abstract class AbstractFunction { - /** - * @var ReflectionFunctionAbstract - */ + /** @var ReflectionFunctionAbstract */ protected $reflection; /** * Additional arguments to pass to method on invocation + * * @var array */ protected $argv = []; @@ -44,42 +56,49 @@ abstract class AbstractFunction * server class, e.g., to indicate whether or not to instantiate a class). * Associative array; access is as properties via {@link __get()} and * {@link __set()} + * * @var array */ protected $config = []; /** * Declaring class (needed for when serialization occurs) + * * @var string */ protected $class; /** * Function name (needed for serialization) + * * @var string */ protected $name; /** * Function/method description + * * @var string */ protected $description = ''; /** * Namespace with which to prefix function/method name + * * @var string */ protected $namespace; /** * Prototypes + * * @var array */ protected $prototypes = []; /** * Phpdoc comment + * * @var string */ protected $docComment = ''; @@ -90,6 +109,7 @@ abstract class AbstractFunction /** @var string */ protected $returnDesc; + /** @var array */ protected $paramDesc; /** @var array */ @@ -101,7 +121,6 @@ abstract class AbstractFunction /** * Constructor * - * @param ReflectionFunctionAbstract $r * @param null|string $namespace * @param null|array $argv * @throws Exception\InvalidArgumentException @@ -139,7 +158,6 @@ public function __construct(ReflectionFunctionAbstract $r, $namespace = null, $a * each array in {@link $sigParams}, adding every value of the next level * to the current value (unless the current value is null). * - * @param \Laminas\Server\Reflection\Node $parent * @param int $level * @return void */ @@ -187,9 +205,7 @@ protected function buildTree() * @param array $return Array of return types * @param string $returnDesc Return value description * @param array $paramTypes Array of arguments (each an array of types) - * @param array $paramDesc Array of parameter descriptions - * - * @return void + * @param array $paramDesc Array of parameter descriptions */ protected function buildSignatures($return, $returnDesc, $paramTypes, $paramDesc): void { @@ -234,7 +250,7 @@ protected function buildSignatures($return, $returnDesc, $paramTypes, $paramDesc $param = new ReflectionParameter( $params[$key], $type, - (isset($this->paramDesc[$key]) ? $this->paramDesc[$key] : null) + $this->paramDesc[$key] ?? null ); $param->setPosition($key); $tmp[] = $param; @@ -252,7 +268,6 @@ protected function buildSignatures($return, $returnDesc, $paramTypes, $paramDesc * ReflectionFunction and parsing of DocBlock @param and @return values. * * @throws Exception\RuntimeException - * * @return void */ protected function reflect() @@ -265,11 +280,11 @@ protected function reflect() $this->docComment = $function->getDocComment(); } - $scanner = new DocBlockReflection(($this->docComment) ? : '/***/'); - $helpText = $scanner->getLongDescription(); - /* @var \Laminas\Code\Reflection\DocBlock\Tag\ParamTag[] $paramTags */ + $scanner = new DocBlockReflection($this->docComment ? : '/***/'); + $helpText = $scanner->getLongDescription(); + /** @var ParamTag[] $paramTags */ $paramTags = $scanner->getTags('param'); - /* @var \Laminas\Code\Reflection\DocBlock\Tag\ReturnTag $returnTag */ + /** @var ReturnTag $returnTag */ $returnTag = $scanner->getTag('return'); if (empty($helpText)) { @@ -296,7 +311,6 @@ protected function reflect() if (empty($paramTags)) { foreach ($parameters as $param) { // Suppressing, because false positive - /** @psalm-suppress TooManyArguments **/ $paramTypesTmp[] = [$this->paramIsArray($param) ? 'array' : 'mixed']; $paramDesc[] = ''; } @@ -304,7 +318,7 @@ protected function reflect() $paramDesc = []; foreach ($paramTags as $paramTag) { $paramTypesTmp[] = $paramTag->getTypes(); - $paramDesc[] = ($paramTag->getDescription()) ? : ''; + $paramDesc[] = $paramTag->getDescription() ? : ''; } } @@ -316,7 +330,7 @@ protected function reflect() $paramTypesTmp[$i] = ['mixed']; $paramDesc[$i] = ''; } - } elseif ($nParamTypesTmp != $paramCount) { + } elseif ($nParamTypesTmp !== $paramCount) { throw new Exception\RuntimeException( 'Variable number of arguments is not supported for services (except optional parameters). ' . 'Number of function arguments must correspond to actual number of arguments described in a docblock.' @@ -362,11 +376,7 @@ public function __call($method, $args) */ public function __get($key) { - if (isset($this->config[$key])) { - return $this->config[$key]; - } - - return; + return $this->config[$key] ?? null; } /** @@ -464,20 +474,42 @@ public function getInvokeArguments() /** * @return string[] */ + #[Deprecated('Use __serialize instead')] public function __sleep() { - $serializable = []; - foreach ($this as $name => $value) { - if ($value instanceof PhpReflectionFunction + return $this->__serialize(); + } + + /** + * @return string[] + */ + public function __serialize(): array + { + $data = []; + foreach (get_object_vars($this) as $name => $value) { + if ( + $value instanceof PhpReflectionFunction || $value instanceof PhpReflectionMethod ) { - continue; + continue; // never serialize reflection objects } - $serializable[] = $name; + $data[$name] = $value; } - return $serializable; + $data['__reflection_kind'] = + $this->reflection instanceof PhpReflectionMethod ? 'method' : 'function'; + + return $data; + } + + /** + * @return void + */ + #[Deprecated('Use __unserialize instead')] + public function __wakeup() + { + $this->__unserialize($this->__serialize()); } /** @@ -485,13 +517,20 @@ public function __sleep() * * Reflection needs explicit instantiation to work correctly. Re-instantiate * reflection object on wakeup. - * - * @return void */ - public function __wakeup() + public function __unserialize(array $data): void { - if ($this->reflection instanceof PhpReflectionMethod) { - $class = new PhpReflectionClass($this->class); + $kind = $data['__reflection_kind'] ?? 'function'; + unset($data['__reflection_kind']); + + foreach ($data as $name => $value) { + if (property_exists($this, $name)) { + $this->$name = $value; + } + } + + if ($kind === 'method') { + $class = new PhpReflectionClass($this->class); $this->reflection = new PhpReflectionMethod($class->newInstance(), $this->name); } else { $this->reflection = new PhpReflectionFunction($this->name); @@ -500,11 +539,7 @@ public function __wakeup() private function paramIsArray(PhpReflectionParameter $param): bool { - if (PHP_VERSION_ID >= 80000) { - $type = $param->getType(); - return $type instanceof ReflectionNamedType && $type->getName() === 'array'; - } - - return $param->isArray(); + $type = $param->getType(); + return $type instanceof ReflectionNamedType && $type->getName() === 'array'; } } diff --git a/src/Reflection/Exception/BadMethodCallException.php b/src/Reflection/Exception/BadMethodCallException.php index 42ac3466..8659eb67 100644 --- a/src/Reflection/Exception/BadMethodCallException.php +++ b/src/Reflection/Exception/BadMethodCallException.php @@ -2,14 +2,15 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Reflection\Exception; use Laminas\Server\Exception; +/** + * @final This class should not be extended + */ class BadMethodCallException extends Exception\BadMethodCallException implements ExceptionInterface { } diff --git a/src/Reflection/Exception/ExceptionInterface.php b/src/Reflection/Exception/ExceptionInterface.php index c8549b71..e7ed74b0 100644 --- a/src/Reflection/Exception/ExceptionInterface.php +++ b/src/Reflection/Exception/ExceptionInterface.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Reflection\Exception; diff --git a/src/Reflection/Exception/InvalidArgumentException.php b/src/Reflection/Exception/InvalidArgumentException.php index 52dc1af1..4ab98b9c 100644 --- a/src/Reflection/Exception/InvalidArgumentException.php +++ b/src/Reflection/Exception/InvalidArgumentException.php @@ -2,14 +2,15 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Reflection\Exception; use Laminas\Server\Exception; +/** + * @final This class should not be extended + */ class InvalidArgumentException extends Exception\InvalidArgumentException implements ExceptionInterface { } diff --git a/src/Reflection/Exception/RuntimeException.php b/src/Reflection/Exception/RuntimeException.php index 6a8b7339..5fa49324 100644 --- a/src/Reflection/Exception/RuntimeException.php +++ b/src/Reflection/Exception/RuntimeException.php @@ -2,14 +2,15 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Reflection\Exception; use Laminas\Server\Exception; +/** + * @final This class should not be extended + */ class RuntimeException extends Exception\RuntimeException implements ExceptionInterface { } diff --git a/src/Reflection/Node.php b/src/Reflection/Node.php index 22efb662..b136ecb5 100644 --- a/src/Reflection/Node.php +++ b/src/Reflection/Node.php @@ -2,45 +2,46 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Reflection; +use function array_merge; +use function count; + /** * Node Tree class for Laminas\Server reflection operations */ class Node { - /** - * Node value - * @var mixed - */ - protected $value = null; - /** * Array of child nodes (if any) + * * @var array */ protected $children = []; /** * Parent node (if any) - * @var \Laminas\Server\Reflection\Node + * + * @var Node */ - protected $parent = null; + protected $parent; /** * Constructor * * @param mixed $value - * @param \Laminas\Server\Reflection\Node $parent Optional - * @return \Laminas\Server\Reflection\Node + * @param Node $parent Optional + * @return Node */ - public function __construct($value, Node $parent = null) - { - $this->value = $value; + public function __construct( + /** + * Node value + */ + protected $value, + ?Node $parent = null + ) { if (null !== $parent) { $this->setParent($parent, true); } @@ -51,7 +52,12 @@ public function __construct($value, Node $parent = null) /** * Set parent node * + * //phpcs:disable SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly.ReferenceViaFullyQualifiedName + * //phpcs:disable SlevomatCodingStandard.TypeHints.ParameterTypeHint.UselessAnnotation + * * @param \Laminas\Server\Reflection\Node $node + * //phpcs:enable SlevomatCodingStandard.TypeHints.ParameterTypeHint.UselessAnnotation + * //phpcs:enable SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly.ReferenceViaFullyQualifiedName * @param bool $new Whether or not the child node is newly created * and should always be attached * @return void @@ -71,19 +77,16 @@ public function setParent(Node $node, $new = false) * * @param mixed $value * @access public - * @return \Laminas\Server\Reflection\Node New child node + * @return Node New child node */ public function createChild($value) { - $child = new static($value, $this); - - return $child; + return new static($value, $this); } /** * Attach a child node * - * @param \Laminas\Server\Reflection\Node $node * @return void */ public function attachChild(Node $node) @@ -118,7 +121,7 @@ public function hasChildren() /** * Return the parent node * - * @return null|\Laminas\Server\Reflection\Node + * @return null|Node */ public function getParent() { diff --git a/src/Reflection/Prototype.php b/src/Reflection/Prototype.php index 45891d2a..d09b6b1c 100644 --- a/src/Reflection/Prototype.php +++ b/src/Reflection/Prototype.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Reflection; @@ -12,16 +10,25 @@ * Method/Function prototypes * * Contains accessors for the return value and all method arguments. + * + * @final This class should not be extended */ class Prototype { /** @var ReflectionParameter[] */ protected $params; + /** + * @deprecated This property was previously undeclared therefore it requires public access to maintain BC. + * It will be declared private in the next major version of this component. + * + * @var ReflectionReturnValue + */ + public $return; + /** * Constructor * - * @param ReflectionReturnValue $return * @param ReflectionParameter[] $params * @throws Exception\InvalidArgumentException */ @@ -51,7 +58,7 @@ public function getReturnType() /** * Retrieve the return value object * - * @return \Laminas\Server\Reflection\ReflectionReturnValue + * @return ReflectionReturnValue */ public function getReturnValue() { diff --git a/src/Reflection/ReflectionClass.php b/src/Reflection/ReflectionClass.php index c122690f..65b43017 100644 --- a/src/Reflection/ReflectionClass.php +++ b/src/Reflection/ReflectionClass.php @@ -2,49 +2,62 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Reflection; +use Deprecated; use ReflectionClass as PhpReflectionClass; +use function call_user_func_array; +use function is_array; +use function is_string; +use function method_exists; +use function preg_match; +use function str_starts_with; + /** * Class/Object reflection * * Proxies calls to a ReflectionClass object, and decorates getMethods() by * creating its own list of {@link Laminas\Server\Reflection\ReflectionMethod}s. + * + * @final This class should not be extended */ class ReflectionClass { /** * Optional configuration parameters; accessible via {@link __get} and * {@link __set()} + * * @var array */ protected $config = []; /** * Array of {@link \Laminas\Server\Reflection\Method}s + * * @var array */ protected $methods = []; /** * Namespace + * * @var string */ - protected $namespace = null; + protected $namespace; /** * ReflectionClass object + * * @var PhpReflectionClass */ protected $reflection; /** * Reflection class name (needed for serialization) + * * @var string */ protected $name; @@ -55,21 +68,20 @@ class ReflectionClass * Create array of dispatchable methods, each a * {@link Laminas\Server\Reflection\ReflectionMethod}. Sets reflection object property. * - * @param PhpReflectionClass $reflection * @param string $namespace * @param mixed $argv */ public function __construct(PhpReflectionClass $reflection, $namespace = null, $argv = false) { $this->reflection = $reflection; - $this->name = $reflection->getName(); + $this->name = $reflection->getName(); $this->setNamespace($namespace); $argv = is_array($argv) ? $argv : []; foreach ($reflection->getMethods() as $method) { // Don't aggregate magic methods - if ('__' == substr($method->getName(), 0, 2)) { + if (str_starts_with($method->getName(), '__')) { continue; } @@ -108,11 +120,7 @@ public function __call($method, $args) */ public function __get($key) { - if (isset($this->config[$key])) { - return $this->config[$key]; - } - - return; + return $this->config[$key] ?? null; } /** @@ -171,24 +179,51 @@ public function setNamespace($namespace) $this->namespace = $namespace; } + /** + * @return void + */ + #[Deprecated('Use __unserialize instead')] + public function __wakeup() + { + $this->__unserialize($this->__serialize()); + } + /** * Wakeup from serialization * * Reflection needs explicit instantiation to work correctly. Re-instantiate * reflection object on wakeup. - * - * @return void */ - public function __wakeup() + public function __unserialize(array $data): void { + $this->config = $data['config'] ?? ''; + $this->methods = $data['methods'] ?? ''; + $this->namespace = $data['namespace'] ?? ''; + $this->name = $data['name'] ?? ''; + + // Restore runtime-only dependency $this->reflection = new PhpReflectionClass($this->name); } /** * @return string[] */ + #[Deprecated('Use __serialize instead')] public function __sleep() { - return ['config', 'methods', 'namespace', 'name']; + return $this->__serialize(); + } + + /** + * @return string[] + */ + public function __serialize(): array + { + return [ + 'config' => $this->config, + 'methods' => $this->methods, + 'namespace' => $this->namespace, + 'name' => $this->name, + ]; } } diff --git a/src/Reflection/ReflectionFunction.php b/src/Reflection/ReflectionFunction.php index 17ec0142..73616671 100644 --- a/src/Reflection/ReflectionFunction.php +++ b/src/Reflection/ReflectionFunction.php @@ -2,14 +2,14 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Reflection; /** * Function Reflection + * + * @final This class should not be extended */ class ReflectionFunction extends AbstractFunction { diff --git a/src/Reflection/ReflectionMethod.php b/src/Reflection/ReflectionMethod.php index 46a0ca5c..496da778 100644 --- a/src/Reflection/ReflectionMethod.php +++ b/src/Reflection/ReflectionMethod.php @@ -2,30 +2,42 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Reflection; +use Override; + +use function array_map; +use function array_merge; +use function implode; +use function str_contains; +use function str_replace; + +use const PHP_EOL; + /** * Method Reflection + * + * @final This class should not be extended */ class ReflectionMethod extends AbstractFunction { /** * Doc block inherit tag for search */ - const INHERIT_TAG = '{@inheritdoc}'; + public const INHERIT_TAG = '{@inheritdoc}'; /** * Parent class name + * * @var string */ protected $class; /** * Parent class reflection + * * @var ReflectionClass|\ReflectionClass */ protected $classReflection; @@ -33,8 +45,6 @@ class ReflectionMethod extends AbstractFunction /** * Constructor * - * @param ReflectionClass $class - * @param \ReflectionMethod $r * @param string $namespace * @param array $argv */ @@ -57,7 +67,7 @@ public function __construct(ReflectionClass $class, \ReflectionMethod $r, $names // If method call, need to store some info on the class $this->class = $class->getName(); - $this->name = $r->getName(); + $this->name = $r->getName(); // Perform some introspection $this->reflect(); @@ -78,16 +88,19 @@ public function getDeclaringClass() * * Reflection needs explicit instantiation to work correctly. Re-instantiate * reflection object on wakeup. - * - * @return void */ - public function __wakeup() + #[Override] + public function __unserialize(array $data): void { + $this->class = $data['class']; + $this->name = $data['name']; + $this->classReflection = new ReflectionClass( new \ReflectionClass($this->class), $this->getNamespace(), $this->getInvokeArguments() ); + $this->reflection = new \ReflectionMethod($this->classReflection->getName(), $this->name); } @@ -96,10 +109,11 @@ public function __wakeup() * * @return void */ + #[Override] protected function reflect() { $docComment = $this->reflection->getDocComment(); - if (strpos($docComment, self::INHERIT_TAG) !== false) { + if (str_contains($docComment, self::INHERIT_TAG)) { $this->docComment = $this->fetchRecursiveDocComment(); } @@ -114,7 +128,7 @@ protected function reflect() private function fetchRecursiveDocComment() { $currentMethodName = $this->reflection->getName(); - $docCommentList[] = $this->reflection->getDocComment(); + $docCommentList[] = $this->reflection->getDocComment(); // fetch all doc blocks for method from parent classes $docCommentFetched = $this->fetchRecursiveDocBlockFromParent($this->classReflection, $currentMethodName); @@ -122,7 +136,6 @@ private function fetchRecursiveDocComment() $docCommentList = array_merge($docCommentList, $docCommentFetched); } - // fetch doc blocks from interfaces $interfaceReflectionList = $this->classReflection->getInterfaces(); foreach ($interfaceReflectionList as $interfaceReflection) { @@ -143,9 +156,7 @@ function ($docComment) { $docCommentList ); - $docComment = '/**' . implode(PHP_EOL, $normalizedDocCommentList) . '*/'; - - return $docComment; + return '/**' . implode(PHP_EOL, $normalizedDocCommentList) . '*/'; } /** @@ -153,12 +164,11 @@ function ($docComment) { * * @param \ReflectionClass $reflectionClass * @param string $methodName - * * @return array|void */ private function fetchRecursiveDocBlockFromParent($reflectionClass, $methodName) { - $docComment = []; + $docComment = []; $parentReflectionClass = $reflectionClass->getParentClass(); if (! $parentReflectionClass) { return; @@ -169,8 +179,8 @@ private function fetchRecursiveDocBlockFromParent($reflectionClass, $methodName) } $methodReflection = $parentReflectionClass->getMethod($methodName); - $docCommentLast = $methodReflection->getDocComment(); - $docComment[] = $docCommentLast; + $docCommentLast = $methodReflection->getDocComment(); + $docComment[] = $docCommentLast; if ($this->isInherit($docCommentLast)) { if ($docCommentFetched = $this->fetchRecursiveDocBlockFromParent($parentReflectionClass, $methodName)) { $docComment = array_merge($docComment, $docCommentFetched); @@ -184,13 +194,10 @@ private function fetchRecursiveDocBlockFromParent($reflectionClass, $methodName) * Return true if doc block inherit from parent or interface * * @param string $docComment - * * @return bool */ private function isInherit($docComment) { - $isInherit = strpos($docComment, self::INHERIT_TAG) !== false; - - return $isInherit; + return str_contains($docComment, self::INHERIT_TAG); } } diff --git a/src/Reflection/ReflectionParameter.php b/src/Reflection/ReflectionParameter.php index c45cac66..3fa35493 100644 --- a/src/Reflection/ReflectionParameter.php +++ b/src/Reflection/ReflectionParameter.php @@ -2,50 +2,60 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Reflection; +use Deprecated; +use ReflectionException; + +use function call_user_func_array; +use function is_string; +use function method_exists; + /** * Parameter Reflection * * Decorates a ReflectionParameter to allow setting the parameter type + * + * @final This class should not be extended */ class ReflectionParameter { - /** - * @var \ReflectionParameter - */ + /** @var \ReflectionParameter */ protected $reflection; /** * Parameter position + * * @var int */ protected $position; /** * Parameter type + * * @var string */ protected $type; /** * Parameter description + * * @var string */ protected $description; /** * Parameter name (needed for serialization) + * * @var string */ protected $name; /** * Declaring function name (needed for serialization) + * * @var string */ protected $functionName; @@ -53,7 +63,6 @@ class ReflectionParameter /** * Constructor * - * @param \ReflectionParameter $r * @param string $type Parameter type * @param string $description Parameter description */ @@ -62,7 +71,7 @@ public function __construct(\ReflectionParameter $r, $type = 'mixed', $descripti $this->reflection = $r; // Store parameters needed for (un)serialization - $this->name = $r->getName(); + $this->name = $r->getName(); $this->functionName = $r->getDeclaringClass() ? [$r->getDeclaringClass()->getName(), $r->getDeclaringFunction()->getName()] : $r->getDeclaringFunction()->getName(); @@ -164,13 +173,47 @@ public function getPosition() /** * @return string[] */ + #[Deprecated('Use __serialize instead')] public function __sleep() { - return ['position', 'type', 'description', 'name', 'functionName']; + return $this->__serialize(); + } + + /** + * @return string[] + */ + public function __serialize(): array + { + return [ + 'position' => $this->position, + 'type' => $this->type, + 'description' => $this->description, + 'name' => $this->name, + 'functionName' => $this->functionName, + ]; } + /** + * @return void + * @throws ReflectionException + */ + #[Deprecated('Use __unserialize instead')] public function __wakeup() { - $this->reflection = new \ReflectionParameter($this->functionName, $this->name); + $this->__unserialize($this->__serialize()); + } + + /** + * @param array $data + * @throws ReflectionException + */ + public function __unserialize(array $data): void + { + $this->position = $data['position'] ?? '0'; + $this->type = $data['type'] ?? 'mixed'; + $this->description = $data['description'] ?? ''; + $this->name = $data['name'] ?? ''; + $this->functionName = $data['functionName'] ?? ''; + $this->reflection = new \ReflectionParameter($this->functionName, $this->name); } } diff --git a/src/Reflection/ReflectionReturnValue.php b/src/Reflection/ReflectionReturnValue.php index f29e4a89..890b3fb3 100644 --- a/src/Reflection/ReflectionReturnValue.php +++ b/src/Reflection/ReflectionReturnValue.php @@ -2,27 +2,31 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server\Reflection; +use function is_string; + /** * Return value reflection * * Stores the return value type and description + * + * @final This class should not be extended */ class ReflectionReturnValue { /** * Return value type + * * @var string */ protected $type; /** * Return value description + * * @var string */ protected $description; diff --git a/src/Server.php b/src/Server.php index 38f1e580..355a7557 100644 --- a/src/Server.php +++ b/src/Server.php @@ -2,15 +2,16 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server; /** * Server Interface + * * @deprecated Since 2.9.0; Server is replaced by ServerInterface and will be removed in 3.0. + * + * @method void addFunction(string $function, string $namespace = '', array $parameters = null) */ interface Server { @@ -20,10 +21,12 @@ interface Server * Namespacing is primarily for xmlrpc, but may be used with other * implementations to prevent naming collisions. * + * Note: this method accepts an additional parameter that contains parameters + * to pass to the callback at dispatch, if provided. This is documented + * in the {@see Server} docblock. + * * @param string $function * @param string $namespace - * @param null|array Optional array of arguments to pass to callback at - * dispatch. * @return void */ public function addFunction($function, $namespace = ''); @@ -38,13 +41,13 @@ public function addFunction($function, $namespace = ''); * Namespacing is primarily for xmlrpc, but could be used for other * implementations as well. * - * @param mixed $class Class name or object instance to examine and attach - * to the server. - * @param string $namespace Optional namespace with which to prepend method - * names in the dispatch table. - * methods in the class will be valid callbacks. - * @param null|array Optional array of arguments to pass to callbacks at - * dispatch. + * @param mixed $class Class name or object instance to examine and attach + * to the server. + * @param string $namespace Optional namespace with which to prepend method + * names in the dispatch table. + * methods in the class will be valid callbacks. + * @param null|array $argv Optional array of arguments to pass to callbacks at + * dispatch. * @return void */ public function setClass($class, $namespace = '', $argv = null); diff --git a/src/ServerInterface.php b/src/ServerInterface.php index 0a22059f..9441c680 100644 --- a/src/ServerInterface.php +++ b/src/ServerInterface.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace Laminas\Server; diff --git a/test/CacheTest.php b/test/CacheTest.php index 5b3b4ac9..0d9e2978 100644 --- a/test/CacheTest.php +++ b/test/CacheTest.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Cache; @@ -13,16 +11,21 @@ use Laminas\Server\Method\Callback; use Laminas\Server\Method\Definition as MethodDefinition; use Laminas\Server\Server; +use Override; use PHPUnit\Framework\TestCase; use ReflectionProperty; -class CacheTest extends TestCase +use function file_get_contents; +use function sys_get_temp_dir; +use function tempnam; +use function unlink; +use function unserialize; + +final class CacheTest extends TestCase { - /** - * @var string - */ - private $cacheFile; + private string|null $cacheFile; + #[Override] public function tearDown(): void { if ($this->cacheFile) { @@ -35,8 +38,7 @@ public function tearDown(): void public function resetSkipMethods(array $methods = []): void { $r = new ReflectionProperty(Cache::class, 'skipMethods'); - $r->setAccessible(true); - $r->setValue(Cache::class, $methods); + $r->setValue(null, $methods); } public function testCacheCanAcceptAServerReturningAnArrayOfFunctions(): void @@ -46,7 +48,7 @@ public function testCacheCanAcceptAServerReturningAnArrayOfFunctions(): void 'substr' => 'substr', 'strlen' => 'strlen', ]; - $server = $this->createMock(Server::class); + $server = $this->createMock(Server::class); $server->method('getFunctions')->willReturn($functions); $this->cacheFile = tempnam(sys_get_temp_dir(), 'zs'); @@ -93,7 +95,7 @@ public function testCacheSkipsMethodsWhenGivenAnArrayOfFunctions(): void 'substr' => 'substr', 'strlen' => 'strlen', ]; - $server = $this->createMock(Server::class); + $server = $this->createMock(Server::class); $server->method('getFunctions')->willReturn($functions); $this->cacheFile = tempnam(sys_get_temp_dir(), 'zs'); diff --git a/test/DefinitionTest.php b/test/DefinitionTest.php index 6a6268d1..f120fa9a 100644 --- a/test/DefinitionTest.php +++ b/test/DefinitionTest.php @@ -2,32 +2,32 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server; use Laminas\Server; use Laminas\Server\Method; +use Override; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; +use function array_shift; +use function array_values; + /** * Test class for Laminas\Server\Definition - * - * @group Laminas_Server */ -class DefinitionTest extends TestCase +#[Group('Laminas_Server')] +final class DefinitionTest extends TestCase { - /** @var Server\Definition */ - private $definition; + private Server\Definition $definition; /** * Sets up the fixture, for example, open a network connection. * This method is called before a test is executed. - * - * @return void */ + #[Override] public function setUp(): void { $this->definition = new Server\Definition(); @@ -36,9 +36,8 @@ public function setUp(): void /** * Tears down the fixture, for example, close a network connection. * This method is called after a test is executed. - * - * @return void */ + #[Override] public function tearDown(): void { } @@ -113,19 +112,19 @@ public function testDefinitionShouldAllowClearingAllMethods(): void public function testDefinitionShouldSerializeToArray(): void { - $method = [ - 'name' => 'foo.bar', - 'callback' => [ + $method = [ + 'name' => 'foo.bar', + 'callback' => [ 'type' => 'function', 'function' => 'bar', ], - 'prototypes' => [ + 'prototypes' => [ [ 'returnType' => 'string', 'parameters' => ['string'], ], ], - 'methodHelp' => 'Foo Bar!', + 'methodHelp' => 'Foo Bar!', 'invokeArguments' => ['foo'], ]; $definition = new Server\Definition(); @@ -141,24 +140,24 @@ public function testDefinitionShouldSerializeToArray(): void public function testPassingOptionsToConstructorShouldSetObjectState(): void { - $method = [ - 'name' => 'foo.bar', - 'callback' => [ + $method = [ + 'name' => 'foo.bar', + 'callback' => [ 'type' => 'function', 'function' => 'bar', ], - 'prototypes' => [ + 'prototypes' => [ [ 'returnType' => 'string', 'parameters' => ['string'], ], ], - 'methodHelp' => 'Foo Bar!', + 'methodHelp' => 'Foo Bar!', 'invokeArguments' => ['foo'], ]; - $options = [$method]; + $options = [$method]; $definition = new Server\Definition($options); - $test = $definition->toArray(); + $test = $definition->toArray(); $this->assertCount(1, $test); $test = array_shift($test); $this->assertEquals($method['name'], $test['name']); diff --git a/test/Method/CallbackTest.php b/test/Method/CallbackTest.php index fd406729..290350c0 100644 --- a/test/Method/CallbackTest.php +++ b/test/Method/CallbackTest.php @@ -2,34 +2,29 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Method; use Laminas\Server\Exception\InvalidArgumentException; use Laminas\Server\Method; +use Override; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; /** * Test class for \Laminas\Server\Method\Callback - * - * @group Laminas_Server */ -class CallbackTest extends TestCase +#[Group('Laminas_Server')] +final class CallbackTest extends TestCase { - /** - * @var Method\Callback - */ - private $callback; + private Method\Callback $callback; /** * Sets up the fixture, for example, open a network connection. * This method is called before a test is executed. - * - * @return void */ + #[Override] public function setUp(): void { $this->callback = new Method\Callback(); @@ -76,9 +71,7 @@ public function testFunctionMayBeCallable(): void $callable = /** * @return true */ - function (): bool { - return true; - }; + fn(): bool => true; $this->callback->setFunction($callable); $this->assertEquals($callable, $this->callback->getFunction()); } @@ -115,13 +108,13 @@ public function testCallbackShouldSerializeToArray(): void public function testConstructorShouldSetStateFromOptions(): void { - $options = [ + $options = [ 'type' => 'static', 'class' => 'Foo', 'method' => 'bar', ]; $callback = new Method\Callback($options); - $test = $callback->toArray(); + $test = $callback->toArray(); $this->assertSame($options, $test); } diff --git a/test/Method/DefinitionTest.php b/test/Method/DefinitionTest.php index 41c77269..e53e0fed 100644 --- a/test/Method/DefinitionTest.php +++ b/test/Method/DefinitionTest.php @@ -2,32 +2,29 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Method; -use Laminas\Server\Exception\InvalidArgumentException; use Laminas\Server\Method; +use Override; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; +use stdClass; /** * Test class for \Laminas\Server\Method\Definition - * - * @group Laminas_Server */ -class DefinitionTest extends TestCase +#[Group('Laminas_Server')] +final class DefinitionTest extends TestCase { - /** @var Method\Definition */ - private $definition; + private Method\Definition $definition; /** * Sets up the fixture, for example, open a network connection. * This method is called before a test is executed. - * - * @return void */ + #[Override] public function setUp(): void { $this->definition = new Method\Definition(); @@ -36,9 +33,8 @@ public function setUp(): void /** * Tears down the fixture, for example, close a network connection. * This method is called after a test is executed. - * - * @return void */ + #[Override] public function tearDown(): void { } @@ -99,7 +95,7 @@ public function testObjectShouldBeNullByDefault(): void public function testObjectShouldBeMutable(): void { $this->assertNull($this->definition->getObject()); - $object = new \stdClass; + $object = new stdClass(); $this->definition->setObject($object); $this->assertEquals($object, $this->definition->getObject()); } @@ -113,7 +109,7 @@ public function testInvokeArgumentsShouldBeEmptyArrayByDefault(): void public function testInvokeArgumentsShouldBeMutable(): void { $this->testInvokeArgumentsShouldBeEmptyArrayByDefault(); - $args = ['foo', ['bar', 'baz'], new \stdClass]; + $args = ['foo', ['bar', 'baz'], new stdClass()]; $this->definition->setInvokeArguments($args); $this->assertSame($args, $this->definition->getInvokeArguments()); } @@ -127,12 +123,12 @@ public function testPrototypesShouldBeEmptyArrayByDefault(): void public function testDefinitionShouldAllowAddingSinglePrototypes(): void { $this->testPrototypesShouldBeEmptyArrayByDefault(); - $prototype1 = new Method\Prototype; + $prototype1 = new Method\Prototype(); $this->definition->addPrototype($prototype1); $test = $this->definition->getPrototypes(); $this->assertSame($prototype1, $test[0]); - $prototype2 = new Method\Prototype; + $prototype2 = new Method\Prototype(); $this->definition->addPrototype($prototype2); $test = $this->definition->getPrototypes(); $this->assertSame($prototype1, $test[0]); @@ -141,8 +137,8 @@ public function testDefinitionShouldAllowAddingSinglePrototypes(): void public function testDefinitionShouldAllowAddingMultiplePrototypes(): void { - $prototype1 = new Method\Prototype; - $prototype2 = new Method\Prototype; + $prototype1 = new Method\Prototype(); + $prototype2 = new Method\Prototype(); $prototypes = [$prototype1, $prototype2]; $this->definition->addPrototypes($prototypes); $this->assertSame($prototypes, $this->definition->getPrototypes()); @@ -152,8 +148,8 @@ public function testSetPrototypesShouldOverwriteExistingPrototypes(): void { $this->testDefinitionShouldAllowAddingMultiplePrototypes(); - $prototype1 = new Method\Prototype; - $prototype2 = new Method\Prototype; + $prototype1 = new Method\Prototype(); + $prototype2 = new Method\Prototype(); $prototypes = [$prototype1, $prototype2]; $this->assertNotSame($prototypes, $this->definition->getPrototypes()); $this->definition->setPrototypes($prototypes); @@ -166,7 +162,7 @@ public function testDefintionShouldSerializeToArray(): void $callback = ['function' => 'foo', 'type' => 'function']; $prototypes = [['returnType' => 'struct', 'parameters' => ['string', 'array']]]; $methodHelp = 'foo bar'; - $object = new \stdClass; + $object = new stdClass(); $invokeArgs = ['foo', ['bar', 'baz']]; $this->definition->setName($name) ->setCallback($callback) @@ -185,16 +181,16 @@ public function testDefintionShouldSerializeToArray(): void public function testPassingOptionsToConstructorShouldSetObjectState(): void { - $options = [ + $options = [ 'name' => 'foo.bar', 'callback' => ['function' => 'foo', 'type' => 'function'], 'prototypes' => [['returnType' => 'struct', 'parameters' => ['string', 'array']]], 'methodHelp' => 'foo bar', - 'object' => new \stdClass, + 'object' => new stdClass(), 'invokeArguments' => ['foo', ['bar', 'baz']], ]; $definition = new Method\Definition($options); - $test = $definition->toArray(); + $test = $definition->toArray(); $this->assertEquals($options['name'], $test['name']); $this->assertEquals($options['callback'], $test['callback']); $this->assertEquals($options['prototypes'], $test['prototypes']); diff --git a/test/Method/ParameterTest.php b/test/Method/ParameterTest.php index dbf093e0..621d4502 100644 --- a/test/Method/ParameterTest.php +++ b/test/Method/ParameterTest.php @@ -2,31 +2,28 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Method; use Laminas\Server\Method; +use Override; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; /** * Test class for \Laminas\Server\Method\Parameter - * - * @group Laminas_Server */ -class ParameterTest extends TestCase +#[Group('Laminas_Server')] +final class ParameterTest extends TestCase { - /** @var Method\Parameter */ - private $parameter; + private Method\Parameter $parameter; /** * Sets up the fixture, for example, open a network connection. * This method is called before a test is executed. - * - * @return void */ + #[Override] public function setUp(): void { $this->parameter = new Method\Parameter(); @@ -35,9 +32,8 @@ public function setUp(): void /** * Tears down the fixture, for example, close a network connection. * This method is called after a test is executed. - * - * @return void */ + #[Override] public function tearDown(): void { } @@ -142,26 +138,39 @@ public function testParameterShouldSerializeToArray(): void $optional = true; $defaultValue = 'bar'; $description = 'Foo bar!'; - $parameter = compact('type', 'name', 'optional', 'defaultValue', 'description'); - $this->parameter->setType($type) - ->setName($name) - ->setOptional($optional) - ->setDefaultValue($defaultValue) - ->setDescription($description); - $test = $this->parameter->toArray(); - $this->assertEquals($parameter, $test); + + $this->assertEquals( + [ + 'type' => $type, + 'name' => $name, + 'optional' => $optional, + 'defaultValue' => $defaultValue, + 'description' => $description, + ], + $this->parameter + ->setType($type) + ->setName($name) + ->setOptional($optional) + ->setDefaultValue($defaultValue) + ->setDescription($description) + ->toArray() + ); } public function testConstructorShouldSetObjectStateFromPassedOptions(): void { - $type = 'string'; - $name = 'foo'; - $optional = true; - $defaultValue = 'bar'; - $description = 'Foo bar!'; - $options = compact('type', 'name', 'optional', 'defaultValue', 'description'); - $parameter = new Method\Parameter($options); - $test = $parameter->toArray(); - $this->assertEquals($options, $test); + $options = [ + 'type' => 'string', + 'name' => 'foo', + 'optional' => true, + 'defaultValue' => 'bar', + 'description' => 'Foo bar!', + ]; + + $this->assertEquals( + $options, + (new Method\Parameter($options)) + ->toArray() + ); } } diff --git a/test/Method/PrototypeTest.php b/test/Method/PrototypeTest.php index 21d44b7d..5bfb5c1b 100644 --- a/test/Method/PrototypeTest.php +++ b/test/Method/PrototypeTest.php @@ -2,32 +2,29 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Method; use Laminas\Server\Method; use Laminas\Server\Method\Parameter; +use Override; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; /** * Test class for \Laminas\Server\Method\Prototype - * - * @group Laminas_Server */ -class PrototypeTest extends TestCase +#[Group('Laminas_Server')] +final class PrototypeTest extends TestCase { - /** @var Method\Prototype */ - private $prototype; + private Method\Prototype $prototype; /** * Sets up the fixture, for example, open a network connection. * This method is called before a test is executed. - * - * @return void */ + #[Override] public function setUp(): void { $this->prototype = new Method\Prototype(); @@ -36,9 +33,8 @@ public function setUp(): void /** * Tears down the fixture, for example, close a network connection. * This method is called after a test is executed. - * - * @return void */ + #[Override] public function tearDown(): void { } @@ -151,7 +147,7 @@ public function testPrototypeShouldSerializeToArray(): void public function testConstructorShouldSetObjectStateFromOptions(): void { - $options = [ + $options = [ 'returnType' => 'string', 'parameters' => [ 'bool', @@ -160,7 +156,7 @@ public function testConstructorShouldSetObjectStateFromOptions(): void ], ]; $prototype = new Method\Prototype($options); - $test = $prototype->toArray(); + $test = $prototype->toArray(); $this->assertSame($options, $test); } } diff --git a/test/Reflection/NodeTest.php b/test/Reflection/NodeTest.php index 330bd2a5..0078812e 100644 --- a/test/Reflection/NodeTest.php +++ b/test/Reflection/NodeTest.php @@ -2,26 +2,24 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Reflection; use Laminas\Server\Reflection\Node; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; +use function var_export; + /** * Test case for \Laminas\Server\Node - * - * @group Laminas_Server */ -class NodeTest extends TestCase +#[Group('Laminas_Server')] +final class NodeTest extends TestCase { /** * __construct() test - * - * @return void */ public function testConstructor(): void { @@ -43,8 +41,6 @@ public function testConstructor(): void /** * setParent() test - * - * @return void */ public function testSetParent(): void { @@ -58,13 +54,11 @@ public function testSetParent(): void /** * createChild() test - * - * @return void */ public function testCreateChild(): void { $parent = new Node('string'); - $child = $parent->createChild('array'); + $child = $parent->createChild('array'); $this->assertEquals($parent, $child->getParent()); $children = $parent->getChildren(); @@ -73,8 +67,6 @@ public function testCreateChild(): void /** * attachChild() test - * - * @return void */ public function testAttachChild(): void { @@ -89,16 +81,15 @@ public function testAttachChild(): void /** * getChildren() test - * - * @return void */ public function testGetChildren(): void { $parent = new Node('string'); - $child = $parent->createChild('array'); + $child = $parent->createChild('array'); + /** @var Node[] $children */ $children = $parent->getChildren(); - $types = []; + $types = []; foreach ($children as $c) { $types[] = $c->getValue(); } @@ -108,8 +99,6 @@ public function testGetChildren(): void /** * hasChildren() test - * - * @return void */ public function testHasChildren(): void { @@ -122,13 +111,11 @@ public function testHasChildren(): void /** * getParent() test - * - * @return void */ public function testGetParent(): void { $parent = new Node('string'); - $child = $parent->createChild('array'); + $child = $parent->createChild('array'); $this->assertNull($parent->getParent()); $this->assertEquals($parent, $child->getParent()); @@ -136,8 +123,6 @@ public function testGetParent(): void /** * getValue() test - * - * @return void */ public function testGetValue(): void { @@ -147,8 +132,6 @@ public function testGetValue(): void /** * setValue() test - * - * @return void */ public function testSetValue(): void { @@ -160,22 +143,21 @@ public function testSetValue(): void /** * getEndPoints() test - * - * @return void */ public function testGetEndPoints(): void { - $root = new Node('root'); - $child1 = $root->createChild('child1'); - $child2 = $root->createChild('child2'); - $child1grand1 = $child1->createChild(null); - $child1grand2 = $child1->createChild('child1grand2'); - $child2grand1 = $child2->createChild('child2grand1'); - $child2grand2 = $child2->createChild('child2grand2'); + $root = new Node('root'); + $child1 = $root->createChild('child1'); + $child2 = $root->createChild('child2'); + $child1grand1 = $child1->createChild(null); + $child1grand2 = $child1->createChild('child1grand2'); + $child2grand1 = $child2->createChild('child2grand1'); + $child2grand2 = $child2->createChild('child2grand2'); $child2grand2great1 = $child2grand2->createChild(null); $child2grand2great2 = $child2grand2->createChild('child2grand2great2'); - $endPoints = $root->getEndPoints(); + /** @var Node[] $endPoints */ + $endPoints = $root->getEndPoints(); $endPointsArray = []; foreach ($endPoints as $endPoint) { $endPointsArray[] = $endPoint->getValue(); @@ -186,7 +168,7 @@ public function testGetEndPoints(): void 'child1grand2', 'child2grand1', 'child2grand2', - 'child2grand2great2' + 'child2grand2great2', ]; $this->assertEquals( diff --git a/test/Reflection/PrototypeTest.php b/test/Reflection/PrototypeTest.php index 25ff2df0..8f201b0c 100644 --- a/test/Reflection/PrototypeTest.php +++ b/test/Reflection/PrototypeTest.php @@ -2,33 +2,31 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Reflection; use Laminas\Server\Reflection; -use Laminas\Server\Reflection\Exception\InvalidArgumentException; +use Laminas\Server\Reflection\Prototype; use Laminas\Server\Reflection\ReflectionReturnValue; +use Override; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; use ReflectionClass; +use ReflectionParameter; /** * Test case for \Laminas\Server\Reflection\Prototype - * - * @group Laminas_Server */ -class PrototypeTest extends TestCase +#[Group('Laminas_Server')] +final class PrototypeTest extends TestCase { - /** - * @var \Laminas\Server\Reflection\Prototype - */ + /** @var Prototype */ protected $r; /** * @var array - * @psalm-var array + * @psalm-var array */ protected $parametersRaw; @@ -41,11 +39,12 @@ class PrototypeTest extends TestCase /** * Setup environment */ + #[Override] public function setUp(): void { - $class = new ReflectionClass('\Laminas\Server\Reflection'); - $method = $class->getMethod('reflectClass'); - $parameters = $method->getParameters(); + $class = new ReflectionClass(Reflection::class); + $method = $class->getMethod('reflectClass'); + $parameters = $method->getParameters(); $this->parametersRaw = $parameters; $fParameters = []; @@ -60,6 +59,7 @@ public function setUp(): void /** * Teardown environment */ + #[Override] public function tearDown(): void { unset($this->r); @@ -77,8 +77,6 @@ public function tearDown(): void * - params: Optional; * * Returns: void - * - * @return void */ public function testConstructWorks(): void { @@ -91,8 +89,6 @@ public function testConstructWorks(): void * Call as method call * * Returns: string - * - * @return void */ public function testGetReturnType(): void { @@ -105,8 +101,6 @@ public function testGetReturnType(): void * Call as method call * * Returns: \Laminas\Server\Reflection\ReflectionReturnValue - * - * @return void */ public function testGetReturnValue(): void { @@ -119,8 +113,6 @@ public function testGetReturnValue(): void * Call as method call * * Returns: array - * - * @return void */ public function testGetParameters(): void { diff --git a/test/Reflection/ReflectionClassTest.php b/test/Reflection/ReflectionClassTest.php index 61e7aff9..bcec1b04 100644 --- a/test/Reflection/ReflectionClassTest.php +++ b/test/Reflection/ReflectionClassTest.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Reflection; @@ -11,14 +9,20 @@ use Laminas\Server\Reflection; use Laminas\Server\Reflection\ReflectionClass; use Laminas\Server\Reflection\ReflectionMethod; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; +use function assert; +use function count; +use function serialize; +use function unserialize; + /** * Test case for \Laminas\Server\Reflection\ClassReflection - * - * @group Laminas_Server */ -class ReflectionClassTest extends TestCase +#[Group('Laminas_Server')] +final class ReflectionClassTest extends TestCase { /** * __construct() test @@ -31,8 +35,6 @@ class ReflectionClassTest extends TestCase * - argv: Optional; has default; * * Returns: void - * - * @return void */ public function testConstructor(): void { @@ -58,24 +60,20 @@ public function testConstructor(): void * - args: * * Returns: mixed - * - * @return void */ public function testMethodOverloading(): void { $r = new Reflection\ReflectionClass(new \ReflectionClass(Reflection::class)); $this->assertIsString($r->getName()); - $this->assertEquals('Laminas\Server\Reflection', $r->getName()); + $this->assertEquals(Reflection::class, $r->getName()); } /** * test __get/set - * - * @return void */ public function testGetSet(): void { - $r = new Reflection\ReflectionClass(new \ReflectionClass(Reflection::class)); + $r = new Reflection\ReflectionClass(new \ReflectionClass(Reflection::class)); $r->system = true; $this->assertTrue($r->system); } @@ -86,8 +84,6 @@ public function testGetSet(): void * Call as method call * * Returns: array - * - * @return void */ public function testGetMethods(): void { @@ -101,8 +97,6 @@ public function testGetMethods(): void /** * namespace test - * - * @return void */ public function testGetNamespace(): void { @@ -118,8 +112,6 @@ public function testGetNamespace(): void * Call as method call * * Returns: void - * - * @return void */ public function testClassWakeup(): void { @@ -139,7 +131,7 @@ public function testClassWakeup(): void /** * @psalm-return array */ - public function nonArrayArgvValues(): array + public static function nonArrayArgvValues(): array { return [ 'null' => [null], @@ -155,9 +147,9 @@ public function nonArrayArgvValues(): array } /** - * @dataProvider nonArrayArgvValues * @param mixed $argv */ + #[DataProvider('nonArrayArgvValues')] public function testNonArrayArgvValuesResultInEmptyInvokationArgumentsToReflectedMethods($argv): void { // Suppressing, as we are validating diff --git a/test/Reflection/ReflectionFunctionTest.php b/test/Reflection/ReflectionFunctionTest.php index 8ff65314..fa7a8441 100644 --- a/test/Reflection/ReflectionFunctionTest.php +++ b/test/Reflection/ReflectionFunctionTest.php @@ -2,32 +2,34 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Reflection; use Laminas\Server\Reflection; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; use ReflectionFunction; -/** - * @group Laminas_Server - */ -class ReflectionFunctionTest extends TestCase +use function in_array; +use function serialize; +use function unserialize; +use function var_export; + +#[Group('Laminas_Server')] +final class ReflectionFunctionTest extends TestCase { public function testConstructor(): void { $function = new ReflectionFunction('LaminasTest\Server\Reflection\TestAsset\function1'); - $r = new Reflection\ReflectionFunction($function); - $params = $r->getParameters(); + $r = new Reflection\ReflectionFunction($function); + $params = $r->getParameters(); $r = new Reflection\ReflectionFunction($function, 'namespace'); $this->assertEquals('namespace', $r->getNamespace()); $argv = ['string1', 'string2']; - $r = new Reflection\ReflectionFunction($function, 'namespace', $argv); + $r = new Reflection\ReflectionFunction($function, 'namespace', $argv); $this->assertIsArray($r->getInvokeArguments()); $this->assertEquals($argv, $r->getInvokeArguments()); @@ -38,17 +40,16 @@ public function testConstructor(): void public function testPropertyOverloading(): void { $function = new ReflectionFunction('LaminasTest\Server\Reflection\TestAsset\function1'); - $r = new Reflection\ReflectionFunction($function); + $r = new Reflection\ReflectionFunction($function); $r->system = true; $this->assertTrue($r->system); } - public function testNamespace(): void { $function = new ReflectionFunction('LaminasTest\Server\Reflection\TestAsset\function1'); - $r = new Reflection\ReflectionFunction($function, 'namespace'); + $r = new Reflection\ReflectionFunction($function, 'namespace'); $this->assertEquals('namespace', $r->getNamespace()); $r->setNamespace('framework'); $this->assertEquals('framework', $r->getNamespace()); @@ -57,7 +58,7 @@ public function testNamespace(): void public function testDescription(): void { $function = new ReflectionFunction('LaminasTest\Server\Reflection\TestAsset\function1'); - $r = new Reflection\ReflectionFunction($function); + $r = new Reflection\ReflectionFunction($function); $this->assertStringContainsString('function for reflection', $r->getDescription()); $r->setDescription('Testing setting descriptions'); $this->assertEquals('Testing setting descriptions', $r->getDescription()); @@ -66,7 +67,7 @@ public function testDescription(): void public function testGetPrototypes(): void { $function = new ReflectionFunction('LaminasTest\Server\Reflection\TestAsset\function1'); - $r = new Reflection\ReflectionFunction($function); + $r = new Reflection\ReflectionFunction($function); $prototypes = $r->getPrototypes(); $this->assertCount(8, $prototypes); @@ -79,7 +80,7 @@ public function testGetPrototypes(): void public function testGetPrototypes2(): void { $function = new ReflectionFunction('LaminasTest\Server\Reflection\TestAsset\function2'); - $r = new Reflection\ReflectionFunction($function); + $r = new Reflection\ReflectionFunction($function); $prototypes = $r->getPrototypes(); $this->assertNotEmpty($prototypes); @@ -90,16 +91,15 @@ public function testGetPrototypes2(): void } } - public function testGetInvokeArguments(): void { $function = new ReflectionFunction('LaminasTest\Server\Reflection\TestAsset\function1'); - $r = new Reflection\ReflectionFunction($function); - $args = $r->getInvokeArguments(); + $r = new Reflection\ReflectionFunction($function); + $args = $r->getInvokeArguments(); $this->assertCount(0, $args); $argv = ['string1', 'string2']; - $r = new Reflection\ReflectionFunction($function, null, $argv); + $r = new Reflection\ReflectionFunction($function, null, $argv); $args = $r->getInvokeArguments(); $this->assertEquals($argv, $args); } @@ -107,9 +107,9 @@ public function testGetInvokeArguments(): void public function testClassWakeup(): void { $function = new ReflectionFunction('LaminasTest\Server\Reflection\TestAsset\function1'); - $r = new Reflection\ReflectionFunction($function); - $s = serialize($r); - $u = unserialize($s); + $r = new Reflection\ReflectionFunction($function); + $s = serialize($r); + $u = unserialize($s); $this->assertInstanceOf(\Laminas\Server\Reflection\ReflectionFunction::class, $u); $this->assertEquals('', $u->getNamespace()); } @@ -117,32 +117,28 @@ public function testClassWakeup(): void public function testMultipleWhitespaceBetweenDoctagsAndTypes(): void { $function = new ReflectionFunction('LaminasTest\Server\Reflection\TestAsset\function3'); - $r = new Reflection\ReflectionFunction($function); + $r = new Reflection\ReflectionFunction($function); $prototypes = $r->getPrototypes(); $this->assertNotEmpty($prototypes); $this->assertCount(1, $prototypes); - $proto = $prototypes[0]; + $proto = $prototypes[0]; $params = $proto->getParameters(); $this->assertCount(1, $params); $this->assertEquals('string', $params[0]->getType()); } - /** - * @group Laminas-6996 - * - * @return void - */ + #[Group('Laminas-6996')] public function testParameterReflectionShouldReturnTypeAndVarnameAndDescription(): void { $function = new ReflectionFunction('LaminasTest\Server\Reflection\TestAsset\function1'); - $r = new Reflection\ReflectionFunction($function); + $r = new Reflection\ReflectionFunction($function); $prototypes = $r->getPrototypes(); $prototype = $prototypes[0]; - $params = $prototype->getParameters(); - $param = $params[0]; + $params = $prototype->getParameters(); + $param = $params[0]; $this->assertStringContainsString('Some description', $param->getDescription(), var_export($param, 1)); } } diff --git a/test/Reflection/ReflectionMethodTest.php b/test/Reflection/ReflectionMethodTest.php index 0f3db012..9bb2d150 100644 --- a/test/Reflection/ReflectionMethodTest.php +++ b/test/Reflection/ReflectionMethodTest.php @@ -2,18 +2,21 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Reflection; use Laminas\Server\Reflection; use Laminas\Server\Reflection\Node; +use Override; use PHPUnit\Framework\TestCase; use ReflectionClass; +use ReflectionMethod; -class ReflectionMethodTest extends TestCase +use function serialize; +use function unserialize; + +final class ReflectionMethodTest extends TestCase { /** @var ReflectionClass */ protected $classRaw; @@ -21,9 +24,10 @@ class ReflectionMethodTest extends TestCase /** @var Reflection\ReflectionClass */ protected $class; - /** @var \ReflectionMethod */ + /** @var ReflectionMethod */ protected $method; + #[Override] protected function setUp(): void { $this->classRaw = new ReflectionClass(Reflection::class); @@ -43,8 +47,6 @@ protected function setUp(): void * - argv: Optional; has default; * * Returns: void - * - * @return void */ public function testConstructor(): void { @@ -61,8 +63,6 @@ public function testConstructor(): void * Call as method call * * Returns: \Laminas\Server\Reflection\ReflectionClass - * - * @return void */ public function testGetDeclaringClass(): void { @@ -80,8 +80,6 @@ public function testGetDeclaringClass(): void * Call as method call * * Returns: void - * - * @return void */ public function testClassWakeup(): void { @@ -96,20 +94,18 @@ public function testClassWakeup(): void /** * Test fetch method doc block from interface - * - * @return void */ public function testMethodDocBlockFromInterface(): void { - $reflectionClass = new ReflectionClass(TestAsset\ReflectionMethodTestInstance::class); + $reflectionClass = new ReflectionClass(TestAsset\ReflectionMethodTestInstance::class); $reflectionMethod = $reflectionClass->getMethod('testMethod'); $laminasReflectionMethod = new Reflection\ReflectionMethod( new Reflection\ReflectionClass($reflectionClass), $reflectionMethod ); - list($prototype) = $laminasReflectionMethod->getPrototypes(); - list($first, $second) = $prototype->getParameters(); + [$prototype] = $laminasReflectionMethod->getPrototypes(); + [$first, $second] = $prototype->getParameters(); self::assertEquals('ReflectionMethodTest', $first->getType()); self::assertEquals('array', $second->getType()); @@ -117,20 +113,18 @@ public function testMethodDocBlockFromInterface(): void /** * Test fetch method doc block from parent class - * - * @return void */ public function testMethodDocBlockFromParent(): void { - $reflectionClass = new ReflectionClass(TestAsset\ReflectionMethodNode::class); + $reflectionClass = new ReflectionClass(TestAsset\ReflectionMethodNode::class); $reflectionMethod = $reflectionClass->getMethod('setParent'); $laminasReflectionMethod = new Reflection\ReflectionMethod( new Reflection\ReflectionClass($reflectionClass), $reflectionMethod ); - $prototypes = $laminasReflectionMethod->getPrototypes(); - list($first, $second) = $prototypes[1]->getParameters(); + $prototypes = $laminasReflectionMethod->getPrototypes(); + [$first, $second] = $prototypes[1]->getParameters(); self::assertEquals('\\' . Node::class, $first->getType()); self::assertEquals('bool', $second->getType()); diff --git a/test/Reflection/ReflectionParameterTest.php b/test/Reflection/ReflectionParameterTest.php index 2ff03bc8..38fd0f16 100644 --- a/test/Reflection/ReflectionParameterTest.php +++ b/test/Reflection/ReflectionParameterTest.php @@ -2,27 +2,25 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Reflection; use Laminas\Server\Reflection; -use Laminas\Server\Reflection\ReflectionParameter; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; use ReflectionMethod; +use ReflectionParameter; /** * Test case for \Laminas\Server\Reflection\ReflectionParameter - * - * @group Laminas_Server */ -class ReflectionParameterTest extends TestCase +#[Group('Laminas_Server')] +final class ReflectionParameterTest extends TestCase { - protected function getParameter(): \ReflectionParameter + protected function getParameter(): ReflectionParameter { - $method = new ReflectionMethod('\Laminas\Server\Reflection\ReflectionParameter', 'setType'); + $method = new ReflectionMethod(\Laminas\Server\Reflection\ReflectionParameter::class, 'setType'); $parameters = $method->getParameters(); return $parameters[0]; } @@ -38,8 +36,6 @@ protected function getParameter(): \ReflectionParameter * - description: Optional; has default; * * Returns: void - * - * @return void */ public function testConstructor(): void { @@ -59,8 +55,6 @@ public function testConstructor(): void * - args: * * Returns: mixed - * - * @return void */ public function testMethodOverloading(): void { @@ -73,8 +67,6 @@ public function testMethodOverloading(): void /** * get/setType() test - * - * @return void */ public function testGetSetType(): void { @@ -87,8 +79,6 @@ public function testGetSetType(): void /** * get/setDescription() test - * - * @return void */ public function testGetDescription(): void { @@ -101,8 +91,6 @@ public function testGetDescription(): void /** * get/setPosition() test - * - * @return void */ public function testSetPosition(): void { diff --git a/test/Reflection/ReflectionReturnValueTest.php b/test/Reflection/ReflectionReturnValueTest.php index de45fd24..0fdb0b08 100644 --- a/test/Reflection/ReflectionReturnValueTest.php +++ b/test/Reflection/ReflectionReturnValueTest.php @@ -2,20 +2,19 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Reflection; use Laminas\Server\Reflection; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\TestCase; /** * Test case for \Laminas\Server\Reflection\ReflectionReturnValue - * - * @group Laminas_Server */ -class ReflectionReturnValueTest extends \PHPUnit\Framework\TestCase +#[Group('Laminas_Server')] +final class ReflectionReturnValueTest extends TestCase { /** * __construct() test @@ -27,8 +26,6 @@ class ReflectionReturnValueTest extends \PHPUnit\Framework\TestCase * - description: Optional; has default; * * Returns: void - * - * @return void */ public function testConstructor(): void { @@ -42,8 +39,6 @@ public function testConstructor(): void * Call as method call * * Returns: string - * - * @return void */ public function testGetType(): void { @@ -63,8 +58,6 @@ public function testGetType(): void * - type: * * Returns: void - * - * @return void */ public function testSetType(): void { @@ -80,8 +73,6 @@ public function testSetType(): void * Call as method call * * Returns: string - * - * @return void */ public function testGetDescription(): void { @@ -101,8 +92,6 @@ public function testGetDescription(): void * - description: * * Returns: void - * - * @return void */ public function testSetDescription(): void { diff --git a/test/Reflection/TestAsset/ReflectionMethodInterface.php b/test/Reflection/TestAsset/ReflectionMethodInterface.php index a827c458..4024623e 100644 --- a/test/Reflection/TestAsset/ReflectionMethodInterface.php +++ b/test/Reflection/TestAsset/ReflectionMethodInterface.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Reflection\TestAsset; @@ -18,5 +16,5 @@ interface ReflectionMethodInterface * @param ReflectionMethodTest $reflectionMethodTest Reflection method * @param array $anything Some array information */ - public function testMethod(ReflectionMethodTest $reflectionMethodTest, array $anything); + public function testMethod(ReflectionMethodTest $reflectionMethodTest, array $anything): void; } diff --git a/test/Reflection/TestAsset/ReflectionMethodNode.php b/test/Reflection/TestAsset/ReflectionMethodNode.php index ef27b4ef..34b3af5d 100644 --- a/test/Reflection/TestAsset/ReflectionMethodNode.php +++ b/test/Reflection/TestAsset/ReflectionMethodNode.php @@ -2,19 +2,19 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Reflection\TestAsset; use Laminas\Server\Reflection\Node; +use Override; -class ReflectionMethodNode extends Node +final class ReflectionMethodNode extends Node { /** * {@inheritdoc} */ + #[Override] public function setParent(Node $node, $new = false) { // it doesn`t matter diff --git a/test/Reflection/TestAsset/ReflectionMethodTestInstance.php b/test/Reflection/TestAsset/ReflectionMethodTestInstance.php index fb79a544..f7998e0c 100644 --- a/test/Reflection/TestAsset/ReflectionMethodTestInstance.php +++ b/test/Reflection/TestAsset/ReflectionMethodTestInstance.php @@ -2,22 +2,22 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\Reflection\TestAsset; use LaminasTest\Server\Reflection\ReflectionMethodTest; +use Override; -class ReflectionMethodTestInstance implements ReflectionMethodInterface +final class ReflectionMethodTestInstance implements ReflectionMethodInterface { /** * {@inheritdoc} * * @return void */ - public function testMethod(ReflectionMethodTest $reflectionMethodTest, array $anything) + #[Override] + public function testMethod(ReflectionMethodTest $reflectionMethodTest, array $anything): void { // it doesn`t matter } diff --git a/test/Reflection/TestAsset/functions.php b/test/Reflection/TestAsset/functions.php index 25c59810..94edd805 100644 --- a/test/Reflection/TestAsset/functions.php +++ b/test/Reflection/TestAsset/functions.php @@ -2,6 +2,8 @@ namespace LaminasTest\Server\Reflection\TestAsset; +use function is_array; + /** * Test function for reflection unit tests * @@ -23,8 +25,6 @@ function function1($var1, $var2, $var3 = null): ?array /** * Test function for reflection unit tests; test what happens when no return * value or params specified in docblock. - * - * @return void */ function function2(): void { diff --git a/test/ReflectionTest.php b/test/ReflectionTest.php index 1a8656fe..68307987 100644 --- a/test/ReflectionTest.php +++ b/test/ReflectionTest.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server; @@ -11,17 +9,15 @@ use Laminas\Server\Exception\InvalidArgumentException as ExceptionInvalidArgumentException; use Laminas\Server\Reflection; use Laminas\Server\Reflection\Exception\InvalidArgumentException; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; -/** - * @group Laminas_Server - */ -class ReflectionTest extends TestCase +#[Group('Laminas_server')] +final class ReflectionTest extends TestCase { /** * reflectClass() test - * - * @return void */ public function testReflectClass(): void { @@ -46,8 +42,6 @@ public function testReflectClassThrowsExceptionOnInvalidParameter(): void /** * reflectClass() test; test namespaces - * - * @return void */ public function testReflectClass2(): void { @@ -57,8 +51,6 @@ public function testReflectClass2(): void /** * reflectFunction() test - * - * @return void */ public function testReflectFunction(): void { @@ -83,8 +75,6 @@ public function testReflectFunctionThrowsExceptionOnInvalidParam(): void /** * reflectFunction() test; test namespaces - * - * @return void */ public function testReflectFunction2(): void { @@ -95,7 +85,7 @@ public function testReflectFunction2(): void /** * @psalm-return array */ - public function invalidArgvValues(): array + public static function invalidArgvValues(): array { return [ 'true' => [true], @@ -109,9 +99,9 @@ public function invalidArgvValues(): array } /** - * @dataProvider invalidArgvValues * @param mixed $invalidValue */ + #[DataProvider('invalidArgvValues')] public function testReflectFunctionThrowsExceptionForInvalidArgvValue($invalidValue): void { $this->expectException(ExceptionInvalidArgumentException::class); @@ -124,7 +114,7 @@ public function testReflectFunctionThrowsExceptionForInvalidArgvValue($invalidVa /** * @psalm-return array */ - public function emptyArgvValues(): array + public static function emptyArgvValues(): array { return [ 'false' => [false], @@ -132,9 +122,7 @@ public function emptyArgvValues(): array ]; } - /** - * @dataProvider emptyArgvValues - */ + #[DataProvider('emptyArgvValues')] public function testReflectFunctionAllowsNullOrFalseArgv(?bool $argv): void { $r = Reflection::reflectFunction('LaminasTest\Server\TestAsset\reflectionTestFunction', $argv); diff --git a/test/TestAsset/ReflectionTestClass.php b/test/TestAsset/ReflectionTestClass.php index 2f86650d..69d08744 100644 --- a/test/TestAsset/ReflectionTestClass.php +++ b/test/TestAsset/ReflectionTestClass.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\TestAsset; @@ -11,7 +9,7 @@ /** * \LaminasTest\Server\TestAsset\ReflectionTestClass -- test class reflection */ -class ReflectionTestClass +final class ReflectionTestClass { /** * Constructor @@ -29,8 +27,6 @@ public function __construct($arg = null) * * @param string $arg1 * @param array $arg2 - * - * @return void */ public function one($arg1, $arg2 = null): void { @@ -43,8 +39,6 @@ public function one($arg1, $arg2 = null): void * * @param string $arg1 * @param array $arg2 - * - * @return void */ protected function _one($arg1, $arg2 = null): void { @@ -56,8 +50,6 @@ protected function _one($arg1, $arg2 = null): void * * @param string $arg1 * @param string $arg2 - * - * @return void */ public static function two($arg1, $arg2): void { diff --git a/test/TestAsset/reflectionTestFunction.php b/test/TestAsset/reflectionTestFunction.php index 95150e94..ae03d9e9 100644 --- a/test/TestAsset/reflectionTestFunction.php +++ b/test/TestAsset/reflectionTestFunction.php @@ -2,8 +2,6 @@ /** * @see https://github.com/laminas/laminas-server for the canonical source repository - * @copyright https://github.com/laminas/laminas-server/blob/master/COPYRIGHT.md - * @license https://github.com/laminas/laminas-server/blob/master/LICENSE.md New BSD License */ namespace LaminasTest\Server\TestAsset; @@ -17,8 +15,6 @@ * @param string|array $arg2 * @param string $arg3 Optional argument * @param string|struct|false $arg4 Optional argument - * - * @return void */ function reflectionTestFunction($arg1, $arg2, $arg3 = 'string', $arg4 = 'array'): void {