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(),