From 4f517348aef78acf028e6058c6df1b355cde78ba Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 17:41:34 +0200 Subject: [PATCH 01/51] Remove Method annotation Will be removes in Symfony 5.2 --- src/AppBundle/Controller/WebhookController.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/AppBundle/Controller/WebhookController.php b/src/AppBundle/Controller/WebhookController.php index e752a26..1eec0de 100644 --- a/src/AppBundle/Controller/WebhookController.php +++ b/src/AppBundle/Controller/WebhookController.php @@ -3,7 +3,6 @@ namespace AppBundle\Controller; use AppBundle\ProjectImport\ImportProjectTask; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -18,8 +17,7 @@ public function __construct( } /** - * @Route("/webhook", name="webhook") - * @Method({"POST"}) + * @Route("/webhook", name="webhook", methods={"POST"}) */ public function updateAction(Request $request) { From 2664e31790821b39dd99c2d2f4abbbf9ce55bd63 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 17:43:59 +0200 Subject: [PATCH 02/51] Remove activation of deprecated WebServerBundle --- config/bundles.php | 1 - 1 file changed, 1 deletion(-) diff --git a/config/bundles.php b/config/bundles.php index 66135f0..e48c4a9 100755 --- a/config/bundles.php +++ b/config/bundles.php @@ -7,7 +7,6 @@ Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['development' => true, 'test' => true], Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], - Symfony\Bundle\WebServerBundle\WebServerBundle::class => ['all' => true], AppBundle\AppBundle::class => ['all' => true], Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['development' => true, 'test' => true], From 52ab1ec739b7cf52a133ec13b35e54773ea90efb Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 17:44:31 +0200 Subject: [PATCH 03/51] Do not require unused swiftmailer-bundle --- composer.json | 1 - 1 file changed, 1 deletion(-) diff --git a/composer.json b/composer.json index 81fb2a8..633b7f3 100755 --- a/composer.json +++ b/composer.json @@ -10,7 +10,6 @@ "doctrine/migrations": "^2.0", "doctrine/orm": "^2.5.14", "sensio/framework-extra-bundle": "^5.0", - "symfony/swiftmailer-bundle": "^3.0", "symfony/monolog-bundle": "^3.2.0", "symfony/symfony": "^4.4.51" }, From 0245bce6c364b5e8a339c40bac00769034b90791 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 17:44:56 +0200 Subject: [PATCH 04/51] Require newer composer/composer --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 633b7f3..f26dd3c 100755 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "description": "Composer Dependency Tracking", "require": { "php": "^8.1", - "composer/composer": "^1.6", + "composer/composer": "^2.0", "doctrine/doctrine-bundle": "^2.0", "doctrine/doctrine-migrations-bundle": "^2.0", "doctrine/migrations": "^2.0", From 631c8d14ff50c2d6c0f5cebd0b3a4c43c8292b6e Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 18:05:26 +0200 Subject: [PATCH 05/51] Update Symfony ^4.4 -> ^5.4 - sensio/framework-extra-bundle -> ^6.1 - composer/composer 1 -> 2 Update code and config accordingly. --- composer.json | 4 +- composer.lock | 1482 ++++++++++------- src/AppBundle/Factory/VcsDriverFactory.php | 6 +- .../ProjectImport/LockFileParser.php | 8 +- src/AppKernel.php | 2 +- src/config.default.yml | 4 +- src/config_development.default.yml | 2 +- 7 files changed, 937 insertions(+), 571 deletions(-) diff --git a/composer.json b/composer.json index f26dd3c..1da7ef0 100755 --- a/composer.json +++ b/composer.json @@ -9,9 +9,9 @@ "doctrine/doctrine-migrations-bundle": "^2.0", "doctrine/migrations": "^2.0", "doctrine/orm": "^2.5.14", - "sensio/framework-extra-bundle": "^5.0", + "sensio/framework-extra-bundle": "^6.1", "symfony/monolog-bundle": "^3.2.0", - "symfony/symfony": "^4.4.51" + "symfony/symfony": "^5.4" }, "require-dev": { "phpunit/phpunit": "^8.0", diff --git a/composer.lock b/composer.lock index 1bf6b36..92a10e1 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "556b8906e784d29069e1c7b6c5e761cc", + "content-hash": "a9962a8cd0e97a37872a014ecc54bfff", "packages": [ { "name": "composer/ca-bundle", - "version": "1.5.7", + "version": "1.5.11", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "d665d22c417056996c59019579f1967dfe5c1e82" + "reference": "68ff39175e8e94a4bb1d259407ce51a6a60f09e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d665d22c417056996c59019579f1967dfe5c1e82", - "reference": "d665d22c417056996c59019579f1967dfe5c1e82", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/68ff39175e8e94a4bb1d259407ce51a6a60f09e6", + "reference": "68ff39175e8e94a4bb1d259407ce51a6a60f09e6", "shasum": "" }, "require": { @@ -64,7 +64,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.7" + "source": "https://github.com/composer/ca-bundle/tree/1.5.11" }, "funding": [ { @@ -74,67 +74,149 @@ { "url": "https://github.com/composer", "type": "github" + } + ], + "time": "2026-03-30T09:16:10+00:00" + }, + { + "name": "composer/class-map-generator", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/composer/class-map-generator.git", + "reference": "86d8208fc3c649a3a999daf1a63c25201be2990f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/86d8208fc3c649a3a999daf1a63c25201be2990f", + "reference": "86d8208fc3c649a3a999daf1a63c25201be2990f", + "shasum": "" + }, + "require": { + "composer/pcre": "^2.1 || ^3.1", + "php": "^7.2 || ^8.0", + "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7 || ^8" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1.1 || ^2", + "phpunit/phpunit": "^8", + "symfony/filesystem": "^5.4 || ^6 || ^7 || ^8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\ClassMapGenerator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Utilities to scan PHP code and generate class maps.", + "keywords": [ + "classmap" + ], + "support": { + "issues": "https://github.com/composer/class-map-generator/issues", + "source": "https://github.com/composer/class-map-generator/tree/1.7.3" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" + "url": "https://github.com/composer", + "type": "github" } ], - "time": "2025-05-26T15:08:54+00:00" + "time": "2026-05-05T09:17:07+00:00" }, { "name": "composer/composer", - "version": "1.10.27", + "version": "2.9.8", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "f8f49191eec76f039b466aa1f161406fe43aff50" + "reference": "39ee8baff8e97a1b657bbfcd6a236ff93a5efbb2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/f8f49191eec76f039b466aa1f161406fe43aff50", - "reference": "f8f49191eec76f039b466aa1f161406fe43aff50", + "url": "https://api.github.com/repos/composer/composer/zipball/39ee8baff8e97a1b657bbfcd6a236ff93a5efbb2", + "reference": "39ee8baff8e97a1b657bbfcd6a236ff93a5efbb2", "shasum": "" }, "require": { - "composer/ca-bundle": "^1.0", - "composer/semver": "^1.0", - "composer/spdx-licenses": "^1.2", - "composer/xdebug-handler": "^1.1", - "justinrainbow/json-schema": "^5.2.10", - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0", + "composer/ca-bundle": "^1.5", + "composer/class-map-generator": "^1.4.0", + "composer/metadata-minifier": "^1.0", + "composer/pcre": "^2.3 || ^3.3", + "composer/semver": "^3.3", + "composer/spdx-licenses": "^1.5.7", + "composer/xdebug-handler": "^2.0.2 || ^3.0.3", + "ext-json": "*", + "justinrainbow/json-schema": "^6.5.1", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "react/promise": "^3.3", "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.0", - "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0", - "symfony/finder": "^2.7 || ^3.0 || ^4.0 || ^5.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0" - }, - "conflict": { - "symfony/console": "2.8.38" + "seld/phar-utils": "^1.2", + "seld/signal-handler": "^2.0", + "symfony/console": "^5.4.47 || ^6.4.25 || ^7.1.10 || ^8.0", + "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.1.10 || ^8.0", + "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.1.10 || ^8.0", + "symfony/polyfill-php73": "^1.24", + "symfony/polyfill-php80": "^1.24", + "symfony/polyfill-php81": "^1.24", + "symfony/polyfill-php84": "^1.30", + "symfony/process": "^5.4.47 || ^6.4.25 || ^7.1.10 || ^8.0" }, "require-dev": { - "phpspec/prophecy": "^1.10", - "symfony/phpunit-bridge": "^4.2" + "phpstan/phpstan": "^1.11.8", + "phpstan/phpstan-deprecation-rules": "^1.2.0", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.0", + "phpstan/phpstan-symfony": "^1.4.0", + "symfony/phpunit-bridge": "^6.4.25 || ^7.3.3 || ^8.0" }, "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives", - "ext-zlib": "Allow gzip compression of HTTP requests" + "ext-curl": "Provides HTTP support (will fallback to PHP streams if missing)", + "ext-openssl": "Enables access to repositories and packages over HTTPS", + "ext-zip": "Allows direct extraction of ZIP archives (unzip/7z binaries will be used instead if available)", + "ext-zlib": "Enables gzip for HTTP requests" }, "bin": [ "bin/composer" ], "type": "library", "extra": { + "phpstan": { + "includes": [ + "phpstan/rules.neon" + ] + }, "branch-alias": { - "dev-master": "1.10-dev" + "dev-main": "2.9-dev" } }, "autoload": { "psr-4": { - "Composer\\": "src/Composer" + "Composer\\": "src/Composer/" } }, "notification-url": "https://packagist.org/downloads/", @@ -145,12 +227,12 @@ { "name": "Nils Adermann", "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" + "homepage": "https://www.naderman.de" }, { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "homepage": "https://seld.be" } ], "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", @@ -161,9 +243,75 @@ "package" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/1.10.27" + "security": "https://github.com/composer/composer/security/policy", + "source": "https://github.com/composer/composer/tree/2.9.8" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + } + ], + "time": "2026-05-13T07:28:38+00:00" + }, + { + "name": "composer/metadata-minifier", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/metadata-minifier.git", + "reference": "c549d23829536f0d0e984aaabbf02af91f443207" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207", + "reference": "c549d23829536f0d0e984aaabbf02af91f443207", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "composer/composer": "^2", + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\MetadataMinifier\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Small utility library that handles metadata minification and expansion.", + "keywords": [ + "composer", + "compression" + ], + "support": { + "issues": "https://github.com/composer/metadata-minifier/issues", + "source": "https://github.com/composer/metadata-minifier/tree/1.0.0" }, "funding": [ { @@ -179,7 +327,7 @@ "type": "tidelift" } ], - "time": "2023-09-29T08:50:23+00:00" + "time": "2021-04-07T13:37:33+00:00" }, { "name": "composer/package-versions-deprecated", @@ -254,30 +402,110 @@ ], "time": "2022-01-17T14:14:24+00:00" }, + { + "name": "composer/pcre", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-12T16:29:46+00:00" + }, { "name": "composer/semver", - "version": "1.7.2", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "647490bbcaf7fc4891c58f47b825eb99d19c377a" + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/647490bbcaf7fc4891c58f47b825eb99d19c377a", - "reference": "647490bbcaf7fc4891c58f47b825eb99d19c377a", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -314,9 +542,9 @@ "versioning" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/1.7.2" + "source": "https://github.com/composer/semver/tree/3.4.4" }, "funding": [ { @@ -326,34 +554,30 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2020-12-03T15:47:16+00:00" + "time": "2025-08-20T19:15:30+00:00" }, { "name": "composer/spdx-licenses", - "version": "1.5.9", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/composer/spdx-licenses.git", - "reference": "edf364cefe8c43501e21e88110aac10b284c3c9f" + "reference": "5ecd0cb4177696f9fd48f1605dda81db3dee7889" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/edf364cefe8c43501e21e88110aac10b284c3c9f", - "reference": "edf364cefe8c43501e21e88110aac10b284c3c9f", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/5ecd0cb4177696f9fd48f1605dda81db3dee7889", + "reference": "5ecd0cb4177696f9fd48f1605dda81db3dee7889", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.2 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" + "symfony/phpunit-bridge": "^6.4.25 || ^7.3.3 || ^8.0" }, "type": "library", "extra": { @@ -396,7 +620,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/spdx-licenses/issues", - "source": "https://github.com/composer/spdx-licenses/tree/1.5.9" + "source": "https://github.com/composer/spdx-licenses/tree/1.6.0" }, "funding": [ { @@ -406,35 +630,33 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2025-05-12T21:07:07+00:00" + "time": "2026-04-08T20:18:39+00:00" }, { "name": "composer/xdebug-handler", - "version": "1.4.6", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "f27e06cd9675801df441b3656569b328e04aa37c" + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f27e06cd9675801df441b3656569b328e04aa37c", - "reference": "f27e06cd9675801df441b3656569b328e04aa37c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -458,9 +680,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/1.4.6" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, "funding": [ { @@ -476,7 +698,7 @@ "type": "tidelift" } ], - "time": "2021-03-25T17:01:18+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { "name": "doctrine/annotations", @@ -552,6 +774,7 @@ "issues": "https://github.com/doctrine/annotations/issues", "source": "https://github.com/doctrine/annotations/tree/1.14.4" }, + "abandoned": true, "time": "2024-09-05T10:15:52+00:00" }, { @@ -645,20 +868,21 @@ "type": "tidelift" } ], + "abandoned": true, "time": "2022-05-20T20:07:39+00:00" }, { "name": "doctrine/collections", - "version": "2.3.0", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d" + "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/2eb07e5953eed811ce1b309a7478a3b236f2273d", - "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d", + "url": "https://api.github.com/repos/doctrine/collections/zipball/7713da39d8e237f28411d6a616a3dce5e20d5de2", + "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2", "shasum": "" }, "require": { @@ -667,11 +891,11 @@ "symfony/polyfill-php84": "^1.30" }, "require-dev": { - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^14", "ext-json": "*", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^10.5" + "phpstan/phpstan": "^2.1.30", + "phpstan/phpstan-phpunit": "^2.0.7", + "phpunit/phpunit": "^10.5.58 || ^11.5.42 || ^12.4" }, "type": "library", "autoload": { @@ -715,7 +939,7 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/2.3.0" + "source": "https://github.com/doctrine/collections/tree/2.6.0" }, "funding": [ { @@ -731,7 +955,7 @@ "type": "tidelift" } ], - "time": "2025-03-22T10:17:19+00:00" + "time": "2026-01-15T10:01:58+00:00" }, { "name": "doctrine/common", @@ -935,29 +1159,29 @@ }, { "name": "doctrine/deprecations", - "version": "1.1.5", + "version": "1.1.6", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "conflict": { - "phpunit/phpunit": "<=7.5 || >=13" + "phpunit/phpunit": "<=7.5 || >=14" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^13", - "phpstan/phpstan": "1.4.10 || 2.1.11", + "doctrine/coding-standard": "^9 || ^12 || ^14", + "phpstan/phpstan": "1.4.10 || 2.1.30", "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", "psr/log": "^1 || ^2 || ^3" }, "suggest": { @@ -977,9 +1201,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + "source": "https://github.com/doctrine/deprecations/tree/1.1.6" }, - "time": "2025-04-07T20:06:18+00:00" + "time": "2026-02-07T07:09:04+00:00" }, { "name": "doctrine/doctrine-bundle", @@ -1270,33 +1494,32 @@ }, { "name": "doctrine/inflector", - "version": "2.0.10", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^11.0", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25 || ^5.4" + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + "Doctrine\\Inflector\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1341,7 +1564,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.10" + "source": "https://github.com/doctrine/inflector/tree/2.1.0" }, "funding": [ { @@ -1357,7 +1580,7 @@ "type": "tidelift" } ], - "time": "2024-02-18T20:23:39+00:00" + "time": "2025-08-10T19:31:58+00:00" }, { "name": "doctrine/instantiator", @@ -1707,16 +1930,16 @@ }, { "name": "doctrine/persistence", - "version": "3.4.0", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff" + "reference": "5785dc79a0553ba41b0dda8a7ee792053e6186c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/0ea965320cec355dba75031c1b23d4c78362e3ff", - "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/5785dc79a0553ba41b0dda8a7ee792053e6186c8", + "reference": "5785dc79a0553ba41b0dda8a7ee792053e6186c8", "shasum": "" }, "require": { @@ -1728,18 +1951,18 @@ "doctrine/common": "<2.10" }, "require-dev": { - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^12 || ^14", "doctrine/common": "^3.0", - "phpstan/phpstan": "1.12.7", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan": "^1 || 2.1.30", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", "phpunit/phpunit": "^8.5.38 || ^9.5", "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Persistence\\": "src/Persistence" + "Doctrine\\Persistence\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1783,7 +2006,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.4.0" + "source": "https://github.com/doctrine/persistence/tree/3.4.4" }, "funding": [ { @@ -1799,7 +2022,7 @@ "type": "tidelift" } ], - "time": "2024-10-30T19:48:12+00:00" + "time": "2026-04-04T19:40:43+00:00" }, { "name": "doctrine/sql-formatter", @@ -1856,91 +2079,24 @@ }, "time": "2025-01-24T11:45:48+00:00" }, - { - "name": "egulias/email-validator", - "version": "3.2.6", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", - "reference": "e5997fa97e8790cdae03a9cbd5e78e45e3c7bda7", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1.2|^2", - "php": ">=7.2", - "symfony/polyfill-intl-idn": "^1.15" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.8|^9.3.3", - "vimeo/psalm": "^4" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ], - "support": { - "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/3.2.6" - }, - "funding": [ - { - "url": "https://github.com/egulias", - "type": "github" - } - ], - "time": "2023-06-01T07:04:22+00:00" - }, { "name": "friendsofphp/proxy-manager-lts", - "version": "v1.0.18", + "version": "v1.0.19", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", - "reference": "2c8a6cffc3220e99352ad958fe7cf06bf6f7690f" + "reference": "c20299aa9f48a622052964a75c5a4cef017398b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/2c8a6cffc3220e99352ad958fe7cf06bf6f7690f", - "reference": "2c8a6cffc3220e99352ad958fe7cf06bf6f7690f", + "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/c20299aa9f48a622052964a75c5a4cef017398b2", + "reference": "c20299aa9f48a622052964a75c5a4cef017398b2", "shasum": "" }, "require": { "laminas/laminas-code": "~3.4.1|^4.0", "php": ">=7.1", - "symfony/filesystem": "^4.4.17|^5.0|^6.0|^7.0" + "symfony/filesystem": "^4.4.17|^5.0|^6.0|^7.0|^8.0" }, "conflict": { "laminas/laminas-stdlib": "<3.2.1", @@ -1991,7 +2147,7 @@ ], "support": { "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues", - "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.18" + "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.19" }, "funding": [ { @@ -2003,34 +2159,44 @@ "type": "tidelift" } ], - "time": "2024-03-20T12:50:41+00:00" + "time": "2025-10-28T10:28:17+00:00" }, { "name": "justinrainbow/json-schema", - "version": "5.3.0", + "version": "6.8.2", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8" + "reference": "2c89ebb95ca9cedc9347f780333f7b25792dcb76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", - "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/2c89ebb95ca9cedc9347f780333f7b25792dcb76", + "reference": "2c89ebb95ca9cedc9347f780333f7b25792dcb76", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-json": "*", + "marc-mabe/php-enum": "^4.4", + "php": "^7.2 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" + "friendsofphp/php-cs-fixer": "3.3.0", + "json-schema/json-schema-test-suite": "dev-main", + "marc-mabe/php-enum-phpstan": "^2.0", + "phpspec/prophecy": "^1.19", + "phpstan/phpstan": "^1.12", + "phpunit/phpunit": "^8.5" }, "bin": [ "bin/validate-json" ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.x-dev" + } + }, "autoload": { "psr-4": { "JsonSchema\\": "src/JsonSchema/" @@ -2059,40 +2225,40 @@ } ], "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", + "homepage": "https://github.com/jsonrainbow/json-schema", "keywords": [ "json", "schema" ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/5.3.0" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.8.2" }, - "time": "2024-07-06T21:00:26+00:00" + "time": "2026-05-05T05:39:01+00:00" }, { "name": "laminas/laminas-code", - "version": "4.16.0", + "version": "4.17.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "1793e78dad4108b594084d05d1fb818b85b110af" + "reference": "40d61e2899ec17c5d08bbc0a2d586b3ca17ab9bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/1793e78dad4108b594084d05d1fb818b85b110af", - "reference": "1793e78dad4108b594084d05d1fb818b85b110af", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/40d61e2899ec17c5d08bbc0a2d586b3ca17ab9bd", + "reference": "40d61e2899ec17c5d08bbc0a2d586b3ca17ab9bd", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { "doctrine/annotations": "^2.0.1", "ext-phar": "*", "laminas/laminas-coding-standard": "^3.0.0", "laminas/laminas-stdlib": "^3.18.0", - "phpunit/phpunit": "^10.5.37", + "phpunit/phpunit": "^10.5.58", "psalm/plugin-phpunit": "^0.19.0", "vimeo/psalm": "^5.15.0" }, @@ -2131,55 +2297,145 @@ "type": "community_bridge" } ], - "time": "2024-11-20T13:15:13+00:00" + "time": "2025-11-01T09:38:14+00:00" }, { - "name": "monolog/monolog", - "version": "1.27.1", + "name": "marc-mabe/php-enum", + "version": "v4.7.2", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "904713c5929655dc9b97288b69cfeedad610c9a1" + "url": "https://github.com/marc-mabe/php-enum.git", + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/904713c5929655dc9b97288b69cfeedad610c9a1", - "reference": "904713c5929655dc9b97288b69cfeedad610c9a1", + "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/bb426fcdd65c60fb3638ef741e8782508fda7eef", + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" + "ext-reflection": "*", + "php": "^7.1 | ^8.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "phpbench/phpbench": "^0.16.10 || ^1.0.4", + "phpstan/phpstan": "^1.3.1", + "phpunit/phpunit": "^7.5.20 | ^8.5.22 | ^9.5.11", + "vimeo/psalm": "^4.17.0 | ^5.26.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.2-dev", + "dev-master": "4.7-dev" + } + }, + "autoload": { + "psr-4": { + "MabeEnum\\": "src/" + }, + "classmap": [ + "stubs/Stringable.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Marc Bennewitz", + "email": "dev@mabe.berlin", + "homepage": "https://mabe.berlin/", + "role": "Lead" + } + ], + "description": "Simple and fast implementation of enumerations with native PHP", + "homepage": "https://github.com/marc-mabe/php-enum", + "keywords": [ + "enum", + "enum-map", + "enum-set", + "enumeration", + "enumerator", + "enummap", + "enumset", + "map", + "set", + "type", + "type-hint", + "typehint" + ], + "support": { + "issues": "https://github.com/marc-mabe/php-enum/issues", + "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.2" + }, + "time": "2025-09-14T11:18:39+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.10.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "phpstan/phpstan": "^0.12.59", - "phpunit/phpunit": "~4.5", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "^5.3|^6.0" + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8 || ^2.0", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, "autoload": { "psr-4": { "Monolog\\": "src/Monolog" @@ -2193,11 +2449,11 @@ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "homepage": "https://seld.be" } ], "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", + "homepage": "https://github.com/Seldaek/monolog", "keywords": [ "log", "logging", @@ -2205,7 +2461,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/1.27.1" + "source": "https://github.com/Seldaek/monolog/tree/3.10.0" }, "funding": [ { @@ -2217,7 +2473,7 @@ "type": "tidelift" } ], - "time": "2022-06-09T08:53:42+00:00" + "time": "2026-01-02T08:56:05+00:00" }, { "name": "psr/cache", @@ -2316,6 +2572,56 @@ }, "time": "2021-11-05T16:50:12+00:00" }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, { "name": "psr/link", "version": "1.1.1", @@ -2371,30 +2677,30 @@ }, { "name": "psr/log", - "version": "1.1.4", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2415,9 +2721,82 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/2.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:41:46+00:00" + }, + { + "name": "react/promise", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpstan/phpstan": "1.12.28 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-08-19T18:57:03+00:00" }, { "name": "seld/jsonlint", @@ -2532,63 +2911,40 @@ "time": "2022-08-31T10:31:18+00:00" }, { - "name": "sensio/framework-extra-bundle", - "version": "v5.6.1", + "name": "seld/signal-handler", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "430d14c01836b77c28092883d195a43ce413ee32" + "url": "https://github.com/Seldaek/signal-handler.git", + "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/430d14c01836b77c28092883d195a43ce413ee32", - "reference": "430d14c01836b77c28092883d195a43ce413ee32", + "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98", + "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", - "php": ">=7.2.5", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/framework-bundle": "^4.4|^5.0", - "symfony/http-kernel": "^4.4|^5.0" - }, - "conflict": { - "doctrine/doctrine-cache-bundle": "<1.3.1", - "doctrine/persistence": "<1.3" + "php": ">=7.2.0" }, "require-dev": { - "doctrine/dbal": "^2.10|^3.0", - "doctrine/doctrine-bundle": "^1.11|^2.0", - "doctrine/orm": "^2.5", - "nyholm/psr7": "^1.1", - "symfony/browser-kit": "^4.4|^5.0", - "symfony/doctrine-bridge": "^4.4|^5.0", - "symfony/dom-crawler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/monolog-bridge": "^4.0|^5.0", - "symfony/monolog-bundle": "^3.2", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9", - "symfony/psr-http-message-bridge": "^1.1", - "symfony/security-bundle": "^4.4|^5.0", - "symfony/twig-bundle": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0", - "twig/twig": "^1.34|^2.4|^3.0" + "phpstan/phpstan": "^1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^7.5.20 || ^8.5.23", + "psr/log": "^1 || ^2 || ^3" }, - "type": "symfony-bundle", + "type": "library", "extra": { "branch-alias": { - "dev-master": "5.6.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { "psr-4": { - "Sensio\\Bundle\\FrameworkExtraBundle\\": "src/" - }, - "exclude-from-classmap": [ - "/tests/" - ] + "Seld\\Signal\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2596,59 +2952,80 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "This bundle provides a way to configure your controllers with annotations", + "description": "Simple unix signal handler that silently fails where signals are not supported for easy cross-platform development", "keywords": [ - "annotations", - "controllers" + "posix", + "sigint", + "signal", + "sigterm", + "unix" ], "support": { - "issues": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/issues", - "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v5.6.1" + "issues": "https://github.com/Seldaek/signal-handler/issues", + "source": "https://github.com/Seldaek/signal-handler/tree/2.0.2" }, - "abandoned": "Symfony", - "time": "2020-08-25T19:10:18+00:00" + "time": "2023-09-03T09:24:00+00:00" }, { - "name": "swiftmailer/swiftmailer", - "version": "v6.3.0", + "name": "sensio/framework-extra-bundle", + "version": "v6.2.10", "source": { "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" + "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", + "reference": "2f886f4b31f23c76496901acaedfedb6936ba61f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/2f886f4b31f23c76496901acaedfedb6936ba61f", + "reference": "2f886f4b31f23c76496901acaedfedb6936ba61f", "shasum": "" }, "require": { - "egulias/email-validator": "^2.0|^3.1", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" + "doctrine/annotations": "^1.0|^2.0", + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/framework-bundle": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0" }, - "require-dev": { - "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.4" + "conflict": { + "doctrine/doctrine-cache-bundle": "<1.3.1", + "doctrine/persistence": "<1.3" }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses" + "require-dev": { + "doctrine/dbal": "^2.10|^3.0", + "doctrine/doctrine-bundle": "^1.11|^2.0", + "doctrine/orm": "^2.5", + "symfony/browser-kit": "^4.4|^5.0|^6.0", + "symfony/doctrine-bridge": "^4.4|^5.0|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/monolog-bridge": "^4.0|^5.0|^6.0", + "symfony/monolog-bundle": "^3.2", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0", + "symfony/security-bundle": "^4.4|^5.0|^6.0", + "symfony/twig-bundle": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0", + "twig/twig": "^1.34|^2.4|^3.0" }, - "type": "library", + "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "6.2-dev" + "dev-master": "6.1.x-dev" } }, "autoload": { - "files": [ - "lib/swift_required.php" + "psr-4": { + "Sensio\\Bundle\\FrameworkExtraBundle\\": "src/" + }, + "exclude-from-classmap": [ + "/tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -2656,59 +3033,48 @@ "MIT" ], "authors": [ - { - "name": "Chris Corbyn" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" } ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", + "description": "This bundle provides a way to configure your controllers with annotations", "keywords": [ - "email", - "mail", - "mailer" + "annotations", + "controllers" ], "support": { - "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" + "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v6.2.10" }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", - "type": "tidelift" - } - ], - "abandoned": "symfony/mailer", - "time": "2021-10-18T15:26:12+00:00" + "abandoned": "Symfony", + "time": "2023-02-24T14:57:12+00:00" }, { "name": "symfony/contracts", - "version": "v1.10.0", + "version": "v2.5.5", "source": { "type": "git", "url": "https://github.com/symfony/contracts.git", - "reference": "e3cc841da1eaf10088250a10618aa223eeb82280" + "reference": "4d727f81a7eede1a3021fc93f02c1cc7ccb32abd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/contracts/zipball/e3cc841da1eaf10088250a10618aa223eeb82280", - "reference": "e3cc841da1eaf10088250a10618aa223eeb82280", + "url": "https://api.github.com/repos/symfony/contracts/zipball/4d727f81a7eede1a3021fc93f02c1cc7ccb32abd", + "reference": "4d727f81a7eede1a3021fc93f02c1cc7ccb32abd", "shasum": "" }, "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", "psr/cache": "^1.0|^2.0|^3.0", - "psr/container": "^1.0" + "psr/container": "^1.1", + "psr/event-dispatcher": "^1.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "replace": { "symfony/cache-contracts": "self.version", + "symfony/deprecation-contracts": "self.version", "symfony/event-dispatcher-contracts": "self.version", "symfony/http-client-contracts": "self.version", "symfony/service-contracts": "self.version", @@ -2718,7 +3084,6 @@ "symfony/polyfill-intl-idn": "^1.10" }, "suggest": { - "psr/event-dispatcher": "When using the EventDispatcher contracts", "symfony/cache-implementation": "", "symfony/event-dispatcher-implementation": "", "symfony/http-client-implementation": "", @@ -2728,10 +3093,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.1-dev" + "dev-main": "2.5-dev" } }, "autoload": { + "files": [ + "Deprecation/function.php" + ], "psr-4": { "Symfony\\Contracts\\": "" }, @@ -2764,7 +3132,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/contracts/tree/v1.10.0" + "source": "https://github.com/symfony/contracts/tree/v2.5.5" }, "funding": [ { @@ -2780,74 +3148,7 @@ "type": "tidelift" } ], - "time": "2022-07-20T09:59:04+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2024-11-28T08:37:04+00:00" }, { "name": "symfony/monolog-bundle", @@ -2932,16 +3233,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.32.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { @@ -2991,7 +3292,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" }, "funding": [ { @@ -3002,35 +3303,36 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { - "name": "symfony/polyfill-iconv", - "version": "v1.32.0", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.37.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "5f3b930437ae03ae5dff61269024d8ea1b3774aa" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/5f3b930437ae03ae5dff61269024d8ea1b3774aa", - "reference": "5f3b930437ae03ae5dff61269024d8ea1b3774aa", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/4864388bfbd3001ce88e234fab652acd91fdc57e", + "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e", "shasum": "" }, "require": { "php": ">=7.2" }, - "provide": { - "ext-iconv": "*" - }, "suggest": { - "ext-iconv": "For best performance" + "ext-intl": "For best performance" }, "type": "library", "extra": { @@ -3044,7 +3346,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -3061,17 +3363,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Iconv extension", + "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "iconv", + "grapheme", + "intl", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.37.0" }, "funding": [ { @@ -3082,25 +3385,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-17T14:58:18+00:00" + "time": "2026-04-26T13:13:48+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.32.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "763d2a91fea5681509ca01acbc1c5e450d127811" + "reference": "3510b63d07376b04e57e27e82607d468bb134f78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/763d2a91fea5681509ca01acbc1c5e450d127811", - "reference": "763d2a91fea5681509ca01acbc1c5e450d127811", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/3510b63d07376b04e57e27e82607d468bb134f78", + "reference": "3510b63d07376b04e57e27e82607d468bb134f78", "shasum": "" }, "require": { @@ -3155,7 +3462,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.37.0" }, "funding": [ { @@ -3166,16 +3473,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-21T18:38:29+00:00" + "time": "2026-04-10T16:50:15+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.32.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", @@ -3238,7 +3549,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.37.0" }, "funding": [ { @@ -3249,6 +3560,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -3258,7 +3573,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.32.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -3319,7 +3634,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.37.0" }, "funding": [ { @@ -3330,6 +3645,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -3339,16 +3658,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.32.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315", + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315", "shasum": "" }, "require": { @@ -3400,7 +3719,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.37.0" }, "funding": [ { @@ -3411,12 +3730,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-23T08:48:59+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { "name": "symfony/polyfill-php72", @@ -3485,7 +3808,7 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.32.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", @@ -3541,7 +3864,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.37.0" }, "funding": [ { @@ -3552,6 +3875,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -3561,16 +3888,16 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.32.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", "shasum": "" }, "require": { @@ -3621,7 +3948,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" }, "funding": [ { @@ -3632,16 +3959,20 @@ "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-01-02T08:10:11+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.32.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -3697,7 +4028,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.37.0" }, "funding": [ { @@ -3708,6 +4039,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -3717,16 +4052,16 @@ }, { "name": "symfony/polyfill-php84", - "version": "v1.32.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "000df7860439609837bbe28670b0be15783b7fbf" + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/000df7860439609837bbe28670b0be15783b7fbf", - "reference": "000df7860439609837bbe28670b0be15783b7fbf", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06", "shasum": "" }, "require": { @@ -3773,7 +4108,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.37.0" }, "funding": [ { @@ -3784,56 +4119,54 @@ "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-02-20T12:04:08+00:00" + "time": "2026-04-10T18:47:49+00:00" }, { - "name": "symfony/swiftmailer-bundle", - "version": "v3.5.4", + "name": "symfony/polyfill-uuid", + "version": "v1.37.0", "source": { "type": "git", - "url": "https://github.com/symfony/swiftmailer-bundle.git", - "reference": "9daab339f226ac958192bf89836cb3378cc0e652" + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/9daab339f226ac958192bf89836cb3378cc0e652", - "reference": "9daab339f226ac958192bf89836cb3378cc0e652", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", "shasum": "" }, "require": { - "php": ">=7.1", - "swiftmailer/swiftmailer": "^6.1.3", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/http-kernel": "^4.4|^5.0" + "php": ">=7.2" }, - "conflict": { - "twig/twig": "<1.41|>=2.0,<2.10" + "provide": { + "ext-uuid": "*" }, - "require-dev": { - "symfony/console": "^4.4|^5.0", - "symfony/framework-bundle": "^4.4|^5.0", - "symfony/phpunit-bridge": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" + "suggest": { + "ext-uuid": "For best performance" }, - "type": "symfony-bundle", + "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.5-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Bundle\\SwiftmailerBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Uuid\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3841,19 +4174,24 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" }, { "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony SwiftmailerBundle", - "homepage": "http://symfony.com", + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], "support": { - "issues": "https://github.com/symfony/swiftmailer-bundle/issues", - "source": "https://github.com/symfony/swiftmailer-bundle/tree/v3.5.4" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.37.0" }, "funding": [ { @@ -3864,58 +4202,66 @@ "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" } ], - "abandoned": "symfony/mailer", - "time": "2022-02-06T08:03:40+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/symfony", - "version": "v4.4.51", + "version": "v5.4.51", "source": { "type": "git", "url": "https://github.com/symfony/symfony.git", - "reference": "9926d13361941c4a8abef7e8d7cb8a1997409b9f" + "reference": "c5a2ee30e4049191b75cfdc16a0fc1eaeab9945a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/symfony/zipball/9926d13361941c4a8abef7e8d7cb8a1997409b9f", - "reference": "9926d13361941c4a8abef7e8d7cb8a1997409b9f", + "url": "https://api.github.com/repos/symfony/symfony/zipball/c5a2ee30e4049191b75cfdc16a0fc1eaeab9945a", + "reference": "c5a2ee30e4049191b75cfdc16a0fc1eaeab9945a", "shasum": "" }, "require": { "doctrine/event-manager": "~1.0", - "doctrine/persistence": "^1.3|^2|^3", + "doctrine/persistence": "^2|^3", "ext-xml": "*", "friendsofphp/proxy-manager-lts": "^1.0.2", - "php": ">=7.1.3", + "php": ">=7.2.5", "psr/cache": "^1.0|^2.0", - "psr/container": "^1.0", + "psr/container": "^1.1.1", + "psr/event-dispatcher": "^1.0", "psr/link": "^1.0", "psr/log": "^1|^2", - "symfony/contracts": "^1.1.8", + "symfony/contracts": "^2.1", "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-icu": "~1.0", "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5", "symfony/polyfill-php73": "^1.11", "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22", - "twig/twig": "^1.43|^2.13|^3.0.4" + "symfony/polyfill-php81": "^1.23", + "symfony/polyfill-uuid": "^1.15", + "twig/twig": "^2.13|^3.0.4" }, "conflict": { - "doctrine/dbal": "<2.7", + "async-aws/core": "<1.5", + "doctrine/annotations": "<1.13.1", + "doctrine/dbal": "<2.13.1", "egulias/email-validator": "~3.0.0", + "ext-psr": "<1.1|>=2", "masterminds/html5": "<2.6", - "monolog/monolog": ">=2", "ocramius/proxy-manager": "<2.1", - "phpdocumentor/reflection-docblock": "<3.0|>=3.2.0,<3.2.2", - "phpdocumentor/type-resolver": "<0.3.0|1.3.*", - "phpunit/phpunit": "<5.4.3" + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "phpunit/phpunit": "<7.5|9.1.2" }, "provide": { "php-http/async-client-implementation": "*", @@ -3928,20 +4274,18 @@ "psr/log-implementation": "1.0|2.0", "psr/simple-cache-implementation": "1.0|2.0", "symfony/cache-implementation": "1.0|2.0", - "symfony/event-dispatcher-implementation": "1.1", - "symfony/http-client-implementation": "1.1|2.0", + "symfony/event-dispatcher-implementation": "2.0", + "symfony/http-client-implementation": "2.4", "symfony/service-implementation": "1.0|2.0", - "symfony/translation-implementation": "1.0|2.0" + "symfony/translation-implementation": "2.3" }, "replace": { - "symfony/amazon-mailer": "self.version", "symfony/asset": "self.version", "symfony/browser-kit": "self.version", "symfony/cache": "self.version", "symfony/config": "self.version", "symfony/console": "self.version", "symfony/css-selector": "self.version", - "symfony/debug": "self.version", "symfony/debug-bundle": "self.version", "symfony/dependency-injection": "self.version", "symfony/doctrine-bridge": "self.version", @@ -3954,7 +4298,6 @@ "symfony/finder": "self.version", "symfony/form": "self.version", "symfony/framework-bundle": "self.version", - "symfony/google-mailer": "self.version", "symfony/http-client": "self.version", "symfony/http-foundation": "self.version", "symfony/http-kernel": "self.version", @@ -3962,62 +4305,71 @@ "symfony/intl": "self.version", "symfony/ldap": "self.version", "symfony/lock": "self.version", - "symfony/mailchimp-mailer": "self.version", "symfony/mailer": "self.version", - "symfony/mailgun-mailer": "self.version", "symfony/messenger": "self.version", "symfony/mime": "self.version", "symfony/monolog-bridge": "self.version", + "symfony/notifier": "self.version", "symfony/options-resolver": "self.version", - "symfony/postmark-mailer": "self.version", + "symfony/password-hasher": "self.version", "symfony/process": "self.version", "symfony/property-access": "self.version", "symfony/property-info": "self.version", "symfony/proxy-manager-bridge": "self.version", + "symfony/rate-limiter": "self.version", "symfony/routing": "self.version", - "symfony/security": "self.version", "symfony/security-bundle": "self.version", "symfony/security-core": "self.version", "symfony/security-csrf": "self.version", "symfony/security-guard": "self.version", "symfony/security-http": "self.version", - "symfony/sendgrid-mailer": "self.version", + "symfony/semaphore": "self.version", "symfony/serializer": "self.version", "symfony/stopwatch": "self.version", + "symfony/string": "self.version", "symfony/templating": "self.version", "symfony/translation": "self.version", "symfony/twig-bridge": "self.version", "symfony/twig-bundle": "self.version", + "symfony/uid": "self.version", "symfony/validator": "self.version", "symfony/var-dumper": "self.version", "symfony/var-exporter": "self.version", "symfony/web-link": "self.version", "symfony/web-profiler-bundle": "self.version", - "symfony/web-server-bundle": "self.version", "symfony/workflow": "self.version", "symfony/yaml": "self.version" }, "require-dev": { + "amphp/amp": "^2.5", + "amphp/http-client": "^4.2.1", + "amphp/http-tunnel": "^1.0", + "async-aws/ses": "^1.0", + "async-aws/sns": "^1.0", + "async-aws/sqs": "^1.0|^2.0", "cache/integration-tests": "dev-master", - "composer/package-versions-deprecated": "^1.8", - "doctrine/annotations": "^1.10.4", - "doctrine/cache": "^1.6|^2.0", - "doctrine/collections": "~1.0", - "doctrine/data-fixtures": "^1.1", - "doctrine/dbal": "^2.7|^3.0", - "doctrine/orm": "^2.6.3", - "egulias/email-validator": "^2.1.10|^3.1", - "guzzlehttp/promises": "^1.4", + "doctrine/annotations": "^1.13.1|^2", + "doctrine/cache": "^1.11|^2.0", + "doctrine/collections": "^1.0|^2.0", + "doctrine/data-fixtures": "^1.1|^2", + "doctrine/dbal": "^2.13.1|^3.0", + "doctrine/orm": "^2.7.4", + "egulias/email-validator": "^2.1.10|^3.1|^4", + "guzzlehttp/promises": "^1.4|^2.0", "masterminds/html5": "^2.6", - "monolog/monolog": "^1.25.1", + "monolog/monolog": "^1.25.1|^2", "nyholm/psr7": "^1.0", - "paragonie/sodium_compat": "^1.8", + "pda/pheanstalk": "^4.0", "php-http/httplug": "^1.0|^2.0", + "php-http/message-factory": "^1.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "predis/predis": "~1.1", + "phpstan/phpdoc-parser": "^1.0|^2.0", + "predis/predis": "^1.1|^2.0", "psr/http-client": "^1.0", "psr/simple-cache": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.2", + "symfony/mercure-bundle": "^0.3", + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", + "symfony/runtime": "self.version", "symfony/security-acl": "~2.8|~3.0", "twig/cssinliner-extra": "^2.12|^3", "twig/inky-extra": "^2.12|^3", @@ -4025,19 +4377,24 @@ }, "type": "library", "autoload": { + "files": [ + "src/Symfony/Component/String/Resources/functions.php" + ], "psr-4": { "Symfony\\Bundle\\": "src/Symfony/Bundle/", "Symfony\\Component\\": "src/Symfony/Component/", "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/", "Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/", "Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/", - "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/" + "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/", + "Symfony\\Runtime\\Symfony\\Component\\": "src/Symfony/Component/Runtime/Internal/" }, "classmap": [ "src/Symfony/Component/Intl/Resources/stubs" ], "exclude-from-classmap": [ - "**/Tests/" + "**/Tests/", + "**/bin/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4061,7 +4418,7 @@ ], "support": { "issues": "https://github.com/symfony/symfony/issues", - "source": "https://github.com/symfony/symfony/tree/v4.4.51" + "source": "https://github.com/symfony/symfony/tree/v5.4.51" }, "funding": [ { @@ -4072,25 +4429,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2023-11-10T13:31:44+00:00" + "time": "2026-01-28T07:10:49+00:00" }, { "name": "twig/twig", - "version": "v3.21.1", + "version": "v3.24.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d" + "reference": "a6769aefb305efef849dc25c9fd1653358c148f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d", - "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/a6769aefb305efef849dc25c9fd1653358c148f0", + "reference": "a6769aefb305efef849dc25c9fd1653358c148f0", "shasum": "" }, "require": { @@ -4100,7 +4461,8 @@ "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { - "phpstan/phpstan": "^2.0", + "php-cs-fixer/shim": "^3.0@stable", + "phpstan/phpstan": "^2.0@stable", "psr/container": "^1.0|^2.0", "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" }, @@ -4144,7 +4506,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.21.1" + "source": "https://github.com/twigphp/Twig/tree/v3.24.0" }, "funding": [ { @@ -4156,7 +4518,7 @@ "type": "tidelift" } ], - "time": "2025-05-03T07:21:55+00:00" + "time": "2026-03-17T21:31:11+00:00" } ], "packages-dev": [ @@ -5735,12 +6097,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "^8.1" }, - "platform-dev": {}, + "platform-dev": [], "plugin-api-version": "2.6.0" } diff --git a/src/AppBundle/Factory/VcsDriverFactory.php b/src/AppBundle/Factory/VcsDriverFactory.php index 9562e25..04435b3 100644 --- a/src/AppBundle/Factory/VcsDriverFactory.php +++ b/src/AppBundle/Factory/VcsDriverFactory.php @@ -7,6 +7,8 @@ use Composer\Factory; use Composer\IO\NullIO; use Composer\Repository\Vcs\VcsDriverInterface; +use Composer\Util\HttpDownloader; +use Composer\Util\ProcessExecutor; use RuntimeException; class VcsDriverFactory @@ -39,12 +41,14 @@ public function getDriver($vcsUrl): VcsDriverInterface { $composerConfig = Factory::createConfig(); $io = $this->getIO(); + $httpDownloader = new HttpDownloader($io, $composerConfig); + $process = new ProcessExecutor($io); /** @var VcsDriverInterface $driver */ foreach ($this->drivers as $driver) { if ($driver::supports($io, $composerConfig, $vcsUrl)) { try { - $driver = new $driver(['url' => $vcsUrl], $io, $composerConfig); + $driver = new $driver(['url' => $vcsUrl], $io, $composerConfig, $httpDownloader, $process); $driver->initialize(); } catch (RuntimeException $exception) { throw new InsufficientVcsAccessException('Failed to communicate with repository. Check that you have sufficient access with your authentication method.', 0, $exception); diff --git a/src/AppBundle/ProjectImport/LockFileParser.php b/src/AppBundle/ProjectImport/LockFileParser.php index 9ea4a35..804fd7d 100644 --- a/src/AppBundle/ProjectImport/LockFileParser.php +++ b/src/AppBundle/ProjectImport/LockFileParser.php @@ -4,15 +4,15 @@ use AppBundle\Exception\ProjectHasNoComposerPackageUsageInfoException; use Composer\Json\JsonFile; +use Composer\Package\CompletePackage; use Composer\Package\Loader\ArrayLoader; -use Composer\Package\Package; class LockFileParser { /** * @param string $lockContents JSON string * - * @return Package[] + * @return CompletePackage[] */ public static function getPackages($lockContents) { @@ -31,8 +31,8 @@ public static function getPackages($lockContents) } foreach ($lockedPackages as $packageConfig) { - $package = $packageLoader->load($packageConfig, Package::class); - if ($package instanceof Package) { + $package = $packageLoader->load($packageConfig, CompletePackage::class); + if ($package instanceof CompletePackage) { $packages[] = $package; } } diff --git a/src/AppKernel.php b/src/AppKernel.php index 22621e6..371e6b5 100755 --- a/src/AppKernel.php +++ b/src/AppKernel.php @@ -17,7 +17,7 @@ public function registerBundles() public function registerContainerConfiguration(LoaderInterface $loader) { - $loader->load($this->getRootDir().'/config_'.$this->environment.'.yml'); + $loader->load(__DIR__.'/config_'.$this->environment.'.yml'); } public function getCacheDir() diff --git a/src/config.default.yml b/src/config.default.yml index 32bb4fa..bd3b289 100644 --- a/src/config.default.yml +++ b/src/config.default.yml @@ -25,16 +25,16 @@ parameters: app.github.webhook_secret: '%env(GITHUB_WEBHOOK_SECRET)%' env(GITHUB_OAUTH_TOKEN): ~ # default is null, set this environment variable on your server to communicate with private repositories on GitHub env(GITHUB_WEBHOOK_SECRET): ~ # default is null, set this environment variable on your server to validate webhook payloads + env(HOSTNAME): 'localhost' framework: secret: "%secret%" - router: { resource: "%kernel.root_dir%/routing.yml" } + router: { resource: "%kernel.project_dir%/src/routing.yml" } form: enabled: true csrf_protection: enabled: false validation: { enable_annotations: true } - templating: { engines: ['twig'] } translator: { fallback: de_DE } session: save_path: null diff --git a/src/config_development.default.yml b/src/config_development.default.yml index fbab7a4..427bc2c 100755 --- a/src/config_development.default.yml +++ b/src/config_development.default.yml @@ -1,5 +1,5 @@ framework: - router: { resource: "%kernel.root_dir%/routing_development.yml" } + router: { resource: "%kernel.project_dir%/src/routing_development.yml" } profiler: enabled: true From 844e432ab5847f74294c4e41148f068fdf44da2e Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 18:34:58 +0200 Subject: [PATCH 06/51] Update symfony 5.4 -> 6.4 - split symfony packages - doctrine/doctrine-migrations-bundle 2 -> 3 - doctrine/migrations 2 -> 3 - phpunit/phpunit 8 -> 10 Update code and config accordingly: - remove SensioFrameworkExtraBundle - use more type hints - use constructor property promotion - replace doctrine annotations with attributes --- composer.json | 19 +- composer.lock | 5768 ++++++++++++----- config/bundles.php | 1 - .../ImportRepositoriesController.php | 53 +- src/AppBundle/Controller/MainController.php | 47 +- .../Controller/PackageController.php | 97 +- .../Controller/ProjectController.php | 36 +- .../Controller/SettingsController.php | 44 +- .../Controller/UsageSearchController.php | 72 +- .../Controller/WebhookController.php | 6 +- src/AppBundle/DataFixtures/AppFixtures.php | 2 +- src/AppBundle/Entity/Package.php | 28 +- src/AppBundle/Entity/PackageVersion.php | 38 +- src/AppBundle/Entity/Project.php | 33 +- .../ProjectImport/ImportProjectTaskTest.php | 4 +- src/AppKernel.php | 8 +- src/config.default.yml | 2 +- src/config_test.default.yml | 4 +- src/routing.yml | 2 +- www/app.php | 2 +- 20 files changed, 4470 insertions(+), 1796 deletions(-) diff --git a/composer.json b/composer.json index 1da7ef0..8f65754 100755 --- a/composer.json +++ b/composer.json @@ -6,16 +6,23 @@ "php": "^8.1", "composer/composer": "^2.0", "doctrine/doctrine-bundle": "^2.0", - "doctrine/doctrine-migrations-bundle": "^2.0", - "doctrine/migrations": "^2.0", + "doctrine/doctrine-migrations-bundle": "^3.0", + "doctrine/migrations": "^3.0", "doctrine/orm": "^2.5.14", - "sensio/framework-extra-bundle": "^6.1", + "symfony/asset": "^6.4", + "symfony/console": "^6.4", + "symfony/form": "^6.4", + "symfony/framework-bundle": "^6.4", "symfony/monolog-bundle": "^3.2.0", - "symfony/symfony": "^5.4" + "symfony/translation": "^6.4", + "symfony/twig-bundle": "^6.4", + "symfony/validator": "^6.4", + "symfony/yaml": "^6.4" }, "require-dev": { - "phpunit/phpunit": "^8.0", - "doctrine/doctrine-fixtures-bundle": "^3.0" + "phpunit/phpunit": "^10.0", + "doctrine/doctrine-fixtures-bundle": "^3.0", + "symfony/web-profiler-bundle": "^6.4" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 92a10e1..d0b9ec3 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": "a9962a8cd0e97a37872a014ecc54bfff", + "content-hash": "f4b7bb9d47adb7f75a411b4a3715fea6", "packages": [ { "name": "composer/ca-bundle", @@ -329,79 +329,6 @@ ], "time": "2021-04-07T13:37:33+00:00" }, - { - "name": "composer/package-versions-deprecated", - "version": "1.11.99.5", - "source": { - "type": "git", - "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", - "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1.0 || ^2.0", - "php": "^7 || ^8" - }, - "replace": { - "ocramius/package-versions": "1.11.99" - }, - "require-dev": { - "composer/composer": "^1.9.3 || ^2.0@dev", - "ext-zip": "^1.13", - "phpunit/phpunit": "^6.5 || ^7" - }, - "type": "composer-plugin", - "extra": { - "class": "PackageVersions\\Installer", - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "PackageVersions\\": "src/PackageVersions" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "support": { - "issues": "https://github.com/composer/package-versions-deprecated/issues", - "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-01-17T14:14:24+00:00" - }, { "name": "composer/pcre", "version": "3.3.2", @@ -700,83 +627,6 @@ ], "time": "2024-05-06T16:37:16+00:00" }, - { - "name": "doctrine/annotations", - "version": "1.14.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915", - "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1 || ^2", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "~1.4.10 || ^1.10.28", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7", - "vimeo/psalm": "^4.30 || ^5.14" - }, - "suggest": { - "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.4" - }, - "abandoned": true, - "time": "2024-09-05T10:15:52+00:00" - }, { "name": "doctrine/cache", "version": "2.2.0", @@ -1050,35 +900,41 @@ }, { "name": "doctrine/dbal", - "version": "2.13.9", + "version": "3.10.5", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "c480849ca3ad6706a39c970cdfe6888fa8a058b8" + "reference": "95d84866bf3c04b2ddca1df7c049714660959aef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/c480849ca3ad6706a39c970cdfe6888fa8a058b8", - "reference": "c480849ca3ad6706a39c970cdfe6888fa8a058b8", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/95d84866bf3c04b2ddca1df7c049714660959aef", + "reference": "95d84866bf3c04b2ddca1df7c049714660959aef", "shasum": "" }, "require": { - "doctrine/cache": "^1.0|^2.0", + "composer-runtime-api": "^2", "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1.0", - "ext-pdo": "*", - "php": "^7.1 || ^8" + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "conflict": { + "doctrine/cache": "< 1.11" }, "require-dev": { - "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2021.1", - "phpstan/phpstan": "1.4.6", - "phpunit/phpunit": "^7.5.20|^8.5|9.5.16", - "psalm/plugin-phpunit": "0.16.1", - "squizlabs/php_codesniffer": "3.6.2", - "symfony/cache": "^4.4", - "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "4.22.0" + "doctrine/cache": "^1.11|^2.0", + "doctrine/coding-standard": "14.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "2.1.30", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "9.6.34", + "slevomat/coding-standard": "8.27.1", + "squizlabs/php_codesniffer": "4.0.1", + "symfony/cache": "^5.4|^6.0|^7.0|^8.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0|^8.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -1089,7 +945,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" + "Doctrine\\DBAL\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1132,14 +988,13 @@ "queryobject", "sasql", "sql", - "sqlanywhere", "sqlite", "sqlserver", "sqlsrv" ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.13.9" + "source": "https://github.com/doctrine/dbal/tree/3.10.5" }, "funding": [ { @@ -1155,7 +1010,7 @@ "type": "tidelift" } ], - "time": "2022-05-02T20:28:55+00:00" + "time": "2026-02-24T08:03:57+00:00" }, { "name": "doctrine/deprecations", @@ -1207,56 +1062,63 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.7.2", + "version": "2.18.2", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "22d53b2c5ad03929628fb4a928b01135585b7179" + "reference": "0ff098b29b8b3c68307c8987dcaed7fd829c6546" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/22d53b2c5ad03929628fb4a928b01135585b7179", - "reference": "22d53b2c5ad03929628fb4a928b01135585b7179", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/0ff098b29b8b3c68307c8987dcaed7fd829c6546", + "reference": "0ff098b29b8b3c68307c8987dcaed7fd829c6546", "shasum": "" }, "require": { - "doctrine/annotations": "^1", - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/dbal": "^2.13.1 || ^3.3.2", - "doctrine/persistence": "^2.2 || ^3", + "doctrine/dbal": "^3.7.0 || ^4.0", + "doctrine/deprecations": "^1.0", + "doctrine/persistence": "^3.1 || ^4", "doctrine/sql-formatter": "^1.0.1", - "php": "^7.1 || ^8.0", - "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "symfony/config": "^4.4.3 || ^5.4 || ^6.0", - "symfony/console": "^4.4 || ^5.4 || ^6.0", - "symfony/dependency-injection": "^4.4.18 || ^5.4 || ^6.0", - "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/doctrine-bridge": "^4.4.22 || ^5.4 || ^6.0", - "symfony/framework-bundle": "^4.4 || ^5.4 || ^6.0", - "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" + "php": "^8.1", + "symfony/cache": "^6.4 || ^7.0", + "symfony/config": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/doctrine-bridge": "^6.4.3 || ^7.0.3", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/service-contracts": "^2.5 || ^3" }, "conflict": { - "doctrine/orm": "<2.11 || >=3.0", - "twig/twig": "<1.34 || >=2.0,<2.4" + "doctrine/annotations": ">=3.0", + "doctrine/cache": "< 1.11", + "doctrine/orm": "<2.17 || >=4.0", + "symfony/var-exporter": "< 6.4.1 || 7.0.0", + "twig/twig": "<2.13 || >=3.0 <3.0.4" }, "require-dev": { - "doctrine/coding-standard": "^9.0", - "doctrine/orm": "^2.11 || ^3.0", + "doctrine/annotations": "^1 || ^2", + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^14", + "doctrine/orm": "^2.17 || ^3.1", "friendsofphp/proxy-manager-lts": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.3 || ^10.0", - "psalm/plugin-phpunit": "^0.16.1", - "psalm/plugin-symfony": "^3", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-phpunit": "2.0.3", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.53 || ^12.3.10", "psr/log": "^1.1.4 || ^2.0 || ^3.0", - "symfony/phpunit-bridge": "^6.1", - "symfony/property-info": "^4.4 || ^5.4 || ^6.0", - "symfony/proxy-manager-bridge": "^4.4 || ^5.4 || ^6.0", - "symfony/security-bundle": "^4.4 || ^5.4 || ^6.0", - "symfony/twig-bridge": "^4.4 || ^5.4 || ^6.0", - "symfony/validator": "^4.4 || ^5.4 || ^6.0", - "symfony/web-profiler-bundle": "^4.4 || ^5.4 || ^6.0", - "symfony/yaml": "^4.4 || ^5.4 || ^6.0", - "twig/twig": "^1.34 || ^2.12 || ^3.0", - "vimeo/psalm": "^4.7" + "symfony/doctrine-messenger": "^6.4 || ^7.0", + "symfony/expression-language": "^6.4 || ^7.0", + "symfony/messenger": "^6.4 || ^7.0", + "symfony/property-info": "^6.4 || ^7.0", + "symfony/security-bundle": "^6.4 || ^7.0", + "symfony/stopwatch": "^6.4 || ^7.0", + "symfony/string": "^6.4 || ^7.0", + "symfony/twig-bridge": "^6.4 || ^7.0", + "symfony/validator": "^6.4 || ^7.0", + "symfony/var-exporter": "^6.4.1 || ^7.0.1", + "symfony/web-profiler-bundle": "^6.4 || ^7.0", + "symfony/yaml": "^6.4 || ^7.0", + "twig/twig": "^2.14.7 || ^3.0.4" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -1266,7 +1128,7 @@ "type": "symfony-bundle", "autoload": { "psr-4": { - "Doctrine\\Bundle\\DoctrineBundle\\": "" + "Doctrine\\Bundle\\DoctrineBundle\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1301,7 +1163,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.7.2" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.2" }, "funding": [ { @@ -1317,43 +1179,47 @@ "type": "tidelift" } ], - "time": "2022-12-07T12:07:11+00:00" + "time": "2025-12-20T21:35:32+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", - "version": "2.2.3", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "0a081b55a88259a887af7be654743a8c5f703e99" + "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/0a081b55a88259a887af7be654743a8c5f703e99", - "reference": "0a081b55a88259a887af7be654743a8c5f703e99", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/1e380c6dd8ac8488217f39cff6b77e367f1a644b", + "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b", "shasum": "" }, "require": { - "doctrine/doctrine-bundle": "~1.0|~2.0", - "doctrine/migrations": "^2.2", - "php": "^7.1|^8.0", - "symfony/framework-bundle": "~3.4|~4.0|~5.0" + "doctrine/doctrine-bundle": "^2.4 || ^3.0", + "doctrine/migrations": "^3.2", + "php": "^7.2 || ^8.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", - "mikey179/vfsstream": "^1.6", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0|^8.0|^9.0" + "composer/semver": "^3.0", + "doctrine/coding-standard": "^12 || ^14", + "doctrine/orm": "^2.6 || ^3", + "phpstan/phpstan": "^1.4 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1.1 || ^2", + "phpstan/phpstan-symfony": "^1.3 || ^2", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/phpunit-bridge": "^6.3 || ^7 || ^8", + "symfony/var-exporter": "^5.4 || ^6 || ^7 || ^8" }, "type": "symfony-bundle", "autoload": { "psr-4": { - "Doctrine\\Bundle\\MigrationsBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Doctrine\\Bundle\\MigrationsBundle\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1366,11 +1232,11 @@ }, { "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org" + "homepage": "https://www.doctrine-project.org" }, { "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony DoctrineMigrationsBundle", @@ -1382,7 +1248,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", - "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/2.2.3" + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.7.0" }, "funding": [ { @@ -1398,34 +1264,33 @@ "type": "tidelift" } ], - "time": "2021-03-18T20:55:50+00:00" + "time": "2025-11-15T19:02:59+00:00" }, { "name": "doctrine/event-manager", - "version": "1.2.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" + "reference": "dda33921b198841ca8dbad2eaa5d4d34769d18cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/dda33921b198841ca8dbad2eaa5d4d34769d18cf", + "reference": "dda33921b198841ca8dbad2eaa5d4d34769d18cf", "shasum": "" }, "require": { - "doctrine/deprecations": "^0.5.3 || ^1", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "conflict": { "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.8", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.24" + "doctrine/coding-standard": "^14", + "phpdocumentor/guides-cli": "^1.4", + "phpstan/phpstan": "^2.1.32", + "phpunit/phpunit": "^10.5.58" }, "type": "library", "autoload": { @@ -1474,7 +1339,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.2.0" + "source": "https://github.com/doctrine/event-manager/tree/2.1.1" }, "funding": [ { @@ -1490,7 +1355,7 @@ "type": "tidelift" } ], - "time": "2022-10-12T20:51:15+00:00" + "time": "2026-01-29T07:11:08+00:00" }, { "name": "doctrine/inflector", @@ -1584,30 +1449,29 @@ }, { "name": "doctrine/instantiator", - "version": "1.5.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + "reference": "23da848e1a2308728fe5fdddabf4be17ff9720c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/23da848e1a2308728fe5fdddabf4be17ff9720c7", + "reference": "23da848e1a2308728fe5fdddabf4be17ff9720c7", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.4" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^11", + "doctrine/coding-standard": "^14", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.30 || ^5.4" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5.58" }, "type": "library", "autoload": { @@ -1634,7 +1498,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + "source": "https://github.com/doctrine/instantiator/tree/2.1.0" }, "funding": [ { @@ -1650,32 +1514,31 @@ "type": "tidelift" } ], - "time": "2022-12-30T00:15:36+00:00" + "time": "2026-01-05T06:47:08+00:00" }, { "name": "doctrine/lexer", - "version": "2.1.1", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", - "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.21" + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { @@ -1712,7 +1575,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.1" + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { @@ -1728,47 +1591,55 @@ "type": "tidelift" } ], - "time": "2024-02-05T11:35:39+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "doctrine/migrations", - "version": "2.3.5", + "version": "3.9.7", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "28d92a34348fee5daeb80879e56461b2e862fc05" + "reference": "96cb2a89b56c9efb0bac38e606dc0b0f13e650ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/28d92a34348fee5daeb80879e56461b2e862fc05", - "reference": "28d92a34348fee5daeb80879e56461b2e862fc05", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/96cb2a89b56c9efb0bac38e606dc0b0f13e650ec", + "reference": "96cb2a89b56c9efb0bac38e606dc0b0f13e650ec", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.8", - "doctrine/dbal": "^2.9", - "friendsofphp/proxy-manager-lts": "^1.0", - "php": "^7.1 || ^8.0", - "symfony/console": "^3.4||^4.4.16||^5.0", - "symfony/stopwatch": "^3.4||^4.0||^5.0" + "composer-runtime-api": "^2", + "doctrine/dbal": "^3.6 || ^4", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2.0", + "php": "^8.1", + "psr/log": "^1.1.3 || ^2 || ^3", + "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/var-exporter": "^6.2 || ^7.0 || ^8.0" + }, + "conflict": { + "doctrine/orm": "<2.12 || >=4" }, "require-dev": { - "doctrine/coding-standard": "^8.2", - "doctrine/orm": "^2.6", + "doctrine/coding-standard": "^14", + "doctrine/orm": "^2.13 || ^3", + "doctrine/persistence": "^2 || ^3 || ^4", + "doctrine/sql-formatter": "^1.0", "ext-pdo_sqlite": "*", - "jdorn/sql-formatter": "^1.1", - "mikey179/vfsstream": "^1.6", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", - "symfony/cache": "^4.4. || ^5.3", - "symfony/process": "^3.4||^4.0||^5.0", - "symfony/yaml": "^3.4||^4.0||^5.0" + "fig/log-test": "^1", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-phpunit": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpstan/phpstan-symfony": "^2", + "phpunit/phpunit": "^10.3 || ^11.0 || ^12.0", + "symfony/cache": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "suggest": { - "jdorn/sql-formatter": "Allows to generate formatted SQL with the diff command.", + "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", "symfony/yaml": "Allows the use of yaml for migration configuration files." }, "bin": [ @@ -1777,7 +1648,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Migrations\\": "lib/Doctrine/Migrations" + "Doctrine\\Migrations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1803,12 +1674,11 @@ "keywords": [ "database", "dbal", - "migrations", - "php" + "migrations" ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/2.3.5" + "source": "https://github.com/doctrine/migrations/tree/3.9.7" }, "funding": [ { @@ -1824,20 +1694,20 @@ "type": "tidelift" } ], - "time": "2021-10-19T19:55:20+00:00" + "time": "2026-04-23T19:33:20+00:00" }, { "name": "doctrine/orm", - "version": "2.20.4", + "version": "2.20.12", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "71550106d491c3f888636b731c805473de3c8583" + "reference": "5fc5b1991d6a4301cbab8ee4d47e90401235be09" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/71550106d491c3f888636b731c805473de3c8583", - "reference": "71550106d491c3f888636b731c805473de3c8583", + "url": "https://api.github.com/repos/doctrine/orm/zipball/5fc5b1991d6a4301cbab8ee4d47e90401235be09", + "reference": "5fc5b1991d6a4301cbab8ee4d47e90401235be09", "shasum": "" }, "require": { @@ -1855,7 +1725,7 @@ "ext-ctype": "*", "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^4.2 || ^5.0 || ^6.0 || ^7.0", + "symfony/console": "^4.2 || ^5.0 || ^6.0 || ^7.0 || ^8.0", "symfony/polyfill-php72": "^1.23", "symfony/polyfill-php80": "^1.16" }, @@ -1864,17 +1734,16 @@ }, "require-dev": { "doctrine/annotations": "^1.13 || ^2", - "doctrine/coding-standard": "^9.0.2 || ^13.0", + "doctrine/coding-standard": "^9.0.2 || ^14.0", "phpbench/phpbench": "^0.16.10 || ^1.0", "phpstan/extension-installer": "~1.1.0 || ^1.4", - "phpstan/phpstan": "~1.4.10 || 2.0.3", + "phpstan/phpstan": "~1.4.10 || 2.1.23", "phpstan/phpstan-deprecation-rules": "^1 || ^2", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psr/log": "^1 || ^2 || ^3", - "squizlabs/php_codesniffer": "3.12.0", "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7.0", "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2 || ^7.0", - "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", @@ -1924,9 +1793,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.20.4" + "source": "https://github.com/doctrine/orm/tree/2.20.12" }, - "time": "2025-06-09T20:24:12+00:00" + "time": "2026-05-08T11:18:45+00:00" }, { "name": "doctrine/persistence", @@ -2026,26 +1895,26 @@ }, { "name": "doctrine/sql-formatter", - "version": "1.5.2", + "version": "1.5.4", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8" + "reference": "9563949f5cd3bd12a17d12fb980528bc141c5806" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8", - "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/9563949f5cd3bd12a17d12fb980528bc141c5806", + "reference": "9563949f5cd3bd12a17d12fb980528bc141c5806", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^12", - "ergebnis/phpunit-slow-test-detector": "^2.14", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5" + "doctrine/coding-standard": "^14", + "ergebnis/phpunit-slow-test-detector": "^2.20", + "phpstan/phpstan": "^2.1.31", + "phpunit/phpunit": "^10.5.58" }, "bin": [ "bin/sql-formatter" @@ -2075,91 +1944,9 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2" - }, - "time": "2025-01-24T11:45:48+00:00" - }, - { - "name": "friendsofphp/proxy-manager-lts", - "version": "v1.0.19", - "source": { - "type": "git", - "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", - "reference": "c20299aa9f48a622052964a75c5a4cef017398b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/c20299aa9f48a622052964a75c5a4cef017398b2", - "reference": "c20299aa9f48a622052964a75c5a4cef017398b2", - "shasum": "" - }, - "require": { - "laminas/laminas-code": "~3.4.1|^4.0", - "php": ">=7.1", - "symfony/filesystem": "^4.4.17|^5.0|^6.0|^7.0|^8.0" - }, - "conflict": { - "laminas/laminas-stdlib": "<3.2.1", - "zendframework/zend-stdlib": "<3.2.1" - }, - "replace": { - "ocramius/proxy-manager": "^2.1" - }, - "require-dev": { - "ext-phar": "*", - "symfony/phpunit-bridge": "^5.4|^6.0|^7.0" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/Ocramius/ProxyManager", - "name": "ocramius/proxy-manager" - } - }, - "autoload": { - "psr-4": { - "ProxyManager\\": "src/ProxyManager" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - } - ], - "description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager", - "homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts", - "keywords": [ - "aop", - "lazy loading", - "proxy", - "proxy pattern", - "service proxies" - ], - "support": { - "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues", - "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.19" + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.4" }, - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", - "type": "tidelift" - } - ], - "time": "2025-10-28T10:28:17+00:00" + "time": "2026-02-08T16:21:46+00:00" }, { "name": "justinrainbow/json-schema", @@ -2237,106 +2024,43 @@ "time": "2026-05-05T05:39:01+00:00" }, { - "name": "laminas/laminas-code", - "version": "4.17.0", + "name": "marc-mabe/php-enum", + "version": "v4.7.2", "source": { "type": "git", - "url": "https://github.com/laminas/laminas-code.git", - "reference": "40d61e2899ec17c5d08bbc0a2d586b3ca17ab9bd" + "url": "https://github.com/marc-mabe/php-enum.git", + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/40d61e2899ec17c5d08bbc0a2d586b3ca17ab9bd", - "reference": "40d61e2899ec17c5d08bbc0a2d586b3ca17ab9bd", + "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/bb426fcdd65c60fb3638ef741e8782508fda7eef", + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef", "shasum": "" }, "require": { - "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" + "ext-reflection": "*", + "php": "^7.1 | ^8.0" }, "require-dev": { - "doctrine/annotations": "^2.0.1", - "ext-phar": "*", - "laminas/laminas-coding-standard": "^3.0.0", - "laminas/laminas-stdlib": "^3.18.0", - "phpunit/phpunit": "^10.5.58", - "psalm/plugin-phpunit": "^0.19.0", - "vimeo/psalm": "^5.15.0" - }, - "suggest": { - "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", - "laminas/laminas-stdlib": "Laminas\\Stdlib component" + "phpbench/phpbench": "^0.16.10 || ^1.0.4", + "phpstan/phpstan": "^1.3.1", + "phpunit/phpunit": "^7.5.20 | ^8.5.22 | ^9.5.11", + "vimeo/psalm": "^4.17.0 | ^5.26.1" }, "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.2-dev", + "dev-master": "4.7-dev" + } + }, "autoload": { "psr-4": { - "Laminas\\Code\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", - "homepage": "https://laminas.dev", - "keywords": [ - "code", - "laminas", - "laminasframework" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-code/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-code/issues", - "rss": "https://github.com/laminas/laminas-code/releases.atom", - "source": "https://github.com/laminas/laminas-code" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-11-01T09:38:14+00:00" - }, - { - "name": "marc-mabe/php-enum", - "version": "v4.7.2", - "source": { - "type": "git", - "url": "https://github.com/marc-mabe/php-enum.git", - "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/bb426fcdd65c60fb3638ef741e8782508fda7eef", - "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef", - "shasum": "" - }, - "require": { - "ext-reflection": "*", - "php": "^7.1 | ^8.0" - }, - "require-dev": { - "phpbench/phpbench": "^0.16.10 || ^1.0.4", - "phpstan/phpstan": "^1.3.1", - "phpunit/phpunit": "^7.5.20 | ^8.5.22 | ^9.5.11", - "vimeo/psalm": "^4.17.0 | ^5.26.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-3.x": "3.2-dev", - "dev-master": "4.7-dev" - } - }, - "autoload": { - "psr-4": { - "MabeEnum\\": "src/" - }, - "classmap": [ - "stubs/Stringable.php" - ] + "MabeEnum\\": "src/" + }, + "classmap": [ + "stubs/Stringable.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2477,16 +2201,16 @@ }, { "name": "psr/cache", - "version": "2.0.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b" + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/213f9dbc5b9bfbc4f8db86d2838dc968752ce13b", - "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { @@ -2520,28 +2244,33 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/2.0.0" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2021-02-03T23:23:37+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { "name": "psr/container", - "version": "1.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -2568,9 +2297,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", @@ -2622,71 +2351,18 @@ }, "time": "2019-01-08T18:20:26+00:00" }, - { - "name": "psr/link", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/link.git", - "reference": "846c25f58a1f02b93a00f2404e3626b6bf9b7807" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/link/zipball/846c25f58a1f02b93a00f2404e3626b6bf9b7807", - "reference": "846c25f58a1f02b93a00f2404e3626b6bf9b7807", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Link\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for HTTP links", - "homepage": "https://github.com/php-fig/link", - "keywords": [ - "http", - "http-link", - "link", - "psr", - "psr-13", - "rest" - ], - "support": { - "source": "https://github.com/php-fig/link/tree/1.1.1" - }, - "time": "2021-03-11T22:59:13+00:00" - }, { "name": "psr/log", - "version": "2.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", - "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { @@ -2695,7 +2371,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { @@ -2721,9 +2397,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/2.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2021-07-14T16:41:46+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { "name": "react/promise", @@ -2972,60 +2648,37 @@ "time": "2023-09-03T09:24:00+00:00" }, { - "name": "sensio/framework-extra-bundle", - "version": "v6.2.10", + "name": "symfony/asset", + "version": "v6.4.34", "source": { "type": "git", - "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "2f886f4b31f23c76496901acaedfedb6936ba61f" + "url": "https://github.com/symfony/asset.git", + "reference": "1bd59aa278691b6310ca56b996cf6e2619a6a347" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/2f886f4b31f23c76496901acaedfedb6936ba61f", - "reference": "2f886f4b31f23c76496901acaedfedb6936ba61f", + "url": "https://api.github.com/repos/symfony/asset/zipball/1bd59aa278691b6310ca56b996cf6e2619a6a347", + "reference": "1bd59aa278691b6310ca56b996cf6e2619a6a347", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0|^2.0", - "php": ">=7.2.5", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/framework-bundle": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0" + "php": ">=8.1" }, "conflict": { - "doctrine/doctrine-cache-bundle": "<1.3.1", - "doctrine/persistence": "<1.3" + "symfony/http-foundation": "<5.4" }, "require-dev": { - "doctrine/dbal": "^2.10|^3.0", - "doctrine/doctrine-bundle": "^1.11|^2.0", - "doctrine/orm": "^2.5", - "symfony/browser-kit": "^4.4|^5.0|^6.0", - "symfony/doctrine-bridge": "^4.4|^5.0|^6.0", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/monolog-bridge": "^4.0|^5.0|^6.0", - "symfony/monolog-bundle": "^3.2", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0", - "symfony/security-bundle": "^4.4|^5.0|^6.0", - "symfony/twig-bundle": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0", - "twig/twig": "^1.34|^2.4|^3.0" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "6.1.x-dev" - } + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0" }, + "type": "library", "autoload": { "psr-4": { - "Sensio\\Bundle\\FrameworkExtraBundle\\": "src/" + "Symfony\\Component\\Asset\\": "" }, "exclude-from-classmap": [ - "/tests/" + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3036,75 +2689,96 @@ { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "This bundle provides a way to configure your controllers with annotations", - "keywords": [ - "annotations", - "controllers" - ], + "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", + "homepage": "https://symfony.com", "support": { - "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v6.2.10" + "source": "https://github.com/symfony/asset/tree/v6.4.34" }, - "abandoned": "Symfony", - "time": "2023-02-24T14:57:12+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-02-07T09:15:39+00:00" }, { - "name": "symfony/contracts", - "version": "v2.5.5", + "name": "symfony/cache", + "version": "v7.4.10", "source": { "type": "git", - "url": "https://github.com/symfony/contracts.git", - "reference": "4d727f81a7eede1a3021fc93f02c1cc7ccb32abd" + "url": "https://github.com/symfony/cache.git", + "reference": "8c5fbb4b5bc7a878f7ce66f1b7e29653c404984b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/contracts/zipball/4d727f81a7eede1a3021fc93f02c1cc7ccb32abd", - "reference": "4d727f81a7eede1a3021fc93f02c1cc7ccb32abd", + "url": "https://api.github.com/repos/symfony/cache/zipball/8c5fbb4b5bc7a878f7ce66f1b7e29653c404984b", + "reference": "8c5fbb4b5bc7a878f7ce66f1b7e29653c404984b", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0|^3.0", - "psr/container": "^1.1", - "psr/event-dispatcher": "^1.0" + "php": ">=8.2", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^3.6", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "conflict": { - "ext-psr": "<1.1|>=2" + "doctrine/dbal": "<3.6", + "ext-redis": "<6.1", + "ext-relay": "<0.12.1", + "symfony/dependency-injection": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/var-dumper": "<6.4" }, - "replace": { - "symfony/cache-contracts": "self.version", - "symfony/deprecation-contracts": "self.version", - "symfony/event-dispatcher-contracts": "self.version", - "symfony/http-client-contracts": "self.version", - "symfony/service-contracts": "self.version", - "symfony/translation-contracts": "self.version" + "provide": { + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/polyfill-intl-idn": "^1.10" - }, - "suggest": { - "symfony/cache-implementation": "", - "symfony/event-dispatcher-implementation": "", - "symfony/http-client-implementation": "", - "symfony/service-implementation": "", - "symfony/translation-implementation": "" + "cache/integration-tests": "dev-master", + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/filesystem": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - } - }, "autoload": { - "files": [ - "Deprecation/function.php" - ], "psr-4": { - "Symfony\\Contracts\\": "" + "Symfony\\Component\\Cache\\": "" }, + "classmap": [ + "Traits/ValueWrapper.php" + ], "exclude-from-classmap": [ - "**/Tests/" + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3121,18 +2795,14 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "A set of abstractions extracted out of the Symfony components", + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", "homepage": "https://symfony.com", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "caching", + "psr6" ], "support": { - "source": "https://github.com/symfony/contracts/tree/v2.5.5" + "source": "https://github.com/symfony/cache/tree/v7.4.10" }, "funding": [ { @@ -3143,53 +2813,49 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-28T08:37:04+00:00" + "time": "2026-05-05T08:23:16+00:00" }, { - "name": "symfony/monolog-bundle", - "version": "v3.8.0", + "name": "symfony/cache-contracts", + "version": "v3.7.0", "source": { "type": "git", - "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d" + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "225e8a254166bd3442e370c6f50145465db63831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d", - "reference": "a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/225e8a254166bd3442e370c6f50145465db63831", + "reference": "225e8a254166bd3442e370c6f50145465db63831", "shasum": "" }, "require": { - "monolog/monolog": "^1.22 || ^2.0 || ^3.0", - "php": ">=7.1.3", - "symfony/config": "~4.4 || ^5.0 || ^6.0", - "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", - "symfony/http-kernel": "~4.4 || ^5.0 || ^6.0", - "symfony/monolog-bridge": "~4.4 || ^5.0 || ^6.0" - }, - "require-dev": { - "symfony/console": "~4.4 || ^5.0 || ^6.0", - "symfony/phpunit-bridge": "^5.2 || ^6.0", - "symfony/yaml": "~4.4 || ^5.0 || ^6.0" + "php": ">=8.1", + "psr/cache": "^3.0" }, - "type": "symfony-bundle", + "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { - "dev-master": "3.x-dev" + "dev-main": "3.7-dev" } }, "autoload": { "psr-4": { - "Symfony\\Bundle\\MonologBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Contracts\\Cache\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3197,23 +2863,26 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony MonologBundle", + "description": "Generic abstractions related to caching", "homepage": "https://symfony.com", "keywords": [ - "log", - "logging" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "issues": "https://github.com/symfony/monolog-bundle/issues", - "source": "https://github.com/symfony/monolog-bundle/tree/v3.8.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.7.0" }, "funding": [ { @@ -3224,50 +2893,56 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-05-10T14:24:36+00:00" + "time": "2026-05-05T15:33:14+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.37.0", + "name": "symfony/config", + "version": "v7.4.10", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2" + "url": "https://github.com/symfony/config.git", + "reference": "d91b6c7cd2a8c9a9c2b8d26c8f5ed48edf99ef57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2", + "url": "https://api.github.com/repos/symfony/config/zipball/d91b6c7cd2a8c9a9c2b8d26c8f5ed48edf99ef57", + "reference": "d91b6c7cd2a8c9a9c2b8d26c8f5ed48edf99ef57", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/filesystem": "^7.1|^8.0", + "symfony/polyfill-ctype": "~1.8" }, - "provide": { - "ext-ctype": "*" + "conflict": { + "symfony/finder": "<6.4", + "symfony/service-contracts": "<2.5" }, - "suggest": { - "ext-ctype": "For best performance" + "require-dev": { + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3275,24 +2950,18 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for ctype functions", + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" + "source": "https://github.com/symfony/config/tree/v7.4.10" }, "funding": [ { @@ -3312,42 +2981,60 @@ "type": "tidelift" } ], - "time": "2026-04-10T16:19:22+00:00" + "time": "2026-05-03T14:20:49+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.37.0", + "name": "symfony/console", + "version": "v6.4.37", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e" + "url": "https://github.com/symfony/console.git", + "reference": "7bbcaf3fdb1e18fa42a7f0b84a10d091c10548f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/4864388bfbd3001ce88e234fab652acd91fdc57e", - "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e", + "url": "https://api.github.com/repos/symfony/console/zipball/7bbcaf3fdb1e18fa42a7f0b84a10d091c10548f5", + "reference": "7bbcaf3fdb1e18fa42a7f0b84a10d091c10548f5", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0|^7.0" }, - "suggest": { - "ext-intl": "For best performance" + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, + "type": "library", "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3355,26 +3042,24 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" + "cli", + "command-line", + "console", + "terminal" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.37.0" + "source": "https://github.com/symfony/console/tree/v6.4.37" }, "funding": [ { @@ -3394,45 +3079,49 @@ "type": "tidelift" } ], - "time": "2026-04-26T13:13:48+00:00" + "time": "2026-04-13T15:27:04+00:00" }, { - "name": "symfony/polyfill-intl-icu", - "version": "v1.37.0", + "name": "symfony/dependency-injection", + "version": "v7.4.10", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "3510b63d07376b04e57e27e82607d468bb134f78" + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "4eb0d9dfa9d4f7c59216baf49b3ed6b1fb72293d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/3510b63d07376b04e57e27e82607d468bb134f78", - "reference": "3510b63d07376b04e57e27e82607d468bb134f78", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/4eb0d9dfa9d4f7c59216baf49b3ed6b1fb72293d", + "reference": "4eb0d9dfa9d4f7c59216baf49b3ed6b1fb72293d", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^3.6", + "symfony/var-exporter": "^6.4.20|^7.2.5|^8.0" }, - "suggest": { - "ext-intl": "For best performance and support of other locales than \"en\"" + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<6.4", + "symfony/finder": "<6.4", + "symfony/yaml": "<6.4" }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } + "provide": { + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" }, + "type": "library", "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Icu\\": "" + "Symfony\\Component\\DependencyInjection\\": "" }, - "classmap": [ - "Resources/stubs" - ], "exclude-from-classmap": [ "/Tests/" ] @@ -3443,26 +3132,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's ICU-related data and classes", + "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "icu", - "intl", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.37.0" + "source": "https://github.com/symfony/dependency-injection/tree/v7.4.10" }, "funding": [ { @@ -3482,43 +3163,39 @@ "type": "tidelift" } ], - "time": "2026-04-10T16:50:15+00:00" + "time": "2026-05-06T11:55:30+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.37.0", + "name": "symfony/deprecation-contracts", + "version": "v3.7.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", - "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/50f59d1f3ca46d41ac911f97a78626b6756af35b", + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b", "shasum": "" }, "require": { - "php": ">=7.2", - "symfony/polyfill-intl-normalizer": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" + "php": ">=8.1" }, "type": "library", "extra": { "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" } }, "autoload": { "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } + "function.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3526,30 +3203,18 @@ ], "authors": [ { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.37.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.0" }, "funding": [ { @@ -3569,44 +3234,80 @@ "type": "tidelift" } ], - "time": "2024-09-10T14:38:51+00:00" + "time": "2026-04-13T15:52:40+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.37.0", + "name": "symfony/doctrine-bridge", + "version": "v7.3.10", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "3833d7255cc303546435cb650316bff708a1c75c" + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "98814d5e95e382150629619fa883e775baf6f340" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", - "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/98814d5e95e382150629619fa883e775baf6f340", + "reference": "98814d5e95e382150629619fa883e775baf6f340", "shasum": "" }, "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance" + "doctrine/event-manager": "^2", + "doctrine/persistence": "^3.1|^4", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3" }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } + "conflict": { + "doctrine/collections": "<1.8", + "doctrine/dbal": "<3.6", + "doctrine/lexer": "<1.1", + "doctrine/orm": "<2.15", + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/form": "<6.4.6|>=7,<7.0.6", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/lock": "<6.4", + "symfony/messenger": "<6.4", + "symfony/property-info": "<6.4", + "symfony/security-bundle": "<6.4", + "symfony/security-core": "<6.4", + "symfony/validator": "<6.4" }, + "require-dev": { + "doctrine/collections": "^1.8|^2.0", + "doctrine/data-fixtures": "^1.1|^2", + "doctrine/dbal": "^3.6|^4", + "doctrine/orm": "^2.15|^3", + "psr/log": "^1|^2|^3", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/doctrine-messenger": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4.6|^7.0.6", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/type-info": "^7.1.8", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "symfony-bridge", "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + "Symfony\\Bridge\\Doctrine\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3615,26 +3316,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", + "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.37.0" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.3.10" }, "funding": [ { @@ -3654,46 +3347,50 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-01-20T16:37:04+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.37.0", + "name": "symfony/error-handler", + "version": "v7.4.8", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315" + "url": "https://github.com/symfony/error-handler.git", + "reference": "8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315", - "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa", + "reference": "8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa", "shasum": "" }, "require": { - "ext-iconv": "*", - "php": ">=7.2" + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, - "provide": { - "ext-mbstring": "*" + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, - "suggest": { - "ext-mbstring": "For best performance" + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3701,25 +3398,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.37.0" + "source": "https://github.com/symfony/error-handler/tree/v7.4.8" }, "funding": [ { @@ -3739,31 +3429,53 @@ "type": "tidelift" } ], - "time": "2026-04-10T17:25:58+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.31.0", + "name": "symfony/event-dispatcher", + "version": "v7.4.9", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "e4a2e29753c7801f7a8340e066cfa788f3bc8101" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e4a2e29753c7801f7a8340e066cfa788f3bc8101", + "reference": "e4a2e29753c7801f7a8340e066cfa788f3bc8101", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, - "type": "metapackage", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3771,24 +3483,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.9" }, "funding": [ { @@ -3799,47 +3505,49 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-18T13:18:21+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.37.0", + "name": "symfony/event-dispatcher-contracts", + "version": "v3.7.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", - "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/ccba7060602b7fed0b03c85bf025257f76d9ef32", + "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.1", + "psr/event-dispatcher": "^1" }, "type": "library", "extra": { "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Symfony\\Contracts\\EventDispatcher\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3855,18 +3563,2560 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Generic abstractions related to dispatching event", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.37.0" - }, - "funding": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-01-05T13:30:16+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v7.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "dcd8f96bcdc0f128ec406c765cc066c6035d1be3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/dcd8f96bcdc0f128ec406c765cc066c6035d1be3", + "reference": "dcd8f96bcdc0f128ec406c765cc066c6035d1be3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v7.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-18T13:18:21+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "e0be088d22278583a82da281886e8c3592fbf149" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/e0be088d22278583a82da281886e8c3592fbf149", + "reference": "e0be088d22278583a82da281886e8c3592fbf149", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-03-24T13:12:05+00:00" + }, + { + "name": "symfony/form", + "version": "v6.4.36", + "source": { + "type": "git", + "url": "https://github.com/symfony/form.git", + "reference": "3a38a81150400f0a486f8963e21a195311b30b27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/form/zipball/3a38a81150400f0a486f8963e21a195311b30b27", + "reference": "3a38a81150400f0a486f8963e21a195311b30b27", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/options-resolver": "^5.4|^6.0|^7.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/polyfill-mbstring": "~1.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/doctrine-bridge": "<5.4.21|>=6,<6.2.7", + "symfony/error-handler": "<5.4", + "symfony/framework-bundle": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.3" + }, + "require-dev": { + "doctrine/collections": "^1.0|^2.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/html-sanitizer": "^6.1|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/security-core": "^6.2|^7.0", + "symfony/security-csrf": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Form\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows to easily create, process and reuse HTML forms", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/form/tree/v6.4.36" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-03-13T14:59:02+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v6.4.37", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "b147918db04b0d823e551b01a7a4f342e415baa5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/b147918db04b0d823e551b01a7a4f342e415baa5", + "reference": "b147918db04b0d823e551b01a7a4f342e415baa5", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.1", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/dependency-injection": "^6.4.12|^7.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.1|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4", + "symfony/polyfill-mbstring": "~1.0", + "symfony/routing": "^6.4|^7.0" + }, + "conflict": { + "doctrine/annotations": "<1.13.1", + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/asset": "<5.4", + "symfony/asset-mapper": "<6.4", + "symfony/clock": "<6.3", + "symfony/console": "<5.4|>=7.0", + "symfony/dom-crawler": "<6.4", + "symfony/dotenv": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<6.3", + "symfony/lock": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<6.3", + "symfony/mime": "<6.4.37|>=7.0,<7.4.9", + "symfony/property-access": "<5.4", + "symfony/property-info": "<5.4", + "symfony/runtime": "<5.4.45|>=6.0,<6.4.13|>=7.0,<7.1.6", + "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", + "symfony/security-core": "<5.4", + "symfony/security-csrf": "<5.4", + "symfony/serializer": "<6.4", + "symfony/stopwatch": "<5.4", + "symfony/translation": "<6.4", + "symfony/twig-bridge": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/validator": "<6.4", + "symfony/web-profiler-bundle": "<6.4", + "symfony/workflow": "<6.4" + }, + "require-dev": { + "doctrine/annotations": "^1.13.1|^2", + "doctrine/persistence": "^1.3|^2|^3", + "dragonmantank/cron-expression": "^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "seld/jsonlint": "^1.10", + "symfony/asset": "^5.4|^6.0|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/console": "^5.4.9|^6.0.9|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/dotenv": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/form": "^5.4|^6.0|^7.0", + "symfony/html-sanitizer": "^6.1|^7.0", + "symfony/http-client": "^6.3|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/mailer": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.3|^7.0", + "symfony/mime": "^6.4.37|^7.4.9", + "symfony/notifier": "^5.4|^6.0|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0", + "symfony/scheduler": "^6.4.4|^7.0.4", + "symfony/security-bundle": "^5.4|^6.0|^7.0", + "symfony/semaphore": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/string": "^5.4|^6.0|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/twig-bundle": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/web-link": "^5.4|^6.0|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0", + "twig/twig": "^2.10|^3.0.4" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.37" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-29T17:11:44+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "9381209597ec66c25be154cbf2289076e64d1eab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9381209597ec66c25be154cbf2289076e64d1eab", + "reference": "9381209597ec66c25be154cbf2289076e64d1eab", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "^1.1" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-03-24T13:12:05+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.4.38", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "769c1ee766d6c327176f4e3bdaad58f521193abd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/769c1ee766d6c327176f4e3bdaad58f521193abd", + "reference": "769c1ee766d6c327176f4e3bdaad58f521193abd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.3", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^6.4.1|^7.0.1", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.5|^6.0.5|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^5.4|^6.4|^7.0", + "symfony/var-exporter": "^6.2|^7.0", + "twig/twig": "^2.13|^3.0.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.4.38" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-05-06T13:04:40+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v7.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "20366bceee51838144a14805204bb792cb3d09f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/20366bceee51838144a14805204bb792cb3d09f2", + "reference": "20366bceee51838144a14805204bb792cb3d09f2", + "shasum": "" + }, + "require": { + "monolog/monolog": "^3", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/security-core": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/mailer": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/security-core": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Monolog\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Monolog with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/monolog-bridge/tree/v7.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-29T13:21:53+00:00" + }, + { + "name": "symfony/monolog-bundle", + "version": "v3.11.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "d87468010570b2ec766152184918ee8d267c7411" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/d87468010570b2ec766152184918ee8d267c7411", + "reference": "d87468010570b2ec766152184918ee8d267c7411", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.0", + "monolog/monolog": "^1.25.1 || ^2.0 || ^3.0", + "php": ">=8.1", + "symfony/config": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/http-kernel": "^6.4 || ^7.0", + "symfony/monolog-bridge": "^6.4 || ^7.0", + "symfony/polyfill-php84": "^1.30" + }, + "require-dev": { + "symfony/console": "^6.4 || ^7.0", + "symfony/phpunit-bridge": "^7.3.3", + "symfony/yaml": "^6.4 || ^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MonologBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony MonologBundle", + "homepage": "https://symfony.com", + "keywords": [ + "log", + "logging" + ], + "support": { + "issues": "https://github.com/symfony/monolog-bundle/issues", + "source": "https://github.com/symfony/monolog-bundle/tree/v3.11.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-02T18:23:01+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", + "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-03-24T13:12:05+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/4864388bfbd3001ce88e234fab652acd91fdc57e", + "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-26T13:13:48+00:00" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "3510b63d07376b04e57e27e82607d468bb134f78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/3510b63d07376b04e57e27e82607d468bb134f78", + "reference": "3510b63d07376b04e57e27e82607d468bb134f78", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance and support of other locales than \"en\"" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Icu\\": "" + }, + "classmap": [ + "Resources/stubs" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-10T16:50:15+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315", + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-10T17:25:58+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "metapackage", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/3600c2cb22399e25bb226e4a135ce91eeb2a6149", + "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-10T17:25:58+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-10T18:47:49+00:00" + }, + { + "name": "symfony/polyfill-php85", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "fcfa4973a9917cef23f2e38774da74a2b7d115ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/fcfa4973a9917cef23f2e38774da74a2b7d115ee", + "reference": "fcfa4973a9917cef23f2e38774da74a2b7d115ee", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php85\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php85/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-26T13:10:57+00:00" + }, + { + "name": "symfony/process", + "version": "v8.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", + "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", + "shasum": "" + }, + "require": { + "php": ">=8.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v8.0.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-03-30T15:14:47+00:00" + }, + { + "name": "symfony/property-access", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc", + "reference": "b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/property-info": "^6.4.32|~7.3.10|^7.4.4|^8.0.4" + }, + "require-dev": { + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4.1|^7.0.1|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property-path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-03-24T13:12:05+00:00" + }, + { + "name": "symfony/property-info", + "version": "v8.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "c21711980653360d6ef5c26d0f9ca6f58a1135c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/c21711980653360d6ef5c26d0f9ca6f58a1135c6", + "reference": "c21711980653360d6ef5c26d0f9ca6f58a1135c6", + "shasum": "" + }, + "require": { + "php": ">=8.4", + "symfony/string": "^7.4|^8.0", + "symfony/type-info": "^7.4.7|^8.0.7" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<5.2|>=7", + "phpdocumentor/type-resolver": "<1.5.1" + }, + "require-dev": { + "phpdocumentor/reflection-docblock": "^5.2|^6.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", + "symfony/cache": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts information about PHP class' properties using metadata of popular sources", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v8.0.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-03-30T15:14:47+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "287771d8bc86eacb30678dd10eda6c64a859951f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/287771d8bc86eacb30678dd10eda6c64a859951f", + "reference": "287771d8bc86eacb30678dd10eda6c64a859951f", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-22T15:21:55+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.7.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-03-28T09:44:51+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v8.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "85954ed72d5440ea4dc9a10b7e49e01df766ffa3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/85954ed72d5440ea4dc9a10b7e49e01df766ffa3", + "reference": "85954ed72d5440ea4dc9a10b7e49e01df766ffa3", + "shasum": "" + }, + "require": { + "php": ">=8.4", + "symfony/service-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v8.0.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-03-30T15:14:47+00:00" + }, + { + "name": "symfony/string", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "114ac57257d75df748eda23dd003878080b8e688" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/114ac57257d75df748eda23dd003878080b8e688", + "reference": "114ac57257d75df748eda23dd003878080b8e688", + "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-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "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/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-03-24T13:12:05+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.4.38", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "afaa31b0c12d9a659eed1ea97f268a614cc1299c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/afaa31b0c12d9a659eed1ea97f268a614cc1299c", + "reference": "afaa31b0c12d9a659eed1ea97f268a614cc1299c", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.18|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.4.38" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-05-06T08:55:54+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/0ab302977a952b42fd51475c4ebac81f8da0a95d", + "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.7.0" + }, + "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" @@ -3884,41 +6134,80 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-01-05T13:30:16+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.37.0", + "name": "symfony/twig-bridge", + "version": "v6.4.36", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "3ae963a108fd6fc14d09a7fe5e41fe64d8ac11ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", - "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/3ae963a108fd6fc14d09a7fe5e41fe64d8ac11ba", + "reference": "3ae963a108fd6fc14d09a7fe5e41fe64d8ac11ba", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/translation-contracts": "^2.5|^3", + "twig/twig": "^2.13|^3.0.4" }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/console": "<5.4", + "symfony/form": "<6.4.32|>7,<7.3.10|>7.4,<7.4.4", + "symfony/http-foundation": "<5.4", + "symfony/http-kernel": "<6.4", + "symfony/mime": "<6.2", + "symfony/serializer": "<6.4", + "symfony/translation": "<5.4", + "symfony/workflow": "<5.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^5.4|^6.0|^7.0", + "symfony/asset-mapper": "^6.3|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/form": "^6.4.32|~7.3.10|^7.4.4", + "symfony/html-sanitizer": "^6.1|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/mime": "^6.2|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^5.4|^6.0|^7.0", + "symfony/security-csrf": "^5.4|^6.0|^7.0", + "symfony/security-http": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^6.1|^7.0", + "symfony/web-link": "^5.4|^6.0|^7.0", + "symfony/workflow": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0", + "twig/cssinliner-extra": "^2.12|^3", + "twig/inky-extra": "^2.12|^3", + "twig/markdown-extra": "^2.12|^3" }, + "type": "symfony-bridge", "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Bridge\\Twig\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3927,28 +6216,106 @@ ], "authors": [ { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Twig with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v6.4.36" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-03-30T09:31:23+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v6.4.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "a5c8dcc11a5bf9c96320da20070d2e158a4e0b30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/a5c8dcc11a5bf9c96320da20070d2e158a4e0b30", + "reference": "a5c8dcc11a5bf9c96320da20070d2e158a4e0b30", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "php": ">=8.1", + "symfony/config": "^6.1|^7.0", + "symfony/dependency-injection": "^6.1|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^6.2", + "symfony/twig-bridge": "^6.4", + "twig/twig": "^2.13|^3.0.4" + }, + "conflict": { + "symfony/framework-bundle": "<5.4", + "symfony/translation": "<5.4" + }, + "require-dev": { + "symfony/asset": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/form": "^5.4|^6.0|^7.0", + "symfony/framework-bundle": "^5.4|^6.0|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/web-link": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" + "source": "https://github.com/symfony/twig-bundle/tree/v6.4.32" }, "funding": [ { @@ -3968,41 +6335,39 @@ "type": "tidelift" } ], - "time": "2026-04-10T16:19:22+00:00" + "time": "2026-01-05T12:44:39+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.37.0", + "name": "symfony/type-info", + "version": "v8.0.9", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + "url": "https://github.com/symfony/type-info.git", + "reference": "08723aceb8c3271e8cb3db8b2565728b0c88e866" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "url": "https://api.github.com/repos/symfony/type-info/zipball/08723aceb8c3271e8cb3db8b2565728b0c88e866", + "reference": "08723aceb8c3271e8cb3db8b2565728b0c88e866", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.4", + "psr/container": "^1.1|^2.0" }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } + "conflict": { + "phpstan/phpdoc-parser": "<1.30" + }, + "require-dev": { + "phpstan/phpdoc-parser": "^1.30|^2.0" }, + "type": "library", "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" + "Symfony\\Component\\TypeInfo\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4011,24 +6376,28 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Mathias Arlaud", + "email": "mathias.arlaud@gmail.com" + }, + { + "name": "Baptiste LEDUC", + "email": "baptiste.leduc@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Extracts PHP types information.", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "PHPStan", + "phpdoc", + "symfony", + "type" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.37.0" + "source": "https://github.com/symfony/type-info/tree/v8.0.9" }, "funding": [ { @@ -4048,41 +6417,151 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-29T15:02:55+00:00" }, { - "name": "symfony/polyfill-php84", - "version": "v1.37.0", + "name": "symfony/validator", + "version": "v6.4.37", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06" + "url": "https://github.com/symfony/validator.git", + "reference": "72cfcf7925746d9950bbdab1362f6bda3b4046cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06", - "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06", + "url": "https://api.github.com/repos/symfony/validator/zipball/72cfcf7925746d9950bbdab1362f6bda3b4046cf", + "reference": "72cfcf7925746d9950bbdab1362f6bda3b4046cf", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php83": "^1.27", + "symfony/translation-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/annotations": "<1.13", + "doctrine/lexer": "<1.1", + "symfony/dependency-injection": "<5.4", + "symfony/expression-language": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/intl": "<5.4", + "symfony/property-info": "<5.4", + "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.13|^2", + "egulias/email-validator": "^2.1.10|^3|^4", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/Resources/bin/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to validate values", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/v6.4.37" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-29T06:33:37+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd" }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9510c3966f749a1d1ff0059e1eabef6cc621e7fd", + "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", "autoload": { "files": [ - "bootstrap.php" + "Resources/functions/dump.php" ], "psr-4": { - "Symfony\\Polyfill\\Php84\\": "" + "Symfony\\Component\\VarDumper\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4099,16 +6578,14 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "description": "Provides mechanisms for walking through any arbitrary PHP variable", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "debug", + "dump" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.37.0" + "source": "https://github.com/symfony/var-dumper/tree/v7.4.8" }, "funding": [ { @@ -4128,45 +6605,38 @@ "type": "tidelift" } ], - "time": "2026-04-10T18:47:49+00:00" + "time": "2026-03-30T13:44:50+00:00" }, { - "name": "symfony/polyfill-uuid", - "version": "v1.37.0", + "name": "symfony/var-exporter", + "version": "v8.0.9", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" + "url": "https://github.com/symfony/var-exporter.git", + "reference": "24cf67be4dd0926e4413635418682f4fff831412" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", - "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/24cf67be4dd0926e4413635418682f4fff831412", + "reference": "24cf67be4dd0926e4413635418682f4fff831412", "shasum": "" }, "require": { - "php": ">=7.2" - }, - "provide": { - "ext-uuid": "*" + "php": ">=8.4" }, - "suggest": { - "ext-uuid": "For best performance" + "require-dev": { + "symfony/property-access": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Uuid\\": "" - } + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4174,24 +6644,28 @@ ], "authors": [ { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for uuid functions", + "description": "Allows exporting any serializable PHP data structure to plain PHP code", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "uuid" + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.37.0" + "source": "https://github.com/symfony/var-exporter/tree/v8.0.9" }, "funding": [ { @@ -4211,190 +6685,43 @@ "type": "tidelift" } ], - "time": "2026-04-10T16:19:22+00:00" + "time": "2026-04-18T13:51:42+00:00" }, { - "name": "symfony/symfony", - "version": "v5.4.51", + "name": "symfony/yaml", + "version": "v6.4.38", "source": { "type": "git", - "url": "https://github.com/symfony/symfony.git", - "reference": "c5a2ee30e4049191b75cfdc16a0fc1eaeab9945a" + "url": "https://github.com/symfony/yaml.git", + "reference": "f8d2f4af29053842c01b4cae6bd4c2c3191fc63c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/symfony/zipball/c5a2ee30e4049191b75cfdc16a0fc1eaeab9945a", - "reference": "c5a2ee30e4049191b75cfdc16a0fc1eaeab9945a", + "url": "https://api.github.com/repos/symfony/yaml/zipball/f8d2f4af29053842c01b4cae6bd4c2c3191fc63c", + "reference": "f8d2f4af29053842c01b4cae6bd4c2c3191fc63c", "shasum": "" }, "require": { - "doctrine/event-manager": "~1.0", - "doctrine/persistence": "^2|^3", - "ext-xml": "*", - "friendsofphp/proxy-manager-lts": "^1.0.2", - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0", - "psr/container": "^1.1.1", - "psr/event-dispatcher": "^1.0", - "psr/link": "^1.0", - "psr/log": "^1|^2", - "symfony/contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.11", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.23", - "symfony/polyfill-uuid": "^1.15", - "twig/twig": "^2.13|^3.0.4" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "async-aws/core": "<1.5", - "doctrine/annotations": "<1.13.1", - "doctrine/dbal": "<2.13.1", - "egulias/email-validator": "~3.0.0", - "ext-psr": "<1.1|>=2", - "masterminds/html5": "<2.6", - "ocramius/proxy-manager": "<2.1", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "phpunit/phpunit": "<7.5|9.1.2" - }, - "provide": { - "php-http/async-client-implementation": "*", - "php-http/client-implementation": "*", - "psr/cache-implementation": "1.0|2.0", - "psr/container-implementation": "1.0", - "psr/event-dispatcher-implementation": "1.0", - "psr/http-client-implementation": "1.0", - "psr/link-implementation": "1.0", - "psr/log-implementation": "1.0|2.0", - "psr/simple-cache-implementation": "1.0|2.0", - "symfony/cache-implementation": "1.0|2.0", - "symfony/event-dispatcher-implementation": "2.0", - "symfony/http-client-implementation": "2.4", - "symfony/service-implementation": "1.0|2.0", - "symfony/translation-implementation": "2.3" - }, - "replace": { - "symfony/asset": "self.version", - "symfony/browser-kit": "self.version", - "symfony/cache": "self.version", - "symfony/config": "self.version", - "symfony/console": "self.version", - "symfony/css-selector": "self.version", - "symfony/debug-bundle": "self.version", - "symfony/dependency-injection": "self.version", - "symfony/doctrine-bridge": "self.version", - "symfony/dom-crawler": "self.version", - "symfony/dotenv": "self.version", - "symfony/error-handler": "self.version", - "symfony/event-dispatcher": "self.version", - "symfony/expression-language": "self.version", - "symfony/filesystem": "self.version", - "symfony/finder": "self.version", - "symfony/form": "self.version", - "symfony/framework-bundle": "self.version", - "symfony/http-client": "self.version", - "symfony/http-foundation": "self.version", - "symfony/http-kernel": "self.version", - "symfony/inflector": "self.version", - "symfony/intl": "self.version", - "symfony/ldap": "self.version", - "symfony/lock": "self.version", - "symfony/mailer": "self.version", - "symfony/messenger": "self.version", - "symfony/mime": "self.version", - "symfony/monolog-bridge": "self.version", - "symfony/notifier": "self.version", - "symfony/options-resolver": "self.version", - "symfony/password-hasher": "self.version", - "symfony/process": "self.version", - "symfony/property-access": "self.version", - "symfony/property-info": "self.version", - "symfony/proxy-manager-bridge": "self.version", - "symfony/rate-limiter": "self.version", - "symfony/routing": "self.version", - "symfony/security-bundle": "self.version", - "symfony/security-core": "self.version", - "symfony/security-csrf": "self.version", - "symfony/security-guard": "self.version", - "symfony/security-http": "self.version", - "symfony/semaphore": "self.version", - "symfony/serializer": "self.version", - "symfony/stopwatch": "self.version", - "symfony/string": "self.version", - "symfony/templating": "self.version", - "symfony/translation": "self.version", - "symfony/twig-bridge": "self.version", - "symfony/twig-bundle": "self.version", - "symfony/uid": "self.version", - "symfony/validator": "self.version", - "symfony/var-dumper": "self.version", - "symfony/var-exporter": "self.version", - "symfony/web-link": "self.version", - "symfony/web-profiler-bundle": "self.version", - "symfony/workflow": "self.version", - "symfony/yaml": "self.version" + "symfony/console": "<5.4" }, "require-dev": { - "amphp/amp": "^2.5", - "amphp/http-client": "^4.2.1", - "amphp/http-tunnel": "^1.0", - "async-aws/ses": "^1.0", - "async-aws/sns": "^1.0", - "async-aws/sqs": "^1.0|^2.0", - "cache/integration-tests": "dev-master", - "doctrine/annotations": "^1.13.1|^2", - "doctrine/cache": "^1.11|^2.0", - "doctrine/collections": "^1.0|^2.0", - "doctrine/data-fixtures": "^1.1|^2", - "doctrine/dbal": "^2.13.1|^3.0", - "doctrine/orm": "^2.7.4", - "egulias/email-validator": "^2.1.10|^3.1|^4", - "guzzlehttp/promises": "^1.4|^2.0", - "masterminds/html5": "^2.6", - "monolog/monolog": "^1.25.1|^2", - "nyholm/psr7": "^1.0", - "pda/pheanstalk": "^4.0", - "php-http/httplug": "^1.0|^2.0", - "php-http/message-factory": "^1.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "phpstan/phpdoc-parser": "^1.0|^2.0", - "predis/predis": "^1.1|^2.0", - "psr/http-client": "^1.0", - "psr/simple-cache": "^1.0|^2.0", - "symfony/mercure-bundle": "^0.3", - "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", - "symfony/runtime": "self.version", - "symfony/security-acl": "~2.8|~3.0", - "twig/cssinliner-extra": "^2.12|^3", - "twig/inky-extra": "^2.12|^3", - "twig/markdown-extra": "^2.12|^3" + "symfony/console": "^5.4|^6.0|^7.0" }, + "bin": [ + "Resources/bin/yaml-lint" + ], "type": "library", "autoload": { - "files": [ - "src/Symfony/Component/String/Resources/functions.php" - ], "psr-4": { - "Symfony\\Bundle\\": "src/Symfony/Bundle/", - "Symfony\\Component\\": "src/Symfony/Component/", - "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/", - "Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/", - "Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/", - "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/", - "Symfony\\Runtime\\Symfony\\Component\\": "src/Symfony/Component/Runtime/Internal/" + "Symfony\\Component\\Yaml\\": "" }, - "classmap": [ - "src/Symfony/Component/Intl/Resources/stubs" - ], "exclude-from-classmap": [ - "**/Tests/", - "**/bin/" + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4411,14 +6738,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "The Symfony PHP framework", + "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", - "keywords": [ - "framework" - ], "support": { - "issues": "https://github.com/symfony/symfony/issues", - "source": "https://github.com/symfony/symfony/tree/v5.4.51" + "source": "https://github.com/symfony/yaml/tree/v6.4.38" }, "funding": [ { @@ -4438,7 +6761,7 @@ "type": "tidelift" } ], - "time": "2026-01-28T07:10:49+00:00" + "time": "2026-05-05T06:55:40+00:00" }, { "name": "twig/twig", @@ -4524,38 +6847,41 @@ "packages-dev": [ { "name": "doctrine/data-fixtures", - "version": "1.6.7", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/data-fixtures.git", - "reference": "ae4e845decbe177348fdbecd04331f4fb96aa301" + "reference": "bf7ac3a050b54b261cedfb3d0a44733819062275" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/ae4e845decbe177348fdbecd04331f4fb96aa301", - "reference": "ae4e845decbe177348fdbecd04331f4fb96aa301", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/bf7ac3a050b54b261cedfb3d0a44733819062275", + "reference": "bf7ac3a050b54b261cedfb3d0a44733819062275", "shasum": "" }, "require": { - "doctrine/deprecations": "^0.5.3 || ^1.0", - "doctrine/persistence": "^1.3.3 || ^2.0 || ^3.0", - "php": "^7.2 || ^8.0" + "doctrine/persistence": "^3.1 || ^4.0", + "php": "^8.1", + "psr/log": "^1.1 || ^2 || ^3" }, "conflict": { - "doctrine/dbal": "<2.13", - "doctrine/orm": "<2.14", + "doctrine/dbal": "<3.5 || >=5", + "doctrine/orm": "<2.14 || >=4", "doctrine/phpcr-odm": "<1.3.0" }, "require-dev": { - "doctrine/coding-standard": "^11.0", - "doctrine/dbal": "^2.13 || ^3.0", + "doctrine/coding-standard": "^14", + "doctrine/dbal": "^3.5 || ^4", "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", - "doctrine/orm": "^2.14", + "doctrine/orm": "^2.14 || ^3", + "doctrine/phpcr-odm": "^1.8 || ^2.0", "ext-sqlite3": "*", - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^8.5 || ^9.5 || ^10.0", - "symfony/cache": "^5.0 || ^6.0", - "vimeo/psalm": "^4.10 || ^5.9" + "fig/log-test": "^1", + "jackalope/jackalope-fs": "*", + "phpstan/phpstan": "2.1.46", + "phpunit/phpunit": "10.5.63 || 12.5.12", + "symfony/cache": "^6.4 || ^7 || ^8", + "symfony/var-exporter": "^6.4 || ^7 || ^8" }, "suggest": { "alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)", @@ -4586,7 +6912,7 @@ ], "support": { "issues": "https://github.com/doctrine/data-fixtures/issues", - "source": "https://github.com/doctrine/data-fixtures/tree/1.6.7" + "source": "https://github.com/doctrine/data-fixtures/tree/2.2.1" }, "funding": [ { @@ -4602,45 +6928,49 @@ "type": "tidelift" } ], - "time": "2023-08-17T21:15:33+00:00" + "time": "2026-04-01T13:56:01+00:00" }, { "name": "doctrine/doctrine-fixtures-bundle", - "version": "3.4.5", + "version": "3.7.3", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", - "reference": "5988484f79362cd7d06564bd11be7ce622e08c87" + "reference": "4c3dfcc819ba2725a574f4286aa3f6459f582d5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/5988484f79362cd7d06564bd11be7ce622e08c87", - "reference": "5988484f79362cd7d06564bd11be7ce622e08c87", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/4c3dfcc819ba2725a574f4286aa3f6459f582d5b", + "reference": "4c3dfcc819ba2725a574f4286aa3f6459f582d5b", "shasum": "" }, "require": { - "doctrine/data-fixtures": "^1.3", - "doctrine/doctrine-bundle": "^1.11|^2.0", - "doctrine/orm": "^2.6.0", - "doctrine/persistence": "^1.3.7|^2.0|^3.0", - "php": "^7.1 || ^8.0", - "symfony/config": "^3.4|^4.3|^5.0|^6.0", - "symfony/console": "^3.4|^4.3|^5.0|^6.0", - "symfony/dependency-injection": "^3.4.47|^4.3|^5.0|^6.0", - "symfony/doctrine-bridge": "^3.4|^4.1|^5.0|^6.0", - "symfony/http-kernel": "^3.4|^4.3|^5.0|^6.0" + "doctrine/data-fixtures": "^1.5 || ^2.0", + "doctrine/doctrine-bundle": "^2.2", + "doctrine/orm": "^2.14.0 || ^3.0", + "doctrine/persistence": "^2.4 || ^3.0 || ^4", + "php": "^7.4 || ^8.0", + "psr/log": "^1 || ^2 || ^3", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/doctrine-bridge": "^5.4.48 || ^6.4.16 || ^7.1.9", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0" + }, + "conflict": { + "doctrine/dbal": "< 3" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "^1.4.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", - "symfony/phpunit-bridge": "^6.0.8", - "vimeo/psalm": "^4.22" + "doctrine/coding-standard": "14.0.0", + "phpstan/phpstan": "2.1.32", + "phpunit/phpunit": "^9.6.13 || 11.4.14", + "symfony/phpunit-bridge": "7.3.4" }, "type": "symfony-bundle", "autoload": { "psr-4": { - "Doctrine\\Bundle\\FixturesBundle\\": "" + "Doctrine\\Bundle\\FixturesBundle\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -4669,7 +6999,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", - "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.4.5" + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.7.3" }, "funding": [ { @@ -4685,7 +7015,7 @@ "type": "tidelift" } ], - "time": "2023-10-29T18:36:06+00:00" + "time": "2025-12-03T15:47:21+00:00" }, { "name": "myclabs/deep-copy", @@ -4747,6 +7077,64 @@ ], "time": "2025-08-01T08:46:24+00:00" }, + { + "name": "nikic/php-parser", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + }, + "time": "2025-12-06T11:56:16+00:00" + }, { "name": "phar-io/manifest", "version": "2.0.4", @@ -4867,40 +7255,44 @@ }, { "name": "phpunit/php-code-coverage", - "version": "7.0.17", + "version": "10.1.16", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "40a4ed114a4aea5afd6df8d0f0c9cd3033097f66" + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/40a4ed114a4aea5afd6df8d0f0c9cd3033097f66", - "reference": "40a4ed114a4aea5afd6df8d0f0c9cd3033097f66", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-xmlwriter": "*", - "php": ">=7.2", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.1.3 || ^4.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^4.2.2", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1.3" + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^8.2.2" + "phpunit/phpunit": "^10.1" }, "suggest": { - "ext-xdebug": "^2.7.2" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-main": "10.1.x-dev" } }, "autoload": { @@ -4928,7 +7320,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.17" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" }, "funding": [ { @@ -4936,32 +7329,32 @@ "type": "github" } ], - "time": "2024-03-02T06:09:37+00:00" + "time": "2024-08-22T04:31:57+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.6", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "69deeb8664f611f156a924154985fbd4911eb36b" + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/69deeb8664f611f156a924154985fbd4911eb36b", - "reference": "69deeb8664f611f156a924154985fbd4911eb36b", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -4988,7 +7381,71 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.6" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "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", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, "funding": [ { @@ -4996,26 +7453,34 @@ "type": "github" } ], - "time": "2024-03-01T13:39:50+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { "name": "phpunit/php-text-template", - "version": "1.2.1", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -5039,34 +7504,41 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, - "time": "2015-06-21T13:50:34+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" }, { "name": "phpunit/php-timer", - "version": "2.1.4", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "a691211e94ff39a34811abd521c31bd5b305b0bb" + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/a691211e94ff39a34811abd521c31bd5b305b0bb", - "reference": "a691211e94ff39a34811abd521c31bd5b305b0bb", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -5092,41 +7564,149 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.4" + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "10.5.63", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "33198268dad71e926626b618f3ec3966661e4d90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/33198268dad71e926626b618f3ec3966661e4d90", + "reference": "33198268dad71e926626b618f3ec3966661e4d90", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.5", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.4", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.1", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.63" }, "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2024-03-01T13:42:41+00:00" + "time": "2026-01-27T05:48:37+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "4.0.4", + "name": "sebastian/cli-parser", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/a853a0e183b9db7eed023d7933a858fa1c8d25a3", - "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": "^7.3 || ^8.0" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -5141,17 +7721,16 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { - "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", - "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" + "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/2.0.1" }, "funding": [ { @@ -5159,61 +7738,32 @@ "type": "github" } ], - "abandoned": true, - "time": "2020-08-04T08:28:15+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { - "name": "phpunit/phpunit", - "version": "8.5.52", + "name": "sebastian/code-unit", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "1015741814413c156abb0f53d7db7bbd03c6e858" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1015741814413c156abb0f53d7db7bbd03c6e858", - "reference": "1015741814413c156abb0f53d7db7bbd03c6e858", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.5.0", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.4", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=7.2", - "phpunit/php-code-coverage": "^7.0.17", - "phpunit/php-file-iterator": "^2.0.6", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1.4", - "sebastian/comparator": "^3.0.7", - "sebastian/diff": "^3.0.6", - "sebastian/environment": "^4.2.5", - "sebastian/exporter": "^3.1.8", - "sebastian/global-state": "^3.0.6", - "sebastian/object-enumerator": "^3.0.5", - "sebastian/resource-operations": "^2.0.3", - "sebastian/type": "^1.1.5", - "sebastian/version": "^2.0.1" + "php": ">=8.1" }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage", - "phpunit/php-invoker": "To allow enforcing time limits" + "require-dev": { + "phpunit/phpunit": "^10.0" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "8.5-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -5232,66 +7782,44 @@ "role": "lead" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.52" + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" } ], - "time": "2026-01-27T05:20:18+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54", - "reference": "92a1a52e86d34cde6caa54f1b5ffa9fda18e5d54", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -5313,7 +7841,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -5321,34 +7849,36 @@ "type": "github" } ], - "time": "2024-03-01T13:45:45+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "3.0.7", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "bc7d8ac2fe1cce229bff9b5fd4efe65918a1ff52" + "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/bc7d8ac2fe1cce229bff9b5fd4efe65918a1ff52", - "reference": "bc7d8ac2fe1cce229bff9b5fd4efe65918a1ff52", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55dfef806eb7dfeb6e7a6935601fef866f8ca48d", + "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d", "shasum": "" }, "require": { - "php": ">=7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -5387,7 +7917,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.7" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.5" }, "funding": [ { @@ -5407,33 +7938,91 @@ "type": "tidelift" } ], - "time": "2026-01-24T09:20:25+00:00" + "time": "2026-01-24T09:25:16+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2-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": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "3.0.6", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "98ff311ca519c3aa73ccd3de053bdb377171d7b6" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/98ff311ca519c3aa73ccd3de053bdb377171d7b6", - "reference": "98ff311ca519c3aa73ccd3de053bdb377171d7b6", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -5465,7 +8054,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -5473,27 +8063,27 @@ "type": "github" } ], - "time": "2024-03-02T06:16:36+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "sebastian/environment", - "version": "4.2.5", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "56932f6049a0482853056ffd617c91ffcc754205" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/56932f6049a0482853056ffd617c91ffcc754205", - "reference": "56932f6049a0482853056ffd617c91ffcc754205", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -5501,7 +8091,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -5520,7 +8110,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -5528,7 +8118,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/4.2.5" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { @@ -5536,34 +8127,34 @@ "type": "github" } ], - "time": "2024-03-01T13:49:59+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.8", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "64cfeaa341951ceb2019d7b98232399d57bb2296" + "reference": "0735b90f4da94969541dac1da743446e276defa6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/64cfeaa341951ceb2019d7b98232399d57bb2296", - "reference": "64cfeaa341951ceb2019d7b98232399d57bb2296", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", + "reference": "0735b90f4da94969541dac1da743446e276defa6", "shasum": "" }, "require": { - "php": ">=7.2", - "sebastian/recursion-context": "^3.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -5598,14 +8189,15 @@ } ], "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.8" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4" }, "funding": [ { @@ -5625,38 +8217,35 @@ "type": "tidelift" } ], - "time": "2025-09-24T05:55:14+00:00" + "time": "2025-09-24T06:09:11+00:00" }, { "name": "sebastian/global-state", - "version": "3.0.6", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "800689427e3e8cf57a8fe38fcd1d4344c9b2f046" + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/800689427e3e8cf57a8fe38fcd1d4344c9b2f046", - "reference": "800689427e3e8cf57a8fe38fcd1d4344c9b2f046", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { - "php": ">=7.2", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^8.0" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -5675,60 +8264,107 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, + } + ], + "time": "2024-03-02T07:19:19+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "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/2.0.2" + }, + "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2025-08-10T05:40:12+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.5", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "ac5b293dba925751b808e02923399fb44ff0d541" + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/ac5b293dba925751b808e02923399fb44ff0d541", - "reference": "ac5b293dba925751b808e02923399fb44ff0d541", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -5750,7 +8386,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.5" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -5758,32 +8394,32 @@ "type": "github" } ], - "time": "2024-03-01T13:54:02+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "1.1.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "1d439c229e61f244ff1f211e5c99737f90c67def" + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/1d439c229e61f244ff1f211e5c99737f90c67def", - "reference": "1d439c229e61f244ff1f211e5c99737f90c67def", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.0" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -5805,7 +8441,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.3" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -5813,32 +8449,32 @@ "type": "github" } ], - "time": "2024-03-01T13:56:04+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "3.0.3", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "8fe7e75986a9d24b4cceae847314035df7703a5a" + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/8fe7e75986a9d24b4cceae847314035df7703a5a", - "reference": "8fe7e75986a9d24b4cceae847314035df7703a5a", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", "shasum": "" }, "require": { - "php": ">=7.0" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -5865,10 +8501,11 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.3" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1" }, "funding": [ { @@ -5888,29 +8525,32 @@ "type": "tidelift" } ], - "time": "2025-08-10T05:25:53+00:00" + "time": "2025-08-10T07:50:56+00:00" }, { - "name": "sebastian/resource-operations", - "version": "2.0.3", + "name": "sebastian/type", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "72a7f7674d053d548003b16ff5a106e7e0e06eee" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/72a7f7674d053d548003b16ff5a106e7e0e06eee", - "reference": "72a7f7674d053d548003b16ff5a106e7e0e06eee", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -5925,13 +8565,15 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.3" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -5939,32 +8581,29 @@ "type": "github" } ], - "time": "2024-03-01T13:59:09+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { - "name": "sebastian/type", - "version": "1.1.5", + "name": "sebastian/version", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "18f071c3a29892b037d35e6b20ddf3ea39b42874" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/18f071c3a29892b037d35e6b20ddf3ea39b42874", - "reference": "18f071c3a29892b037d35e6b20ddf3ea39b42874", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=7.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.2" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -5983,11 +8622,11 @@ "role": "lead" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/1.1.5" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { @@ -5995,54 +8634,93 @@ "type": "github" } ], - "time": "2024-03-01T14:04:07+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { - "name": "sebastian/version", - "version": "2.0.1", + "name": "symfony/web-profiler-bundle", + "version": "v6.4.36", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "6f75b4c748886c8e04a3674225d00eaa51f3842d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/6f75b4c748886c8e04a3674225d00eaa51f3842d", + "reference": "6f75b4c748886c8e04a3674225d00eaa51f3842d", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=8.1", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/twig-bundle": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } + "conflict": { + "symfony/form": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/twig-bundle": ">=7.0" }, + "require-dev": { + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0" + }, + "type": "symfony-bundle", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Bundle\\WebProfilerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Provides a development tool that gives detailed information about the execution of any request", + "homepage": "https://symfony.com", + "keywords": [ + "dev" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/master" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.36" }, - "time": "2016-10-03T07:35:21+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-03-17T09:05:06+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/bundles.php b/config/bundles.php index e48c4a9..5535c1f 100755 --- a/config/bundles.php +++ b/config/bundles.php @@ -6,7 +6,6 @@ Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['development' => true, 'test' => true], - Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], AppBundle\AppBundle::class => ['all' => true], Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['development' => true, 'test' => true], diff --git a/src/AppBundle/Controller/ImportRepositoriesController.php b/src/AppBundle/Controller/ImportRepositoriesController.php index abca06b..3b40233 100644 --- a/src/AppBundle/Controller/ImportRepositoriesController.php +++ b/src/AppBundle/Controller/ImportRepositoriesController.php @@ -3,33 +3,29 @@ namespace AppBundle\Controller; use AppBundle\ProjectImport\ImportProjectTask; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Validator\Constraints\NotBlank; +use Twig\Environment; class ImportRepositoriesController { - private FormFactoryInterface $formFactory; - - private ImportProjectTask $importProjectTask; - private bool $demoMode; - public function __construct(FormFactoryInterface $formFactory, ImportProjectTask $importProjectTask, $demoMode) - { - $this->formFactory = $formFactory; - $this->importProjectTask = $importProjectTask; - $this->demoMode = $demoMode ?? false; + public function __construct( + private FormFactoryInterface $formFactory, + private ImportProjectTask $importProjectTask, + private Environment $twig, + $demoMode = null, + ) { + $this->demoMode = (bool) $demoMode; } - /** - * @Route("/import-repositories", name="import-repositories") - * @Template() - */ - public function importFormAction(Request $request) + #[Route('/import-repositories', name: 'import-repositories')] + public function importFormAction(Request $request): Response { $projectImportForm = $this->getProjectImportForm(); $imports = ['success' => [], 'fail' => []]; @@ -49,17 +45,28 @@ public function importFormAction(Request $request) } } - return [ - 'importProjectsForm' => $projectImportForm->createView(), - 'imports' => $imports, - 'demoMode' => $this->demoMode, - ]; + return new Response( + $this->twig->render('@AppBundle/import_repositories/import_form.html.twig', + [ + 'importProjectsForm' => $projectImportForm->createView(), + 'imports' => $imports, + 'demoMode' => $this->demoMode, + ] + ) + ); } private function getProjectImportForm() { return $this->formFactory->createBuilder() - ->add('repositoryUrls', TextareaType::class, ['label' => 'Repository URLs separated by comma', 'constraints' => [new NotBlank()]]) - ->setMethod('POST')->getForm(); + ->add( + 'repositoryUrls', + TextareaType::class, + [ + 'label' => 'Repository URLs separated by comma', + 'constraints' => [new NotBlank()] + ] + )->setMethod('POST') + ->getForm(); } } diff --git a/src/AppBundle/Controller/MainController.php b/src/AppBundle/Controller/MainController.php index 0d89e41..88d6951 100755 --- a/src/AppBundle/Controller/MainController.php +++ b/src/AppBundle/Controller/MainController.php @@ -3,25 +3,22 @@ namespace AppBundle\Controller; use AppBundle\Form\Type\SearchPackageType; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Attribute\Route; +use Twig\Environment; class MainController { - private FormFactoryInterface $formFactory; - - public function __construct(FormFactoryInterface $formFactory) - { - $this->formFactory = $formFactory; + public function __construct( + private FormFactoryInterface $formFactory, + private Environment $twig, + ) { } - /** - * @Route("/", name="main") - * @Template() - */ - public function mainAction(Request $request) + #[Route('/', name: 'main')] + public function mainAction(Request $request): Response { $searchPackageForm = $this->formFactory->create(SearchPackageType::class, null, ['method' => 'GET']); $searchPackageForm->handleRequest($request); @@ -31,16 +28,26 @@ public function mainAction(Request $request) $package = $data['package']; $versionConstraint = $data['versionConstraint']; - return [ - 'searchPackageForm' => $searchPackageForm->createView(), - 'matchingPackageVersions' => $package->getMatchingVersionsWithProjects($versionConstraint), - 'package' => $package, - ]; + return new Response( + $this->twig->render( + '@AppBundle/main/main.html.twig', + [ + 'searchPackageForm' => $searchPackageForm->createView(), + 'matchingPackageVersions' => $package->getMatchingVersionsWithProjects($versionConstraint), + 'package' => $package, + ] + ) + ); } - return [ - 'searchPackageForm' => $searchPackageForm->createView(), - ]; + return new Response( + $this->twig->render( + '@AppBundle/main/main.html.twig', + [ + 'searchPackageForm' => $searchPackageForm->createView(), + ] + ) + ); } /** diff --git a/src/AppBundle/Controller/PackageController.php b/src/AppBundle/Controller/PackageController.php index 1181982..9f28655 100644 --- a/src/AppBundle/Controller/PackageController.php +++ b/src/AppBundle/Controller/PackageController.php @@ -2,71 +2,76 @@ namespace AppBundle\Controller; -use AppBundle\Entity\Package; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; +use AppBundle\Entity\Repository\PackageRepository; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Twig\Environment; class PackageController { - /** - * @var UrlGeneratorInterface - */ - private $urlGenerator; - - public function __construct(UrlGeneratorInterface $urlGenerator) - { - $this->urlGenerator = $urlGenerator; + public function __construct( + private UrlGeneratorInterface $urlGenerator, + private PackageRepository $packageRepository, + private Environment $twig, + ) { } - /** - * @Route( - * "/package/{name};{_format}", - * name="package", - * requirements={"name"="[^;]+", "_format": "json|html"}, - * defaults={"_format"="html"} - * ) - * @ParamConverter("package", class="AppBundle\Entity\Package", options={"repository_method" = "findOneByName"}) - * @Template() - */ - public function detailAction(Package $package, Request $request, $_format) + #[Route( + '/package/{name};{_format}', + name: 'package', + requirements: ['name' => '[^;]+', '_format' => 'json|html'], + defaults: ['_format' => 'html'] + )] + public function detailAction(string $name, Request $request, string $_format): Response { + $package = $this->packageRepository->findOneByName($name); + if (!$package) { + throw new NotFoundHttpException(); + } + $operator = $request->query->get('operator'); $versionString = $request->query->get('versionString'); - if (!$operator || !$versionString) { - return ['package' => $package]; - } - - if (null !== $operator && 'html' === $_format) { + if ($operator && $versionString && 'html' === $_format) { // an older version of Baton used this URL to render search results. To keep the URLs intact, we redirect - $url = $this->urlGenerator->generate('main', MainController::getUrlParametersForSearchSubmitPage( - $package->getName(), - $operator, - $versionString - )); + $url = $this->urlGenerator->generate( + 'main', + MainController::getUrlParametersForSearchSubmitPage($package->getName(), $operator, $versionString) + ); return new RedirectResponse($url); } - return ['package' => $package]; + return new Response( + $this->twig->render( + '@AppBundle/package/detail.'.$_format.'.twig', + ['package' => $package] + ) + ); } - /** - * @Route( - * "/package-versions/{name};{_format}", - * name="package-versions", - * requirements={"name"="[^;]*"}, - * defaults={"_format"="json"} - * ) - * @ParamConverter("package", class="AppBundle\Entity\Package", options={"repository_method" = "findOneByName"}) - * @Template() - */ - public function versionsAction(Package $package) + #[Route( + '/package-versions/{name};{_format}', + name: 'package-versions', + requirements: ['name' => '[^;]*'], + defaults: ['_format' => 'json'] + )] + public function versionsAction(string $name): Response { - return ['packageVersions' => $package->getVersions()]; + $package = $this->packageRepository->findOneByName($name); + if (!$package) { + throw new NotFoundHttpException(); + } + + return new Response( + $this->twig->render( + '@AppBundle/package/versions.json.twig', + ['packageVersions' => $package->getVersions()] + ) + ); } } diff --git a/src/AppBundle/Controller/ProjectController.php b/src/AppBundle/Controller/ProjectController.php index 7355a12..f7bfdd1 100644 --- a/src/AppBundle/Controller/ProjectController.php +++ b/src/AppBundle/Controller/ProjectController.php @@ -2,24 +2,30 @@ namespace AppBundle\Controller; -use AppBundle\Entity\Project; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; -use Symfony\Component\Routing\Annotation\Route; +use AppBundle\Entity\Repository\ProjectRepository; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Symfony\Component\Routing\Attribute\Route; +use Twig\Environment; class ProjectController { - /** - * @Route( - * "/project/{name}", - * name="project", - * requirements={"name"=".+"} - * ) - * @ParamConverter("project", class="AppBundle\Entity\Project", options={"repository_method" = "findOneByName"}) - * @Template() - */ - public function detailAction(Project $project) + public function __construct( + private ProjectRepository $projectRepository, + private Environment $twig, + ) { + } + + #[Route('/project/{name}', name: 'project', requirements: ['name' => '.+'])] + public function detailAction(string $name): Response { - return ['project' => $project]; + $project = $this->projectRepository->findOneByName($name); + if (!$project) { + throw new NotFoundHttpException(); + } + + return new Response( + $this->twig->render('@AppBundle/project/detail.html.twig', ['project' => $project]) + ); } } diff --git a/src/AppBundle/Controller/SettingsController.php b/src/AppBundle/Controller/SettingsController.php index 964889c..e04a159 100644 --- a/src/AppBundle/Controller/SettingsController.php +++ b/src/AppBundle/Controller/SettingsController.php @@ -4,36 +4,30 @@ use AppBundle\Entity\Repository\PackageRepository; use AppBundle\Entity\Repository\ProjectRepository; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Attribute\Route; +use Twig\Environment; class SettingsController { - /** - * @var ProjectRepository - */ - private $projectRepo; - - /** - * @var PackageRepository - */ - private $packageRepo; - - public function __construct(ProjectRepository $projectRepository, PackageRepository $packageRepository) - { - $this->projectRepo = $projectRepository; - $this->packageRepo = $packageRepository; + public function __construct( + private ProjectRepository $projectRepository, + private PackageRepository $packageRepository, + private Environment $twig, + ) { } - /** - * @Route("/settings", name="settings") - * @Template() - */ - public function settingsAction(): array + #[Route('/settings', name: 'settings')] + public function settingsAction(): Response { - return [ - 'projects' => $this->projectRepo->findBy([], ['name' => 'ASC']), - 'packages' => $this->packageRepo->findBy([], ['name' => 'ASC']), - ]; + return new Response( + $this->twig->render( + '@AppBundle/settings/settings.html.twig', + [ + 'projects' => $this->projectRepository->findBy([], ['name' => 'ASC']), + 'packages' => $this->packageRepository->findBy([], ['name' => 'ASC']), + ] + ) + ); } } diff --git a/src/AppBundle/Controller/UsageSearchController.php b/src/AppBundle/Controller/UsageSearchController.php index dbd7e65..33ba3ff 100644 --- a/src/AppBundle/Controller/UsageSearchController.php +++ b/src/AppBundle/Controller/UsageSearchController.php @@ -2,15 +2,16 @@ namespace AppBundle\Controller; -use AppBundle\Entity\Package; +use AppBundle\Entity\Repository\PackageRepository; use AppBundle\Entity\VersionConstraint; use Composer\Semver\VersionParser; use InvalidArgumentException; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Symfony\Component\HttpFoundation\RedirectResponse; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Twig\Environment; /** * This controller provides a JSON API for search results. It is not being used internally in the web interface of Baton. @@ -20,52 +21,53 @@ */ class UsageSearchController { - /** - * @var UrlGeneratorInterface - */ - private $urlGenerator; - - public function __construct(UrlGeneratorInterface $urlGenerator) - { - $this->urlGenerator = $urlGenerator; + public function __construct( + private UrlGeneratorInterface $urlGenerator, + private PackageRepository $packageRepository, + private Environment $twig, + ) { } - /** - * @Route( - * "/usage-search/{package};{_format}/{operator}/{versionString}", - * name="search-usages", - * requirements={"package"="[^;]+", "_format": "json|html"}, - * defaults={"_format"="html"} - * ) - * @Template() - * @ParamConverter("package", class="AppBundle\Entity\Package", options={"repository_method" = "findOneByName"}) - */ - public function searchResultsAction(Package $package, $operator, $versionString, $_format) + #[Route( + '/usage-search/{package};{_format}/{operator}/{versionString}', + name: 'search-usages', + requirements: ['package' => '[^;]+', '_format' => 'json|html'], + defaults: ['_format' => 'html'] + )] + public function searchResultsAction(string $package, string $operator, string $versionString, string $_format): Response { if ('html' === $_format) { // an older version of Baton used this URL to render search results. To keep the URLs intact, we redirect - $url = $this->urlGenerator->generate('main', MainController::getUrlParametersForSearchSubmitPage( - $package->getName(), - $operator, - $versionString - )); + $url = $this->urlGenerator->generate( + 'main', + MainController::getUrlParametersForSearchSubmitPage($package, $operator, $versionString) + ); return new RedirectResponse($url); } + $packageEntity = $this->packageRepository->findOneByName($package); + if (!$packageEntity) { + throw new NotFoundHttpException(); + } + if (!preg_match(VersionConstraint::VALID_OPERATORS, $operator)) { throw new InvalidArgumentException('Operator query parameter must match '.VersionConstraint::VALID_OPERATORS); } $normalizedVersionString = (new VersionParser())->normalize($versionString); - $versionConstraint = new VersionConstraint($operator, $normalizedVersionString); - return [ - 'matchingPackageVersions' => $package->getMatchingVersionsWithProjects($versionConstraint), - 'package' => $package, - 'operator' => $operator, - 'versionString' => $versionString, - ]; + return new Response( + $this->twig->render( + '@AppBundle/usage_search/search_results.json.twig', + [ + 'matchingPackageVersions' => $packageEntity->getMatchingVersionsWithProjects($versionConstraint), + 'package' => $packageEntity, + 'operator' => $operator, + 'versionString' => $versionString, + ] + ) + ); } } diff --git a/src/AppBundle/Controller/WebhookController.php b/src/AppBundle/Controller/WebhookController.php index 1eec0de..2c4ecdd 100644 --- a/src/AppBundle/Controller/WebhookController.php +++ b/src/AppBundle/Controller/WebhookController.php @@ -3,9 +3,9 @@ namespace AppBundle\Controller; use AppBundle\ProjectImport\ImportProjectTask; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; class WebhookController @@ -16,9 +16,7 @@ public function __construct( ) { } - /** - * @Route("/webhook", name="webhook", methods={"POST"}) - */ + #[Route('/webhook', name: 'webhook', methods: ['POST'])] public function updateAction(Request $request) { set_time_limit(500); diff --git a/src/AppBundle/DataFixtures/AppFixtures.php b/src/AppBundle/DataFixtures/AppFixtures.php index 85c222a..e04e426 100644 --- a/src/AppBundle/DataFixtures/AppFixtures.php +++ b/src/AppBundle/DataFixtures/AppFixtures.php @@ -10,7 +10,7 @@ class AppFixtures extends Fixture { - public function load(ObjectManager $manager) + public function load(ObjectManager $manager): void { $versionStrings = ['1.0.0', '2.0.0', '3.0.0']; for ($i = 0; $i < 2; ++$i) { diff --git a/src/AppBundle/Entity/Package.php b/src/AppBundle/Entity/Package.php index 016382b..c46c6ec 100644 --- a/src/AppBundle/Entity/Package.php +++ b/src/AppBundle/Entity/Package.php @@ -2,49 +2,41 @@ namespace AppBundle\Entity; +use AppBundle\Entity\Repository\PackageRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; /** * Describes the mapping for Composer Packages that are used in projects. - * - * @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\PackageRepository") - * @ORM\Table(name="Package") */ +#[ORM\Entity(repositoryClass: PackageRepository::class)] +#[ORM\Table(name: 'Package')] class Package { + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - * * @var int */ private $id; + #[ORM\Column(type: 'string', unique: true)] /** - * @ORM\Column(type="string", unique=true) - * * @var string */ private $name; + #[ORM\Column(type: 'string', nullable: true)] /** - * @ORM\Column(type="string", nullable=true) - * * @var string|null */ private $description; + #[ORM\OneToMany(targetEntity: PackageVersion::class, mappedBy: 'package', cascade: ['persist', 'remove'])] + #[ORM\JoinColumn(onDelete: 'CASCADE')] /** - * @ORM\OneToMany( - * targetEntity="PackageVersion", - * mappedBy="package", - * cascade={"persist", "remove"} - * ) - * @ORM\JoinColumn(onDelete="CASCADE") - * * @var Collection|PackageVersion[] */ private $versions; diff --git a/src/AppBundle/Entity/PackageVersion.php b/src/AppBundle/Entity/PackageVersion.php index 913284f..fcbda67 100644 --- a/src/AppBundle/Entity/PackageVersion.php +++ b/src/AppBundle/Entity/PackageVersion.php @@ -9,49 +9,39 @@ /** * Describes a Composer package used in a specific version number. - * - * @ORM\Entity - * @ORM\Table(name="PackageVersion", uniqueConstraints={@ORM\UniqueConstraint(name="uniq_package_version", columns={"package_id", "prettyVersion"})}) */ +#[ORM\Entity] +#[ORM\Table(name: 'PackageVersion', uniqueConstraints: [ + new ORM\UniqueConstraint(name: 'uniq_package_version', columns: ['package_id', 'prettyVersion']), +])] class PackageVersion { + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - * * @var int */ private $id; + #[ORM\Column(name: 'prettyVersion', type: 'string')] /** - * @ORM\Column(name="prettyVersion", type="string") - * * @var string */ private $prettyVersion; + #[ORM\ManyToOne(targetEntity: Package::class, inversedBy: 'versions', cascade: ['persist'])] /** - * @ORM\ManyToOne( - * targetEntity="Package", - * inversedBy="versions", - * cascade={"persist"} - * ) - * * @var Package */ private $package; + #[ORM\ManyToMany(targetEntity: Project::class, inversedBy: 'usages')] + #[ORM\JoinTable(name: 'packageversion_project', + joinColumns: [new ORM\JoinColumn(name: 'packageversion_id', referencedColumnName: 'id')], + inverseJoinColumns: [new ORM\JoinColumn(name: 'project_id', referencedColumnName: 'id')] + )] /** - * @ORM\ManyToMany( - * targetEntity="Project", - * inversedBy="usages" - * ) - * @ORM\JoinTable(name="packageversion_project", - * joinColumns={@ORM\JoinColumn(name="packageversion_id", referencedColumnName="id")}, - * inverseJoinColumns={@ORM\JoinColumn(name="project_id", referencedColumnName="id")} - * ) - * * @var Collection|Project[] */ private $projects; diff --git a/src/AppBundle/Entity/Project.php b/src/AppBundle/Entity/Project.php index d7b6ee0..a67f373 100644 --- a/src/AppBundle/Entity/Project.php +++ b/src/AppBundle/Entity/Project.php @@ -2,60 +2,49 @@ namespace AppBundle\Entity; +use AppBundle\Entity\Repository\ProjectRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\ProjectRepository") - * @ORM\Table(name="Project") - */ +#[ORM\Entity(repositoryClass: ProjectRepository::class)] +#[ORM\Table(name: 'Project')] class Project { + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - * * @var int */ private $id; + #[ORM\Column(type: 'string', unique: true)] /** - * @ORM\Column(type="string", unique=true) - * * @var string */ private $name; + #[ORM\Column(name: 'vcsUrl', type: 'string')] /** - * @ORM\Column(name="vcsUrl", type="string") - * * @var string */ private $vcsUrl; + #[ORM\Column(type: 'string', nullable: true)] /** - * @ORM\Column(type="string", nullable=true) - * * @var string|null */ private $description; + #[ORM\Column(type: 'boolean')] /** - * @ORM\Column(type="boolean") - * * @var bool */ public $archived = false; + #[ORM\ManyToMany(targetEntity: PackageVersion::class, mappedBy: 'projects', cascade: ['persist'])] /** - * @ORM\ManyToMany( - * targetEntity="PackageVersion", - * mappedBy="projects", - * cascade={"persist"} - * ) - * * @var Collection|PackageVersion[] */ private $packageVersions; diff --git a/src/AppBundle/Tests/ProjectImport/ImportProjectTaskTest.php b/src/AppBundle/Tests/ProjectImport/ImportProjectTaskTest.php index c9cc34a..6dcd7ea 100644 --- a/src/AppBundle/Tests/ProjectImport/ImportProjectTaskTest.php +++ b/src/AppBundle/Tests/ProjectImport/ImportProjectTaskTest.php @@ -29,8 +29,8 @@ protected function setUp(): void $this->vcsDriverFactory = $this->createMock(VcsDriverFactory::class); $this->packageVersionFetcher = $this->createMock(PackageVersionFetcher::class); $this->importProjectTask = new ImportProjectTask( - self::$container->get(EntityManagerInterface::class), - self::$container->get(ProjectProviderInterface::class), + self::getContainer()->get(EntityManagerInterface::class), + self::getContainer()->get(ProjectProviderInterface::class), $this->packageVersionFetcher, $this->vcsDriverFactory, new NullLogger() diff --git a/src/AppKernel.php b/src/AppKernel.php index 371e6b5..042e704 100755 --- a/src/AppKernel.php +++ b/src/AppKernel.php @@ -5,7 +5,7 @@ class AppKernel extends Kernel { - public function registerBundles() + public function registerBundles(): iterable { $contents = require $this->getProjectDir().'/config/bundles.php'; foreach ($contents as $class => $envs) { @@ -20,12 +20,12 @@ public function registerContainerConfiguration(LoaderInterface $loader) $loader->load(__DIR__.'/config_'.$this->environment.'.yml'); } - public function getCacheDir() + public function getCacheDir(): string { return __DIR__.'/../var/cache/'.$this->environment; } - public function getLogDir() + public function getLogDir(): string { return __DIR__.'/../logs'; } @@ -33,7 +33,7 @@ public function getLogDir() /** * @return string */ - public function getProjectDir() + public function getProjectDir(): string { return __DIR__.'/../'; } diff --git a/src/config.default.yml b/src/config.default.yml index bd3b289..95c0c3d 100644 --- a/src/config.default.yml +++ b/src/config.default.yml @@ -44,7 +44,7 @@ framework: twig: strict_variables: "%kernel.debug%" form_themes: - - 'AppBundle:Form:fields.html.twig' + - '@AppBundle/Form/fields.html.twig' doctrine: dbal: diff --git a/src/config_test.default.yml b/src/config_test.default.yml index 81a857c..ff3e44e 100755 --- a/src/config_test.default.yml +++ b/src/config_test.default.yml @@ -1,7 +1,7 @@ framework: test: true session: - storage_id: session.storage.filesystem + storage_factory_id: session.storage.factory.mock_file monolog: handlers: @@ -9,6 +9,6 @@ monolog: # Disable logging during test execution. Might be replaced by more advanced # strategies in the future, but for now this change avoids creation of files # and log output on the console during test runs. - type: "Null" + type: "null" priority: -1 diff --git a/src/routing.yml b/src/routing.yml index 3d51522..72384ec 100755 --- a/src/routing.yml +++ b/src/routing.yml @@ -2,4 +2,4 @@ app: resource: "@AppBundle/Controller" prefix: / defaults: { _locale: en } - type: annotation + type: attribute diff --git a/www/app.php b/www/app.php index e86f0e4..cba3659 100755 --- a/www/app.php +++ b/www/app.php @@ -2,7 +2,7 @@ // based on https://github.com/symfony/recipes/blob/984d337aabb837ab5f20322af0290111f98c164a/symfony/framework-bundle/4.2/public/index.php -use Symfony\Component\Debug\Debug; +use Symfony\Component\ErrorHandler\Debug; use Symfony\Component\HttpFoundation\Request; require dirname(__DIR__).'/config/bootstrap.php'; From 06dff98cb02a054c70d837bf8c97354bf17bb47a Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 19:17:42 +0200 Subject: [PATCH 07/51] =?UTF-8?q?Update=20Symfony=206.4=20=E2=86=92=207.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Require PHP ^8.2 - symfony/* ^6.4 -> ^7.2 - symfony/dotenv ^8.0 - doctrine/orm ^2.5 -> ^3.0 - doctrine/dbal ^4.0 - doctrine/doctrine-bundle ^2.0 -> ^2.13 - enable_annotations → enable_attributes in framework.validation - enable_native_lazy_objects: true (needed for ORM 3 + symfony/var-exporter 8.x) - server_version quoted as string (DBAL 4 expects string, not float) - return type for ImportProjectCommand::execute() --- composer.json | 26 +- composer.lock | 1445 +++++++---------- .../Command/ImportProjectCommand.php | 4 +- src/config.default.yml | 5 +- 4 files changed, 645 insertions(+), 835 deletions(-) diff --git a/composer.json b/composer.json index 8f65754..1a3a33d 100755 --- a/composer.json +++ b/composer.json @@ -3,26 +3,28 @@ "type": "project", "description": "Composer Dependency Tracking", "require": { - "php": "^8.1", + "php": "^8.2", "composer/composer": "^2.0", - "doctrine/doctrine-bundle": "^2.0", + "doctrine/dbal": "^4.0", + "doctrine/doctrine-bundle": "^2.13", "doctrine/doctrine-migrations-bundle": "^3.0", "doctrine/migrations": "^3.0", - "doctrine/orm": "^2.5.14", - "symfony/asset": "^6.4", - "symfony/console": "^6.4", - "symfony/form": "^6.4", - "symfony/framework-bundle": "^6.4", + "doctrine/orm": "^3.0", + "symfony/asset": "^7.2", + "symfony/console": "^7.2", + "symfony/dotenv": "^8.0", + "symfony/form": "^7.2", + "symfony/framework-bundle": "^7.2", "symfony/monolog-bundle": "^3.2.0", - "symfony/translation": "^6.4", - "symfony/twig-bundle": "^6.4", - "symfony/validator": "^6.4", - "symfony/yaml": "^6.4" + "symfony/translation": "^7.2", + "symfony/twig-bundle": "^7.2", + "symfony/validator": "^7.2", + "symfony/yaml": "^7.2" }, "require-dev": { "phpunit/phpunit": "^10.0", "doctrine/doctrine-fixtures-bundle": "^3.0", - "symfony/web-profiler-bundle": "^6.4" + "symfony/web-profiler-bundle": "^7.2" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index d0b9ec3..f331226 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": "f4b7bb9d47adb7f75a411b4a3715fea6", + "content-hash": "79b901622fae954ab0df19a64efb2c37", "packages": [ { "name": "composer/ca-bundle", @@ -627,100 +627,6 @@ ], "time": "2024-05-06T16:37:16+00:00" }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "abandoned": true, - "time": "2022-05-20T20:07:39+00:00" - }, { "name": "doctrine/collections", "version": "2.6.0", @@ -807,141 +713,42 @@ ], "time": "2026-01-15T10:01:58+00:00" }, - { - "name": "doctrine/common", - "version": "3.5.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/d9ea4a54ca2586db781f0265d36bea731ac66ec5", - "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5", - "shasum": "" - }, - "require": { - "doctrine/persistence": "^2.0 || ^3.0 || ^4.0", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0 || ^10.0", - "doctrine/collections": "^1", - "phpstan/phpstan": "^1.4.1", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", - "squizlabs/php_codesniffer": "^3.0", - "symfony/phpunit-bridge": "^6.1", - "vimeo/psalm": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", - "homepage": "https://www.doctrine-project.org/projects/common.html", - "keywords": [ - "common", - "doctrine", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.5.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcommon", - "type": "tidelift" - } - ], - "time": "2025-01-01T22:12:03+00:00" - }, { "name": "doctrine/dbal", - "version": "3.10.5", + "version": "4.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "95d84866bf3c04b2ddca1df7c049714660959aef" + "reference": "61e730f1658814821a85f2402c945f3883407dec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/95d84866bf3c04b2ddca1df7c049714660959aef", - "reference": "95d84866bf3c04b2ddca1df7c049714660959aef", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/61e730f1658814821a85f2402c945f3883407dec", + "reference": "61e730f1658814821a85f2402c945f3883407dec", "shasum": "" }, "require": { - "composer-runtime-api": "^2", - "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", + "doctrine/deprecations": "^1.1.5", + "php": "^8.2", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, - "conflict": { - "doctrine/cache": "< 1.11" - }, "require-dev": { - "doctrine/cache": "^1.11|^2.0", "doctrine/coding-standard": "14.0.0", "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.1", + "jetbrains/phpstorm-stubs": "2023.2", "phpstan/phpstan": "2.1.30", + "phpstan/phpstan-phpunit": "2.0.7", "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "9.6.34", + "phpunit/phpunit": "11.5.50", "slevomat/coding-standard": "8.27.1", "squizlabs/php_codesniffer": "4.0.1", - "symfony/cache": "^5.4|^6.0|^7.0|^8.0", - "symfony/console": "^4.4|^5.4|^6.0|^7.0|^8.0" + "symfony/cache": "^6.3.8|^7.0|^8.0", + "symfony/console": "^5.4|^6.3|^7.0|^8.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." }, - "bin": [ - "bin/doctrine-dbal" - ], "type": "library", "autoload": { "psr-4": { @@ -994,7 +801,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.10.5" + "source": "https://github.com/doctrine/dbal/tree/4.4.3" }, "funding": [ { @@ -1010,7 +817,7 @@ "type": "tidelift" } ], - "time": "2026-02-24T08:03:57+00:00" + "time": "2026-03-20T08:52:12+00:00" }, { "name": "doctrine/deprecations", @@ -1698,61 +1505,48 @@ }, { "name": "doctrine/orm", - "version": "2.20.12", + "version": "3.6.5", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "5fc5b1991d6a4301cbab8ee4d47e90401235be09" + "reference": "7e88b416153dceeb563352ca2b12465f09eea173" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/5fc5b1991d6a4301cbab8ee4d47e90401235be09", - "reference": "5fc5b1991d6a4301cbab8ee4d47e90401235be09", + "url": "https://api.github.com/repos/doctrine/orm/zipball/7e88b416153dceeb563352ca2b12465f09eea173", + "reference": "7e88b416153dceeb563352ca2b12465f09eea173", "shasum": "" }, "require": { "composer-runtime-api": "^2", - "doctrine/cache": "^1.12.1 || ^2.1.1", - "doctrine/collections": "^1.5 || ^2.1", - "doctrine/common": "^3.0.3", - "doctrine/dbal": "^2.13.1 || ^3.2", + "doctrine/collections": "^2.2", + "doctrine/dbal": "^3.8.2 || ^4", "doctrine/deprecations": "^0.5.3 || ^1", "doctrine/event-manager": "^1.2 || ^2", "doctrine/inflector": "^1.4 || ^2.0", "doctrine/instantiator": "^1.3 || ^2", - "doctrine/lexer": "^2 || ^3", - "doctrine/persistence": "^2.4 || ^3", + "doctrine/lexer": "^3", + "doctrine/persistence": "^3.3.1 || ^4", "ext-ctype": "*", - "php": "^7.1 || ^8.0", + "php": "^8.1", "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^4.2 || ^5.0 || ^6.0 || ^7.0 || ^8.0", - "symfony/polyfill-php72": "^1.23", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "doctrine/annotations": "<1.13 || >= 3.0" + "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/var-exporter": "^6.3.9 || ^7.0 || ^8.0" }, "require-dev": { - "doctrine/annotations": "^1.13 || ^2", - "doctrine/coding-standard": "^9.0.2 || ^14.0", - "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/extension-installer": "~1.1.0 || ^1.4", - "phpstan/phpstan": "~1.4.10 || 2.1.23", - "phpstan/phpstan-deprecation-rules": "^1 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "doctrine/coding-standard": "^14.0", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "2.1.23", + "phpstan/phpstan-deprecation-rules": "^2", + "phpunit/phpunit": "^10.5.0 || ^11.5", "psr/log": "^1 || ^2 || ^3", - "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7.0", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2 || ^7.0", - "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0" + "symfony/cache": "^5.4 || ^6.2 || ^7.0 || ^8.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", - "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0", - "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0" }, - "bin": [ - "bin/doctrine" - ], "type": "library", "autoload": { "psr-4": { @@ -1793,40 +1587,38 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.20.12" + "source": "https://github.com/doctrine/orm/tree/3.6.5" }, - "time": "2026-05-08T11:18:45+00:00" + "time": "2026-05-11T06:47:19+00:00" }, { "name": "doctrine/persistence", - "version": "3.4.4", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "5785dc79a0553ba41b0dda8a7ee792053e6186c8" + "reference": "49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/5785dc79a0553ba41b0dda8a7ee792053e6186c8", - "reference": "5785dc79a0553ba41b0dda8a7ee792053e6186c8", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b", + "reference": "49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b", "shasum": "" }, "require": { + "doctrine/deprecations": "^1", "doctrine/event-manager": "^1 || ^2", - "php": "^7.2 || ^8.0", + "php": "^8.1", "psr/cache": "^1.0 || ^2.0 || ^3.0" }, - "conflict": { - "doctrine/common": "<2.10" - }, "require-dev": { - "doctrine/coding-standard": "^12 || ^14", - "doctrine/common": "^3.0", - "phpstan/phpstan": "^1 || 2.1.30", - "phpstan/phpstan-phpunit": "^1 || ^2", - "phpstan/phpstan-strict-rules": "^1 || ^2", - "phpunit/phpunit": "^8.5.38 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" + "doctrine/coding-standard": "^14", + "phpstan/phpstan": "2.1.30", + "phpstan/phpstan-phpunit": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.58 || ^12", + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/finder": "^4.4 || ^5.4 || ^6.0 || ^7.0 || ^8.0" }, "type": "library", "autoload": { @@ -1875,7 +1667,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.4.4" + "source": "https://github.com/doctrine/persistence/tree/4.2.0" }, "funding": [ { @@ -1891,7 +1683,7 @@ "type": "tidelift" } ], - "time": "2026-04-04T19:40:43+00:00" + "time": "2026-04-26T12:12:52+00:00" }, { "name": "doctrine/sql-formatter", @@ -2649,28 +2441,28 @@ }, { "name": "symfony/asset", - "version": "v6.4.34", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "1bd59aa278691b6310ca56b996cf6e2619a6a347" + "reference": "d2e2f014ccd6ec9fae8dbe6336a4164346a2a856" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/1bd59aa278691b6310ca56b996cf6e2619a6a347", - "reference": "1bd59aa278691b6310ca56b996cf6e2619a6a347", + "url": "https://api.github.com/repos/symfony/asset/zipball/d2e2f014ccd6ec9fae8dbe6336a4164346a2a856", + "reference": "d2e2f014ccd6ec9fae8dbe6336a4164346a2a856", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "conflict": { - "symfony/http-foundation": "<5.4" + "symfony/http-foundation": "<6.4" }, "require-dev": { - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0" + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -2698,7 +2490,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v6.4.34" + "source": "https://github.com/symfony/asset/tree/v7.4.8" }, "funding": [ { @@ -2718,7 +2510,7 @@ "type": "tidelift" } ], - "time": "2026-02-07T09:15:39+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/cache", @@ -2985,47 +2777,47 @@ }, { "name": "symfony/console", - "version": "v6.4.37", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "7bbcaf3fdb1e18fa42a7f0b84a10d091c10548f5" + "reference": "d7d2b64a45a89d607865927b176fa51c33ddbb58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7bbcaf3fdb1e18fa42a7f0b84a10d091c10548f5", - "reference": "7bbcaf3fdb1e18fa42a7f0b84a10d091c10548f5", + "url": "https://api.github.com/repos/symfony/console/zipball/d7d2b64a45a89d607865927b176fa51c33ddbb58", + "reference": "d7d2b64a45a89d607865927b176fa51c33ddbb58", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^7.2|^8.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -3059,7 +2851,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.37" + "source": "https://github.com/symfony/console/tree/v7.4.9" }, "funding": [ { @@ -3079,7 +2871,7 @@ "type": "tidelift" } ], - "time": "2026-04-13T15:27:04+00:00" + "time": "2026-04-22T15:21:55+00:00" }, { "name": "symfony/dependency-injection", @@ -3238,16 +3030,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.3.10", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "98814d5e95e382150629619fa883e775baf6f340" + "reference": "7a87c85853f3069e3657a823c62b02952de46b0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/98814d5e95e382150629619fa883e775baf6f340", - "reference": "98814d5e95e382150629619fa883e775baf6f340", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/7a87c85853f3069e3657a823c62b02952de46b0a", + "reference": "7a87c85853f3069e3657a823c62b02952de46b0a", "shasum": "" }, "require": { @@ -3274,7 +3066,7 @@ "symfony/property-info": "<6.4", "symfony/security-bundle": "<6.4", "symfony/security-core": "<6.4", - "symfony/validator": "<6.4" + "symfony/validator": "<7.4" }, "require-dev": { "doctrine/collections": "^1.8|^2.0", @@ -3282,24 +3074,24 @@ "doctrine/dbal": "^3.6|^4", "doctrine/orm": "^2.15|^3", "psr/log": "^1|^2|^3", - "symfony/cache": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/doctrine-messenger": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/form": "^6.4.6|^7.0.6", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/security-core": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/type-info": "^7.1.8", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/doctrine-messenger": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/form": "^7.2|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/security-core": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/type-info": "^7.1.8|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "symfony-bridge", "autoload": { @@ -3327,7 +3119,81 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.3.10" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-04-29T14:19:39+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v8.0.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "82e1d8f888896a215bb6673e6d1f6d5ca47a9dfe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/82e1d8f888896a215bb6673e6d1f6d5ca47a9dfe", + "reference": "82e1d8f888896a215bb6673e6d1f6d5ca47a9dfe", + "shasum": "" + }, + "require": { + "php": ">=8.4" + }, + "require-dev": { + "symfony/console": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Dotenv\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "source": "https://github.com/symfony/dotenv/tree/v8.0.11" }, "funding": [ { @@ -3347,37 +3213,36 @@ "type": "tidelift" } ], - "time": "2026-01-20T16:37:04+00:00" + "time": "2026-05-11T13:06:45+00:00" }, { "name": "symfony/error-handler", - "version": "v7.4.8", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa" + "reference": "c1119fe8dcfc3825ec74ec061b96ef0c8f281517" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa", - "reference": "8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c1119fe8dcfc3825ec74ec061b96ef0c8f281517", + "reference": "c1119fe8dcfc3825ec74ec061b96ef0c8f281517", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "psr/log": "^1|^2|^3", "symfony/polyfill-php85": "^1.32", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/var-dumper": "^7.4|^8.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5", - "symfony/http-kernel": "<6.4" + "symfony/deprecation-contracts": "<2.5" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0", + "symfony/console": "^7.4|^8.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", "symfony/webpack-encore-bundle": "^1.0|^2.0" }, "bin": [ @@ -3409,7 +3274,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.4.8" + "source": "https://github.com/symfony/error-handler/tree/v8.0.8" }, "funding": [ { @@ -3429,28 +3294,28 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.4.9", + "version": "v8.0.9", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "e4a2e29753c7801f7a8340e066cfa788f3bc8101" + "reference": "0c3c1a17604c4dbbec4b93fe162c538482096e1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e4a2e29753c7801f7a8340e066cfa788f3bc8101", - "reference": "e4a2e29753c7801f7a8340e066cfa788f3bc8101", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0c3c1a17604c4dbbec4b93fe162c538482096e1f", + "reference": "0c3c1a17604c4dbbec4b93fe162c538482096e1f", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<6.4", + "symfony/security-http": "<7.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -3459,14 +3324,14 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/error-handler": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/framework-bundle": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", + "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/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0|^8.0" + "symfony/stopwatch": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3494,7 +3359,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/v7.4.9" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.9" }, "funding": [ { @@ -3514,7 +3379,7 @@ "type": "tidelift" } ], - "time": "2026-04-18T13:18:21+00:00" + "time": "2026-04-18T13:51:42+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -3598,25 +3463,25 @@ }, { "name": "symfony/filesystem", - "version": "v7.4.9", + "version": "v8.0.9", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "dcd8f96bcdc0f128ec406c765cc066c6035d1be3" + "reference": "d1ec4543d5c6c2dac78503c2fae5ea0b3608ce40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/dcd8f96bcdc0f128ec406c765cc066c6035d1be3", - "reference": "dcd8f96bcdc0f128ec406c765cc066c6035d1be3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d1ec4543d5c6c2dac78503c2fae5ea0b3608ce40", + "reference": "d1ec4543d5c6c2dac78503c2fae5ea0b3608ce40", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^6.4|^7.0|^8.0" + "symfony/process": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3644,7 +3509,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.9" + "source": "https://github.com/symfony/filesystem/tree/v8.0.9" }, "funding": [ { @@ -3664,27 +3529,27 @@ "type": "tidelift" } ], - "time": "2026-04-18T13:18:21+00:00" + "time": "2026-04-18T13:51:42+00:00" }, { "name": "symfony/finder", - "version": "v7.4.8", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "e0be088d22278583a82da281886e8c3592fbf149" + "reference": "8da41214757b87d97f181e3d14a4179286151007" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/e0be088d22278583a82da281886e8c3592fbf149", - "reference": "e0be088d22278583a82da281886e8c3592fbf149", + "url": "https://api.github.com/repos/symfony/finder/zipball/8da41214757b87d97f181e3d14a4179286151007", + "reference": "8da41214757b87d97f181e3d14a4179286151007", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0|^8.0" + "symfony/filesystem": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3712,7 +3577,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.4.8" + "source": "https://github.com/symfony/finder/tree/v8.0.8" }, "funding": [ { @@ -3732,60 +3597,62 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/form", - "version": "v6.4.36", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "3a38a81150400f0a486f8963e21a195311b30b27" + "reference": "b6c107af659106abec1771d9d7d22da528644d3a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/3a38a81150400f0a486f8963e21a195311b30b27", - "reference": "3a38a81150400f0a486f8963e21a195311b30b27", + "url": "https://api.github.com/repos/symfony/form/zipball/b6c107af659106abec1771d9d7d22da528644d3a", + "reference": "b6c107af659106abec1771d9d7d22da528644d3a", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/options-resolver": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/options-resolver": "^7.3|^8.0", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-icu": "^1.21", "symfony/polyfill-mbstring": "~1.0", - "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-access": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", - "symfony/doctrine-bridge": "<5.4.21|>=6,<6.2.7", - "symfony/error-handler": "<5.4", - "symfony/framework-bundle": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/error-handler": "<6.4", + "symfony/framework-bundle": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<7.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.3" + "symfony/twig-bridge": "<6.4" }, "require-dev": { "doctrine/collections": "^1.0|^2.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/html-sanitizer": "^6.1|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/security-core": "^6.2|^7.0", - "symfony/security-csrf": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3", - "symfony/uid": "^5.4|^6.0|^7.0", - "symfony/validator": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/html-sanitizer": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^7.4|^8.0", + "symfony/security-core": "^6.4|^7.0|^8.0", + "symfony/security-csrf": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4.3|^7.0.3|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4.12|^7.1.5|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -3813,7 +3680,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v6.4.36" + "source": "https://github.com/symfony/form/tree/v7.4.9" }, "funding": [ { @@ -3833,112 +3700,117 @@ "type": "tidelift" } ], - "time": "2026-03-13T14:59:02+00:00" + "time": "2026-04-29T14:39:19+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.4.37", + "version": "v7.4.10", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "b147918db04b0d823e551b01a7a4f342e415baa5" + "reference": "4b9cb207d72b2e4793f28a3c62ea0865098bea20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/b147918db04b0d823e551b01a7a4f342e415baa5", - "reference": "b147918db04b0d823e551b01a7a4f342e415baa5", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/4b9cb207d72b2e4793f28a3c62ea0865098bea20", + "reference": "4b9cb207d72b2e4793f28a3c62ea0865098bea20", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", "ext-xml": "*", - "php": ">=8.1", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/dependency-injection": "^6.4.12|^7.0", + "php": ">=8.2", + "symfony/cache": "^6.4.12|^7.0|^8.0", + "symfony/config": "^7.4.4|^8.0.4", + "symfony/dependency-injection": "^7.4.4|^8.0.4", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.1|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4", + "symfony/error-handler": "^7.3|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/filesystem": "^7.1|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", "symfony/polyfill-mbstring": "~1.0", - "symfony/routing": "^6.4|^7.0" + "symfony/polyfill-php85": "^1.32", + "symfony/routing": "^7.4|^8.0" }, "conflict": { - "doctrine/annotations": "<1.13.1", "doctrine/persistence": "<1.3", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/asset": "<5.4", + "phpdocumentor/reflection-docblock": "<5.2|>=7", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/asset": "<6.4", "symfony/asset-mapper": "<6.4", - "symfony/clock": "<6.3", - "symfony/console": "<5.4|>=7.0", + "symfony/clock": "<6.4", + "symfony/console": "<6.4", "symfony/dom-crawler": "<6.4", - "symfony/dotenv": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<6.3", - "symfony/lock": "<5.4", - "symfony/mailer": "<5.4", - "symfony/messenger": "<6.3", - "symfony/mime": "<6.4.37|>=7.0,<7.4.9", - "symfony/property-access": "<5.4", - "symfony/property-info": "<5.4", - "symfony/runtime": "<5.4.45|>=6.0,<6.4.13|>=7.0,<7.1.6", + "symfony/dotenv": "<6.4", + "symfony/form": "<7.4", + "symfony/http-client": "<6.4", + "symfony/lock": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<7.4", + "symfony/mime": "<6.4.37|>=7.0,<7.4.9|>=8.0,<8.0.9", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/runtime": "<6.4.13|>=7.0,<7.1.6", "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", - "symfony/security-core": "<5.4", - "symfony/security-csrf": "<5.4", - "symfony/serializer": "<6.4", - "symfony/stopwatch": "<5.4", - "symfony/translation": "<6.4", - "symfony/twig-bridge": "<5.4", - "symfony/twig-bundle": "<5.4", + "symfony/security-core": "<6.4", + "symfony/security-csrf": "<7.2", + "symfony/serializer": "<7.2.5", + "symfony/stopwatch": "<6.4", + "symfony/translation": "<7.3", + "symfony/twig-bridge": "<6.4", + "symfony/twig-bundle": "<6.4", "symfony/validator": "<6.4", "symfony/web-profiler-bundle": "<6.4", - "symfony/workflow": "<6.4" + "symfony/webhook": "<7.2", + "symfony/workflow": "<7.4" }, "require-dev": { - "doctrine/annotations": "^1.13.1|^2", "doctrine/persistence": "^1.3|^2|^3", "dragonmantank/cron-expression": "^3.1", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "phpdocumentor/reflection-docblock": "^5.2|^6.0", "seld/jsonlint": "^1.10", - "symfony/asset": "^5.4|^6.0|^7.0", - "symfony/asset-mapper": "^6.4|^7.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.2|^7.0", - "symfony/console": "^5.4.9|^6.0.9|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/dom-crawler": "^6.4|^7.0", - "symfony/dotenv": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4|^6.0|^7.0", - "symfony/html-sanitizer": "^6.1|^7.0", - "symfony/http-client": "^6.3|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/mailer": "^5.4|^6.0|^7.0", - "symfony/messenger": "^6.3|^7.0", - "symfony/mime": "^6.4.37|^7.4.9", - "symfony/notifier": "^5.4|^6.0|^7.0", + "symfony/asset": "^6.4|^7.0|^8.0", + "symfony/asset-mapper": "^6.4|^7.0|^8.0", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/dotenv": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/form": "^7.4|^8.0", + "symfony/html-sanitizer": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/json-streamer": "^7.3|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/mailer": "^6.4|^7.0|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^6.4.37|^7.4.9|^8.0.9", + "symfony/notifier": "^6.4|^7.0|^8.0", + "symfony/object-mapper": "^7.3|^8.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0", - "symfony/scheduler": "^6.4.4|^7.0.4", - "symfony/security-bundle": "^5.4|^6.0|^7.0", - "symfony/semaphore": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/string": "^5.4|^6.0|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/twig-bundle": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/web-link": "^5.4|^6.0|^7.0", - "symfony/workflow": "^6.4|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0", - "twig/twig": "^2.10|^3.0.4" + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0", + "symfony/runtime": "^6.4.13|^7.1.6|^8.0", + "symfony/scheduler": "^6.4.4|^7.0.4|^8.0", + "symfony/security-bundle": "^6.4|^7.0|^8.0", + "symfony/semaphore": "^6.4|^7.0|^8.0", + "symfony/serializer": "^7.2.5|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/translation": "^7.3|^8.0", + "symfony/twig-bundle": "^6.4|^7.0|^8.0", + "symfony/type-info": "^7.1.8|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/web-link": "^6.4|^7.0|^8.0", + "symfony/webhook": "^7.2|^8.0", + "symfony/workflow": "^7.4|^8.0", + "symfony/yaml": "^7.3|^8.0", + "twig/twig": "^3.12" }, "type": "symfony-bundle", "autoload": { @@ -3966,7 +3838,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.4.37" + "source": "https://github.com/symfony/framework-bundle/tree/v7.4.10" }, "funding": [ { @@ -3986,41 +3858,39 @@ "type": "tidelift" } ], - "time": "2026-04-29T17:11:44+00:00" + "time": "2026-05-05T11:48:54+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.4.8", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "9381209597ec66c25be154cbf2289076e64d1eab" + "reference": "02656f7ebeae5c155d659e946f6b3a33df24051b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9381209597ec66c25be154cbf2289076e64d1eab", - "reference": "9381209597ec66c25be154cbf2289076e64d1eab", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/02656f7ebeae5c155d659e946f6b3a33df24051b", + "reference": "02656f7ebeae5c155d659e946f6b3a33df24051b", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.4", "symfony/polyfill-mbstring": "^1.1" }, "conflict": { - "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + "doctrine/dbal": "<4.3" }, "require-dev": { - "doctrine/dbal": "^3.6|^4", + "doctrine/dbal": "^4.3", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4.12|^7.1.5|^8.0", - "symfony/clock": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/mime": "^6.4|^7.0|^8.0", - "symfony/rate-limiter": "^6.4|^7.0|^8.0" + "symfony/cache": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -4048,7 +3918,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.4.8" + "source": "https://github.com/symfony/http-foundation/tree/v8.0.8" }, "funding": [ { @@ -4068,77 +3938,78 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.38", + "version": "v7.4.10", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "769c1ee766d6c327176f4e3bdaad58f521193abd" + "reference": "23486f59234c6fd6e8f1bec97124f3829d686627" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/769c1ee766d6c327176f4e3bdaad58f521193abd", - "reference": "769c1ee766d6c327176f4e3bdaad58f521193abd", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/23486f59234c6fd6e8f1bec97124f3829d686627", + "reference": "23486f59234c6fd6e8f1bec97124f3829d686627", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^7.3|^8.0", + "symfony/http-foundation": "^7.4|^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<6.1", - "symfony/console": "<5.4", + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/flex": "<2.10", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<5.4", + "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.3", - "twig/twig": "<2.13" + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.2|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^6.4.1|^7.0.1", - "symfony/dom-crawler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4.1|^7.0.1|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4.5|^6.0.5|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4.4|^7.0.4", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^7.1|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/serializer": "^7.1|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.4|^7.0", - "symfony/var-exporter": "^6.2|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" }, "type": "library", "autoload": { @@ -4166,7 +4037,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.38" + "source": "https://github.com/symfony/http-kernel/tree/v7.4.10" }, "funding": [ { @@ -4186,7 +4057,7 @@ "type": "tidelift" } ], - "time": "2026-05-06T13:04:40+00:00" + "time": "2026-05-06T12:07:34+00:00" }, { "name": "symfony/monolog-bridge", @@ -4353,20 +4224,20 @@ }, { "name": "symfony/options-resolver", - "version": "v7.4.8", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4" + "reference": "b48bce0a70b914f6953dafbd10474df232ed4de8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", - "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b48bce0a70b914f6953dafbd10474df232ed4de8", + "reference": "b48bce0a70b914f6953dafbd10474df232ed4de8", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -4400,7 +4271,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.4.8" + "source": "https://github.com/symfony/options-resolver/tree/v8.0.8" }, "funding": [ { @@ -4420,7 +4291,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/polyfill-ctype", @@ -4845,71 +4716,6 @@ ], "time": "2026-04-10T17:25:58+00:00" }, - { - "name": "symfony/polyfill-php72", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "metapackage", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, { "name": "symfony/polyfill-php73", "version": "v1.37.0", @@ -5461,25 +5267,25 @@ }, { "name": "symfony/property-access", - "version": "v7.4.8", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc" + "reference": "704c7808116fcdd67327db7b17de56b8ef6169e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc", - "reference": "b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc", + "url": "https://api.github.com/repos/symfony/property-access/zipball/704c7808116fcdd67327db7b17de56b8ef6169e4", + "reference": "704c7808116fcdd67327db7b17de56b8ef6169e4", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/property-info": "^6.4.32|~7.3.10|^7.4.4|^8.0.4" + "php": ">=8.4", + "symfony/property-info": "^7.4.4|^8.0.4" }, "require-dev": { - "symfony/cache": "^6.4|^7.0|^8.0", - "symfony/var-exporter": "^6.4.1|^7.0.1|^8.0" + "symfony/cache": "^7.4|^8.0", + "symfony/var-exporter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -5518,7 +5324,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.4.8" + "source": "https://github.com/symfony/property-access/tree/v8.0.8" }, "funding": [ { @@ -5538,7 +5344,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/property-info", @@ -5628,34 +5434,29 @@ }, { "name": "symfony/routing", - "version": "v7.4.9", + "version": "v8.0.9", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "287771d8bc86eacb30678dd10eda6c64a859951f" + "reference": "75d1bd8e5da3424e4db2fc3ff0222cb4d0c73038" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/287771d8bc86eacb30678dd10eda6c64a859951f", - "reference": "287771d8bc86eacb30678dd10eda6c64a859951f", + "url": "https://api.github.com/repos/symfony/routing/zipball/75d1bd8e5da3424e4db2fc3ff0222cb4d0c73038", + "reference": "75d1bd8e5da3424e4db2fc3ff0222cb4d0c73038", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/deprecation-contracts": "^2.5|^3" }, - "conflict": { - "symfony/config": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/yaml": "<6.4" - }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/yaml": "^6.4|^7.0|^8.0" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -5689,7 +5490,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.4.9" + "source": "https://github.com/symfony/routing/tree/v8.0.9" }, "funding": [ { @@ -5709,7 +5510,7 @@ "type": "tidelift" } ], - "time": "2026-04-22T15:21:55+00:00" + "time": "2026-04-29T15:02:55+00:00" }, { "name": "symfony/service-contracts", @@ -5866,35 +5667,34 @@ }, { "name": "symfony/string", - "version": "v7.4.8", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "114ac57257d75df748eda23dd003878080b8e688" + "reference": "ae9488f874d7603f9d2dfbf120203882b645d963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/114ac57257d75df748eda23dd003878080b8e688", - "reference": "114ac57257d75df748eda23dd003878080b8e688", + "url": "https://api.github.com/repos/symfony/string/zipball/ae9488f874d7603f9d2dfbf120203882b645d963", + "reference": "ae9488f874d7603f9d2dfbf120203882b645d963", "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-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-intl-grapheme": "^1.33", + "symfony/polyfill-intl-normalizer": "^1.0", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "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.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0|^8.0" + "symfony/var-exporter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -5933,7 +5733,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.4.8" + "source": "https://github.com/symfony/string/tree/v8.0.8" }, "funding": [ { @@ -5953,55 +5753,56 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/translation", - "version": "v6.4.38", + "version": "v7.4.10", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "afaa31b0c12d9a659eed1ea97f268a614cc1299c" + "reference": "ada7578c30dd5feaa8259cff3e885069ea81ddde" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/afaa31b0c12d9a659eed1ea97f268a614cc1299c", - "reference": "afaa31b0c12d9a659eed1ea97f268a614cc1299c", + "url": "https://api.github.com/repos/symfony/translation/zipball/ada7578c30dd5feaa8259cff3e885069ea81ddde", + "reference": "ada7578c30dd5feaa8259cff3e885069ea81ddde", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" + "symfony/translation-contracts": "^2.5.3|^3.3" }, "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", + "nikic/php-parser": "<5.0", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", + "symfony/http-kernel": "<6.4", "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.18|^5.0", + "nikic/php-parser": "^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/routing": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -6032,7 +5833,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.38" + "source": "https://github.com/symfony/translation/tree/v7.4.10" }, "funding": [ { @@ -6052,7 +5853,7 @@ "type": "tidelift" } ], - "time": "2026-05-06T08:55:54+00:00" + "time": "2026-05-06T11:19:24+00:00" }, { "name": "symfony/translation-contracts", @@ -6138,68 +5939,63 @@ }, { "name": "symfony/twig-bridge", - "version": "v6.4.36", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "3ae963a108fd6fc14d09a7fe5e41fe64d8ac11ba" + "reference": "a892d0b7f3d5d51b35895467e48aafbd1f2612a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/3ae963a108fd6fc14d09a7fe5e41fe64d8ac11ba", - "reference": "3ae963a108fd6fc14d09a7fe5e41fe64d8ac11ba", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/a892d0b7f3d5d51b35895467e48aafbd1f2612a0", + "reference": "a892d0b7f3d5d51b35895467e48aafbd1f2612a0", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.4", "symfony/translation-contracts": "^2.5|^3", - "twig/twig": "^2.13|^3.0.4" + "twig/twig": "^3.21" }, "conflict": { - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/console": "<5.4", - "symfony/form": "<6.4.32|>7,<7.3.10|>7.4,<7.4.4", - "symfony/http-foundation": "<5.4", - "symfony/http-kernel": "<6.4", - "symfony/mime": "<6.2", - "symfony/serializer": "<6.4", - "symfony/translation": "<5.4", - "symfony/workflow": "<5.4" + "phpdocumentor/reflection-docblock": "<5.2|>=7", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/form": "<7.4.4|>8.0,<8.0.4", + "symfony/mime": "<7.4.8|>8.0,<8.0.8" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3|^4", "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/asset": "^5.4|^6.0|^7.0", - "symfony/asset-mapper": "^6.3|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/form": "^6.4.32|~7.3.10|^7.4.4", - "symfony/html-sanitizer": "^6.1|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/mime": "^6.2|^7.0", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", + "phpdocumentor/reflection-docblock": "^5.2|^6.0", + "symfony/asset": "^7.4|^8.0", + "symfony/asset-mapper": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/emoji": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", + "symfony/form": "^7.4.4|^8.0.4", + "symfony/html-sanitizer": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", + "symfony/mime": "^7.4.8|^8.0.8", + "symfony/polyfill-intl-icu": "^1.0", + "symfony/property-info": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", "symfony/security-acl": "^2.8|^3.0", - "symfony/security-core": "^5.4|^6.0|^7.0", - "symfony/security-csrf": "^5.4|^6.0|^7.0", - "symfony/security-http": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^6.1|^7.0", - "symfony/web-link": "^5.4|^6.0|^7.0", - "symfony/workflow": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0", - "twig/cssinliner-extra": "^2.12|^3", - "twig/inky-extra": "^2.12|^3", - "twig/markdown-extra": "^2.12|^3" + "symfony/security-core": "^7.4|^8.0", + "symfony/security-csrf": "^7.4|^8.0", + "symfony/security-http": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/web-link": "^7.4|^8.0", + "symfony/workflow": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0", + "twig/cssinliner-extra": "^3", + "twig/inky-extra": "^3", + "twig/markdown-extra": "^3" }, "type": "symfony-bridge", "autoload": { @@ -6227,7 +6023,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.4.36" + "source": "https://github.com/symfony/twig-bridge/tree/v8.0.8" }, "funding": [ { @@ -6247,47 +6043,49 @@ "type": "tidelift" } ], - "time": "2026-03-30T09:31:23+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/twig-bundle", - "version": "v6.4.32", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "a5c8dcc11a5bf9c96320da20070d2e158a4e0b30" + "reference": "ba1e06d7ff1ebb1d1799b6608d925f4eaba88d95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/a5c8dcc11a5bf9c96320da20070d2e158a4e0b30", - "reference": "a5c8dcc11a5bf9c96320da20070d2e158a4e0b30", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/ba1e06d7ff1ebb1d1799b6608d925f4eaba88d95", + "reference": "ba1e06d7ff1ebb1d1799b6608d925f4eaba88d95", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", - "php": ">=8.1", - "symfony/config": "^6.1|^7.0", - "symfony/dependency-injection": "^6.1|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^6.2", - "symfony/twig-bridge": "^6.4", - "twig/twig": "^2.13|^3.0.4" + "php": ">=8.2", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", + "symfony/twig-bridge": "^7.3|^8.0", + "twig/twig": "^3.12" }, "conflict": { - "symfony/framework-bundle": "<5.4", - "symfony/translation": "<5.4" + "symfony/framework-bundle": "<6.4", + "symfony/translation": "<6.4" }, "require-dev": { - "symfony/asset": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4|^6.0|^7.0", - "symfony/framework-bundle": "^5.4|^6.0|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", - "symfony/web-link": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/asset": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/form": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/runtime": "^6.4.13|^7.1.6", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/web-link": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "symfony-bundle", "autoload": { @@ -6315,7 +6113,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v6.4.32" + "source": "https://github.com/symfony/twig-bundle/tree/v7.4.8" }, "funding": [ { @@ -6335,7 +6133,7 @@ "type": "tidelift" } ], - "time": "2026-01-05T12:44:39+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/type-info", @@ -6421,20 +6219,20 @@ }, { "name": "symfony/validator", - "version": "v6.4.37", + "version": "v7.4.10", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "72cfcf7925746d9950bbdab1362f6bda3b4046cf" + "reference": "c76458623af9a3fe3b2e5b09b36453f334c2a361" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/72cfcf7925746d9950bbdab1362f6bda3b4046cf", - "reference": "72cfcf7925746d9950bbdab1362f6bda3b4046cf", + "url": "https://api.github.com/repos/symfony/validator/zipball/c76458623af9a3fe3b2e5b09b36453f334c2a361", + "reference": "c76458623af9a3fe3b2e5b09b36453f334c2a361", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", @@ -6442,34 +6240,37 @@ "symfony/translation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.13", "doctrine/lexer": "<1.1", - "symfony/dependency-injection": "<5.4", - "symfony/expression-language": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/intl": "<5.4", - "symfony/property-info": "<5.4", - "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3", - "symfony/yaml": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<7.0", + "symfony/expression-language": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<6.4", + "symfony/property-info": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/var-exporter": "<6.4.25|>=7.0,<7.3.3", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.13|^2", "egulias/email-validator": "^2.1.10|^3|^4", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4.3|^7.0.3|^8.0", + "symfony/type-info": "^7.1.8", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -6498,7 +6299,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.37" + "source": "https://github.com/symfony/validator/tree/v7.4.10" }, "funding": [ { @@ -6518,35 +6319,35 @@ "type": "tidelift" } ], - "time": "2026-04-29T06:33:37+00:00" + "time": "2026-05-05T15:30:56+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.4.8", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd" + "reference": "cfb7badd53bf4177f6e9416cfbbccc13c0e773a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9510c3966f749a1d1ff0059e1eabef6cc621e7fd", - "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cfb7badd53bf4177f6e9416cfbbccc13c0e773a1", + "reference": "cfb7badd53bf4177f6e9416cfbbccc13c0e773a1", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { - "symfony/console": "<6.4" + "symfony/console": "<7.4", + "symfony/error-handler": "<7.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", "twig/twig": "^3.12" }, "bin": [ @@ -6585,7 +6386,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.4.8" + "source": "https://github.com/symfony/var-dumper/tree/v8.0.8" }, "funding": [ { @@ -6605,7 +6406,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T13:44:50+00:00" + "time": "2026-03-31T07:15:36+00:00" }, { "name": "symfony/var-exporter", @@ -6689,28 +6490,28 @@ }, { "name": "symfony/yaml", - "version": "v6.4.38", + "version": "v7.4.10", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "f8d2f4af29053842c01b4cae6bd4c2c3191fc63c" + "reference": "c660d6538545a3e8e65a5621ee3d7a6d352892c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/f8d2f4af29053842c01b4cae6bd4c2c3191fc63c", - "reference": "f8d2f4af29053842c01b4cae6bd4c2c3191fc63c", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c660d6538545a3e8e65a5621ee3d7a6d352892c7", + "reference": "c660d6538545a3e8e65a5621ee3d7a6d352892c7", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0|^8.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -6741,7 +6542,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.38" + "source": "https://github.com/symfony/yaml/tree/v7.4.10" }, "funding": [ { @@ -6761,7 +6562,7 @@ "type": "tidelift" } ], - "time": "2026-05-05T06:55:40+00:00" + "time": "2026-05-05T08:01:55+00:00" }, { "name": "twig/twig", @@ -8638,38 +8439,42 @@ }, { "name": "symfony/web-profiler-bundle", - "version": "v6.4.36", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "6f75b4c748886c8e04a3674225d00eaa51f3842d" + "reference": "36dd8b8c05da059925c5804641aad9159e5b73e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/6f75b4c748886c8e04a3674225d00eaa51f3842d", - "reference": "6f75b4c748886c8e04a3674225d00eaa51f3842d", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/36dd8b8c05da059925c5804641aad9159e5b73e8", + "reference": "36dd8b8c05da059925c5804641aad9159e5b73e8", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/twig-bundle": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" + "composer-runtime-api": ">=2.1", + "php": ">=8.2", + "symfony/config": "^7.3|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", + "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/twig-bundle": "^6.4|^7.0|^8.0", + "twig/twig": "^3.15" }, "conflict": { - "symfony/form": "<5.4", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/twig-bundle": ">=7.0" + "symfony/form": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/serializer": "<7.2", + "symfony/workflow": "<7.3" }, "require-dev": { - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/runtime": "^6.4.13|^7.1.6|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, "type": "symfony-bundle", "autoload": { @@ -8700,7 +8505,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.36" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.4.9" }, "funding": [ { @@ -8720,7 +8525,7 @@ "type": "tidelift" } ], - "time": "2026-03-17T09:05:06+00:00" + "time": "2026-04-22T15:21:55+00:00" }, { "name": "theseer/tokenizer", @@ -8775,12 +8580,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^8.1" + "php": "^8.2" }, - "platform-dev": [], - "plugin-api-version": "2.6.0" + "platform-dev": {}, + "plugin-api-version": "2.9.0" } diff --git a/src/AppBundle/Command/ImportProjectCommand.php b/src/AppBundle/Command/ImportProjectCommand.php index 65ddd04..2f17b4a 100644 --- a/src/AppBundle/Command/ImportProjectCommand.php +++ b/src/AppBundle/Command/ImportProjectCommand.php @@ -28,7 +28,7 @@ protected function configure() ->addArgument('vcsUrl', InputArgument::REQUIRED, 'http Url of the vcs repository'); } - protected function execute(InputInterface $input, OutputInterface $output) + protected function execute(InputInterface $input, OutputInterface $output): int { $vcsUrl = $input->getArgument('vcsUrl'); $importSucess = $this->importProjectTask->run($vcsUrl); @@ -38,5 +38,7 @@ protected function execute(InputInterface $input, OutputInterface $output) } else { $output->writeln('Import failed for '.$vcsUrl.'. Make sure you have sufficient repository access and that it contains a composer.lock file. See logs for details.'); } + + return Command::SUCCESS; } } diff --git a/src/config.default.yml b/src/config.default.yml index 95c0c3d..3acbe42 100644 --- a/src/config.default.yml +++ b/src/config.default.yml @@ -34,7 +34,7 @@ framework: enabled: true csrf_protection: enabled: false - validation: { enable_annotations: true } + validation: { enable_attributes: true } translator: { fallback: de_DE } session: save_path: null @@ -55,9 +55,10 @@ doctrine: password: "%mysql.password%" charset: utf8 schema_filter: ~^(?!(_dbversion$|_fixed_tableid$|wfd_))~ - server_version: 5.7 + server_version: '5.7' orm: auto_mapping: true + enable_native_lazy_objects: true services: app.logging.web_processor: From 9037f8a164c7585f59a81df449e68e66077f3fae Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 19:39:37 +0200 Subject: [PATCH 08/51] Migrate AppBundle-Namespace to App MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - src/AppBundle/ → src/App/ - Namespace AppBundle\ → App\ - services config - routing.yml: type annotation → attribute (Symfony 7) - phpunit.xml.dist: src/App/Tests --- config/bundles.php | 2 +- phpunit.xml.dist | 2 +- src/{AppBundle => App}/AppBundle.php | 4 +-- .../Command/ImportProjectCommand.php | 4 +-- .../Command/ReimportAllProjectsCommand.php | 6 ++-- .../ImportRepositoriesController.php | 4 +-- .../Controller/MainController.php | 4 +-- .../Controller/PackageController.php | 4 +-- .../Controller/ProjectController.php | 4 +-- .../Controller/SettingsController.php | 6 ++-- .../Controller/UsageSearchController.php | 6 ++-- .../Controller/WebhookController.php | 4 +-- .../DataFixtures/AppFixtures.php | 6 ++-- .../DependencyInjection/AppExtension.php | 2 +- src/{AppBundle => App}/Entity/Package.php | 4 +-- .../Entity/PackageVersion.php | 2 +- src/{AppBundle => App}/Entity/Project.php | 4 +-- .../Entity/Repository/PackageRepository.php | 4 +-- .../Entity/Repository/ProjectRepository.php | 4 +-- .../Entity/VersionConstraint.php | 2 +- .../InsufficientVcsAccessException.php | 2 +- .../Exception/NoVcsDriverFoundException.php | 2 +- ...HasNoComposerPackageUsageInfoException.php | 2 +- .../Factory/VcsDriverFactory.php | 6 ++-- .../Form/Type/DatalistType.php | 2 +- .../Form/Type/SearchPackageType.php | 4 +-- .../Form/Type/VersionConstraintType.php | 4 +-- .../ProjectImport/ComposerPackageFetcher.php | 4 +-- .../ProjectImport/DoctrinePackageProvider.php | 6 ++-- .../ProjectImport/DoctrineProjectProvider.php | 6 ++-- .../ProjectImport/ImportProjectTask.php | 8 ++--- .../ProjectImport/LockFileFetcher.php | 4 +-- .../ProjectImport/LockFileParser.php | 4 +-- .../PackageProviderInterface.php | 4 +-- .../ProjectImport/PackageVersionFetcher.php | 4 +-- .../ProjectProviderInterface.php | 4 +-- .../Resources/config/services.yml | 32 +++++++++---------- .../searchProjectsWithPackageVersionForm.js | 0 .../Resources/views/Base/base.html.twig | 0 .../Resources/views/Form/fields.html.twig | 0 .../import_repositories/import_form.html.twig | 0 .../Resources/views/main/main.html.twig | 0 .../Resources/views/package/detail.html.twig | 0 .../Resources/views/package/detail.json.twig | 0 .../views/package/versions.json.twig | 0 .../Resources/views/project/detail.html.twig | 0 .../views/settings/settings.html.twig | 0 .../usage_search/search_results.html.twig | 0 .../usage_search/search_results.json.twig | 0 .../Tests/Entity/PackageTest.php | 4 +-- .../Tests/Entity/PackageVersionTest.php | 8 ++--- .../Tests/Entity/ProjectTest.php | 8 ++--- .../Tests/Entity/VersionConstraintTest.php | 8 ++--- .../Tests/Factory/VcsDriverFactoryTest.php | 4 +-- .../ComposerPackageFetcherTest.php | 8 ++--- .../DoctrinePackageProviderTest.php | 8 ++--- .../DoctrineProjectProviderTest.php | 8 ++--- .../ProjectImport/ImportProjectTaskTest.php | 10 +++--- .../ProjectImport/LockFileFetcherTest.php | 6 ++-- .../ProjectImport/LockFileParserTest.php | 6 ++-- .../PackageVersionFetcherTest.php | 10 +++--- .../Tests/ProjectImport/composer_test.lock | 0 62 files changed, 132 insertions(+), 132 deletions(-) rename src/{AppBundle => App}/AppBundle.php (79%) rename src/{AppBundle => App}/Command/ImportProjectCommand.php (94%) rename src/{AppBundle => App}/Command/ReimportAllProjectsCommand.php (91%) rename src/{AppBundle => App}/Controller/ImportRepositoriesController.php (96%) rename src/{AppBundle => App}/Controller/MainController.php (96%) rename src/{AppBundle => App}/Controller/PackageController.php (96%) rename src/{AppBundle => App}/Controller/ProjectController.php (90%) rename src/{AppBundle => App}/Controller/SettingsController.php (85%) rename src/{AppBundle => App}/Controller/UsageSearchController.php (95%) rename src/{AppBundle => App}/Controller/WebhookController.php (95%) rename src/{AppBundle => App}/DataFixtures/AppFixtures.php (91%) rename src/{AppBundle => App}/DependencyInjection/AppExtension.php (92%) rename src/{AppBundle => App}/Entity/Package.php (97%) rename src/{AppBundle => App}/Entity/PackageVersion.php (99%) rename src/{AppBundle => App}/Entity/Project.php (98%) rename src/{AppBundle => App}/Entity/Repository/PackageRepository.php (74%) rename src/{AppBundle => App}/Entity/Repository/ProjectRepository.php (74%) rename src/{AppBundle => App}/Entity/VersionConstraint.php (98%) rename src/{AppBundle => App}/Exception/InsufficientVcsAccessException.php (75%) rename src/{AppBundle => App}/Exception/NoVcsDriverFoundException.php (80%) rename src/{AppBundle => App}/Exception/ProjectHasNoComposerPackageUsageInfoException.php (78%) rename src/{AppBundle => App}/Factory/VcsDriverFactory.php (94%) rename src/{AppBundle => App}/Form/Type/DatalistType.php (95%) rename src/{AppBundle => App}/Form/Type/SearchPackageType.php (95%) rename src/{AppBundle => App}/Form/Type/VersionConstraintType.php (97%) rename src/{AppBundle => App}/ProjectImport/ComposerPackageFetcher.php (86%) rename src/{AppBundle => App}/ProjectImport/DoctrinePackageProvider.php (84%) rename src/{AppBundle => App}/ProjectImport/DoctrineProjectProvider.php (84%) rename src/{AppBundle => App}/ProjectImport/ImportProjectTask.php (93%) rename src/{AppBundle => App}/ProjectImport/LockFileFetcher.php (90%) rename src/{AppBundle => App}/ProjectImport/LockFileParser.php (90%) rename src/{AppBundle => App}/ProjectImport/PackageProviderInterface.php (71%) rename src/{AppBundle => App}/ProjectImport/PackageVersionFetcher.php (93%) rename src/{AppBundle => App}/ProjectImport/ProjectProviderInterface.php (71%) rename src/{AppBundle => App}/Resources/config/services.yml (53%) rename src/{AppBundle => App}/Resources/public/js/searchProjectsWithPackageVersionForm.js (100%) rename src/{AppBundle => App}/Resources/views/Base/base.html.twig (100%) rename src/{AppBundle => App}/Resources/views/Form/fields.html.twig (100%) rename src/{AppBundle => App}/Resources/views/import_repositories/import_form.html.twig (100%) rename src/{AppBundle => App}/Resources/views/main/main.html.twig (100%) rename src/{AppBundle => App}/Resources/views/package/detail.html.twig (100%) rename src/{AppBundle => App}/Resources/views/package/detail.json.twig (100%) rename src/{AppBundle => App}/Resources/views/package/versions.json.twig (100%) rename src/{AppBundle => App}/Resources/views/project/detail.html.twig (100%) rename src/{AppBundle => App}/Resources/views/settings/settings.html.twig (100%) rename src/{AppBundle => App}/Resources/views/usage_search/search_results.html.twig (100%) rename src/{AppBundle => App}/Resources/views/usage_search/search_results.json.twig (100%) rename src/{AppBundle => App}/Tests/Entity/PackageTest.php (95%) rename src/{AppBundle => App}/Tests/Entity/PackageVersionTest.php (90%) rename src/{AppBundle => App}/Tests/Entity/ProjectTest.php (90%) rename src/{AppBundle => App}/Tests/Entity/VersionConstraintTest.php (94%) rename src/{AppBundle => App}/Tests/Factory/VcsDriverFactoryTest.php (88%) rename src/{AppBundle => App}/Tests/ProjectImport/ComposerPackageFetcherTest.php (87%) rename src/{AppBundle => App}/Tests/ProjectImport/DoctrinePackageProviderTest.php (89%) rename src/{AppBundle => App}/Tests/ProjectImport/DoctrineProjectProviderTest.php (91%) rename src/{AppBundle => App}/Tests/ProjectImport/ImportProjectTaskTest.php (85%) rename src/{AppBundle => App}/Tests/ProjectImport/LockFileFetcherTest.php (92%) rename src/{AppBundle => App}/Tests/ProjectImport/LockFileParserTest.php (89%) rename src/{AppBundle => App}/Tests/ProjectImport/PackageVersionFetcherTest.php (88%) rename src/{AppBundle => App}/Tests/ProjectImport/composer_test.lock (100%) diff --git a/config/bundles.php b/config/bundles.php index 5535c1f..6cb75e2 100755 --- a/config/bundles.php +++ b/config/bundles.php @@ -6,7 +6,7 @@ Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['development' => true, 'test' => true], - AppBundle\AppBundle::class => ['all' => true], + App\AppBundle::class => ['all' => true], Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['development' => true, 'test' => true], ]; diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 5e62af0..d02398c 100755 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -6,7 +6,7 @@ - src/AppBundle/Tests + src/App/Tests diff --git a/src/AppBundle/AppBundle.php b/src/App/AppBundle.php similarity index 79% rename from src/AppBundle/AppBundle.php rename to src/App/AppBundle.php index 05123b6..88d8267 100755 --- a/src/AppBundle/AppBundle.php +++ b/src/App/AppBundle.php @@ -1,9 +1,9 @@ Date: Wed, 13 May 2026 19:53:07 +0200 Subject: [PATCH 09/51] Autowire more --- .../ImportRepositoriesController.php | 4 +- src/App/Controller/WebhookController.php | 4 +- .../Entity/Repository/PackageRepository.php | 12 ++++-- .../Entity/Repository/ProjectRepository.php | 12 ++++-- src/App/Factory/VcsDriverFactory.php | 11 ++--- .../ProjectImport/DoctrineProjectProvider.php | 2 + src/App/Resources/config/services.yml | 43 +------------------ 7 files changed, 34 insertions(+), 54 deletions(-) diff --git a/src/App/Controller/ImportRepositoriesController.php b/src/App/Controller/ImportRepositoriesController.php index f9c5493..04ac5f0 100644 --- a/src/App/Controller/ImportRepositoriesController.php +++ b/src/App/Controller/ImportRepositoriesController.php @@ -7,6 +7,7 @@ use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Validator\Constraints\NotBlank; use Twig\Environment; @@ -19,7 +20,8 @@ public function __construct( private FormFactoryInterface $formFactory, private ImportProjectTask $importProjectTask, private Environment $twig, - $demoMode = null, + #[Autowire(param: 'demo_mode')] + mixed $demoMode = null, ) { $this->demoMode = (bool) $demoMode; } diff --git a/src/App/Controller/WebhookController.php b/src/App/Controller/WebhookController.php index ee72cbe..e14c606 100644 --- a/src/App/Controller/WebhookController.php +++ b/src/App/Controller/WebhookController.php @@ -3,15 +3,17 @@ namespace App\Controller; use App\ProjectImport\ImportProjectTask; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; +use Symfony\Component\Routing\Attribute\Route; class WebhookController { public function __construct( private ImportProjectTask $importProjectTask, + #[Autowire(param: 'app.github.webhook_secret')] private ?string $webhookSecret = null, ) { } diff --git a/src/App/Entity/Repository/PackageRepository.php b/src/App/Entity/Repository/PackageRepository.php index de1117a..d274c0b 100644 --- a/src/App/Entity/Repository/PackageRepository.php +++ b/src/App/Entity/Repository/PackageRepository.php @@ -3,11 +3,17 @@ namespace App\Entity\Repository; use App\Entity\Package; -use Doctrine\ORM\EntityRepository; +use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\Persistence\ManagerRegistry; -class PackageRepository extends EntityRepository +class PackageRepository extends ServiceEntityRepository { - public function add(Package $package) + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Package::class); + } + + public function add(Package $package): void { $this->getEntityManager()->persist($package); } diff --git a/src/App/Entity/Repository/ProjectRepository.php b/src/App/Entity/Repository/ProjectRepository.php index c514002..b368147 100644 --- a/src/App/Entity/Repository/ProjectRepository.php +++ b/src/App/Entity/Repository/ProjectRepository.php @@ -3,11 +3,17 @@ namespace App\Entity\Repository; use App\Entity\Project; -use Doctrine\ORM\EntityRepository; +use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\Persistence\ManagerRegistry; -class ProjectRepository extends EntityRepository +class ProjectRepository extends ServiceEntityRepository { - public function add(Project $project) + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Project::class); + } + + public function add(Project $project): void { $this->getEntityManager()->persist($project); } diff --git a/src/App/Factory/VcsDriverFactory.php b/src/App/Factory/VcsDriverFactory.php index 3998204..5614d75 100644 --- a/src/App/Factory/VcsDriverFactory.php +++ b/src/App/Factory/VcsDriverFactory.php @@ -10,18 +10,19 @@ use Composer\Util\HttpDownloader; use Composer\Util\ProcessExecutor; use RuntimeException; +use Symfony\Component\DependencyInjection\Attribute\Autowire; class VcsDriverFactory { - /** @var string */ - private $githubOAuthToken; - /** @var array ['platform' => VcsDriverInterface class ] */ private $drivers; - public function __construct($githubOAuthToken, ?array $drivers = null) + public function __construct( + #[Autowire(param: 'app.github.token')] + private ?string $githubOAuthToken = null, + ?array $drivers = null, + ) { - $this->githubOAuthToken = $githubOAuthToken; $this->drivers = $drivers ?: [ 'github' => 'Composer\Repository\Vcs\GitHubDriver', 'gitlab' => 'Composer\Repository\Vcs\GitLabDriver', diff --git a/src/App/ProjectImport/DoctrineProjectProvider.php b/src/App/ProjectImport/DoctrineProjectProvider.php index 9fae379..ff735aa 100644 --- a/src/App/ProjectImport/DoctrineProjectProvider.php +++ b/src/App/ProjectImport/DoctrineProjectProvider.php @@ -4,10 +4,12 @@ use App\Entity\Project; use App\Entity\Repository\ProjectRepository; +use Symfony\Component\DependencyInjection\Attribute\AsAlias; /** * Tries to fetch existing Project entity or creates a new one. */ +#[AsAlias(ProjectProviderInterface::class)] class DoctrineProjectProvider implements ProjectProviderInterface { /** @var ProjectRepository */ diff --git a/src/App/Resources/config/services.yml b/src/App/Resources/config/services.yml index 85118d9..9c271a0 100644 --- a/src/App/Resources/config/services.yml +++ b/src/App/Resources/config/services.yml @@ -8,44 +8,5 @@ services: exclude: - '../../Tests/' - '../../DependencyInjection/' - - '../../Entity/' - - '../../Kernel.php' - - App\Controller\: - resource: '../../Controller/' - tags: [ 'controller.service_arguments' ] - - App\Controller\ImportRepositoriesController: - arguments: - $demoMode: "%demo_mode%" - tags: [ 'controller.service_arguments' ] - - App\Controller\WebhookController: - arguments: - $webhookSecret: "%app.github.webhook_secret%" - tags: [ 'controller.service_arguments' ] - - App\Entity\Repository\ProjectRepository: - class: App\Entity\Repository\ProjectRepository - factory: ["@doctrine.orm.entity_manager", getRepository] - arguments: ['App\Entity\Project'] - - App\Entity\Repository\PackageRepository: - class: App\Entity\Repository\PackageRepository - factory: ["@doctrine.orm.entity_manager", getRepository] - arguments: ['App\Entity\Package'] - - App\DataFixtures\AppFixtures: - tags: ['doctrine.fixture.orm'] - - App\ProjectImport\ProjectProviderInterface: - alias: App\ProjectImport\DoctrineProjectProvider - - App\Factory\VcsDriverFactory: - arguments: - $githubOAuthToken: "%app.github.token%" - - app.form.type.datalist_type: - class: App\Form\Type\DatalistType - tags: - - { name: form.type, alias: datalist } \ No newline at end of file + - '../../Entity/*.php' + - '../../Kernel.php' \ No newline at end of file From bc7efe6b39817f9c890d3cf2d2e9b846b24dc334 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 20:14:11 +0200 Subject: [PATCH 10/51] Replace AppKernel with smaller Kernel + MicroKernelTrait --- bin/console | 2 +- phpunit.xml.dist | 2 +- src/AppKernel.php | 40 ---------------------------------------- src/Kernel.php | 27 +++++++++++++++++++++++++++ www/app.php | 2 +- 5 files changed, 30 insertions(+), 43 deletions(-) delete mode 100755 src/AppKernel.php create mode 100644 src/Kernel.php diff --git a/bin/console b/bin/console index 0a122df..0099707 100755 --- a/bin/console +++ b/bin/console @@ -38,6 +38,6 @@ if ($_SERVER['APP_DEBUG']) { } } -$kernel = new AppKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); +$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); $application = new Application($kernel); $application->run($input); diff --git a/phpunit.xml.dist b/phpunit.xml.dist index d02398c..d85a151 100755 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -26,7 +26,7 @@ - + diff --git a/src/AppKernel.php b/src/AppKernel.php deleted file mode 100755 index 042e704..0000000 --- a/src/AppKernel.php +++ /dev/null @@ -1,40 +0,0 @@ -getProjectDir().'/config/bundles.php'; - foreach ($contents as $class => $envs) { - if (isset($envs['all']) || isset($envs[$this->environment])) { - yield new $class(); - } - } - } - - public function registerContainerConfiguration(LoaderInterface $loader) - { - $loader->load(__DIR__.'/config_'.$this->environment.'.yml'); - } - - public function getCacheDir(): string - { - return __DIR__.'/../var/cache/'.$this->environment; - } - - public function getLogDir(): string - { - return __DIR__.'/../logs'; - } - - /** - * @return string - */ - public function getProjectDir(): string - { - return __DIR__.'/../'; - } -} diff --git a/src/Kernel.php b/src/Kernel.php new file mode 100644 index 0000000..525d730 --- /dev/null +++ b/src/Kernel.php @@ -0,0 +1,27 @@ +load(__DIR__.'/config_'.$this->environment.'.yml'); + } + + protected function configureRoutes(RoutingConfigurator $routes): void + { + } + + public function getLogDir(): string + { + return __DIR__.'/../logs'; + } +} \ No newline at end of file diff --git a/www/app.php b/www/app.php index cba3659..21b8ff8 100755 --- a/www/app.php +++ b/www/app.php @@ -21,7 +21,7 @@ Request::setTrustedHosts([$trustedHosts]); } -$kernel = new AppKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); +$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); From d93480929bff264d465f0cba9bc973017ce1ea59 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 21:26:08 +0200 Subject: [PATCH 11/51] Use constructor property promotion in services --- src/App/Command/ImportProjectCommand.php | 7 +---- .../ProjectImport/ComposerPackageFetcher.php | 8 +---- .../ProjectImport/DoctrinePackageProvider.php | 6 +--- .../ProjectImport/DoctrineProjectProvider.php | 6 +--- src/App/ProjectImport/ImportProjectTask.php | 30 ++++--------------- src/App/ProjectImport/LockFileFetcher.php | 6 +--- .../ProjectImport/PackageVersionFetcher.php | 14 +++------ 7 files changed, 14 insertions(+), 63 deletions(-) diff --git a/src/App/Command/ImportProjectCommand.php b/src/App/Command/ImportProjectCommand.php index e57ccad..5734dfe 100644 --- a/src/App/Command/ImportProjectCommand.php +++ b/src/App/Command/ImportProjectCommand.php @@ -10,13 +10,8 @@ class ImportProjectCommand extends Command { - /** @var ImportProjectTask */ - private $importProjectTask; - - public function __construct(ImportProjectTask $importProjectTask) + public function __construct(private ImportProjectTask $importProjectTask) { - $this->importProjectTask = $importProjectTask; - parent::__construct(); } diff --git a/src/App/ProjectImport/ComposerPackageFetcher.php b/src/App/ProjectImport/ComposerPackageFetcher.php index 27612ab..fe02f7c 100644 --- a/src/App/ProjectImport/ComposerPackageFetcher.php +++ b/src/App/ProjectImport/ComposerPackageFetcher.php @@ -7,14 +7,8 @@ class ComposerPackageFetcher { - /** - * @var LockFileFetcher - */ - private $lockFileFetcher; - - public function __construct(LockFileFetcher $lockFileFetcher) + public function __construct(private LockFileFetcher $lockFileFetcher) { - $this->lockFileFetcher = $lockFileFetcher; } /** diff --git a/src/App/ProjectImport/DoctrinePackageProvider.php b/src/App/ProjectImport/DoctrinePackageProvider.php index eaab94b..679b691 100644 --- a/src/App/ProjectImport/DoctrinePackageProvider.php +++ b/src/App/ProjectImport/DoctrinePackageProvider.php @@ -10,12 +10,8 @@ */ class DoctrinePackageProvider implements PackageProviderInterface { - /** @var PackageRepository */ - private $packageRepository; - - public function __construct(PackageRepository $packageRepository) + public function __construct(private PackageRepository $packageRepository) { - $this->packageRepository = $packageRepository; } public function providePackage($name) diff --git a/src/App/ProjectImport/DoctrineProjectProvider.php b/src/App/ProjectImport/DoctrineProjectProvider.php index ff735aa..c4c3350 100644 --- a/src/App/ProjectImport/DoctrineProjectProvider.php +++ b/src/App/ProjectImport/DoctrineProjectProvider.php @@ -12,12 +12,8 @@ #[AsAlias(ProjectProviderInterface::class)] class DoctrineProjectProvider implements ProjectProviderInterface { - /** @var ProjectRepository */ - private $projectRepository; - - public function __construct(ProjectRepository $projectRepository) + public function __construct(private ProjectRepository $projectRepository) { - $this->projectRepository = $projectRepository; } public function provideProject($name) diff --git a/src/App/ProjectImport/ImportProjectTask.php b/src/App/ProjectImport/ImportProjectTask.php index 5fad81b..63439b4 100644 --- a/src/App/ProjectImport/ImportProjectTask.php +++ b/src/App/ProjectImport/ImportProjectTask.php @@ -12,33 +12,13 @@ class ImportProjectTask { - /** @var EntityManagerInterface */ - private $entityManager; - - /** @var ProjectProviderInterface */ - private $projectProvider; - - /** @var PackageVersionFetcher */ - private $packageVersionFetcher; - - /** @var VcsDriverFactory */ - private $vcsDriverFactory; - - /** @var LoggerInterface */ - private $logger; - public function __construct( - EntityManagerInterface $entityManager, - ProjectProviderInterface $projectProvider, - PackageVersionFetcher $packageVersionFetcher, - VcsDriverFactory $vcsDriverFactory, - LoggerInterface $logger + private EntityManagerInterface $entityManager, + private ProjectProviderInterface $projectProvider, + private PackageVersionFetcher $packageVersionFetcher, + private VcsDriverFactory $vcsDriverFactory, + private LoggerInterface $logger, ) { - $this->entityManager = $entityManager; - $this->projectProvider = $projectProvider; - $this->packageVersionFetcher = $packageVersionFetcher; - $this->vcsDriverFactory = $vcsDriverFactory; - $this->logger = $logger; } /** diff --git a/src/App/ProjectImport/LockFileFetcher.php b/src/App/ProjectImport/LockFileFetcher.php index 27d67fb..b0da4bb 100644 --- a/src/App/ProjectImport/LockFileFetcher.php +++ b/src/App/ProjectImport/LockFileFetcher.php @@ -7,12 +7,8 @@ class LockFileFetcher { - /** @var VcsDriverFactory */ - private $vcsDriverFactory; - - public function __construct(VcsDriverFactory $vcsDriverFactory) + public function __construct(private VcsDriverFactory $vcsDriverFactory) { - $this->vcsDriverFactory = $vcsDriverFactory; } /** diff --git a/src/App/ProjectImport/PackageVersionFetcher.php b/src/App/ProjectImport/PackageVersionFetcher.php index 88125ad..7e77d05 100644 --- a/src/App/ProjectImport/PackageVersionFetcher.php +++ b/src/App/ProjectImport/PackageVersionFetcher.php @@ -7,16 +7,10 @@ class PackageVersionFetcher { - /** @var PackageProviderInterface */ - private $packageProvider; - - /** @var ComposerPackageFetcher */ - private $composerPackageFetcher; - - public function __construct(PackageProviderInterface $packageProvider, ComposerPackageFetcher $composerPackageFetcher) - { - $this->packageProvider = $packageProvider; - $this->composerPackageFetcher = $composerPackageFetcher; + public function __construct( + private PackageProviderInterface $packageProvider, + private ComposerPackageFetcher $composerPackageFetcher, + ) { } /** From 0bc0d256c513a14fe720ebc1dfd7f7ac77792be7 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 21:31:08 +0200 Subject: [PATCH 12/51] Move Repositories in namespace outside of Entity/ --- src/App/Command/ReimportAllProjectsCommand.php | 2 +- src/App/Controller/PackageController.php | 2 +- src/App/Controller/ProjectController.php | 2 +- src/App/Controller/SettingsController.php | 4 ++-- src/App/Controller/UsageSearchController.php | 2 +- src/App/Entity/Package.php | 2 +- src/App/Entity/Project.php | 2 +- src/App/ProjectImport/DoctrinePackageProvider.php | 2 +- src/App/ProjectImport/DoctrineProjectProvider.php | 2 +- src/App/{Entity => }/Repository/PackageRepository.php | 4 ++-- src/App/{Entity => }/Repository/ProjectRepository.php | 4 ++-- src/App/Resources/config/services.yml | 2 +- src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php | 2 +- src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php | 2 +- 14 files changed, 17 insertions(+), 17 deletions(-) rename src/App/{Entity => }/Repository/PackageRepository.php (92%) rename src/App/{Entity => }/Repository/ProjectRepository.php (92%) diff --git a/src/App/Command/ReimportAllProjectsCommand.php b/src/App/Command/ReimportAllProjectsCommand.php index b6a2d03..bfdf2b2 100644 --- a/src/App/Command/ReimportAllProjectsCommand.php +++ b/src/App/Command/ReimportAllProjectsCommand.php @@ -2,7 +2,7 @@ namespace App\Command; -use App\Entity\Repository\ProjectRepository; +use App\Repository\ProjectRepository; use App\ProjectImport\ImportProjectTask; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; diff --git a/src/App/Controller/PackageController.php b/src/App/Controller/PackageController.php index 0cc8c77..0f6a4d7 100644 --- a/src/App/Controller/PackageController.php +++ b/src/App/Controller/PackageController.php @@ -2,7 +2,7 @@ namespace App\Controller; -use App\Entity\Repository\PackageRepository; +use App\Repository\PackageRepository; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; diff --git a/src/App/Controller/ProjectController.php b/src/App/Controller/ProjectController.php index 59a870e..8a621b9 100644 --- a/src/App/Controller/ProjectController.php +++ b/src/App/Controller/ProjectController.php @@ -2,7 +2,7 @@ namespace App\Controller; -use App\Entity\Repository\ProjectRepository; +use App\Repository\ProjectRepository; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\Routing\Attribute\Route; diff --git a/src/App/Controller/SettingsController.php b/src/App/Controller/SettingsController.php index ad418fa..1ad091a 100644 --- a/src/App/Controller/SettingsController.php +++ b/src/App/Controller/SettingsController.php @@ -2,8 +2,8 @@ namespace App\Controller; -use App\Entity\Repository\PackageRepository; -use App\Entity\Repository\ProjectRepository; +use App\Repository\PackageRepository; +use App\Repository\ProjectRepository; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Twig\Environment; diff --git a/src/App/Controller/UsageSearchController.php b/src/App/Controller/UsageSearchController.php index 698d56b..19e57ce 100644 --- a/src/App/Controller/UsageSearchController.php +++ b/src/App/Controller/UsageSearchController.php @@ -2,7 +2,7 @@ namespace App\Controller; -use App\Entity\Repository\PackageRepository; +use App\Repository\PackageRepository; use App\Entity\VersionConstraint; use Composer\Semver\VersionParser; use InvalidArgumentException; diff --git a/src/App/Entity/Package.php b/src/App/Entity/Package.php index aa05536..5f37966 100644 --- a/src/App/Entity/Package.php +++ b/src/App/Entity/Package.php @@ -2,7 +2,7 @@ namespace App\Entity; -use App\Entity\Repository\PackageRepository; +use App\Repository\PackageRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; diff --git a/src/App/Entity/Project.php b/src/App/Entity/Project.php index e7299a2..29525f4 100644 --- a/src/App/Entity/Project.php +++ b/src/App/Entity/Project.php @@ -2,7 +2,7 @@ namespace App\Entity; -use App\Entity\Repository\ProjectRepository; +use App\Repository\ProjectRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; diff --git a/src/App/ProjectImport/DoctrinePackageProvider.php b/src/App/ProjectImport/DoctrinePackageProvider.php index 679b691..a01a474 100644 --- a/src/App/ProjectImport/DoctrinePackageProvider.php +++ b/src/App/ProjectImport/DoctrinePackageProvider.php @@ -3,7 +3,7 @@ namespace App\ProjectImport; use App\Entity\Package; -use App\Entity\Repository\PackageRepository; +use App\Repository\PackageRepository; /** * Tries to fetch existing Package entity or creates a new one. diff --git a/src/App/ProjectImport/DoctrineProjectProvider.php b/src/App/ProjectImport/DoctrineProjectProvider.php index c4c3350..f066be3 100644 --- a/src/App/ProjectImport/DoctrineProjectProvider.php +++ b/src/App/ProjectImport/DoctrineProjectProvider.php @@ -3,7 +3,7 @@ namespace App\ProjectImport; use App\Entity\Project; -use App\Entity\Repository\ProjectRepository; +use App\Repository\ProjectRepository; use Symfony\Component\DependencyInjection\Attribute\AsAlias; /** diff --git a/src/App/Entity/Repository/PackageRepository.php b/src/App/Repository/PackageRepository.php similarity index 92% rename from src/App/Entity/Repository/PackageRepository.php rename to src/App/Repository/PackageRepository.php index d274c0b..16a4a77 100644 --- a/src/App/Entity/Repository/PackageRepository.php +++ b/src/App/Repository/PackageRepository.php @@ -1,6 +1,6 @@ getEntityManager()->persist($package); } -} +} \ No newline at end of file diff --git a/src/App/Entity/Repository/ProjectRepository.php b/src/App/Repository/ProjectRepository.php similarity index 92% rename from src/App/Entity/Repository/ProjectRepository.php rename to src/App/Repository/ProjectRepository.php index b368147..a70e723 100644 --- a/src/App/Entity/Repository/ProjectRepository.php +++ b/src/App/Repository/ProjectRepository.php @@ -1,6 +1,6 @@ getEntityManager()->persist($project); } -} +} \ No newline at end of file diff --git a/src/App/Resources/config/services.yml b/src/App/Resources/config/services.yml index 9c271a0..39581ed 100644 --- a/src/App/Resources/config/services.yml +++ b/src/App/Resources/config/services.yml @@ -8,5 +8,5 @@ services: exclude: - '../../Tests/' - '../../DependencyInjection/' - - '../../Entity/*.php' + - '../../Entity/' - '../../Kernel.php' \ No newline at end of file diff --git a/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php b/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php index 57362b0..6676818 100644 --- a/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php +++ b/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php @@ -3,7 +3,7 @@ namespace App\Tests\ProjectImport; use App\Entity\Package; -use App\Entity\Repository\PackageRepository; +use App\Repository\PackageRepository; use App\ProjectImport\DoctrinePackageProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; diff --git a/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php b/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php index 9026ee7..67bcef2 100644 --- a/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php +++ b/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php @@ -3,7 +3,7 @@ namespace App\Tests\ProjectImport; use App\Entity\Project; -use App\Entity\Repository\ProjectRepository; +use App\Repository\ProjectRepository; use App\ProjectImport\DoctrineProjectProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; From 2d913c967219b6e784536c842c04c9186aeef663 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 21:50:02 +0200 Subject: [PATCH 13/51] =?UTF-8?q?Dissolve=20AppBundle=20=E2=80=93=20move?= =?UTF-8?q?=20templates,=20load=20services=20and=20routing=20directly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Move templates from src/App/Resources/views/ to templates/ - Plain paths without @AppBundle in Twig paths, routing, config - Remove DependencyInjection\AppExtension, use Kernel to load services - Use php format for routing files - Replace auto_mapping with explicit Doctrine mapping config --- config/bundles.php | 2 -- src/App/AppBundle.php | 9 --------- .../ImportRepositoriesController.php | 2 +- src/App/Controller/MainController.php | 4 ++-- src/App/Controller/PackageController.php | 4 ++-- src/App/Controller/ProjectController.php | 2 +- src/App/Controller/SettingsController.php | 2 +- src/App/Controller/UsageSearchController.php | 2 +- src/App/DependencyInjection/AppExtension.php | 20 ------------------- src/App/Form/Type/DatalistType.php | 2 +- src/App/Resources/config/services.yml | 1 - src/Kernel.php | 6 ++++++ src/config.default.yml | 11 +++++++--- src/config_development.default.yml | 1 - src/routing.php | 9 +++++++++ src/routing.yml | 5 ----- src/routing_development.php | 11 ++++++++++ src/routing_development.yml | 10 ---------- .../views => templates}/Base/base.html.twig | 0 .../views => templates}/Form/fields.html.twig | 0 .../import_repositories/import_form.html.twig | 2 +- .../views => templates}/main/main.html.twig | 2 +- .../package/detail.html.twig | 4 ++-- .../package/detail.json.twig | 0 .../package/versions.json.twig | 0 .../project/detail.html.twig | 4 ++-- .../settings/settings.html.twig | 2 +- .../usage_search/search_results.html.twig | 0 .../usage_search/search_results.json.twig | 0 29 files changed, 50 insertions(+), 67 deletions(-) delete mode 100755 src/App/AppBundle.php delete mode 100755 src/App/DependencyInjection/AppExtension.php create mode 100644 src/routing.php delete mode 100755 src/routing.yml create mode 100644 src/routing_development.php delete mode 100755 src/routing_development.yml rename {src/App/Resources/views => templates}/Base/base.html.twig (100%) rename {src/App/Resources/views => templates}/Form/fields.html.twig (100%) rename {src/App/Resources/views => templates}/import_repositories/import_form.html.twig (98%) rename {src/App/Resources/views => templates}/main/main.html.twig (98%) rename {src/App/Resources/views => templates}/package/detail.html.twig (93%) rename {src/App/Resources/views => templates}/package/detail.json.twig (100%) rename {src/App/Resources/views => templates}/package/versions.json.twig (100%) rename {src/App/Resources/views => templates}/project/detail.html.twig (92%) rename {src/App/Resources/views => templates}/settings/settings.html.twig (98%) rename {src/App/Resources/views => templates}/usage_search/search_results.html.twig (100%) rename {src/App/Resources/views => templates}/usage_search/search_results.json.twig (100%) diff --git a/config/bundles.php b/config/bundles.php index 6cb75e2..09df50a 100755 --- a/config/bundles.php +++ b/config/bundles.php @@ -6,7 +6,5 @@ Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['development' => true, 'test' => true], - App\AppBundle::class => ['all' => true], - Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['development' => true, 'test' => true], ]; diff --git a/src/App/AppBundle.php b/src/App/AppBundle.php deleted file mode 100755 index 88d8267..0000000 --- a/src/App/AppBundle.php +++ /dev/null @@ -1,9 +0,0 @@ -twig->render('@AppBundle/import_repositories/import_form.html.twig', + $this->twig->render('import_repositories/import_form.html.twig', [ 'importProjectsForm' => $projectImportForm->createView(), 'imports' => $imports, diff --git a/src/App/Controller/MainController.php b/src/App/Controller/MainController.php index 6a0db02..2424ae6 100755 --- a/src/App/Controller/MainController.php +++ b/src/App/Controller/MainController.php @@ -30,7 +30,7 @@ public function mainAction(Request $request): Response return new Response( $this->twig->render( - '@AppBundle/main/main.html.twig', + 'main/main.html.twig', [ 'searchPackageForm' => $searchPackageForm->createView(), 'matchingPackageVersions' => $package->getMatchingVersionsWithProjects($versionConstraint), @@ -42,7 +42,7 @@ public function mainAction(Request $request): Response return new Response( $this->twig->render( - '@AppBundle/main/main.html.twig', + 'main/main.html.twig', [ 'searchPackageForm' => $searchPackageForm->createView(), ] diff --git a/src/App/Controller/PackageController.php b/src/App/Controller/PackageController.php index 0f6a4d7..6a5baa3 100644 --- a/src/App/Controller/PackageController.php +++ b/src/App/Controller/PackageController.php @@ -48,7 +48,7 @@ public function detailAction(string $name, Request $request, string $_format): R return new Response( $this->twig->render( - '@AppBundle/package/detail.'.$_format.'.twig', + 'package/detail.'.$_format.'.twig', ['package' => $package] ) ); @@ -69,7 +69,7 @@ public function versionsAction(string $name): Response return new Response( $this->twig->render( - '@AppBundle/package/versions.json.twig', + 'package/versions.json.twig', ['packageVersions' => $package->getVersions()] ) ); diff --git a/src/App/Controller/ProjectController.php b/src/App/Controller/ProjectController.php index 8a621b9..1101f18 100644 --- a/src/App/Controller/ProjectController.php +++ b/src/App/Controller/ProjectController.php @@ -25,7 +25,7 @@ public function detailAction(string $name): Response } return new Response( - $this->twig->render('@AppBundle/project/detail.html.twig', ['project' => $project]) + $this->twig->render('project/detail.html.twig', ['project' => $project]) ); } } diff --git a/src/App/Controller/SettingsController.php b/src/App/Controller/SettingsController.php index 1ad091a..b76ad68 100644 --- a/src/App/Controller/SettingsController.php +++ b/src/App/Controller/SettingsController.php @@ -22,7 +22,7 @@ public function settingsAction(): Response { return new Response( $this->twig->render( - '@AppBundle/settings/settings.html.twig', + 'settings/settings.html.twig', [ 'projects' => $this->projectRepository->findBy([], ['name' => 'ASC']), 'packages' => $this->packageRepository->findBy([], ['name' => 'ASC']), diff --git a/src/App/Controller/UsageSearchController.php b/src/App/Controller/UsageSearchController.php index 19e57ce..d4f68d4 100644 --- a/src/App/Controller/UsageSearchController.php +++ b/src/App/Controller/UsageSearchController.php @@ -60,7 +60,7 @@ public function searchResultsAction(string $package, string $operator, string $v return new Response( $this->twig->render( - '@AppBundle/usage_search/search_results.json.twig', + 'usage_search/search_results.json.twig', [ 'matchingPackageVersions' => $packageEntity->getMatchingVersionsWithProjects($versionConstraint), 'package' => $packageEntity, diff --git a/src/App/DependencyInjection/AppExtension.php b/src/App/DependencyInjection/AppExtension.php deleted file mode 100755 index cdac1b7..0000000 --- a/src/App/DependencyInjection/AppExtension.php +++ /dev/null @@ -1,20 +0,0 @@ -load('services.yml'); - } -} diff --git a/src/App/Form/Type/DatalistType.php b/src/App/Form/Type/DatalistType.php index b2f38a5..0d7d146 100644 --- a/src/App/Form/Type/DatalistType.php +++ b/src/App/Form/Type/DatalistType.php @@ -7,7 +7,7 @@ /** * Wrapper for the EntityType to use it with HTML datalist tag - * see AppBundle/Resources/views/form/fields.html.twig. + * see templates/Form/fields.html.twig. * * As soon as we have Symfony 4, all usages of this type can be replaced with EntityType + ['block_prefix' => 'datalist'] * diff --git a/src/App/Resources/config/services.yml b/src/App/Resources/config/services.yml index 39581ed..2d29976 100644 --- a/src/App/Resources/config/services.yml +++ b/src/App/Resources/config/services.yml @@ -7,6 +7,5 @@ services: resource: '../../' exclude: - '../../Tests/' - - '../../DependencyInjection/' - '../../Entity/' - '../../Kernel.php' \ No newline at end of file diff --git a/src/Kernel.php b/src/Kernel.php index 525d730..2f30850 100644 --- a/src/Kernel.php +++ b/src/Kernel.php @@ -14,10 +14,16 @@ class Kernel extends BaseKernel protected function configureContainer(ContainerConfigurator $container, LoaderInterface $loader, ContainerBuilder $builder): void { $loader->load(__DIR__.'/config_'.$this->environment.'.yml'); + $loader->load(__DIR__.'/App/Resources/config/services.yml'); } protected function configureRoutes(RoutingConfigurator $routes): void { + if ('development' === $this->environment) { + $routes->import(__DIR__.'/routing_development.php'); + } else { + $routes->import(__DIR__.'/routing.php'); + } } public function getLogDir(): string diff --git a/src/config.default.yml b/src/config.default.yml index 3acbe42..5ef554d 100644 --- a/src/config.default.yml +++ b/src/config.default.yml @@ -29,7 +29,6 @@ parameters: framework: secret: "%secret%" - router: { resource: "%kernel.project_dir%/src/routing.yml" } form: enabled: true csrf_protection: @@ -44,7 +43,7 @@ framework: twig: strict_variables: "%kernel.debug%" form_themes: - - '@AppBundle/Form/fields.html.twig' + - 'Form/fields.html.twig' doctrine: dbal: @@ -57,8 +56,14 @@ doctrine: schema_filter: ~^(?!(_dbversion$|_fixed_tableid$|wfd_))~ server_version: '5.7' orm: - auto_mapping: true enable_native_lazy_objects: true + mappings: + App: + is_bundle: false + type: attribute + dir: '%kernel.project_dir%/src/App/Entity' + prefix: 'App\Entity' + alias: App services: app.logging.web_processor: diff --git a/src/config_development.default.yml b/src/config_development.default.yml index 427bc2c..157bf29 100755 --- a/src/config_development.default.yml +++ b/src/config_development.default.yml @@ -1,5 +1,4 @@ framework: - router: { resource: "%kernel.project_dir%/src/routing_development.yml" } profiler: enabled: true diff --git a/src/routing.php b/src/routing.php new file mode 100644 index 0000000..7d240aa --- /dev/null +++ b/src/routing.php @@ -0,0 +1,9 @@ +import(__DIR__.'/App/Controller/', 'attribute') + ->prefix('/') + ->defaults(['_locale' => 'en']); +}; \ No newline at end of file diff --git a/src/routing.yml b/src/routing.yml deleted file mode 100755 index 72384ec..0000000 --- a/src/routing.yml +++ /dev/null @@ -1,5 +0,0 @@ -app: - resource: "@AppBundle/Controller" - prefix: / - defaults: { _locale: en } - type: attribute diff --git a/src/routing_development.php b/src/routing_development.php new file mode 100644 index 0000000..246c7a3 --- /dev/null +++ b/src/routing_development.php @@ -0,0 +1,11 @@ +import($profilerDir.'/wdt.php')->prefix('/_wdt'); + $routes->import($profilerDir.'/profiler.php')->prefix('/_profiler'); + + $routes->import(__DIR__.'/routing.php'); +}; diff --git a/src/routing_development.yml b/src/routing_development.yml deleted file mode 100755 index d3a7f93..0000000 --- a/src/routing_development.yml +++ /dev/null @@ -1,10 +0,0 @@ -_wdt: - resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml" - prefix: /_wdt - -_profiler: - resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml" - prefix: /_profiler - -_main: - resource: routing.yml \ No newline at end of file diff --git a/src/App/Resources/views/Base/base.html.twig b/templates/Base/base.html.twig similarity index 100% rename from src/App/Resources/views/Base/base.html.twig rename to templates/Base/base.html.twig diff --git a/src/App/Resources/views/Form/fields.html.twig b/templates/Form/fields.html.twig similarity index 100% rename from src/App/Resources/views/Form/fields.html.twig rename to templates/Form/fields.html.twig diff --git a/src/App/Resources/views/import_repositories/import_form.html.twig b/templates/import_repositories/import_form.html.twig similarity index 98% rename from src/App/Resources/views/import_repositories/import_form.html.twig rename to templates/import_repositories/import_form.html.twig index eab77df..f42c6e6 100644 --- a/src/App/Resources/views/import_repositories/import_form.html.twig +++ b/templates/import_repositories/import_form.html.twig @@ -1,4 +1,4 @@ -{# projects AppBundle:Project[] #} +{# projects Project[] #} {% extends '@App/Base/base.html.twig' %} {% block main %} diff --git a/src/App/Resources/views/main/main.html.twig b/templates/main/main.html.twig similarity index 98% rename from src/App/Resources/views/main/main.html.twig rename to templates/main/main.html.twig index 74ecb90..657d075 100755 --- a/src/App/Resources/views/main/main.html.twig +++ b/templates/main/main.html.twig @@ -1,4 +1,4 @@ -{# projects AppBundle:Project[] #} +{# projects Project[] #} {% extends '@App/Base/base.html.twig' %} {% block main %} diff --git a/src/App/Resources/views/package/detail.html.twig b/templates/package/detail.html.twig similarity index 93% rename from src/App/Resources/views/package/detail.html.twig rename to templates/package/detail.html.twig index 01971dc..5647bee 100644 --- a/src/App/Resources/views/package/detail.html.twig +++ b/templates/package/detail.html.twig @@ -1,5 +1,5 @@ -{# package AppBundle:Package #} -{# project AppBundle:Project #} +{# package Package #} +{# project Project #} {% extends '@App/Base/base.html.twig' %} {% block main %} diff --git a/src/App/Resources/views/package/detail.json.twig b/templates/package/detail.json.twig similarity index 100% rename from src/App/Resources/views/package/detail.json.twig rename to templates/package/detail.json.twig diff --git a/src/App/Resources/views/package/versions.json.twig b/templates/package/versions.json.twig similarity index 100% rename from src/App/Resources/views/package/versions.json.twig rename to templates/package/versions.json.twig diff --git a/src/App/Resources/views/project/detail.html.twig b/templates/project/detail.html.twig similarity index 92% rename from src/App/Resources/views/project/detail.html.twig rename to templates/project/detail.html.twig index 20c36e4..56501d2 100644 --- a/src/App/Resources/views/project/detail.html.twig +++ b/templates/project/detail.html.twig @@ -1,5 +1,5 @@ -{# project AppBundle:Project #} -{# usage AppBundle:PackageVersion #} +{# project Project #} +{# usage PackageVersion #} {% extends '@App/Base/base.html.twig' %} {% block main %} diff --git a/src/App/Resources/views/settings/settings.html.twig b/templates/settings/settings.html.twig similarity index 98% rename from src/App/Resources/views/settings/settings.html.twig rename to templates/settings/settings.html.twig index 0e72a9a..9db63c9 100644 --- a/src/App/Resources/views/settings/settings.html.twig +++ b/templates/settings/settings.html.twig @@ -1,4 +1,4 @@ -{# projects AppBundle:Project[] #} +{# projects Project[] #} {% extends '@App/Base/base.html.twig' %} diff --git a/src/App/Resources/views/usage_search/search_results.html.twig b/templates/usage_search/search_results.html.twig similarity index 100% rename from src/App/Resources/views/usage_search/search_results.html.twig rename to templates/usage_search/search_results.html.twig diff --git a/src/App/Resources/views/usage_search/search_results.json.twig b/templates/usage_search/search_results.json.twig similarity index 100% rename from src/App/Resources/views/usage_search/search_results.json.twig rename to templates/usage_search/search_results.json.twig From e734082f80fee5adde67fe976c2cf78d73a99afd Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 22:10:40 +0200 Subject: [PATCH 14/51] Remove unnecessary leading slashes in route attributes --- src/App/Controller/ImportRepositoriesController.php | 2 +- src/App/Controller/MainController.php | 2 +- src/App/Controller/PackageController.php | 4 ++-- src/App/Controller/ProjectController.php | 2 +- src/App/Controller/SettingsController.php | 2 +- src/App/Controller/UsageSearchController.php | 2 +- src/App/Controller/WebhookController.php | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/App/Controller/ImportRepositoriesController.php b/src/App/Controller/ImportRepositoriesController.php index b98ef1c..4baa616 100644 --- a/src/App/Controller/ImportRepositoriesController.php +++ b/src/App/Controller/ImportRepositoriesController.php @@ -26,7 +26,7 @@ public function __construct( $this->demoMode = (bool) $demoMode; } - #[Route('/import-repositories', name: 'import-repositories')] + #[Route('import-repositories', name: 'import-repositories')] public function importFormAction(Request $request): Response { $projectImportForm = $this->getProjectImportForm(); diff --git a/src/App/Controller/MainController.php b/src/App/Controller/MainController.php index 2424ae6..35fb9e2 100755 --- a/src/App/Controller/MainController.php +++ b/src/App/Controller/MainController.php @@ -17,7 +17,7 @@ public function __construct( ) { } - #[Route('/', name: 'main')] + #[Route('', name: 'main')] public function mainAction(Request $request): Response { $searchPackageForm = $this->formFactory->create(SearchPackageType::class, null, ['method' => 'GET']); diff --git a/src/App/Controller/PackageController.php b/src/App/Controller/PackageController.php index 6a5baa3..aca9643 100644 --- a/src/App/Controller/PackageController.php +++ b/src/App/Controller/PackageController.php @@ -21,7 +21,7 @@ public function __construct( } #[Route( - '/package/{name};{_format}', + 'package/{name};{_format}', name: 'package', requirements: ['name' => '[^;]+', '_format' => 'json|html'], defaults: ['_format' => 'html'] @@ -55,7 +55,7 @@ public function detailAction(string $name, Request $request, string $_format): R } #[Route( - '/package-versions/{name};{_format}', + 'package-versions/{name};{_format}', name: 'package-versions', requirements: ['name' => '[^;]*'], defaults: ['_format' => 'json'] diff --git a/src/App/Controller/ProjectController.php b/src/App/Controller/ProjectController.php index 1101f18..33c7d5e 100644 --- a/src/App/Controller/ProjectController.php +++ b/src/App/Controller/ProjectController.php @@ -16,7 +16,7 @@ public function __construct( ) { } - #[Route('/project/{name}', name: 'project', requirements: ['name' => '.+'])] + #[Route('project/{name}', name: 'project', requirements: ['name' => '.+'])] public function detailAction(string $name): Response { $project = $this->projectRepository->findOneByName($name); diff --git a/src/App/Controller/SettingsController.php b/src/App/Controller/SettingsController.php index b76ad68..806bc3e 100644 --- a/src/App/Controller/SettingsController.php +++ b/src/App/Controller/SettingsController.php @@ -17,7 +17,7 @@ public function __construct( ) { } - #[Route('/settings', name: 'settings')] + #[Route('settings', name: 'settings')] public function settingsAction(): Response { return new Response( diff --git a/src/App/Controller/UsageSearchController.php b/src/App/Controller/UsageSearchController.php index d4f68d4..c726f6c 100644 --- a/src/App/Controller/UsageSearchController.php +++ b/src/App/Controller/UsageSearchController.php @@ -29,7 +29,7 @@ public function __construct( } #[Route( - '/usage-search/{package};{_format}/{operator}/{versionString}', + 'usage-search/{package};{_format}/{operator}/{versionString}', name: 'search-usages', requirements: ['package' => '[^;]+', '_format' => 'json|html'], defaults: ['_format' => 'html'] diff --git a/src/App/Controller/WebhookController.php b/src/App/Controller/WebhookController.php index e14c606..a55fd5f 100644 --- a/src/App/Controller/WebhookController.php +++ b/src/App/Controller/WebhookController.php @@ -18,7 +18,7 @@ public function __construct( ) { } - #[Route('/webhook', name: 'webhook', methods: ['POST'])] + #[Route('webhook', name: 'webhook', methods: ['POST'])] public function updateAction(Request $request) { set_time_limit(500); From e9736357c483c960156a99c9342f0973759ab0ab Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 22:49:15 +0200 Subject: [PATCH 15/51] Upgrade to Symfony 8, PHPUnit 11 and doctrine-bundle 3 Add return types to satisfy Symfony 8 interface contracts. --- composer.json | 24 +- composer.lock | 1397 ++++++++--------- phpunit.xml.dist | 29 +- src/App/Command/ImportProjectCommand.php | 2 +- .../Command/ReimportAllProjectsCommand.php | 2 +- src/App/Form/Type/DatalistType.php | 2 +- src/App/Form/Type/SearchPackageType.php | 4 +- src/App/Form/Type/VersionConstraintType.php | 4 +- .../ProjectImport/ImportProjectTaskTest.php | 8 + 9 files changed, 710 insertions(+), 762 deletions(-) diff --git a/composer.json b/composer.json index 1a3a33d..4a8ea00 100755 --- a/composer.json +++ b/composer.json @@ -6,25 +6,25 @@ "php": "^8.2", "composer/composer": "^2.0", "doctrine/dbal": "^4.0", - "doctrine/doctrine-bundle": "^2.13", + "doctrine/doctrine-bundle": "^3.0", "doctrine/doctrine-migrations-bundle": "^3.0", "doctrine/migrations": "^3.0", "doctrine/orm": "^3.0", - "symfony/asset": "^7.2", - "symfony/console": "^7.2", + "symfony/asset": "^8.0", + "symfony/console": "^8.0", "symfony/dotenv": "^8.0", - "symfony/form": "^7.2", - "symfony/framework-bundle": "^7.2", + "symfony/form": "^8.0", + "symfony/framework-bundle": "^8.0", "symfony/monolog-bundle": "^3.2.0", - "symfony/translation": "^7.2", - "symfony/twig-bundle": "^7.2", - "symfony/validator": "^7.2", - "symfony/yaml": "^7.2" + "symfony/translation": "^8.0", + "symfony/twig-bundle": "^8.0", + "symfony/validator": "^8.0", + "symfony/yaml": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^10.0", - "doctrine/doctrine-fixtures-bundle": "^3.0", - "symfony/web-profiler-bundle": "^7.2" + "phpunit/phpunit": "^11.0", + "doctrine/doctrine-fixtures-bundle": "^4.0", + "symfony/web-profiler-bundle": "^8.0" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index f331226..282f7df 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": "79b901622fae954ab0df19a64efb2c37", + "content-hash": "88c2946ba60769b05cef06563dca7bf7", "packages": [ { "name": "composer/ca-bundle", @@ -869,63 +869,57 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.18.2", + "version": "3.2.2", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "0ff098b29b8b3c68307c8987dcaed7fd829c6546" + "reference": "af84173db6978c3d2688ea3bcf3a91720b0704ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/0ff098b29b8b3c68307c8987dcaed7fd829c6546", - "reference": "0ff098b29b8b3c68307c8987dcaed7fd829c6546", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/af84173db6978c3d2688ea3bcf3a91720b0704ce", + "reference": "af84173db6978c3d2688ea3bcf3a91720b0704ce", "shasum": "" }, "require": { - "doctrine/dbal": "^3.7.0 || ^4.0", + "doctrine/dbal": "^4.0", "doctrine/deprecations": "^1.0", - "doctrine/persistence": "^3.1 || ^4", + "doctrine/persistence": "^4", "doctrine/sql-formatter": "^1.0.1", - "php": "^8.1", - "symfony/cache": "^6.4 || ^7.0", - "symfony/config": "^6.4 || ^7.0", - "symfony/console": "^6.4 || ^7.0", - "symfony/dependency-injection": "^6.4 || ^7.0", - "symfony/doctrine-bridge": "^6.4.3 || ^7.0.3", - "symfony/framework-bundle": "^6.4 || ^7.0", - "symfony/service-contracts": "^2.5 || ^3" + "php": "^8.4", + "symfony/cache": "^6.4 || ^7.0 || ^8.0", + "symfony/config": "^6.4 || ^7.0 || ^8.0", + "symfony/console": "^6.4 || ^7.0 || ^8.0", + "symfony/dependency-injection": "^6.4 || ^7.0 || ^8.0", + "symfony/doctrine-bridge": "^6.4.3 || ^7.0.3 || ^8.0", + "symfony/framework-bundle": "^6.4 || ^7.0 || ^8.0", + "symfony/service-contracts": "^3" }, "conflict": { - "doctrine/annotations": ">=3.0", - "doctrine/cache": "< 1.11", - "doctrine/orm": "<2.17 || >=4.0", - "symfony/var-exporter": "< 6.4.1 || 7.0.0", - "twig/twig": "<2.13 || >=3.0 <3.0.4" + "doctrine/orm": "<3.0 || >=4.0", + "twig/twig": "<3.0.4" }, "require-dev": { - "doctrine/annotations": "^1 || ^2", - "doctrine/cache": "^1.11 || ^2.0", "doctrine/coding-standard": "^14", - "doctrine/orm": "^2.17 || ^3.1", - "friendsofphp/proxy-manager-lts": "^1.0", + "doctrine/orm": "^3.4.4", "phpstan/phpstan": "2.1.1", "phpstan/phpstan-phpunit": "2.0.3", "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "^10.5.53 || ^12.3.10", - "psr/log": "^1.1.4 || ^2.0 || ^3.0", - "symfony/doctrine-messenger": "^6.4 || ^7.0", - "symfony/expression-language": "^6.4 || ^7.0", - "symfony/messenger": "^6.4 || ^7.0", - "symfony/property-info": "^6.4 || ^7.0", - "symfony/security-bundle": "^6.4 || ^7.0", - "symfony/stopwatch": "^6.4 || ^7.0", - "symfony/string": "^6.4 || ^7.0", - "symfony/twig-bridge": "^6.4 || ^7.0", - "symfony/validator": "^6.4 || ^7.0", - "symfony/var-exporter": "^6.4.1 || ^7.0.1", - "symfony/web-profiler-bundle": "^6.4 || ^7.0", - "symfony/yaml": "^6.4 || ^7.0", - "twig/twig": "^2.14.7 || ^3.0.4" + "phpstan/phpstan-symfony": "^2.0", + "phpunit/phpunit": "^12.3.10", + "psr/log": "^3.0", + "symfony/doctrine-messenger": "^6.4 || ^7.0 || ^8.0", + "symfony/expression-language": "^6.4 || ^7.0 || ^8.0", + "symfony/messenger": "^6.4 || ^7.0 || ^8.0", + "symfony/property-info": "^6.4 || ^7.0 || ^8.0", + "symfony/security-bundle": "^6.4 || ^7.0 || ^8.0", + "symfony/stopwatch": "^6.4 || ^7.0 || ^8.0", + "symfony/string": "^6.4 || ^7.0 || ^8.0", + "symfony/twig-bridge": "^6.4 || ^7.0 || ^8.0", + "symfony/validator": "^6.4 || ^7.0 || ^8.0", + "symfony/web-profiler-bundle": "^6.4 || ^7.0 || ^8.0", + "symfony/yaml": "^6.4 || ^7.0 || ^8.0", + "twig/twig": "^3.21.1" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -970,7 +964,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.2" + "source": "https://github.com/doctrine/DoctrineBundle/tree/3.2.2" }, "funding": [ { @@ -986,7 +980,7 @@ "type": "tidelift" } ], - "time": "2025-12-20T21:35:32+00:00" + "time": "2025-12-24T12:24:29+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", @@ -2441,28 +2435,25 @@ }, { "name": "symfony/asset", - "version": "v7.4.8", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "d2e2f014ccd6ec9fae8dbe6336a4164346a2a856" + "reference": "72eca261f3af1bef741c48bb2c91a4e619dca03a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/d2e2f014ccd6ec9fae8dbe6336a4164346a2a856", - "reference": "d2e2f014ccd6ec9fae8dbe6336a4164346a2a856", + "url": "https://api.github.com/repos/symfony/asset/zipball/72eca261f3af1bef741c48bb2c91a4e619dca03a", + "reference": "72eca261f3af1bef741c48bb2c91a4e619dca03a", "shasum": "" }, "require": { - "php": ">=8.2" - }, - "conflict": { - "symfony/http-foundation": "<6.4" + "php": ">=8.4" }, "require-dev": { - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0" + "symfony/http-client": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -2490,7 +2481,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v7.4.8" + "source": "https://github.com/symfony/asset/tree/v8.0.8" }, "funding": [ { @@ -2510,38 +2501,33 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/cache", - "version": "v7.4.10", + "version": "v8.0.10", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "8c5fbb4b5bc7a878f7ce66f1b7e29653c404984b" + "reference": "8ff96cde73684bfa32b702f5cff1eb83b1fac429" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/8c5fbb4b5bc7a878f7ce66f1b7e29653c404984b", - "reference": "8c5fbb4b5bc7a878f7ce66f1b7e29653c404984b", + "url": "https://api.github.com/repos/symfony/cache/zipball/8ff96cde73684bfa32b702f5cff1eb83b1fac429", + "reference": "8ff96cde73684bfa32b702f5cff1eb83b1fac429", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", "symfony/cache-contracts": "^3.6", - "symfony/deprecation-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.4|^7.0|^8.0" + "symfony/var-exporter": "^7.4|^8.0" }, "conflict": { - "doctrine/dbal": "<3.6", "ext-redis": "<6.1", - "ext-relay": "<0.12.1", - "symfony/dependency-injection": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/var-dumper": "<6.4" + "ext-relay": "<0.12.1" }, "provide": { "psr/cache-implementation": "2.0|3.0", @@ -2550,16 +2536,16 @@ }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/dbal": "^3.6|^4", + "doctrine/dbal": "^4.3", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/clock": "^6.4|^7.0|^8.0", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/filesystem": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/clock": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/filesystem": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -2594,7 +2580,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.4.10" + "source": "https://github.com/symfony/cache/tree/v8.0.10" }, "funding": [ { @@ -2614,7 +2600,7 @@ "type": "tidelift" } ], - "time": "2026-05-05T08:23:16+00:00" + "time": "2026-05-05T08:24:00+00:00" }, { "name": "symfony/cache-contracts", @@ -2777,47 +2763,39 @@ }, { "name": "symfony/console", - "version": "v7.4.9", + "version": "v8.0.11", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d7d2b64a45a89d607865927b176fa51c33ddbb58" + "reference": "3156577f46a38aa1b9323aad223de7a9cd426782" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d7d2b64a45a89d607865927b176fa51c33ddbb58", - "reference": "d7d2b64a45a89d607865927b176fa51c33ddbb58", + "url": "https://api.github.com/repos/symfony/console/zipball/3156577f46a38aa1b9323aad223de7a9cd426782", + "reference": "3156577f46a38aa1b9323aad223de7a9cd426782", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.2|^8.0" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" + "symfony/string": "^7.4|^8.0" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/event-dispatcher": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/lock": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -2851,7 +2829,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.9" + "source": "https://github.com/symfony/console/tree/v8.0.11" }, "funding": [ { @@ -2871,7 +2849,7 @@ "type": "tidelift" } ], - "time": "2026-04-22T15:21:55+00:00" + "time": "2026-05-13T12:07:53+00:00" }, { "name": "symfony/dependency-injection", @@ -3030,68 +3008,57 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.4.9", + "version": "v8.0.9", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "7a87c85853f3069e3657a823c62b02952de46b0a" + "reference": "dfe3dddc9c22756b9b145785fb5fd4b0445cd06e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/7a87c85853f3069e3657a823c62b02952de46b0a", - "reference": "7a87c85853f3069e3657a823c62b02952de46b0a", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/dfe3dddc9c22756b9b145785fb5fd4b0445cd06e", + "reference": "dfe3dddc9c22756b9b145785fb5fd4b0445cd06e", "shasum": "" }, "require": { "doctrine/event-manager": "^2", "doctrine/persistence": "^3.1|^4", - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", + "php": ">=8.4", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { "doctrine/collections": "<1.8", - "doctrine/dbal": "<3.6", + "doctrine/dbal": "<4.3", "doctrine/lexer": "<1.1", - "doctrine/orm": "<2.15", - "symfony/cache": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/form": "<6.4.6|>=7,<7.0.6", - "symfony/http-foundation": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/lock": "<6.4", - "symfony/messenger": "<6.4", - "symfony/property-info": "<6.4", - "symfony/security-bundle": "<6.4", - "symfony/security-core": "<6.4", - "symfony/validator": "<7.4" + "doctrine/orm": "<3.4", + "symfony/property-info": "<8.0" }, "require-dev": { "doctrine/collections": "^1.8|^2.0", "doctrine/data-fixtures": "^1.1|^2", - "doctrine/dbal": "^3.6|^4", - "doctrine/orm": "^2.15|^3", + "doctrine/dbal": "^4.3", + "doctrine/orm": "^3.4", "psr/log": "^1|^2|^3", - "symfony/cache": "^6.4|^7.0|^8.0", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/doctrine-messenger": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/form": "^7.2|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/lock": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/property-access": "^6.4|^7.0|^8.0", - "symfony/property-info": "^6.4|^7.0|^8.0", - "symfony/security-core": "^6.4|^7.0|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/translation": "^6.4|^7.0|^8.0", - "symfony/type-info": "^7.1.8|^8.0", - "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/cache": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/doctrine-messenger": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/form": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/property-info": "^8.0", + "symfony/security-core": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", + "symfony/type-info": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", "symfony/validator": "^7.4|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/var-dumper": "^7.4|^8.0" }, "type": "symfony-bridge", "autoload": { @@ -3119,7 +3086,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.4.9" + "source": "https://github.com/symfony/doctrine-bridge/tree/v8.0.9" }, "funding": [ { @@ -3139,7 +3106,7 @@ "type": "tidelift" } ], - "time": "2026-04-29T14:19:39+00:00" + "time": "2026-04-29T15:02:55+00:00" }, { "name": "symfony/dotenv", @@ -3463,16 +3430,16 @@ }, { "name": "symfony/filesystem", - "version": "v8.0.9", + "version": "v8.0.11", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "d1ec4543d5c6c2dac78503c2fae5ea0b3608ce40" + "reference": "224db910898ce1317b892a9a1338f1f8f17eb7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/d1ec4543d5c6c2dac78503c2fae5ea0b3608ce40", - "reference": "d1ec4543d5c6c2dac78503c2fae5ea0b3608ce40", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/224db910898ce1317b892a9a1338f1f8f17eb7c7", + "reference": "224db910898ce1317b892a9a1338f1f8f17eb7c7", "shasum": "" }, "require": { @@ -3509,7 +3476,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v8.0.9" + "source": "https://github.com/symfony/filesystem/tree/v8.0.11" }, "funding": [ { @@ -3529,7 +3496,7 @@ "type": "tidelift" } ], - "time": "2026-04-18T13:51:42+00:00" + "time": "2026-05-11T16:39:47+00:00" }, { "name": "symfony/finder", @@ -3601,58 +3568,50 @@ }, { "name": "symfony/form", - "version": "v7.4.9", + "version": "v8.0.9", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "b6c107af659106abec1771d9d7d22da528644d3a" + "reference": "dd9f73dd3b92e657c97aeeca1f47e981c635ea91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/b6c107af659106abec1771d9d7d22da528644d3a", - "reference": "b6c107af659106abec1771d9d7d22da528644d3a", + "url": "https://api.github.com/repos/symfony/form/zipball/dd9f73dd3b92e657c97aeeca1f47e981c635ea91", + "reference": "dd9f73dd3b92e657c97aeeca1f47e981c635ea91", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/event-dispatcher": "^6.4|^7.0|^8.0", - "symfony/options-resolver": "^7.3|^8.0", - "symfony/polyfill-ctype": "~1.8", + "php": ">=8.4", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/options-resolver": "^7.4|^8.0", + "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-intl-icu": "^1.21", - "symfony/polyfill-mbstring": "~1.0", - "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/property-access": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<6.4", - "symfony/error-handler": "<6.4", - "symfony/framework-bundle": "<6.4", - "symfony/http-kernel": "<6.4", "symfony/intl": "<7.4", - "symfony/translation": "<6.4.3|>=7.0,<7.0.3", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.4" + "symfony/validator": "<7.4" }, "require-dev": { "doctrine/collections": "^1.0|^2.0", - "symfony/clock": "^6.4|^7.0|^8.0", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/html-sanitizer": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/html-sanitizer": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", "symfony/intl": "^7.4|^8.0", - "symfony/security-core": "^6.4|^7.0|^8.0", - "symfony/security-csrf": "^6.4|^7.0|^8.0", - "symfony/translation": "^6.4.3|^7.0.3|^8.0", - "symfony/uid": "^6.4|^7.0|^8.0", - "symfony/validator": "^6.4.12|^7.1.5|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/security-core": "^7.4|^8.0", + "symfony/security-csrf": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3680,7 +3639,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v7.4.9" + "source": "https://github.com/symfony/form/tree/v8.0.9" }, "funding": [ { @@ -3700,37 +3659,37 @@ "type": "tidelift" } ], - "time": "2026-04-29T14:39:19+00:00" + "time": "2026-04-29T15:02:55+00:00" }, { "name": "symfony/framework-bundle", - "version": "v7.4.10", + "version": "v8.0.11", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "4b9cb207d72b2e4793f28a3c62ea0865098bea20" + "reference": "c0d53dba8de800f5dd1e9dac79683d8c59934d34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/4b9cb207d72b2e4793f28a3c62ea0865098bea20", - "reference": "4b9cb207d72b2e4793f28a3c62ea0865098bea20", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/c0d53dba8de800f5dd1e9dac79683d8c59934d34", + "reference": "c0d53dba8de800f5dd1e9dac79683d8c59934d34", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", "ext-xml": "*", - "php": ">=8.2", - "symfony/cache": "^6.4.12|^7.0|^8.0", + "php": ">=8.4", + "symfony/cache": "^7.4|^8.0", "symfony/config": "^7.4.4|^8.0.4", "symfony/dependency-injection": "^7.4.4|^8.0.4", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^7.3|^8.0", - "symfony/event-dispatcher": "^6.4|^7.0|^8.0", - "symfony/filesystem": "^7.1|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/filesystem": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", "symfony/http-foundation": "^7.4|^8.0", "symfony/http-kernel": "^7.4|^8.0", - "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php85": "^1.32", "symfony/routing": "^7.4|^8.0" }, @@ -3738,79 +3697,62 @@ "doctrine/persistence": "<1.3", "phpdocumentor/reflection-docblock": "<5.2|>=7", "phpdocumentor/type-resolver": "<1.5.1", - "symfony/asset": "<6.4", - "symfony/asset-mapper": "<6.4", - "symfony/clock": "<6.4", - "symfony/console": "<6.4", - "symfony/dom-crawler": "<6.4", - "symfony/dotenv": "<6.4", + "symfony/console": "<7.4", "symfony/form": "<7.4", - "symfony/http-client": "<6.4", - "symfony/lock": "<6.4", - "symfony/mailer": "<6.4", + "symfony/json-streamer": "<7.4", "symfony/messenger": "<7.4", - "symfony/mime": "<6.4.37|>=7.0,<7.4.9|>=8.0,<8.0.9", - "symfony/property-access": "<6.4", - "symfony/property-info": "<6.4", - "symfony/runtime": "<6.4.13|>=7.0,<7.1.6", - "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", - "symfony/security-core": "<6.4", - "symfony/security-csrf": "<7.2", - "symfony/serializer": "<7.2.5", - "symfony/stopwatch": "<6.4", - "symfony/translation": "<7.3", - "symfony/twig-bridge": "<6.4", - "symfony/twig-bundle": "<6.4", - "symfony/validator": "<6.4", - "symfony/web-profiler-bundle": "<6.4", - "symfony/webhook": "<7.2", + "symfony/mime": "<7.4.9|>=8.0,<8.0.9", + "symfony/security-csrf": "<7.4", + "symfony/serializer": "<7.4", + "symfony/translation": "<7.4", + "symfony/webhook": "<7.4", "symfony/workflow": "<7.4" }, "require-dev": { "doctrine/persistence": "^1.3|^2|^3", "dragonmantank/cron-expression": "^3.1", "phpdocumentor/reflection-docblock": "^5.2|^6.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", "seld/jsonlint": "^1.10", - "symfony/asset": "^6.4|^7.0|^8.0", - "symfony/asset-mapper": "^6.4|^7.0|^8.0", - "symfony/browser-kit": "^6.4|^7.0|^8.0", - "symfony/clock": "^6.4|^7.0|^8.0", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/css-selector": "^6.4|^7.0|^8.0", - "symfony/dom-crawler": "^6.4|^7.0|^8.0", - "symfony/dotenv": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/asset": "^7.4|^8.0", + "symfony/asset-mapper": "^7.4|^8.0", + "symfony/browser-kit": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/css-selector": "^7.4|^8.0", + "symfony/dom-crawler": "^7.4|^8.0", + "symfony/dotenv": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", "symfony/form": "^7.4|^8.0", - "symfony/html-sanitizer": "^6.4|^7.0|^8.0", - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/json-streamer": "^7.3|^8.0", - "symfony/lock": "^6.4|^7.0|^8.0", - "symfony/mailer": "^6.4|^7.0|^8.0", + "symfony/html-sanitizer": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/json-streamer": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/mailer": "^7.4|^8.0", "symfony/messenger": "^7.4|^8.0", - "symfony/mime": "^6.4.37|^7.4.9|^8.0.9", - "symfony/notifier": "^6.4|^7.0|^8.0", - "symfony/object-mapper": "^7.3|^8.0", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/property-info": "^6.4|^7.0|^8.0", - "symfony/rate-limiter": "^6.4|^7.0|^8.0", - "symfony/runtime": "^6.4.13|^7.1.6|^8.0", - "symfony/scheduler": "^6.4.4|^7.0.4|^8.0", - "symfony/security-bundle": "^6.4|^7.0|^8.0", - "symfony/semaphore": "^6.4|^7.0|^8.0", - "symfony/serializer": "^7.2.5|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/string": "^6.4|^7.0|^8.0", - "symfony/translation": "^7.3|^8.0", - "symfony/twig-bundle": "^6.4|^7.0|^8.0", - "symfony/type-info": "^7.1.8|^8.0", - "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/mime": "^7.4.9|^8.0.9", + "symfony/notifier": "^7.4|^8.0", + "symfony/object-mapper": "^7.4.9|^8.0.9", + "symfony/polyfill-intl-icu": "^1.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-info": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0", + "symfony/runtime": "^7.4|^8.0", + "symfony/scheduler": "^7.4|^8.0", + "symfony/security-bundle": "^7.4|^8.0", + "symfony/semaphore": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/string": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", + "symfony/twig-bundle": "^7.4|^8.0", + "symfony/type-info": "^7.4.1|^8.0.1", + "symfony/uid": "^7.4|^8.0", "symfony/validator": "^7.4|^8.0", - "symfony/web-link": "^6.4|^7.0|^8.0", - "symfony/webhook": "^7.2|^8.0", + "symfony/web-link": "^7.4|^8.0", + "symfony/webhook": "^7.4|^8.0", "symfony/workflow": "^7.4|^8.0", - "symfony/yaml": "^7.3|^8.0", - "twig/twig": "^3.12" + "symfony/yaml": "^7.4|^8.0" }, "type": "symfony-bundle", "autoload": { @@ -3838,7 +3780,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v7.4.10" + "source": "https://github.com/symfony/framework-bundle/tree/v8.0.11" }, "funding": [ { @@ -3858,7 +3800,7 @@ "type": "tidelift" } ], - "time": "2026-05-05T11:48:54+00:00" + "time": "2026-05-13T12:07:53+00:00" }, { "name": "symfony/http-foundation", @@ -3942,16 +3884,16 @@ }, { "name": "symfony/http-kernel", - "version": "v7.4.10", + "version": "v7.4.11", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "23486f59234c6fd6e8f1bec97124f3829d686627" + "reference": "eb9d68199af3fcfb3fb4d2e227367b68f8c1bb88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/23486f59234c6fd6e8f1bec97124f3829d686627", - "reference": "23486f59234c6fd6e8f1bec97124f3829d686627", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/eb9d68199af3fcfb3fb4d2e227367b68f8c1bb88", + "reference": "eb9d68199af3fcfb3fb4d2e227367b68f8c1bb88", "shasum": "" }, "require": { @@ -4037,7 +3979,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.4.10" + "source": "https://github.com/symfony/http-kernel/tree/v7.4.11" }, "funding": [ { @@ -4057,7 +3999,7 @@ "type": "tidelift" } ], - "time": "2026-05-06T12:07:34+00:00" + "time": "2026-05-13T17:55:00+00:00" }, { "name": "symfony/monolog-bridge", @@ -4960,86 +4902,6 @@ ], "time": "2024-09-09T11:45:10+00:00" }, - { - "name": "symfony/polyfill-php83", - "version": "v1.37.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/3600c2cb22399e25bb226e4a135ce91eeb2a6149", - "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.37.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "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": "2026-04-10T17:25:58+00:00" - }, { "name": "symfony/polyfill-php84", "version": "v1.37.0", @@ -5202,16 +5064,16 @@ }, { "name": "symfony/process", - "version": "v8.0.8", + "version": "v8.0.11", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc" + "reference": "26d89e459f037d2873300605d0a07e7a8ef84db0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", - "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", + "url": "https://api.github.com/repos/symfony/process/zipball/26d89e459f037d2873300605d0a07e7a8ef84db0", + "reference": "26d89e459f037d2873300605d0a07e7a8ef84db0", "shasum": "" }, "require": { @@ -5243,7 +5105,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v8.0.8" + "source": "https://github.com/symfony/process/tree/v8.0.11" }, "funding": [ { @@ -5263,7 +5125,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-05-11T16:56:32+00:00" }, { "name": "symfony/property-access", @@ -5667,16 +5529,16 @@ }, { "name": "symfony/string", - "version": "v8.0.8", + "version": "v8.0.11", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ae9488f874d7603f9d2dfbf120203882b645d963" + "reference": "39be2ad058a3c0bd558edca23e65f009865d75ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ae9488f874d7603f9d2dfbf120203882b645d963", - "reference": "ae9488f874d7603f9d2dfbf120203882b645d963", + "url": "https://api.github.com/repos/symfony/string/zipball/39be2ad058a3c0bd558edca23e65f009865d75ff", + "reference": "39be2ad058a3c0bd558edca23e65f009865d75ff", "shasum": "" }, "require": { @@ -5733,7 +5595,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.0.8" + "source": "https://github.com/symfony/string/tree/v8.0.11" }, "funding": [ { @@ -5753,38 +5615,31 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-05-13T12:07:53+00:00" }, { "name": "symfony/translation", - "version": "v7.4.10", + "version": "v8.0.10", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "ada7578c30dd5feaa8259cff3e885069ea81ddde" + "reference": "f63e9342e12646a57c91ef8a366a4f9d8e557b67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/ada7578c30dd5feaa8259cff3e885069ea81ddde", - "reference": "ada7578c30dd5feaa8259cff3e885069ea81ddde", + "url": "https://api.github.com/repos/symfony/translation/zipball/f63e9342e12646a57c91ef8a366a4f9d8e557b67", + "reference": "f63e9342e12646a57c91ef8a366a4f9d8e557b67", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5.3|^3.3" + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation-contracts": "^3.6.1" }, "conflict": { "nikic/php-parser": "<5.0", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<6.4", - "symfony/yaml": "<6.4" + "symfony/service-contracts": "<2.5" }, "provide": { "symfony/translation-implementation": "2.3|3.0" @@ -5792,17 +5647,17 @@ "require-dev": { "nikic/php-parser": "^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/routing": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0|^8.0" + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -5833,7 +5688,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.4.10" + "source": "https://github.com/symfony/translation/tree/v8.0.10" }, "funding": [ { @@ -5853,7 +5708,7 @@ "type": "tidelift" } ], - "time": "2026-05-06T11:19:24+00:00" + "time": "2026-05-06T11:30:54+00:00" }, { "name": "symfony/translation-contracts", @@ -6047,45 +5902,39 @@ }, { "name": "symfony/twig-bundle", - "version": "v7.4.8", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "ba1e06d7ff1ebb1d1799b6608d925f4eaba88d95" + "reference": "f83767b78e2580ca9fe9a2cf6fcff19cd5389bc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/ba1e06d7ff1ebb1d1799b6608d925f4eaba88d95", - "reference": "ba1e06d7ff1ebb1d1799b6608d925f4eaba88d95", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/f83767b78e2580ca9fe9a2cf6fcff19cd5389bc1", + "reference": "f83767b78e2580ca9fe9a2cf6fcff19cd5389bc1", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", - "php": ">=8.2", + "php": ">=8.4", "symfony/config": "^7.4|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", - "symfony/twig-bridge": "^7.3|^8.0", - "twig/twig": "^3.12" - }, - "conflict": { - "symfony/framework-bundle": "<6.4", - "symfony/translation": "<6.4" + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/twig-bridge": "^7.4|^8.0" }, "require-dev": { - "symfony/asset": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", - "symfony/form": "^6.4|^7.0|^8.0", - "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", - "symfony/routing": "^6.4|^7.0|^8.0", - "symfony/runtime": "^6.4.13|^7.1.6", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/translation": "^6.4|^7.0|^8.0", - "symfony/web-link": "^6.4|^7.0|^8.0", - "symfony/yaml": "^6.4|^7.0|^8.0" + "symfony/asset": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", + "symfony/form": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", + "symfony/runtime": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", + "symfony/web-link": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" }, "type": "symfony-bundle", "autoload": { @@ -6113,7 +5962,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v7.4.8" + "source": "https://github.com/symfony/twig-bundle/tree/v8.0.8" }, "funding": [ { @@ -6133,7 +5982,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/type-info", @@ -6219,58 +6068,49 @@ }, { "name": "symfony/validator", - "version": "v7.4.10", + "version": "v8.0.10", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "c76458623af9a3fe3b2e5b09b36453f334c2a361" + "reference": "12bb4be483a8626bd1b2f46f5d44c9449cf4361f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/c76458623af9a3fe3b2e5b09b36453f334c2a361", - "reference": "c76458623af9a3fe3b2e5b09b36453f334c2a361", + "url": "https://api.github.com/repos/symfony/validator/zipball/12bb4be483a8626bd1b2f46f5d44c9449cf4361f", + "reference": "12bb4be483a8626bd1b2f46f5d44c9449cf4361f", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php83": "^1.27", + "php": ">=8.4", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.0", "symfony/translation-contracts": "^2.5|^3" }, "conflict": { "doctrine/lexer": "<1.1", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<7.0", - "symfony/expression-language": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/intl": "<6.4", - "symfony/property-info": "<6.4", - "symfony/translation": "<6.4.3|>=7.0,<7.0.3", - "symfony/var-exporter": "<6.4.25|>=7.0,<7.3.3", - "symfony/yaml": "<6.4" + "symfony/doctrine-bridge": "<7.4", + "symfony/expression-language": "<7.4" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3|^4", - "symfony/cache": "^6.4|^7.0|^8.0", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/intl": "^6.4|^7.0|^8.0", - "symfony/mime": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/property-access": "^6.4|^7.0|^8.0", - "symfony/property-info": "^6.4|^7.0|^8.0", - "symfony/string": "^6.4|^7.0|^8.0", - "symfony/translation": "^6.4.3|^7.0.3|^8.0", - "symfony/type-info": "^7.1.8", - "symfony/yaml": "^6.4|^7.0|^8.0" + "symfony/cache": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/property-info": "^7.4|^8.0", + "symfony/string": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", + "symfony/type-info": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6299,7 +6139,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.4.10" + "source": "https://github.com/symfony/validator/tree/v8.0.10" }, "funding": [ { @@ -6319,7 +6159,7 @@ "type": "tidelift" } ], - "time": "2026-05-05T15:30:56+00:00" + "time": "2026-05-05T16:03:11+00:00" }, { "name": "symfony/var-dumper", @@ -6490,28 +6330,27 @@ }, { "name": "symfony/yaml", - "version": "v7.4.10", + "version": "v8.0.11", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "c660d6538545a3e8e65a5621ee3d7a6d352892c7" + "reference": "48046fbd5567bd1717f278eaa2cfc3131f489984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/c660d6538545a3e8e65a5621ee3d7a6d352892c7", - "reference": "c660d6538545a3e8e65a5621ee3d7a6d352892c7", + "url": "https://api.github.com/repos/symfony/yaml/zipball/48046fbd5567bd1717f278eaa2cfc3131f489984", + "reference": "48046fbd5567bd1717f278eaa2cfc3131f489984", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.4", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<6.4" + "symfony/console": "<7.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0" + "symfony/console": "^7.4|^8.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -6542,7 +6381,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.4.10" + "source": "https://github.com/symfony/yaml/tree/v8.0.11" }, "funding": [ { @@ -6562,7 +6401,7 @@ "type": "tidelift" } ], - "time": "2026-05-05T08:01:55+00:00" + "time": "2026-05-13T12:07:53+00:00" }, { "name": "twig/twig", @@ -6733,40 +6572,39 @@ }, { "name": "doctrine/doctrine-fixtures-bundle", - "version": "3.7.3", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", - "reference": "4c3dfcc819ba2725a574f4286aa3f6459f582d5b" + "reference": "9e013ed10d49bf7746b07204d336384a7d9b5a4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/4c3dfcc819ba2725a574f4286aa3f6459f582d5b", - "reference": "4c3dfcc819ba2725a574f4286aa3f6459f582d5b", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/9e013ed10d49bf7746b07204d336384a7d9b5a4d", + "reference": "9e013ed10d49bf7746b07204d336384a7d9b5a4d", "shasum": "" }, "require": { - "doctrine/data-fixtures": "^1.5 || ^2.0", - "doctrine/doctrine-bundle": "^2.2", + "doctrine/data-fixtures": "^2.2", + "doctrine/doctrine-bundle": "^2.2 || ^3.0", "doctrine/orm": "^2.14.0 || ^3.0", - "doctrine/persistence": "^2.4 || ^3.0 || ^4", - "php": "^7.4 || ^8.0", - "psr/log": "^1 || ^2 || ^3", - "symfony/config": "^5.4 || ^6.0 || ^7.0", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "doctrine/persistence": "^2.4 || ^3.0 || ^4.0", + "php": "^8.1", + "psr/log": "^2 || ^3", + "symfony/config": "^6.4 || ^7.0 || ^8.0", + "symfony/console": "^6.4 || ^7.0 || ^8.0", + "symfony/dependency-injection": "^6.4 || ^7.0 || ^8.0", "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/doctrine-bridge": "^5.4.48 || ^6.4.16 || ^7.1.9", - "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0" + "symfony/doctrine-bridge": "^6.4.16 || ^7.1.9 || ^8.0", + "symfony/http-kernel": "^6.4 || ^7.0 || ^8.0" }, "conflict": { "doctrine/dbal": "< 3" }, "require-dev": { "doctrine/coding-standard": "14.0.0", - "phpstan/phpstan": "2.1.32", - "phpunit/phpunit": "^9.6.13 || 11.4.14", - "symfony/phpunit-bridge": "7.3.4" + "phpstan/phpstan": "2.1.11", + "phpunit/phpunit": "^10.5.38 || 11.4.14" }, "type": "symfony-bundle", "autoload": { @@ -6800,7 +6638,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", - "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.7.3" + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/4.3.1" }, "funding": [ { @@ -6816,7 +6654,7 @@ "type": "tidelift" } ], - "time": "2025-12-03T15:47:21+00:00" + "time": "2025-12-03T16:05:42+00:00" }, { "name": "myclabs/deep-copy", @@ -7056,35 +6894,35 @@ }, { "name": "phpunit/php-code-coverage", - "version": "10.1.16", + "version": "11.0.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-text-template": "^3.0.1", - "sebastian/code-unit-reverse-lookup": "^3.0.0", - "sebastian/complexity": "^3.2.0", - "sebastian/environment": "^6.1.0", - "sebastian/lines-of-code": "^2.0.2", - "sebastian/version": "^4.0.1", - "theseer/tokenizer": "^1.2.3" + "nikic/php-parser": "^5.7.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.1", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.3.1" }, "require-dev": { - "phpunit/phpunit": "^10.1" + "phpunit/phpunit": "^11.5.46" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -7093,7 +6931,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1.x-dev" + "dev-main": "11.0.x-dev" } }, "autoload": { @@ -7122,40 +6960,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" } ], - "time": "2024-08-22T04:31:57+00:00" + "time": "2025-12-24T07:01:01+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.1.0", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903", + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -7183,36 +7033,48 @@ "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/4.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" } ], - "time": "2023-08-31T06:24:48+00:00" + "time": "2026-02-02T13:52:54+00:00" }, { "name": "phpunit/php-invoker", - "version": "4.0.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcntl": "*" @@ -7220,7 +7082,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -7246,7 +7108,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" }, "funding": [ { @@ -7254,32 +7117,32 @@ "type": "github" } ], - "time": "2023-02-03T06:56:09+00:00" + "time": "2024-07-03T05:07:44+00:00" }, { "name": "phpunit/php-text-template", - "version": "3.0.1", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -7306,7 +7169,7 @@ "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/3.0.1" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" }, "funding": [ { @@ -7314,32 +7177,32 @@ "type": "github" } ], - "time": "2023-08-31T14:07:24+00:00" + "time": "2024-07-03T05:08:43+00:00" }, { "name": "phpunit/php-timer", - "version": "6.0.0", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -7365,7 +7228,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" }, "funding": [ { @@ -7373,20 +7237,20 @@ "type": "github" } ], - "time": "2023-02-03T06:57:52+00:00" + "time": "2024-07-03T05:09:35+00:00" }, { "name": "phpunit/phpunit", - "version": "10.5.63", + "version": "11.5.55", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "33198268dad71e926626b618f3ec3966661e4d90" + "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/33198268dad71e926626b618f3ec3966661e4d90", - "reference": "33198268dad71e926626b618f3ec3966661e4d90", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/adc7262fccc12de2b30f12a8aa0b33775d814f00", + "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00", "shasum": "" }, "require": { @@ -7399,23 +7263,24 @@ "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.16", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-invoker": "^4.0.0", - "phpunit/php-text-template": "^3.0.1", - "phpunit/php-timer": "^6.0.0", - "sebastian/cli-parser": "^2.0.1", - "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.5", - "sebastian/diff": "^5.1.1", - "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.4", - "sebastian/global-state": "^6.0.2", - "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.1", - "sebastian/type": "^4.0.0", - "sebastian/version": "^4.0.1" + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.12", + "phpunit/php-file-iterator": "^5.1.1", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.3", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.1", + "sebastian/exporter": "^6.3.2", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/recursion-context": "^6.0.3", + "sebastian/type": "^5.1.3", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" @@ -7426,7 +7291,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.5-dev" + "dev-main": "11.5-dev" } }, "autoload": { @@ -7458,7 +7323,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.63" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.55" }, "funding": [ { @@ -7482,32 +7347,32 @@ "type": "tidelift" } ], - "time": "2026-01-27T05:48:37+00:00" + "time": "2026-02-18T12:37:06+00:00" }, { "name": "sebastian/cli-parser", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -7531,7 +7396,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/2.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" }, "funding": [ { @@ -7539,32 +7404,32 @@ "type": "github" } ], - "time": "2024-03-02T07:12:49+00:00" + "time": "2024-07-03T04:41:36+00:00" }, { "name": "sebastian/code-unit", - "version": "2.0.0", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -7587,7 +7452,8 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" }, "funding": [ { @@ -7595,32 +7461,32 @@ "type": "github" } ], - "time": "2023-02-03T06:58:43+00:00" + "time": "2025-03-19T07:56:08+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -7642,7 +7508,8 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" }, "funding": [ { @@ -7650,36 +7517,39 @@ "type": "github" } ], - "time": "2023-02-03T06:59:15+00:00" + "time": "2024-07-03T04:45:54+00:00" }, { "name": "sebastian/comparator", - "version": "5.0.5", + "version": "6.3.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d" + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55dfef806eb7dfeb6e7a6935601fef866f8ca48d", - "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -7719,7 +7589,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.5" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3" }, "funding": [ { @@ -7739,33 +7609,33 @@ "type": "tidelift" } ], - "time": "2026-01-24T09:25:16+00:00" + "time": "2026-01-24T09:26:40+00:00" }, { "name": "sebastian/complexity", - "version": "3.2.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -7789,7 +7659,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" }, "funding": [ { @@ -7797,33 +7667,33 @@ "type": "github" } ], - "time": "2023-12-21T08:37:17+00:00" + "time": "2024-07-03T04:49:50+00:00" }, { "name": "sebastian/diff", - "version": "5.1.1", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -7856,7 +7726,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" }, "funding": [ { @@ -7864,27 +7734,27 @@ "type": "github" } ], - "time": "2024-03-02T07:15:17+00:00" + "time": "2024-07-03T04:53:05+00:00" }, { "name": "sebastian/environment", - "version": "6.1.0", + "version": "7.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.3" }, "suggest": { "ext-posix": "*" @@ -7892,7 +7762,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "7.2-dev" } }, "autoload": { @@ -7920,42 +7790,54 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" } ], - "time": "2024-03-23T08:47:14+00:00" + "time": "2025-05-21T11:55:47+00:00" }, { "name": "sebastian/exporter", - "version": "5.1.4", + "version": "6.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "0735b90f4da94969541dac1da743446e276defa6" + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", - "reference": "0735b90f4da94969541dac1da743446e276defa6", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -7998,7 +7880,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" }, "funding": [ { @@ -8018,35 +7900,35 @@ "type": "tidelift" } ], - "time": "2025-09-24T06:09:11+00:00" + "time": "2025-09-24T06:12:51+00:00" }, { "name": "sebastian/global-state", - "version": "6.0.2", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -8072,7 +7954,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/6.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" }, "funding": [ { @@ -8080,33 +7962,33 @@ "type": "github" } ], - "time": "2024-03-02T07:19:19+00:00" + "time": "2024-07-03T04:57:36+00:00" }, { "name": "sebastian/lines-of-code", - "version": "2.0.2", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -8130,7 +8012,7 @@ "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/2.0.2" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" }, "funding": [ { @@ -8138,34 +8020,34 @@ "type": "github" } ], - "time": "2023-12-21T08:38:20+00:00" + "time": "2024-07-03T04:58:38+00:00" }, { "name": "sebastian/object-enumerator", - "version": "5.0.0", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -8187,7 +8069,8 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" }, "funding": [ { @@ -8195,32 +8078,32 @@ "type": "github" } ], - "time": "2023-02-03T07:08:32+00:00" + "time": "2024-07-03T05:00:13+00:00" }, { "name": "sebastian/object-reflector", - "version": "3.0.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -8242,7 +8125,8 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" }, "funding": [ { @@ -8250,32 +8134,32 @@ "type": "github" } ], - "time": "2023-02-03T07:06:18+00:00" + "time": "2024-07-03T05:01:32+00:00" }, { "name": "sebastian/recursion-context", - "version": "5.0.1", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", - "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -8306,7 +8190,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/5.0.1" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" }, "funding": [ { @@ -8326,32 +8210,32 @@ "type": "tidelift" } ], - "time": "2025-08-10T07:50:56+00:00" + "time": "2025-08-13T04:42:22+00:00" }, { "name": "sebastian/type", - "version": "4.0.0", + "version": "5.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -8374,37 +8258,50 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" } ], - "time": "2023-02-03T07:10:45+00:00" + "time": "2025-08-09T06:55:48+00:00" }, { "name": "sebastian/version", - "version": "4.0.1", + "version": "5.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -8427,7 +8324,8 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" }, "funding": [ { @@ -8435,46 +8333,93 @@ "type": "github" } ], - "time": "2023-02-07T11:34:05+00:00" + "time": "2024-10-09T05:16:32+00:00" + }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v7.4.9", + "version": "v8.0.11", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "36dd8b8c05da059925c5804641aad9159e5b73e8" + "reference": "5b80ded3fc1c76c6587be3f7b74bd0f8d9e6d747" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/36dd8b8c05da059925c5804641aad9159e5b73e8", - "reference": "36dd8b8c05da059925c5804641aad9159e5b73e8", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/5b80ded3fc1c76c6587be3f7b74bd0f8d9e6d747", + "reference": "5b80ded3fc1c76c6587be3f7b74bd0f8d9e6d747", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", - "php": ">=8.2", - "symfony/config": "^7.3|^8.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", - "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", - "symfony/routing": "^6.4|^7.0|^8.0", - "symfony/twig-bundle": "^6.4|^7.0|^8.0", - "twig/twig": "^3.15" + "php": ">=8.4", + "symfony/config": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", + "symfony/twig-bundle": "^7.4|^8.0" }, "conflict": { - "symfony/form": "<6.4", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", - "symfony/serializer": "<7.2", - "symfony/workflow": "<7.3" + "symfony/serializer": "<7.4", + "symfony/workflow": "<7.4" }, "require-dev": { - "symfony/browser-kit": "^6.4|^7.0|^8.0", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/css-selector": "^6.4|^7.0|^8.0", - "symfony/runtime": "^6.4.13|^7.1.6|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0" + "symfony/browser-kit": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/css-selector": "^7.4|^8.0", + "symfony/runtime": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0" }, "type": "symfony-bundle", "autoload": { @@ -8505,7 +8450,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.4.9" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v8.0.11" }, "funding": [ { @@ -8525,7 +8470,7 @@ "type": "tidelift" } ], - "time": "2026-04-22T15:21:55+00:00" + "time": "2026-05-11T13:06:45+00:00" }, { "name": "theseer/tokenizer", @@ -8580,12 +8525,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "^8.2" }, - "platform-dev": {}, - "plugin-api-version": "2.9.0" + "platform-dev": [], + "plugin-api-version": "2.6.0" } diff --git a/phpunit.xml.dist b/phpunit.xml.dist index d85a151..8e20d1d 100755 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,8 +1,9 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/11.0/phpunit.xsd" + bootstrap="vendor/autoload.php" + colors="true"> @@ -10,24 +11,18 @@ - - - + + src/ - - vendor - lib - src/*/*Bundle/Resources - src/*/*Bundle/Tests - src/*/Bundle/*Bundle/Resources - src/*/Bundle/*Bundle/Tests - - - + + + src/App/Tests + + - + \ No newline at end of file diff --git a/src/App/Command/ImportProjectCommand.php b/src/App/Command/ImportProjectCommand.php index 5734dfe..ef2642a 100644 --- a/src/App/Command/ImportProjectCommand.php +++ b/src/App/Command/ImportProjectCommand.php @@ -15,7 +15,7 @@ public function __construct(private ImportProjectTask $importProjectTask) parent::__construct(); } - protected function configure() + protected function configure(): void { $this ->setName('app:import-project') diff --git a/src/App/Command/ReimportAllProjectsCommand.php b/src/App/Command/ReimportAllProjectsCommand.php index bfdf2b2..6a4a6a0 100644 --- a/src/App/Command/ReimportAllProjectsCommand.php +++ b/src/App/Command/ReimportAllProjectsCommand.php @@ -17,7 +17,7 @@ public function __construct( parent::__construct(); } - protected function configure() + protected function configure(): void { $this ->setName('app:reimport-all-projects') diff --git a/src/App/Form/Type/DatalistType.php b/src/App/Form/Type/DatalistType.php index 0d7d146..e64bb0b 100644 --- a/src/App/Form/Type/DatalistType.php +++ b/src/App/Form/Type/DatalistType.php @@ -17,7 +17,7 @@ */ class DatalistType extends AbstractType { - public function getParent() + public function getParent(): ?string { return EntityType::class; } diff --git a/src/App/Form/Type/SearchPackageType.php b/src/App/Form/Type/SearchPackageType.php index 8c83f9e..99afeaf 100644 --- a/src/App/Form/Type/SearchPackageType.php +++ b/src/App/Form/Type/SearchPackageType.php @@ -11,7 +11,7 @@ class SearchPackageType extends AbstractType { - public function buildForm(FormBuilderInterface $builder, array $options) + public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('package', DatalistType::class, [ @@ -32,7 +32,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) ->add('versionConstraint', VersionConstraintType::class); } - public function configureOptions(OptionsResolver $resolver) + public function configureOptions(OptionsResolver $resolver): void { parent::configureOptions($resolver); $resolver->setDefault('translation_domain', false); diff --git a/src/App/Form/Type/VersionConstraintType.php b/src/App/Form/Type/VersionConstraintType.php index 5841bf7..1ea9526 100644 --- a/src/App/Form/Type/VersionConstraintType.php +++ b/src/App/Form/Type/VersionConstraintType.php @@ -15,7 +15,7 @@ class VersionConstraintType extends AbstractType { - public function buildForm(FormBuilderInterface $builder, array $options) + public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('operator', ChoiceType::class, [ @@ -70,7 +70,7 @@ public function reverseTransform($value) }); } - public function configureOptions(OptionsResolver $resolver) + public function configureOptions(OptionsResolver $resolver): void { } } diff --git a/src/App/Tests/ProjectImport/ImportProjectTaskTest.php b/src/App/Tests/ProjectImport/ImportProjectTaskTest.php index f07e8aa..a29ce01 100644 --- a/src/App/Tests/ProjectImport/ImportProjectTaskTest.php +++ b/src/App/Tests/ProjectImport/ImportProjectTaskTest.php @@ -37,6 +37,14 @@ protected function setUp(): void ); } + protected function tearDown(): void + { + // Symfony's ErrorHandler::register() adds an exception handler on kernel boot in debug mode. + // Restore it here so PHPUnit 11's exception-handler-depth check passes. + restore_exception_handler(); + parent::tearDown(); + } + /** * @test */ From dc27a439cb3bfc7cfc66b5426d7d133799312bc1 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 23:01:09 +0200 Subject: [PATCH 16/51] Apply php-cs-fixer --- src/App/Command/ReimportAllProjectsCommand.php | 2 +- src/App/Controller/ImportRepositoriesController.php | 4 ++-- src/App/Controller/UsageSearchController.php | 2 +- src/App/Factory/VcsDriverFactory.php | 3 +-- src/App/Repository/PackageRepository.php | 2 +- src/App/Repository/ProjectRepository.php | 2 +- src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php | 2 +- src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php | 2 +- src/Kernel.php | 2 +- src/routing.php | 2 +- 10 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/App/Command/ReimportAllProjectsCommand.php b/src/App/Command/ReimportAllProjectsCommand.php index 6a4a6a0..22f021b 100644 --- a/src/App/Command/ReimportAllProjectsCommand.php +++ b/src/App/Command/ReimportAllProjectsCommand.php @@ -2,8 +2,8 @@ namespace App\Command; -use App\Repository\ProjectRepository; use App\ProjectImport\ImportProjectTask; +use App\Repository\ProjectRepository; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; diff --git a/src/App/Controller/ImportRepositoriesController.php b/src/App/Controller/ImportRepositoriesController.php index 4baa616..86b48bd 100644 --- a/src/App/Controller/ImportRepositoriesController.php +++ b/src/App/Controller/ImportRepositoriesController.php @@ -3,11 +3,11 @@ namespace App\Controller; use App\ProjectImport\ImportProjectTask; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Validator\Constraints\NotBlank; use Twig\Environment; @@ -66,7 +66,7 @@ private function getProjectImportForm() TextareaType::class, [ 'label' => 'Repository URLs separated by comma', - 'constraints' => [new NotBlank()] + 'constraints' => [new NotBlank()], ] )->setMethod('POST') ->getForm(); diff --git a/src/App/Controller/UsageSearchController.php b/src/App/Controller/UsageSearchController.php index c726f6c..84f1d0d 100644 --- a/src/App/Controller/UsageSearchController.php +++ b/src/App/Controller/UsageSearchController.php @@ -2,8 +2,8 @@ namespace App\Controller; -use App\Repository\PackageRepository; use App\Entity\VersionConstraint; +use App\Repository\PackageRepository; use Composer\Semver\VersionParser; use InvalidArgumentException; use Symfony\Component\HttpFoundation\RedirectResponse; diff --git a/src/App/Factory/VcsDriverFactory.php b/src/App/Factory/VcsDriverFactory.php index 5614d75..69642e7 100644 --- a/src/App/Factory/VcsDriverFactory.php +++ b/src/App/Factory/VcsDriverFactory.php @@ -21,8 +21,7 @@ public function __construct( #[Autowire(param: 'app.github.token')] private ?string $githubOAuthToken = null, ?array $drivers = null, - ) - { + ) { $this->drivers = $drivers ?: [ 'github' => 'Composer\Repository\Vcs\GitHubDriver', 'gitlab' => 'Composer\Repository\Vcs\GitLabDriver', diff --git a/src/App/Repository/PackageRepository.php b/src/App/Repository/PackageRepository.php index 16a4a77..3837257 100644 --- a/src/App/Repository/PackageRepository.php +++ b/src/App/Repository/PackageRepository.php @@ -17,4 +17,4 @@ public function add(Package $package): void { $this->getEntityManager()->persist($package); } -} \ No newline at end of file +} diff --git a/src/App/Repository/ProjectRepository.php b/src/App/Repository/ProjectRepository.php index a70e723..1afd91a 100644 --- a/src/App/Repository/ProjectRepository.php +++ b/src/App/Repository/ProjectRepository.php @@ -17,4 +17,4 @@ public function add(Project $project): void { $this->getEntityManager()->persist($project); } -} \ No newline at end of file +} diff --git a/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php b/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php index 6676818..f6bc5b4 100644 --- a/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php +++ b/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php @@ -3,8 +3,8 @@ namespace App\Tests\ProjectImport; use App\Entity\Package; -use App\Repository\PackageRepository; use App\ProjectImport\DoctrinePackageProvider; +use App\Repository\PackageRepository; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; diff --git a/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php b/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php index 67bcef2..c4ee954 100644 --- a/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php +++ b/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php @@ -3,8 +3,8 @@ namespace App\Tests\ProjectImport; use App\Entity\Project; -use App\Repository\ProjectRepository; use App\ProjectImport\DoctrineProjectProvider; +use App\Repository\ProjectRepository; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; diff --git a/src/Kernel.php b/src/Kernel.php index 2f30850..8f0646e 100644 --- a/src/Kernel.php +++ b/src/Kernel.php @@ -30,4 +30,4 @@ public function getLogDir(): string { return __DIR__.'/../logs'; } -} \ No newline at end of file +} diff --git a/src/routing.php b/src/routing.php index 7d240aa..27f4304 100644 --- a/src/routing.php +++ b/src/routing.php @@ -6,4 +6,4 @@ $routes->import(__DIR__.'/App/Controller/', 'attribute') ->prefix('/') ->defaults(['_locale' => 'en']); -}; \ No newline at end of file +}; From 913e274a48d2b6987246a4407d5f3d441cd1db0c Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 23:42:43 +0200 Subject: [PATCH 17/51] declare(strict_types=1) in all PHP files --- src/App/Command/ImportProjectCommand.php | 2 ++ src/App/Command/ReimportAllProjectsCommand.php | 2 ++ src/App/Controller/ImportRepositoriesController.php | 2 ++ src/App/Controller/MainController.php | 2 ++ src/App/Controller/PackageController.php | 2 ++ src/App/Controller/ProjectController.php | 2 ++ src/App/Controller/SettingsController.php | 2 ++ src/App/Controller/UsageSearchController.php | 2 ++ src/App/Controller/WebhookController.php | 2 ++ src/App/DataFixtures/AppFixtures.php | 2 ++ src/App/Entity/Package.php | 2 ++ src/App/Entity/PackageVersion.php | 2 ++ src/App/Entity/Project.php | 2 ++ src/App/Entity/VersionConstraint.php | 2 ++ src/App/Exception/InsufficientVcsAccessException.php | 2 ++ .../Exception/ProjectHasNoComposerPackageUsageInfoException.php | 2 ++ src/App/Factory/VcsDriverFactory.php | 2 ++ src/App/Form/Type/DatalistType.php | 2 ++ src/App/Form/Type/SearchPackageType.php | 2 ++ src/App/Form/Type/VersionConstraintType.php | 2 ++ src/App/ProjectImport/ComposerPackageFetcher.php | 2 ++ src/App/ProjectImport/DoctrinePackageProvider.php | 2 ++ src/App/ProjectImport/DoctrineProjectProvider.php | 2 ++ src/App/ProjectImport/ImportProjectTask.php | 2 ++ src/App/ProjectImport/LockFileFetcher.php | 2 ++ src/App/ProjectImport/LockFileParser.php | 2 ++ src/App/ProjectImport/PackageProviderInterface.php | 2 ++ src/App/ProjectImport/PackageVersionFetcher.php | 2 ++ src/App/ProjectImport/ProjectProviderInterface.php | 2 ++ src/App/Repository/PackageRepository.php | 2 ++ src/App/Repository/ProjectRepository.php | 2 ++ src/App/Tests/Entity/PackageTest.php | 2 ++ src/App/Tests/Entity/PackageVersionTest.php | 2 ++ src/App/Tests/Entity/ProjectTest.php | 2 ++ src/App/Tests/Entity/VersionConstraintTest.php | 2 ++ src/App/Tests/Factory/VcsDriverFactoryTest.php | 2 ++ src/App/Tests/ProjectImport/ComposerPackageFetcherTest.php | 2 ++ src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php | 2 ++ src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php | 2 ++ src/App/Tests/ProjectImport/ImportProjectTaskTest.php | 2 ++ src/App/Tests/ProjectImport/LockFileFetcherTest.php | 2 ++ src/App/Tests/ProjectImport/LockFileParserTest.php | 2 ++ src/App/Tests/ProjectImport/PackageVersionFetcherTest.php | 2 ++ src/Kernel.php | 2 ++ src/routing.php | 2 ++ src/routing_development.php | 2 ++ 46 files changed, 92 insertions(+) diff --git a/src/App/Command/ImportProjectCommand.php b/src/App/Command/ImportProjectCommand.php index ef2642a..bc09a6b 100644 --- a/src/App/Command/ImportProjectCommand.php +++ b/src/App/Command/ImportProjectCommand.php @@ -1,5 +1,7 @@ Date: Wed, 13 May 2026 23:45:28 +0200 Subject: [PATCH 18/51] Replace DatalistType wrapper with EntityType + block_prefix option DatalistType was only a workaround for the missing block_prefix option in Symfony < 4. --- src/App/Form/Type/DatalistType.php | 26 ------------------------- src/App/Form/Type/SearchPackageType.php | 4 +++- 2 files changed, 3 insertions(+), 27 deletions(-) delete mode 100644 src/App/Form/Type/DatalistType.php diff --git a/src/App/Form/Type/DatalistType.php b/src/App/Form/Type/DatalistType.php deleted file mode 100644 index 1307ccc..0000000 --- a/src/App/Form/Type/DatalistType.php +++ /dev/null @@ -1,26 +0,0 @@ - 'datalist'] - * - * @see https://symfony.com/doc/4.x/form/form_themes.html#custom-fragment-naming-for-individual-fields - * - * @see ../../Resources/views/Form/fields.html.twig - */ -class DatalistType extends AbstractType -{ - public function getParent(): ?string - { - return EntityType::class; - } -} diff --git a/src/App/Form/Type/SearchPackageType.php b/src/App/Form/Type/SearchPackageType.php index 7b59d17..97511d2 100644 --- a/src/App/Form/Type/SearchPackageType.php +++ b/src/App/Form/Type/SearchPackageType.php @@ -6,6 +6,7 @@ use App\Entity\Package; use Doctrine\ORM\EntityRepository; +use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -16,7 +17,8 @@ class SearchPackageType extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options): void { $builder - ->add('package', DatalistType::class, [ + ->add('package', EntityType::class, [ + 'block_prefix' => 'datalist', 'label' => 'Package name', 'class' => Package::class, 'choice_label' => 'name', From 9b93f9ae83449c1ebdbb4084ba180276b4b6e3f1 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 23:50:01 +0200 Subject: [PATCH 19/51] Modernize tests - use typed properties - use #[Test]/#[DataProvider] attributes - add return types - use arrow functions - use assertNotEmpty --- src/App/Tests/Entity/PackageTest.php | 30 ++++++----------- src/App/Tests/Entity/PackageVersionTest.php | 32 +++++++------------ src/App/Tests/Entity/ProjectTest.php | 18 ++++------- .../Tests/Entity/VersionConstraintTest.php | 23 ++++++------- .../Tests/Factory/VcsDriverFactoryTest.php | 12 +++---- .../ComposerPackageFetcherTest.php | 20 ++++-------- .../DoctrinePackageProviderTest.php | 18 ++++------- .../DoctrineProjectProviderTest.php | 30 +++++++---------- .../ProjectImport/ImportProjectTaskTest.php | 12 +++---- .../ProjectImport/LockFileFetcherTest.php | 17 +++------- .../ProjectImport/LockFileParserTest.php | 26 ++++++--------- .../PackageVersionFetcherTest.php | 22 ++++--------- 12 files changed, 88 insertions(+), 172 deletions(-) diff --git a/src/App/Tests/Entity/PackageTest.php b/src/App/Tests/Entity/PackageTest.php index 2b728e2..2311626 100644 --- a/src/App/Tests/Entity/PackageTest.php +++ b/src/App/Tests/Entity/PackageTest.php @@ -5,6 +5,7 @@ namespace App\Tests\Entity; use App\Entity\Package; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; class PackageTest extends TestCase @@ -12,36 +13,27 @@ class PackageTest extends TestCase public const name = 'webfactory/bar'; public const description = 'foo'; - /** - * @var Package - */ - private $package; + private Package $package; protected function setUp(): void { $this->package = new Package(self::name, self::description); } - /** - * @test - */ - public function getNameReturnsName() + #[Test] + public function getNameReturnsName(): void { $this->assertSame(self::name, $this->package->getName()); } - /** - * @test - */ - public function getDescriptionReturnsDescription() + #[Test] + public function getDescriptionReturnsDescription(): void { $this->assertSame(self::description, $this->package->getDescription()); } - /** - * @test - */ - public function getVersionReturnsSameInstanceOnRepeatedCallsWithSamePrettyVersionString() + #[Test] + public function getVersionReturnsSameInstanceOnRepeatedCallsWithSamePrettyVersionString(): void { $first = $this->package->getVersion('1.0.0'); $second = $this->package->getVersion('1.0.0'); @@ -49,10 +41,8 @@ public function getVersionReturnsSameInstanceOnRepeatedCallsWithSamePrettyVersio $this->assertSame($first, $second); } - /** - * @test - */ - public function getVersionCreatesOnlyOnePackageVersionForSamePrettyVersionString() + #[Test] + public function getVersionCreatesOnlyOnePackageVersionForSamePrettyVersionString(): void { $this->package->getVersion('1.0.0'); $this->package->getVersion('1.0.0'); diff --git a/src/App/Tests/Entity/PackageVersionTest.php b/src/App/Tests/Entity/PackageVersionTest.php index 06af808..074c3d0 100644 --- a/src/App/Tests/Entity/PackageVersionTest.php +++ b/src/App/Tests/Entity/PackageVersionTest.php @@ -8,54 +8,44 @@ use App\Entity\PackageVersion; use App\Entity\Project; use Doctrine\Common\Collections\ArrayCollection; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; class PackageVersionTest extends TestCase { public const version = '1.0.0'; - /** - * @var PackageVersion - */ - private $packageVersion; + private PackageVersion $packageVersion; protected function setUp(): void { $this->packageVersion = new PackageVersion(self::version, new Package('webfactory/foo')); } - /** - * @test - */ - public function addProjectAddsProject() + #[Test] + public function addProjectAddsProject(): void { $this->packageVersion->addUsingProject(new Project('bar')); - $this->assertTrue(count($this->packageVersion->getProjects()) > 0); + $this->assertNotEmpty($this->packageVersion->getProjects()); } - /** - * @test - */ - public function getVersionReturnsVersion() + #[Test] + public function getVersionReturnsVersion(): void { $this->assertSame(self::version, $this->packageVersion->getPrettyVersion()); } - /** - * @test - */ - public function getPackageReturnsAssociatedPackage() + #[Test] + public function getPackageReturnsAssociatedPackage(): void { $packageName = $this->packageVersion->getPackage()->getName(); $this->assertSame('webfactory/foo', $packageName); } - /** - * @test - */ - public function getProjectsReturnsArrayOfProjects() + #[Test] + public function getProjectsReturnsArrayOfProjects(): void { $this->packageVersion->addUsingProject(new Project('bar')); diff --git a/src/App/Tests/Entity/ProjectTest.php b/src/App/Tests/Entity/ProjectTest.php index 269ed3e..6a6bbe4 100644 --- a/src/App/Tests/Entity/ProjectTest.php +++ b/src/App/Tests/Entity/ProjectTest.php @@ -8,40 +8,34 @@ use App\Entity\PackageVersion; use App\Entity\Project; use Doctrine\Common\Collections\ArrayCollection; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; class ProjectTest extends TestCase { public const name = 'foo'; - /** - * @var Project - */ - private $project; + private Project $project; protected function setUp(): void { $this->project = new Project(self::name); } - /** - * @test - */ - public function addUsageAddsUsageToProjectAndProjectToPackageVersion() + #[Test] + public function addUsageAddsUsageToProjectAndProjectToPackageVersion(): void { $packageVersion = new PackageVersion('1.0.0', new Package('foo')); $this->project->addUsage($packageVersion); - $this->assertTrue(count($this->project->getPackageVersions()) > 0); + $this->assertNotEmpty($this->project->getPackageVersions()); $this->assertSame( self::name, $this->project->getPackageVersions()[0]->getProjects()[0]->getName() ); } - /** - * @test - */ + #[Test] public function setUsedPackageVersionsSetsAssociationOnProjectAndPackageVersion(): void { $packageVersion = new PackageVersion('1.0.0', new Package('foo/bar')); diff --git a/src/App/Tests/Entity/VersionConstraintTest.php b/src/App/Tests/Entity/VersionConstraintTest.php index 86b2db3..7f0ebaf 100644 --- a/src/App/Tests/Entity/VersionConstraintTest.php +++ b/src/App/Tests/Entity/VersionConstraintTest.php @@ -8,6 +8,8 @@ use App\Entity\PackageVersion; use App\Entity\VersionConstraint; use Generator; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; class VersionConstraintTest extends TestCase @@ -30,24 +32,19 @@ public static function provideCases(): Generator yield ['all', '2.0.0', ['1.0.0', '2.0.0', '3.0.0'], []]; } - /** - * @test - * - * @dataProvider provideCases - */ - public function versionConstraintMatches(string $operator, string $version, array $expectedMatches, array $nonMatches) + #[Test] + #[DataProvider('provideCases')] + public function versionConstraintMatches(string $operator, string $version, array $expectedMatches, array $nonMatches): void { $versionConstraint = new VersionConstraint($operator, $version); $packageVersions = array_merge( - array_map(function ($v) { return new PackageVersion($v, new Package('foo')); }, $expectedMatches), - array_map(function ($v) { return new PackageVersion($v, new Package('foo')); }, $nonMatches) + array_map(fn($v) => new PackageVersion($v, new Package('foo')), $expectedMatches), + array_map(fn($v) => new PackageVersion($v, new Package('foo')), $nonMatches) ); $matches = $this->matchPackageVersions($versionConstraint, $packageVersions); - $matches = array_map(function ($match) { - return $match->getPrettyVersion(); - }, $matches); + $matches = array_map(fn($match) => $match->getPrettyVersion(), $matches); foreach ($expectedMatches as $expected) { $this->assertContains($expected, $matches); @@ -62,8 +59,8 @@ public function versionConstraintMatches(string $operator, string $version, arra /** * @param PackageVersion[] $packageVersions - * - * @return PackageVersion[] + * + * @return PackageVersion[] */ private function matchPackageVersions(VersionConstraint $versionConstraint, array $packageVersions): array { diff --git a/src/App/Tests/Factory/VcsDriverFactoryTest.php b/src/App/Tests/Factory/VcsDriverFactoryTest.php index fa063a8..eb124c6 100644 --- a/src/App/Tests/Factory/VcsDriverFactoryTest.php +++ b/src/App/Tests/Factory/VcsDriverFactoryTest.php @@ -6,24 +6,20 @@ use App\Factory\VcsDriverFactory; use Composer\Repository\Vcs\VcsDriverInterface; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; class VcsDriverFactoryTest extends TestCase { - /** - * @var VcsDriverFactory - */ - private $vcsDriverFactory; + private VcsDriverFactory $vcsDriverFactory; protected function setUp(): void { $this->vcsDriverFactory = new VcsDriverFactory(null); } - /** - * @test - */ - public function getDriverReturnsInstanceOfVcsDriverInterface() + #[Test] + public function getDriverReturnsInstanceOfVcsDriverInterface(): void { $driver = $this->vcsDriverFactory->getDriver('https://github.com/symfony/symfony'); $this->assertInstanceOf(VcsDriverInterface::class, $driver); diff --git a/src/App/Tests/ProjectImport/ComposerPackageFetcherTest.php b/src/App/Tests/ProjectImport/ComposerPackageFetcherTest.php index 3e59817..efbc895 100644 --- a/src/App/Tests/ProjectImport/ComposerPackageFetcherTest.php +++ b/src/App/Tests/ProjectImport/ComposerPackageFetcherTest.php @@ -7,14 +7,13 @@ use App\Exception\ProjectHasNoComposerPackageUsageInfoException; use App\ProjectImport\ComposerPackageFetcher; use App\ProjectImport\LockFileFetcher; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ComposerPackageFetcherTest extends TestCase { - /** - * @test - */ + #[Test] public function fetchPackagesReturnsArrayOfComposerPackages(): void { $composerPackageFetcher = new ComposerPackageFetcher( @@ -23,14 +22,12 @@ public function fetchPackagesReturnsArrayOfComposerPackages(): void $packages = $composerPackageFetcher->fetchPackages('https://foo.git'); - $this->assertTrue(count($packages) > 0); + $this->assertNotEmpty($packages); $this->assertIsArray($packages); } - /** - * @test - */ - public function throwsExceptionIfLockContentsAreNull() + #[Test] + public function throwsExceptionIfLockContentsAreNull(): void { $composerPackageFetcher = new ComposerPackageFetcher( $this->getLockFileFetcherMock(null) @@ -41,12 +38,7 @@ public function throwsExceptionIfLockContentsAreNull() $composerPackageFetcher->fetchPackages('https://foo.git'); } - /** - * @param string|null $lockContentsToReturn - * - * @return LockFileFetcher|MockObject - */ - private function getLockFileFetcherMock($lockContentsToReturn) + private function getLockFileFetcherMock(?string $lockContentsToReturn): LockFileFetcher&MockObject { $projectProviderMock = $this->createMock(LockFileFetcher::class); $projectProviderMock->expects($this->once()) diff --git a/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php b/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php index bb67264..43f8591 100644 --- a/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php +++ b/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php @@ -7,25 +7,21 @@ use App\Entity\Package; use App\ProjectImport\DoctrinePackageProvider; use App\Repository\PackageRepository; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class DoctrinePackageProviderTest extends TestCase { - /** - * @var PackageRepository|MockObject - */ - private $packageRepository; + private PackageRepository&MockObject $packageRepository; protected function setUp(): void { $this->packageRepository = $this->createMock(PackageRepository::class); } - /** - * @test - */ - public function providePackageReturnsNewPackageObjectIfNoneFound() + #[Test] + public function providePackageReturnsNewPackageObjectIfNoneFound(): void { $this->packageRepository ->expects($this->once()) @@ -39,10 +35,8 @@ public function providePackageReturnsNewPackageObjectIfNoneFound() $this->assertSame('Foo', $package->getName()); } - /** - * @test - */ - public function providePackageReturnsExistingPackageObjectIfFound() + #[Test] + public function providePackageReturnsExistingPackageObjectIfFound(): void { $this->packageRepository ->expects($this->once()) diff --git a/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php b/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php index 84e86c6..d7eb021 100644 --- a/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php +++ b/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php @@ -7,25 +7,21 @@ use App\Entity\Project; use App\ProjectImport\DoctrineProjectProvider; use App\Repository\ProjectRepository; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class DoctrineProjectProviderTest extends TestCase { - /** - * @var ProjectRepository|MockObject - */ - private $projectRepository; + private ProjectRepository&MockObject $projectRepository; protected function setUp(): void { $this->projectRepository = $this->createMock(ProjectRepository::class); } - /** - * @test - */ - public function provideProjectReturnsNewProjectObjectIfNoneFound() + #[Test] + public function provideProjectReturnsNewProjectObjectIfNoneFound(): void { $this->projectRepository ->expects($this->once()) @@ -33,16 +29,14 @@ public function provideProjectReturnsNewProjectObjectIfNoneFound() ->willReturn(null); $doctrineProjectProvider = new DoctrineProjectProvider($this->projectRepository); - $package = $doctrineProjectProvider->provideProject('Foo'); + $project = $doctrineProjectProvider->provideProject('Foo'); - $this->assertInstanceOf(Project::class, $package); - $this->assertSame('Foo', $package->getName()); + $this->assertInstanceOf(Project::class, $project); + $this->assertSame('Foo', $project->getName()); } - /** - * @test - */ - public function provideProjectReturnsExistingProjectObjectIfFound() + #[Test] + public function provideProjectReturnsExistingProjectObjectIfFound(): void { $this->projectRepository ->expects($this->once()) @@ -56,10 +50,8 @@ public function provideProjectReturnsExistingProjectObjectIfFound() $this->assertSame('Bar', $project->getName()); } - /** - * @test - */ - public function provideProjectTellsEntityManagerToPersistProvidedProjectObject() + #[Test] + public function provideProjectTellsEntityManagerToPersistProvidedProjectObject(): void { $this->projectRepository ->expects($this->once()) diff --git a/src/App/Tests/ProjectImport/ImportProjectTaskTest.php b/src/App/Tests/ProjectImport/ImportProjectTaskTest.php index b83e837..40fbe95 100644 --- a/src/App/Tests/ProjectImport/ImportProjectTaskTest.php +++ b/src/App/Tests/ProjectImport/ImportProjectTaskTest.php @@ -10,16 +10,14 @@ use App\ProjectImport\ProjectProviderInterface; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\EntityManagerInterface; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\MockObject\MockObject; use Psr\Log\NullLogger; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; class ImportProjectTaskTest extends KernelTestCase { - /** - * @var ImportProjectTask - */ - private $importProjectTask; + private ImportProjectTask $importProjectTask; private PackageVersionFetcher&MockObject $packageVersionFetcher; private VcsDriverFactory&MockObject $vcsDriverFactory; @@ -47,10 +45,8 @@ protected function tearDown(): void parent::tearDown(); } - /** - * @test - */ - public function import() + #[Test] + public function import(): void { $this->packageVersionFetcher->method('fetch')->willReturn( new ArrayCollection() diff --git a/src/App/Tests/ProjectImport/LockFileFetcherTest.php b/src/App/Tests/ProjectImport/LockFileFetcherTest.php index 8b9326c..f5f95ae 100644 --- a/src/App/Tests/ProjectImport/LockFileFetcherTest.php +++ b/src/App/Tests/ProjectImport/LockFileFetcherTest.php @@ -7,25 +7,21 @@ use App\Factory\VcsDriverFactory; use App\ProjectImport\LockFileFetcher; use Composer\Repository\Vcs\VcsDriver; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class LockFileFetcherTest extends TestCase { - /** - * @var LockFileFetcher - */ - private $lockFileFetcher; + private LockFileFetcher $lockFileFetcher; protected function setUp(): void { $this->lockFileFetcher = new LockFileFetcher($this->getVcsDriverFactoryMock()); } - /** - * @test - */ - public function getLockContentsReturnsComposerLockContentsAsString() + #[Test] + public function getLockContentsReturnsComposerLockContentsAsString(): void { $contents = $this->lockFileFetcher->getLockContents('https://foo.git'); $composerLockHashFromTestFile = '00ff294db3665b98a4e585c174e10928'; @@ -34,10 +30,7 @@ public function getLockContentsReturnsComposerLockContentsAsString() $this->assertIsString($contents); } - /** - * @return VcsDriverFactory|MockObject $vcsDriverFactory - */ - private function getVcsDriverFactoryMock() + private function getVcsDriverFactoryMock(): VcsDriverFactory&MockObject { $vcsDriverMock = $this->getMockBuilder(VcsDriver::class) ->disableOriginalConstructor() diff --git a/src/App/Tests/ProjectImport/LockFileParserTest.php b/src/App/Tests/ProjectImport/LockFileParserTest.php index c21d4a8..bf5bc86 100644 --- a/src/App/Tests/ProjectImport/LockFileParserTest.php +++ b/src/App/Tests/ProjectImport/LockFileParserTest.php @@ -7,46 +7,38 @@ use App\Exception\ProjectHasNoComposerPackageUsageInfoException; use App\ProjectImport\LockFileParser; use Composer\Package\Package; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; class LockFileParserTest extends TestCase { - /** - * @var string JSON - */ - private $lockFileContents; + private string $lockFileContents; protected function setUp(): void { $this->lockFileContents = file_get_contents(__DIR__.'/composer_test.lock'); } - /** - * @test - */ - public function getPackagesReturnsArrayOfComposerPackages() + #[Test] + public function getPackagesReturnsArrayOfComposerPackages(): void { $packages = LockFileParser::getPackages($this->lockFileContents); $this->assertIsArray($packages); $this->assertInstanceOf(Package::class, $packages[0]); - $this->assertTrue(count($packages) > 0); + $this->assertNotEmpty($packages); } - /** - * @test - */ - public function throwsExceptionIfArrayKeyPackagesDoesntExist() + #[Test] + public function throwsExceptionIfArrayKeyPackagesDoesntExist(): void { $this->expectException(ProjectHasNoComposerPackageUsageInfoException::class); LockFileParser::getPackages('{"_readme": ["bar"],"content-hash": "foo","aliases": []}'); } - /** - * @test - */ - public function throwsExceptionIfPackagesArrayInLockContentsIsEmpty() + #[Test] + public function throwsExceptionIfPackagesArrayInLockContentsIsEmpty(): void { $this->expectException(ProjectHasNoComposerPackageUsageInfoException::class); diff --git a/src/App/Tests/ProjectImport/PackageVersionFetcherTest.php b/src/App/Tests/ProjectImport/PackageVersionFetcherTest.php index 33ee929..d73cce3 100644 --- a/src/App/Tests/ProjectImport/PackageVersionFetcherTest.php +++ b/src/App/Tests/ProjectImport/PackageVersionFetcherTest.php @@ -9,25 +9,21 @@ use App\ProjectImport\PackageProviderInterface; use App\ProjectImport\PackageVersionFetcher; use Doctrine\Common\Collections\ArrayCollection; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class PackageVersionFetcherTest extends TestCase { - /** - * @var PackageVersionFetcher - */ - private $packageVersionFetcher; + private PackageVersionFetcher $packageVersionFetcher; protected function setUp(): void { $this->packageVersionFetcher = new PackageVersionFetcher($this->getPackageProviderMock(), $this->getComposerPackageFetcherMock()); } - /** - * @test - */ - public function fetchPackagesReturnsArrayCollectionOfPackageVersion() + #[Test] + public function fetchPackagesReturnsArrayCollectionOfPackageVersion(): void { $packageVersions = $this->packageVersionFetcher->fetch('https://foo.git'); @@ -36,10 +32,7 @@ public function fetchPackagesReturnsArrayCollectionOfPackageVersion() $this->assertSame('v1.0.0', $packageVersions[0]->getPrettyVersion()); } - /** - * @return PackageProviderInterface|MockObject - */ - private function getPackageProviderMock() + private function getPackageProviderMock(): PackageProviderInterface&MockObject { $packageProviderMock = $this->createMock(PackageProviderInterface::class); $packageProviderMock->expects($this->once()) @@ -49,10 +42,7 @@ private function getPackageProviderMock() return $packageProviderMock; } - /** - * @return ComposerPackageFetcher|MockObject - */ - private function getComposerPackageFetcherMock() + private function getComposerPackageFetcherMock(): ComposerPackageFetcher&MockObject { $composerPackageFetcherMock = $this->createMock(ComposerPackageFetcher::class); $composerPackageFetcherMock->expects($this->once()) From 78815be35444621fff5dec1727777a76af6b9ce6 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 23:52:14 +0200 Subject: [PATCH 20/51] Modernize classes - add native property types - add return types - use arrow functions - remove @var docblocks --- src/App/Entity/Package.php | 75 ++++-------------- src/App/Entity/PackageVersion.php | 61 ++++----------- src/App/Entity/Project.php | 78 +++++-------------- src/App/Entity/VersionConstraint.php | 23 +----- src/App/Factory/VcsDriverFactory.php | 21 +++-- src/App/Form/Type/SearchPackageType.php | 5 +- src/App/ProjectImport/ImportProjectTask.php | 14 +--- .../Tests/Entity/VersionConstraintTest.php | 10 +-- 8 files changed, 68 insertions(+), 219 deletions(-) diff --git a/src/App/Entity/Package.php b/src/App/Entity/Package.php index ea6ccad..390f4c8 100644 --- a/src/App/Entity/Package.php +++ b/src/App/Entity/Package.php @@ -19,98 +19,56 @@ class Package #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: 'integer')] - /** - * @var int - */ - private $id; + private ?int $id = null; #[ORM\Column(type: 'string', unique: true)] - /** - * @var string - */ - private $name; + private string $name; #[ORM\Column(type: 'string', nullable: true)] - /** - * @var string|null - */ - private $description; + private ?string $description; #[ORM\OneToMany(targetEntity: PackageVersion::class, mappedBy: 'package', cascade: ['persist', 'remove'])] #[ORM\JoinColumn(onDelete: 'CASCADE')] - /** - * @var Collection|PackageVersion[] - */ - private $versions; - - /** - * @param string $name - * @param string|null $description - */ - public function __construct($name, $description = null) + private Collection $versions; + + public function __construct(string $name, ?string $description = null) { $this->name = $name; $this->description = $description; $this->versions = new ArrayCollection(); } - /** - * @return int - */ - public function getId() + public function getId(): ?int { return $this->id; } - /** - * @return string - */ - public function getName() + public function getName(): string { return $this->name; } - /** - * @return string|null - */ - public function getDescription() + public function getDescription(): ?string { return $this->description; } - /** - * @param string $description - */ - public function setDescription($description) + public function setDescription(?string $description): void { $this->description = $description; } - /** - * @return Collection|PackageVersion[] - */ - public function getMatchingVersionsWithProjects(VersionConstraint $versionConstraint) + public function getMatchingVersionsWithProjects(VersionConstraint $versionConstraint): Collection { return $this->versions->filter( - function ($packageVersion) use ($versionConstraint) { - /* @var PackageVersion $packageVersion */ - return $versionConstraint->matches($packageVersion) && 0 !== $packageVersion->getProjects()->count(); - } + fn ($packageVersion) => $versionConstraint->matches($packageVersion) && 0 !== $packageVersion->getProjects()->count() ); } - /** - * @param string $prettyVersionString - * - * @return PackageVersion - */ - public function getVersion($prettyVersionString) + public function getVersion(string $prettyVersionString): PackageVersion { $packageVersion = $this->versions->filter( - function ($packageVersion) use ($prettyVersionString) { - /* @var PackageVersion $packageVersion */ - return $packageVersion->getPrettyVersion() === $prettyVersionString; - } + fn ($packageVersion) => $packageVersion->getPrettyVersion() === $prettyVersionString ); if ($packageVersion->isEmpty()) { @@ -123,10 +81,7 @@ function ($packageVersion) use ($prettyVersionString) { return $packageVersion->first(); } - /** - * @return Collection|PackageVersion[] - */ - public function getVersions() + public function getVersions(): Collection { return $this->versions; } diff --git a/src/App/Entity/PackageVersion.php b/src/App/Entity/PackageVersion.php index b7ebdc4..728cbbe 100644 --- a/src/App/Entity/PackageVersion.php +++ b/src/App/Entity/PackageVersion.php @@ -21,44 +21,29 @@ class PackageVersion #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: 'integer')] - /** - * @var int - */ - private $id; + private ?int $id = null; #[ORM\Column(name: 'prettyVersion', type: 'string')] - /** - * @var string - */ - private $prettyVersion; + private string $prettyVersion; #[ORM\ManyToOne(targetEntity: Package::class, inversedBy: 'versions', cascade: ['persist'])] - /** - * @var Package - */ - private $package; + private Package $package; #[ORM\ManyToMany(targetEntity: Project::class, inversedBy: 'usages')] #[ORM\JoinTable(name: 'packageversion_project', joinColumns: [new ORM\JoinColumn(name: 'packageversion_id', referencedColumnName: 'id')], inverseJoinColumns: [new ORM\JoinColumn(name: 'project_id', referencedColumnName: 'id')] )] - /** - * @var Collection|Project[] - */ - private $projects; - - /** - * @param string $prettyVersion - */ - public function __construct($prettyVersion, Package $package) + private Collection $projects; + + public function __construct(string $prettyVersion, Package $package) { $this->prettyVersion = $prettyVersion; $this->package = $package; $this->projects = new ArrayCollection(); } - public function addUsingProject(Project $project) + public function addUsingProject(Project $project): void { if ($this->projects->contains($project)) { return; @@ -67,7 +52,7 @@ public function addUsingProject(Project $project) $project->addUsage($this); } - public function removeUsingProject(Project $project) + public function removeUsingProject(Project $project): void { if (!$this->projects->contains($project)) { return; @@ -76,51 +61,33 @@ public function removeUsingProject(Project $project) $project->removeUsage($this); } - /** - * @return bool - */ - public function equals(PackageVersion $packageVersion) + public function equals(PackageVersion $packageVersion): bool { return $this->package->getId() === $packageVersion->getPackage()->getId() && $this->prettyVersion === $packageVersion->getPrettyVersion(); } - /** - * @return int - */ - public function getId() + public function getId(): ?int { return $this->id; } - /** - * @return string - */ - public function getPrettyVersion() + public function getPrettyVersion(): string { return $this->prettyVersion; } - /** - * @return string - */ - public function getNormalizedVersion() + public function getNormalizedVersion(): string { return (new VersionParser())->normalize($this->getPrettyVersion()); } - /** - * @return Package - */ - public function getPackage() + public function getPackage(): Package { return $this->package; } - /** - * @return Collection|Project[] - */ - public function getProjects() + public function getProjects(): Collection { return $this->projects; } diff --git a/src/App/Entity/Project.php b/src/App/Entity/Project.php index eab3ef2..be9cf7e 100644 --- a/src/App/Entity/Project.php +++ b/src/App/Entity/Project.php @@ -16,107 +16,65 @@ class Project #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: 'integer')] - /** - * @var int - */ - private $id; + private ?int $id = null; #[ORM\Column(type: 'string', unique: true)] - /** - * @var string - */ - private $name; + private string $name; #[ORM\Column(name: 'vcsUrl', type: 'string')] - /** - * @var string - */ - private $vcsUrl; + private ?string $vcsUrl = null; #[ORM\Column(type: 'string', nullable: true)] - /** - * @var string|null - */ - private $description; + private ?string $description = null; #[ORM\Column(type: 'boolean')] - /** - * @var bool - */ - public $archived = false; + public bool $archived = false; #[ORM\ManyToMany(targetEntity: PackageVersion::class, mappedBy: 'projects', cascade: ['persist'])] - /** - * @var Collection|PackageVersion[] - */ - private $packageVersions; - - /** - * @param string $name - */ - public function __construct($name) + private Collection $packageVersions; + + public function __construct(string $name) { $this->name = $name; $this->packageVersions = new ArrayCollection(); } - /** - * @return int - */ - public function getId() + public function getId(): ?int { return $this->id; } - /** - * @return string - */ - public function getName() + public function getName(): string { return $this->name; } - /** - * @return string - */ - public function getVcsUrl() + public function getVcsUrl(): ?string { return $this->vcsUrl; } - /** - * @return string|null - */ - public function getDescription() + public function getDescription(): ?string { return $this->description; } - /** - * @return Collection|PackageVersion[] - */ - public function getPackageVersions() + public function getPackageVersions(): Collection { return $this->packageVersions; } - /** - * @param string $vcsUrl - */ - public function setVcsUrl($vcsUrl) + public function setVcsUrl(string $vcsUrl): void { $this->vcsUrl = $vcsUrl; } - /** - * @param string $description - */ - public function setDescription($description) + public function setDescription(?string $description): void { $this->description = $description; } - public function setUsedPackageVersions(ArrayCollection $importedPackageVersions) + public function setUsedPackageVersions(ArrayCollection $importedPackageVersions): void { foreach ($this->packageVersions as $key => $packageVersion) { $packageVersionIsGoingToStay = false; @@ -151,7 +109,7 @@ public function setUsedPackageVersions(ArrayCollection $importedPackageVersions) } } - public function addUsage(PackageVersion $packageVersion) + public function addUsage(PackageVersion $packageVersion): void { // TODO: remove addUsage, then also remove from PackageVersion::addUsingProject()? if ($this->packageVersions->contains($packageVersion)) { @@ -161,7 +119,7 @@ public function addUsage(PackageVersion $packageVersion) $packageVersion->addUsingProject($this); } - public function removeUsage(PackageVersion $usage) + public function removeUsage(PackageVersion $usage): void { // TODO: remove removeUsage, then also remove from PackageVersion::removeUsingProject()? if (!$this->packageVersions->contains($usage)) { diff --git a/src/App/Entity/VersionConstraint.php b/src/App/Entity/VersionConstraint.php index 3a5945f..2403745 100644 --- a/src/App/Entity/VersionConstraint.php +++ b/src/App/Entity/VersionConstraint.php @@ -12,23 +12,11 @@ class VersionConstraint { public const VALID_OPERATORS = '(==|>=|<=|>|<|all)'; - /** - * @var string - */ - private $operator; + private string $operator; - /** - * @var ?string - */ - private $normalizedVersionString; + private ?string $normalizedVersionString = null; - /** - * @param string $operator - * @param string $versionString e.g. 1.0.0 - * - * @throws InvalidArgumentException - */ - public function __construct($operator, $versionString) + public function __construct(string $operator, string $versionString) { if (!preg_match(self::VALID_OPERATORS, $operator)) { throw new InvalidArgumentException('The operator must match the regex expression '.self::VALID_OPERATORS); @@ -41,10 +29,7 @@ public function __construct($operator, $versionString) } } - /** - * @return bool - */ - public function matches(PackageVersion $packageVersion) + public function matches(PackageVersion $packageVersion): bool { if ('all' === $this->operator) { return true; diff --git a/src/App/Factory/VcsDriverFactory.php b/src/App/Factory/VcsDriverFactory.php index b7043aa..8a1eb63 100644 --- a/src/App/Factory/VcsDriverFactory.php +++ b/src/App/Factory/VcsDriverFactory.php @@ -16,8 +16,13 @@ class VcsDriverFactory { - /** @var array ['platform' => VcsDriverInterface class ] */ - private $drivers; + /** + * @var array< + * string, // platform + * class-string + * > + */ + private array $drivers; public function __construct( #[Autowire(param: 'app.github.token')] @@ -34,12 +39,7 @@ public function __construct( ]; } - /** - * @param string $vcsUrl - * - * @throws InsufficientVcsAccessException - */ - public function getDriver($vcsUrl): VcsDriverInterface + public function getDriver(string $vcsUrl): VcsDriverInterface { $composerConfig = Factory::createConfig(); $io = $this->getIO(); @@ -63,10 +63,7 @@ public function getDriver($vcsUrl): VcsDriverInterface throw new NoVcsDriverFoundException('No VCS driver found for URL: '.$vcsUrl); } - /** - * @return NullIO - */ - private function getIO() + private function getIO(): NullIO { $io = new NullIO(); if (null !== $this->githubOAuthToken) { diff --git a/src/App/Form/Type/SearchPackageType.php b/src/App/Form/Type/SearchPackageType.php index 97511d2..1c4227d 100644 --- a/src/App/Form/Type/SearchPackageType.php +++ b/src/App/Form/Type/SearchPackageType.php @@ -23,10 +23,7 @@ public function buildForm(FormBuilderInterface $builder, array $options): void 'class' => Package::class, 'choice_label' => 'name', 'choice_value' => 'name', - 'query_builder' => function (EntityRepository $repo) { - return $repo->createQueryBuilder('p') - ->orderBy('p.name', 'ASC'); - }, + 'query_builder' => fn (EntityRepository $repo) => $repo->createQueryBuilder('p')->orderBy('p.name', 'ASC'), 'placeholder' => 'First choose a package', 'choice_translation_domain' => false, 'label_attr' => ['class' => 'sr-only'], diff --git a/src/App/ProjectImport/ImportProjectTask.php b/src/App/ProjectImport/ImportProjectTask.php index 3c571b9..53bba0c 100644 --- a/src/App/ProjectImport/ImportProjectTask.php +++ b/src/App/ProjectImport/ImportProjectTask.php @@ -23,12 +23,7 @@ public function __construct( ) { } - /** - * @param string $vcsUrl - * - * @return bool indicates import success|failure - */ - public function run($vcsUrl) + public function run(string $vcsUrl): bool { $this->logger->notice('Importing Repository '.$vcsUrl); @@ -71,12 +66,7 @@ public function run($vcsUrl) return true; } - /** - * @param string $vcsUrl - * - * @return string - */ - private function getProjectNameFromUrl($vcsUrl) + private function getProjectNameFromUrl(string $vcsUrl): string { $fromSlash = substr($vcsUrl, strrpos($vcsUrl, '/') + 1); $fromLastSlashToFirstPeriod = explode('.', $fromSlash)[0]; diff --git a/src/App/Tests/Entity/VersionConstraintTest.php b/src/App/Tests/Entity/VersionConstraintTest.php index 7f0ebaf..1177dfb 100644 --- a/src/App/Tests/Entity/VersionConstraintTest.php +++ b/src/App/Tests/Entity/VersionConstraintTest.php @@ -38,13 +38,13 @@ public function versionConstraintMatches(string $operator, string $version, arra { $versionConstraint = new VersionConstraint($operator, $version); $packageVersions = array_merge( - array_map(fn($v) => new PackageVersion($v, new Package('foo')), $expectedMatches), - array_map(fn($v) => new PackageVersion($v, new Package('foo')), $nonMatches) + array_map(fn ($v) => new PackageVersion($v, new Package('foo')), $expectedMatches), + array_map(fn ($v) => new PackageVersion($v, new Package('foo')), $nonMatches) ); $matches = $this->matchPackageVersions($versionConstraint, $packageVersions); - $matches = array_map(fn($match) => $match->getPrettyVersion(), $matches); + $matches = array_map(fn ($match) => $match->getPrettyVersion(), $matches); foreach ($expectedMatches as $expected) { $this->assertContains($expected, $matches); @@ -59,8 +59,8 @@ public function versionConstraintMatches(string $operator, string $version, arra /** * @param PackageVersion[] $packageVersions - * - * @return PackageVersion[] + * + * @return PackageVersion[] */ private function matchPackageVersions(VersionConstraint $versionConstraint, array $packageVersions): array { From c0ca2aa41f970719817f57c062eeb60bf2b8ccd5 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Wed, 13 May 2026 23:55:18 +0200 Subject: [PATCH 21/51] Migrate config from YAML to PHP --- src/App/Resources/config/services.php | 32 +++++++++++ src/Kernel.php | 4 +- src/config.default.php | 74 ++++++++++++++++++++++++ src/config.default.yml | 82 --------------------------- src/config.php | 10 ++++ src/config.yml | 3 - src/config_development.default.php | 43 ++++++++++++++ src/config_development.default.yml | 38 ------------- src/config_development.php | 11 ++++ src/config_development.yml | 4 -- src/config_production.default.php | 48 ++++++++++++++++ src/config_production.default.yml | 41 -------------- src/config_production.php | 11 ++++ src/config_production.yml | 4 -- src/config_test.default.php | 22 +++++++ src/config_test.default.yml | 14 ----- src/config_test.php | 11 ++++ src/config_test.yml | 4 -- src/config_testing.default.php | 30 ++++++++++ src/config_testing.default.yml | 20 ------- src/config_testing.php | 11 ++++ src/config_testing.yml | 4 -- 22 files changed, 305 insertions(+), 216 deletions(-) create mode 100644 src/App/Resources/config/services.php create mode 100644 src/config.default.php delete mode 100644 src/config.default.yml create mode 100644 src/config.php delete mode 100755 src/config.yml create mode 100644 src/config_development.default.php delete mode 100755 src/config_development.default.yml create mode 100644 src/config_development.php delete mode 100755 src/config_development.yml create mode 100644 src/config_production.default.php delete mode 100755 src/config_production.default.yml create mode 100644 src/config_production.php delete mode 100755 src/config_production.yml create mode 100644 src/config_test.default.php delete mode 100755 src/config_test.default.yml create mode 100644 src/config_test.php delete mode 100755 src/config_test.yml create mode 100644 src/config_testing.default.php delete mode 100755 src/config_testing.default.yml create mode 100644 src/config_testing.php delete mode 100755 src/config_testing.yml diff --git a/src/App/Resources/config/services.php b/src/App/Resources/config/services.php new file mode 100644 index 0000000..2704283 --- /dev/null +++ b/src/App/Resources/config/services.php @@ -0,0 +1,32 @@ +services(); + + $services->defaults() + ->autowire() + ->autoconfigure(); + + $services->load('App\\', '../../') + ->exclude([ + '../../Tests/', + '../../Entity/', + '../../Kernel.php', + '../../Resources/', + ]); + + $services->set('app.logging.web_processor', WebProcessor::class) + ->args([null, []]) + ->tag('monolog.processor'); + + $services->set('app.logging.line_formatter', LineFormatter::class) + ->args(['%app.logging.default_line_format%', '%app.logging.default_time_format%']) + ->call('includeStacktraces', [true]) + ->call('allowInlineLineBreaks', ['%app.logging.allow_inline_line_breaks%']); +}; diff --git a/src/Kernel.php b/src/Kernel.php index c922cde..9103094 100644 --- a/src/Kernel.php +++ b/src/Kernel.php @@ -15,8 +15,8 @@ class Kernel extends BaseKernel protected function configureContainer(ContainerConfigurator $container, LoaderInterface $loader, ContainerBuilder $builder): void { - $loader->load(__DIR__.'/config_'.$this->environment.'.yml'); - $loader->load(__DIR__.'/App/Resources/config/services.yml'); + $loader->load(__DIR__.'/config_'.$this->environment.'.php'); + $loader->load(__DIR__.'/App/Resources/config/services.php'); } protected function configureRoutes(RoutingConfigurator $routes): void diff --git a/src/config.default.php b/src/config.default.php new file mode 100644 index 0000000..47d709a --- /dev/null +++ b/src/config.default.php @@ -0,0 +1,74 @@ +parameters() + ->set('env(MYSQL_HOST)', 'mysql') + ->set('env(MYSQL_USER)', 'baton') + ->set('env(MYSQL_PASSWORD)', 'baton') + ->set('env(MYSQL_DATABASE)', 'baton') + ->set('env(MYSQL_PORT)', '3306') + ->set('mysql.host', '%env(MYSQL_HOST)%') + ->set('mysql.user', '%env(MYSQL_USER)%') + ->set('mysql.password', '%env(MYSQL_PASSWORD)%') + ->set('mysql.db', '%env(MYSQL_DATABASE)%') + ->set('mysql.port', '%env(MYSQL_PORT)%') + ->set('framework.trusted_hosts', ['127.0.0.1', 'localhost', '%env(HOSTNAME)%']) + ->set('app.logging.default_time_format', 'Y-m-d H:i:s.u T') + ->set('app.logging.allow_inline_line_breaks', false) + ->set('demo_mode', '%env(DEMO_MODE)%') + ->set('env(DEMO_MODE)', null) + ->set('secret', '%env(SECRET)%') + ->set('env(SECRET)', 'change_me') + ->set('app.github.token', '%env(GITHUB_OAUTH_TOKEN)%') + ->set('app.github.webhook_secret', '%env(GITHUB_WEBHOOK_SECRET)%') + ->set('env(GITHUB_OAUTH_TOKEN)', null) + ->set('env(GITHUB_WEBHOOK_SECRET)', null) + ->set('env(HOSTNAME)', 'localhost'); + + $container->extension('framework', [ + 'secret' => '%secret%', + 'form' => [ + 'enabled' => true, + 'csrf_protection' => ['enabled' => false], + ], + 'validation' => ['enable_attributes' => true], + 'translator' => ['fallback' => 'de_DE'], + 'session' => ['save_path' => null], + 'default_locale' => 'de_DE', + 'trusted_hosts' => '%framework.trusted_hosts%', + ]); + + $container->extension('twig', [ + 'strict_variables' => '%kernel.debug%', + 'form_themes' => ['Form/fields.html.twig'], + ]); + + $container->extension('doctrine', [ + 'dbal' => [ + 'host' => '%mysql.host%', + 'port' => '%mysql.port%', + 'dbname' => '%mysql.db%', + 'user' => '%mysql.user%', + 'password' => '%mysql.password%', + 'charset' => 'utf8', + 'schema_filter' => '~^(?!(_dbversion$|_fixed_tableid$|wfd_))~', + 'server_version' => '5.7', + ], + 'orm' => [ + 'enable_native_lazy_objects' => true, + 'mappings' => [ + 'App' => [ + 'is_bundle' => false, + 'type' => 'attribute', + 'dir' => '%kernel.project_dir%/src/App/Entity', + 'prefix' => 'App\\Entity', + 'alias' => 'App', + ], + ], + ], + ]); +}; diff --git a/src/config.default.yml b/src/config.default.yml deleted file mode 100644 index 5ef554d..0000000 --- a/src/config.default.yml +++ /dev/null @@ -1,82 +0,0 @@ -parameters: - env(MYSQL_HOST): 'mysql' - env(MYSQL_USER): 'baton' - env(MYSQL_PASSWORD): 'baton' - env(MYSQL_DATABASE): 'baton' - env(MYSQL_PORT): '3306' - - mysql.host: '%env(MYSQL_HOST)%' - mysql.user: '%env(MYSQL_USER)%' - mysql.password: '%env(MYSQL_PASSWORD)%' - mysql.db: '%env(MYSQL_DATABASE)%' - mysql.port: '%env(MYSQL_PORT)%' - - framework.trusted_hosts: ['127.0.0.1', 'localhost', '%env(HOSTNAME)%'] - - app.logging.default_time_format: "Y-m-d H:i:s.u T" # with microseconds and timezone, a format also Splunk can understand - app.logging.allow_inline_line_breaks: false - - demo_mode: '%env(DEMO_MODE)%' - env(DEMO_MODE): # default is null, set this environment variable on your server to enable demo mode and deactivate project imports via form - - secret: "%env(SECRET)%" - env(SECRET): "change_me" - app.github.token: '%env(GITHUB_OAUTH_TOKEN)%' - app.github.webhook_secret: '%env(GITHUB_WEBHOOK_SECRET)%' - env(GITHUB_OAUTH_TOKEN): ~ # default is null, set this environment variable on your server to communicate with private repositories on GitHub - env(GITHUB_WEBHOOK_SECRET): ~ # default is null, set this environment variable on your server to validate webhook payloads - env(HOSTNAME): 'localhost' - -framework: - secret: "%secret%" - form: - enabled: true - csrf_protection: - enabled: false - validation: { enable_attributes: true } - translator: { fallback: de_DE } - session: - save_path: null - default_locale: de_DE - trusted_hosts: "%framework.trusted_hosts%" - -twig: - strict_variables: "%kernel.debug%" - form_themes: - - 'Form/fields.html.twig' - -doctrine: - dbal: - host: "%mysql.host%" - port: "%mysql.port%" - dbname: "%mysql.db%" - user: "%mysql.user%" - password: "%mysql.password%" - charset: utf8 - schema_filter: ~^(?!(_dbversion$|_fixed_tableid$|wfd_))~ - server_version: '5.7' - orm: - enable_native_lazy_objects: true - mappings: - App: - is_bundle: false - type: attribute - dir: '%kernel.project_dir%/src/App/Entity' - prefix: 'App\Entity' - alias: App - -services: - app.logging.web_processor: - class: Monolog\Processor\WebProcessor - arguments: [~, []] - tags: - - { name: monolog.processor } - - app.logging.line_formatter: - class: Monolog\Formatter\LineFormatter - arguments: - - "%app.logging.default_line_format%" - - "%app.logging.default_time_format%" - calls: - - [includeStacktraces, [true]] - - [allowInlineLineBreaks, ["%app.logging.allow_inline_line_breaks%"]] diff --git a/src/config.php b/src/config.php new file mode 100644 index 0000000..0a47b56 --- /dev/null +++ b/src/config.php @@ -0,0 +1,10 @@ +import(__DIR__.'/config.default.php'); + $container->import(__DIR__.'/config.local.php', 'php', true); +}; diff --git a/src/config.yml b/src/config.yml deleted file mode 100755 index e581dc8..0000000 --- a/src/config.yml +++ /dev/null @@ -1,3 +0,0 @@ -imports: - - { resource: config.default.yml } - - { resource: config.local.yml, ignore_errors: true } diff --git a/src/config_development.default.php b/src/config_development.default.php new file mode 100644 index 0000000..e2b78ac --- /dev/null +++ b/src/config_development.default.php @@ -0,0 +1,43 @@ +parameters() + ->set('app.logging.allow_inline_line_breaks', true) + ->set('app.logging.default_line_format', "[%%datetime%%] [%%extra.unique_id%%]\n\n\t%%channel%%.%%level_name%%: %%message%%\n\n\tcontext: %%context%%\n\n\textra: %%extra%%\n\n"); + + $container->extension('framework', [ + 'profiler' => ['enabled' => true], + ]); + + $container->extension('web_profiler', [ + 'toolbar' => true, + ]); + + $container->extension('twig', [ + 'cache' => false, + ]); + + $container->extension('monolog', [ + 'handlers' => [ + 'main' => [ + 'formatter' => 'app.logging.line_formatter', + 'type' => 'stream', + 'path' => '%kernel.logs_dir%/%kernel.environment%.log', + 'level' => 'debug', + 'channels' => ['!event'], + 'priority' => -1, + ], + ], + ]); + + // In development, use PsrLogMessageProcessor to expand "{value}" placeholders in log + // messages with corresponding values from the log record context. + $container->services() + ->set('app.logging.psr_log_message_processor', PsrLogMessageProcessor::class) + ->tag('monolog.processor'); +}; diff --git a/src/config_development.default.yml b/src/config_development.default.yml deleted file mode 100755 index 157bf29..0000000 --- a/src/config_development.default.yml +++ /dev/null @@ -1,38 +0,0 @@ -framework: - profiler: - enabled: true - -web_profiler: - toolbar: true - -twig: - cache: false - -parameters: - # Linebreaks for better readbility - app.logging.allow_inline_line_breaks: true - - # a lot of whitespace for better readability - app.logging.default_line_format: "[%%datetime%%] [%%extra.unique_id%%]\n\n\t%%channel%%.%%level_name%%: %%message%%\n\n\tcontext: %%context%%\n\n\textra: %%extra%%\n\n" - -services: - # In development, use PsrLogMessageProcessor to expand "{value}" placeholders in log - # messages with corresponding values from the log record context. - # - # This makes log messages easier to read. In production, however, we're not - # using this as post-processing in Splunk is easier if we keep the messages and - # context values apart. - app.logging.psr_log_message_processor: - class: Monolog\Processor\PsrLogMessageProcessor - tags: - - { name: monolog.processor } - -monolog: - handlers: - main: - formatter: app.logging.line_formatter - type: stream - path: "%kernel.logs_dir%/%kernel.environment%.log" - level: debug - channels: ['!event'] - priority: -1 diff --git a/src/config_development.php b/src/config_development.php new file mode 100644 index 0000000..ad21697 --- /dev/null +++ b/src/config_development.php @@ -0,0 +1,11 @@ +import(__DIR__.'/config.php'); + $container->import(__DIR__.'/config_development.default.php'); + $container->import(__DIR__.'/config_development.local.php', 'php', true); +}; diff --git a/src/config_development.yml b/src/config_development.yml deleted file mode 100755 index 345d1dc..0000000 --- a/src/config_development.yml +++ /dev/null @@ -1,4 +0,0 @@ -imports: - - { resource: config.yml } - - { resource: config_development.default.yml } - - { resource: config_development.local.yml, ignore_errors: true } diff --git a/src/config_production.default.php b/src/config_production.default.php new file mode 100644 index 0000000..9ef1a84 --- /dev/null +++ b/src/config_production.default.php @@ -0,0 +1,48 @@ +parameters() + ->set('app.logging.default_line_format', "[%%datetime%%] [%%extra.unique_id%%] %%channel%%.%%level_name%%: %%message%% [context: %%context%%] [extra: %%extra%%]\n") + ->set('app.logging.allow_inline_line_breaks', false); + + // following https://github.com/symfony/recipes/blob/4fcfbbebe97e900ba47f94966a8ea4ab1080612d/doctrine/doctrine-bundle/1.12/config/packages/prod/doctrine.yaml + $container->extension('doctrine', [ + 'orm' => [ + 'metadata_cache_driver' => ['type' => 'pool', 'pool' => 'doctrine.system_cache_pool'], + 'result_cache_driver' => ['type' => 'pool', 'pool' => 'doctrine.result_cache_pool'], + 'query_cache_driver' => ['type' => 'pool', 'pool' => 'doctrine.system_cache_pool'], + ], + ]); + + $container->extension('framework', [ + 'cache' => [ + 'pools' => [ + 'doctrine.result_cache_pool' => ['adapter' => 'cache.app'], + 'doctrine.system_cache_pool' => ['adapter' => 'cache.system'], + ], + ], + ]); + + $container->extension('monolog', [ + 'handlers' => [ + 'main' => [ + 'type' => 'fingers_crossed', + 'passthru_level' => 'notice', + 'action_level' => 'warning', + 'handler' => 'nested', + 'priority' => -1, + ], + 'nested' => [ + 'type' => 'stream', + 'path' => '%kernel.logs_dir%/symfony.log', + 'level' => 'info', + 'formatter' => 'app.logging.line_formatter', + 'priority' => -1, + ], + ], + ]); +}; diff --git a/src/config_production.default.yml b/src/config_production.default.yml deleted file mode 100755 index ffc6af5..0000000 --- a/src/config_production.default.yml +++ /dev/null @@ -1,41 +0,0 @@ -# following https://github.com/symfony/recipes/blob/4fcfbbebe97e900ba47f94966a8ea4ab1080612d/doctrine/doctrine-bundle/1.12/config/packages/prod/doctrine.yaml -doctrine: - orm: - metadata_cache_driver: - type: pool - pool: doctrine.system_cache_pool - result_cache_driver: - type: pool - pool: doctrine.result_cache_pool - query_cache_driver: - type: pool - pool: doctrine.system_cache_pool - -framework: - cache: - pools: - doctrine.result_cache_pool: - adapter: cache.app - doctrine.system_cache_pool: - adapter: cache.system - -parameters: - app.logging.default_line_format: "[%%datetime%%] [%%extra.unique_id%%] %%channel%%.%%level_name%%: %%message%% [context: %%context%%] [extra: %%extra%%]\n" - - # no line breaks, so that we only have one event in one line in splunk - app.logging.allow_inline_line_breaks: false - -monolog: - handlers: - main: - type: fingers_crossed - passthru_level: notice - action_level: warning - handler: nested - priority: -1 - nested: - type: stream - path: "%kernel.logs_dir%/symfony.log" - level: info - formatter: app.logging.line_formatter - priority: -1 diff --git a/src/config_production.php b/src/config_production.php new file mode 100644 index 0000000..ea19ce6 --- /dev/null +++ b/src/config_production.php @@ -0,0 +1,11 @@ +import(__DIR__.'/config.php'); + $container->import(__DIR__.'/config_production.default.php'); + $container->import(__DIR__.'/config_production.local.php', 'php', true); +}; diff --git a/src/config_production.yml b/src/config_production.yml deleted file mode 100755 index d6da6c0..0000000 --- a/src/config_production.yml +++ /dev/null @@ -1,4 +0,0 @@ -imports: - - { resource: config.yml } - - { resource: config_production.default.yml } - - { resource: config_production.local.yml, ignore_errors: true } diff --git a/src/config_test.default.php b/src/config_test.default.php new file mode 100644 index 0000000..0034e6f --- /dev/null +++ b/src/config_test.default.php @@ -0,0 +1,22 @@ +extension('framework', [ + 'test' => true, + 'session' => ['storage_factory_id' => 'session.storage.factory.mock_file'], + ]); + + $container->extension('monolog', [ + 'handlers' => [ + 'main' => [ + // Disable logging during test execution to avoid file creation and console output. + 'type' => 'null', + 'priority' => -1, + ], + ], + ]); +}; diff --git a/src/config_test.default.yml b/src/config_test.default.yml deleted file mode 100755 index ff3e44e..0000000 --- a/src/config_test.default.yml +++ /dev/null @@ -1,14 +0,0 @@ -framework: - test: true - session: - storage_factory_id: session.storage.factory.mock_file - -monolog: - handlers: - main: - # Disable logging during test execution. Might be replaced by more advanced - # strategies in the future, but for now this change avoids creation of files - # and log output on the console during test runs. - type: "null" - priority: -1 - diff --git a/src/config_test.php b/src/config_test.php new file mode 100644 index 0000000..dce5dc0 --- /dev/null +++ b/src/config_test.php @@ -0,0 +1,11 @@ +import(__DIR__.'/config.php'); + $container->import(__DIR__.'/config_test.default.php'); + $container->import(__DIR__.'/config_test.local.php', 'php', true); +}; diff --git a/src/config_test.yml b/src/config_test.yml deleted file mode 100755 index c86e7f6..0000000 --- a/src/config_test.yml +++ /dev/null @@ -1,4 +0,0 @@ -imports: - - { resource: config.yml } - - { resource: config_test.default.yml } - - { resource: config_test.local.yml, ignore_errors: true } diff --git a/src/config_testing.default.php b/src/config_testing.default.php new file mode 100644 index 0000000..406f058 --- /dev/null +++ b/src/config_testing.default.php @@ -0,0 +1,30 @@ +parameters() + ->set('app.logging.default_line_format', "[%%datetime%%] [%%extra.unique_id%%] %%channel%%.%%level_name%%: %%message%% [context: %%context%%] [extra: %%extra%%]\n") + ->set('app.logging.allow_inline_line_breaks', false); + + $container->extension('monolog', [ + 'handlers' => [ + 'main' => [ + 'type' => 'fingers_crossed', + 'passthru_level' => 'notice', + 'action_level' => 'warning', + 'handler' => 'nested', + 'priority' => -1, + ], + 'nested' => [ + 'type' => 'stream', + 'path' => '%kernel.logs_dir%/symfony.log', + 'level' => 'info', + 'formatter' => 'app.logging.line_formatter', + 'priority' => -1, + ], + ], + ]); +}; diff --git a/src/config_testing.default.yml b/src/config_testing.default.yml deleted file mode 100755 index 54e9469..0000000 --- a/src/config_testing.default.yml +++ /dev/null @@ -1,20 +0,0 @@ -parameters: - app.logging.default_line_format: "[%%datetime%%] [%%extra.unique_id%%] %%channel%%.%%level_name%%: %%message%% [context: %%context%%] [extra: %%extra%%]\n" - - # no line breaks, so that we only have one event in one line in splunk - app.logging.allow_inline_line_breaks: false - -monolog: - handlers: - main: - type: fingers_crossed - passthru_level: notice - action_level: warning - handler: nested - priority: -1 - nested: - type: stream - path: "%kernel.logs_dir%/symfony.log" - level: info - formatter: app.logging.line_formatter - priority: -1 diff --git a/src/config_testing.php b/src/config_testing.php new file mode 100644 index 0000000..d18ea92 --- /dev/null +++ b/src/config_testing.php @@ -0,0 +1,11 @@ +import(__DIR__.'/config_production.php'); + $container->import(__DIR__.'/config_test.default.php'); + $container->import(__DIR__.'/config_test.local.php', 'php', true); +}; diff --git a/src/config_testing.yml b/src/config_testing.yml deleted file mode 100755 index cd84ca9..0000000 --- a/src/config_testing.yml +++ /dev/null @@ -1,4 +0,0 @@ -imports: - - { resource: config_production.yml } - - { resource: config_test.default.yml } - - { resource: config_test.local.yml, ignore_errors: true } From dc4a1e16745686113aba3994f0ea6e7f6e250e96 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 00:04:53 +0200 Subject: [PATCH 22/51] Use Doctrine ORM 3 column type inference --- src/App/Entity/Package.php | 6 +++--- src/App/Entity/PackageVersion.php | 4 ++-- src/App/Entity/Project.php | 10 +++++----- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/App/Entity/Package.php b/src/App/Entity/Package.php index 390f4c8..61fdd53 100644 --- a/src/App/Entity/Package.php +++ b/src/App/Entity/Package.php @@ -18,13 +18,13 @@ class Package { #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: 'integer')] + #[ORM\Column] private ?int $id = null; - #[ORM\Column(type: 'string', unique: true)] + #[ORM\Column(unique: true)] private string $name; - #[ORM\Column(type: 'string', nullable: true)] + #[ORM\Column(nullable: true)] private ?string $description; #[ORM\OneToMany(targetEntity: PackageVersion::class, mappedBy: 'package', cascade: ['persist', 'remove'])] diff --git a/src/App/Entity/PackageVersion.php b/src/App/Entity/PackageVersion.php index 728cbbe..4506cab 100644 --- a/src/App/Entity/PackageVersion.php +++ b/src/App/Entity/PackageVersion.php @@ -20,10 +20,10 @@ class PackageVersion { #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: 'integer')] + #[ORM\Column] private ?int $id = null; - #[ORM\Column(name: 'prettyVersion', type: 'string')] + #[ORM\Column(name: 'prettyVersion')] private string $prettyVersion; #[ORM\ManyToOne(targetEntity: Package::class, inversedBy: 'versions', cascade: ['persist'])] diff --git a/src/App/Entity/Project.php b/src/App/Entity/Project.php index be9cf7e..99f3925 100644 --- a/src/App/Entity/Project.php +++ b/src/App/Entity/Project.php @@ -15,19 +15,19 @@ class Project { #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: 'integer')] + #[ORM\Column] private ?int $id = null; - #[ORM\Column(type: 'string', unique: true)] + #[ORM\Column(unique: true)] private string $name; - #[ORM\Column(name: 'vcsUrl', type: 'string')] + #[ORM\Column(name: 'vcsUrl')] private ?string $vcsUrl = null; - #[ORM\Column(type: 'string', nullable: true)] + #[ORM\Column(nullable: true)] private ?string $description = null; - #[ORM\Column(type: 'boolean')] + #[ORM\Column] public bool $archived = false; #[ORM\ManyToMany(targetEntity: PackageVersion::class, mappedBy: 'projects', cascade: ['persist'])] From 0d285651eee91605e0cecd4c7355846f2f93016e Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 00:06:32 +0200 Subject: [PATCH 23/51] Mark immutable entity properties as readonly Doctrine 3 with enable_native_lazy_objects supports readonly properties in PHP 8.2. --- src/App/Entity/Package.php | 2 +- src/App/Entity/PackageVersion.php | 4 ++-- src/App/Entity/Project.php | 2 +- src/App/Entity/VersionConstraint.php | 11 +++++------ 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/App/Entity/Package.php b/src/App/Entity/Package.php index 61fdd53..fa92ad6 100644 --- a/src/App/Entity/Package.php +++ b/src/App/Entity/Package.php @@ -22,7 +22,7 @@ class Package private ?int $id = null; #[ORM\Column(unique: true)] - private string $name; + private readonly string $name; #[ORM\Column(nullable: true)] private ?string $description; diff --git a/src/App/Entity/PackageVersion.php b/src/App/Entity/PackageVersion.php index 4506cab..b3e2104 100644 --- a/src/App/Entity/PackageVersion.php +++ b/src/App/Entity/PackageVersion.php @@ -24,10 +24,10 @@ class PackageVersion private ?int $id = null; #[ORM\Column(name: 'prettyVersion')] - private string $prettyVersion; + private readonly string $prettyVersion; #[ORM\ManyToOne(targetEntity: Package::class, inversedBy: 'versions', cascade: ['persist'])] - private Package $package; + private readonly Package $package; #[ORM\ManyToMany(targetEntity: Project::class, inversedBy: 'usages')] #[ORM\JoinTable(name: 'packageversion_project', diff --git a/src/App/Entity/Project.php b/src/App/Entity/Project.php index 99f3925..0ca18f2 100644 --- a/src/App/Entity/Project.php +++ b/src/App/Entity/Project.php @@ -19,7 +19,7 @@ class Project private ?int $id = null; #[ORM\Column(unique: true)] - private string $name; + private readonly string $name; #[ORM\Column(name: 'vcsUrl')] private ?string $vcsUrl = null; diff --git a/src/App/Entity/VersionConstraint.php b/src/App/Entity/VersionConstraint.php index 2403745..8e6626b 100644 --- a/src/App/Entity/VersionConstraint.php +++ b/src/App/Entity/VersionConstraint.php @@ -12,9 +12,9 @@ class VersionConstraint { public const VALID_OPERATORS = '(==|>=|<=|>|<|all)'; - private string $operator; + private readonly string $operator; - private ?string $normalizedVersionString = null; + private readonly ?string $normalizedVersionString; public function __construct(string $operator, string $versionString) { @@ -23,10 +23,9 @@ public function __construct(string $operator, string $versionString) } $this->operator = $operator; - - if ('all' !== $operator) { - $this->normalizedVersionString = (new VersionParser())->normalize($versionString); - } + $this->normalizedVersionString = ('all' !== $operator) + ? (new VersionParser())->normalize($versionString) + : null; } public function matches(PackageVersion $packageVersion): bool From 6b3da62d671bea8460cc1fed4f592980e48d7260 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 00:12:08 +0200 Subject: [PATCH 24/51] Remove redundant validation config `enable_attributes` is default in Symfony 7+. --- src/config.default.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.default.php b/src/config.default.php index 47d709a..72b49c8 100644 --- a/src/config.default.php +++ b/src/config.default.php @@ -35,7 +35,7 @@ 'enabled' => true, 'csrf_protection' => ['enabled' => false], ], - 'validation' => ['enable_attributes' => true], + 'validation' => true, 'translator' => ['fallback' => 'de_DE'], 'session' => ['save_path' => null], 'default_locale' => 'de_DE', From a83c36ebc5445496d6ccd4fcd86be93af7694396 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 10:44:46 +0200 Subject: [PATCH 25/51] Add more types --- src/App/Controller/ImportRepositoriesController.php | 3 ++- src/App/Controller/MainController.php | 2 +- src/App/Controller/WebhookController.php | 2 +- src/App/Form/Type/VersionConstraintType.php | 4 ++-- src/App/ProjectImport/ComposerPackageFetcher.php | 8 +------- src/App/ProjectImport/DoctrinePackageProvider.php | 2 +- src/App/ProjectImport/DoctrineProjectProvider.php | 2 +- src/App/ProjectImport/LockFileFetcher.php | 5 +---- src/App/ProjectImport/LockFileParser.php | 4 ++-- src/App/ProjectImport/PackageProviderInterface.php | 7 +------ src/App/ProjectImport/PackageVersionFetcher.php | 6 ++---- src/App/ProjectImport/ProjectProviderInterface.php | 7 +------ 12 files changed, 16 insertions(+), 36 deletions(-) diff --git a/src/App/Controller/ImportRepositoriesController.php b/src/App/Controller/ImportRepositoriesController.php index 14a1030..555f7f3 100644 --- a/src/App/Controller/ImportRepositoriesController.php +++ b/src/App/Controller/ImportRepositoriesController.php @@ -8,6 +8,7 @@ use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\FormFactoryInterface; +use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; @@ -60,7 +61,7 @@ public function importFormAction(Request $request): Response ); } - private function getProjectImportForm() + private function getProjectImportForm(): FormInterface { return $this->formFactory->createBuilder() ->add( diff --git a/src/App/Controller/MainController.php b/src/App/Controller/MainController.php index ba98897..c320854 100755 --- a/src/App/Controller/MainController.php +++ b/src/App/Controller/MainController.php @@ -55,7 +55,7 @@ public function mainAction(Request $request): Response /** * Used to redirect to the form submit page from legacy routes. */ - public static function getUrlParametersForSearchSubmitPage($package, $operator, $versionString): array + public static function getUrlParametersForSearchSubmitPage(string $package, string $operator, string $versionString): array { return [ 'search_package' => [ diff --git a/src/App/Controller/WebhookController.php b/src/App/Controller/WebhookController.php index d954028..f9e12c9 100644 --- a/src/App/Controller/WebhookController.php +++ b/src/App/Controller/WebhookController.php @@ -21,7 +21,7 @@ public function __construct( } #[Route('webhook', name: 'webhook', methods: ['POST'])] - public function updateAction(Request $request) + public function updateAction(Request $request): Response { set_time_limit(500); diff --git a/src/App/Form/Type/VersionConstraintType.php b/src/App/Form/Type/VersionConstraintType.php index e7284ae..5130325 100644 --- a/src/App/Form/Type/VersionConstraintType.php +++ b/src/App/Form/Type/VersionConstraintType.php @@ -41,7 +41,7 @@ public function buildForm(FormBuilderInterface $builder, array $options): void $builder->get('value')->resetViewTransformers(); // hack to disable validation against empty list $builder->addModelTransformer(new class implements DataTransformerInterface { - public function transform($value) + public function transform(mixed $value): mixed { if (null === $value) { return null; @@ -57,7 +57,7 @@ public function transform($value) ]; } - public function reverseTransform($value) + public function reverseTransform(mixed $value): mixed { if (null === $value) { return null; diff --git a/src/App/ProjectImport/ComposerPackageFetcher.php b/src/App/ProjectImport/ComposerPackageFetcher.php index 933fda4..bb3dae9 100644 --- a/src/App/ProjectImport/ComposerPackageFetcher.php +++ b/src/App/ProjectImport/ComposerPackageFetcher.php @@ -5,7 +5,6 @@ namespace App\ProjectImport; use App\Exception\ProjectHasNoComposerPackageUsageInfoException; -use Composer\Package\Package; class ComposerPackageFetcher { @@ -13,12 +12,7 @@ public function __construct(private LockFileFetcher $lockFileFetcher) { } - /** - * @param string $vcsUrl - * - * @return Package[] - */ - public function fetchPackages($vcsUrl) + public function fetchPackages(string $vcsUrl): array { $lockContents = $this->lockFileFetcher->getLockContents($vcsUrl); diff --git a/src/App/ProjectImport/DoctrinePackageProvider.php b/src/App/ProjectImport/DoctrinePackageProvider.php index 1a60ddc..d4b1f0b 100644 --- a/src/App/ProjectImport/DoctrinePackageProvider.php +++ b/src/App/ProjectImport/DoctrinePackageProvider.php @@ -16,7 +16,7 @@ public function __construct(private PackageRepository $packageRepository) { } - public function providePackage($name) + public function providePackage(string $name): Package { $package = $this->packageRepository->findOneBy(['name' => $name]); if (null === $package) { diff --git a/src/App/ProjectImport/DoctrineProjectProvider.php b/src/App/ProjectImport/DoctrineProjectProvider.php index f4879e0..e0f1044 100644 --- a/src/App/ProjectImport/DoctrineProjectProvider.php +++ b/src/App/ProjectImport/DoctrineProjectProvider.php @@ -18,7 +18,7 @@ public function __construct(private ProjectRepository $projectRepository) { } - public function provideProject($name) + public function provideProject(string $name): Project { $project = $this->projectRepository->findOneBy(['name' => $name]); if (null === $project) { diff --git a/src/App/ProjectImport/LockFileFetcher.php b/src/App/ProjectImport/LockFileFetcher.php index 5e84026..386b55d 100644 --- a/src/App/ProjectImport/LockFileFetcher.php +++ b/src/App/ProjectImport/LockFileFetcher.php @@ -13,10 +13,7 @@ public function __construct(private VcsDriverFactory $vcsDriverFactory) { } - /** - * @return string|null - */ - public function getLockContents($vcsUrl) + public function getLockContents(string $vcsUrl): ?string { try { $vcsDriver = $this->vcsDriverFactory->getDriver($vcsUrl); diff --git a/src/App/ProjectImport/LockFileParser.php b/src/App/ProjectImport/LockFileParser.php index bb74bbd..ad58b2e 100644 --- a/src/App/ProjectImport/LockFileParser.php +++ b/src/App/ProjectImport/LockFileParser.php @@ -14,9 +14,9 @@ class LockFileParser /** * @param string $lockContents JSON string * - * @return CompletePackage[] + * @return list */ - public static function getPackages($lockContents) + public static function getPackages(string $lockContents): array { $lockData = JsonFile::parseJson($lockContents); $packages = []; diff --git a/src/App/ProjectImport/PackageProviderInterface.php b/src/App/ProjectImport/PackageProviderInterface.php index 050ec15..1b45110 100644 --- a/src/App/ProjectImport/PackageProviderInterface.php +++ b/src/App/ProjectImport/PackageProviderInterface.php @@ -8,10 +8,5 @@ interface PackageProviderInterface { - /** - * @param string $name - * - * @return Package - */ - public function providePackage($name); + public function providePackage(string $name): Package; } diff --git a/src/App/ProjectImport/PackageVersionFetcher.php b/src/App/ProjectImport/PackageVersionFetcher.php index a3f643c..a4893ac 100644 --- a/src/App/ProjectImport/PackageVersionFetcher.php +++ b/src/App/ProjectImport/PackageVersionFetcher.php @@ -16,11 +16,9 @@ public function __construct( } /** - * @param string $vcsUrl - * - * @return ArrayCollection|PackageVersion[] + * @return ArrayCollection */ - public function fetch($vcsUrl) + public function fetch(string $vcsUrl): ArrayCollection { $usages = new ArrayCollection(); diff --git a/src/App/ProjectImport/ProjectProviderInterface.php b/src/App/ProjectImport/ProjectProviderInterface.php index 4fdd68d..53dfca2 100644 --- a/src/App/ProjectImport/ProjectProviderInterface.php +++ b/src/App/ProjectImport/ProjectProviderInterface.php @@ -8,10 +8,5 @@ interface ProjectProviderInterface { - /** - * @param string $name - * - * @return Project - */ - public function provideProject($name); + public function provideProject(string $name): Project; } From 606a21e1fcee85b4d76310a676cd6d026ad7e627 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 11:10:22 +0200 Subject: [PATCH 26/51] Update symfony/monolog-bundle 3 -> 4 --- composer.json | 2 +- composer.lock | 33 ++++++++++++++++----------------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/composer.json b/composer.json index 4a8ea00..82635d4 100755 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ "symfony/dotenv": "^8.0", "symfony/form": "^8.0", "symfony/framework-bundle": "^8.0", - "symfony/monolog-bundle": "^3.2.0", + "symfony/monolog-bundle": "^4.0", "symfony/translation": "^8.0", "symfony/twig-bundle": "^8.0", "symfony/validator": "^8.0", diff --git a/composer.lock b/composer.lock index 282f7df..367f8b3 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": "88c2946ba60769b05cef06563dca7bf7", + "content-hash": "d7b4666e5db54ed6af07e842175b3f35", "packages": [ { "name": "composer/ca-bundle", @@ -4086,33 +4086,32 @@ }, { "name": "symfony/monolog-bundle", - "version": "v3.11.2", + "version": "v4.0.2", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "d87468010570b2ec766152184918ee8d267c7411" + "reference": "c012c6aba13129eb02aa7dd61e66e720911d8598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/d87468010570b2ec766152184918ee8d267c7411", - "reference": "d87468010570b2ec766152184918ee8d267c7411", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/c012c6aba13129eb02aa7dd61e66e720911d8598", + "reference": "c012c6aba13129eb02aa7dd61e66e720911d8598", "shasum": "" }, "require": { "composer-runtime-api": "^2.0", - "monolog/monolog": "^1.25.1 || ^2.0 || ^3.0", - "php": ">=8.1", - "symfony/config": "^6.4 || ^7.0", - "symfony/dependency-injection": "^6.4 || ^7.0", - "symfony/deprecation-contracts": "^2.5 || ^3.0", - "symfony/http-kernel": "^6.4 || ^7.0", - "symfony/monolog-bridge": "^6.4 || ^7.0", + "monolog/monolog": "^3.5", + "php": ">=8.2", + "symfony/config": "^7.3 || ^8.0", + "symfony/dependency-injection": "^7.3 || ^8.0", + "symfony/http-kernel": "^7.3 || ^8.0", + "symfony/monolog-bridge": "^7.3 || ^8.0", "symfony/polyfill-php84": "^1.30" }, "require-dev": { - "symfony/console": "^6.4 || ^7.0", - "symfony/phpunit-bridge": "^7.3.3", - "symfony/yaml": "^6.4 || ^7.0" + "phpunit/phpunit": "^11.5.41 || ^12.3", + "symfony/console": "^7.3 || ^8.0", + "symfony/yaml": "^7.3 || ^8.0" }, "type": "symfony-bundle", "autoload": { @@ -4142,7 +4141,7 @@ ], "support": { "issues": "https://github.com/symfony/monolog-bundle/issues", - "source": "https://github.com/symfony/monolog-bundle/tree/v3.11.2" + "source": "https://github.com/symfony/monolog-bundle/tree/v4.0.2" }, "funding": [ { @@ -4162,7 +4161,7 @@ "type": "tidelift" } ], - "time": "2026-04-02T18:23:01+00:00" + "time": "2026-04-02T18:27:21+00:00" }, { "name": "symfony/options-resolver", From 1b6bff1d6cf8aa5fce2ad2e8d294007bd6b94065 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 11:21:33 +0200 Subject: [PATCH 27/51] Update phpunit/phpunit 11 -> 13 Bump PHP requirement from 8.2 to 8.3 --- composer.json | 4 +- composer.lock | 751 ++++++++++-------- .../ProjectImport/ImportProjectTaskTest.php | 16 +- .../ProjectImport/LockFileFetcherTest.php | 14 +- 4 files changed, 427 insertions(+), 358 deletions(-) diff --git a/composer.json b/composer.json index 82635d4..4b43b79 100755 --- a/composer.json +++ b/composer.json @@ -3,7 +3,7 @@ "type": "project", "description": "Composer Dependency Tracking", "require": { - "php": "^8.2", + "php": "^8.3", "composer/composer": "^2.0", "doctrine/dbal": "^4.0", "doctrine/doctrine-bundle": "^3.0", @@ -22,7 +22,7 @@ "symfony/yaml": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^11.0", + "phpunit/phpunit": "^13.0", "doctrine/doctrine-fixtures-bundle": "^4.0", "symfony/web-profiler-bundle": "^8.0" }, diff --git a/composer.lock b/composer.lock index 367f8b3..34b99e9 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": "d7b4666e5db54ed6af07e842175b3f35", + "content-hash": "d67cc9756ce7e400bb212f855458424c", "packages": [ { "name": "composer/ca-bundle", @@ -6893,35 +6893,35 @@ }, { "name": "phpunit/php-code-coverage", - "version": "11.0.12", + "version": "14.1.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" + "reference": "031856c28c060e1c1d1fc94d256e3ffbe4230c91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", - "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/031856c28c060e1c1d1fc94d256e3ffbe4230c91", + "reference": "031856c28c060e1c1d1fc94d256e3ffbe4230c91", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", + "ext-mbstring": "*", "ext-xmlwriter": "*", "nikic/php-parser": "^5.7.0", - "php": ">=8.2", - "phpunit/php-file-iterator": "^5.1.0", - "phpunit/php-text-template": "^4.0.1", - "sebastian/code-unit-reverse-lookup": "^4.0.1", - "sebastian/complexity": "^4.0.1", - "sebastian/environment": "^7.2.1", - "sebastian/lines-of-code": "^3.0.1", - "sebastian/version": "^5.0.2", - "theseer/tokenizer": "^1.3.1" + "php": ">=8.4", + "phpunit/php-text-template": "^6.0", + "sebastian/complexity": "^6.0", + "sebastian/environment": "^9.2", + "sebastian/git-state": "^1.0", + "sebastian/lines-of-code": "^5.0", + "sebastian/version": "^7.0", + "theseer/tokenizer": "^2.0.1" }, "require-dev": { - "phpunit/phpunit": "^11.5.46" + "phpunit/phpunit": "^13.1" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -6930,7 +6930,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "11.0.x-dev" + "dev-main": "14.1.x-dev" } }, "autoload": { @@ -6959,7 +6959,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.12" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/14.1.8" }, "funding": [ { @@ -6979,32 +6979,32 @@ "type": "tidelift" } ], - "time": "2025-12-24T07:01:01+00:00" + "time": "2026-05-09T12:06:52+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "5.1.1", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903" + "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903", - "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6e5aa1fb0a95b1703d83e721299ee18bb4e2de50", + "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -7032,7 +7032,7 @@ "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.1" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/7.0.0" }, "funding": [ { @@ -7052,28 +7052,28 @@ "type": "tidelift" } ], - "time": "2026-02-02T13:52:54+00:00" + "time": "2026-02-06T04:33:26+00:00" }, { "name": "phpunit/php-invoker", - "version": "5.0.1", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" + "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", - "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88", + "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^13.0" }, "suggest": { "ext-pcntl": "*" @@ -7081,7 +7081,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -7108,40 +7108,52 @@ "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.1" + "source": "https://github.com/sebastianbergmann/php-invoker/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/phpunit/php-invoker", + "type": "tidelift" } ], - "time": "2024-07-03T05:07:44+00:00" + "time": "2026-02-06T04:34:47+00:00" }, { "name": "phpunit/php-text-template", - "version": "4.0.1", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" + "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", - "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/a47af19f93f76aa3368303d752aa5272ca3299f4", + "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -7168,40 +7180,52 @@ "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.1" + "source": "https://github.com/sebastianbergmann/php-text-template/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-text-template", + "type": "tidelift" } ], - "time": "2024-07-03T05:08:43+00:00" + "time": "2026-02-06T04:36:37+00:00" }, { "name": "phpunit/php-timer", - "version": "7.0.1", + "version": "9.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" + "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", - "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/a0e12065831f6ab0d83120dc61513eb8d9a966f6", + "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "9.0-dev" } }, "autoload": { @@ -7228,28 +7252,40 @@ "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.1" + "source": "https://github.com/sebastianbergmann/php-timer/tree/9.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": "2024-07-03T05:09:35+00:00" + "time": "2026-02-06T04:37:53+00:00" }, { "name": "phpunit/phpunit", - "version": "11.5.55", + "version": "13.1.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00" + "reference": "506033fd7d6855fea1e2973767d65844412b4574" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/adc7262fccc12de2b30f12a8aa0b33775d814f00", - "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/506033fd7d6855fea1e2973767d65844412b4574", + "reference": "506033fd7d6855fea1e2973767d65844412b4574", "shasum": "" }, "require": { @@ -7262,35 +7298,32 @@ "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", - "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.12", - "phpunit/php-file-iterator": "^5.1.1", - "phpunit/php-invoker": "^5.0.1", - "phpunit/php-text-template": "^4.0.1", - "phpunit/php-timer": "^7.0.1", - "sebastian/cli-parser": "^3.0.2", - "sebastian/code-unit": "^3.0.3", - "sebastian/comparator": "^6.3.3", - "sebastian/diff": "^6.0.2", - "sebastian/environment": "^7.2.1", - "sebastian/exporter": "^6.3.2", - "sebastian/global-state": "^7.0.2", - "sebastian/object-enumerator": "^6.0.1", - "sebastian/recursion-context": "^6.0.3", - "sebastian/type": "^5.1.3", - "sebastian/version": "^5.0.2", + "php": ">=8.4.1", + "phpunit/php-code-coverage": "^14.1.8", + "phpunit/php-file-iterator": "^7.0.0", + "phpunit/php-invoker": "^7.0.0", + "phpunit/php-text-template": "^6.0.0", + "phpunit/php-timer": "^9.0.0", + "sebastian/cli-parser": "^5.0.0", + "sebastian/comparator": "^8.1.2", + "sebastian/diff": "^8.1.0", + "sebastian/environment": "^9.3.0", + "sebastian/exporter": "^8.0.2", + "sebastian/git-state": "^1.0", + "sebastian/global-state": "^9.0.0", + "sebastian/object-enumerator": "^8.0.0", + "sebastian/recursion-context": "^8.0.0", + "sebastian/type": "^7.0.0", + "sebastian/version": "^7.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": "13.1-dev" } }, "autoload": { @@ -7322,56 +7355,40 @@ "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.55" + "source": "https://github.com/sebastianbergmann/phpunit/tree/13.1.9" }, "funding": [ { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" + "url": "https://phpunit.de/sponsoring.html", + "type": "other" } ], - "time": "2026-02-18T12:37:06+00:00" + "time": "2026-05-13T04:00:53+00:00" }, { "name": "sebastian/cli-parser", - "version": "3.0.2", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" + "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", - "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/48a4654fa5e48c1c81214e9930048a572d4b23ca", + "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -7395,152 +7412,51 @@ "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.2" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/5.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - } - ], - "time": "2024-07-03T04:41:36+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", - "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.5" - }, - "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/3.0.3" - }, - "funding": [ + }, { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-03-19T07:56:08+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "183a9b2632194febd219bb9246eee421dad8d45e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", - "reference": "183a9b2632194febd219bb9246eee421dad8d45e", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, { - "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/4.0.1" - }, - "funding": [ + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser", + "type": "tidelift" } ], - "time": "2024-07-03T04:45:54+00:00" + "time": "2026-02-06T04:39:44+00:00" }, { "name": "sebastian/comparator", - "version": "6.3.3", + "version": "8.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" + "reference": "b3d09f4360ad97dcad8f82d1c047ad16ff38b7e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", - "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b3d09f4360ad97dcad8f82d1c047ad16ff38b7e1", + "reference": "b3d09f4360ad97dcad8f82d1c047ad16ff38b7e1", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/diff": "^6.0", - "sebastian/exporter": "^6.0" + "php": ">=8.4", + "sebastian/diff": "^8.1", + "sebastian/exporter": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^11.4" + "phpunit/phpunit": "^13.0" }, "suggest": { "ext-bcmath": "For comparing BcMath\\Number objects" @@ -7548,7 +7464,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.3-dev" + "dev-main": "8.1-dev" } }, "autoload": { @@ -7588,7 +7504,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.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/8.1.2" }, "funding": [ { @@ -7608,33 +7524,33 @@ "type": "tidelift" } ], - "time": "2026-01-24T09:26:40+00:00" + "time": "2026-04-14T08:24:42+00:00" }, { "name": "sebastian/complexity", - "version": "4.0.1", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" + "reference": "c5651c795c98093480df79350cb050813fc7a2f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", - "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/c5651c795c98093480df79350cb050813fc7a2f3", + "reference": "c5651c795c98093480df79350cb050813fc7a2f3", "shasum": "" }, "require": { "nikic/php-parser": "^5.0", - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -7658,41 +7574,53 @@ "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.1" + "source": "https://github.com/sebastianbergmann/complexity/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/complexity", + "type": "tidelift" } ], - "time": "2024-07-03T04:49:50+00:00" + "time": "2026-02-06T04:41:32+00:00" }, { "name": "sebastian/diff", - "version": "6.0.2", + "version": "8.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" + "reference": "cce1bb200e0062e72f9b85ccfe54d3fd38bbd044" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/cce1bb200e0062e72f9b85ccfe54d3fd38bbd044", + "reference": "cce1bb200e0062e72f9b85ccfe54d3fd38bbd044", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^11.0", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^13.0", + "symfony/process": "^7.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "8.2-dev" } }, "autoload": { @@ -7725,35 +7653,47 @@ "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.2" + "source": "https://github.com/sebastianbergmann/diff/tree/8.2.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/diff", + "type": "tidelift" } ], - "time": "2024-07-03T04:53:05+00:00" + "time": "2026-05-14T05:24:37+00:00" }, { "name": "sebastian/environment", - "version": "7.2.1", + "version": "9.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" + "reference": "6767059a30e4277ac95ee034809e793528464768" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", - "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6767059a30e4277ac95ee034809e793528464768", + "reference": "6767059a30e4277ac95ee034809e793528464768", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^13.0" }, "suggest": { "ext-posix": "*" @@ -7761,7 +7701,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "7.2-dev" + "dev-main": "9.3-dev" } }, "autoload": { @@ -7789,7 +7729,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.1" + "source": "https://github.com/sebastianbergmann/environment/tree/9.3.0" }, "funding": [ { @@ -7809,34 +7749,34 @@ "type": "tidelift" } ], - "time": "2025-05-21T11:55:47+00:00" + "time": "2026-04-15T12:14:03+00:00" }, { "name": "sebastian/exporter", - "version": "6.3.2", + "version": "8.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" + "reference": "9cee180ebe62259e3ed48df2212d1fc8cfd971bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", - "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/9cee180ebe62259e3ed48df2212d1fc8cfd971bb", + "reference": "9cee180ebe62259e3ed48df2212d1fc8cfd971bb", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/recursion-context": "^6.0" + "php": ">=8.4", + "sebastian/recursion-context": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.3-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -7879,7 +7819,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.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/8.0.2" }, "funding": [ { @@ -7899,35 +7839,104 @@ "type": "tidelift" } ], - "time": "2025-09-24T06:12:51+00:00" + "time": "2026-04-15T12:38:05+00:00" + }, + { + "name": "sebastian/git-state", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/git-state.git", + "reference": "792a952e0eba55b6960a48aeceb9f371aad1f76b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/git-state/zipball/792a952e0eba55b6960a48aeceb9f371aad1f76b", + "reference": "792a952e0eba55b6960a48aeceb9f371aad1f76b", + "shasum": "" + }, + "require": { + "php": ">=8.4" + }, + "require-dev": { + "phpunit/phpunit": "^13.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.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": "Library for describing the state of a Git checkout", + "homepage": "https://github.com/sebastianbergmann/git-state", + "support": { + "issues": "https://github.com/sebastianbergmann/git-state/issues", + "security": "https://github.com/sebastianbergmann/git-state/security/policy", + "source": "https://github.com/sebastianbergmann/git-state/tree/1.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/git-state", + "type": "tidelift" + } + ], + "time": "2026-03-21T12:54:28+00:00" }, { "name": "sebastian/global-state", - "version": "7.0.2", + "version": "9.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "3be331570a721f9a4b5917f4209773de17f747d7" + "reference": "e52e3dc22441e6218c710afe72c3042f8fc41ea7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", - "reference": "3be331570a721f9a4b5917f4209773de17f747d7", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e52e3dc22441e6218c710afe72c3042f8fc41ea7", + "reference": "e52e3dc22441e6218c710afe72c3042f8fc41ea7", "shasum": "" }, "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" + "php": ">=8.4", + "sebastian/object-reflector": "^6.0", + "sebastian/recursion-context": "^8.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "9.0-dev" } }, "autoload": { @@ -7953,41 +7962,53 @@ "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.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/9.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/global-state", + "type": "tidelift" } ], - "time": "2024-07-03T04:57:36+00:00" + "time": "2026-02-06T04:45:13+00:00" }, { "name": "sebastian/lines-of-code", - "version": "3.0.1", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" + "reference": "4f21bb7768e1c997722ccc7efb1d6b5c11bfd471" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", - "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/4f21bb7768e1c997722ccc7efb1d6b5c11bfd471", + "reference": "4f21bb7768e1c997722ccc7efb1d6b5c11bfd471", "shasum": "" }, "require": { "nikic/php-parser": "^5.0", - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -8011,42 +8032,54 @@ "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.1" + "source": "https://github.com/sebastianbergmann/lines-of-code/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/lines-of-code", + "type": "tidelift" } ], - "time": "2024-07-03T04:58:38+00:00" + "time": "2026-02-06T04:45:54+00:00" }, { "name": "sebastian/object-enumerator", - "version": "6.0.1", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "f5b498e631a74204185071eb41f33f38d64608aa" + "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", - "reference": "f5b498e631a74204185071eb41f33f38d64608aa", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/b39ab125fd9a7434b0ecbc4202eebce11a98cfc5", + "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5", "shasum": "" }, "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" + "php": ">=8.4", + "sebastian/object-reflector": "^6.0", + "sebastian/recursion-context": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -8069,40 +8102,52 @@ "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.1" + "source": "https://github.com/sebastianbergmann/object-enumerator/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/sebastian/object-enumerator", + "type": "tidelift" } ], - "time": "2024-07-03T05:00:13+00:00" + "time": "2026-02-06T04:46:36+00:00" }, { "name": "sebastian/object-reflector", - "version": "4.0.1", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" + "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", - "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/3ca042c2c60b0eab094f8a1b6a7093f4d4c72200", + "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -8125,40 +8170,52 @@ "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.1" + "source": "https://github.com/sebastianbergmann/object-reflector/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/object-reflector", + "type": "tidelift" } ], - "time": "2024-07-03T05:01:32+00:00" + "time": "2026-02-06T04:47:13+00:00" }, { "name": "sebastian/recursion-context", - "version": "6.0.3", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" + "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", - "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/74c5af21f6a5833e91767ca068c4d3dfec15317e", + "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -8189,7 +8246,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.3" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/8.0.0" }, "funding": [ { @@ -8209,32 +8266,32 @@ "type": "tidelift" } ], - "time": "2025-08-13T04:42:22+00:00" + "time": "2026-02-06T04:51:28+00:00" }, { "name": "sebastian/type", - "version": "5.1.3", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" + "reference": "42412224607bd3931241bbd17f38e0f972f5a916" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", - "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/42412224607bd3931241bbd17f38e0f972f5a916", + "reference": "42412224607bd3931241bbd17f38e0f972f5a916", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -8258,7 +8315,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.3" + "source": "https://github.com/sebastianbergmann/type/tree/7.0.0" }, "funding": [ { @@ -8278,29 +8335,29 @@ "type": "tidelift" } ], - "time": "2025-08-09T06:55:48+00:00" + "time": "2026-02-06T04:52:09+00:00" }, { "name": "sebastian/version", - "version": "5.0.2", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" + "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", - "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ad37a5552c8e2b88572249fdc19b6da7792e021b", + "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -8324,15 +8381,27 @@ "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.2" + "source": "https://github.com/sebastianbergmann/version/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/version", + "type": "tidelift" } ], - "time": "2024-10-09T05:16:32+00:00" + "time": "2026-02-06T04:52:52+00:00" }, { "name": "staabm/side-effects-detector", @@ -8473,23 +8542,23 @@ }, { "name": "theseer/tokenizer", - "version": "1.3.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", - "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4", + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" + "php": "^8.1" }, "type": "library", "autoload": { @@ -8511,7 +8580,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.3.1" + "source": "https://github.com/theseer/tokenizer/tree/2.0.1" }, "funding": [ { @@ -8519,7 +8588,7 @@ "type": "github" } ], - "time": "2025-11-17T20:03:58+00:00" + "time": "2025-12-08T11:19:18+00:00" } ], "aliases": [], @@ -8528,7 +8597,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^8.2" + "php": "^8.3" }, "platform-dev": [], "plugin-api-version": "2.6.0" diff --git a/src/App/Tests/ProjectImport/ImportProjectTaskTest.php b/src/App/Tests/ProjectImport/ImportProjectTaskTest.php index 40fbe95..066ebf0 100644 --- a/src/App/Tests/ProjectImport/ImportProjectTaskTest.php +++ b/src/App/Tests/ProjectImport/ImportProjectTaskTest.php @@ -11,7 +11,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\EntityManagerInterface; use PHPUnit\Framework\Attributes\Test; -use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use Psr\Log\NullLogger; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; @@ -19,15 +19,15 @@ class ImportProjectTaskTest extends KernelTestCase { private ImportProjectTask $importProjectTask; - private PackageVersionFetcher&MockObject $packageVersionFetcher; - private VcsDriverFactory&MockObject $vcsDriverFactory; + private PackageVersionFetcher&Stub $packageVersionFetcher; + private VcsDriverFactory&Stub $vcsDriverFactory; protected function setUp(): void { parent::setUp(); self::bootKernel(); - $this->vcsDriverFactory = $this->createMock(VcsDriverFactory::class); - $this->packageVersionFetcher = $this->createMock(PackageVersionFetcher::class); + $this->vcsDriverFactory = $this->createStub(VcsDriverFactory::class); + $this->packageVersionFetcher = $this->createStub(PackageVersionFetcher::class); $this->importProjectTask = new ImportProjectTask( self::getContainer()->get(EntityManagerInterface::class), self::getContainer()->get(ProjectProviderInterface::class), @@ -48,9 +48,9 @@ protected function tearDown(): void #[Test] public function import(): void { - $this->packageVersionFetcher->method('fetch')->willReturn( - new ArrayCollection() - ); + $this->packageVersionFetcher + ->method('fetch') + ->willReturn(new ArrayCollection()); $this->assertTrue($this->importProjectTask->run('https://foo.git')); } diff --git a/src/App/Tests/ProjectImport/LockFileFetcherTest.php b/src/App/Tests/ProjectImport/LockFileFetcherTest.php index f5f95ae..7e942c6 100644 --- a/src/App/Tests/ProjectImport/LockFileFetcherTest.php +++ b/src/App/Tests/ProjectImport/LockFileFetcherTest.php @@ -8,7 +8,7 @@ use App\ProjectImport\LockFileFetcher; use Composer\Repository\Vcs\VcsDriver; use PHPUnit\Framework\Attributes\Test; -use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; class LockFileFetcherTest extends TestCase @@ -30,7 +30,7 @@ public function getLockContentsReturnsComposerLockContentsAsString(): void $this->assertIsString($contents); } - private function getVcsDriverFactoryMock(): VcsDriverFactory&MockObject + private function getVcsDriverFactoryMock(): VcsDriverFactory&Stub { $vcsDriverMock = $this->getMockBuilder(VcsDriver::class) ->disableOriginalConstructor() @@ -39,11 +39,11 @@ private function getVcsDriverFactoryMock(): VcsDriverFactory&MockObject ->method('getFileContent') ->willReturn(file_get_contents(__DIR__.'/composer_test.lock')); - $vcsDriverFactoryMock = $this->getMockBuilder(VcsDriverFactory::class) - ->disableOriginalConstructor() - ->getMock(); - $vcsDriverFactoryMock->method('getDriver')->willReturn($vcsDriverMock); + $vcsDriverFactoryStub = $this->createStub(VcsDriverFactory::class); + $vcsDriverFactoryStub + ->method('getDriver') + ->willReturn($vcsDriverMock); - return $vcsDriverFactoryMock; + return $vcsDriverFactoryStub; } } From d4801a666a22c46f5851998c22a80db27a6e5c33 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 11:25:24 +0200 Subject: [PATCH 28/51] Remove unused doctrine migrations dependencies --- composer.json | 2 - composer.lock | 256 +------------------------------------------------- 2 files changed, 1 insertion(+), 257 deletions(-) diff --git a/composer.json b/composer.json index 4b43b79..60894bb 100755 --- a/composer.json +++ b/composer.json @@ -7,8 +7,6 @@ "composer/composer": "^2.0", "doctrine/dbal": "^4.0", "doctrine/doctrine-bundle": "^3.0", - "doctrine/doctrine-migrations-bundle": "^3.0", - "doctrine/migrations": "^3.0", "doctrine/orm": "^3.0", "symfony/asset": "^8.0", "symfony/console": "^8.0", diff --git a/composer.lock b/composer.lock index 34b99e9..4daa72e 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": "d67cc9756ce7e400bb212f855458424c", + "content-hash": "d72e91d4de60010f067b684dab7d3115", "packages": [ { "name": "composer/ca-bundle", @@ -982,91 +982,6 @@ ], "time": "2025-12-24T12:24:29+00:00" }, - { - "name": "doctrine/doctrine-migrations-bundle", - "version": "3.7.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/1e380c6dd8ac8488217f39cff6b77e367f1a644b", - "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b", - "shasum": "" - }, - "require": { - "doctrine/doctrine-bundle": "^2.4 || ^3.0", - "doctrine/migrations": "^3.2", - "php": "^7.2 || ^8.0", - "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0 || ^8.0" - }, - "require-dev": { - "composer/semver": "^3.0", - "doctrine/coding-standard": "^12 || ^14", - "doctrine/orm": "^2.6 || ^3", - "phpstan/phpstan": "^1.4 || ^2", - "phpstan/phpstan-deprecation-rules": "^1 || ^2", - "phpstan/phpstan-phpunit": "^1 || ^2", - "phpstan/phpstan-strict-rules": "^1.1 || ^2", - "phpstan/phpstan-symfony": "^1.3 || ^2", - "phpunit/phpunit": "^8.5 || ^9.5", - "symfony/phpunit-bridge": "^6.3 || ^7 || ^8", - "symfony/var-exporter": "^5.4 || ^6 || ^7 || ^8" - }, - "type": "symfony-bundle", - "autoload": { - "psr-4": { - "Doctrine\\Bundle\\MigrationsBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Doctrine Project", - "homepage": "https://www.doctrine-project.org" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony DoctrineMigrationsBundle", - "homepage": "https://www.doctrine-project.org", - "keywords": [ - "dbal", - "migrations", - "schema" - ], - "support": { - "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", - "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.7.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-migrations-bundle", - "type": "tidelift" - } - ], - "time": "2025-11-15T19:02:59+00:00" - }, { "name": "doctrine/event-manager", "version": "2.1.1", @@ -1394,109 +1309,6 @@ ], "time": "2024-02-05T11:56:58+00:00" }, - { - "name": "doctrine/migrations", - "version": "3.9.7", - "source": { - "type": "git", - "url": "https://github.com/doctrine/migrations.git", - "reference": "96cb2a89b56c9efb0bac38e606dc0b0f13e650ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/96cb2a89b56c9efb0bac38e606dc0b0f13e650ec", - "reference": "96cb2a89b56c9efb0bac38e606dc0b0f13e650ec", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2", - "doctrine/dbal": "^3.6 || ^4", - "doctrine/deprecations": "^0.5.3 || ^1", - "doctrine/event-manager": "^1.2 || ^2.0", - "php": "^8.1", - "psr/log": "^1.1.3 || ^2 || ^3", - "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0 || ^8.0", - "symfony/var-exporter": "^6.2 || ^7.0 || ^8.0" - }, - "conflict": { - "doctrine/orm": "<2.12 || >=4" - }, - "require-dev": { - "doctrine/coding-standard": "^14", - "doctrine/orm": "^2.13 || ^3", - "doctrine/persistence": "^2 || ^3 || ^4", - "doctrine/sql-formatter": "^1.0", - "ext-pdo_sqlite": "*", - "fig/log-test": "^1", - "phpstan/phpstan": "^2", - "phpstan/phpstan-deprecation-rules": "^2", - "phpstan/phpstan-phpunit": "^2", - "phpstan/phpstan-strict-rules": "^2", - "phpstan/phpstan-symfony": "^2", - "phpunit/phpunit": "^10.3 || ^11.0 || ^12.0", - "symfony/cache": "^5.4 || ^6.0 || ^7.0 || ^8.0", - "symfony/process": "^5.4 || ^6.0 || ^7.0 || ^8.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0 || ^8.0" - }, - "suggest": { - "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", - "symfony/yaml": "Allows the use of yaml for migration configuration files." - }, - "bin": [ - "bin/doctrine-migrations" - ], - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Migrations\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Michael Simonson", - "email": "contact@mikesimonson.com" - } - ], - "description": "PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.", - "homepage": "https://www.doctrine-project.org/projects/migrations.html", - "keywords": [ - "database", - "dbal", - "migrations" - ], - "support": { - "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.9.7" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fmigrations", - "type": "tidelift" - } - ], - "time": "2026-04-23T19:33:20+00:00" - }, { "name": "doctrine/orm", "version": "3.6.5", @@ -5460,72 +5272,6 @@ ], "time": "2026-03-28T09:44:51+00:00" }, - { - "name": "symfony/stopwatch", - "version": "v8.0.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "85954ed72d5440ea4dc9a10b7e49e01df766ffa3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/85954ed72d5440ea4dc9a10b7e49e01df766ffa3", - "reference": "85954ed72d5440ea4dc9a10b7e49e01df766ffa3", - "shasum": "" - }, - "require": { - "php": ">=8.4", - "symfony/service-contracts": "^2.5|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/stopwatch/tree/v8.0.8" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "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": "2026-03-30T15:14:47+00:00" - }, { "name": "symfony/string", "version": "v8.0.11", From 7149a720c0e67e6f0d183d95d1b263a035376e2b Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 11:30:53 +0200 Subject: [PATCH 29/51] Remove unused symfony/yaml --- composer.json | 3 +- composer.lock | 77 +-------------------------------------------------- 2 files changed, 2 insertions(+), 78 deletions(-) diff --git a/composer.json b/composer.json index 60894bb..2aeebb1 100755 --- a/composer.json +++ b/composer.json @@ -16,8 +16,7 @@ "symfony/monolog-bundle": "^4.0", "symfony/translation": "^8.0", "symfony/twig-bundle": "^8.0", - "symfony/validator": "^8.0", - "symfony/yaml": "^8.0" + "symfony/validator": "^8.0" }, "require-dev": { "phpunit/phpunit": "^13.0", diff --git a/composer.lock b/composer.lock index 4daa72e..58fe988 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": "d72e91d4de60010f067b684dab7d3115", + "content-hash": "feb518eb60b8fc76bea6de0fe5bd96ca", "packages": [ { "name": "composer/ca-bundle", @@ -6073,81 +6073,6 @@ ], "time": "2026-04-18T13:51:42+00:00" }, - { - "name": "symfony/yaml", - "version": "v8.0.11", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "48046fbd5567bd1717f278eaa2cfc3131f489984" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/48046fbd5567bd1717f278eaa2cfc3131f489984", - "reference": "48046fbd5567bd1717f278eaa2cfc3131f489984", - "shasum": "" - }, - "require": { - "php": ">=8.4", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<7.4" - }, - "require-dev": { - "symfony/console": "^7.4|^8.0" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v8.0.11" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "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": "2026-05-13T12:07:53+00:00" - }, { "name": "twig/twig", "version": "v3.24.0", From 4a6e5ecf5b9722016e3dec3f56daba655dd411db Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 11:35:02 +0200 Subject: [PATCH 30/51] Remove unused symfony/translation There was only configuration, which this commit removes, too. --- composer.json | 1 - composer.lock | 95 +----------------------------------------- src/config.default.php | 1 - 3 files changed, 1 insertion(+), 96 deletions(-) diff --git a/composer.json b/composer.json index 2aeebb1..eec4896 100755 --- a/composer.json +++ b/composer.json @@ -14,7 +14,6 @@ "symfony/form": "^8.0", "symfony/framework-bundle": "^8.0", "symfony/monolog-bundle": "^4.0", - "symfony/translation": "^8.0", "symfony/twig-bundle": "^8.0", "symfony/validator": "^8.0" }, diff --git a/composer.lock b/composer.lock index 58fe988..b1b9ce2 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": "feb518eb60b8fc76bea6de0fe5bd96ca", + "content-hash": "a3997dba1a096e4acb74986d4de1c4bd", "packages": [ { "name": "composer/ca-bundle", @@ -5362,99 +5362,6 @@ ], "time": "2026-05-13T12:07:53+00:00" }, - { - "name": "symfony/translation", - "version": "v8.0.10", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "f63e9342e12646a57c91ef8a366a4f9d8e557b67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/f63e9342e12646a57c91ef8a366a4f9d8e557b67", - "reference": "f63e9342e12646a57c91ef8a366a4f9d8e557b67", - "shasum": "" - }, - "require": { - "php": ">=8.4", - "symfony/polyfill-mbstring": "^1.0", - "symfony/translation-contracts": "^3.6.1" - }, - "conflict": { - "nikic/php-parser": "<5.0", - "symfony/http-client-contracts": "<2.5", - "symfony/service-contracts": "<2.5" - }, - "provide": { - "symfony/translation-implementation": "2.3|3.0" - }, - "require-dev": { - "nikic/php-parser": "^5.0", - "psr/log": "^1|^2|^3", - "symfony/config": "^7.4|^8.0", - "symfony/console": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/finder": "^7.4|^8.0", - "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^7.4|^8.0", - "symfony/intl": "^7.4|^8.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^7.4|^8.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^7.4|^8.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/translation/tree/v8.0.10" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "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": "2026-05-06T11:30:54+00:00" - }, { "name": "symfony/translation-contracts", "version": "v3.7.0", diff --git a/src/config.default.php b/src/config.default.php index 72b49c8..499b255 100644 --- a/src/config.default.php +++ b/src/config.default.php @@ -36,7 +36,6 @@ 'csrf_protection' => ['enabled' => false], ], 'validation' => true, - 'translator' => ['fallback' => 'de_DE'], 'session' => ['save_path' => null], 'default_locale' => 'de_DE', 'trusted_hosts' => '%framework.trusted_hosts%', From 8362ab6b579348be947daac13fd04998b023383f Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 11:39:32 +0200 Subject: [PATCH 31/51] Use #[AsCommand] attribute --- src/App/Command/ImportProjectCommand.php | 10 ++++++---- src/App/Command/ReimportAllProjectsCommand.php | 12 +++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/App/Command/ImportProjectCommand.php b/src/App/Command/ImportProjectCommand.php index bc09a6b..099cd8d 100644 --- a/src/App/Command/ImportProjectCommand.php +++ b/src/App/Command/ImportProjectCommand.php @@ -5,11 +5,16 @@ namespace App\Command; use App\ProjectImport\ImportProjectTask; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +#[AsCommand( + name: 'app:import-project', + description: 'Imports project and extracts relevant composer dependency information.', +)] class ImportProjectCommand extends Command { public function __construct(private ImportProjectTask $importProjectTask) @@ -19,10 +24,7 @@ public function __construct(private ImportProjectTask $importProjectTask) protected function configure(): void { - $this - ->setName('app:import-project') - ->setDescription('Imports project and extracts relevant composer dependency information.') - ->addArgument('vcsUrl', InputArgument::REQUIRED, 'http Url of the vcs repository'); + $this->addArgument('vcsUrl', InputArgument::REQUIRED, 'http Url of the vcs repository'); } protected function execute(InputInterface $input, OutputInterface $output): int diff --git a/src/App/Command/ReimportAllProjectsCommand.php b/src/App/Command/ReimportAllProjectsCommand.php index bfd2dff..e0e7804 100644 --- a/src/App/Command/ReimportAllProjectsCommand.php +++ b/src/App/Command/ReimportAllProjectsCommand.php @@ -6,10 +6,15 @@ use App\ProjectImport\ImportProjectTask; use App\Repository\ProjectRepository; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +#[AsCommand( + name: 'app:reimport-all-projects', + description: 'Re-Imports all projects that have already been imported and updates metadata and relevant composer dependency information.', +)] class ReimportAllProjectsCommand extends Command { public function __construct( @@ -19,13 +24,6 @@ public function __construct( parent::__construct(); } - protected function configure(): void - { - $this - ->setName('app:reimport-all-projects') - ->setDescription('Re-Imports all projects that have already been imported and updates metadata and relevant composer dependency information.'); - } - protected function execute(InputInterface $input, OutputInterface $output): int { $errorCode = 0; From 402001dda34af0d5017d348ce8238e57c363229c Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 11:41:02 +0200 Subject: [PATCH 32/51] Add readonly modifier --- src/App/Command/ImportProjectCommand.php | 2 +- src/App/Controller/ImportRepositoriesController.php | 6 +++--- src/App/Controller/MainController.php | 4 ++-- src/App/Controller/PackageController.php | 6 +++--- src/App/Controller/ProjectController.php | 4 ++-- src/App/Controller/SettingsController.php | 6 +++--- src/App/Controller/UsageSearchController.php | 6 +++--- src/App/Controller/WebhookController.php | 2 +- src/App/Factory/VcsDriverFactory.php | 4 ++-- src/App/ProjectImport/ComposerPackageFetcher.php | 2 +- src/App/ProjectImport/ImportProjectTask.php | 10 +++++----- 11 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/App/Command/ImportProjectCommand.php b/src/App/Command/ImportProjectCommand.php index 099cd8d..95a0f8f 100644 --- a/src/App/Command/ImportProjectCommand.php +++ b/src/App/Command/ImportProjectCommand.php @@ -17,7 +17,7 @@ )] class ImportProjectCommand extends Command { - public function __construct(private ImportProjectTask $importProjectTask) + public function __construct(private readonly ImportProjectTask $importProjectTask) { parent::__construct(); } diff --git a/src/App/Controller/ImportRepositoriesController.php b/src/App/Controller/ImportRepositoriesController.php index 555f7f3..8142452 100644 --- a/src/App/Controller/ImportRepositoriesController.php +++ b/src/App/Controller/ImportRepositoriesController.php @@ -20,9 +20,9 @@ class ImportRepositoriesController private bool $demoMode; public function __construct( - private FormFactoryInterface $formFactory, - private ImportProjectTask $importProjectTask, - private Environment $twig, + private readonly FormFactoryInterface $formFactory, + private readonly ImportProjectTask $importProjectTask, + private readonly Environment $twig, #[Autowire(param: 'demo_mode')] mixed $demoMode = null, ) { diff --git a/src/App/Controller/MainController.php b/src/App/Controller/MainController.php index c320854..710344a 100755 --- a/src/App/Controller/MainController.php +++ b/src/App/Controller/MainController.php @@ -14,8 +14,8 @@ class MainController { public function __construct( - private FormFactoryInterface $formFactory, - private Environment $twig, + private readonly FormFactoryInterface $formFactory, + private readonly Environment $twig, ) { } diff --git a/src/App/Controller/PackageController.php b/src/App/Controller/PackageController.php index 9986edd..379b356 100644 --- a/src/App/Controller/PackageController.php +++ b/src/App/Controller/PackageController.php @@ -16,9 +16,9 @@ class PackageController { public function __construct( - private UrlGeneratorInterface $urlGenerator, - private PackageRepository $packageRepository, - private Environment $twig, + private readonly UrlGeneratorInterface $urlGenerator, + private readonly PackageRepository $packageRepository, + private readonly Environment $twig, ) { } diff --git a/src/App/Controller/ProjectController.php b/src/App/Controller/ProjectController.php index 0304722..e296bec 100644 --- a/src/App/Controller/ProjectController.php +++ b/src/App/Controller/ProjectController.php @@ -13,8 +13,8 @@ class ProjectController { public function __construct( - private ProjectRepository $projectRepository, - private Environment $twig, + private readonly ProjectRepository $projectRepository, + private readonly Environment $twig, ) { } diff --git a/src/App/Controller/SettingsController.php b/src/App/Controller/SettingsController.php index d437906..cabf879 100644 --- a/src/App/Controller/SettingsController.php +++ b/src/App/Controller/SettingsController.php @@ -13,9 +13,9 @@ class SettingsController { public function __construct( - private ProjectRepository $projectRepository, - private PackageRepository $packageRepository, - private Environment $twig, + private readonly ProjectRepository $projectRepository, + private readonly PackageRepository $packageRepository, + private readonly Environment $twig, ) { } diff --git a/src/App/Controller/UsageSearchController.php b/src/App/Controller/UsageSearchController.php index 2caa1b4..0481df1 100644 --- a/src/App/Controller/UsageSearchController.php +++ b/src/App/Controller/UsageSearchController.php @@ -24,9 +24,9 @@ class UsageSearchController { public function __construct( - private UrlGeneratorInterface $urlGenerator, - private PackageRepository $packageRepository, - private Environment $twig, + private readonly UrlGeneratorInterface $urlGenerator, + private readonly PackageRepository $packageRepository, + private readonly Environment $twig, ) { } diff --git a/src/App/Controller/WebhookController.php b/src/App/Controller/WebhookController.php index f9e12c9..6f8c332 100644 --- a/src/App/Controller/WebhookController.php +++ b/src/App/Controller/WebhookController.php @@ -14,7 +14,7 @@ class WebhookController { public function __construct( - private ImportProjectTask $importProjectTask, + private readonly ImportProjectTask $importProjectTask, #[Autowire(param: 'app.github.webhook_secret')] private ?string $webhookSecret = null, ) { diff --git a/src/App/Factory/VcsDriverFactory.php b/src/App/Factory/VcsDriverFactory.php index 8a1eb63..37fb22e 100644 --- a/src/App/Factory/VcsDriverFactory.php +++ b/src/App/Factory/VcsDriverFactory.php @@ -22,11 +22,11 @@ class VcsDriverFactory * class-string * > */ - private array $drivers; + private readonly array $drivers; public function __construct( #[Autowire(param: 'app.github.token')] - private ?string $githubOAuthToken = null, + private readonly ?string $githubOAuthToken = null, ?array $drivers = null, ) { $this->drivers = $drivers ?: [ diff --git a/src/App/ProjectImport/ComposerPackageFetcher.php b/src/App/ProjectImport/ComposerPackageFetcher.php index bb3dae9..1015edb 100644 --- a/src/App/ProjectImport/ComposerPackageFetcher.php +++ b/src/App/ProjectImport/ComposerPackageFetcher.php @@ -8,7 +8,7 @@ class ComposerPackageFetcher { - public function __construct(private LockFileFetcher $lockFileFetcher) + public function __construct(private readonly LockFileFetcher $lockFileFetcher) { } diff --git a/src/App/ProjectImport/ImportProjectTask.php b/src/App/ProjectImport/ImportProjectTask.php index 53bba0c..2b63555 100644 --- a/src/App/ProjectImport/ImportProjectTask.php +++ b/src/App/ProjectImport/ImportProjectTask.php @@ -15,11 +15,11 @@ class ImportProjectTask { public function __construct( - private EntityManagerInterface $entityManager, - private ProjectProviderInterface $projectProvider, - private PackageVersionFetcher $packageVersionFetcher, - private VcsDriverFactory $vcsDriverFactory, - private LoggerInterface $logger, + private readonly EntityManagerInterface $entityManager, + private readonly ProjectProviderInterface $projectProvider, + private readonly PackageVersionFetcher $packageVersionFetcher, + private readonly VcsDriverFactory $vcsDriverFactory, + private readonly LoggerInterface $logger, ) { } From b2063f0984eb051a20312c3df58feb22cd173c11 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 11:42:29 +0200 Subject: [PATCH 33/51] Use human-readable constants --- src/App/Command/ReimportAllProjectsCommand.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/App/Command/ReimportAllProjectsCommand.php b/src/App/Command/ReimportAllProjectsCommand.php index e0e7804..809a1bf 100644 --- a/src/App/Command/ReimportAllProjectsCommand.php +++ b/src/App/Command/ReimportAllProjectsCommand.php @@ -26,7 +26,7 @@ public function __construct( protected function execute(InputInterface $input, OutputInterface $output): int { - $errorCode = 0; + $returnCode = Command::SUCCESS; $projects = $this->projectRepository->findAll(); @@ -37,10 +37,10 @@ protected function execute(InputInterface $input, OutputInterface $output): int $output->writeln('Successfully re-imported '.$project->getVcsUrl()); } else { $output->writeln('Re-import failed for '.$project->getVcsUrl().'. Make sure you have sufficient repository access and that it contains a composer.lock file. See logs for details.'); - $errorCode = 1; + $returnCode = Command::FAILURE; } } - return $errorCode; + return $returnCode; } } From bcd17be927edb92222d542d6fba0fde49e816078 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 11:45:38 +0200 Subject: [PATCH 34/51] Remove superfluous (default and derived values) configuration --- src/config.default.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/config.default.php b/src/config.default.php index 499b255..b80ef2d 100644 --- a/src/config.default.php +++ b/src/config.default.php @@ -31,12 +31,7 @@ $container->extension('framework', [ 'secret' => '%secret%', - 'form' => [ - 'enabled' => true, - 'csrf_protection' => ['enabled' => false], - ], - 'validation' => true, - 'session' => ['save_path' => null], + 'form' => ['csrf_protection' => ['enabled' => false]], 'default_locale' => 'de_DE', 'trusted_hosts' => '%framework.trusted_hosts%', ]); From a250a5c666985032b25eec1f9e51ea8668a24548 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 12:03:04 +0200 Subject: [PATCH 35/51] Configure MySQL version 8.0 as default for newer dialect --- src/config.default.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.default.php b/src/config.default.php index b80ef2d..a844e1f 100644 --- a/src/config.default.php +++ b/src/config.default.php @@ -50,7 +50,7 @@ 'password' => '%mysql.password%', 'charset' => 'utf8', 'schema_filter' => '~^(?!(_dbversion$|_fixed_tableid$|wfd_))~', - 'server_version' => '5.7', + 'server_version' => '8.0', ], 'orm' => [ 'enable_native_lazy_objects' => true, From 233167d3fb3dd83d93112ce13431f76b38e76644 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 12:06:16 +0200 Subject: [PATCH 36/51] Require PHP ^8.4 Update transitive dependencies. --- composer.json | 2 +- composer.lock | 169 +++++++++++++++++++++----------------------------- 2 files changed, 73 insertions(+), 98 deletions(-) diff --git a/composer.json b/composer.json index eec4896..1836a97 100755 --- a/composer.json +++ b/composer.json @@ -3,7 +3,7 @@ "type": "project", "description": "Composer Dependency Tracking", "require": { - "php": "^8.3", + "php": "^8.4", "composer/composer": "^2.0", "doctrine/dbal": "^4.0", "doctrine/doctrine-bundle": "^3.0", diff --git a/composer.lock b/composer.lock index b1b9ce2..529e87e 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": "a3997dba1a096e4acb74986d4de1c4bd", + "content-hash": "45a7deb081becb467b8d93fbee0bed5d", "packages": [ { "name": "composer/ca-bundle", @@ -2496,34 +2496,33 @@ }, { "name": "symfony/config", - "version": "v7.4.10", + "version": "v8.0.10", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "d91b6c7cd2a8c9a9c2b8d26c8f5ed48edf99ef57" + "reference": "de665e669412ec2effe004d90298dbbdaf6e7e8b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/d91b6c7cd2a8c9a9c2b8d26c8f5ed48edf99ef57", - "reference": "d91b6c7cd2a8c9a9c2b8d26c8f5ed48edf99ef57", + "url": "https://api.github.com/repos/symfony/config/zipball/de665e669412ec2effe004d90298dbbdaf6e7e8b", + "reference": "de665e669412ec2effe004d90298dbbdaf6e7e8b", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^7.1|^8.0", - "symfony/polyfill-ctype": "~1.8" + "symfony/filesystem": "^7.4|^8.0", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/finder": "<6.4", "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^6.4|^7.0|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0|^8.0" + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -2551,7 +2550,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v7.4.10" + "source": "https://github.com/symfony/config/tree/v8.0.10" }, "funding": [ { @@ -2571,7 +2570,7 @@ "type": "tidelift" } ], - "time": "2026-05-03T14:20:49+00:00" + "time": "2026-05-04T13:41:39+00:00" }, { "name": "symfony/console", @@ -2665,39 +2664,36 @@ }, { "name": "symfony/dependency-injection", - "version": "v7.4.10", + "version": "v8.0.10", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "4eb0d9dfa9d4f7c59216baf49b3ed6b1fb72293d" + "reference": "6fc374dae45a7633a5865da7fc2908baf29d4900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/4eb0d9dfa9d4f7c59216baf49b3ed6b1fb72293d", - "reference": "4eb0d9dfa9d4f7c59216baf49b3ed6b1fb72293d", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6fc374dae45a7633a5865da7fc2908baf29d4900", + "reference": "6fc374dae45a7633a5865da7fc2908baf29d4900", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/service-contracts": "^3.6", - "symfony/var-exporter": "^6.4.20|^7.2.5|^8.0" + "symfony/var-exporter": "^7.4|^8.0" }, "conflict": { - "ext-psr": "<1.1|>=2", - "symfony/config": "<6.4", - "symfony/finder": "<6.4", - "symfony/yaml": "<6.4" + "ext-psr": "<1.1|>=2" }, "provide": { "psr/container-implementation": "1.1|2.0", "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/yaml": "^6.4|^7.0|^8.0" + "symfony/config": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -2725,7 +2721,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.4.10" + "source": "https://github.com/symfony/dependency-injection/tree/v8.0.10" }, "funding": [ { @@ -2745,7 +2741,7 @@ "type": "tidelift" } ], - "time": "2026-05-06T11:55:30+00:00" + "time": "2026-05-06T11:55:35+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3696,74 +3692,59 @@ }, { "name": "symfony/http-kernel", - "version": "v7.4.11", + "version": "v8.0.11", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "eb9d68199af3fcfb3fb4d2e227367b68f8c1bb88" + "reference": "20d3680373f4b791903c09e74b45402b4aeda71c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/eb9d68199af3fcfb3fb4d2e227367b68f8c1bb88", - "reference": "eb9d68199af3fcfb3fb4d2e227367b68f8c1bb88", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/20d3680373f4b791903c09e74b45402b4aeda71c", + "reference": "20d3680373f4b791903c09e74b45402b4aeda71c", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0|^8.0", - "symfony/event-dispatcher": "^7.3|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", "symfony/http-foundation": "^7.4|^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<6.4", - "symfony/cache": "<6.4", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<6.4", "symfony/flex": "<2.10", - "symfony/form": "<6.4", - "symfony/http-client": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", - "symfony/translation": "<6.4", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.4", - "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.4", - "twig/twig": "<3.12" + "twig/twig": "<3.21" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^6.4|^7.0|^8.0", - "symfony/clock": "^6.4|^7.0|^8.0", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/css-selector": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4.1|^7.0.1|^8.0", - "symfony/dom-crawler": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/browser-kit": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/css-selector": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/dom-crawler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/property-access": "^7.1|^8.0", - "symfony/routing": "^6.4|^7.0|^8.0", - "symfony/serializer": "^7.1|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^6.4|^7.0|^8.0", - "symfony/validator": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0", - "symfony/var-exporter": "^6.4|^7.0|^8.0", - "twig/twig": "^3.12" + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0", + "symfony/var-exporter": "^7.4|^8.0", + "twig/twig": "^3.21" }, "type": "library", "autoload": { @@ -3791,7 +3772,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.4.11" + "source": "https://github.com/symfony/http-kernel/tree/v8.0.11" }, "funding": [ { @@ -3811,42 +3792,36 @@ "type": "tidelift" } ], - "time": "2026-05-13T17:55:00+00:00" + "time": "2026-05-13T18:07:14+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v7.4.9", + "version": "v8.0.9", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "20366bceee51838144a14805204bb792cb3d09f2" + "reference": "4b7249b1520773ad325e99231b08443017729297" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/20366bceee51838144a14805204bb792cb3d09f2", - "reference": "20366bceee51838144a14805204bb792cb3d09f2", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/4b7249b1520773ad325e99231b08443017729297", + "reference": "4b7249b1520773ad325e99231b08443017729297", "shasum": "" }, "require": { "monolog/monolog": "^3", - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0|^8.0", + "php": ">=8.4", + "symfony/http-kernel": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3" }, - "conflict": { - "symfony/console": "<6.4", - "symfony/http-foundation": "<6.4", - "symfony/security-core": "<6.4" - }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/mailer": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/mime": "^6.4|^7.0|^8.0", - "symfony/security-core": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/console": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/mailer": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/security-core": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "symfony-bridge", "autoload": { @@ -3874,7 +3849,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v7.4.9" + "source": "https://github.com/symfony/monolog-bridge/tree/v8.0.9" }, "funding": [ { @@ -3894,7 +3869,7 @@ "type": "tidelift" } ], - "time": "2026-04-29T13:21:53+00:00" + "time": "2026-04-29T15:02:55+00:00" }, { "name": "symfony/monolog-bundle", @@ -8175,7 +8150,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^8.3" + "php": "^8.4" }, "platform-dev": [], "plugin-api-version": "2.6.0" From 6031a9a9b216e7605067d03fc062b70a4289289c Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 12:18:19 +0200 Subject: [PATCH 37/51] Make Project::$archived private with getter and setter --- src/App/Entity/Project.php | 12 +++++++++++- src/App/ProjectImport/ImportProjectTask.php | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/App/Entity/Project.php b/src/App/Entity/Project.php index 0ca18f2..ff5448d 100644 --- a/src/App/Entity/Project.php +++ b/src/App/Entity/Project.php @@ -28,7 +28,7 @@ class Project private ?string $description = null; #[ORM\Column] - public bool $archived = false; + private bool $archived = false; #[ORM\ManyToMany(targetEntity: PackageVersion::class, mappedBy: 'projects', cascade: ['persist'])] private Collection $packageVersions; @@ -64,6 +64,11 @@ public function getPackageVersions(): Collection return $this->packageVersions; } + public function isArchived(): bool + { + return $this->archived; + } + public function setVcsUrl(string $vcsUrl): void { $this->vcsUrl = $vcsUrl; @@ -74,6 +79,11 @@ public function setDescription(?string $description): void $this->description = $description; } + public function setArchived(bool $archived): void + { + $this->archived = $archived; + } + public function setUsedPackageVersions(ArrayCollection $importedPackageVersions): void { foreach ($this->packageVersions as $key => $packageVersion) { diff --git a/src/App/ProjectImport/ImportProjectTask.php b/src/App/ProjectImport/ImportProjectTask.php index 2b63555..22c53c2 100644 --- a/src/App/ProjectImport/ImportProjectTask.php +++ b/src/App/ProjectImport/ImportProjectTask.php @@ -50,7 +50,7 @@ public function run(string $vcsUrl): bool return false; } - $project->archived = $repoData['archived'] ?? false; + $project->setArchived($repoData['archived'] ?? false); } try { From d6ee455be6270af198f795c71e360f3a8235d906 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 12:59:38 +0200 Subject: [PATCH 38/51] Fix frontend paths (no @AppBundle anymore) --- gulp-config.js | 2 +- templates/import_repositories/import_form.html.twig | 2 +- templates/main/main.html.twig | 4 ++-- templates/package/detail.html.twig | 2 +- templates/project/detail.html.twig | 2 +- templates/settings/settings.html.twig | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/gulp-config.js b/gulp-config.js index 63dbca2..04b1db9 100644 --- a/gulp-config.js +++ b/gulp-config.js @@ -11,7 +11,7 @@ module.exports = { files: [ '../node_modules/jquery/dist/jquery.min.js', '../node_modules/bootstrap/dist/js/bootstrap.min.js', - '../src/AppBundle/Resources/public/js/searchProjectsWithPackageVersionForm.js', + '../src/App/Resources/public/js/searchProjectsWithPackageVersionForm.js', ], destDir: 'js' } diff --git a/templates/import_repositories/import_form.html.twig b/templates/import_repositories/import_form.html.twig index f42c6e6..a49aea8 100644 --- a/templates/import_repositories/import_form.html.twig +++ b/templates/import_repositories/import_form.html.twig @@ -1,5 +1,5 @@ {# projects Project[] #} -{% extends '@App/Base/base.html.twig' %} +{% extends 'Base/base.html.twig' %} {% block main %}
diff --git a/templates/main/main.html.twig b/templates/main/main.html.twig index 657d075..e841f41 100755 --- a/templates/main/main.html.twig +++ b/templates/main/main.html.twig @@ -1,5 +1,5 @@ {# projects Project[] #} -{% extends '@App/Base/base.html.twig' %} +{% extends 'Base/base.html.twig' %} {% block main %} {{ form_start(searchPackageForm, {'action': path('main'), 'attr': {'class': 'js-findProjectsForm mb-5'}}) }} @@ -27,7 +27,7 @@ {% if matchingPackageVersions is defined and package is defined %}
- {% include '@App/usage_search/search_results.html.twig' with { + {% include 'usage_search/search_results.html.twig' with { 'package': package, 'matchingPackageVersions': matchingPackageVersions, } %} diff --git a/templates/package/detail.html.twig b/templates/package/detail.html.twig index 5647bee..3c6befe 100644 --- a/templates/package/detail.html.twig +++ b/templates/package/detail.html.twig @@ -1,6 +1,6 @@ {# package Package #} {# project Project #} -{% extends '@App/Base/base.html.twig' %} +{% extends 'Base/base.html.twig' %} {% block main %}
diff --git a/templates/project/detail.html.twig b/templates/project/detail.html.twig index 56501d2..4c12a4e 100644 --- a/templates/project/detail.html.twig +++ b/templates/project/detail.html.twig @@ -1,6 +1,6 @@ {# project Project #} {# usage PackageVersion #} -{% extends '@App/Base/base.html.twig' %} +{% extends 'Base/base.html.twig' %} {% block main %}
diff --git a/templates/settings/settings.html.twig b/templates/settings/settings.html.twig index 9db63c9..d990c0f 100644 --- a/templates/settings/settings.html.twig +++ b/templates/settings/settings.html.twig @@ -1,6 +1,6 @@ {# projects Project[] #} -{% extends '@App/Base/base.html.twig' %} +{% extends 'Base/base.html.twig' %} {% block head %} {{ parent() }} @@ -45,4 +45,4 @@
-{% endblock %} \ No newline at end of file +{% endblock %} From c348a671a2750d05a124b94c55b473791aae67d8 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Thu, 14 May 2026 13:15:49 +0200 Subject: [PATCH 39/51] Loosen type for "all versions" constraints that have no version string --- src/App/Entity/VersionConstraint.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App/Entity/VersionConstraint.php b/src/App/Entity/VersionConstraint.php index 8e6626b..88bc015 100644 --- a/src/App/Entity/VersionConstraint.php +++ b/src/App/Entity/VersionConstraint.php @@ -16,7 +16,7 @@ class VersionConstraint private readonly ?string $normalizedVersionString; - public function __construct(string $operator, string $versionString) + public function __construct(string $operator, ?string $versionString) { if (!preg_match(self::VALID_OPERATORS, $operator)) { throw new InvalidArgumentException('The operator must match the regex expression '.self::VALID_OPERATORS); From f660e87393c223fe62e1c280483db84d6b24d488 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Mon, 18 May 2026 11:11:20 +0200 Subject: [PATCH 40/51] Import config.local.yml, which requires Symfony YAML package While not strictly necessary for baton itself, this is how webfactory's deployment setup currently provides configuration. --- composer.json | 3 +- composer.lock | 83 +++++++++++++++++++++++++++++++++++++++++++++++--- src/config.php | 1 + 3 files changed, 82 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index 1836a97..2b731db 100755 --- a/composer.json +++ b/composer.json @@ -15,7 +15,8 @@ "symfony/framework-bundle": "^8.0", "symfony/monolog-bundle": "^4.0", "symfony/twig-bundle": "^8.0", - "symfony/validator": "^8.0" + "symfony/validator": "^8.0", + "symfony/yaml": "^8.0" }, "require-dev": { "phpunit/phpunit": "^13.0", diff --git a/composer.lock b/composer.lock index 529e87e..d3718f5 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": "45a7deb081becb467b8d93fbee0bed5d", + "content-hash": "2b0b417eb0f3557cb0e65277250eff1c", "packages": [ { "name": "composer/ca-bundle", @@ -5955,6 +5955,81 @@ ], "time": "2026-04-18T13:51:42+00:00" }, + { + "name": "symfony/yaml", + "version": "v8.0.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "48046fbd5567bd1717f278eaa2cfc3131f489984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/48046fbd5567bd1717f278eaa2cfc3131f489984", + "reference": "48046fbd5567bd1717f278eaa2cfc3131f489984", + "shasum": "" + }, + "require": { + "php": ">=8.4", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<7.4" + }, + "require-dev": { + "symfony/console": "^7.4|^8.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v8.0.11" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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": "2026-05-13T12:07:53+00:00" + }, { "name": "twig/twig", "version": "v3.24.0", @@ -8146,12 +8221,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "^8.4" }, - "platform-dev": [], - "plugin-api-version": "2.6.0" + "platform-dev": {}, + "plugin-api-version": "2.9.0" } diff --git a/src/config.php b/src/config.php index 0a47b56..a2c9053 100644 --- a/src/config.php +++ b/src/config.php @@ -7,4 +7,5 @@ return static function (ContainerConfigurator $container): void { $container->import(__DIR__.'/config.default.php'); $container->import(__DIR__.'/config.local.php', 'php', true); + $container->import(__DIR__.'/config.local.yml', null, true); }; From a7cad1a3ba1859199273fcca22a898b25101cb13 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Mon, 18 May 2026 11:11:39 +0200 Subject: [PATCH 41/51] git-ignore PHPUnit result cache --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a2c94d4..6f2f240 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ phpunit.xml .idea/ .bowerrc .php-cs-fixer.cache +.phpunit.result.cache data webhookpassword authpasswords From faa0c0fcbea604d1facbcf3253ea791e90ea2111 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Mon, 18 May 2026 14:25:32 +0200 Subject: [PATCH 42/51] Fix: Replace Request::get() call for Symfony 7 compatibility Request::get() was removed in Symfony 7. This method searched multiple sources for data and was removed due to its ambiguity. The replacement for POST data ist `$request->request->get()`. --- src/App/Controller/WebhookController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App/Controller/WebhookController.php b/src/App/Controller/WebhookController.php index 6f8c332..db239f7 100644 --- a/src/App/Controller/WebhookController.php +++ b/src/App/Controller/WebhookController.php @@ -39,7 +39,7 @@ public function updateAction(Request $request): Response } $repositoryWasImported = false; - if ($payload = $request->get('payload')) { + if ($payload = $request->request->get('payload')) { $payload = json_decode($payload, flags: JSON_THROW_ON_ERROR); if (isset($payload->repository) && $payload->repository && $payload->repository->html_url) { $repositoryWasImported = $this->importProjectTask->run($payload->repository->html_url); From 1c51df85f59f9bd2e04f9d5a148f75294a20ce4a Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Mon, 18 May 2026 14:30:24 +0200 Subject: [PATCH 43/51] Add types for constants --- src/App/Entity/VersionConstraint.php | 2 +- src/App/Tests/Entity/PackageTest.php | 4 ++-- src/App/Tests/Entity/PackageVersionTest.php | 2 +- src/App/Tests/Entity/ProjectTest.php | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/App/Entity/VersionConstraint.php b/src/App/Entity/VersionConstraint.php index 88bc015..586ccaa 100644 --- a/src/App/Entity/VersionConstraint.php +++ b/src/App/Entity/VersionConstraint.php @@ -10,7 +10,7 @@ class VersionConstraint { - public const VALID_OPERATORS = '(==|>=|<=|>|<|all)'; + public const string VALID_OPERATORS = '(==|>=|<=|>|<|all)'; private readonly string $operator; diff --git a/src/App/Tests/Entity/PackageTest.php b/src/App/Tests/Entity/PackageTest.php index 2311626..07164a9 100644 --- a/src/App/Tests/Entity/PackageTest.php +++ b/src/App/Tests/Entity/PackageTest.php @@ -10,8 +10,8 @@ class PackageTest extends TestCase { - public const name = 'webfactory/bar'; - public const description = 'foo'; + public const string name = 'webfactory/bar'; + public const string description = 'foo'; private Package $package; diff --git a/src/App/Tests/Entity/PackageVersionTest.php b/src/App/Tests/Entity/PackageVersionTest.php index 074c3d0..8931bd6 100644 --- a/src/App/Tests/Entity/PackageVersionTest.php +++ b/src/App/Tests/Entity/PackageVersionTest.php @@ -13,7 +13,7 @@ class PackageVersionTest extends TestCase { - public const version = '1.0.0'; + public const string version = '1.0.0'; private PackageVersion $packageVersion; diff --git a/src/App/Tests/Entity/ProjectTest.php b/src/App/Tests/Entity/ProjectTest.php index 6a6bbe4..13f9e26 100644 --- a/src/App/Tests/Entity/ProjectTest.php +++ b/src/App/Tests/Entity/ProjectTest.php @@ -13,7 +13,7 @@ class ProjectTest extends TestCase { - public const name = 'foo'; + public const string name = 'foo'; private Project $project; From 8d113eb34a09fb53092c78abea2c323157d78809 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Mon, 18 May 2026 14:34:42 +0200 Subject: [PATCH 44/51] Remove unnecessary assertions They do no longer add anything meaningful beyond the type system. --- src/App/Tests/Factory/VcsDriverFactoryTest.php | 8 ++++---- .../Tests/ProjectImport/DoctrinePackageProviderTest.php | 2 -- .../Tests/ProjectImport/DoctrineProjectProviderTest.php | 2 -- src/App/Tests/ProjectImport/PackageVersionFetcherTest.php | 2 -- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/App/Tests/Factory/VcsDriverFactoryTest.php b/src/App/Tests/Factory/VcsDriverFactoryTest.php index eb124c6..055bbe0 100644 --- a/src/App/Tests/Factory/VcsDriverFactoryTest.php +++ b/src/App/Tests/Factory/VcsDriverFactoryTest.php @@ -5,7 +5,7 @@ namespace App\Tests\Factory; use App\Factory\VcsDriverFactory; -use Composer\Repository\Vcs\VcsDriverInterface; +use PHPUnit\Framework\Attributes\DoesNotPerformAssertions; use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; @@ -19,9 +19,9 @@ protected function setUp(): void } #[Test] - public function getDriverReturnsInstanceOfVcsDriverInterface(): void + #[DoesNotPerformAssertions] + public function getDriverCanBeCalled(): void { - $driver = $this->vcsDriverFactory->getDriver('https://github.com/symfony/symfony'); - $this->assertInstanceOf(VcsDriverInterface::class, $driver); + $this->vcsDriverFactory->getDriver('https://github.com/symfony/symfony'); } } diff --git a/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php b/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php index 43f8591..2cdafde 100644 --- a/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php +++ b/src/App/Tests/ProjectImport/DoctrinePackageProviderTest.php @@ -31,7 +31,6 @@ public function providePackageReturnsNewPackageObjectIfNoneFound(): void $package = $doctrinePackageProvider->providePackage('Foo'); - $this->assertInstanceOf(Package::class, $package); $this->assertSame('Foo', $package->getName()); } @@ -46,7 +45,6 @@ public function providePackageReturnsExistingPackageObjectIfFound(): void $package = $doctrinePackageProvider->providePackage('Bar'); - $this->assertInstanceOf(Package::class, $package); $this->assertSame('Bar', $package->getName()); } } diff --git a/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php b/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php index d7eb021..fc05bef 100644 --- a/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php +++ b/src/App/Tests/ProjectImport/DoctrineProjectProviderTest.php @@ -31,7 +31,6 @@ public function provideProjectReturnsNewProjectObjectIfNoneFound(): void $project = $doctrineProjectProvider->provideProject('Foo'); - $this->assertInstanceOf(Project::class, $project); $this->assertSame('Foo', $project->getName()); } @@ -46,7 +45,6 @@ public function provideProjectReturnsExistingProjectObjectIfFound(): void $project = $doctrineProjectProvider->provideProject('Bar'); - $this->assertInstanceOf(Project::class, $project); $this->assertSame('Bar', $project->getName()); } diff --git a/src/App/Tests/ProjectImport/PackageVersionFetcherTest.php b/src/App/Tests/ProjectImport/PackageVersionFetcherTest.php index d73cce3..6e1f6e3 100644 --- a/src/App/Tests/ProjectImport/PackageVersionFetcherTest.php +++ b/src/App/Tests/ProjectImport/PackageVersionFetcherTest.php @@ -8,7 +8,6 @@ use App\ProjectImport\ComposerPackageFetcher; use App\ProjectImport\PackageProviderInterface; use App\ProjectImport\PackageVersionFetcher; -use Doctrine\Common\Collections\ArrayCollection; use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; @@ -27,7 +26,6 @@ public function fetchPackagesReturnsArrayCollectionOfPackageVersion(): void { $packageVersions = $this->packageVersionFetcher->fetch('https://foo.git'); - $this->assertInstanceOf(ArrayCollection::class, $packageVersions); $this->assertCount(1, $packageVersions); $this->assertSame('v1.0.0', $packageVersions[0]->getPrettyVersion()); } From 3d11e8de9303f31dfb740dbe565c1320153f2553 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Mon, 18 May 2026 14:36:06 +0200 Subject: [PATCH 45/51] Add moe readonly modifiers --- src/App/Controller/WebhookController.php | 2 +- src/App/ProjectImport/DoctrinePackageProvider.php | 2 +- src/App/ProjectImport/DoctrineProjectProvider.php | 2 +- src/App/ProjectImport/LockFileFetcher.php | 2 +- src/App/ProjectImport/PackageVersionFetcher.php | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/App/Controller/WebhookController.php b/src/App/Controller/WebhookController.php index db239f7..d00d88d 100644 --- a/src/App/Controller/WebhookController.php +++ b/src/App/Controller/WebhookController.php @@ -16,7 +16,7 @@ class WebhookController public function __construct( private readonly ImportProjectTask $importProjectTask, #[Autowire(param: 'app.github.webhook_secret')] - private ?string $webhookSecret = null, + private readonly ?string $webhookSecret = null, ) { } diff --git a/src/App/ProjectImport/DoctrinePackageProvider.php b/src/App/ProjectImport/DoctrinePackageProvider.php index d4b1f0b..9ad033b 100644 --- a/src/App/ProjectImport/DoctrinePackageProvider.php +++ b/src/App/ProjectImport/DoctrinePackageProvider.php @@ -12,7 +12,7 @@ */ class DoctrinePackageProvider implements PackageProviderInterface { - public function __construct(private PackageRepository $packageRepository) + public function __construct(private readonly PackageRepository $packageRepository) { } diff --git a/src/App/ProjectImport/DoctrineProjectProvider.php b/src/App/ProjectImport/DoctrineProjectProvider.php index e0f1044..b0a773a 100644 --- a/src/App/ProjectImport/DoctrineProjectProvider.php +++ b/src/App/ProjectImport/DoctrineProjectProvider.php @@ -14,7 +14,7 @@ #[AsAlias(ProjectProviderInterface::class)] class DoctrineProjectProvider implements ProjectProviderInterface { - public function __construct(private ProjectRepository $projectRepository) + public function __construct(private readonly ProjectRepository $projectRepository) { } diff --git a/src/App/ProjectImport/LockFileFetcher.php b/src/App/ProjectImport/LockFileFetcher.php index 386b55d..a1bc043 100644 --- a/src/App/ProjectImport/LockFileFetcher.php +++ b/src/App/ProjectImport/LockFileFetcher.php @@ -9,7 +9,7 @@ class LockFileFetcher { - public function __construct(private VcsDriverFactory $vcsDriverFactory) + public function __construct(private readonly VcsDriverFactory $vcsDriverFactory) { } diff --git a/src/App/ProjectImport/PackageVersionFetcher.php b/src/App/ProjectImport/PackageVersionFetcher.php index a4893ac..d89713f 100644 --- a/src/App/ProjectImport/PackageVersionFetcher.php +++ b/src/App/ProjectImport/PackageVersionFetcher.php @@ -10,8 +10,8 @@ class PackageVersionFetcher { public function __construct( - private PackageProviderInterface $packageProvider, - private ComposerPackageFetcher $composerPackageFetcher, + private readonly PackageProviderInterface $packageProvider, + private readonly ComposerPackageFetcher $composerPackageFetcher, ) { } From 936a6c7e59daa0b7254c3be7325f73be99cc41fe Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Mon, 18 May 2026 14:40:38 +0200 Subject: [PATCH 46/51] Replace property with local variable --- src/App/Tests/ProjectImport/ImportProjectTaskTest.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/App/Tests/ProjectImport/ImportProjectTaskTest.php b/src/App/Tests/ProjectImport/ImportProjectTaskTest.php index 066ebf0..4fa472d 100644 --- a/src/App/Tests/ProjectImport/ImportProjectTaskTest.php +++ b/src/App/Tests/ProjectImport/ImportProjectTaskTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\Tests\Task; +namespace App\Tests\ProjectImport; use App\Factory\VcsDriverFactory; use App\ProjectImport\ImportProjectTask; @@ -20,19 +20,17 @@ class ImportProjectTaskTest extends KernelTestCase private ImportProjectTask $importProjectTask; private PackageVersionFetcher&Stub $packageVersionFetcher; - private VcsDriverFactory&Stub $vcsDriverFactory; protected function setUp(): void { parent::setUp(); self::bootKernel(); - $this->vcsDriverFactory = $this->createStub(VcsDriverFactory::class); $this->packageVersionFetcher = $this->createStub(PackageVersionFetcher::class); $this->importProjectTask = new ImportProjectTask( self::getContainer()->get(EntityManagerInterface::class), self::getContainer()->get(ProjectProviderInterface::class), $this->packageVersionFetcher, - $this->vcsDriverFactory, + $this->createStub(VcsDriverFactory::class), new NullLogger() ); } From 89fc2334c1bcd3f36b84d2eea88a41a4552a842e Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Mon, 18 May 2026 14:42:21 +0200 Subject: [PATCH 47/51] Narrow "mixed" return type --- src/App/Form/Type/VersionConstraintType.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/App/Form/Type/VersionConstraintType.php b/src/App/Form/Type/VersionConstraintType.php index 5130325..fdf180b 100644 --- a/src/App/Form/Type/VersionConstraintType.php +++ b/src/App/Form/Type/VersionConstraintType.php @@ -41,7 +41,7 @@ public function buildForm(FormBuilderInterface $builder, array $options): void $builder->get('value')->resetViewTransformers(); // hack to disable validation against empty list $builder->addModelTransformer(new class implements DataTransformerInterface { - public function transform(mixed $value): mixed + public function transform(mixed $value): ?array { if (null === $value) { return null; @@ -57,7 +57,7 @@ public function transform(mixed $value): mixed ]; } - public function reverseTransform(mixed $value): mixed + public function reverseTransform(mixed $value): ?VersionConstraint { if (null === $value) { return null; From 9d47fdb5355ab5ef07020281b76e0a59c071204e Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Mon, 18 May 2026 14:42:58 +0200 Subject: [PATCH 48/51] Sort named arguments --- src/App/Entity/PackageVersion.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App/Entity/PackageVersion.php b/src/App/Entity/PackageVersion.php index b3e2104..1059c7d 100644 --- a/src/App/Entity/PackageVersion.php +++ b/src/App/Entity/PackageVersion.php @@ -26,7 +26,7 @@ class PackageVersion #[ORM\Column(name: 'prettyVersion')] private readonly string $prettyVersion; - #[ORM\ManyToOne(targetEntity: Package::class, inversedBy: 'versions', cascade: ['persist'])] + #[ORM\ManyToOne(targetEntity: Package::class, cascade: ['persist'], inversedBy: 'versions')] private readonly Package $package; #[ORM\ManyToMany(targetEntity: Project::class, inversedBy: 'usages')] From 389f1b404b22ca05d30cca02f1e2c220561d4745 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Mon, 18 May 2026 14:43:28 +0200 Subject: [PATCH 49/51] Omit parentheses around new() calls --- src/App/Controller/UsageSearchController.php | 2 +- src/App/Entity/PackageVersion.php | 2 +- src/App/Entity/VersionConstraint.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/App/Controller/UsageSearchController.php b/src/App/Controller/UsageSearchController.php index 0481df1..dd8390c 100644 --- a/src/App/Controller/UsageSearchController.php +++ b/src/App/Controller/UsageSearchController.php @@ -57,7 +57,7 @@ public function searchResultsAction(string $package, string $operator, string $v throw new InvalidArgumentException('Operator query parameter must match '.VersionConstraint::VALID_OPERATORS); } - $normalizedVersionString = (new VersionParser())->normalize($versionString); + $normalizedVersionString = new VersionParser()->normalize($versionString); $versionConstraint = new VersionConstraint($operator, $normalizedVersionString); return new Response( diff --git a/src/App/Entity/PackageVersion.php b/src/App/Entity/PackageVersion.php index 1059c7d..cf7540d 100644 --- a/src/App/Entity/PackageVersion.php +++ b/src/App/Entity/PackageVersion.php @@ -79,7 +79,7 @@ public function getPrettyVersion(): string public function getNormalizedVersion(): string { - return (new VersionParser())->normalize($this->getPrettyVersion()); + return new VersionParser()->normalize($this->getPrettyVersion()); } public function getPackage(): Package diff --git a/src/App/Entity/VersionConstraint.php b/src/App/Entity/VersionConstraint.php index 586ccaa..f4b4ff8 100644 --- a/src/App/Entity/VersionConstraint.php +++ b/src/App/Entity/VersionConstraint.php @@ -24,7 +24,7 @@ public function __construct(string $operator, ?string $versionString) $this->operator = $operator; $this->normalizedVersionString = ('all' !== $operator) - ? (new VersionParser())->normalize($versionString) + ? new VersionParser()->normalize($versionString) : null; } From dd3344b166d2b53a13d1c0723e475c609b5b0dfd Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Mon, 18 May 2026 14:48:35 +0200 Subject: [PATCH 50/51] Fix: add (PackageRepository, ProjectRepository)->findOneByName() This method was lost when converting them to ServiceEntityRepositories. --- src/App/Repository/PackageRepository.php | 6 ++++++ src/App/Repository/ProjectRepository.php | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/App/Repository/PackageRepository.php b/src/App/Repository/PackageRepository.php index 564f66a..82a161e 100644 --- a/src/App/Repository/PackageRepository.php +++ b/src/App/Repository/PackageRepository.php @@ -19,4 +19,10 @@ public function add(Package $package): void { $this->getEntityManager()->persist($package); } + + public function findOneByName(string $name): ?Package + { + /* @var Package|null */ + return $this->findOneBy(['name' => $name]); + } } diff --git a/src/App/Repository/ProjectRepository.php b/src/App/Repository/ProjectRepository.php index 46df390..ef6ac8b 100644 --- a/src/App/Repository/ProjectRepository.php +++ b/src/App/Repository/ProjectRepository.php @@ -19,4 +19,10 @@ public function add(Project $project): void { $this->getEntityManager()->persist($project); } + + public function findOneByName(string $name): ?Project + { + /* @var Project|null */ + return $this->findOneBy(['name' => $name]); + } } From b0f0e683d9b69e80f318bab4e26627547aa48796 Mon Sep 17 00:00:00 2001 From: Malte Wunsch Date: Mon, 18 May 2026 14:50:23 +0200 Subject: [PATCH 51/51] Use newer php-cs-fixer, supporting PHP 8.4 syntax --- bin/php-cs-fixer | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/php-cs-fixer b/bin/php-cs-fixer index 8a1affc..ebf6ee0 100755 --- a/bin/php-cs-fixer +++ b/bin/php-cs-fixer @@ -1,6 +1,6 @@ #!/bin/bash -e -PHP_CS_FIXER_VERSION=${PHP_CS_FIXER_VERSION:-3.62.0-php8.3} +PHP_CS_FIXER_VERSION=${PHP_CS_FIXER_VERSION:-3.95.2-php8.4} if [ -t 1 ]; then TTY='--tty'; else TTY=''; fi exec docker run --rm --init --interactive $TTY -v $(pwd):/code ghcr.io/php-cs-fixer/php-cs-fixer:$PHP_CS_FIXER_VERSION fix "$@"