diff --git a/.dagger/src/Base.php b/.dagger/src/Base.php index 5116737..859bf9d 100644 --- a/.dagger/src/Base.php +++ b/.dagger/src/Base.php @@ -23,7 +23,7 @@ public function __construct() { $this->container = dag() ->container() - ->from('php:8.3-fpm-alpine') + ->from('php:8.4-fpm-alpine') ->withExposedPort(8080) ->withExposedPort(8081) ->withWorkdir('/app'); diff --git a/.dagger/src/Dev.php b/.dagger/src/Dev.php index 81ae200..b0e5e56 100644 --- a/.dagger/src/Dev.php +++ b/.dagger/src/Dev.php @@ -21,11 +21,12 @@ public function __construct( #[DaggerFunction] public function lintCheck(): Container { - return (new Base()) + return new Base() ->withVendor( $this->src->file('composer.json'), $this->src->file('composer.lock'), ) + ->withSrc($this->src) ->asContainer() ->withExec([ './vendor/bin/php-cs-fixer', @@ -42,7 +43,7 @@ public function test( string $suite = 'default', ): Container { // Take advantage of Dagger's caching by using the same base for service and container - $base = (new Base()) + $base = new Base() ->withPdo() ->withPcov() ->withNginx($this->src->file('docker/nginx.conf')) @@ -56,4 +57,20 @@ public function test( ->withServiceBinding('mockserver', $service) ->withExec(['./vendor/bin/phpunit', "--testsuite=$suite"]); } + + #[DaggerFunction] + public function analyze(): Container + { + return new Base() + ->withVendor( + $this->src->file('composer.json'), + $this->src->file('composer.lock'), + ) + ->withSrc($this->src) + ->asContainer() + ->withExec([ + './vendor/bin/phpstan', + 'analyze', + ]); + } } diff --git a/.dagger/src/Mockserver.php b/.dagger/src/Mockserver.php index 5dbb8d6..90b5a6a 100644 --- a/.dagger/src/Mockserver.php +++ b/.dagger/src/Mockserver.php @@ -25,11 +25,11 @@ public function __construct( #[DefaultPath('.')] #[Ignore( '*.md', + '.cache/', '.dagger/', '.dockerignore', '.gitignore', '.idea/', - '.cache/', 'dagger.json', 'generated/', 'LICENSE', diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml new file mode 100644 index 0000000..c01439a --- /dev/null +++ b/.github/workflows/checks.yml @@ -0,0 +1,37 @@ +name: Checks + +on: + push + +jobs: + dagger: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Check out the repo + uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: PHPUnit + uses: dagger/dagger-for-github@v5 + with: + version: "0.19.6" + verb: call + args: dev test + + - name: PHP CS Fixer + uses: dagger/dagger-for-github@v5 + with: + version: "0.19.6" + verb: call + args: dev lint-check + + - name: PHPStan + uses: dagger/dagger-for-github@v5 + with: + version: "0.19.6" + verb: call + args: dev analyze diff --git a/composer.json b/composer.json index af76b75..d3305a8 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "membrane/mock-server", "type": "library", "license": "MPL-2.0", - "minimum-stability": "dev", + "minimum-stability": "stable", "autoload": { "psr-4": { "Membrane\\MockServer\\": "src/", @@ -20,12 +20,12 @@ } }, "require": { - "php": "^8.3.0", - "atto/db-module": "dev-main", + "php": "^8.4.0", + "atto/db-module": "^0.1.0", "atto/framework": "^0.1.3", - "atto/hydrator": "dev-main", - "atto/membrane-module": "^0.1.9", - "atto/orm": "dev-main", + "atto/hydrator": "^0.1.2", + "atto/membrane-module": "^0.1.10", + "atto/orm": "^0.1.0", "guzzlehttp/psr7": "^2.4", "membrane/membrane": "^0.10.0", "membrane/openapi-reader": "^3.0", @@ -33,10 +33,10 @@ "symfony/console": "^6.2 || ^7.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.88.2", + "friendsofphp/php-cs-fixer": "^v3.90.0", "guzzlehttp/guzzle": "^7.10.0", - "phpstan/phpstan": "^1.12.5", - "phpunit/phpunit": "^11.5.39", + "phpstan/phpstan": "^2.1.32", + "phpunit/phpunit": "^12.4.4", "roave/better-reflection": "^6.65.0" }, "bin": [ diff --git a/composer.lock b/composer.lock index 24014cd..8933a23 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "74ef7750295d91acea2e9ed76d287e4f", + "content-hash": "9e5897472667ae5fb673fd5d6a57539f", "packages": [ { "name": "atto/codegen-tools", @@ -43,7 +43,7 @@ }, { "name": "atto/db-module", - "version": "dev-main", + "version": "0.1.0", "source": { "type": "git", "url": "https://github.com/atto-php/db.git", @@ -63,7 +63,6 @@ "require-dev": { "phpunit/phpunit": "^9.0.0" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -83,7 +82,7 @@ "description": "description", "support": { "issues": "https://github.com/atto-php/db/issues", - "source": "https://github.com/atto-php/db/tree/main" + "source": "https://github.com/atto-php/db/tree/0.1.0" }, "time": "2025-10-15T12:03:14+00:00" }, @@ -137,30 +136,29 @@ }, { "name": "atto/hydrator", - "version": "dev-main", + "version": "0.1.2", "source": { "type": "git", "url": "https://github.com/atto-php/hydrator.git", - "reference": "7b806a1d0996e79528444d9ca18b4c3717e78a2f" + "reference": "4743b5fa04533cadd09ad74e4da77b89191e8fb2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/atto-php/hydrator/zipball/7b806a1d0996e79528444d9ca18b4c3717e78a2f", - "reference": "7b806a1d0996e79528444d9ca18b4c3717e78a2f", + "url": "https://api.github.com/repos/atto-php/hydrator/zipball/4743b5fa04533cadd09ad74e4da77b89191e8fb2", + "reference": "4743b5fa04533cadd09ad74e4da77b89191e8fb2", "shasum": "" }, "require": { "atto/codegen-tools": "^0.1.0", "doctrine/instantiator": "^2.0", - "php": "~8.2.0 || ~8.3.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", "roave/better-reflection": "^6.25", "symfony/console": "^6.4 || ^7.0" }, "require-dev": { "phpstan/phpstan": "^1.12.6", - "phpunit/phpunit": "^10.2.0" + "phpunit/phpunit": "^11.0.0" }, - "default-branch": true, "bin": [ "bin/generate-hydrators" ], @@ -183,27 +181,27 @@ "description": "description", "support": { "issues": "https://github.com/atto-php/hydrator/issues", - "source": "https://github.com/atto-php/hydrator/tree/0.1.1" + "source": "https://github.com/atto-php/hydrator/tree/0.1.2" }, - "time": "2025-01-31T12:31:37+00:00" + "time": "2025-11-25T13:04:25+00:00" }, { "name": "atto/membrane-module", - "version": "0.1.9", + "version": "0.1.10", "source": { "type": "git", "url": "https://github.com/atto-php/membrane.git", - "reference": "9913a3d013d1a513e2df86e9915aac20f6760d33" + "reference": "1d4f6aeb58c20bde251579fe8a137d358d54ca48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/atto-php/membrane/zipball/9913a3d013d1a513e2df86e9915aac20f6760d33", - "reference": "9913a3d013d1a513e2df86e9915aac20f6760d33", + "url": "https://api.github.com/repos/atto-php/membrane/zipball/1d4f6aeb58c20bde251579fe8a137d358d54ca48", + "reference": "1d4f6aeb58c20bde251579fe8a137d358d54ca48", "shasum": "" }, "require": { "atto/framework": "^0.1.0", - "atto/psr7-module": "dev-main", + "atto/psr7-module": "^0.1.0", "crell/api-problem": "^3.6", "laminas/laminas-httphandlerrunner": "^2.3.0", "laminas/laminas-stdlib": "^3.16", @@ -236,13 +234,13 @@ "description": "description", "support": { "issues": "https://github.com/atto-php/membrane/issues", - "source": "https://github.com/atto-php/membrane/tree/0.1.9" + "source": "https://github.com/atto-php/membrane/tree/0.1.10" }, - "time": "2025-11-24T11:00:17+00:00" + "time": "2025-11-25T13:12:41+00:00" }, { "name": "atto/orm", - "version": "dev-main", + "version": "0.1.0", "source": { "type": "git", "url": "https://github.com/atto-php/orm.git", @@ -262,7 +260,6 @@ "require-dev": { "phpunit/phpunit": "^10.2.0" }, - "default-branch": true, "bin": [ "bin/generate-repositories" ], @@ -275,13 +272,13 @@ "notification-url": "https://packagist.org/downloads/", "support": { "issues": "https://github.com/atto-php/orm/issues", - "source": "https://github.com/atto-php/orm/tree/main" + "source": "https://github.com/atto-php/orm/tree/0.1.0" }, "time": "2025-11-04T13:18:22+00:00" }, { "name": "atto/psr7-module", - "version": "dev-main", + "version": "0.1.0", "source": { "type": "git", "url": "https://github.com/atto-php/Psr7.git", @@ -304,7 +301,6 @@ "require-dev": { "phpunit/phpunit": "^9.0.0" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -324,7 +320,7 @@ "description": "description", "support": { "issues": "https://github.com/atto-php/Psr7/issues", - "source": "https://github.com/atto-php/Psr7/tree/main" + "source": "https://github.com/atto-php/Psr7/tree/0.1.0" }, "time": "2025-02-05T20:23:04+00:00" }, @@ -401,7 +397,7 @@ }, { "name": "devizzent/cebe-php-openapi", - "version": "dev-master", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/DEVizzent/cebe-php-openapi.git", @@ -434,7 +430,6 @@ "phpstan/phpstan": "^0.12.0", "phpunit/phpunit": "^6.5 || ^7.5 || ^8.5 || ^9.4 || ^11.4" }, - "default-branch": true, "bin": [ "bin/php-openapi" ], @@ -478,16 +473,16 @@ }, { "name": "doctrine/dbal", - "version": "4.4.x-dev", + "version": "4.3.4", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "67c06eba951efcaaa0a9a5d7dd5c6e2a52aae123" + "reference": "1a2fbd0e93b8dec7c3d1ac2b6396a7b929b130dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/67c06eba951efcaaa0a9a5d7dd5c6e2a52aae123", - "reference": "67c06eba951efcaaa0a9a5d7dd5c6e2a52aae123", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/1a2fbd0e93b8dec7c3d1ac2b6396a7b929b130dc", + "reference": "1a2fbd0e93b8dec7c3d1ac2b6396a7b929b130dc", "shasum": "" }, "require": { @@ -564,7 +559,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.4.x" + "source": "https://github.com/doctrine/dbal/tree/4.3.4" }, "funding": [ { @@ -580,20 +575,20 @@ "type": "tidelift" } ], - "time": "2025-11-22T11:38:04+00:00" + "time": "2025-10-09T09:11:36+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.x-dev", + "version": "1.1.5", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "8dfcd6625820194ff0e4de93663fb3199d28b60a" + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/8dfcd6625820194ff0e4de93663fb3199d28b60a", - "reference": "8dfcd6625820194ff0e4de93663fb3199d28b60a", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", "shasum": "" }, "require": { @@ -603,16 +598,15 @@ "phpunit/phpunit": "<=7.5 || >=13" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^14", - "phpstan/phpstan": "1.4.10 || 2.1.30", + "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.4", + "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" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -627,37 +621,37 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.x" + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" }, - "time": "2025-11-03T13:53:48+00:00" + "time": "2025-04-07T20:06:18+00:00" }, { "name": "doctrine/instantiator", - "version": "2.0.x-dev", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "95fe13ebc346414c4e218bd827f475779096ab7a" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/95fe13ebc346414c4e218bd827f475779096ab7a", - "reference": "95fe13ebc346414c4e218bd827f475779096ab7a", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^14", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^10.5.58" + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -683,7 +677,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.x" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -699,11 +693,11 @@ "type": "tidelift" } ], - "time": "2025-11-03T21:45:58+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.8.x-dev", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", @@ -733,7 +727,6 @@ "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, - "default-branch": true, "type": "library", "extra": { "bamarni-bin": { @@ -942,16 +935,16 @@ }, { "name": "laminas/laminas-httphandlerrunner", - "version": "2.14.x-dev", + "version": "2.13.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-httphandlerrunner.git", - "reference": "b040cf19d08e609aa013fb56a511bc236f8a7cdb" + "reference": "181eaeeb838ad3d80fbbcfb0657a46bc212bbd4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/b040cf19d08e609aa013fb56a511bc236f8a7cdb", - "reference": "b040cf19d08e609aa013fb56a511bc236f8a7cdb", + "url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/181eaeeb838ad3d80fbbcfb0657a46bc212bbd4e", + "reference": "181eaeeb838ad3d80fbbcfb0657a46bc212bbd4e", "shasum": "" }, "require": { @@ -967,7 +960,6 @@ "psalm/plugin-phpunit": "^0.19.5", "vimeo/psalm": "^6.10.3" }, - "default-branch": true, "type": "library", "extra": { "laminas": { @@ -1006,20 +998,20 @@ "type": "community_bridge" } ], - "time": "2025-11-17T01:05:19+00:00" + "time": "2025-10-12T20:58:29+00:00" }, { "name": "laminas/laminas-stdlib", - "version": "3.22.x-dev", + "version": "3.21.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "11c59d25ceaacd5d17e3229d8122a0922b55cd41" + "reference": "b1c81514cfe158aadf724c42b34d3d0a8164c096" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/11c59d25ceaacd5d17e3229d8122a0922b55cd41", - "reference": "11c59d25ceaacd5d17e3229d8122a0922b55cd41", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/b1c81514cfe158aadf724c42b34d3d0a8164c096", + "reference": "b1c81514cfe158aadf724c42b34d3d0a8164c096", "shasum": "" }, "require": { @@ -1035,7 +1027,6 @@ "psalm/plugin-phpunit": "^0.19.5", "vimeo/psalm": "^6.13.1" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -1066,11 +1057,11 @@ "type": "community_bridge" } ], - "time": "2025-11-17T02:06:26+00:00" + "time": "2025-10-11T18:13:12+00:00" }, { "name": "league/container", - "version": "4.x-dev", + "version": "4.2.5", "source": { "type": "git", "url": "https://github.com/thephpleague/container.git", @@ -1140,7 +1131,7 @@ ], "support": { "issues": "https://github.com/thephpleague/container/issues", - "source": "https://github.com/thephpleague/container/tree/4.x" + "source": "https://github.com/thephpleague/container/tree/4.2.5" }, "funding": [ { @@ -1152,16 +1143,16 @@ }, { "name": "marc-mabe/php-enum", - "version": "dev-master", + "version": "v4.7.2", "source": { "type": "git", "url": "https://github.com/marc-mabe/php-enum.git", - "reference": "ad41f0bfbcb32ab13c549265ed91f332694f6433" + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/ad41f0bfbcb32ab13c549265ed91f332694f6433", - "reference": "ad41f0bfbcb32ab13c549265ed91f332694f6433", + "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/bb426fcdd65c60fb3638ef741e8782508fda7eef", + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef", "shasum": "" }, "require": { @@ -1174,7 +1165,6 @@ "phpunit/phpunit": "^7.5.20 | ^8.5.22 | ^9.5.11", "vimeo/psalm": "^4.17.0 | ^5.26.1" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -1220,9 +1210,9 @@ ], "support": { "issues": "https://github.com/marc-mabe/php-enum/issues", - "source": "https://github.com/marc-mabe/php-enum/tree/master" + "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.2" }, - "time": "2025-11-23T17:06:57+00:00" + "time": "2025-09-14T11:18:39+00:00" }, { "name": "membrane/membrane", @@ -1366,16 +1356,16 @@ }, { "name": "nikic/php-parser", - "version": "dev-master", + "version": "v5.6.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c97b23dce761ab3c913ee8ac5879af7a358f88de" + "reference": "3a454ca033b9e06b63282ce19562e892747449bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c97b23dce761ab3c913ee8ac5879af7a358f88de", - "reference": "c97b23dce761ab3c913ee8ac5879af7a358f88de", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", + "reference": "3a454ca033b9e06b63282ce19562e892747449bb", "shasum": "" }, "require": { @@ -1388,7 +1378,6 @@ "ircmaxell/php-yacc": "^0.0.7", "phpunit/phpunit": "^9.0" }, - "default-branch": true, "bin": [ "bin/php-parse" ], @@ -1419,13 +1408,13 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/master" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" }, - "time": "2025-10-26T16:58:55+00:00" + "time": "2025-10-21T19:32:17+00:00" }, { "name": "nyholm/psr7", - "version": "dev-master", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/Nyholm/psr7.git", @@ -1454,7 +1443,6 @@ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", "symfony/error-handler": "^4.4" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -1570,29 +1558,25 @@ }, { "name": "psr/cache", - "version": "dev-master", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "588d5ff7035e78cd4f69eb798890749ac4641b30" + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/588d5ff7035e78cd4f69eb798890749ac4641b30", - "reference": "588d5ff7035e78cd4f69eb798890749ac4641b30", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { "php": ">=8.0.0" }, - "suggest": { - "fig/cache-util": "Provides some useful PSR-6 utilities" - }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -1617,28 +1601,27 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2025-04-11T19:21:12+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { "name": "psr/container", - "version": "dev-master", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "707984727bd5b2b670e59559d3ed2500240cf875" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/707984727bd5b2b670e59559d3ed2500240cf875", - "reference": "707984727bd5b2b670e59559d3ed2500240cf875", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -1671,9 +1654,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2023-09-22T11:11:30+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/http-factory", @@ -1732,7 +1715,7 @@ }, { "name": "psr/http-message", - "version": "dev-master", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", @@ -1747,7 +1730,6 @@ "require": { "php": "^7.2 || ^8.0" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -1786,23 +1768,22 @@ }, { "name": "psr/http-server-handler", - "version": "dev-master", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/http-server-handler.git", - "reference": "13403d43196ab3382d0a4ca28be32984282641f9" + "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/13403d43196ab3382d0a4ca28be32984282641f9", - "reference": "13403d43196ab3382d0a4ca28be32984282641f9", + "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4", + "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4", "shasum": "" }, "require": { "php": ">=7.0", "psr/http-message": "^1.0 || ^2.0" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -1837,13 +1818,13 @@ "server" ], "support": { - "source": "https://github.com/php-fig/http-server-handler" + "source": "https://github.com/php-fig/http-server-handler/tree/1.0.2" }, - "time": "2023-11-16T18:17:39+00:00" + "time": "2023-04-10T20:06:20+00:00" }, { "name": "psr/log", - "version": "dev-master", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", @@ -1858,7 +1839,6 @@ "require": { "php": ">=8.0.0" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -1938,16 +1918,16 @@ }, { "name": "roave/better-reflection", - "version": "6.67.x-dev", + "version": "6.66.0", "source": { "type": "git", "url": "https://github.com/Roave/BetterReflection.git", - "reference": "6c6e8debb78adf24416337451220ce0ce9bdcd2a" + "reference": "e70a06dc5cd572e108448a431b6c2840ad16c1b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/BetterReflection/zipball/6c6e8debb78adf24416337451220ce0ce9bdcd2a", - "reference": "6c6e8debb78adf24416337451220ce0ce9bdcd2a", + "url": "https://api.github.com/repos/Roave/BetterReflection/zipball/e70a06dc5cd572e108448a431b6c2840ad16c1b2", + "reference": "e70a06dc5cd572e108448a431b6c2840ad16c1b2", "shasum": "" }, "require": { @@ -1966,7 +1946,6 @@ "suggest": { "composer/composer": "Required to use the ComposerSourceLocator" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -2002,22 +1981,22 @@ "description": "Better Reflection - an improved code reflection API", "support": { "issues": "https://github.com/Roave/BetterReflection/issues", - "source": "https://github.com/Roave/BetterReflection/tree/6.67.x" + "source": "https://github.com/Roave/BetterReflection/tree/6.66.0" }, - "time": "2025-11-21T19:17:43+00:00" + "time": "2025-11-04T20:38:27+00:00" }, { "name": "symfony/console", - "version": "6.4.x-dev", + "version": "v6.4.27", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "7f0dd9a0d4449e183d3976568dd1320e3d8dbb92" + "reference": "13d3176cf8ad8ced24202844e9f95af11e2959fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7f0dd9a0d4449e183d3976568dd1320e3d8dbb92", - "reference": "7f0dd9a0d4449e183d3976568dd1320e3d8dbb92", + "url": "https://api.github.com/repos/symfony/console/zipball/13d3176cf8ad8ced24202844e9f95af11e2959fc", + "reference": "13d3176cf8ad8ced24202844e9f95af11e2959fc", "shasum": "" }, "require": { @@ -2082,7 +2061,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/6.4" + "source": "https://github.com/symfony/console/tree/v6.4.27" }, "funding": [ { @@ -2102,11 +2081,11 @@ "type": "tidelift" } ], - "time": "2025-11-16T19:10:44+00:00" + "time": "2025-10-06T10:25:16+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "dev-main", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -2121,7 +2100,6 @@ "require": { "php": ">=8.1" }, - "default-branch": true, "type": "library", "extra": { "thanks": { @@ -2165,10 +2143,6 @@ "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" @@ -2178,7 +2152,7 @@ }, { "name": "symfony/polyfill-ctype", - "version": "1.x-dev", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -2199,7 +2173,6 @@ "suggest": { "ext-ctype": "For best performance" }, - "default-branch": true, "type": "library", "extra": { "thanks": { @@ -2262,7 +2235,7 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "1.x-dev", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", @@ -2280,7 +2253,6 @@ "suggest": { "ext-intl": "For best performance" }, - "default-branch": true, "type": "library", "extra": { "thanks": { @@ -2345,7 +2317,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "1.x-dev", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -2363,7 +2335,6 @@ "suggest": { "ext-intl": "For best performance" }, - "default-branch": true, "type": "library", "extra": { "thanks": { @@ -2431,7 +2402,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "1.x-dev", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -2453,7 +2424,6 @@ "suggest": { "ext-mbstring": "For best performance" }, - "default-branch": true, "type": "library", "extra": { "thanks": { @@ -2517,7 +2487,7 @@ }, { "name": "symfony/service-contracts", - "version": "dev-main", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", @@ -2537,7 +2507,6 @@ "conflict": { "ext-psr": "<1.1|>=2" }, - "default-branch": true, "type": "library", "extra": { "thanks": { @@ -2581,7 +2550,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/main" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -2605,23 +2574,22 @@ }, { "name": "symfony/string", - "version": "7.4.x-dev", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "bc7852160e1f18ce249c3daaba3b26cf5425a34d" + "reference": "f96476035142921000338bad71e5247fbc138872" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/bc7852160e1f18ce249c3daaba3b26cf5425a34d", - "reference": "bc7852160e1f18ce249c3daaba3b26cf5425a34d", + "url": "https://api.github.com/repos/symfony/string/zipball/f96476035142921000338bad71e5247fbc138872", + "reference": "f96476035142921000338bad71e5247fbc138872", "shasum": "" }, "require": { "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, @@ -2629,11 +2597,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1|^8.0", - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/emoji": "^7.1", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0|^8.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2672,7 +2640,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/7.4" + "source": "https://github.com/symfony/string/tree/v7.3.4" }, "funding": [ { @@ -2692,32 +2660,32 @@ "type": "tidelift" } ], - "time": "2025-09-11T14:37:11+00:00" + "time": "2025-09-11T14:36:48+00:00" }, { "name": "symfony/yaml", - "version": "7.4.x-dev", + "version": "v7.3.5", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "6c84a4b55aee4cd02034d1c528e83f69ddf63810" + "reference": "90208e2fc6f68f613eae7ca25a2458a931b1bacc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/6c84a4b55aee4cd02034d1c528e83f69ddf63810", - "reference": "6c84a4b55aee4cd02034d1c528e83f69ddf63810", + "url": "https://api.github.com/repos/symfony/yaml/zipball/90208e2fc6f68f613eae7ca25a2458a931b1bacc", + "reference": "90208e2fc6f68f613eae7ca25a2458a931b1bacc", "shasum": "" }, "require": { "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0" + "symfony/console": "^6.4|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -2748,7 +2716,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/7.4" + "source": "https://github.com/symfony/yaml/tree/v7.3.5" }, "funding": [ { @@ -2768,22 +2736,22 @@ "type": "tidelift" } ], - "time": "2025-11-16T10:14:42+00:00" + "time": "2025-09-27T09:00:46+00:00" } ], "packages-dev": [ { "name": "clue/ndjson-react", - "version": "1.x-dev", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/clue/reactphp-ndjson.git", - "reference": "8fc557eaa902e4f1de171b5b4eaa6246fbe4118e" + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/8fc557eaa902e4f1de171b5b4eaa6246fbe4118e", - "reference": "8fc557eaa902e4f1de171b5b4eaa6246fbe4118e", + "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", "shasum": "" }, "require": { @@ -2791,10 +2759,9 @@ "react/stream": "^1.2" }, "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", "react/event-loop": "^1.2" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -2823,7 +2790,7 @@ ], "support": { "issues": "https://github.com/clue/reactphp-ndjson/issues", - "source": "https://github.com/clue/reactphp-ndjson/tree/1.x" + "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" }, "funding": [ { @@ -2835,20 +2802,20 @@ "type": "github" } ], - "time": "2023-11-24T09:04:50+00:00" + "time": "2022-12-23T10:58:28+00:00" }, { "name": "composer/pcre", - "version": "dev-main", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "efd688146c54599288d52f9f459d81b345a9778f" + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/efd688146c54599288d52f9f459d81b345a9778f", - "reference": "efd688146c54599288d52f9f459d81b345a9778f", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "shasum": "" }, "require": { @@ -2859,11 +2826,9 @@ }, "require-dev": { "phpstan/phpstan": "^1.12 || ^2", - "phpstan/phpstan-deprecation-rules": "^1 || ^2", "phpstan/phpstan-strict-rules": "^1 || ^2", "phpunit/phpunit": "^8 || ^9" }, - "default-branch": true, "type": "library", "extra": { "phpstan": { @@ -2900,7 +2865,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/main" + "source": "https://github.com/composer/pcre/tree/3.3.2" }, "funding": [ { @@ -2910,22 +2875,26 @@ { "url": "https://github.com/composer", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2025-10-06T14:04:28+00:00" + "time": "2024-11-12T16:29:46+00:00" }, { "name": "composer/semver", - "version": "dev-main", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "c9b06fa2f64d9aaf2785cd325742a41f27e290aa" + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c9b06fa2f64d9aaf2785cd325742a41f27e290aa", - "reference": "c9b06fa2f64d9aaf2785cd325742a41f27e290aa", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { @@ -2935,7 +2904,6 @@ "phpstan/phpstan": "^1.11", "symfony/phpunit-bridge": "^3 || ^7" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -2968,7 +2936,7 @@ "homepage": "http://robbast.nl" } ], - "description": "Version comparison library that offers utilities, version constraint parsing and validation.", + "description": "Semver library that offers utilities, version constraint parsing and validation.", "keywords": [ "semantic", "semver", @@ -2978,7 +2946,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/main" + "source": "https://github.com/composer/semver/tree/3.4.4" }, "funding": [ { @@ -2990,7 +2958,7 @@ "type": "github" } ], - "time": "2025-11-12T10:20:59+00:00" + "time": "2025-08-20T19:15:30+00:00" }, { "name": "composer/xdebug-handler", @@ -3271,7 +3239,7 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.10.x-dev", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", @@ -3307,7 +3275,6 @@ "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, - "default-branch": true, "type": "library", "extra": { "bamarni-bin": { @@ -3398,7 +3365,7 @@ }, { "name": "guzzlehttp/promises", - "version": "2.3.x-dev", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", @@ -3417,7 +3384,6 @@ "bamarni/composer-bin-plugin": "^1.8.2", "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, - "default-branch": true, "type": "library", "extra": { "bamarni-bin": { @@ -3482,7 +3448,7 @@ }, { "name": "myclabs/deep-copy", - "version": "1.x-dev", + "version": "1.13.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", @@ -3507,7 +3473,6 @@ "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, - "default-branch": true, "type": "library", "autoload": { "files": [ @@ -3543,16 +3508,16 @@ }, { "name": "phar-io/manifest", - "version": "dev-master", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "65f90285728eae4eae313b8b6ba11b2f5436038e" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/65f90285728eae4eae313b8b6ba11b2f5436038e", - "reference": "65f90285728eae4eae313b8b6ba11b2f5436038e", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { @@ -3563,7 +3528,6 @@ "phar-io/version": "^3.0.1", "php": "^7.2 || ^8.0" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -3599,7 +3563,7 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, "funding": [ { @@ -3607,7 +3571,7 @@ "type": "github" } ], - "time": "2025-07-05T08:48:25+00:00" + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -3662,15 +3626,15 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.x-dev", + "version": "2.1.32", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/2770dcdf5078d0b0d53f94317e06affe88419aa8", - "reference": "2770dcdf5078d0b0d53f94317e06affe88419aa8", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e126cad1e30a99b137b8ed75a85a676450ebb227", + "reference": "e126cad1e30a99b137b8ed75a85a676450ebb227", "shasum": "" }, "require": { - "php": "^7.2|^8.0" + "php": "^7.4|^8.0" }, "conflict": { "phpstan/phpstan-shim": "*" @@ -3711,20 +3675,20 @@ "type": "github" } ], - "time": "2025-09-30T10:16:31+00:00" + "time": "2025-11-11T15:18:17+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "11.0.x-dev", + "version": "12.4.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "59e6ffa3d6b3dd6590aff6d13496e582dd2e8163" + "reference": "67e8aed88f93d0e6e1cb7effe1a2dfc2fee6022c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/59e6ffa3d6b3dd6590aff6d13496e582dd2e8163", - "reference": "59e6ffa3d6b3dd6590aff6d13496e582dd2e8163", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/67e8aed88f93d0e6e1cb7effe1a2dfc2fee6022c", + "reference": "67e8aed88f93d0e6e1cb7effe1a2dfc2fee6022c", "shasum": "" }, "require": { @@ -3732,18 +3696,17 @@ "ext-libxml": "*", "ext-xmlwriter": "*", "nikic/php-parser": "^5.6.1", - "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", + "php": ">=8.3", + "phpunit/php-file-iterator": "^6.0", + "phpunit/php-text-template": "^5.0", + "sebastian/complexity": "^5.0", + "sebastian/environment": "^8.0.3", + "sebastian/lines-of-code": "^4.0", + "sebastian/version": "^6.0", "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^11.5.35" + "phpunit/phpunit": "^12.3.7" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -3752,7 +3715,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "11.0.x-dev" + "dev-main": "12.4.x-dev" } }, "autoload": { @@ -3781,7 +3744,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.4.0" }, "funding": [ { @@ -3801,32 +3764,32 @@ "type": "tidelift" } ], - "time": "2025-11-16T10:16:47+00:00" + "time": "2025-09-24T13:44:41+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "5.1.x-dev", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "18a3d4f3af59807625ae982d88b27085ad38c367" + "reference": "961bc913d42fe24a257bfff826a5068079ac7782" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/18a3d4f3af59807625ae982d88b27085ad38c367", - "reference": "18a3d4f3af59807625ae982d88b27085ad38c367", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/961bc913d42fe24a257bfff826a5068079ac7782", + "reference": "961bc913d42fe24a257bfff826a5068079ac7782", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -3854,48 +3817,36 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", - "type": "tidelift" } ], - "time": "2025-09-26T11:52:35+00:00" + "time": "2025-02-07T04:58:37+00:00" }, { "name": "phpunit/php-invoker", - "version": "5.0.x-dev", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "cdf46882fb81433d671ed4ba64c62da7e62b1f12" + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/cdf46882fb81433d671ed4ba64c62da7e62b1f12", - "reference": "cdf46882fb81433d671ed4ba64c62da7e62b1f12", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.3" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "suggest": { "ext-pcntl": "*" @@ -3903,7 +3854,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -3930,52 +3881,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/php-invoker", - "type": "tidelift" } ], - "time": "2025-09-26T11:56:54+00:00" + "time": "2025-02-07T04:58:58+00:00" }, { "name": "phpunit/php-text-template", - "version": "4.0.x-dev", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "51c29005b7c2781f72381ff01a2fe79be7096d29" + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/51c29005b7c2781f72381ff01a2fe79be7096d29", - "reference": "51c29005b7c2781f72381ff01a2fe79be7096d29", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -4002,52 +3941,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/php-text-template", - "type": "tidelift" } ], - "time": "2025-09-26T12:02:43+00:00" + "time": "2025-02-07T04:59:16+00:00" }, { "name": "phpunit/php-timer", - "version": "7.0.x-dev", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "97eee3cc4868bb1ae61a59cd95aff98c52d43def" + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/97eee3cc4868bb1ae61a59cd95aff98c52d43def", - "reference": "97eee3cc4868bb1ae61a59cd95aff98c52d43def", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -4074,40 +4001,28 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", "security": "https://github.com/sebastianbergmann/php-timer/security/policy", - "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0" + "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/php-timer", - "type": "tidelift" } ], - "time": "2025-09-26T12:06:24+00:00" + "time": "2025-02-07T04:59:38+00:00" }, { "name": "phpunit/phpunit", - "version": "11.5.x-dev", + "version": "12.4.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "fc53696465916d82b1ec1f19cbdba3a16788646c" + "reference": "9253ec75a672e39fcc9d85bdb61448215b8162c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fc53696465916d82b1ec1f19cbdba3a16788646c", - "reference": "fc53696465916d82b1ec1f19cbdba3a16788646c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9253ec75a672e39fcc9d85bdb61448215b8162c7", + "reference": "9253ec75a672e39fcc9d85bdb61448215b8162c7", "shasum": "" }, "require": { @@ -4120,34 +4035,30 @@ "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.11", - "phpunit/php-file-iterator": "^5.1.0", - "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.2", - "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/type": "^5.1.3", - "sebastian/version": "^5.0.2", + "php": ">=8.3", + "phpunit/php-code-coverage": "^12.4.0", + "phpunit/php-file-iterator": "^6.0.0", + "phpunit/php-invoker": "^6.0.0", + "phpunit/php-text-template": "^5.0.0", + "phpunit/php-timer": "^8.0.0", + "sebastian/cli-parser": "^4.2.0", + "sebastian/comparator": "^7.1.3", + "sebastian/diff": "^7.0.0", + "sebastian/environment": "^8.0.3", + "sebastian/exporter": "^7.0.2", + "sebastian/global-state": "^8.0.2", + "sebastian/object-enumerator": "^7.0.0", + "sebastian/type": "^6.0.3", + "sebastian/version": "^6.0.0", "staabm/side-effects-detector": "^1.0.5" }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" - }, "bin": [ "phpunit" ], "type": "library", "extra": { "branch-alias": { - "dev-main": "11.5-dev" + "dev-main": "12.4-dev" } }, "autoload": { @@ -4179,7 +4090,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5" + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.4.4" }, "funding": [ { @@ -4203,29 +4114,25 @@ "type": "tidelift" } ], - "time": "2025-11-21T12:57:15+00:00" + "time": "2025-11-21T07:39:11+00:00" }, { "name": "psr/event-dispatcher", - "version": "dev-master", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874" + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874", - "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", "shasum": "" }, "require": { "php": ">=7.2.0" }, - "suggest": { - "fig/event-dispatcher-util": "Provides some useful PSR-14 utilities" - }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -4244,7 +4151,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "homepage": "http://www.php-fig.org/" } ], "description": "Standard interfaces for event handling.", @@ -4254,13 +4161,14 @@ "psr-14" ], "support": { - "source": "https://github.com/php-fig/event-dispatcher" + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" }, - "time": "2024-03-17T21:29:03+00:00" + "time": "2019-01-08T18:20:26+00:00" }, { "name": "psr/http-client", - "version": "dev-master", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", @@ -4276,7 +4184,6 @@ "php": "^7.0 || ^8.0", "psr/http-message": "^1.0 || ^2.0" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -4313,16 +4220,16 @@ }, { "name": "react/cache", - "version": "1.x-dev", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/reactphp/cache.git", - "reference": "845e157750daa2f7c67b7fab63b46fb909bb8464" + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/cache/zipball/845e157750daa2f7c67b7fab63b46fb909bb8464", - "reference": "845e157750daa2f7c67b7fab63b46fb909bb8464", + "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", "shasum": "" }, "require": { @@ -4330,7 +4237,7 @@ "react/promise": "^3.0 || ^2.0 || ^1.1" }, "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" }, "type": "library", "autoload": { @@ -4373,7 +4280,7 @@ ], "support": { "issues": "https://github.com/reactphp/cache/issues", - "source": "https://github.com/reactphp/cache/tree/1.x" + "source": "https://github.com/reactphp/cache/tree/v1.2.0" }, "funding": [ { @@ -4381,11 +4288,11 @@ "type": "open_collective" } ], - "time": "2025-10-19T18:29:29+00:00" + "time": "2022-11-30T15:59:55+00:00" }, { "name": "react/child-process", - "version": "0.6.x-dev", + "version": "v0.6.6", "source": { "type": "git", "url": "https://github.com/reactphp/child-process.git", @@ -4460,7 +4367,7 @@ }, { "name": "react/dns", - "version": "1.x-dev", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/reactphp/dns.git", @@ -4536,7 +4443,7 @@ }, { "name": "react/event-loop", - "version": "1.x-dev", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/reactphp/event-loop.git", @@ -4608,7 +4515,7 @@ }, { "name": "react/promise", - "version": "3.x-dev", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", @@ -4627,7 +4534,6 @@ "phpstan/phpstan": "1.12.28 || 1.4.10", "phpunit/phpunit": "^9.6 || ^7.5" }, - "default-branch": true, "type": "library", "autoload": { "files": [ @@ -4682,7 +4588,7 @@ }, { "name": "react/socket", - "version": "1.x-dev", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/reactphp/socket.git", @@ -4762,16 +4668,16 @@ }, { "name": "react/stream", - "version": "1.x-dev", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/reactphp/stream.git", - "reference": "9decb8fa54f361877ba62c2d5e46bb4401779fb1" + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/stream/zipball/9decb8fa54f361877ba62c2d5e46bb4401779fb1", - "reference": "9decb8fa54f361877ba62c2d5e46bb4401779fb1", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", "shasum": "" }, "require": { @@ -4828,7 +4734,7 @@ ], "support": { "issues": "https://github.com/reactphp/stream/issues", - "source": "https://github.com/reactphp/stream/tree/1.x" + "source": "https://github.com/reactphp/stream/tree/v1.4.0" }, "funding": [ { @@ -4836,32 +4742,32 @@ "type": "open_collective" } ], - "time": "2025-10-15T07:30:20+00:00" + "time": "2024-06-11T12:45:25+00:00" }, { "name": "sebastian/cli-parser", - "version": "3.0.x-dev", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "3a073702d31bd8bb4f1a010793ac967c6dbc7c85" + "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/3a073702d31bd8bb4f1a010793ac967c6dbc7c85", - "reference": "3a073702d31bd8bb4f1a010793ac967c6dbc7c85", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/90f41072d220e5c40df6e8635f5dafba2d9d4d04", + "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.2-dev" } }, "autoload": { @@ -4885,7 +4791,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.0" }, "funding": [ { @@ -4905,170 +4811,31 @@ "type": "tidelift" } ], - "time": "2025-09-26T09:03:29+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "23caa57776ddcaa35a2965b93d5f4212a2c3a2d9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/23caa57776ddcaa35a2965b93d5f4212a2c3a2d9", - "reference": "23caa57776ddcaa35a2965b93d5f4212a2c3a2d9", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.5" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "security": "https://github.com/sebastianbergmann/code-unit/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit/tree/main" - }, - "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/code-unit", - "type": "tidelift" - } - ], - "time": "2025-05-25T06:37:26+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5cf245ed8605ac5c89946e4bcdcbbd1565b19d9f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5cf245ed8605ac5c89946e4bcdcbbd1565b19d9f", - "reference": "5cf245ed8605ac5c89946e4bcdcbbd1565b19d9f", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/main" - }, - "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/code-unit-reverse-lookup", - "type": "tidelift" - } - ], - "time": "2025-05-25T06:37:50+00:00" + "time": "2025-09-14T09:36:45+00:00" }, { "name": "sebastian/comparator", - "version": "6.3.x-dev", + "version": "7.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5bff74a11f16f69c1e9764ff08f12577d9bf8ded" + "reference": "dc904b4bb3ab070865fa4068cd84f3da8b945148" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5bff74a11f16f69c1e9764ff08f12577d9bf8ded", - "reference": "5bff74a11f16f69c1e9764ff08f12577d9bf8ded", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/dc904b4bb3ab070865fa4068cd84f3da8b945148", + "reference": "dc904b4bb3ab070865fa4068cd84f3da8b945148", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/diff": "^6.0", - "sebastian/exporter": "^6.0" + "php": ">=8.3", + "sebastian/diff": "^7.0", + "sebastian/exporter": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^11.4" + "phpunit/phpunit": "^12.2" }, "suggest": { "ext-bcmath": "For comparing BcMath\\Number objects" @@ -5076,7 +4843,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.3-dev" + "dev-main": "7.1-dev" } }, "autoload": { @@ -5116,7 +4883,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.3" }, "funding": [ { @@ -5136,33 +4903,33 @@ "type": "tidelift" } ], - "time": "2025-09-26T09:17:19+00:00" + "time": "2025-08-20T11:27:00+00:00" }, { "name": "sebastian/complexity", - "version": "4.0.x-dev", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "66dc7be5b87498fc0a94565e3b869515becc6569" + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/66dc7be5b87498fc0a94565e3b869515becc6569", - "reference": "66dc7be5b87498fc0a94565e3b869515becc6569", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb", "shasum": "" }, "require": { "nikic/php-parser": "^5.0", - "php": ">=8.2" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -5186,53 +4953,41 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/4.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/complexity", - "type": "tidelift" } ], - "time": "2025-09-26T09:28:11+00:00" + "time": "2025-02-07T04:55:25+00:00" }, { "name": "sebastian/diff", - "version": "6.0.x-dev", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "a42039c742783604f4156c17357f22e335ba5d1c" + "reference": "7ab1ea946c012266ca32390913653d844ecd085f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/a42039c742783604f4156c17357f22e335ba5d1c", - "reference": "a42039c742783604f4156c17357f22e335ba5d1c", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", + "reference": "7ab1ea946c012266ca32390913653d844ecd085f", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^11.3", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^12.0", + "symfony/process": "^7.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -5265,47 +5020,35 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/6.0" + "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/diff", - "type": "tidelift" } ], - "time": "2025-09-26T09:40:22+00:00" + "time": "2025-02-07T04:55:46+00:00" }, { "name": "sebastian/environment", - "version": "7.2.x-dev", + "version": "8.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "05faa86b4c0042e122ed6be66766b9bf820775d6" + "reference": "24a711b5c916efc6d6e62aa65aa2ec98fef77f68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/05faa86b4c0042e122ed6be66766b9bf820775d6", - "reference": "05faa86b4c0042e122ed6be66766b9bf820775d6", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/24a711b5c916efc6d6e62aa65aa2ec98fef77f68", + "reference": "24a711b5c916efc6d6e62aa65aa2ec98fef77f68", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "suggest": { "ext-posix": "*" @@ -5313,7 +5056,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "7.2-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -5341,7 +5084,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/7.2" + "source": "https://github.com/sebastianbergmann/environment/tree/8.0.3" }, "funding": [ { @@ -5361,34 +5104,34 @@ "type": "tidelift" } ], - "time": "2025-09-26T09:53:03+00:00" + "time": "2025-08-12T14:11:56+00:00" }, { "name": "sebastian/exporter", - "version": "6.3.x-dev", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "c939676885df069c0bc467ca4a1ac7dd367db7a8" + "reference": "016951ae10980765e4e7aee491eb288c64e505b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c939676885df069c0bc467ca4a1ac7dd367db7a8", - "reference": "c939676885df069c0bc467ca4a1ac7dd367db7a8", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/016951ae10980765e4e7aee491eb288c64e505b7", + "reference": "016951ae10980765e4e7aee491eb288c64e505b7", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/recursion-context": "^6.0" + "php": ">=8.3", + "sebastian/recursion-context": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.3-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -5431,7 +5174,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.2" }, "funding": [ { @@ -5451,35 +5194,35 @@ "type": "tidelift" } ], - "time": "2025-09-26T11:23:57+00:00" + "time": "2025-09-24T06:16:11+00:00" }, { "name": "sebastian/global-state", - "version": "7.0.x-dev", + "version": "8.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "88b1eb038ff5daa6f3c2b76bea3cd0ac48626f53" + "reference": "ef1377171613d09edd25b7816f05be8313f9115d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/88b1eb038ff5daa6f3c2b76bea3cd0ac48626f53", - "reference": "88b1eb038ff5daa6f3c2b76bea3cd0ac48626f53", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ef1377171613d09edd25b7816f05be8313f9115d", + "reference": "ef1377171613d09edd25b7816f05be8313f9115d", "shasum": "" }, "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -5505,7 +5248,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/7.0" + "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.2" }, "funding": [ { @@ -5525,33 +5268,33 @@ "type": "tidelift" } ], - "time": "2025-09-26T11:31:14+00:00" + "time": "2025-08-29T11:29:25+00:00" }, { "name": "sebastian/lines-of-code", - "version": "3.0.x-dev", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "8426f4eebca3f4003616c617b89094be52fc7b16" + "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/8426f4eebca3f4003616c617b89094be52fc7b16", - "reference": "8426f4eebca3f4003616c617b89094be52fc7b16", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/97ffee3bcfb5805568d6af7f0f893678fc076d2f", + "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f", "shasum": "" }, "require": { "nikic/php-parser": "^5.0", - "php": ">=8.2" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -5575,54 +5318,42 @@ "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/lines-of-code", - "type": "tidelift" } ], - "time": "2025-09-26T11:36:26+00:00" + "time": "2025-02-07T04:57:28+00:00" }, { "name": "sebastian/object-enumerator", - "version": "6.0.x-dev", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "1748f199f50f7deb6f12c4f08cddc306cf6fd2e2" + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1748f199f50f7deb6f12c4f08cddc306cf6fd2e2", - "reference": "1748f199f50f7deb6f12c4f08cddc306cf6fd2e2", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894", "shasum": "" }, "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -5645,52 +5376,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/object-enumerator", - "type": "tidelift" } ], - "time": "2025-09-26T11:41:57+00:00" + "time": "2025-02-07T04:57:48+00:00" }, { "name": "sebastian/object-reflector", - "version": "4.0.x-dev", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "89dc41f115e98bfa597501c28e489dd7db93b855" + "reference": "4bfa827c969c98be1e527abd576533293c634f6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/89dc41f115e98bfa597501c28e489dd7db93b855", - "reference": "89dc41f115e98bfa597501c28e489dd7db93b855", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -5713,52 +5432,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/object-reflector", - "type": "tidelift" } ], - "time": "2025-09-26T11:47:29+00:00" + "time": "2025-02-07T04:58:17+00:00" }, { "name": "sebastian/recursion-context", - "version": "6.0.x-dev", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5d8d13f2fcb3c9839d4ff05613e008ceb02bfc64" + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5d8d13f2fcb3c9839d4ff05613e008ceb02bfc64", - "reference": "5d8d13f2fcb3c9839d4ff05613e008ceb02bfc64", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -5789,7 +5496,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1" }, "funding": [ { @@ -5809,32 +5516,32 @@ "type": "tidelift" } ], - "time": "2025-09-26T12:14:53+00:00" + "time": "2025-08-13T04:44:59+00:00" }, { "name": "sebastian/type", - "version": "5.1.x-dev", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "6abfe424c60c52cafb35c5c78e142304925817be" + "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/6abfe424c60c52cafb35c5c78e142304925817be", - "reference": "6abfe424c60c52cafb35c5c78e142304925817be", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/e549163b9760b8f71f191651d22acf32d56d6d4d", + "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -5858,7 +5565,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.1" + "source": "https://github.com/sebastianbergmann/type/tree/6.0.3" }, "funding": [ { @@ -5878,29 +5585,29 @@ "type": "tidelift" } ], - "time": "2025-09-26T12:19:36+00:00" + "time": "2025-08-09T06:57:12+00:00" }, { "name": "sebastian/version", - "version": "5.0.x-dev", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "0e6075acec40b5ed867eefd095488171404c63fa" + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/0e6075acec40b5ed867eefd095488171404c63fa", - "reference": "0e6075acec40b5ed867eefd095488171404c63fa", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -5924,27 +5631,15 @@ "support": { "issues": "https://github.com/sebastianbergmann/version/issues", "security": "https://github.com/sebastianbergmann/version/security/policy", - "source": "https://github.com/sebastianbergmann/version/tree/5.0" + "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/version", - "type": "tidelift" } ], - "time": "2025-09-26T12:27:57+00:00" + "time": "2025-02-07T05:00:38+00:00" }, { "name": "staabm/side-effects-detector", @@ -6000,24 +5695,24 @@ }, { "name": "symfony/event-dispatcher", - "version": "8.1.x-dev", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "573f95783a2ec6e38752979db139f09fec033f03" + "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/573f95783a2ec6e38752979db139f09fec033f03", - "reference": "573f95783a2ec6e38752979db139f09fec033f03", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191", + "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/security-http": "<7.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -6026,14 +5721,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/error-handler": "^7.4|^8.0", - "symfony/expression-language": "^7.4|^8.0", - "symfony/framework-bundle": "^7.4|^8.0", - "symfony/http-foundation": "^7.4|^8.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^7.4|^8.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -6061,7 +5755,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.0-RC1" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.3" }, "funding": [ { @@ -6081,11 +5775,11 @@ "type": "tidelift" } ], - "time": "2025-10-30T14:17:19+00:00" + "time": "2025-08-13T11:49:31+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "dev-main", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", @@ -6101,7 +5795,6 @@ "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "default-branch": true, "type": "library", "extra": { "thanks": { @@ -6153,10 +5846,6 @@ "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" @@ -6166,25 +5855,25 @@ }, { "name": "symfony/filesystem", - "version": "8.1.x-dev", + "version": "v7.3.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "7fc96ae83372620eaba3826874f46e26295768ca" + "reference": "e9bcfd7837928ab656276fe00464092cc9e1826a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/7fc96ae83372620eaba3826874f46e26295768ca", - "reference": "7fc96ae83372620eaba3826874f46e26295768ca", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e9bcfd7837928ab656276fe00464092cc9e1826a", + "reference": "e9bcfd7837928ab656276fe00464092cc9e1826a", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^7.4|^8.0" + "symfony/process": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -6212,7 +5901,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v8.0.0-RC1" + "source": "https://github.com/symfony/filesystem/tree/v7.3.6" }, "funding": [ { @@ -6232,27 +5921,27 @@ "type": "tidelift" } ], - "time": "2025-11-05T14:36:47+00:00" + "time": "2025-11-05T09:52:27+00:00" }, { "name": "symfony/finder", - "version": "8.1.x-dev", + "version": "v7.3.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "7598dd5770580fa3517ec83e8da0c9b9e01f4291" + "reference": "9f696d2f1e340484b4683f7853b273abff94421f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/7598dd5770580fa3517ec83e8da0c9b9e01f4291", - "reference": "7598dd5770580fa3517ec83e8da0c9b9e01f4291", + "url": "https://api.github.com/repos/symfony/finder/zipball/9f696d2f1e340484b4683f7853b273abff94421f", + "reference": "9f696d2f1e340484b4683f7853b273abff94421f", "shasum": "" }, "require": { - "php": ">=8.4" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^7.4|^8.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -6280,7 +5969,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v8.0.0-RC1" + "source": "https://github.com/symfony/finder/tree/v7.3.5" }, "funding": [ { @@ -6300,24 +5989,24 @@ "type": "tidelift" } ], - "time": "2025-11-05T14:36:47+00:00" + "time": "2025-10-15T18:45:57+00:00" }, { "name": "symfony/options-resolver", - "version": "8.1.x-dev", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "d2b592535ffa6600c265a3893a7f7fd2bad82dd7" + "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/d2b592535ffa6600c265a3893a7f7fd2bad82dd7", - "reference": "d2b592535ffa6600c265a3893a7f7fd2bad82dd7", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/0ff2f5c3df08a395232bbc3c2eb7e84912df911d", + "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -6351,7 +6040,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v8.0.0-RC1" + "source": "https://github.com/symfony/options-resolver/tree/v7.3.3" }, "funding": [ { @@ -6371,11 +6060,11 @@ "type": "tidelift" } ], - "time": "2025-11-12T15:55:31+00:00" + "time": "2025-08-05T10:16:07+00:00" }, { "name": "symfony/polyfill-php80", - "version": "1.x-dev", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", @@ -6390,7 +6079,6 @@ "require": { "php": ">=7.2" }, - "default-branch": true, "type": "library", "extra": { "thanks": { @@ -6460,7 +6148,7 @@ }, { "name": "symfony/polyfill-php81", - "version": "1.x-dev", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -6475,7 +6163,6 @@ "require": { "php": ">=7.2" }, - "default-branch": true, "type": "library", "extra": { "thanks": { @@ -6541,22 +6228,21 @@ }, { "name": "symfony/polyfill-php84", - "version": "1.x-dev", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "4acd8b3205f17b5811d5e036e89690fe8baad365" + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/4acd8b3205f17b5811d5e036e89690fe8baad365", - "reference": "4acd8b3205f17b5811d5e036e89690fe8baad365", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", "shasum": "" }, "require": { "php": ">=7.2" }, - "default-branch": true, "type": "library", "extra": { "thanks": { @@ -6598,7 +6284,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/1.x" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" }, "funding": [ { @@ -6618,24 +6304,24 @@ "type": "tidelift" } ], - "time": "2025-08-20T10:44:59+00:00" + "time": "2025-06-24T13:30:11+00:00" }, { "name": "symfony/process", - "version": "8.1.x-dev", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "a0a750500c4ce900d69ba4e9faf16f82c10ee149" + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/a0a750500c4ce900d69ba4e9faf16f82c10ee149", - "reference": "a0a750500c4ce900d69ba4e9faf16f82c10ee149", + "url": "https://api.github.com/repos/symfony/process/zipball/f24f8f316367b30810810d4eb30c543d7003ff3b", + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b", "shasum": "" }, "require": { - "php": ">=8.4" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -6663,7 +6349,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v8.0.0-RC1" + "source": "https://github.com/symfony/process/tree/v7.3.4" }, "funding": [ { @@ -6683,24 +6369,24 @@ "type": "tidelift" } ], - "time": "2025-10-16T16:25:44+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "symfony/stopwatch", - "version": "8.1.x-dev", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "67df1914c6ccd2d7b52f70d40cf2aea02159d942" + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/67df1914c6ccd2d7b52f70d40cf2aea02159d942", - "reference": "67df1914c6ccd2d7b52f70d40cf2aea02159d942", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.2", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -6729,7 +6415,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v8.0.0-RC1" + "source": "https://github.com/symfony/stopwatch/tree/v7.3.0" }, "funding": [ { @@ -6740,16 +6426,12 @@ "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": "2025-08-04T07:36:47+00:00" + "time": "2025-02-24T10:49:57+00:00" }, { "name": "theseer/tokenizer", @@ -6803,16 +6485,12 @@ } ], "aliases": [], - "minimum-stability": "dev", - "stability-flags": { - "atto/db-module": 20, - "atto/hydrator": 20, - "atto/orm": 20 - }, + "minimum-stability": "stable", + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^8.3.0" + "php": "^8.4.0" }, "platform-dev": {}, "plugin-api-version": "2.6.0" diff --git a/docs/api.md b/docs/api.md index 80b6ffa..362e95f 100644 --- a/docs/api.md +++ b/docs/api.md @@ -12,7 +12,10 @@ The API is exposed on the container's port `8080`. Our OpenAPI leaves servers unspecified; the server is determined by how you run the container. For example, running the container locally, with the API bound to port `8080` on the host, your server would be: http://localhost:8080 -### Add Operation +> [!NOTE] +> The API can override endpoints defined by the config, but cannot delete them. + +## Add Operation This defines a default response for requests that route to a specific operation. @@ -23,7 +26,7 @@ Where `{operationId}` is the id of the operation you wish to mock. > A default response is required. > An operation is considered undefined if it cannot guarantee a defined response. -#### Example: Add the showPetById Operation +### Example: Add the showPetById Operation ```sh curl \ @@ -39,7 +42,7 @@ curl \ http://localhost:8080/operation/showPetById ``` -#### Example: Add the listPets Operation +### Example: Add the listPets Operation ```sh curl \ @@ -57,7 +60,7 @@ curl \ http://localhost:8080/operation/listPets ``` -### Delete Operation +## Delete Operation This removes the operation if it was defined through the API. It will also remove any matchers defined for the operation through the API. @@ -67,13 +70,13 @@ It will not remove a [statically configured operation](config.md). Operations are deleted with a DELETE request to `/operation/{operationId}`. Where `{operationId}` is the id of the operation you wish to delete. -#### Example: Delete the listPets Operation +### Example: Delete the listPets Operation ``` curl -X DELETE http://localhost:8080/operation/listPets ``` -### Add Matcher +## Add Matcher Specific responses can be given by defining matchers. The response is given if it *matches* the defined criteria. @@ -86,7 +89,7 @@ Where `{operationId}` is the id of an operation you have [already defined](#add- Matchers allow for alternative responses under different circumstances. -#### Example: Match listPets With a Limit Less Than Two +### Example: Match listPets With a Limit Less Than Two ```sh curl \ @@ -110,7 +113,7 @@ http://localhost:8080/operation/listPets/matcher It takes a field to look at, and a value it should be less than. This matcher would check the `query` string for the `limit` and check if it is a `value` less than 2. -### Delete Matcher +## Delete Matcher This will remove a matcher defined through the API. It will not remove a [statically configured matcher](config.md). @@ -149,7 +152,7 @@ To delete it, we would take the `operationId` and `id` to form the following req curl -X DELETE http://localhost:8080/operation/listPets/matcher/gk726ejixlvf9b7cy68u ``` -### Reset +## Reset This removes all operations and matchers defined through the API. diff --git a/docs/config.md b/docs/config.md index feb12da..0827a9e 100644 --- a/docs/config.md +++ b/docs/config.md @@ -13,6 +13,11 @@ This is the minimum viable config: [!NOTE] +> The endpoints defined by the config can be overriden by the API at runtime. +> Anything defined by the config cannot be deleted by the API. +> Calling reset on the API will not affect endpoints defined by the config. + ## Define an Operation Your config defines behaviour for operations in your API. diff --git a/phpstan.dist.neon b/phpstan.dist.neon index 3152cfd..31b53c4 100644 --- a/phpstan.dist.neon +++ b/phpstan.dist.neon @@ -1,11 +1,8 @@ parameters: level: 9 paths: - - .dagger/src - src - tests/fixture - scanDirectories: - - .dagger/sdk excludePaths: - tests/fixture/*Test.php tmpDir: .cache/phpstan diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 3d06b59..0991237 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -41,7 +41,8 @@ restrictNotices="true" restrictWarnings="true"> - src + src + tests/fixture diff --git a/src/Database/Model/Operation.php b/src/Database/Model/Operation.php index a5a1a61..503c09e 100644 --- a/src/Database/Model/Operation.php +++ b/src/Database/Model/Operation.php @@ -10,7 +10,7 @@ use Atto\Orm\Attribute\Id; /** - * @phpstan-import-type OperationConfig from \Membrane\MockServer\Mocking\Module + * @phpstan-import-type ResponseConfig from \Membrane\MockServer\Mocking\Module */ #[\Atto\Orm\Attribute\Entity] #[\Atto\Hydrator\Attribute\Hydratable] @@ -38,7 +38,10 @@ public function __construct( } /** - * @return OperationConfig + * @return array{ + * operationId: string, + * default: array{response: ResponseConfig}, + * } */ public function jsonSerialize(): array { diff --git a/src/Matcher/ConfigValidator.php b/src/Matcher/ConfigValidator.php index d39b5a0..f89bf02 100644 --- a/src/Matcher/ConfigValidator.php +++ b/src/Matcher/ConfigValidator.php @@ -24,53 +24,51 @@ /** * @phpstan-import-type AliasesConfig from Module - * @phpstan-import-type MatcherFactoryConfig from Module */ final readonly class ConfigValidator { - /** @param AliasesConfig $aliases */ public function __construct( private Membrane $membrane, private array $aliases, ) {} - /** @param MatcherFactoryConfig $config */ + /** + * @param array $config + * A valid array matches the MatcherFactoryConfig from Matcher Module + */ public function validate(array $config): Result { - $processor = new FieldSet( + $result = new FieldSet( 'matcher-config', new BeforeSet(new RequiredFields('type', 'args')), new Field('type', new IsString(), new Contained(array_keys($this->aliases))), - ); - - $result = $processor->process(new FieldName('config'), $config); + )->process(new FieldName('config'), $config); - if (! $result->isValid()) { + if ($result->isValid()) { + assert(isset($config['type']) + && isset($config['args'])); + } else { return $result; } $type = $this->aliases[$config['type']]; if (in_array($type, [AllOf::class, AnyOf::class, Not::class])) { - $processor = new FieldSet( + $result = new FieldSet( 'args', new BeforeSet(new RequiredFields('submatchers')), - new Collection('submatchers', new BeforeSet(new Count(1))) - ); + new Collection('submatchers', new BeforeSet(new Count(1))), + )->process(new FieldName('submatchers'), $config['args']); - $result = $processor - ->process(new FieldName('submatchers'), $config['args']); - - foreach ((array)$config['args'] as $subMatcher) { + foreach ((array) $config['args'] as $subMatcher) { $result->merge($this->validate($subMatcher)); } return $result; } - $spec = new ClassWithAttributes($type); - - return $this->membrane->process($config['args'], $spec); + return $this->membrane + ->process($config['args'], new ClassWithAttributes($type)); } } diff --git a/src/Matcher/MatcherFactory.php b/src/Matcher/MatcherFactory.php index d2e3ecf..1e362c6 100644 --- a/src/Matcher/MatcherFactory.php +++ b/src/Matcher/MatcherFactory.php @@ -5,7 +5,7 @@ namespace Membrane\MockServer\Matcher; /** - * @phpstan-import-type MatcherConfig from \Membrane\MockServer\Mocking\Module + * @phpstan-import-type MatcherConfig from Module */ interface MatcherFactory { diff --git a/src/Matcher/MatcherFactory/Array/Contains.php b/src/Matcher/MatcherFactory/Array/Contains.php index e886aa9..1fc3056 100644 --- a/src/Matcher/MatcherFactory/Array/Contains.php +++ b/src/Matcher/MatcherFactory/Array/Contains.php @@ -26,7 +26,7 @@ public function create(array $config): Matcher throw InvalidConfig::fromResult($result); } - assert ($result->value instanceof Matcher\Array\Contains); + assert($result->value instanceof Matcher\Array\Contains); return $result->value; } } diff --git a/src/Matcher/MatcherFactory/Equals.php b/src/Matcher/MatcherFactory/Equals.php index 6034f4d..e0ae218 100644 --- a/src/Matcher/MatcherFactory/Equals.php +++ b/src/Matcher/MatcherFactory/Equals.php @@ -28,7 +28,7 @@ public function create(array $config): Matcher throw InvalidConfig::fromResult($result); } - assert ($result->value instanceof Matcher\Equals); + assert($result->value instanceof Matcher\Equals); return $result->value; } } diff --git a/src/Matcher/MatcherFactory/Exists.php b/src/Matcher/MatcherFactory/Exists.php index 47ceee8..19f5d9e 100644 --- a/src/Matcher/MatcherFactory/Exists.php +++ b/src/Matcher/MatcherFactory/Exists.php @@ -27,7 +27,7 @@ public function create(array $config): Matcher throw InvalidConfig::fromResult($result); } - assert ($result->value instanceof Matcher\Exists); + assert($result->value instanceof Matcher\Exists); return $result->value; } } diff --git a/src/Matcher/MatcherFactory/GreaterThan.php b/src/Matcher/MatcherFactory/GreaterThan.php index c4b1cf6..130f1e2 100644 --- a/src/Matcher/MatcherFactory/GreaterThan.php +++ b/src/Matcher/MatcherFactory/GreaterThan.php @@ -4,7 +4,11 @@ namespace Membrane\MockServer\Matcher\MatcherFactory; -use Membrane\Attribute\Builder;use Membrane\Attribute\ClassWithAttributes;use Membrane\Membrane;use Membrane\MockServer\Exception\InvalidConfig;use Membrane\MockServer\Matcher\Matcher; +use Membrane\Attribute\Builder; +use Membrane\Attribute\ClassWithAttributes; +use Membrane\Membrane; +use Membrane\MockServer\Exception\InvalidConfig; +use Membrane\MockServer\Matcher\Matcher; /** * @phpstan-type Config array{ @@ -25,7 +29,7 @@ public function create(array $config): Matcher throw InvalidConfig::fromResult($result); } - assert ($result->value instanceof Matcher\GreaterThan); + assert($result->value instanceof Matcher\GreaterThan); return $result->value; } } diff --git a/src/Matcher/MatcherFactory/LessThan.php b/src/Matcher/MatcherFactory/LessThan.php index ce6687d..d7a0e5c 100644 --- a/src/Matcher/MatcherFactory/LessThan.php +++ b/src/Matcher/MatcherFactory/LessThan.php @@ -29,7 +29,7 @@ public function create(array $config): Matcher throw InvalidConfig::fromResult($result); } - assert ($result->value instanceof Matcher\LessThan); + assert($result->value instanceof Matcher\LessThan); return $result->value; } } diff --git a/src/Matcher/MatcherFactory/String/Regex.php b/src/Matcher/MatcherFactory/String/Regex.php index d16e1d3..e4d09b2 100644 --- a/src/Matcher/MatcherFactory/String/Regex.php +++ b/src/Matcher/MatcherFactory/String/Regex.php @@ -28,7 +28,7 @@ public function create(array $config): Matcher throw InvalidConfig::fromResult($result); } - assert ($result->value instanceof Matcher\String\Regex); + assert($result->value instanceof Matcher\String\Regex); return $result->value; } } diff --git a/src/Mocking/ConfigLocator.php b/src/Mocking/ConfigLocator.php index 8856513..8d08004 100644 --- a/src/Mocking/ConfigLocator.php +++ b/src/Mocking/ConfigLocator.php @@ -5,10 +5,20 @@ namespace Membrane\MockServer\Mocking; /** - * @phpstan-import-type OperationConfig from \Membrane\MockServer\Mocking\Module + * @phpstan-import-type ResponseConfig from \Membrane\MockServer\Mocking\Module + * @phpstan-import-type MatcherFactoryConfig from \Membrane\MockServer\Matcher\Module + * + * @phpstan-type Config array{ + * operationId: string, + * default: array{response: ResponseConfig}, + * matchers?: list + * } */ interface ConfigLocator { - /** @return OperationConfig */ + /** @return Config */ public function getOperationConfig(string $operationId): ?array; } diff --git a/src/Mocking/ConfigLocator/FromApplicationConfig.php b/src/Mocking/ConfigLocator/FromApplicationConfig.php index 58835cf..54a2a9c 100644 --- a/src/Mocking/ConfigLocator/FromApplicationConfig.php +++ b/src/Mocking/ConfigLocator/FromApplicationConfig.php @@ -7,15 +7,18 @@ use Membrane\MockServer\Mocking\ConfigLocator; /** - * @phpstan-import-type OperationConfig from \Membrane\MockServer\Mocking\Module + * @phpstan-import-type Config from ConfigLocator */ final readonly class FromApplicationConfig implements ConfigLocator { - /** @param array $operationMap */ + /** + * @param array $operationMap + */ public function __construct( private array $operationMap, ) {} + /** @return ?Config */ public function getOperationConfig(string $operationId): ?array { return $this->operationMap[$operationId] ?? null; diff --git a/src/Mocking/ConfigLocator/FromDatabase.php b/src/Mocking/ConfigLocator/FromDatabase.php index 70db42b..8d17e8e 100644 --- a/src/Mocking/ConfigLocator/FromDatabase.php +++ b/src/Mocking/ConfigLocator/FromDatabase.php @@ -5,14 +5,19 @@ namespace Membrane\MockServer\Mocking\ConfigLocator; use Membrane\MockServer\Database\Repository; +use Membrane\MockServer\Mocking\ConfigLocator; -final readonly class FromDatabase implements \Membrane\MockServer\Mocking\ConfigLocator +/** + * @phpstan-import-type Config from ConfigLocator + */ +final readonly class FromDatabase implements ConfigLocator { public function __construct( private Repository\Operation $operationRepository, private Repository\Matcher $matcherRepository, ) {} + /** @return ?Config */ public function getOperationConfig(string $operationId): ?array { $operation = $this->operationRepository->fetchById($operationId) ?? null; @@ -25,7 +30,10 @@ public function getOperationConfig(string $operationId): ?array return array_merge( $operation->jsonSerialize(), - ['matchers' => array_map(fn($m) => $m->jsonSerialize(), $matchers)], + ['matchers' => array_values(array_map( + fn($m) => $m->jsonSerialize(), + $matchers, + ))], ); } } diff --git a/src/Mocking/ConfigLocator/FromMultipleSources.php b/src/Mocking/ConfigLocator/FromMultipleSources.php index 2bcea6c..ce2dae7 100644 --- a/src/Mocking/ConfigLocator/FromMultipleSources.php +++ b/src/Mocking/ConfigLocator/FromMultipleSources.php @@ -6,6 +6,9 @@ use Membrane\MockServer\Mocking\ConfigLocator; +/** + * @phpstan-import-type Config from ConfigLocator + */ final readonly class FromMultipleSources implements ConfigLocator { /** @var ConfigLocator[] */ @@ -18,6 +21,7 @@ public function __construct( $this->configLocators = [$configLocator, ...$configLocators]; } + /** @return ?Config */ public function getOperationConfig(string $operationId): ?array { foreach ($this->configLocators as $configLocator) { diff --git a/src/Mocking/Handler.php b/src/Mocking/Handler.php index c520eef..b42a623 100644 --- a/src/Mocking/Handler.php +++ b/src/Mocking/Handler.php @@ -15,7 +15,7 @@ public function __construct( private ResponseFactory $responseFactory, ) {} - public function __invoke(DTO $dto): ?ResponseInterface + public function __invoke(DTO $dto): ResponseInterface { $operationId = $dto->request['request']['operationId'] ?? throw new \RuntimeException('No operation id'); // in practice this cannot happen. diff --git a/src/Mocking/Module.php b/src/Mocking/Module.php index 317b055..c3c93ab 100644 --- a/src/Mocking/Module.php +++ b/src/Mocking/Module.php @@ -27,9 +27,9 @@ * @phpstan-import-type MatcherFactoryConfig from \Membrane\MockServer\Matcher\Module * * @phpstan-type ResponseConfig array{ - * headers?: array>, - * body?: mixed[]|string, * code: int, + * headers?: array, + * body?: mixed[]|string, * } */ final class Module implements \Atto\Framework\Module\ModuleInterface diff --git a/tests/e2e/ApiTest.php b/tests/e2e/ApiTest.php index ba349a9..c70ef06 100644 --- a/tests/e2e/ApiTest.php +++ b/tests/e2e/ApiTest.php @@ -80,7 +80,7 @@ public function youCanDeleteDefinedOperation(): void $addListPets = $this->callApi( 'post', '/operation/listPets', - ['default' => ['response' => ['code' => 200]]] + ['default' => ['response' => ['code' => 200]]], ); $deleteListPets = $this->callApi('delete', '/operation/listPets'); @@ -115,13 +115,13 @@ public function youMayMatchDefinedMatcher(): void 'args' => ['field' => ['path', 'petId'], 'value' => 6], ], 'response' => $expected, - ] + ], ); self::assertSame(201, $addMatcherForId6->getStatusCode()); $showPetById6 = $this->callMocking('get', '/pets/6'); self::assertSame($expected['code'], $showPetById6->getStatusCode()); - self::assertSame($expected['body'], (string)$showPetById6->getBody()); + self::assertSame($expected['body'], (string) $showPetById6->getBody()); } #[Test] @@ -205,7 +205,7 @@ public function youMayMatchMultipleDefinedMatchers(): void $showPetById6 = $this->callMocking('get', '/pets/6'); self::assertSame($matchId6['response']['code'], $showPetById6->getStatusCode()); - self::assertSame($matchId6['response']['body'], (string)$showPetById6->getBody()); + self::assertSame($matchId6['response']['body'], (string) $showPetById6->getBody()); $showPetByIdMinus1 = $this->callMocking('get', '/pets/-1'); self::assertSame($matchNegativeIds['response']['code'], $showPetByIdMinus1->getStatusCode()); @@ -280,12 +280,12 @@ public function youWontDeleteOperationWhenDeletingMatcher(): void ], ); - $matcherForId6 = json_decode((string)$addMatcherForId6->getBody()); + $matcherForId6 = json_decode((string) $addMatcherForId6->getBody()); $deleteMatcherForId6 = $this->callApi( 'delete', - "/operation/showPetById/matcher/$matcherForId6->id" + "/operation/showPetById/matcher/$matcherForId6->id", ); self::assertSame(204, $deleteMatcherForId6->getStatusCode()); @@ -298,7 +298,7 @@ public function youWontDeleteOperationWhenDeletingMatcher(): void public function youWillDeleteMatchersWhenDeletingOperation(): void { $default = ['response' => ['code' => 404]]; - $addShowPetById = fn () => $this->callApi( + $addShowPetById = fn() => $this->callApi( 'post', '/operation/showPetById', ['default' => $default], diff --git a/tests/unit/Matcher/ConfigValidatorTest.php b/tests/unit/Matcher/ConfigValidatorTest.php index d73b217..8e6a7cb 100644 --- a/tests/unit/Matcher/ConfigValidatorTest.php +++ b/tests/unit/Matcher/ConfigValidatorTest.php @@ -27,7 +27,6 @@ #[\PHPUnit\Framework\Attributes\CoversClass(ConfigValidator::class)] final class ConfigValidatorTest extends \PHPUnit\Framework\TestCase { - /** * @param AliasesConfig $aliases * @param MatcherFactoryConfig $config @@ -38,7 +37,7 @@ public function itValidatesConfig( Result $expected, array $aliases, array $config, - ): void{ + ): void { $sut = new ConfigValidator( new Membrane(new Builder()), $aliases, diff --git a/tests/unit/Matcher/Matcher/Array/ContainsTest.php b/tests/unit/Matcher/Matcher/Array/ContainsTest.php index 1465e18..5caf681 100644 --- a/tests/unit/Matcher/Matcher/Array/ContainsTest.php +++ b/tests/unit/Matcher/Matcher/Array/ContainsTest.php @@ -96,7 +96,7 @@ public static function provideArraysToConstructFrom(): \Generator [ 'field' => ['query', 'tags'], 'values' => ['cat'], - ] + ], ]; yield 'three values' => [ @@ -109,7 +109,7 @@ public static function provideArraysToConstructFrom(): \Generator [ 'field' => ['query', 'tags'], 'values' => ['cat', 'dog', 'degu'], - ] + ], ]; } } diff --git a/tests/unit/Matcher/Matcher/ExistsTest.php b/tests/unit/Matcher/Matcher/ExistsTest.php index fc37a05..7e0c042 100644 --- a/tests/unit/Matcher/Matcher/ExistsTest.php +++ b/tests/unit/Matcher/Matcher/ExistsTest.php @@ -93,7 +93,7 @@ public static function provideArraysToConstructFrom(): \Generator new Exists( new Field('id', 'path'), new Field('pageLimit', 'query'), - new Field('species', 'requestBody', 'pet') + new Field('species', 'requestBody', 'pet'), ), ['fields' => [ ['path', 'id'], diff --git a/tests/unit/Mocking/HandlerTest.php b/tests/unit/Mocking/HandlerTest.php index 0c242dd..40dee41 100644 --- a/tests/unit/Mocking/HandlerTest.php +++ b/tests/unit/Mocking/HandlerTest.php @@ -76,7 +76,7 @@ public function itHandlesDTOs( self::assertSame( $expected->getStatusCode(), - $actual->getStatusCode() + $actual->getStatusCode(), ); self::assertSame( $expected->getBody()->getContents(),